 DELIMITER $$

/*
	
*/

DROP PROCEDURE IF EXISTS `erp_instancje_tools`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `erp_instancje_tools`(
	IN _MODE VARCHAR(150),
	IN _Key VARCHAR(255),	
	-- IN _Param_A VARCHAR(255),
	IN _Param_A TEXT,
	IN _Param_B VARCHAR(255),
	IN _Param_C VARCHAR(255),
	IN _Param_D VARCHAR(255)
)
SPROC: BEGIN 
	/*
	_MODE
	------------------------------------------------------------------------------------------------------------------------------------------------------------
	
	------------------------------------------------------------------------------------------------------------------------------------------------------------
	*/
	
	DECLARE _SQLText TEXT DEFAULT '';
	DECLARE _SearchText VARCHAR(250);
	DECLARE _SearchTextWithoutSpaces VARCHAR(255) DEFAULT '';
	DECLARE _SearchTextTrimSpaces VARCHAR(255) DEFAULT '';
	DECLARE _SearchLen INTEGER;
	DECLARE _SearchLenAddr INTEGER;
	DECLARE _SearchIsMail BOOLEAN;
	
	IF (_MODE = 'dokumenty.view') THEN

		SELECT 
		n.idn, 
		ot.Status_After, _VarInt(ot.Status_After = 1) AS IsWyp, n.GUID, n.NrWewn, n.Rodzaj, n.Rodzaj_Typ, 
		n.DataWystaw,       ot.nazwa,       ot.opis, 
		n.nrdokmag, 
		IFNULL(z.nr_zlecenia, ' ') AS NrZlec, 
		IFNULL(n.DataWystaw, 'Brak daty operacji') AS DataOper, 
		CONCAT(o.Nazwisko, ' ', o.Imiona) AS Osoba, 
		(SELECT info FROM `v_hr_cards` WHERE Kind ='RCP' AND OsobaGuid = n.OsobaGUID) AS nr_przepustki, 
		n.OsobaGUID 
		FROM `opng` n 
		INNER JOIN `operdoc_typy` ot ON ot.rodzaj = n.rodzaj AND ot.typ = n.rodzaj_typ 
		LEFT JOIN `osoby` o ON o.GUID = n.OsobaGUID 
		LEFT JOIN zlec z ON z.GUID = n.zlecenieGUID 
	WHERE 
		n.deleted = 0 AND  
		(n.rodzaj IN (46,47) OR (n.rodzaj IN (11,12, 1, 5) AND n.rodzaj_typ IN (1,2)) )   
		AND IF(_Param_D=1,TRUE,n.datawystaw>=CURRENT_DATE - INTERVAL 7 DAY) 
	ORDER BY n.idn; 
		
		
	END IF;	
/* ************************************************************************************************************************************************************************
	egzemplarze
************************************************************************************************************************************************************************ */	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'egzemplarze.view'
	PO CO I GDZIE TO WOŁAMY ?????????????????????????????????????????????????????????????????????
	Pobiera instancje
		Parametry
			Brak
	CALL erp_instancje_tools('egzemplarze.view', '', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'egzemplarze.view') THEN
	
		DROP TEMPORARY TABLE IF EXISTS `t_view_instancje`;
		CREATE TEMPORARY TABLE `t_view_instancje` (
			`guid` VARCHAR(38) NOT NULL DEFAULT '', 
			`IleOsob` INT(11) NOT NULL DEFAULT '0',
			`Komunikaty` TEXT,
			`jest_komunikat` INT(11) NOT NULL DEFAULT '0',
			PRIMARY KEY (`guid`)
		)
		;
		INSERT IGNORE INTO `t_view_instancje`
			SELECT
				i.GUID, _VarInt(1) AS IleOsob, 
				(
				SELECT 
					-- bylo GROUP_CONCAT(DISTINCT(c.content)) 
					GROUP_CONCAT(DISTINCT(l.Customcontent))
				FROM `erp_descr_links` l, `erp_descr_content` c 
				WHERE 
					l.linkGUID = i.GUID AND 
					l.descrGUID = c.GUID 
					AND c.category = 'SERVICE'
				) AS komunikaty,
				0
				
			FROM `towrng_instancje` i	
			WHERE
				i.is_multi_instancje = 0
			-- LIMIT 20000	
		;	
		UPDATE `t_view_instancje` SET jest_komunikat = LENGTH(komunikaty) > 0;
		
		/*
		INSERT IGNORE INTO `t_view_instancje`
			SELECT
				i.GUID, COUNT(*) AS IleOsob
			FROM `towrng_instancje` i	
			WHERE
				i.is_multi_instancje = 1
			GROUP BY i.IdnTowr	
		;	*
		*/
		
		SELECT
			-- i.*,
			i.status_biblioteczny, 
			i.idn, i.guid, i.idntowr, i.kod_kreskowy, 
			IF(i.is_multi_instancje = 0, i.opis, t.Nazwa) AS Opis,
			CONCAT(t.Symbol, '/', t.Nazwa) AS SymbolNazwa,
			t.Symbol,
			t.Nazwa,
 			_VarInt(IF(i.is_multi_instancje = 0, i.STATUS, -2)) AS STATUS,
 			_VarStr(IF(i.is_multi_instancje = 0, i.osobaGUID, '')) AS osobaGUID, -- _przypisana
		 	IFNULL(
				IF(i.status_biblioteczny <= 0, 
					'', 
					IF(i.is_multi_instancje = 0, 
						CONCAT_WS(' ', o.Nazwisko, o.Imiona), 
						CONCAT('osob: ', (ti.IleOsob))
					)
				), ''
			) AS osoba, -- _przypisana
			-- o.firma,
			IFNULL(NULLIF(o.firma, ''), CONCAT_WS(' - ', NULL, k.Nazwa)) AS firma,
			o.Owner AS Oddzial,
			IFNULL(o.nazwa_dzialu, '') AS Wydzial,
			IF(i.status_biblioteczny <= 0, 
				'',
				/*	p. Janas nie chciał całego concata tylko samo stanow.
				CONCAT_WS(' - ', 
					IFNULL(NULLIF(stanow.stanowisko, ''), NULLIF(o.stanowisko, '')),
					NULLIF(
					CONCAT_WS(', ', 
						NULLIF(d.opis, ''),	--	dziala
						NULLIF(d.symbol, ''),
						NULLIF(o.nazwa_dzialu, '')
					), '')
				)
				*/
				IFNULL(NULLIF(stanow.stanowisko, ''), NULLIF(o.stanowisko, ''))
			) AS StanowiskoInfo,
 			--	 _ConcatStr(an.Symbol, IF(an.Symbol = an.Nazwa, '', an.Nazwa), ' - ') AS AreaSymbolNazwa,
			CONCAT_WS(' - ', an.Symbol, IF(an.Symbol <=> an.Nazwa, NULL, an.Nazwa)) AS AreaSymbolNazwa,
			i.nr_seryjny,
			i.uwagi,
			i.printed,
			i.areaGUID,
			i.datagwarancji, i.nrinwentarz, i.nrinwentarzobcy, i.miejsce, i.divisionGUID, i.status_info, i.serwis_data,
			i.magazyn, i.datawystaw, i.show_alert, i.alert_desc, i.is_multi_instancje
			,(SELECT IFNULL(vhc.ID,'')  FROM ht.hr_cards vhc WHERE IFNULL(vhc.OsobaGUID ,'') <> '' AND vhc.OsobaGUID = i.OsobaGUID AND LENGTH(vhc.ID) < 6 ORDER BY LENGTH(vhc.ID) LIMIT 1) AS nr_karty_RCP,
			/*	było ...
			(SELECT IFNULL(vhc.Info,'')  FROM ht.hr_cards vhc WHERE IFNULL(vhc.OsobaGUID ,'') <> '' AND vhc.OsobaGUID = i.OsobaGUID AND LENGTH(vhc.Info) < 6 ORDER BY LENGTH(vhc.Info) LIMIT 1) AS nr_przepustki,
			*/
			(
			SELECT IFNULL(vhrc.Info,'')
			FROM `v_hr_cards` vhrc 
			WHERE 
				TRUE
				AND vhrc.Kind ='RCP' 
				AND vhrc.OsobaGUID = i.OsobaGUID
				LIMIT 1
			) AS nr_przepustki,
			ti.jest_komunikat,
			ti.Komunikaty
			

		FROM `t_view_instancje` ti
		INNER JOIN `towrng_instancje` i ON i.GUID = ti.GUID
		INNER JOIN `TowrNg` t ON t.GUID = i.IdnTowr AND t.Deleted = 0
		LEFT JOIN `osoby` o ON o.GUID = i.OsobaGUID  -- _przypisana
		LEFT JOIN `kontrah` k ON k.GUID = o.kontrGUID
		LEFT JOIN `erp_area_nodes` an ON an.GUID = i.AreaGUID
		LEFT JOIN `Pracownicy` p ON p.GUID = o.GUID
		LEFT JOIN `stanowiska` stanow ON stanow.GUID = p.stanowisko
		LEFT JOIN `dzialy` d ON o.dzial = d.idn
		;	
		
		-- DROP TEMPORARY TABLE IF EXISTS `t_view_instancje`;
	END IF;	--	IF _MODE = 'egzemplarze.view'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'osobo-egzemplarze.view'
	Pobiera instancje osobowe
		Parametry
			_Param_B	Magazyn (UWAGA miejsce AreaGUID pobiorę z `Magazyny` pola AreaGUID 
	CALL erp_instancje_tools('osobo-egzemplarze.view', '', '', '201', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'osobo-egzemplarze.view') THEN
			SET @materialy.RW.AreaUID = '';
			SELECT
				IFNULL(m.areaGUID, '')
			INTO
				@materialy.RW.AreaUID
			FROM `Magazyny` m
			WHERE
			IdnMagazynu = _Param_B
			;
			
			SELECT
				t.GUID, 
				t.Symbol,
				t.Nazwa,
				t.lokalizacja1,
				CONCAT(t.Symbol, '/', t.Nazwa) AS SymbolNazwa,
				@_Dostawy_do_Mag := (SELECT _VarInt(SUM(IFNULL(tp.ILosc, 0))) FROM `TowrPo` tp WHERE tp.IdnTowr = t.GUID AND tp.Magazyn = _Param_B) AS Dostawy_do_Mag,
				-- _VarInt(SUM(IFNULL(tp.ILosc, 0))) AS Dostawy_do_Mag,
				_VarInt(SUM(IFNULL(i.ilosc_wydana, 0))) AS Ile_Wydano, 
				_VarInt(@_Dostawy_do_Mag - SUM(IFNULL(i.ilosc_wydana, 0))) AS Dostepne,
				_VarInt(COUNT(i.idn)) AS IleOsob, 
				_VarInt(SUM(IFNULL(i.Status_biblioteczny, 0) = 1)) AS IleOsobPobralo_I_MA, 
				t.kod_kreskowy, t.kod_kreskowy1, t.kod_kreskowy2,
				t.symboludost, t.SymbolProducenta
			FROM `TowrNg` t	
			LEFT JOIN `towrng_instancje` i ON i.IdnTowr = t.GUID AND i.AreaGUID = @materialy.RW.AreaUID	
			LEFT JOIN `TowrPo` tp ON tp.IdnTowr = t.GUID AND tp.Magazyn = _Param_B	-- tp.Magazyn IN (201, 202)
			WHERE
				t.is_multi_instancje = 1 
				AND t.Deleted = 0
			GROUP BY t.GUID
			-- LIMIT 20000	
		;	
	END IF;	--	IF _MODE = 'osobo-egzemplarze.view'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'osobo-egzemplarze.view.one'
	Pobiera instancje osobowe
		Parametry
			_Key 	Konkretny towar
	CALL erp_instancje_tools('osobo-egzemplarze.view.one', 'IND_30491f247b48e524c1449d3176fe72a3', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'osobo-egzemplarze.view.one') THEN
			SELECT
				t.GUID, 
				m.IdnMagazynu,
				m.Opis,
				_VarInt(SUM(IFNULL(tp.ILosc, 0))) AS Dostawy_do_Mag,
				_VarInt(SUM(IFNULL(i.ilosc_wydana, 0))) AS Ile_Wydano, 
				_VarInt(SUM(IFNULL(tp.ILosc, 0)) - SUM(IFNULL(i.ilosc_wydana, 0))) AS Dostepne,
				_VarInt(COUNT(i.idn)) AS IleOsob, 
				_VarInt(SUM(IFNULL(i.Status_biblioteczny, 0) = 1)) AS IleOsobPobralo_I_MA
			FROM `TowrNg` t	
			LEFT JOIN `TowrPo` tp ON tp.IdnTowr = t.GUID 
			LEFT JOIN `Magazyny` m ON m.IdnMagazynu = tp.Magazyn
			LEFT JOIN `towrng_instancje` i ON i.IdnTowr = t.GUID AND i.AreaGUID = m.AreaGUID
			WHERE
				t.is_multi_instancje = 1 AND t.deleted = 0 
				AND t.GUID = _Key
			GROUP BY t.GUID, m.IdnMagazynu
			-- LIMIT 20000	
		;	
	END IF;	--	IF _MODE = 'osobo-egzemplarze.view.one'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'materialy-RW.view'
	Pobiera instancje osobowe
		Parametry
			_Param_A	Szukane ciagi 
			_Param_B	Magazyn 
	CALL erp_instancje_tools('materialy-RW.view', '', '', '201', '', '');    --     mag 201
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'materialy-RW.view') THEN
		SET _Param_B = IF(_Param_B = '', 201, _Param_B);
			
		SET _SQLText =
			"
			SELECT
				t.GUID, 
				t.Symbol,
				t.Nazwa,
				t.lokalizacja1, 
				CONCAT(t.Symbol, '/', t.Nazwa) AS SymbolNazwa,
				SUM(IFNULL(tp.ILosc, 0)) AS Ilosc_W_Mag,
				t.kod_kreskowy, t.kod_kreskowy1, t.kod_kreskowy2,
				t.symboludost, t.SymbolProducenta 
				/*,
				Exists (
				SELECT i.GUID from `towrng_instancje` i where i.IdnTowr = t.GUID
				) AS MaEgz */
			FROM `TowrNg` t	
			LEFT JOIN `TowrPo` tp ON tp.IdnTowr = t.GUID AND tp.Magazyn = #Magazyn#	-- tp.Magazyn IN (201, 202)
			WHERE
				t.is_multi_instancje = 0
				AND
				t.Usluga = 0
				AND
				t.deleted = 0
				AND (
					select w.narzedziownia != 0 from wyrozniki w where w.symbol = t.wyroznik
				)
				
				AND
				(
				SELECT w.narzedziownia != 0 FROM wyrozniki w WHERE w.symbol = t.wyroznik
				)				
				AND
				NOT EXISTS (
				SELECT i.GUID FROM `towrng_instancje` i WHERE i.IdnTowr = t.GUID
				)
				AND
				#WHERE_SEARCH#
			GROUP BY t.GUID
			;	
			"
		;
		IF _Param_A != '' THEN
			SET @_SQLText.WHERE_SEARCH =_SQL_multilike('AND', _Param_A, 't.nazwa&t.symbol&t.kod_kreskowy&t.kod_kreskowy1','','');
		ELSE
			SET @_SQLText.WHERE_SEARCH = 'TRUE';
		END IF;
		
		SET _SQLText = REPLACE(_SQLText, '#WHERE_SEARCH#', @_SQLText.WHERE_SEARCH);
		
		SET _SQLText = REPLACE(_SQLText, '_SearchText', QUOTE(_SearchText));
		SET _SQLText = REPLACE(_SQLText, '#Magazyn#', _Param_B);
		SET @_SQLText = _SQLText;
		CALL _ExecuteCmd(_SQLText, @Error);
			
	END IF;	--	IF _MODE = 'materialy-RW.view'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'materialy-RW.view.one'
	Pobiera instancje osobowe
		Parametry
			_Param_B	Magazyn 
	CALL erp_instancje_tools('materialy-RW.view.one', 'TOWAR', '', '201', '', '');    --     mag 201
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'materialy-RW.view.one') THEN
			SELECT
				t.GUID, 
				IFNULL(m.IdnMagazynu, 0) AS IdnMagazynu,
				IFNULL(m.Opis, '') AS Opis,
				_VarInt(SUM(IFNULL(tp.ILosc, 0))) AS Dostawy_do_Mag
			FROM `TowrNg` t	
			LEFT JOIN `TowrPo` tp ON tp.IdnTowr = t.GUID 
			LEFT JOIN `Magazyny` m ON m.IdnMagazynu = tp.Magazyn
			WHERE
				t.deleted = 0 
				AND t.GUID = _Key
			GROUP BY t.GUID, m.IdnMagazynu
			-- LIMIT 20000	
		;	
	END IF;	--	IF _MODE = 'materialy-RW.view.one'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'egzemplarze.search.kodkreskowy'
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Key	Szukany ciąg
			
	CALL erp_instancje_tools('egzemplarze.search.kodkreskowy', 'NRK00001', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'egzemplarze.search.kodkreskowy') THEN
		SELECT 
		-- nr_seryjny,
			IF(i.Kod_Kreskowy = _Key, 
				'Kod kreskowy', 
				IF(i.nr_seryjny = _Key, 
					'Numer seryjny', 
					IF(i.nrinwentarz = _Key, 
						'Numer inwentarzowy', 
						''
					)
				)
			) AS Found_On,
			i.*, 
			YEAR(i.dataprodukcji) AS rok, 
			(SELECT COUNT(*) FROM dokumenty  d WHERE d.klucz = i.guid AND nazwa='PHOTO_SERIAL_NO') AS ile_zdj_sn
		FROM  `v_instancje` i 
		WHERE 
		-- i.GUID = '$guid'
		FALSE
			OR	(i.Kod_Kreskowy = _Key)
			OR 	(i.nr_seryjny = _Key)
			OR	(i.nrinwentarz = _Key)
		ORDER BY i.IDN
		LIMIT 1
		;
		
	END IF;	--	IF _MODE = 'egzemplarze.search'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'egzemplarze.search'
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Key	Szukany ciąg
			
	CALL erp_instancje_tools('egzemplarze.search', 'NRK00001', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'egzemplarze.search') THEN
		CALL erp_search_similar('SEARCH_INSTANCJE_LIKE', _Key, '', '', '', '');
	END IF;	--	IF _MODE = 'egzemplarze.search'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	NOWA 2016-08-08 !!!!!!!!!!!!!
	'instancje.search.for.edit'
	uniwersalna zastepujaca 
	'egzemplarze.search.for.edit'
	oraz
	'egzemplarze.osobo.search.for.edit'
	
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Key	Szukany ciąg
			_Param_A	gdy <> '' to zastosuj wyszukiwanie segmentowe
			_Param_B	gdy '' lub 0 to instanche gdy <> '' to osobomloty
			_Param_C	gdy <> '' to wyszukuj wszystko nawet gdy pusty ciag
			_Param_D	gdy <> '' to zostaw tempa i nie rób selecta
						gdy = '' to select a temp dropuj
	CALL erp_instancje_tools('instancje.search.for.edit', 'NRK00001', '', '', '', '');
	CALL erp_instancje_tools('instancje.search.for.edit', 'NRK00001', '', '1', '', ''); -- osobo mloty
	CALL erp_instancje_tools('instancje.search.for.edit', 'wierta', '', 'ALL', '', ''); -- szukaj po wszystkich
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'instancje.search.for.edit') THEN
		SET _Param_D = IFNULL(_Param_D, '');
		SET @_Value := '??';	
		SET _SearchText = IFNULL(_Key, '');
		SET _SearchTextWithoutSpaces = _varSTR_Flush_Spaces(_SearchText);
		SET _SearchLen = LENGTH(_SearchText);
	--	UWAGA tutaj na potrzerbu CRIST  i Rafała G. dodaje na sztywno ...
		SET _SearchLen = 5;
	--	... ABY zawsze wyszukiwał a nie tylko dla > 3 (np. słowa wąż nie sa wyszukiwane bo maja tylko 3 litery)
		SET _SearchLenAddr = LENGTH(_SearchTextWithoutSpaces);
		SET _SearchIsMail = LOCATE('@', _SearchTextWithoutSpaces) > 0; -- select _SearchIsMail;
		SET
			@srch_instancje_kod_kreskowy := FALSE,
			@srch_instancje_nr_seryjny := FALSE, 
			@srch_instancje_Opis := FALSE,
			@srch_instancje_nrinwentarz := FALSE,
			@srch_instancje_TowrNazwa := FALSE,
			@srch_instancje_TowrSymbol := FALSE,
			@srch_instancje_nrinwentarzobcy := FALSE
		;
		
		DROP TEMPORARY TABLE IF EXISTS `t_search_instancje`;
		SET _SQLText =
		"
		CREATE TEMPORARY TABLE `t_search_instancje`   -- komentarz
			SELECT 	
				_VarStr(
					IF(@srch_instancje_kod_kreskowy, 
						CONCAT('', ti.kod_kreskowy),
						IF(@srch_instancje_nr_seryjny,
							CONCAT('', ti.nr_seryjny),
							IF(@srch_instancje_Opis,
								CONCAT('', ti.opis),
								IF(@srch_instancje_nrinwentarz,
									CONCAT('', ti.nrinwentarz, ' - ', t.Nazwa, ' ', t.Symbol),
									IF(@srch_instancje_TowrNazwa,
										CONCAT('', t.Nazwa, ' ', t.Symbol),
										IF(@srch_instancje_TowrSymbol, 
											CONCAT('', t.symbol, ' - ', t.Nazwa),
											IF(@srch_instancje_nrinwentarzobcy, 
												CONCAT('', ti.nrinwentarzobcy),
												CONCAT('', ti.kod_kreskowy)
											)
										)	
									)
								)	
							)	
						) 
					)	
				) AS InstancjaSearch,
				_VarStr(
					IFNULL(
						GROUP_CONCAT(DISTINCT 
							IF(@srch_instancje_kod_kreskowy, 
								CONCAT('kod kreskowy: ', ti.kod_kreskowy, ' - ', ti.opis),
								IF(@srch_instancje_nr_seryjny,
									CONCAT('nr seryjny: ', ti.nr_seryjny, ' - ', ti.opis),
									IF(@srch_instancje_Opis,
										CONCAT('opis: ', ti.opis),
										IF(@srch_instancje_nrinwentarz,
											CONCAT('nr inwen: ', ti.nrinwentarz, ' - ', t.Nazwa, ' ', t.Symbol, ' - ', ti.opis),
											IF(@srch_instancje_TowrNazwa,
												CONCAT('towar: ', t.Nazwa, IF(t.Symbol != t.Nazwa AND LOCATE(t.Nazwa, t.Symbol) = 0, CONCAT(' ', t.Symbol), ''), ' - ', ti.opis),
												IF(@srch_instancje_TowrSymbol, 
													CONCAT('towar: ', t.symbol, IF(t.Symbol != t.Nazwa AND LOCATE(t.Nazwa, t.Symbol) = 0, CONCAT(' ', t.Nazwa), ''), ' - ', ti.opis),
													IF(@srch_instancje_nrinwentarzobcy, 
														CONCAT('nr inwentarz.obcy: ', ti.nrinwentarzobcy, ' - ', ti.opis),
														NULL
													)
												)	
											)
										)	
									) 
								) 
							)	
						SEPARATOR ', '
						),
						'*'
					)	
				) AS LabelSearch,
				ti.GUID AS GUID,
				t.GUID AS IdnTowr,
				t.is_multi_instancje,
				_VarStr(@IsEqu := CONCAT(
					IF(ti.kod_kreskowy = _SearchText, 'kod_kreskowy;', ''),
					IF(ti.nr_seryjny = _SearchText, 'nr_seryjny;', ''),
					IF(ti.nrinwentarz = _SearchText, 'nrinwentarz;', '')
				)) EquInfo,
				_VarInt(@IsEqu != '') AS IsEqu
			#FROM_Table#
			#JOIN_Table#
			-- FROM `towrng_instancje` ti
			-- INNER JOIN `TowrNg` t ON t.GUID = ti.IdnTowr 
			WHERE		
				#WHERE_is_multi_instancje#
				AND t.Deleted = 0
				AND
				#SEARCH.WHERE#
			-- GROUP BY ti.GUID
			-- GROUP BY IdnTowr, ti.Kod_Kreskowy
			GROUP BY #GROUP BY#
			ORDER BY InstancjaSearch
			LIMIT 200
		;
		"
		;
				
				
		SET _Param_A = IFNULL(_Param_A, '');
		IF _Param_A = '' THEN
		--	zastosuj normalne standardowe wyszukiwanie
			SET @_SQLText.SEARCH.WHERE = 
			"
				(
					(@srch_instancje_kod_kreskowy := IF(_SearchLen < 3, #FALSE#, ti.kod_kreskowy LIKE CONCAT(_SearchText, '%')))
					OR
					(@srch_instancje_nr_seryjny := IF(_SearchLen < 3, #FALSE#, ti.nr_seryjny LIKE CONCAT(_SearchText, '%')))
					OR
					(@srch_instancje_Opis := IF(_SearchLen < 4, #FALSE#, ti.Opis LIKE CONCAT('%', _SearchText, '%')))
					OR
					(@srch_instancje_nrinwentarz := IF(_SearchLen < 3, #FALSE#, ti.nrinwentarz LIKE CONCAT(_SearchText, '%')))
					OR
					(@srch_instancje_TowrNazwa := IF(_SearchLen < 4, #FALSE#, t.Nazwa LIKE CONCAT('%', _SearchText, '%')))
					OR
					(@srch_instancje_TowrSymbol := IF(_SearchLen < 4, #FALSE#, t.Symbol LIKE CONCAT(_SearchText, '%')))
					OR
					(@srch_instancje_nrinwentarzobcy := IF(_SearchLen < 3, #FALSE#, ti.nrinwentarzobcy LIKE CONCAT(_SearchText, '%')))
				)
			"
			;
		ELSE
		--	zastosuj wyszukiwanie segmentowe
			SET @_SQLText.SEARCH.WHERE = CONCAT(
				'@srch_instancje_TowrNazwa := ', 
				_SQL_multilike('AND', _SearchText, 'ti.kod_kreskowy&ti.nr_seryjny&ti.Opis&ti.nrinwentarz&t.nazwa&t.symbol&ti.nrinwentarzobcy','','')
				);
		END IF;
		
		SET _SQLText = REPLACE(_SQLText, '#SEARCH.WHERE#',  @_SQLText.SEARCH.WHERE);
		
		SET _Param_B = IFNULL(_Param_B, '');
		SET @_JakieEgzemplarze = 
			IF(_Param_B IN ('', '0'), 
				'Tylko egzemplarze',
				IF(_Param_B = 'ALL', 
					'Wszystkie',
					'Tylko Osobo-Mloty'
				)
			)
		;
			-- FROM `towrng_instancje` ti
			-- INNER JOIN `TowrNg` t ON t.GUID = ti.IdnTowr 
		SET _SQLText = REPLACE(_SQLText, '#FROM_Table#', 
			IF(@_JakieEgzemplarze <> 'Tylko egzemplarze',
				'FROM `TowrNg` t',
				'FROM `towrng_instancje` ti'
			)
		);
		SET _SQLText = REPLACE(_SQLText, '#JOIN_Table#', 
			IF(@_JakieEgzemplarze = 'Tylko Osobo-Mloty',
				'LEFT JOIN `towrng_instancje` ti ON ti.IdnTowr = t.GUID',
				IF(@_JakieEgzemplarze = 'Wszystkie',
					'LEFT JOIN `towrng_instancje` ti ON ti.IdnTowr = t.GUID -- OR t.is_multi_instancje <> 0',
					'INNER JOIN `TowrNg` t ON t.GUID = ti.IdnTowr'
				)
			)
		);
		SET _SQLText = REPLACE(_SQLText, '#WHERE_is_multi_instancje#', 
			CASE @_JakieEgzemplarze 
			WHEN 'Tylko Osobo-Mloty' THEN 't.is_multi_instancje = 1'
			WHEN 'Tylko egzemplarze' THEN 't.is_multi_instancje = 0'
			ELSE 'TRUE'
			END
		);
		SET _SQLText = REPLACE(_SQLText, '#GROUP BY#', 
			CASE @_JakieEgzemplarze 
			WHEN 'Tylko Osobo-Mloty' THEN 't.GUID'
			WHEN 'Tylko egzemplarze' THEN 'ti.IdnTowr, ti.Kod_Kreskowy'
			ELSE 'IFNULL(ti.IdnTowr, t.IdnTowr), ti.Kod_Kreskowy'
			END
		);
		
		SET _SQLText = REPLACE(_SQLText, '#WHERE_is_multi_instancje#', 
			IF(_Param_B IN ('', '0'), 
				'ti.is_multi_instancje = 0',
				IF(_Param_B = 'ALL', 
					'TRUE',
					'ti.is_multi_instancje = 1'
				)
			)
		);
		SET _SQLText = REPLACE(_SQLText, '#FALSE#', IF(_Param_C != '', 'TRUE', 'FALSE'));
		
		SET _SQLText = REPLACE(_SQLText, '_SearchText', QUOTE(_SearchText));
		SET _SQLText = REPLACE(_SQLText, '_SearchLen', _SearchLen);
		SET @_SQLText = _SQLText;
		CALL _ExecuteCmd(_SQLText, @Error);
		
		IF _Param_D = '' THEN
			SELECT * FROM `t_search_instancje`;
			DROP TEMPORARY TABLE IF EXISTS `t_search_instancje`;
		END IF;	
	END IF;	--	IF _MODE = 'instancje.search.for.edit'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'egzemplarze.search.for.edit'
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Key	Szukany ciąg
			_Param_D	gdy <> '' to zostaw tempa i nie rób selecta
						gdy = '' to select a temp dropuj
	CALL erp_instancje_tools('egzemplarze.search.for.edit', 'NRK00001', '', '', '', '');
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'egzemplarze.search.for.edit') THEN
		SET _Param_D = IFNULL(_Param_D, '');
		SET @_Value := '??';	--	Tak trzeba!!!!!!!!!!!!! PATRZ PIM_PhoneNumber
		SET _SearchText = IFNULL(_Key, '');
		SET _SearchTextWithoutSpaces = _varSTR_Flush_Spaces(_SearchText);
		SET _SearchLen = LENGTH(_SearchText);
		SET _SearchLenAddr = LENGTH(_SearchTextWithoutSpaces);
		SET _SearchIsMail = LOCATE('@', _SearchTextWithoutSpaces) > 0; -- select _SearchIsMail;
		SET
			@srch_instancje_kod_kreskowy := FALSE,
			@srch_instancje_nr_seryjny := FALSE, 
			@srch_instancje_Opis := FALSE,
			@srch_instancje_nrinwentarz := FALSE,
			@srch_instancje_TowrNazwa := FALSE,
			@srch_instancje_TowrSymbol := FALSE,
			@srch_instancje_nrinwentarzobcy := FALSE
		;
		
		DROP TEMPORARY TABLE IF EXISTS `t_search_egzemplarze`;
		CREATE TEMPORARY TABLE `t_search_egzemplarze`
			SELECT 	
				_VarStr(
					IF(@srch_instancje_kod_kreskowy, 
						CONCAT('', ti.kod_kreskowy),
						IF(@srch_instancje_nr_seryjny,
							CONCAT('', ti.nr_seryjny),
							IF(@srch_instancje_Opis,
								CONCAT('', ti.opis),
								IF(@srch_instancje_nrinwentarz,
									CONCAT('', ti.nrinwentarz, ' - ', t.Nazwa, ' ', t.Symbol),
									IF(@srch_instancje_TowrNazwa,
										CONCAT('', t.Nazwa, ' ', t.Symbol),
										IF(@srch_instancje_TowrSymbol, 
											CONCAT('', t.symbol, ' - ', t.Nazwa),
											IF(@srch_instancje_nrinwentarzobcy, 
												CONCAT('', ti.nrinwentarzobcy),
												CONCAT('', ti.kod_kreskowy)
											)
										)	
									)
								)	
							)	
						) 
					)	
				) AS InstancjaSearch,
				_VarStr(
					IFNULL(
						GROUP_CONCAT(DISTINCT 
							IF(@srch_instancje_kod_kreskowy, 
								CONCAT('kod kreskowy: ', ti.kod_kreskowy, ' - ', ti.opis),
								IF(@srch_instancje_nr_seryjny,
									CONCAT('nr seryjny: ', ti.nr_seryjny, ' - ', ti.opis),
									IF(@srch_instancje_Opis,
										CONCAT('opis: ', ti.opis),
										IF(@srch_instancje_nrinwentarz,
											CONCAT('nr inwen: ', ti.nrinwentarz, ' - ', t.Nazwa, ' ', t.Symbol, ' - ', ti.opis),
											IF(@srch_instancje_TowrNazwa,
												CONCAT('towar: ', t.Nazwa, IF(t.Symbol != t.Nazwa AND LOCATE(t.Nazwa, t.Symbol) = 0, CONCAT(' ', t.Symbol), ''), ' - ', ti.opis),
												IF(@srch_instancje_TowrSymbol, 
													CONCAT('towar: ', t.symbol, IF(t.Symbol != t.Nazwa AND LOCATE(t.Nazwa, t.Symbol) = 0, CONCAT(' ', t.Nazwa), ''), ' - ', ti.opis),
													IF(@srch_instancje_nrinwentarzobcy, 
														CONCAT('nr inwentarz.obcy: ', ti.nrinwentarzobcy, ' - ', ti.opis),
														NULL
													)
												)	
											)
										)	
									) 
								) 
							)	
						SEPARATOR ', '
						),
						'*'
					)	
				) AS LabelSearch,
				ti.GUID AS GUID,
				ti.IdnTowr,
				ti.is_multi_instancje,
				_VarStr(@IsEqu := CONCAT(
					IF(ti.kod_kreskowy = _SearchText, 'kod_kreskowy;', ''),
					IF(ti.nr_seryjny = _SearchText, 'nr_seryjny;', ''),
					IF(ti.nrinwentarz = _SearchText, 'nrinwentarz;', '')
				)) EquInfo,
				_VarInt(@IsEqu != '') AS IsEqu
			FROM `towrng_instancje` ti
			INNER JOIN `TowrNg` t ON t.GUID = ti.IdnTowr 
			WHERE		
				ti.is_multi_instancje = 0
				AND t.Deleted = 0
				AND
				(
					(@srch_instancje_kod_kreskowy := IF(_SearchLen < 3, FALSE, ti.kod_kreskowy LIKE CONCAT(_SearchText, '%')))
					OR
					(@srch_instancje_nr_seryjny := IF(_SearchLen < 3, FALSE, ti.nr_seryjny LIKE CONCAT(_SearchText, '%')))
					OR
					(@srch_instancje_Opis := IF(_SearchLen < 4, FALSE, ti.Opis LIKE CONCAT('%', _SearchText, '%')))
					OR
					(@srch_instancje_nrinwentarz := IF(_SearchLen < 3, FALSE, ti.nrinwentarz LIKE CONCAT(_SearchText, '%')))
					OR
					(@srch_instancje_TowrNazwa := IF(_SearchLen < 4, FALSE, t.Nazwa LIKE CONCAT('%', _SearchText, '%')))
					OR
					(@srch_instancje_TowrSymbol := IF(_SearchLen < 4, FALSE, t.Symbol LIKE CONCAT(_SearchText, '%')))
					OR
					(@srch_instancje_nrinwentarzobcy := IF(_SearchLen < 3, FALSE, ti.nrinwentarzobcy LIKE CONCAT(_SearchText, '%')))
				)
			-- GROUP BY ti.GUID
			GROUP BY ti.IdnTowr, ti.Kod_Kreskowy
			ORDER BY InstancjaSearch
			LIMIT 200
		;	
		IF _Param_D = '' THEN
			SELECT * FROM `t_search_egzemplarze`;
			DROP TEMPORARY TABLE IF EXISTS `t_search_egzemplarze`;
		END IF;	
	END IF;	--	IF _MODE = 'egzemplarze.search.for.edit'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'egzemplarze.osobo.search.for.edit'
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Key	Szukany ciąg
			_Param_D	gdy <> '' to zostaw tempa i nie rób selecta
						gdy = '' to select a temp dropuj
	CALL erp_instancje_tools('egzemplarze.osobo.search.for.edit', 'NRK00001', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'egzemplarze.osobo.search.for.edit') THEN
		SET _Param_D = IFNULL(_Param_D, '');
		SET @_Value := '??';	--	Tak trzeba!!!!!!!!!!!!! PATRZ PIM_PhoneNumber
		SET _SearchText = IFNULL(_Key, '');
		SET _SearchText = IF(LOCATE('#', _SearchText) = 1, SUBSTR(_SearchText, 2, 255), _SearchText);
		SET _SearchTextWithoutSpaces = _varSTR_Flush_Spaces(_SearchText);
		SET _SearchLen = LENGTH(_SearchText);
		SET _SearchLenAddr = LENGTH(_SearchTextWithoutSpaces);
		SET _SearchIsMail = LOCATE('@', _SearchTextWithoutSpaces) > 0; -- select _SearchIsMail;
		
		DROP TEMPORARY TABLE IF EXISTS `t_search_osobo_egzemplarze`;
		CREATE TEMPORARY TABLE `t_search_osobo_egzemplarze`
			SELECT 	
				_VarStr(
					IF(t.Nazwa LIKE CONCAT('%', _SearchText, '%'),
						LTRIM(CONCAT(t.Nazwa, ' ', t.Symbol)),
						IF(t.symboludost LIKE CONCAT(_SearchText, '%'), 
							LTRIM(CONCAT(t.symboludost, ' - ', t.Nazwa)),
							IF(t.SymbolProducenta LIKE CONCAT(_SearchText, '%'), 
								LTRIM(CONCAT(t.SymbolProducenta, '  ', t.Nazwa)),
								LTRIM(CONCAT(t.Symbol, ' ', t.Nazwa))
							)
						)	
					)
				) AS Towar,
				_VarStr(
					IFNULL(
						-- GROUP_CONCAT(DISTINCT 
							IF(t.symboludost LIKE CONCAT(_SearchText, '%'), 
								CONCAT('u dostawcy: ', t.symboludost), 
								IF(t.SymbolProducenta LIKE CONCAT(_SearchText, '%'), 
									CONCAT('u producenta: ', t.SymbolProducenta), 
									IF(t.kod_kreskowy LIKE CONCAT(_SearchText, '%'), 
										CONCAT('kod kreskowy: ', t.kod_kreskowy), 
										IF(t.kod_kreskowy1 LIKE CONCAT(_SearchText, '%'), 
											CONCAT('kod kreskowy II: ', t.kod_kreskowy1), 
											IF(t.kod_kreskowy2 LIKE CONCAT(_SearchText, '%'), 
												CONCAT('kod kreskowy III: ', t.kod_kreskowy2), 
												IF(t.Nazwa LIKE CONCAT('%', _SearchText, '%'),
													LTRIM(CONCAT('T:', t.Nazwa, ' ', t.Symbol)),
													LTRIM(CONCAT(t.Symbol, ' ', t.Nazwa))
												)	
											)	
										)	
									)	
								) 
							)	
						-- SEPARATOR ', '
						-- )
						,
						'*'
					)	
				) AS LabelSearch,
				t.GUID AS IdnTowr
			FROM `TowrNg` t
			WHERE		
				t.is_multi_instancje != 0
				AND t.Deleted = 0
				AND
				(
					IF(_SearchLen < 4, FALSE, t.Nazwa LIKE CONCAT('%', _SearchText, '%'))
					OR
					t.Symbol LIKE CONCAT(_SearchText, '%')
					OR
					IF(_SearchLen < 3, FALSE, t.symboludost LIKE CONCAT(_SearchText, '%'))
					OR
					IF(_SearchLen < 3, FALSE, t.SymbolProducenta LIKE CONCAT(_SearchText, '%'))
					OR
					IF(_SearchLen < 3, FALSE, t.kod_kreskowy LIKE CONCAT(_SearchText, '%'))
					OR
					IF(_SearchLen < 3, FALSE, t.kod_kreskowy1 LIKE CONCAT(_SearchText, '%'))
					OR
					IF(_SearchLen < 3, FALSE, t.kod_kreskowy2 LIKE CONCAT(_SearchText, '%'))
				)
			-- GROUP BY t.GUID
			ORDER BY Towar
			LIMIT 200
		;	
		IF _Param_D = '' THEN
			SELECT * FROM `t_search_osobo_egzemplarze`;
			DROP TEMPORARY TABLE IF EXISTS `t_search_osobo_egzemplarze`;
		END IF;	
	END IF;	--	IF _MODE = 'egzemplarze.osobo.search.for.edit'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	A gdzie to wołamy????????????????
	a może
	dać
	CALL towrng_instancje_serwis('select.do.serwisu', '', '', '', '', '', '', '', '');
	'egzemplarze.osoby'
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Key	Osoba
			
	CALL erp_instancje_tools('egzemplarze.osoby', 'OsobaGUID', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'egzemplarze.osoby') THEN
		SET _Key = IFNULL(_Key, '');
		/* było
		SELECT
			i.GUID,
			i.idntowr,
			i.kod_kreskowy,
			i.nr_seryjny,
			i.nrinwentarz,
			i.Nazwa,
			i.opis,
			i.status,
			i.status_biblioteczny,
			i.is_multi_instancje,
			i.serwis_data,
			i.serwis_cykl_dni,
			i.serwis_alert_dni,
			i.Ilosc_wydana,
			i.Dni_do_serwisu,
			t.nazwa as towrnazwa,			
			i.IsAlert,
			_VarStr(
				IF(i.IsAlert AND i.Status != -2, 
					CONCAT(IF(i.Dni_do_serwisu > 0, 'Do przeglądu pozostało: ', 'Jest już po terminie: '), _varSTR_1_N_Liczebnikowo(ABS(i.Dni_do_serwisu), 'dzień', 'dni')), 
					IF(i.Status = -2, '        W serwisie', '')
				)
			) AS IsAlertMsg,
			i.osoba_uzytk_Nazwisko_Imiona AS `osoba_uzytk_Nazwisko_Imiona`,
			i.osoba_przypisana AS `osoba_przyp_Nazwisko_Imiona`,
			i.AreaSymbolNazwa AS AreaSymbolNazwa,
			n.KontrGUID,
			CONCAT(k.Symbol, ' - ' , k.Nazwa) AS KontrahSymbolNazwa
		FROM `v_towrng_instancje` i
		LEFT JOIN `oppo_instancje` oi ON oi.GUID = i.Last_Op_GUID
		INNER JOIN `TowrNg` t ON t.GUID = i.idntowr
		LEFT JOIN `opng` n ON n.GUID = oi.IdnOper
		LEFT JOIN `kontrah` k ON k.GUID = n.KontrGUID
		WHERE
			i.OsobaGUID = _Key
			AND t.Deleted = 0
			AND status_biblioteczny != 0
		;
		*/
		
		SELECT
			i.GUID,
			i.idntowr,
			i.kod_kreskowy,
			i.nr_seryjny,
			i.nrinwentarz,
			i.Nazwa,
			i.opis,
			i.status,
			i.status_biblioteczny,
			i.is_multi_instancje,
			i.serwis_data,
			i.serwis_cykl_dni,
			i.serwis_alert_dni,
			i.Ilosc_wydana,
			i.Dni_do_serwisu,
			i.nazwa AS towrnazwa,			
			i.IsAlert,
			_VarStr(
				IF(i.IsAlert AND i.Status != -2, 
					CONCAT(IF(i.Dni_do_serwisu > 0, 'Do przeglądu pozostało: ', 'Jest już po terminie: '), _varSTR_1_N_Liczebnikowo(ABS(i.Dni_do_serwisu), 'dzień', 'dni')), 
					IF(i.Status = -2, '        W serwisie', '')
				)
			) AS IsAlertMsg,
			i.osoba AS `osoba_uzytk_Nazwisko_Imiona`,
			i.osoba_przypisana AS `osoba_przyp_Nazwisko_Imiona`,
			i.AreaSymbolNazwa AS AreaSymbolNazwa,
			n.KontrGUID,
			CONCAT(k.Symbol, ' - ' , k.Nazwa) AS KontrahSymbolNazwa
		FROM `v_instancje` i
		LEFT JOIN `op_instancje_det` oid ON oid.IDN = i.Last_Op_IDN
		LEFT JOIN `op_instancje` oi ON oi.ID = oid.ID_ng
		LEFT JOIN `opng` n ON n.GUID = oi.IdnOper
		LEFT JOIN `kontrah` k ON k.GUID = n.KontrGUID
		WHERE
			i.OsobaGUID = _Key
			-- AND t.Deleted = 0
			AND i.status_biblioteczny != 0
		;
		
	END IF;	--	IF _MODE = 'egzemplarze.osoby'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'egzemplarze.wydane.osoby.zestawienie'
	Pobiera dla osoby _Key 
		Parametry
			_Key Osoba
			
	CALL erp_instancje_tools('egzemplarze.wydane.osoby.zestawienie', 'OsobaGUID', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'egzemplarze.wydane.osoby.zestawienie') THEN
		SET _Key = IFNULL(_Key, '');
		DROP TEMPORARY TABLE IF EXISTS `t_egzemplarze_i_mater_osoby`;
		CREATE TEMPORARY TABLE `t_egzemplarze_i_mater_osoby`
		SELECT
			i.GUID,
			_VarStr('') AS Grp,
			i.idntowr,
			i.serwis_data AS DataOper,
			i.Nazwa AS nazwa,			
			i.opis,
			
			i.kod_kreskowy,
			i.nr_seryjny,
			i.nrinwentarz,
			i.status,
			i.status_biblioteczny,
			i.Ilosc_wydana,
			i.opis AS IsAlertMsg,
			i.osoba_przypisana AS `osoba_odpowiedzialna`,
			i.AreaSymbolNazwa AS Narz_Nazwa,
			i.is_multi_instancje,
			i.serwis_data,
			i.serwis_cykl_dni,
			i.serwis_alert_dni,
			i.Dni_do_serwisu,
			i.IsAlert
		FROM `v_towrng_instancje` i
		WHERE
			FALSE
		;
		ALTER TABLE `t_egzemplarze_i_mater_osoby` ADD PRIMARY KEY GUID (GUID);
		INSERT IGNORE INTO `t_egzemplarze_i_mater_osoby`
		/* było
			SELECT
				i.GUID,
				'Egzemplarze' AS Grp,
				i.idntowr,
				oi.DataOper AS DataOper,
				CONCAT(t.nazwa, IF(LOCATE(i.Nazwa, t.nazwa) = 0, CONCAT(', ', i.Nazwa), '')) AS nazwa,			
				-- i.Nazwa,
				i.opis,
				
				i.kod_kreskowy,
				i.nr_seryjny,
				i.nrinwentarz,
				i.status,
				i.status_biblioteczny,
				i.Ilosc_wydana,
				_VarStr(
					IF(i.IsAlert AND i.Status != -2, 
						CONCAT(IF(i.Dni_do_serwisu > 0, 'Do przeglądu pozostało: ', 'Jest już po terminie: '), _varSTR_1_N_Liczebnikowo(ABS(i.Dni_do_serwisu), 'dzień', 'dni')), 
						IF(i.Status = -2, '        W serwisie', '')
					)
				) AS IsAlertMsg,
				i.osoba_przypisana AS `osoba_odpowiedzialna`,
				i.AreaSymbolNazwa AS Narz_Nazwa,
				i.is_multi_instancje,
				i.serwis_data,
				i.serwis_cykl_dni,
				i.serwis_alert_dni,
				i.Dni_do_serwisu,
				i.IsAlert
			FROM `v_towrng_instancje` i
			LEFT JOIN `oppo_instancje` oi ON oi.GUID = i.Last_Op_GUID
			INNER JOIN `TowrNg` t ON t.GUID = i.idntowr
			-- LEFT JOIN `opng` n ON n.GUID = oi.IdnOper
			WHERE
				i.osobaGUID = _Key
				AND t.Deleted = 0
				AND status_biblioteczny != 0
		*/
			SELECT
				i.GUID,
				'Egzemplarze' AS Grp,
				i.idntowr,
				oid.DataOper AS DataOper,
				-- CONCAT(t.nazwa, IF(LOCATE(i.Nazwa, t.nazwa) = 0, CONCAT(', ', i.Nazwa), '')) AS nazwa,			
				i.Nazwa,
				i.opis,
				
				i.kod_kreskowy,
				i.nr_seryjny,
				i.nrinwentarz,
				i.status,
				i.status_biblioteczny,
				i.Ilosc_wydana,
				i.IsAlertMsg,
				i.osoba_przypisana AS `osoba_odpowiedzialna`,
				i.AreaSymbolNazwa AS Narz_Nazwa,
				i.is_multi_instancje,
				i.serwis_data,
				i.serwis_cykl_dni,
				i.serwis_alert_dni,
				i.Dni_do_serwisu,
				i.IsAlert
			FROM `v_instancje` i
			LEFT JOIN `v_op_instancje_det` oid ON oid.IDN = i.Last_Op_IDN
			WHERE
				i.osobaGUID = _Key
				-- AND t.Deleted = 0
				AND i.status_biblioteczny != 0
		;
		INSERT IGNORE INTO `t_egzemplarze_i_mater_osoby`
			SELECT 
				p.IdnTowr AS GUID,
				'Wydane/scierne' AS Grp,
				p.idntowr,
				MAX(p.datawystaw) AS DataOper, 
				CONCAT(p.TowrNazwa, IF(LOCATE(p.towrsymb, p.TowrNazwa) = 0, CONCAT(', ', p.towrsymb), '')) AS nazwa,			
				-- i.Nazwa,
				'' AS opis,
				
				'' AS kod_kreskowy,
				'' AS nr_seryjny,
				'' AS nrinwentarz,
				'0' AS STATUS,
				'0' AS status_biblioteczny,
				'0' AS Ilosc_wydana,
				'' AS IsAlertMsg,
				'' AS `osoba_odpowiedzialna`,
				'' AS Narz_Nazwa,
				'0' AS is_multi_instancje,
				'0000-00-00' AS serwis_data,
				'0' AS serwis_cykl_dni,
				'0' AS serwis_alert_dni,
				'0' AS Dni_do_serwisu,
				'0' AS IsAlert
			FROM `oppo` p
			WHERE 
				p.rodzaj = 11 
				AND p.osobaGUID = _Key
			GROUP BY idntowr  
			ORDER BY towrsymb
		;
		SELECT * FROM `t_egzemplarze_i_mater_osoby`;
		DROP TEMPORARY TABLE IF EXISTS `t_egzemplarze_i_mater_osoby`;
		
	END IF;	--	IF _MODE = 'egzemplarze.wydane.osoby.zestawienie'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'egzemplarze.do.on.idle'
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Key	Czas 
			
	CALL erp_instancje_tools('egzemplarze.do.on.idle', 'NRK00001', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'egzemplarze.search') THEN
		CALL erp_search_similar('egzemplarze.do.on.idle', _Key, '', '', '', '');
	END IF;	--	IF _MODE = 'egzemplarze.search'
	
	
/* ************************************************************************************************************************************************************************
	WIZ.create.egzemplarz
************************************************************************************************************************************************************************ */	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	

	'WIZ.create.egzemplarz.init'
		Inicjuje
		Parametry
		CALL erp_instancje_tools('WIZ.create.egzemplarz.init', '', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'WIZ.create.egzemplarz.init' THEN
		DELETE FROM `WIZ_new_egzemplarze` WHERE ID_Session = @SYSTEM.Client.Session.GUID;
	END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.init'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'WIZ.create.egzemplarz.select.karta'
		Zwraca karty towarowe dla egzemplarzy
		Parametry
		CALL erp_instancje_tools('WIZ.create.egzemplarz.select.karta', '', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'WIZ.create.egzemplarz.select.karta' THEN
		SELECT
			t.GUID, t.Symbol, t.Nazwa, t.Usluga
		FROM `towrng_instancje` i
		INNER JOIN `TowrNg` t ON t.GUID = i.IdnTowr
		GROUP BY t.GUID
		ORDER BY  t.Nazwa, t.Symbol -- zamina na prodbe cristu
		;

	END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.select.karta'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'WIZ.create.egzemplarz.clone.karta'
		Klonuje kartę towarową o guid = _Key
		Parametry
			_Key		Nowy IdnTowr gdy '' to tworzymy sami
			_Param_A	IdnTowr do sklonowania
		CALL erp_instancje_tools('WIZ.create.egzemplarz.clone.karta', 'NowyIdnTowr', 'IdnTowrDoKlona', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'WIZ.create.egzemplarz.clone.karta' THEN
		SET _Key = IF(IFNULL(_Key, '') != '', _Key, NewGUID());
		SET _Param_A = IFNULL(_Param_A, '');
		IF _Param_A = '' THEN
			LEAVE SPROC;	
		END IF;
		DROP TEMPORARY TABLE IF EXISTS `tclone_TowrNg`;
		CREATE TEMPORARY TABLE `tclone_TowrNg` LIKE `TowrNg`;
		INSERT INTO `tclone_TowrNg` SELECT * FROM `TowrNg` WHERE GUID = _Param_A;
		UPDATE `tclone_TowrNg`
		SET
			IDN = NULL,
			GUID = _Key,
			st_sprzedany = '1'
		;	
		INSERT IGNORE INTO `TowrNg` SELECT * FROM `tclone_TowrNg`;
		--	potem
		--	SELECT * FROM `tclone_TowrNg`;
		DROP TEMPORARY TABLE IF EXISTS `tclone_TowrNg`;
	END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.clone.karta'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'WIZ.create.egzemplarz.create.karta'
		Klonuje kartę towarową o guid = _Key
		Parametry
			_Key		Nowy IdnTowr gdy '' to tworzymy sami
			_Param_A	Symbol
			_Param_B	Nazwa
		CALL erp_instancje_tools('WIZ.create.egzemplarz.create.karta', 'NowyIdnTowr', 'Symbol', 'Nazwa', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'WIZ.create.egzemplarz.create.karta' THEN
		SET _Key = IF(IFNULL(_Key, '') != '', _Key, NewGUID());
		-- st_klasyfikacja = 0 => "srodek trwaly"
		INSERT IGNORE INTO `TowrNg` (GUID, Symbol, Nazwa, usluga, st_klasyfikacja, st_sprzedany) SELECT _Key, '?', '?', 5, 0, '1';
		--	potem
		--	
	END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.create.karta'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'WIZ.create.egzemplarz.create.1.rec'
		Klonuje kartę towarową o guid = _Key
		Parametry
			_Key		Nowy GUID
			_Param_A	
			_Param_B	IdnTowr gdy '' to tworzymy sami
		CALL erp_instancje_tools('WIZ.create.egzemplarz.create.1.rec', 'NowyIdnTowr', 'Symbol', 'Nazwa', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'WIZ.create.egzemplarz.create.1.rec' THEN
		SET _Key = IF(IFNULL(_Key, '') != '', _Key, NewGUID());
		INSERT IGNORE INTO `towrng_instancje` (GUID, idntowr) SELECT _Key, _Param_B;
		UPDATE `towrng_instancje` ti SET ti.kod_kreskowy = '?' WHERE ti.GUID = _Key;
		--	potem
		--	
	END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.create.karta'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'WIZ.create.egzemplarz.add.to.list'
		Dodaje do `t_new_egzemplarze` _Param_A rekordów
		Parametry
			_Key		IdnTowr
			_Param_A	ile wierszy wstawić
		CALL erp_instancje_tools('WIZ.create.egzemplarz.add.to.list', 'IdnTowr', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'WIZ.create.egzemplarz.add.to.list' THEN
		SET @Ile = IF(IFNULL(_Param_A, '') != '', _Param_A, 5);
		WHILE @Ile > 0 DO
			SET @egezemplarz.GUID = NewGUID();
			INSERT INTO `WIZ_new_egzemplarze`
				(ID_Session, ID_WIZ, GUID, idntowr, opis, uwagi, magazyn)
				SELECT
					@SYSTEM.Client.Session.GUID AS ID_Session,
					@egezemplarz.GUID AS ID_WIZ,
					@egezemplarz.GUID AS GUID,
					t.GUID AS idntowr,
					CONCAT(t.Symbol, ' - ', t.Nazwa) AS Opis,
					t.Opis AS Uwagi,
					0 AS magazyn
				FROM `TowrNg` t
				WHERE
					t.GUID = _Key
			;
			SET @Ile = @Ile - 1;
		END WHILE;
	END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.add.to.list'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'WIZ.create.egzemplarz.after.apply.1'
		Tworzy rzeczywiste instancje i odświeża `WIZ_new_egzemplarze` z nowymi idn-ami i kodami do edycji
		Parametry
		CALL erp_instancje_tools('WIZ.create.egzemplarz.after.apply.1', '', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE LIKE 'WIZ.create.egzemplarz.after.apply.%' THEN
		IF _MODE = 'WIZ.create.egzemplarz.after.apply.1' THEN
			INSERT IGNORE INTO `towrng_instancje`
				(GUID, idntowr, magazyn, kod_kreskowy, nr_seryjny, nrinwentarz, nrinwentarzobcy, opis, datagwarancji, serwis_data, serwis_cykl_dni, serwis_alert_dni)
				SELECT
					GUID, idntowr, magazyn, kod_kreskowy, nr_seryjny, nrinwentarz, nrinwentarzobcy, 
					opis, datagwarancji, serwis_data, serwis_cykl_dni, serwis_alert_dni
					 
				FROM `WIZ_new_egzemplarze`	
				WHERE
					ID_Session = @SYSTEM.Client.Session.GUID
			;
			UPDATE `towrng_instancje` i, `WIZ_new_egzemplarze` t
			SET
				i.opis = t.opis, 
				i.uwagi = t.uwagi
			WHERE
				t.ID_Session = @SYSTEM.Client.Session.GUID
				AND
				i.GUID = t.GUID
			;	
			UPDATE `towrng_instancje` i, `WIZ_new_egzemplarze` t, `TowrNg` tow
			SET
				i.opis = IF(IFNULL(i.opis, '') = '', CONCAT(tow.Symbol, ' - ', tow.Nazwa), i.opis)
			WHERE
				t.ID_Session = @SYSTEM.Client.Session.GUID
				AND
				i.GUID = t.GUID
				AND
				tow.GUID = i.idntowr
			;	
			
			CALL erp_instancje_tools('WIZ.create.egzemplarz.after.apply.refresh', '', '', '', '', '');	
		END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.after.apply.1'
		
		IF _MODE = 'WIZ.create.egzemplarz.after.apply.refresh' THEN
			DROP TEMPORARY TABLE IF EXISTS `t_new_egzemplarze_GUIDs`;
			CREATE TEMPORARY TABLE `t_new_egzemplarze_GUIDs` SELECT GUID FROM `WIZ_new_egzemplarze` WHERE ID_Session = @SYSTEM.Client.Session.GUID;
			DELETE FROM `WIZ_new_egzemplarze` WHERE ID_Session = @SYSTEM.Client.Session.GUID;
			INSERT INTO `WIZ_new_egzemplarze`
				(ID_Session, ID_WIZ, GUID, idntowr, opis, uwagi, magazyn, kod_kreskowy, nr_seryjny, nrinwentarz, nrinwentarzobcy)
				SELECT
					@SYSTEM.Client.Session.GUID AS ID_Session,
					i.GUID AS ID_WIZ,
					i.GUID, 
					i.idntowr, i.opis, i.uwagi, i.magazyn, i.kod_kreskowy, i.nr_seryjny, i.nrinwentarz, i.nrinwentarzobcy
				FROM `t_new_egzemplarze_GUIDs` t, `towrng_instancje` i
				WHERE
					t.GUID = i.GUID
			;
			DROP TEMPORARY TABLE IF EXISTS `t_new_egzemplarze_GUIDs`;
		END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.after.apply.refresh'
		
	END IF;	--	IF _MODE LIKE 'WIZ.create.egzemplarz.after.apply.%'


/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'WIZ.create.egzemplarz.create.init.operacje'
		Tworzenie jednej z operacji inicjalnej dla egzemplarzy
		Parametry
			_Key		GUID operacji
			_Param_A	Rodzaj
			_Param_B	rodzaj_typ
		CALL erp_instancje_tools('WIZ.create.egzemplarz.create.init.operacje', 'NowyIdnTowr', 'Symbol', 'Nazwa', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'WIZ.create.egzemplarz.create.init.operacje' THEN
		SET _Key = IF(IFNULL(_Key, '') != '', _Key, NewGUID());
		INSERT IGNORE INTO `TowrNg` (GUID, Symbol, Nazwa, st_sprzedany) SELECT _Key, _Param_A, _Param_B, 1;
		--	potem
		--	SELECT * FROM `tclone_TowrNg`;
	END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.create.init.operacje'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'WIZ.create.egzemplarz.create.wstaw.do.op_instancje.z.WIZ_new_egzemplarze'
		Tworzenie operacji w op_instancje
		Parametry
			_Key		GUID operacji IdnOper
			_Param_A	Rodzaj
			_Param_B	rodzaj_typ
			_Param_C	AreaGUID
		CALL erp_instancje_tools('WIZ.create.egzemplarz.create.wstaw.do.op_instancje.z.WIZ_new_egzemplarze', 'IdnOper', 'Rodzaj', 'Rodzaj_typ', 'Jaka Narzedziownia', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'WIZ.create.egzemplarz.create.wstaw.do.op_instancje.z.WIZ_new_egzemplarze' THEN
			
		INSERT IGNORE INTO `op_instancje` 
		(Id, idnoper, guid_oppo, rodzaj, rodzaj_typ, guid_instancji, ilosc, AreaGUID)
			SELECT
				'?', _Key, '?',
				_Param_A AS rodzaj, 
				_Param_B AS rodzaj_typ,
				t.GUID AS guid_instancji, 
				1,
				_Param_C AS AreaGUID
			FROM `WIZ_new_egzemplarze` t
			WHERE
				t.ID_Session = @SYSTEM.Client.Session.GUID
		;
	END IF;	--	IF _MODE = 'WIZ.create.egzemplarz.create.wstaw.do.op_instancje.z.WIZ_new_egzemplarze'
	
	



/* ************************************************************************************************************************************************************************
	create.egzemplarz
	STARY!!!!!!!!!!!!!!!!!!!!!!!!!
	WON z gry
************************************************************************************************************************************************************************ */	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	

	'create.egzemplarz.init'
		Inicjuje
		Parametry
		CALL erp_instancje_tools('create.egzemplarz.init', '', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'create.egzemplarz.init' THEN
				
		DROP TEMPORARY TABLE IF EXISTS `t_new_egzemplarze`;
		CREATE TEMPORARY TABLE `t_new_egzemplarze` (
			`IDN` INT(11) NOT NULL DEFAULT '0',
			`guid` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'identyfikator instancji (obiektu)',
			`idntowr` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'identyfikator towaru [t:TowrNg.guid]',
			`kod_kreskowy` VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'kod kreskowy identyfikujacy ten obiekt',
			`opis` VARCHAR(250) NOT NULL DEFAULT '' COMMENT 'opis charakteryzujacy ten obiekt - ale nie klase',
			`nr_seryjny` VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'numer na plakietce',
			`uwagi` TEXT COMMENT 'uwagi',
			`printed` INT(11) NOT NULL DEFAULT '0',
			`datagwarancji` DATE DEFAULT NULL,
			`nrinwentarz` VARCHAR(50) DEFAULT NULL,
			`nrinwentarzobcy` VARCHAR(50) DEFAULT NULL,
			`magazyn` INT(11) DEFAULT '-1',
			`status_biblioteczny` INT(11) NOT NULL DEFAULT '-1',
			`is_multi_instancje` INT(11) NOT NULL DEFAULT '0',
			`OsobaGUID` VARCHAR(38) NOT NULL DEFAULT '',
			`serwis_data` DATETIME DEFAULT NULL,
			`serwis_cykl_dni` INT(11) NOT NULL DEFAULT '0',
			`serwis_alert_dni` INT(11) NOT NULL DEFAULT '0',
			PRIMARY KEY (`guid`),
			KEY `idntowr` (`idntowr`),
			KEY `kod_kreskowy` (`kod_kreskowy`),
			KEY `OsobaGUID` (`OsobaGUID`)
		)
		;

	END IF;	--	IF _MODE = 'create.egzemplarz.init'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'create.egzemplarz.select.karta'
		Zwraca karty towarowe dla egzemplarzy
		Parametry
		CALL erp_instancje_tools('create.egzemplarz.select.karta', '', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'create.egzemplarz.select.karta' THEN
		SELECT
			t.GUID, t.Symbol, t.Nazwa, t.Usluga
		FROM `towrng_instancje` i
		INNER JOIN `TowrNg` t ON t.GUID = i.IdnTowr
		WHERE IF(LENGTH(_Param_D)> 0, ((t.Symbol LIKE CONCAT('%', _Param_D, '%')) OR (t.Nazwa  LIKE CONCAT('%', _Param_D, '%'))), TRUE)
		GROUP BY t.GUID
		ORDER BY t.Symbol, t.Nazwa
		;

	END IF;	--	IF _MODE = 'create.egzemplarz.select.karta'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'create.egzemplarz.clone.karta'
		Klonuje kartę towarową o guid = _Key
		Parametry
			_Key		Nowy IdnTowr gdy '' to tworzymy sami
			_Param_A	IdnTowr do sklonowania
		CALL erp_instancje_tools('create.egzemplarz.clone.karta', 'NowyIdnTowr', 'IdnTowrDoKlona', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'create.egzemplarz.clone.karta' THEN
		SET _Key = IF(IFNULL(_Key, '') != '', _Key, NewGUID());
		SET _Param_A = IFNULL(_Param_A, '');
		IF _Param_A = '' THEN
			LEAVE SPROC;	
		END IF;
		DROP TEMPORARY TABLE IF EXISTS `tclone_TowrNg`;
		CREATE TEMPORARY TABLE `tclone_TowrNg` LIKE `TowrNg`;
		INSERT INTO `tclone_TowrNg` SELECT * FROM `TowrNg` WHERE GUID = _Param_A;
		UPDATE `tclone_TowrNg`
		SET
			IDN = NULL,
			GUID = _Key
		;	
		INSERT IGNORE INTO `TowrNg` SELECT * FROM `tclone_TowrNg`;
		--	potem
		--	SELECT * FROM `tclone_TowrNg`;
	END IF;	--	IF _MODE = 'create.egzemplarz.clone.karta'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'create.egzemplarz.create.karta'
		Klonuje kartę towarową o guid = _Key
		Parametry
			_Key		Nowy IdnTowr gdy '' to tworzymy sami
			_Param_A	Symbol
			_Param_B	Nazwa
		CALL erp_instancje_tools('create.egzemplarz.create.karta', 'NowyIdnTowr', 'Symbol', 'Nazwa', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'create.egzemplarz.create.karta' THEN
		SET _Key = IF(IFNULL(_Key, '') != '', _Key, NewGUID());
		-- st_klasyfikacja = 0 => "srodek trwaly"
		INSERT IGNORE INTO `TowrNg` (GUID, Symbol, Nazwa, usluga, st_klasyfikacja, st_sprzedany) SELECT _Key, '?', '?', 5, 0, 1;
		--	potem
		--	
	END IF;	--	IF _MODE = 'create.egzemplarz.create.karta'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'create.egzemplarz.create.1.rec'
		Klonuje kartę towarową o guid = _Key
		Parametry
			_Key		Nowy GUID
			_Param_A	
			_Param_B	IdnTowr gdy '' to tworzymy sami
		CALL erp_instancje_tools('create.egzemplarz.create.1.rec', 'GUID instancji', '', 'IdnTowr', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'create.egzemplarz.create.1.rec' THEN
		SET _Key = IF(IFNULL(_Key, '') != '', _Key, NewGUID());
		INSERT IGNORE INTO `towrng_instancje` (GUID, idntowr) SELECT _Key, _Param_B;
		UPDATE `towrng_instancje` ti SET ti.kod_kreskowy = '?' WHERE ti.GUID = _Key;
		--	potem
		--	
	END IF;	--	IF _MODE = 'create.egzemplarz.create.karta'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'create.egzemplarz.add.to.list'
		Dodaje do `t_new_egzemplarze` _Param_A rekordów
		Parametry
			_Key		IdnTowr
			_Param_A	ile wierszy wstawić
		CALL erp_instancje_tools('create.egzemplarz.add.to.list', 'IdnTowr', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'create.egzemplarz.add.to.list' THEN
		SET @Ile = IF(IFNULL(_Param_A, '') != '', _Param_A, 5);
		WHILE @Ile > 0 DO
			INSERT INTO `t_new_egzemplarze`
				(GUID, idntowr, opis, uwagi, magazyn)
				SELECT
					NewGUID(),
					t.GUID,
					CONCAT(t.Symbol, ' - ', t.Nazwa) AS Opis,
					t.Opis,
					0
				FROM `TowrNg` t
				WHERE
					t.GUID = _Key
			;
			SET @Ile = @Ile - 1;
		END WHILE;
	END IF;	--	IF _MODE = 'create.egzemplarz.add.to.list'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'create.egzemplarz.after.apply.1'
		Tworzy rzeczywiste instancje i odświeża `t_new_egzemplarze` z nowymi idn-ami i kodami do edycji
		Parametry
		CALL erp_instancje_tools('create.egzemplarz.after.apply.1', '', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE LIKE 'create.egzemplarz.after.apply.%' THEN
		IF _MODE = 'create.egzemplarz.after.apply.1' THEN
			INSERT IGNORE INTO `towrng_instancje`
				(GUID, idntowr, magazyn, kod_kreskowy, nr_seryjny, nrinwentarz, nrinwentarzobcy, opis, datagwarancji, serwis_data, serwis_cykl_dni, serwis_alert_dni)
				SELECT
					GUID, idntowr, magazyn, kod_kreskowy, nr_seryjny, nrinwentarz, nrinwentarzobcy, 
					opis, datagwarancji, serwis_data, serwis_cykl_dni, serwis_alert_dni
					 
				FROM `t_new_egzemplarze`	
			;
			UPDATE `towrng_instancje` i, `t_new_egzemplarze` t
			SET
				i.opis = t.opis, 
				i.uwagi = t.uwagi
			WHERE
				i.GUID = t.GUID
			;	
			UPDATE `towrng_instancje` i, `t_new_egzemplarze` t, `TowrNg` tow
			SET
				i.opis = IF(IFNULL(i.opis, '') = '', CONCAT(tow.Symbol, ' - ', tow.Nazwa), i.opis)
			WHERE
				i.GUID = t.GUID
				AND
				tow.GUID = i.idntowr
			;	
			
			CALL erp_instancje_tools('create.egzemplarz.after.apply.refresh', '', '', '', '', '');	
		END IF;	--	IF _MODE = 'create.egzemplarz.after.apply.1'
		
		IF _MODE = 'create.egzemplarz.after.apply.refresh' THEN
			DROP TEMPORARY TABLE IF EXISTS `t_new_egzemplarze_GUIDs`;
			CREATE TEMPORARY TABLE `t_new_egzemplarze_GUIDs` SELECT GUID FROM `t_new_egzemplarze`;
			TRUNCATE `t_new_egzemplarze`;
			INSERT INTO `t_new_egzemplarze`
				(IDN, GUID, idntowr, opis, uwagi, magazyn, kod_kreskowy, nr_seryjny, nrinwentarz, nrinwentarzobcy)
				SELECT
					i.IDN, i.GUID, i.idntowr, i.opis, i.uwagi, i.magazyn, i.kod_kreskowy, i.nr_seryjny, i.nrinwentarz, i.nrinwentarzobcy
				FROM `t_new_egzemplarze_GUIDs` t, `towrng_instancje` i
				WHERE
					t.GUID = i.GUID
			;
			DROP TEMPORARY TABLE IF EXISTS `t_new_egzemplarze_GUIDs`;
		END IF;	--	IF _MODE = 'create.egzemplarz.after.apply.refresh'
		
	END IF;	--	IF _MODE LIKE 'create.egzemplarz.after.apply.%'


/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'create.egzemplarz.create.init.operacje'
		Tworzenie jednej z operacji inicjalnej dla egzemplarzy
		Parametry
			_Key		GUID operacji
			_Param_A	Rodzaj
			_Param_B	rodzaj_typ
		CALL erp_instancje_tools('create.egzemplarz.create.init.operacje', 'NowyIdnTowr', 'Symbol', 'Nazwa', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'create.egzemplarz.create.init.operacje' THEN
		SET _Key = IF(IFNULL(_Key, '') != '', _Key, NewGUID());
		INSERT IGNORE INTO `TowrNg` (GUID, Symbol, Nazwa, st_sprzedany) SELECT _Key, _Param_A, _Param_B, 1;
		--	potem
		--	SELECT * FROM `tclone_TowrNg`;
	END IF;	--	IF _MODE = 'create.egzemplarz.create.init.operacje'
	
/* ************************************************************************************************************************************************************************
	edit.egzemplarz
************************************************************************************************************************************************************************ */	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'edit.egzemplarz.init'
		Przygotowuje gzemplarz _Key do edycji - buduje tabelę edycyjną
		Parametry
			_Key		ID egzemplarza
		CALL erp_instancje_tools('edit.egzemplarz.init', 'GUID', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'edit.egzemplarz.init' THEN
		DROP TEMPORARY TABLE IF EXISTS `t_towrng_instancje_e`;
		CREATE TEMPORARY TABLE `t_towrng_instancje_e` 
			SELECT
				i.*
			FROM `towrng_instancje` i	
			WHERE
				i.GUID = _Key
		;	
		--	potem
		--	SELECT * FROM `t_towrng_instancje_e`;
	END IF;	--	IF _MODE = 'edit.egzemplarz.init'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'edit.egzemplarz.after.apply'
		Po zapisie w GUI wołana aby zrobić zapi w prawdziwym `towrng_instancje` 
		Parametry
		CALL erp_instancje_tools('edit.egzemplarz.after.apply', '', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'edit.egzemplarz.after.apply' THEN
		SELECT t.is_multi_instancje INTO @is_multi_instancje FROM `t_towrng_instancje_e` t LIMIT 1;
		IF IFNULL(@is_multi_instancje, 0) = 0 THEN
			UPDATE `towrng_instancje` ti, `t_towrng_instancje_e` t
			SET
				ti.kod_kreskowy = t.kod_kreskowy, 
				ti.nrinwentarz = t.nrinwentarz,
				ti.nr_seryjny = t.nr_seryjny,
				ti.uwagi = t.uwagi,
				ti.datagwarancji = t.datagwarancji,
				ti.Opis = t.Opis,
				ti.serwis_data = t.serwis_data, 
				ti.serwis_cykl_dni = t.serwis_cykl_dni,
				ti.serwis_alert_dni = t.serwis_alert_dni,
				ti.serwis_alert_blokuj = t.serwis_alert_blokuj,
				ti.DeadLine = t.DeadLine,
				ti.areaguid=t.areaguid,
				-- ti.alert_desc = t.alert_desc, -- ??
				ti.show_alert = t.show_alert
			WHERE
				ti.GUID = t.GUID
			;
		ELSE
			UPDATE `towrng_instancje` ti, `t_towrng_instancje_e` t
			SET
				ti.kod_kreskowy = t.kod_kreskowy, 
				ti.nrinwentarz = t.nrinwentarz,
				--	ti.nr_seryjny = t.nr_seryjny,
				ti.uwagi = t.uwagi,
				ti.datawystaw = t.datawystaw,
				ti.Opis = t.Opis,
				-- ti.alert_desc = t.alert_desc, -- ??
				ti.show_alert = t.show_alert
			WHERE
				ti.IdnTowr = t.IdnTowr
				AND
				ti.is_multi_instancje = 1
			;
		END IF;
	END IF;	--	IF _MODE = 'edit.egzemplarz.after.apply'


	
/* ************************************************************************************************************************************************************************
	egzemplarz
************************************************************************************************************************************************************************ */	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'egzemplarz.check'
		Uzupelnia zmienne atrybutami gzemplarza _Key
		Parametry
			_Key		ID egzemplarza
		CALL erp_instancje_tools('egzemplarz.check', 'GUID', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'egzemplarz.check' THEN
		SELECT 
			i.IdnTowr,
			i.status_biblioteczny, 
			i.is_multi_instancje
		INTO
			@instancja.IdnTowr,
			@instancja.status_biblioteczny,
			@instancja.is_multi_instancje
		FROM `towrng_instancje` i 
		WHERE i.GUID = _Key 
		;
	END IF;	--	IF _MODE = 'egzemplarz.check'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'egzemplarz.add.is_multi_instancje'
		Dodaje egzemplarz-osoby do instancji o ile nie istnieje 
		Parametry
			_Key		ID towaru
			_Param_A	ID osoby
		CALL erp_instancje_tools('egzemplarz.add.is_multi_instancje', 'IdnTowr', 'osoba', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'egzemplarz.add.is_multi_instancje' THEN
		SET 
			_Key = IFNULL(_Key, ''),
			_Param_A = IFNULL(_Param_A, '')
		;
		IF (_Key = '') OR (_Param_A = '') THEN
			LEAVE SPROC;	
		END IF;
		
		SET @instancja.GUID = MD5(CONCAT(_Key, _Param_A));
		/*
		Po co to???
		SELECT
			i.GUID
		FROM `towrng_instancje` i 
		WHERE
			i.GUID = @instancja.GUID
		INTO	
			@instancja.GUID
		;	
		*/
		INSERT IGNORE INTO `towrng_instancje` 
			(GUID, IdnTowr, osobaGUID_przypisana, kod_kreskowy, opis, status_biblioteczny, is_multi_instancje)
			SELECT
				@instancja.GUID, t.GUID, o.GUID, t.kod_kreskowy, CONCAT(t.Symbol, '/', t.Nazwa), 0, 1 
			FROM `TowrNg` t, `osoby` o 
			WHERE
				t.GUID = _Key
				AND
				o.GUID = _Param_A
		;	
		
	END IF;	--	IF _MODE = 'egzemplarz.add.is_multi_instancje'

/* ************************************************************************************************************************************************************************
	operacje
************************************************************************************************************************************************************************ */	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'operacje.detal.view'
	Pobiera pozycje instancyjne dla operacji _Key
		Parametry
		Parametry
			_Key		ID operacji
	CALL erp_instancje_tools('operacje.detal.view', 'IdnOper', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'operacje.detal.view') THEN
		-- DROP TEMPORARY TABLE IF EXISTS t_operacje.detal.view
		/*
		było
		SELECT COUNT(*) AS Ile_oi FROM `oppo_instancje` oi WHERE oi.IdnOper = _Key INTO @Ile_oi;
		*/
		SELECT COUNT(*) AS Ile_oi INTO @Ile_oi FROM `op_instancje` oi WHERE oi.IdnOper = _Key;
		
		SET @Ile_oi = IFNULL(@Ile_oi, 0);
		IF @Ile_oi != 0 THEN
		/*
		było
			SELECT
				oi.GUID,
				oi.DataOper,
				oi.guid_instancji,
				i.Opis,
				i.kod_kreskowy,
				oi.Ilosc,
				t.Nazwa as TowrNazwa,
				-- ot.Status_After,
				-- _VarInt(ot.Status_After = 1) AS IsWyp,
				oi.deleted,
				CONCAT(o.Nazwisko, ' ', o.Imiona) AS Osoba,
				_ConcatStr(an.Symbol, IF(an.Symbol = an.Nazwa, '', an.Nazwa), ' - ') AS AreaSymbolNazwa,
				oi.osobaguid,
				oi.areaGUID,
				oi.rodzaj, oi.rodzaj_typ,
				t.Symbol,
				i.nr_seryjny,
				i.nrinwentarz
			FROM `oppo` p
			INNER JOIN `oppo_instancje` oi ON p.GUID = oi.guid_oppo
			INNER JOIN `towrng_instancje` i ON i.GUID = oi.guid_instancji
			INNER JOIN `TowrNg` t ON t.GUID = i.IdnTowr
			LEFT JOIN `osoby` o ON o.GUID = oi.OsobaGUID
			LEFT JOIN `erp_area_nodes` an ON an.GUID = i.AreaGUID
			WHERE
				oi.IdnOper = _Key
			;
		*/	
			SELECT
				oi.ID,
				oi.DataOper,
				oi.guid_instancji,
				i.Opis,
				i.kod_kreskowy,
				oi.Ilosc,
				-- i.Nazwa AS TowrNazwa,	--	tutaj extInf
				CONCAT_WS(' - ', i.nazwa, oi.ExtInf) AS TowrNazwa,
				-- ot.Status_After,
				-- _VarInt(ot.Status_After = 1) AS IsWyp,
				oi.deleted,
				oi.Osoba,
				oi.AreaSymbolNazwa,
				oi.osobaguid,
				oi.areaGUID,
				oi.rodzaj, oi.rodzaj_typ,
				i.Symbol,
				i.nr_seryjny,
				i.nrinwentarz
			FROM `v_op_instancje` oi
			INNER JOIN `v_instancje` i ON i.GUID = oi.guid_instancji
			WHERE
				oi.IdnOper = _Key
			ORDER BY oi.IDN
			;
		ELSE
			SELECT
				p.GUID AS ID,
				p.DataWystaw AS DataOper,
				NULL AS guid_instancji,
				t.Nazwa AS Opis,
				t.kod_kreskowy,
				p.Ilosc,
				t.Nazwa AS TowrNazwa,
				-- ot.Status_After,
				-- _VarInt(ot.Status_After = 1) AS IsWyp,
				n.deleted,
				CONCAT(o.Nazwisko, ' ', o.Imiona) AS Osoba,
				_ConcatStr(an.Symbol, IF(an.Symbol = an.Nazwa, '', an.Nazwa), ' - ') AS AreaSymbolNazwa,
				n.osobaguid,
				n.areaGUID,
				p.rodzaj, p.rodzaj_typ,
				t.Symbol
			FROM `opng` n
			INNER JOIN `oppo` p ON p.IdnOper = n.GUID
			INNER JOIN `TowrNg` t ON t.GUID = p.IdnTowr
			LEFT JOIN `osoby` o ON o.GUID = n.OsobaGUID
			LEFT JOIN `erp_area_nodes` an ON an.GUID = n.AreaGUID
			WHERE
				p.IdnOper = _Key
			;
		END IF;
		
	END IF;	--	IF _MODE = 'operacje.detal.view'


	
	
/* ************************************************************************************************************************************************************************
	descr
************************************************************************************************************************************************************************ */	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'descr.select.msgs'
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Key		ID instancji
			_Param_A
	CALL erp_instancje_tools('descr.select.msgs', '12321', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'descr.select.msgs') THEN
	
		DROP TEMPORARY TABLE IF EXISTS `t_descr_select_msgs`;
		CREATE TEMPORARY TABLE `t_descr_select_msgs` 
	
			SELECT
				ti.GUID,
				dl.descrGUID,
				dl.linkGUID,
				dc.Grupa,
				GROUP_CONCAT(IF(dc.readonly OR (_varSTR_NOTNULL(dl.CustomContent) = ''), CONCAT('   ', dc.content), CONCAT('   ', dl.CustomContent)) ORDER BY dl.LP SEPARATOR '\n') AS Content
			FROM `erp_descr_links` dl
			INNER JOIN `erp_descr_content` dc ON dc.GUID = dl.descrGUID 
			INNER JOIN `towrng_instancje` ti ON ti.GUID = dl.LinkGUID 
			WHERE
				dl.LinkGUID = _Key AND
				ti.show_alert != 0
			GROUP BY GUID, Grupa	
			ORDER BY dl.Lp	
		;	
		/*
		SELECT
			IFNULL(GROUP_CONCAT(CONCAT(Grupa, '\n', Content) ORDER BY t.Grupa SEPARATOR '\n'), '') AS Msg,
			t.*
		FROM `t_descr_select_msgs` t
		GROUP BY GUID
		;
		*/
		CALL erp_instancje_tools('descr.select.msgs.select', '', '', '', '', '');
		DROP TEMPORARY TABLE IF EXISTS `t_descr_select_msgs`;
		
	END IF;	--	IF _MODE = 'descr.select.msgs'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'descr.select.msgs.terminal'
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Param_A
	CALL erp_instancje_tools('descr.select.msgs.terminal', '', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'descr.select.msgs.terminal') THEN
	
		DROP TEMPORARY TABLE IF EXISTS `t_descr_select_msgs`;
		CREATE TEMPORARY TABLE `t_descr_select_msgs` 
	
			SELECT
				ti.GUID,
				dl.descrGUID,
				dl.linkGUID,
				dc.Grupa,
				GROUP_CONCAT(IF(dc.readonly OR (_varSTR_NOTNULL(dl.CustomContent) = ''), CONCAT('   ', dc.content), CONCAT('   ', dl.CustomContent)) ORDER BY dl.LP SEPARATOR '\n') AS Content
			FROM `temp_terminal` t 
			INNER JOIN `erp_descr_links` dl ON dl.LinkGUID = t.GUIDInstancji
			INNER JOIN `erp_descr_content` dc ON dc.GUID = dl.descrGUID 
			INNER JOIN `towrng_instancje` ti ON ti.GUID = t.GUIDInstancji
			WHERE
				-- t.GUIDInstancji = _Key AND
				-- dl.LinkGUID = _Key AND
				ti.show_alert != 0
			GROUP BY GUID, Grupa 
			ORDER BY dl.Lp	
		;	
		/*
		SELECT
			t.kod_kreskowy,
			t.Opis,
			t.nr_seryjny,
			IFNULL(GROUP_CONCAT(CONCAT(Grupa, '\n', Content) ORDER BY t.Grupa SEPARATOR '\n'), '') AS Msg
		FROM `t_descr_select_msgs` t
		GROUP BY GUID
		;
		*/
		CALL erp_instancje_tools('descr.select.msgs.select', '', '', '', '', '');
		DROP TEMPORARY TABLE IF EXISTS `t_descr_select_msgs`;
		
	END IF;	--	IF _MODE = 'descr.select.msgs.terminal'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'descr.select.msgs.select'
	Pobiera dla instancji _Key opisy o ile pole w `show_alert` w instancji = 1
		Parametry
			_Key		ID instancji
			_Param_A
	CALL erp_instancje_tools('descr.select.msgs.select', '', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'descr.select.msgs.select') THEN
		SELECT
			IFNULL(GROUP_CONCAT(CONCAT(Grupa, '\n', Content) ORDER BY t.Grupa SEPARATOR '\n'), '') AS Msg,
			ti.kod_kreskowy,
			ti.Opis,
			ti.Opis AS nazwa_egzemplarza,
			ti.nr_seryjny,
			
			os.Nazwisko, os.Imiona, 
			os.info1,
			os.nazwa_dzialu, 
			os.info2, 
			T.SymbolProducenta AS SymbolUProducenta, k.extraA AS extraA, 
			T.symboludost AS SymbolUDostawcy, 
			k.symbol AS kont_symbol, 
			T.nazwa AS towrnazwa
		FROM `t_descr_select_msgs` t
		INNER JOIN `towrng_instancje` ti ON ti.GUID = t.GUID 
		INNER JOIN TowrNg T ON T.GUID = ti.idntowr 
		LEFT JOIN osoby os ON os.GUID = ti.osobaGUID_przypisana 
		LEFT JOIN kontrah k ON k.GUID = os.kontrGUID
		GROUP BY t.GUID
		;
	END IF;	--	IF _MODE = 'descr.select.msgs.select'

	
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'likwidacja.lub.wydanie.prepare'
	Przygotowuje tabele egemplarzy kontrahenta _Key (z Err dla tych co brakuje na magazyunach) etc.
		Parametry
			_Key		ID Kontrahenta
	CALL erp_instancje_tools('likwidacja.lub.wydanie.prepare', KontrGUID, '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'likwidacja.lub.wydanie.prepare') THEN
		SET _Key = IFNULL(_Key, '');
		DROP TEMPORARY TABLE IF EXISTS `t_wydane_instancje_kontrahenta`;
		CREATE TEMPORARY TABLE `t_wydane_instancje_kontrahenta` (
		  `guid_instancji` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'identyfikator instancji [t:TowrNg_instancje.guid]',
		  `idntowr` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'identyfikator karty towarowej',
		  `osobaguid` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'osoba wypozyczajaca - moze byc puste',
		  `guid_oppo_instancji` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'GUID 1 wydania',
		  `Status` INT(11) DEFAULT '0',
		  `Magazyn` INT(11) DEFAULT '-1',
		  `lastOplustGUID` VARCHAR(38) DEFAULT '',
		  `Err` INT(11) DEFAULT '0',
		  `Checked` INT(11) DEFAULT '1',
		  PRIMARY KEY (`guid_instancji`),
		  KEY `idntowr` (`idntowr`),
		  KEY `Magazyn` (`Magazyn`),
		  KEY `Err` (`Err`),
		  KEY `Status` (`Status`)
		)
		;
		TRUNCATE `t_wydane_instancje_kontrahenta`;
		
/*
	Tym zapytaniem pobieralismy dokumenty z pierwszego wydania dla klienta.
	tyle ze po jakims czasie moga zmienic sie osoby przypisane do instancji
	wiec to zapytanie zaczyna mijac sie z celem
	Chyba ze ktos wykorzystuje je do jakis karkolomnych porownan

		INSERT IGNORE INTO `t_wydane_instancje_kontrahenta`
			(guid_instancji, idntowr, osobaguid, guid_oppo_instancji, STATUS, Magazyn, lastOplustGUID)
			SELECT
				oi.guid_instancji, 
				i.idntowr, 
				i.osobaGUID_przypisana,
				oi.GUID,
				i.status,
				i.magazyn,
				i.lastOplustGUID
			FROM `oppo_instancje` oi
			INNER JOIN `towrng_instancje` i ON i.GUID = oi.guid_instancji
			LEFT JOIN `osoby` o ON o.GUID = oi.osobaguid
			-- LEFT JOIN `osoby` o1 ON o1.GUID = i.osobaGUID_przypisana
			WHERE
				o.KontrGUID = _Key
				AND
				oi.rodzaj = 47
				AND
				oi.rodzaj_typ = 1
			GROUP BY oi.guid_instancji
		;
*/		

		INSERT IGNORE INTO `t_wydane_instancje_kontrahenta`
			(guid_instancji, idntowr, osobaguid, guid_oppo_instancji, STATUS, Magazyn, lastOplustGUID)
			SELECT
				i.GUID,
				i.idntowr, 
				i.osobaGUID_przypisana,
				'',
				i.status,
				i.magazyn,
				i.lastOplustGUID
			FROM `towrng_instancje` i
			INNER JOIN `osoby` o ON o.GUID = i.osobaGUID_przypisana
			WHERE
				o.KontrGUID = _Key
			GROUP BY i.GUID
		;
		
		DROP TEMPORARY TABLE IF EXISTS `t_wydane_instancje_kontrahenta_mag`;
		CREATE TEMPORARY TABLE `t_wydane_instancje_kontrahenta_mag` 
			SELECT
				i.IdnTowr,
				i.magazyn,
				_VarDouble(SUM(1)) AS Ile_Wydac,
				_VarDouble(tp.Ilosc) AS Ilosc,
				(1=1) AS Err
			FROM `t_wydane_instancje_kontrahenta` i
			LEFT JOIN `TowrPo` tp ON tp.IdnTowr = i.IdnTowr AND i.magazyn = tp.magazyn
			WHERE
				i.Status = 0
				AND
				i.Magazyn > 0
			GROUP BY i.IdnTowr, i.magazyn
		;
		UPDATE `t_wydane_instancje_kontrahenta_mag` m 
		SET 
			m.Err = (m.Ile_Wydac > m.Ilosc)
		;
		UPDATE `t_wydane_instancje_kontrahenta` i, `t_wydane_instancje_kontrahenta_mag` m 
		SET 
			i.Err = m.Err
		WHERE
			i.IdnTowr = m.IdnTowr
			AND
			i.Magazyn = m.Magazyn
		;
		-- DROP TEMPORARY TABLE IF EXISTS `t_wydane_instancje_kontrahenta_mag`;
		
	END IF;	--	IF _MODE = 'likwidacja.lub.wydanie.prepare'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'likwidacja.lub.wydanie.update.status'
	wołana w 'likwidacja.lub.wydanie.select.magazyny'
	status podaj na nowo
		Parametry
	CALL erp_instancje_tools('likwidacja.lub.wydanie.update.status', '', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'likwidacja.lub.wydanie.update.status') THEN
		UPDATE `t_wydane_instancje_kontrahenta` i, `towrng_instancje` t 
		SET 
			i.Status = t.Status,
			i.magazyn = t.magazyn
		WHERE
			i.guid_instancji = t.GUID
		;
	END IF;	--	IF _MODE = 'likwidacja.lub.wydanie.update.status'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'likwidacja.lub.wydanie.towary.%'
	Zwraca magazyny wyst, w tabeli `t_wydane_instancje_kontrahenta` 
		Parametry
	CALL erp_instancje_tools('likwidacja.lub.wydanie.towary.prepare', '', '', '', '', '');	--	 
	CALL erp_instancje_tools('likwidacja.lub.wydanie.towary.after.apply', '', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE LIKE 'likwidacja.lub.wydanie.towary.%') THEN
		IF (_MODE = 'likwidacja.lub.wydanie.towary.prepare') THEN
			DROP TEMPORARY TABLE IF EXISTS `t_wydane_instancje_kontrahenta_towary`;
			CREATE TEMPORARY TABLE `t_wydane_instancje_kontrahenta_towary` 
				SELECT
					_VarInt(1) AS Checked,
					i.IdnTowr,
					t.Symbol,
					t.Nazwa
				FROM `t_wydane_instancje_kontrahenta` i
				INNER JOIN `TowrNg` t ON t.GUID = i.IdnTowr
				WHERE
					i.Checked
				GROUP BY i.IdnTowr
				ORDER BY Symbol
			;
		END IF;	
		-- SELECT * FROM `t_wydane_instancje_kontrahenta_towary`;
		IF (_MODE = 'likwidacja.lub.wydanie.towary.after.apply') THEN
			UPDATE `t_wydane_instancje_kontrahenta` i, `t_wydane_instancje_kontrahenta_towary` t
			SET
				i.Checked = (t.checked AND i.Checked)
			WHERE
				i.IdnTowr = t.IdnTowr
			;
		END IF;	
	END IF;	--	IF _MODE = 'likwidacja.lub.wydanie.towary.%'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'likwidacja.lub.wydanie.osoby.%'
	Zwraca magazyny wyst, w tabeli `t_wydane_instancje_kontrahenta` 
		Parametry
	CALL erp_instancje_tools('likwidacja.lub.wydanie.osoby.prepare', '', '', '', '', '');	--	 
	CALL erp_instancje_tools('likwidacja.lub.wydanie.osoby.after.apply', '', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE LIKE 'likwidacja.lub.wydanie.osoby.%') THEN
		IF (_MODE = 'likwidacja.lub.wydanie.osoby.prepare') THEN
			DROP TEMPORARY TABLE IF EXISTS `t_wydane_instancje_kontrahenta_osoby`;
			CREATE TEMPORARY TABLE `t_wydane_instancje_kontrahenta_osoby` 
				SELECT
					_VarInt(1) AS Checked,
					i.osobaguid,
					CONCAT(o.Nazwisko, ' ', o.Imiona) AS Nazwisko_Imiona
				FROM `t_wydane_instancje_kontrahenta` i
				INNER JOIN `osoby` o ON o.GUID = i.osobaguid
				WHERE
					i.Checked
				GROUP BY i.osobaguid
				ORDER BY Nazwisko_Imiona
			;
		END IF;	
		-- SELECT * FROM `t_wydane_instancje_kontrahenta_osoby`;
		IF (_MODE = 'likwidacja.lub.wydanie.osoby.after.apply') THEN
			UPDATE `t_wydane_instancje_kontrahenta` i, `t_wydane_instancje_kontrahenta_osoby` t
			SET
				i.Checked = (t.checked AND i.Checked)
			WHERE
				i.osobaguid = t.osobaguid
			;
		END IF;	
	END IF;	--	IF _MODE = 'likwidacja.lub.wydanie.osoby.%'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'likwidacja.lub.wydanie.select.magazyny'
	Zwraca magazyny wyst, w tabeli `t_wydane_instancje_kontrahenta` 
		Parametry
	CALL erp_instancje_tools('likwidacja.lub.wydanie.select.magazyny', '', '', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'likwidacja.lub.wydanie.select.magazyny') THEN
		CALL erp_instancje_tools('likwidacja.lub.wydanie.update.status', '', '', '', '', '');	--	 
		SELECT
			DISTINCT i.magazyn
		FROM `t_wydane_instancje_kontrahenta` i
		WHERE
			i.Status = 0
			AND
			NOT i.Err
			AND
			i.Checked
			AND
			i.magazyn > 0
		;
	END IF;	--	IF _MODE = 'likwidacja.lub.wydanie.select.magazyny'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'likwidacja.lub.wydanie.select'
	Zwraca egemplarze do wydania
		Parametry
		_Param_A	
					'' lub 0	WYD	to select dla tych co trzeba wydać
					1 			ZWR	to select dla tych co trzeba przyjąć zwrotem
		_Param_B	Gdy '' to wszystkie albo mag = 1 2 3
	CALL erp_instancje_tools('likwidacja.lub.wydanie.select', '', '0', '', '', '');	--	 
	CALL erp_instancje_tools('likwidacja.lub.wydanie.select', '', '0', '13', '', '');	--	 
	CALL erp_instancje_tools('likwidacja.lub.wydanie.select', '', '1', '', '', '');	--	 
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'likwidacja.lub.wydanie.select') THEN
		SET _Param_A = IFNULL(_Param_A, '');
		SET _Param_A = IF(_Param_A = '', 0, _Param_A);
		SET _Param_B = IFNULL(_Param_B, '');
		-- CALL erp_instancje_tools('likwidacja.lub.wydanie.update.status', '', '', '', '', '');	--	 
		/*
			 aShellOppoInstancje.FieldByName('ilosc').asCurrency;
			 aShellOppoInstancje.FieldByName('Kod_Kreskowy').AsString;
			 aShellOppoInstancje.FieldByName('nr_seryjny').AsString;
			 aShellOppoInstancje.FieldByName('uwagi').AsString;
			 aShellOppoInstancje.FieldByName('IdnTowr').AsString;
			 aShellOppoInstancje.FieldByName('OsobaGUID').AsString;
			 aShellOppoInstancje.FieldByName('Opis').AsString;
			 aShellOppoInstancje.FieldByName('guid_instancji').AsString;
			 aShellOppoInstancje.FieldByName('lastOplustGUID_TI').AsString;
		*/
		SELECT
			i.*,
			t.Kod_Kreskowy,
			t.nr_seryjny,
			t.uwagi,
			t.Opis
		FROM `t_wydane_instancje_kontrahenta` i
		INNER JOIN `towrng_instancje` t ON t.GUID = i.guid_instancji
		WHERE
			i.Status = _Param_A
			AND
			i.Checked
			AND
			(NOT i.Err OR (_Param_A = 1))
			AND
			IF(_Param_B = '', TRUE, i.magazyn = _Param_B)
			AND
			i.magazyn >= 0
		;
	END IF;	--	IF _MODE = 'likwidacja.lub.wydanie.select'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'likwidacja.lub.wydanie.select.err'
	Zwraca karty/mag dla których są braki na magazynie do wydania
		Parametry
	CALL erp_instancje_tools('likwidacja.lub.wydanie.select.err', '', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'likwidacja.lub.wydanie.select.err') THEN
		SELECT
			m.IdnTowr,
			m.magazyn,
			m.Ile_Wydac,
			m.Ilosc AS  Ile_Jest,
			mg.Opis AS NazwaMagazynu,
			t.Nazwa AS NazwaTowaru
		FROM `t_wydane_instancje_kontrahenta_mag` m
		LEFT JOIN `TowrNg` t ON t.GUID = m.IdnTowr 
		LEFT JOIN `Magazyny` mg ON mg.IdnMagazynu = m.magazyn
		WHERE
			m.Err != 0
		;
	END IF;	--	IF _MODE = 'likwidacja.lub.wydanie.select.err'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'likwidacja.lub.wydanie.Final'
	Czyszczenie
		Parametry
	CALL erp_instancje_tools('likwidacja.lub.wydanie.Final', '', '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF (_MODE = 'likwidacja.lub.wydanie.Final') THEN
		DROP TEMPORARY TABLE IF EXISTS `t_wydane_instancje_kontrahenta_mag`;
		DROP TEMPORARY TABLE IF EXISTS `t_wydane_instancje_kontrahenta_towary`;
		DROP TEMPORARY TABLE IF EXISTS `t_wydane_instancje_kontrahenta_osoby`;
	END IF;	--	IF _MODE = 'likwidacja.lub.wydanie.Final'
END$$

DROP PROCEDURE IF EXISTS `erp_instancje_delete`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `erp_instancje_delete`(
	IN _MODE VARCHAR(150),
	IN _GUID_Instancji VARCHAR(255),	
	-- IN _Param_A VARCHAR(255),
	IN _Param_A TEXT,
	IN _Param_B VARCHAR(255)
)
/*
	CALL erp_instancje_delete('check', 'GUID_Instancji', '', '');
	CALL erp_instancje_delete('delete', 'GUID_Instancji', '', '');
*/
S_erp_instancje_delete: BEGIN 
	IF (_MODE = 'check') THEN
		SELECT COUNT(*) INTO @IleOper FROM `oppo_instancje` p WHERE p.GUID_Instancji = _GUID_Instancji;
		SELECT COUNT(*) INTO @IleOper2 FROM `op_instancje` p WHERE p.GUID_Instancji = _GUID_Instancji;
		SELECT _VarInt(GREATEST(IFNULL(@IleOper, 0), IFNULL(@IleOper2, 0))) AS IleOper;
	END IF;	--	IF _MODE = 'check'
	
	IF (_MODE = 'delete') THEN
		DELETE FROM `towrng_instancje` WHERE GUID = _GUID_Instancji;
	END IF;	--	IF _MODE = 'delete'
END$$

DELIMITER ;

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

DESC TowrNg 'st%';
DESC towrng_instancje;

SELECT COUNT(*) FROM TowrNg;
SELECT COUNT(*) FROM towrng_instancje;
SELECT
t.Usluga, t.NumerOT, t.NumerSeryjny, ti.*
FROM towrng_instancje ti
INNER JOIN TowrNg t ON t.GUID = ti.IdnTowr
ORDER BY usluga
LIMIT 8000
;

st_klasyfikacja  - ma 4 wartosci
cdsKlasyfikacja.CreateDataSet;
  cdsKlasyfikacja.InsertRecord([0,'środek trwały']);
  cdsKlasyfikacja.InsertRecord([1,'wyposażenie']);
  cdsKlasyfikacja.InsertRecord([2,'składnik']);
  cdsKlasyfikacja.InsertRecord([3,'wart. niematerialna']);
Niech TK założy takie wartości w słownikach pierwotnych

st_nieaktywny - gdy 1 TO instancje tez deaktywujemy

	
DESC TowrNg 'st_%';
DESC TowrNg '%nr%';

*/

/*
$Log: erp_instancje_tools.sql,v $
Revision 1.60  2025/02/26 10:14:54  jmam
$send$ Zmiany po TK
*/
