 /*
$Log: delegacjePF.sql,v $
Revision 1.13  2025/02/25 08:27:47  jmam
$send$ Kolejna zmiany po TK

Revision 1.12  2025/02/20 09:27:48  waliant
Warningi $SEND$

Revision 1.11  2025/02/03 11:23:19  jmam
$SEND$Data i czas jako datetime

Revision 1.10  2025/01/27 12:04:07  jmam
$send$ Polskie znaki

Revision 1.9  2025/01/22 17:45:24  jmam
$send$ Rzutowanie na datę

Revision 1.8  2025/01/22 17:43:52  jmam
Rzutowanie na datę

Revision 1.7  2024/10/24 11:01:20  jmam
$SEND$ Popr. polskie znaki - mix collation po ost. sql zmianach

Revision 1.6  2024/10/24 10:57:03  jmam
$SEND$ Popr. polskie znaki - mix collation po ost. sql zmianach

Revision 1.5  2024/10/24 10:26:42  jmam
$SEND$ Popr. UTF8 mix collation po ost. sql zmianach

Revision 1.4  2024/10/15 17:10:31  jmam
$SEND$

Revision 1.3  2024/10/15 16:32:53  jmam
$SEND$

Revision 1.2  2024/10/15 16:31:58  jmam
$SEND$ do wysyłki

Revision 1.1  2024/10/15 09:07:16  jmam
Inicjacja
*/
DELIMITER $$

DROP PROCEDURE IF EXISTS `delegacjePF`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `delegacjePF`(
IN _MODE VARCHAR(200),
IN _GUID VARCHAR(38),
IN _UserGUID VARCHAR(38),
IN _Status VARCHAR(38),
IN _ParamA VARCHAR(255),
IN _ParamB VARCHAR(255),
IN _ParamC VARCHAR(255),
IN _ParamD VARCHAR(255),
IN _ParamE MEDIUMTEXT
)

L_delegacjePF:BEGIN

DECLARE _TGUID VARCHAR(38);
DECLARE _DocGUID VARCHAR(38);
DECLARE _LOGSTR TEXT;
DECLARE _PLATNIKGUID VARCHAR(38);
DECLARE _DATA DATE;
DECLARE _LTIME DATETIME;
DECLARE _DEBUG BOOLEAN;
DECLARE _typDelegacji INTEGER; 
DECLARE _HOURS INTEGER;

SET _DEBUG=_ParamE LIKE "%DEBUG%",@delegacje.mode=NULL;
SET _ParamE=REPLACE(_ParamE,"DEBUG","");
SET _TypDelegacji = _VarInt(IFNULL(NULLIF(_Status, ''), 1));    -- 0 - zwykła delegacja, 1 - szkolenie

	IF _MODE LIKE 'DELEGACJE.MOD%' THEN
		SET @.dp.IDN = NULLIF(_Status, '');
		
		IF _MODE IN ('DELEGACJE.MOD.INIT') THEN		
		SELECT typDelegacji INTO @typDelegacji FROM `e_szkolenia`;
		/*------------------------------------------------------------------------------------
			_GUID	- duid delegacji
			_Status	- ew. IDN pozycji delegacji
		------------------------------------------------------------------------------------*/
			DROP TEMPORARY TABLE IF EXISTS `te_delegacje_plan`;
			CREATE TEMPORARY TABLE `te_delegacje_plan` 
			SELECT 
				IF(dp.Typ = 'trasa', 'Przejazd', 'Pobyt') AS Typ_Str,
				/*	było do 26 III 2024 - teraz view `v_SRODKI_LOKOM`
				IFNULL(sp.DisplayValue, '???') AS SrodkiLokom,
				*/
				IFNULL(sp.Nazwa, '???') AS SrodkiLokom,
				_Fmt_DateTime(tFrom, 'ddd d mmm yyyy hh:nn @Y@D') AS tFrom_Str,
				-- tFrom AS tFrom_Str,
				_Fmt_DateTime(tto, 'ddd d mmm yyyy hh:nn @Y@D') AS tTo_Str,
				IF(dp.Typ = 'Pobyt',
					'n/d',
					IF(dp.Dist = 0, '',
						IF(dp.Dist < 1, 
							CONCAT(_DisplayFmt_PL(dp.Dist*1000, 2, 1, ' '), ' m'),
							CONCAT(_DisplayFmt_PL(dp.Dist, 2, 1, ' '), ' km')
						)
					)
				) AS Dist_Str,
				dp.*,
				dps.*,
				(@.CConfl :=
					(
					SELECT
						COUNT(*) AS CConfl
					FROM `delegacje_plan` dps 
					WHERE 
						dps.GUIDNg = _GUID
						AND dp.typ = 'Trasa'
						AND dps.typ = 'Trasa'
						AND dps.IDN <> dp.Idn
						AND _TimeRange('conflict', dp.tFrom, dp.tTo - INTERVAL 1 SECOND, dps.tFrom, dps.tTo, '', '')
					)
				) AS CConfl,
				CONCAT_WS(';', 
					IF(@.CConfl > 0, 'ERR.DOJ.RANGE', NULL),
					NULL
				) AS Err,
				CONCAT_WS(';', 
					IF(@.CConfl > 0, 'Przejazd nakłada się czasowo na inny przejazd w tej delegacji (popraw dane)', NULL),
					NULL
				) AS ErrMsg
			FROM `delegacje_plan` dp 
			INNER JOIN (
				SELECT 
					SUM(dps.Koszt) AS SKoszt, 
					SUM(IF(dps.typ = 'pobyt', dps.Koszt, 0)) AS SKosztPobyt, 
					SUM(IF(dps.typ = 'trasa', dps.Koszt, 0)) AS SKosztTrasa, 
					MIN(dps.tFrom) AS SOd, 
					MAX(dps.tTo) AS SDo 
				FROM `delegacje_plan` dps 
				WHERE 
					dps.GUIDNg = _GUID
			) dps
			/*	było do 26 III 2024 - teraz view `v_SRODKI_LOKOM`
			LEFT JOIN `slowniki_pierwotne` sp ON sp.slownik_GUID = 'SRODKI_LOKOM' AND sp.Value = dp.LokomTyp
			*/
			LEFT JOIN `v_SRODKI_LOKOM` sp ON sp.Value = dp.LokomTyp
			WHERE 
				dp.GUIDNg = _GUID
				AND IF(@.dp.IDN IS NULL, TRUE, dp.IDN = @.dp.IDN)
			ORDER BY dp.tFrom	
			;
		END IF;
		
		
		IF 
			_MODE LIKE 'DELEGACJE.MOD.Plan.SELECT%' OR 
			_MODE LIKE 'DELEGACJE.MOD.Plan.PREPARE.SELECT%' 
		THEN
		/*------------------------------------------------------------------------------------
			_GUID	- duid delegacji
			_Status	- ew. IDN pozycji delegacji
		------------------------------------------------------------------------------------*/
			DROP TEMPORARY TABLE IF EXISTS `te_delegacje_plan`;
			CREATE TEMPORARY TABLE `te_delegacje_plan` 
			SELECT 
				IF(dp.Typ = 'trasa', 'Przejazd', 'Pobyt') AS Typ_Str,
				/*	było do 26 III 2024 - teraz view `v_SRODKI_LOKOM`
				IFNULL(sp.DisplayValue, '???') AS SrodkiLokom,
				*/
				IFNULL(sp.Nazwa, '???') AS SrodkiLokom,
				_Fmt_DateTime(tFrom, 'ddd d mmm yyyy hh:nn @Y@D') AS tFrom_Str,
				-- tFrom AS tFrom_Str,
				_Fmt_DateTime(tto, 'ddd d mmm yyyy hh:nn @Y@D') AS tTo_Str,
				IF(dp.Typ = 'Pobyt',
					'n/d',
					IF(dp.Dist = 0, '',
						IF(dp.Dist < 1, 
							CONCAT(_DisplayFmt_PL(dp.Dist*1000, 2, 1, ' '), ' m'),
							CONCAT(_DisplayFmt_PL(dp.Dist, 2, 1, ' '), ' km')
						)
					)
				) AS Dist_Str,
				dp.*,
				dps.*,
				(@.CConfl :=
					(
					SELECT
						COUNT(*) AS CConfl
					FROM `delegacje_plan` dps 
					WHERE 
						dps.GUIDNg = _GUID
						AND dp.typ = 'Trasa'
						AND dps.typ = 'Trasa'
						AND dps.IDN <> dp.Idn
						-- AND _TimeRange('conflict', dp.tFrom, dp.tTo, dps.tFrom, dps.tTo - INTERVAL 1 SECOND, '', '')
						AND _TimeRange('conflict', dp.tFrom, dp.tTo, @.dps.tFrom := (dps.tFrom + INTERVAL 1 SECOND), GREATEST(@.dps.tFrom, dps.tTo - INTERVAL 1 SECOND), '', '')
					)
				) AS CConfl,
				CONCAT_WS(';', 
					IF(@.CConfl > 0, 'ERR.DOJ.RANGE', NULL),
					NULL
				) AS Err,
				CONCAT_WS(';', 
					IF(@.CConfl > 0, 'Przejazd nakłada się czasowo na inny przejazd w tej delegacji (popraw dane)', NULL),
					NULL
				) AS ErrMsg
			FROM `delegacje_plan` dp 
			INNER JOIN (
				SELECT 
					SUM(dps.Koszt) AS SKoszt, 
					SUM(IF(dps.typ = 'pobyt', dps.Koszt, 0)) AS SKosztPobyt, 
					SUM(IF(dps.typ = 'trasa', dps.Koszt, 0)) AS SKosztTrasa, 
					MIN(dps.tFrom) AS SOd, 
					MAX(dps.tTo) AS SDo 
				FROM `delegacje_plan` dps 
				WHERE 
					dps.GUIDNg = _GUID
			) dps
			/*	było do 26 III 2024 - teraz view `v_SRODKI_LOKOM`
			LEFT JOIN `slowniki_pierwotne` sp ON sp.slownik_GUID = 'SRODKI_LOKOM' AND sp.Value = dp.LokomTyp
			*/
			LEFT JOIN `v_SRODKI_LOKOM` sp ON sp.Value = dp.LokomTyp
			WHERE 
				dp.GUIDNg = _GUID
				AND IF(@.dp.IDN IS NULL, TRUE, dp.IDN = @.dp.IDN)
			ORDER BY dp.tFrom	
			;
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.SELECT%' THEN
		/*------------------------------------------------------------------------------------
			_GUID	- duid delegacji
			_Status	- ew. IDN pozycji delegacji
		------------------------------------------------------------------------------------*/
			SELECT
				t.*
			FROM `te_delegacje_plan` t
			;
			LEAVE L_delegacjePF;	-- wychodze 
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.ADD%' THEN
		/*------------------------------------------------------------------------------------
			dodanie pobytu (zwróci ten 1 rekord)
			CALL delegacjePF('DELEGACJE.MOD.Plan.ADD', 'x', '', '', 'pobyt', '', '', '', '<select>');
			dodanie przejazdu (zwróci ten 1 rekord)
			CALL delegacjePF('DELEGACJE.MOD.Plan.ADD', 'x', '', '', 'trasa', '', '', '', '<select>');
			_GUID	- duid delegacji
			_ParamA - typ pozycji: ""/"pobyt" pobyt/nocleg, "trasa" - trasa/dojazd
			_Status	- IDN pozycji delegacji z której kreujemy - gdy null pobieramy nastarszą
		------------------------------------------------------------------------------------*/
			
			SET
				@.prev.dp.IDN = IFNULL(
					@.dp.IDN,
					(SELECT dp.IDN FROM `delegacje_plan` dp WHERE dp.GUIDNg = _GUID ORDER BY dp.tTo DESC, dp.IDN DESC LIMIT 1)
				)
			;
			-- SELECT @.prev.dp.IDN;
			INSERT IGNORE INTO `delegacje_plan` 
				(GUIDNg, Typ, tFrom, tTo, pFrom, LokomTyp, adres)
				SELECT
				--	CONCAT_WS('/', dp.Typ, dp.pFrom, dp.pTo, dp.tFrom, dp.tTo) AS Src,
					pre.GUIDNg AS GUIDNg, 
					pre.Typ AS Typ,
					-- było (@.dp.tFrom := IFNULL(dp.tTo, _varDateToDateTime(CURRENT_DATE(), IF(pre.Typ = 'pobyt', '12:00', '7:00')))) AS tFrom,
					(@.dp.tFrom := CONVERT(
						IFNULL(dp.tTo, 
							IF(@session.globals.Owner IN ('PLISZKA', 'SEVENET', 'SKOK'),	
								d.DataOd,
								_DT2DateTime(CURRENT_DATE(), TIME(IF(pre.Typ = 'pobyt', '12:00', '7:00')))
							)
						)
					, DATETIME)
					) AS tFrom,
					IF(pre.Typ = 'pobyt', 
						_DT2DateTime(DATE(@.dp.tFrom) + INTERVAL 1 DAY, '12:00'),
						IF(@session.globals.Owner = 'SKOK',
							@.dp.tFrom,
							@.dp.tFrom + INTERVAL 2 HOUR
						)
					) AS tTo,
					IF(pre.Typ = 'trasa', 
					--	dla trasy weź miejscowość z pobytu lub z końcowej stacji
						IF(dp.Typ = 'pobyt', dp.pFrom, dp.pTo), 
					--	dla pobytu nie mamy miejscowosci zostaw pustą
						''  -- NULL
					) AS pFrom,
					-- IF(pre.Typ = 'pobyt', 'POBYT', NULL) AS LokomTyp,
                    IF(pre.Typ = 'pobyt', 'POBYT', '') AS LokomTyp,
					'' AS adres
				FROM (SELECT @.prev.dp.IDN AS IDN, _GUID AS GUIDNg, _ParamA AS Typ) pre
				-- INNER JOIN `delegacje` d ON d.GUID = _GUID
				INNER JOIN `e_szkolenia` d ON d.GUID = _GUID
				
				LEFT JOIN `delegacje_plan` dp ON dp.IDN = pre.IDN
			;
			SET @.dp.IDN = LAST_INSERT_ID();
			IF _ParamE LIKE '%<select>%' THEN	
				CALL delegacjePF('DELEGACJE.MOD.Plan.SELECT', _GUID, '', @.dp.IDN, '', '', '', '', '');
			END IF;
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.DELETE%' THEN
		/*------------------------------------------------------------------------------------
			usuwanie  (zwróci pusty rekord!!!)
			CALL delegacjePF('DELEGACJE.MOD.Plan.DELETE', ' x', '', IDN  , '', '', '', '', '<select>');
			_GUID	- duid delegacji
			_Status	- IDN pozycji delegacji
		------------------------------------------------------------------------------------*/
			DELETE dp FROM `delegacje_plan` dp WHERE dp.IDN = @.dp.IDN;
			IF _ParamE LIKE '%<select>%' THEN	
				CALL delegacjePF('DELEGACJE.MOD.Plan.SELECT', _GUID, '', @.dp.IDN, '', '', '', '', '');
			END IF;
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.MODIFY%' THEN
		/*------------------------------------------------------------------------------------
			edycja / modyfikacja 1 rekordu  (zwróci ten 1 rekord)
			CALL delegacjePF('DELEGACJE.MOD.Plan.MODIFY', ' x', '', IDN  , '', '', '', '', @Sznurek);
			CALL delegacjePF('DELEGACJE.MOD.Plan.MODIFY.FROM', ' x', '', IDN  , '', '', '', '', @Sznurek);
			CALL delegacjePF('DELEGACJE.MOD.Plan.MODIFY.TO', ' x', '', IDN  , '', '', '', '', @Sznurek);
			_GUID	- duid delegacji
			_Status	- IDN pozycji delegacji
			@Sznurek	dane rekordu
		------------------------------------------------------------------------------------*/
			SET @.Params = IFNULL(_ParamE, '');
			IF @.Params <> '' THEN
				SET
					@.dp.LokomTyp = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'LokomTyp', ''), ''), ''''),
					@.dp.tFrom = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'tFrom', ''), ''), ''''),
					@.dp.pFrom = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'pFrom', ''), ''), ''''),
					@.dp.tTo = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'tTo', ''), ''), ''''),
					@.dp.pTo = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'pTo', ''), ''), ''''),
					@.dp.Dist = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'Dist', ''), ''), ''''),
					@.dp.Koszt = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'Koszt', ''), ''), ''''),
					@.dp.adres = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'adres', ''), ''), ''''),
					@.dp.opis = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'opis', ''), ''), ''''),
					@.dp.Nr_rej = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'Nr_rej', ''), ''), '''')
				;
				IF _MODE = 'DELEGACJE.MOD.Plan.MODIFY' THEN
				--	Zwykła modyfikacja rekordu
					UPDATE `delegacje_plan` dp 
					SET
						dp.LokomTyp = @.dp.LokomTyp,
						dp.tFrom = @.dp.tFrom,
						dp.pFrom = @.dp.pFrom,
						dp.tTo = @.dp.tTo,
						dp.pTo = @.dp.pTo,
						dp.Dist = @.dp.Dist,
						dp.Koszt = @.dp.Koszt,
						dp.adres = @.dp.adres,
						dp.opis = @.dp.opis,
						dp.Nr_rej = @.dp.Nr_rej
					WHERE 
						dp.IDN = @.dp.IDN
					;
				ELSE
				--	Modyfikacja pFrom/pTo z searcha
					SET 
						@.WE.FromTo.tRec = REPLACE(_MODE, 'DELEGACJE.MOD.Plan.MODIFY.', ''), -- "FROM"/"TO"
						@.dp.tRec = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'tRec', ''), ''), '''')
					;
					UPDATE `delegacje_plan` dp 
					SET
						-- dp.LokomTyp = @.dp.LokomTyp,
						dp.LokomTyp = IFNULL(@.dp.LokomTyp, dp.LokomTyp),
						dp.tFrom = IFNULL(@.dp.tFrom, dp.tFrom),
						dp.pFrom = IFNULL(@.dp.pFrom, dp.pFrom),
						dp.tTo = IFNULL(@.dp.tTo, dp.tTo),
						dp.pTo = IFNULL(@.dp.pTo, dp.pTo),
						dp.Dist = IFNULL(@.dp.Dist, dp.Dist),
						dp.Koszt = IFNULL(@.dp.Koszt, dp.Koszt),
						dp.adres = IFNULL(@.dp.adres, dp.adres),
						dp.opis = IFNULL(@.dp.opis, dp.opis),
						dp.Nr_rej = IFNULL(@.dp.Nr_rej, dp.Nr_rej)
					WHERE 
						dp.IDN = @.dp.IDN
					;
				END IF ;
			END IF ;
			
			IF _ParamE LIKE '%<select>%' THEN	
				CALL delegacjePF('DELEGACJE.MOD.Plan.SELECT', _GUID, '', @.dp.IDN, '', '', '', '', '');
			END IF;
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.Search3.%' THEN
		/*------------------------------------------------------------------------------------
			Wyszukiwanie From 
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search.From', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			Wyszukiwanie To
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search.To', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			_GUID	- duid delegacji
			_Status	- IDN pozycji delegacji
			_ParamA - Szukana fraza
		------------------------------------------------------------------------------------*/
			SET 
				@.WE.FromTo.tRec = IF(_MODE LIKE '%FROM', 'FROM', 'TO'),
				@.WE.FromTo.Search = _ParamA
			;
			SELECT
				t.*
				-- , @.WE.FromTo.tRec AS IN_tRec		
			FROM
			(
				(
				SELECT
					IF(tRec.tRec = 'FROM', 
						dp.pFROM, 
						IF(tRec.tRec = 'TO', 
							dp.pTo,
							CONCAT(
								'Trasa... ',
								CONCAT_WS(' -> ',
									dp.pFrom,
									dp.pTo
								)
							)
						)
					) AS DisplayValue,
					IF(tRec.tRec = 'FROM',
						dp.pFROM, 
						IF(tRec.tRec = 'TO', 
							dp.pTo,
							IF(@.WE.FromTo.tRec = 'FROM', dp.pFROM, dp.pTO)
							-- IF(dp.fFROM, dp.pFROM, dp.pTo)
						)
					)
					AS SortValue,
				--	pola do zapisu ...
				--	Stacja startowa 
					IF(@.WE.FromTo.tRec = 'FROM', 
					--	dla wyszukiwania startowej stacji
						IF(tRec.tRec LIKE '%FROM%',
							dp.pFROM,
							IF(tRec.tRec = 'TO', 
								dp.pTo,
								NULL
							)
						),
					--	dla wyszukiwania koncowej stacji - start tylko dla FROM.TO
						IF(tRec.tRec LIKE '%FROM.TO%',
							dp.pFROM,
							NULL
						)
					) AS pFrom,
				--	Stacja koncowe 
					IF(@.WE.FromTo.tRec = 'TO', 
					--	dla wyszukiwania koncowej stacji
						IF(tRec.tRec LIKE '%TO%',
							dp.pTo,
							IF(tRec.tRec = 'FROM', 
								dp.pFrom,
								NULL
							)
						),
					--	dla wyszukiwania startowej stacji - koncowa tylko dla FROM.TO
						IF(tRec.tRec LIKE '%FROM.TO%',
							dp.pTo,
							NULL
						)
					) AS pTo,
					IF(tRec.tRec = 'FROM.TO', dp.Dist, NULL) AS Dist,
					tRec.*,
					NULL AS mru_IDN,
					@.WE.FromTo.tRec AS WE_tRec
					-- ,dp.*
				FROM
					(SELECT 'FROM' AS tRec UNION SELECT 'TO' AS tRec UNION SELECT 'FROM.TO' AS tRec) AS tRec,
					`delegacje_plan` dpcurr,
					(
					SELECT
						dp.pFrom LIKE CONCAT('%', @.WE.FromTo.Search, '%') AS fFROM,
						dp.pTo LIKE CONCAT('%', @.WE.FromTo.Search, '%') AS fTO,
						dp.*
					FROM `delegacje_plan` dp
					WHERE
						TRUE
						AND LENGTH(@.WE.FromTo.Search) > 3
						AND 
						(
							dp.pFrom LIKE CONCAT('%', @.WE.FromTo.Search, '%')
							OR
							dp.pTo LIKE CONCAT('%', @.WE.FromTo.Search, '%')
						)
					) AS dp
				WHERE
					TRUE 
					AND dpcurr.IDN = @.dp.IDN
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					AND NOT(@.WE.FromTo.tRec = 'TO' AND dpcurr.Typ = 'pobyt')
					AND 
						IF(@.WE.FromTo.tRec = 'TO', 
						--	dla TO tylko rekord będący trasą
							dpcurr.Typ = 'trasa', 
						--	dla FROM bierzemy zarówno trasy i pobyty dla rekordu będący trasą trasy i tylko pobyty dla rekordu będącego pobytem 
							IF(dpcurr.Typ = 'pobyt',
								dp.Typ = dpcurr.Typ,
								TRUE
							)
						)
					-- AND IF(tRec.tRec = 'FROM.TO', dpcurr.Typ = 'trasa', TRUE)
					AND 
					IF(tRec.tRec = 'FROM.TO', -- yyy
						IF(@.WE.FromTo.tRec = 'FROM', dp.fFROM, dp.fTO), -- AND dpcurr.Typ = 'trasa',
						IF(tRec.tRec = 'FROM', 
							dp.fFROM,
							dp.fTO
						)
						-- TRUE
					)
				GROUP BY DisplayValue
				ORDER BY SortValue, DisplayValue
				)
				UNION
				(
				SELECT
					mru.Note AS DisplayValue,
					mru.Note AS SortValue,
					
					IF(@.WE.FromTo.tRec = 'FROM', mru.Note, NULL) AS pFrom,
					IF(@.WE.FromTo.tRec = 'TO', mru.Descr, NULL) AS pTo,
					NULL AS Dist,
					'MRU' AS tRec,
					mru.IDN AS mru_IDN,
					@.WE.FromTo.tRec AS WE_tRec			
				FROM `mru_dict` mru, `delegacje_plan` dpcurr
				WHERE
					TRUE
					AND dpcurr.IDN = @.dp.IDN
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					AND NOT(@.WE.FromTo.tRec = 'TO' AND dpcurr.Typ = 'pobyt')
					AND LENGTH(@.WE.FromTo.Search) >= 3
					AND mru.OwnerGUID IN ('', 'jmam')
					AND mru.DictId = 'PUB.KOLEJ'
					AND mru.Note LIKE CONCAT('%', @.WE.FromTo.Search, '%')
				)
			) AS t
				-- ;
				-- ) AS t
			GROUP BY t.DisplayValue
			ORDER BY t.SortValue
			;
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.Search1.%' THEN
		/*------------------------------------------------------------------------------------
			Wyszukiwanie From 
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search1.From', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			Wyszukiwanie To
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search1.To', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			_GUID	- duid delegacji
			_Status	- IDN pozycji delegacji
			_ParamA - Szukana fraza
		------------------------------------------------------------------------------------*/
			SET 
				@.WE.FromTo.tRec = IF(_MODE LIKE '%FROM', 'FROM', 'TO'),
				@.WE.FromTo.Search = _ParamA
			;
			DROP TEMPORARY TABLE IF EXISTS `t_search_From_To`;
			CREATE TEMPORARY TABLE IF NOT EXISTS `t_search_From_To` (
			  `DisplayValue` VARCHAR(313) NOT NULL DEFAULT '',
			  `SortValue` VARCHAR(250) DEFAULT NULL,
			  `pFrom` VARCHAR(250) DEFAULT NULL,
			  `pTo` VARCHAR(250) DEFAULT NULL,
			  `Dist` DOUBLE(16,4) DEFAULT NULL,
			  `tRec` VARCHAR(7) CHARACTER SET utf8 NOT NULL DEFAULT '',
			  `mru_IDN` INT(11) DEFAULT NULL,
			  `WE_tRec` MEDIUMTEXT CHARACTER SET utf8 DEFAULT NULL,
			  PRIMARY KEY `DisplayValue`(`DisplayValue`)
			)
			;
			-- TRUNCATE `t_search_From_To`;
			INSERT IGNORE INTO `t_search_From_To`
				SELECT
					IF(tRec.tRec = 'FROM', 
						dp.pFROM, 
						IF(tRec.tRec = 'TO', 
							dp.pTo,
							CONCAT(
								'Trasa... ',
								CONCAT_WS(' -> ',
									dp.pFrom,
									dp.pTo
								)
							)
						)
					) AS DisplayValue,
					IF(tRec.tRec = 'FROM',
						dp.pFROM, 
						IF(tRec.tRec = 'TO', 
							dp.pTo,
							IF(@.WE.FromTo.tRec = 'FROM', dp.pFROM, dp.pTO)
							-- IF(dp.fFROM, dp.pFROM, dp.pTo)
						)
					)
					AS SortValue,
				--	pola do zapisu ...
				--	Stacja startowa 
					IF(@.WE.FromTo.tRec = 'FROM', 
					--	dla wyszukiwania startowej stacji
						IF(tRec.tRec LIKE '%FROM%',
							dp.pFROM,
							IF(tRec.tRec = 'TO', 
								dp.pTo,
								NULL
							)
						),
					--	dla wyszukiwania koncowej stacji - start tylko dla FROM.TO
						IF(tRec.tRec LIKE '%FROM.TO%',
							dp.pFROM,
							NULL
						)
					) AS pFrom,
				--	Stacja koncowe 
					IF(@.WE.FromTo.tRec = 'TO', 
					--	dla wyszukiwania koncowej stacji
						IF(tRec.tRec LIKE '%TO%',
							dp.pTo,
							IF(tRec.tRec = 'FROM', 
								dp.pFrom,
								NULL
							)
						),
					--	dla wyszukiwania startowej stacji - koncowa tylko dla FROM.TO
						IF(tRec.tRec LIKE '%FROM.TO%',
							dp.pTo,
							NULL
						)
					) AS pTo,
					IF(tRec.tRec = 'FROM.TO', dp.Dist, NULL) AS Dist,
					tRec.*,
					NULL AS mru_IDN,
					@.WE.FromTo.tRec AS WE_tRec
					-- ,dp.*
				FROM
					(SELECT 'FROM' AS tRec UNION SELECT 'TO' AS tRec UNION SELECT 'FROM.TO' AS tRec) AS tRec,
					`delegacje_plan` dpcurr,
					(
					SELECT
						dp.pFrom LIKE CONCAT('%', @.WE.FromTo.Search, '%') AS fFROM,
						dp.pTo LIKE CONCAT('%', @.WE.FromTo.Search, '%') AS fTO,
						dp.*
					FROM `delegacje_plan` dp
					WHERE
						TRUE
						AND LENGTH(@.WE.FromTo.Search) > 3
						AND 
						(
							dp.pFrom LIKE CONCAT('%', @.WE.FromTo.Search, '%')
							OR
							dp.pTo LIKE CONCAT('%', @.WE.FromTo.Search, '%')
						)
					) AS dp
				WHERE
					TRUE 
					AND dpcurr.IDN = @.dp.IDN
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					AND NOT(@.WE.FromTo.tRec = 'TO' AND dpcurr.Typ = 'pobyt')
					AND 
						IF(@.WE.FromTo.tRec = 'TO', 
						--	dla TO tylko rekord będący trasą
							dpcurr.Typ = 'trasa', 
						--	dla FROM bierzemy zarówno trasy i pobyty dla rekordu będący trasą trasy i tylko pobyty dla rekordu będącego pobytem 
							IF(dpcurr.Typ = 'pobyt',
								dp.Typ = dpcurr.Typ,
								TRUE
							)
						)
					-- AND dpcurr.Typ = 'trasa'
					-- AND IF(tRec.tRec = 'FROM.TO', dpcurr.Typ = 'trasa', TRUE)
					AND 
					IF(tRec.tRec = 'FROM.TO', -- xxx 
						IF(@.WE.FromTo.tRec = 'FROM', dp.fFROM, dp.fTO), -- AND dpcurr.Typ = 'trasa',
						IF(tRec.tRec = 'FROM', 
							dp.fFROM,
							dp.fTO
						)
						-- TRUE
					)
				GROUP BY DisplayValue
				ORDER BY SortValue, DisplayValue
			;
			INSERT IGNORE INTO `t_search_From_To`
				SELECT
					mru.Note AS DisplayValue,
					mru.Note AS SortValue,
					
					IF(@.WE.FromTo.tRec = 'FROM', mru.Note, NULL) AS pFrom,
					IF(@.WE.FromTo.tRec = 'TO', mru.Descr, NULL) AS pTo,
					NULL AS Dist,
					'MRU' AS tRec,
					mru.IDN AS mru_IDN,
					@.WE.FromTo.tRec AS WE_tRec			
				FROM `mru_dict` mru, `delegacje_plan` dpcurr
				WHERE
					TRUE
					AND dpcurr.IDN = @.dp.IDN
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					AND NOT(@.WE.FromTo.tRec = 'TO' AND dpcurr.Typ = 'pobyt')
					/*
					AND
						IF(@.WE.FromTo.tRec = 'TO', 
						--	dla TO obsługujemy tylko rekord będący trasą
							dpcurr.Typ = 'trasa', 
						--	dla FROM bierzemy 1. zarówno trasy i pobyty dla rekordu będący trasą trasy i 2. tylko pobyty dla rekordu będącego pobytem 
							TRUE
						)
					*/
					AND LENGTH(@.WE.FromTo.Search) > 3
					AND mru.OwnerGUID IN ('', 'jmam')
					AND IF(dpcurr.Typ = 'pobyt', mru.DictId = 'pobyt', mru.DictId IN ('PUB.KOLEJ', 'pobyt'))
					AND mru.Note LIKE CONCAT('%', @.WE.FromTo.Search, '%')
			;
			SELECT 
				t.* 
			FROM `t_search_From_To` t
			
			-- GROUP BY t.DisplayValue
			ORDER BY t.SortValue
			;
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.Search2.%' THEN
		/*------------------------------------------------------------------------------------
			Wyszukiwanie From 
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search1.From', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			Wyszukiwanie To
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search1.To', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			_GUID	- duid delegacji
			_Status	- IDN pozycji delegacji
			_ParamA - Szukana fraza
		------------------------------------------------------------------------------------*/
			SET 
				@.WE.FromTo.tRec = IF(_MODE LIKE '%FROM', 'FROM', 'TO'),
				@.WE.FromTo.Search = _ParamA
			;
			DROP TEMPORARY TABLE IF EXISTS `t_search_From_To_WE`;
			CREATE TEMPORARY TABLE IF NOT EXISTS `t_search_From_To_WE`
				SELECT 
					@.WE.FromTo.tRec AS WE_tRec,
					@.WE.FromTo.Search AS SearchText,
					-- LENGTH(@.WE.FromTo.Search) AS LSearchText,
					dpcurr.IDN AS dp_IDN,
					dpcurr.Typ AS dp_Typ
				FROM `delegacje_plan` dpcurr 
				WHERE 
					dpcurr.IDN = @.dp.IDN 
					AND NOT(@.WE.FromTo.tRec = 'TO' AND dpcurr.Typ = 'pobyt')
					AND LENGTH(@.WE.FromTo.Search) >= 3
			;
			--	select * from `t_search_From_To_WE` we;
			SELECT
				t.*
				-- , @.WE.FromTo.tRec AS IN_tRec		
			FROM
			(
			(
				SELECT
				
					IF(tRec.tRec = 'FROM', 
						dp.pFROM, 
						IF(tRec.tRec = 'TO', 
							dp.pTo,
							CONCAT(
								'Trasa... ',
								CONCAT_WS(' -> ',
									dp.pFrom,
									dp.pTo
								)
							)
						)
					) AS DisplayValue,
					IF(tRec.tRec = 'FROM',
						dp.pFROM, 
						IF(tRec.tRec = 'TO', 
							dp.pTo,
							IF(dp.WE_tRec = 'FROM', dp.pFROM, dp.pTO)
							-- IF(dp.fFROM, dp.pFROM, dp.pTo)
						)
					)
					AS SortValue,
				--	pola do zapisu ...
				--	Stacja startowa 				
					IF(dp.WE_tRec = 'FROM', 
					--	dla wyszukiwania startowej stacji
						IF(tRec.tRec LIKE '%FROM%',
							dp.pFROM,
							IF(tRec.tRec = 'TO', 
								dp.pTo,
								NULL
							)
						),
					--	dla wyszukiwania koncowej stacji - start tylko dla FROM.TO
						IF(tRec.tRec LIKE '%FROM.TO%',
							dp.pFROM,
							NULL
						)
					) AS pFrom,
				--	Stacja koncowe 
					IF(dp.WE_tRec = 'TO', 
					--	dla wyszukiwania koncowej stacji
						IF(tRec.tRec LIKE '%TO%',
							dp.pTo,
							IF(tRec.tRec = 'FROM', 
								dp.pFrom,
								NULL
							)
						),
					--	dla wyszukiwania startowej stacji - koncowa tylko dla FROM.TO
						IF(tRec.tRec LIKE '%FROM.TO%',
							dp.pTo,
							NULL
						)
					) AS pTo,
					IF(tRec.tRec = 'FROM.TO', dp.Dist, NULL) AS Dist,
					tRec.*,
					NULL AS mru_IDN,
					-- @.WE.FromTo.tRec AS WE_tRec
					dp.WE_tRec
					-- ,dp.*
				FROM `t_search_From_To_WE` we,
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					(SELECT 'FROM' AS tRec UNION SELECT 'TO' AS tRec UNION SELECT 'FROM.TO' AS tRec) AS tRec,
					(
					SELECT
						dp.pFrom LIKE CONCAT('%', we.SearchText, '%') AS fFROM,
						dp.pTo LIKE CONCAT('%', we.SearchText, '%') AS fTO,
						dp.*,
						we.*
					FROM `delegacje_plan` dp, `t_search_From_To_WE` we
					WHERE
						TRUE
						AND 
						(
							dp.pFrom LIKE CONCAT('%', we.SearchText, '%')
							OR
							dp.pTo LIKE CONCAT('%', we.SearchText, '%')
						)
					--	dla rekodu pobytu przeszukujemy tylko pobyty, dla trasy zarówno trasy jak i pobyty 
						AND IF(we.dp_Typ = 'pobyt', dp.Typ = 'pobyt', TRUE)
					) AS dp
				WHERE		
					TRUE 
					-- AND dpcurr.IDN = @.dp.IDN
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					-- AND NOT(@.WE.FromTo.tRec = 'TO' AND dpcurr.Typ = 'pobyt')
					-- AND dpcurr.Typ = 'trasa'
					-- AND IF(tRec.tRec = 'FROM.TO', dpcurr.Typ = 'trasa', TRUE)
					AND 
					IF(tRec.tRec = 'FROM.TO', 
						IF(dp.WE_tRec = 'FROM', dp.fFROM, dp.fTO), -- AND dpcurr.Typ = 'trasa',
						IF(tRec.tRec = 'FROM', 
							dp.fFROM,
							dp.fTO
						)
						-- TRUE
					)
				GROUP BY DisplayValue
				-- ORDER BY SortValue, DisplayValue
			) 
			UNION
			(
				SELECT
					mru.Note AS DisplayValue,
					mru.Note AS SortValue,
					
					IF(we.WE_tRec = 'FROM', mru.Note, NULL) AS pFrom,
					IF(we.WE_tRec = 'TO', mru.Descr, NULL) AS pTo,
					NULL AS Dist,
					'MRU' AS tRec,
					mru.IDN AS mru_IDN,
					-- @.WE.FromTo.tRec AS WE_tRec			
					we.WE_tRec
				FROM `t_search_From_To_WE` we, `mru_dict` mru -- , `delegacje_plan` dpcurr
				WHERE
					TRUE
					AND mru.OwnerGUID IN ('', 'jmam')
					AND IF(we.dp_Typ = 'pobyt', mru.DictId = 'pobyt', mru.DictId IN ('PUB.KOLEJ', 'pobyt'))
					AND mru.Note LIKE CONCAT('%', we.SearchText, '%')
			) 
			) AS t
			GROUP BY DisplayValue
			;
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.Search5.%' THEN
		/*------------------------------------------------------------------------------------
			Wyszukiwanie From 
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search1.From', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			Wyszukiwanie To
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search1.To', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			_GUID	- duid delegacji
			_Status	- IDN pozycji delegacji
			_ParamA - Szukana fraza
		------------------------------------------------------------------------------------*/
			SET 
				@.WE.FromTo.tRec = IF(_MODE LIKE '%FROM', 'FROM', 'TO'),
				@.WE.FromTo.Search = _ParamA
			;
			DROP TEMPORARY TABLE IF EXISTS `t_search_From_To_WE`;
			CREATE TEMPORARY TABLE IF NOT EXISTS `t_search_From_To_WE`
				SELECT 
					@.WE.FromTo.tRec AS WE_tRec,
					@.WE.FromTo.Search AS SearchText,
					-- LENGTH(@.WE.FromTo.Search) AS LSearchText,
					dpcurr.IDN AS dp_IDN,
					dpcurr.Typ AS dp_Typ
				FROM `delegacje_plan` dpcurr 
				WHERE 
					dpcurr.IDN = @.dp.IDN 
					AND NOT(@.WE.FromTo.tRec = 'TO' AND dpcurr.Typ = 'pobyt')
					AND LENGTH(@.WE.FromTo.Search) >= 3
			;
			DROP TEMPORARY TABLE IF EXISTS `t_search_From_To`;
			CREATE TEMPORARY TABLE IF NOT EXISTS `t_search_From_To` (
			  `DisplayValue` VARCHAR(313) NOT NULL DEFAULT '',
			  `SortValue` VARCHAR(250) DEFAULT NULL,
			  `pFrom` VARCHAR(250) DEFAULT NULL,
			  `pTo` VARCHAR(250) DEFAULT NULL,
			  `Dist` DOUBLE(16,4) DEFAULT NULL,
			  `tRec` VARCHAR(10) NOT NULL DEFAULT '',
			  `mru_IDN` INT(11) DEFAULT NULL,
			  `WE_tRec` MEDIUMTEXT DEFAULT NULL,
			  PRIMARY KEY `DisplayValue`(`DisplayValue`)
			)
			;
			-- TRUNCATE `t_search_From_To`;
			INSERT IGNORE INTO `t_search_From_To`
				SELECT
					IF(tRec.tRec = 'FROM', 
						dp.pFROM, 
						IF(tRec.tRec = 'TO', 
							dp.pTo,
							CONCAT(
								'Trasa... ',
								CONCAT_WS(' -> ',
									dp.pFrom,
									dp.pTo
								)
							)
						)
					) AS DisplayValue,
					IF(tRec.tRec = 'FROM',
						dp.pFROM, 
						IF(tRec.tRec = 'TO', 
							dp.pTo,
							IF(dp.WE_tRec = 'FROM', dp.pFROM, dp.pTO)
							-- IF(dp.fFROM, dp.pFROM, dp.pTo)
						)
					)
					AS SortValue,
				--	pola do zapisu ...
				--	Stacja startowa 				
					IF(dp.WE_tRec = 'FROM', 
					--	dla wyszukiwania startowej stacji
						IF(tRec.tRec LIKE '%FROM%',
							dp.pFROM,
							IF(tRec.tRec = 'TO', 
								dp.pTo,
								NULL
							)
						),
					--	dla wyszukiwania koncowej stacji - start tylko dla FROM.TO
						IF(tRec.tRec LIKE '%FROM.TO%',
							dp.pFROM,
							NULL
						)
					) AS pFrom,
				--	Stacja koncowe 
					IF(dp.WE_tRec = 'TO', 
					--	dla wyszukiwania koncowej stacji
						IF(tRec.tRec LIKE '%TO%',
							dp.pTo,
							IF(tRec.tRec = 'FROM', 
								dp.pFrom,
								NULL
							)
						),
					--	dla wyszukiwania startowej stacji - koncowa tylko dla FROM.TO
						IF(tRec.tRec LIKE '%FROM.TO%',
							dp.pTo,
							NULL
						)
					) AS pTo,
					IF(tRec.tRec = 'FROM.TO', dp.Dist, NULL) AS Dist,
					tRec.*,
					NULL AS mru_IDN,
					-- @.WE.FromTo.tRec AS WE_tRec
					dp.WE_tRec
					-- ,dp.*
				FROM `t_search_From_To_WE` we,
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					(SELECT 'FROM' AS tRec UNION SELECT 'TO' AS tRec UNION SELECT 'FROM.TO' AS tRec) AS tRec,
					(
					SELECT
						dp.pFrom LIKE CONCAT('%', we.SearchText, '%') AS fFROM,
						dp.pTo LIKE CONCAT('%', we.SearchText, '%') AS fTO,
						dp.*,
						we.*
					FROM `delegacje_plan` dp, `t_search_From_To_WE` we
					WHERE
						TRUE
						AND 
						(
							dp.pFrom LIKE CONCAT('%', we.SearchText, '%')
							OR
							dp.pTo LIKE CONCAT('%', we.SearchText, '%')
						)
					--	dla rekodu pobytu przeszukujemy tylko pobyty, dla trasy zarówno trasy jak i pobyty 
						AND IF(we.dp_Typ = 'pobyt', dp.Typ = 'pobyt', TRUE)
					) AS dp
				WHERE		
					TRUE 
					-- AND dpcurr.IDN = @.dp.IDN
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					-- AND NOT(@.WE.FromTo.tRec = 'TO' AND dpcurr.Typ = 'pobyt')
					-- AND dpcurr.Typ = 'trasa'
					AND IF(tRec.tRec != 'FROM', dp.dp_Typ = 'trasa', TRUE)	-- FROM.TO i TO tylko dla tras
					AND 
					IF(tRec.tRec = 'FROM.TO', 
						IF(dp.WE_tRec = 'FROM', dp.fFROM, dp.fTO), -- AND dpcurr.Typ = 'trasa',
						IF(tRec.tRec = 'FROM', 
							dp.fFROM,
							dp.fTO
						)
						-- TRUE
					)
				-- GROUP BY DisplayValue
				ORDER BY SortValue
				LIMIT 200
			;
			INSERT IGNORE INTO `t_search_From_To`
				SELECT
					mru.Note AS DisplayValue,
					mru.Note AS SortValue,
					
					IF(we.WE_tRec = 'FROM', mru.Note, NULL) AS pFrom,
					-- IF(we.WE_tRec = 'TO', mru.Descr, NULL) AS pTo,
					IF(we.WE_tRec = 'FROM', mru.Descr, NULL) AS pTo,
					NULL AS Dist,
					'MRU' AS tRec,
					mru.IDN AS mru_IDN,
					-- @.WE.FromTo.tRec AS WE_tRec			
					we.WE_tRec
				FROM `t_search_From_To_WE` we, `mru_dict` mru -- , `delegacje_plan` dpcurr
				WHERE
					TRUE
					AND mru.OwnerGUID IN ('', 'jmam')
					AND IF(we.dp_Typ = 'pobyt', mru.DictId = 'pobyt', mru.DictId IN ('PUB.KOLEJ', 'pobyt'))
					AND mru.Note LIKE CONCAT('%', we.SearchText, '%')
				LIMIT 200
			;
			SELECT 
				t.* 
			FROM `t_search_From_To` t
			
			-- GROUP BY t.DisplayValue
			ORDER BY t.SortValue
			;
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.Search.%' THEN
		/*------------------------------------------------------------------------------------
			Wyszukiwanie From 
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search1.From', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			Wyszukiwanie To
			CALL delegacjePF('DELEGACJE.MOD.Plan.Search1.To', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			_GUID	- duid delegacji
			_Status	- IDN pozycji delegacji
			_ParamA - Szukana fraza
		------------------------------------------------------------------------------------*/
			SET 
				@.WE.FromTo.tRec = IF(_MODE LIKE '%FROM', 'FROM', 'TO'),
				@.WE.FromTo.Search = _ParamA
			;
			IF 'stacja' LIKE CONCAT('%', @.WE.FromTo.Search, '%') 
			OR FALSE
			THEN
				SET @.WE.FromTo.Search = 'PKP';
			END IF;
			DROP TEMPORARY TABLE IF EXISTS `t_search_From_To_WE`;
			CREATE TEMPORARY TABLE IF NOT EXISTS `t_search_From_To_WE`
				SELECT 
					@.WE.FromTo.tRec AS WE_tRec,
					@.WE.FromTo.Search AS SearchText,
					-- LENGTH(@.WE.FromTo.Search) AS LSearchText,
					dpcurr.IDN AS dp_IDN,
					dpcurr.Typ AS dp_Typ,
					dpcurr.LokomTyp AS dp_LokomTyp
				FROM `delegacje_plan` dpcurr 
				WHERE 
					dpcurr.IDN = @.dp.IDN 
					AND NOT(@.WE.FromTo.tRec = 'TO' AND dpcurr.Typ = 'pobyt')
					AND LENGTH(@.WE.FromTo.Search) >= 3
			;
			DROP TEMPORARY TABLE IF EXISTS `t_search_From_To`;
			CREATE TEMPORARY TABLE IF NOT EXISTS `t_search_From_To` (
			  `IDtxt` VARCHAR(250) NOT NULL DEFAULT '',
			  `DisplayValue` VARCHAR(250) NOT NULL DEFAULT '',
			  `SortValue` VARCHAR(250) DEFAULT NULL,
			  `pFrom` VARCHAR(250) DEFAULT NULL,
			  `pTo` VARCHAR(250) DEFAULT NULL,
			  `adres` VARCHAR(250) DEFAULT NULL,
			  `Dist` DOUBLE(16,4) DEFAULT NULL,
			  `tRec` VARCHAR(10) NOT NULL DEFAULT '',
			  `mru_IDN` INT(11) DEFAULT NULL,
			  `WE_tRec` MEDIUMTEXT DEFAULT NULL,
			  -- PRIMARY KEY `DisplayValue`(`DisplayValue`)
			  PRIMARY KEY `IDtxt`(`IDtxt`)
			)
			;
		--	TRUNCATE `t_search_From_To`;	
		--	Wstaw z MRU	
			INSERT IGNORE INTO `t_search_From_To`
				SELECT
					mru.Note AS IDtxt,
					IF(we.WE_tRec = 'FROM' AND we.dp_Typ = 'pobyt',
						CONCAT_WS(' - ', _CutSTR(mru.Note, 40, '...'), NULLIF(mru.Descr, '')),
						IF(mru.Note LIKE CONCAT('%', we.SearchText, '%'),
							CONCAT_WS(' ', mru.Note, mru.Descr), -- mru.Note,
							CONCAT_WS(' ', mru.Note, mru.Descr)
						)
					) AS DisplayValue,
					IF(mru.Note LIKE CONCAT('%', we.SearchText, '%'),
						mru.Note,
						CONCAT_WS(' ', 'Z', mru.Note, mru.Descr)
					) AS SortValue,
				--	Pole Skąd	
					IF(we.WE_tRec = 'FROM', 
					--	edytujemy skąd
						mru.Note, 
						NULL
					) AS pFrom,
				--	Pole dokąd - tylko pobyt bo to słownik MRU a nie delgacja
					IF(we.WE_tRec = 'TO', 
					--	edytujemy dokąd
						mru.Note,
					--	edytujemy skąd
						NULL
					) AS pTo,
				--	Pole adres - tylko pobyt bo to słownik MRU a nie delgacja
					IF(we.WE_tRec = 'FROM', 
						IF(we.dp_Typ = 'pobyt',
						--	dla pobytu pole dokąd bedzie adresem zam wstaw Desr
							mru.Descr, 
							NULL
						),
						NULL
					) AS adres,
					NULL AS Dist,
					'MRU' AS tRec,
					mru.IDN AS mru_IDN,
					-- @.WE.FromTo.tRec AS WE_tRec			
					we.WE_tRec
				FROM `t_search_From_To_WE` we, `mru_dict` mru -- , `delegacje_plan` dpcurr
				WHERE
					TRUE
					AND mru.OwnerGUID IN ('', 'jmam')
					AND 
						IF(we.dp_Typ = 'pobyt', 
							mru.DictId = 'pobyt', 
							IF(dp_LokomTyp LIKE '%KOLEJ%', 
								mru.DictId IN ('PUB.KOLEJ', 'PUB.SAMOLOT'),
								mru.DictId IN ('PUB.KOLEJ', 'PUB.SAMOLOT', 'pobyt')
							)
						)
					AND 
						(
						mru.Note LIKE CONCAT('%', we.SearchText, '%')
						OR
						mru.Descr LIKE CONCAT('%', we.SearchText, '%')
						)
				LIMIT 200
			;
		--	Wstaw z delegacji ale...
		--	najpierw meta stacje/hotele	
			DROP TEMPORARY TABLE IF EXISTS `t_search_From_To_txt`;
			CREATE TEMPORARY TABLE IF NOT EXISTS `t_search_From_To_txt` 
				SELECT
					dp.IDN,
					/*
					IF('FROM' LIKE @.fRec,
						dp.pFrom,
						dp.pTo
					) AS DisplayValue,
					*/
					dp.pFrom, dp.pTo, dp.Dist, dp.Typ, dp.adres,
					(@.fRec :=
						CONCAT_WS('.',
							IF(dp.pFrom LIKE CONCAT('%', we.SearchText, '%'), 'FROM', NULL),
							IF(dp.adres LIKE CONCAT('%', we.SearchText, '%'), 'FROM', NULL),
							IF(dp.pTo LIKE CONCAT('%', we.SearchText, '%'), 'TO', NULL)
						)
					) AS fRec,
					WE_tRec,
					SearchText,
					dp_Typ,
					dp_IDN	
				FROM `t_search_From_To_WE` we, `delegacje_plan` dp
				WHERE
					TRUE
					-- AND we.dp_IDN <> dp.IDN
				--	dla rekodu pobytu przeszukujemy tylko pobyty, dla trasy zarówno trasy jak i pobyty 
					AND IF(we.dp_Typ = 'pobyt', dp.Typ = 'pobyt', TRUE)	-- gdy edyt. pobyt to szukamy tylko w pobytach
					AND 
					(
						dp.pFrom LIKE CONCAT('%', we.SearchText, '%')
						OR
						dp.pTo LIKE CONCAT('%', we.SearchText, '%')
						OR
						dp.adres LIKE CONCAT('%', we.SearchText, '%')
					)
				GROUP BY dp.IDN
			;
		-- 	Wstawiam same stacje bez powtórzeń
			INSERT IGNORE INTO `t_search_From_To`
				SELECT
					IF(tRec.tRec = 'TO',
						dp.pTo,
						IF(dp.Typ = 'pobyt',
							CONCAT_WS(' - ', _CutSTR(dp.pFrom, 40, '...'), NULLIF(dp.adres, '')),
							dp.pFrom
						)
					) AS IDtxt,
					@.SortValue :=
					IF(tRec.tRec = 'TO',
					--	Ale uwaga tutaj może znalazł
						dp.pTo,
						IF(dp.Typ = 'pobyt',
							CONCAT_WS(' - ', _CutSTR(dp.pFrom, 40, '...'), NULLIF(dp.adres, '')),
							dp.pFrom
						)
					) AS DisplayValue,
					@.SortValue AS SortValue,
					-- IF(dp.WE_tRec = 'FROM', @.SortValue, NULL) AS pFrom,
					-- IF(dp.WE_tRec = 'TO', @.SortValue, NULL) AS pTo,
					IF(dp.WE_tRec = 'FROM', IF(tRec.tRec = 'TO', dp.pTo, dp.pFrom), NULL) AS pFrom,
					IF(dp.WE_tRec = 'TO', IF(tRec.tRec = 'TO', dp.pTo, dp.pFrom), NULL) AS pTo,
					dp.adres AS adres,
					NULL AS Dist,
					tRec.tRec,
					NULL AS mru_IDN,
					dp.WE_tRec
					/*
					,dp.*,
					IF(tRec.tRec = 'FROM.TO', 'FROM.TO', dp.WE_tRec) AS Dest_p
					-- , tRec.tRec LIKE CONCAT('%', dp.fRec, '%')
					, dp.fRec LIKE CONCAT('%', tRec.tRec, '%')
					,'FROM' LIKE CONCAT('%', 'FROM.TO', '%')
					*/
				FROM 
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					-- (SELECT 'FROM' AS tRec UNION SELECT 'TO' AS tRec UNION SELECT 'FROM.TO' AS tRec) AS tRec,
					(SELECT 'FROM' AS tRec UNION SELECT 'TO' AS tRec) AS tRec,
					`t_search_From_To_txt` dp
				WHERE
					TRUE
					AND 
					(
						dp.fRec LIKE CONCAT('%', tRec.tRec, '%')	-- zawsze przepuszczamy 
						OR
						(tRec.tRec = 'FROM.TO' AND dp.WE_tRec LIKE CONCAT('%', tRec.tRec, '%'))
					)
				LIMIT 200
			;
		-- 	Teraz wstawiam trasy stacja from - > stacja To 
			INSERT IGNORE INTO `t_search_From_To`
				SELECT
					CONCAT(
						'Trasa... ',
						CONCAT_WS(' -> ',
							dp.pFrom,
							dp.pTo
						)
					) AS IDtxt,
					CONCAT(
						'Trasa... ',
						CONCAT_WS(' -> ',
							dp.pFrom,
							dp.pTo
						)
					) AS DisplayValue,
					IF(dp.WE_tRec = 'TO',
						dp.pTo,
						dp.pFrom
					) AS SortValue,
					dp.pFrom, 
					dp.pTo, 
					dp.adres AS adres,
					dp.Dist,
					dp.WE_tRec AS tRec,
					NULL AS mru_IDN,
					dp.WE_tRec
					-- ,dp.*
					-- tRec.tRec,
					-- IF(tRec.tRec = 'FROM.TO', 'FROM.TO', dp.WE_tRec) AS Dest_p
					-- , tRec.tRec LIKE CONCAT('%', dp.fRec, '%')
				FROM 
				--	dla rekordu pobytu pole pTO nie jest obsługiwane	
					-- (SELECT 'FROM' AS tRec UNION SELECT 'TO' AS tRec UNION SELECT 'FROM.TO' AS tRec) AS tRec,
					-- (SELECT 'FROM' AS tRec UNION SELECT 'TO' AS tRec) AS tRec,
					`t_search_From_To_txt` dp
				WHERE
					TRUE
					AND dp.Typ = 'trasa'
					AND (dp.fRec LIKE CONCAT('%', dp.WE_tRec, '%'))
				LIMIT 200
			;
			SELECT 
				t.* 
			FROM `t_search_From_To` t
			WHERE
				IF(t.WE_tRec = 'FROM',
					IFNULL(t.pFrom, '') <> '',
					IFNULL(t.pTo, '') <> ''
				)
			-- ORDER BY t.SortValue
			ORDER BY t.DisplayValue
			;
		END IF;
		
		IF _MODE LIKE 'DELEGACJE.MOD.Plan.LokomTyp.Search' THEN
		/*------------------------------------------------------------------------------------
			Wyszukiwanie LokomTyp
			CALL delegacjePF('DELEGACJE.MOD.Plan.LokomTyp.Search', ' x', '', IDN, 'Gdańsk', '', '', '', @Sznurek);
			_GUID	- duid delegacji
			_Status	- IDN pozycji delegacji
			_ParamA - Szukana fraza
		------------------------------------------------------------------------------------*/
			SET 
				@.WE.FromTo.Search = _ParamA
			;
			SELECT
				sp.Nazwa AS DisplayValue,
				sp.Value AS LokomTyp
				-- ,sp.*
			FROM
			(
				/*	było do 26 III 2024 - teraz view `v_SRODKI_LOKOM`
				SELECT 
					sp.Value, 
					CONCAT_WS(' - ', NULLIF(sparent.DisplayValue, ''), NULLIF(sp.DisplayValue, '')) AS Nazwa, 
					sp.Param2 AS LokTyp, 
					CONCAT_WS('.', sparent.Param1, sp.Param1) AS LP 
				FROM `slowniki_pierwotne` sp 
				LEFT JOIN `slowniki_pierwotne` sparent ON sparent.Value = sp.MasterKey AND sparent.slownik_GUID = 'SRODKI_LOKOM' 
				WHERE 
					sp.slownik_GUID = 'SRODKI_LOKOM' 
					AND sp.VALUE <> 'POBYT'
					AND NOT EXISTS(
						SELECT 
							spChild.Value 
						FROM `slowniki_pierwotne` spChild 
						WHERE 
							sp.Value = spChild.MasterKey 
							AND spChild.slownik_GUID = 'SRODKI_LOKOM'
							
					)
				ORDER BY LP
				*/
				SELECT sl.* FROM `v_SRODKI_LOKOM` sl ORDER BY LP
			) sp
			WHERE
				TRUE
				AND LENGTH(@.WE.FromTo.Search) >= 2
				AND sp.Nazwa LIKE CONCAT('%', @.WE.FromTo.Search, '%')
			ORDER BY DisplayValue
			;
		END IF;
		
	-- 	wychodze bo ponizej 'DELGACJE.[...]' zmieniają sie w  'SZKOLENIA.[...]'	
		LEAVE L_delegacjePF;	-- wychodze 
	END IF;
	
	IF _MODE LIKE 'DELEGACJE.%' THEN
		SET 
			_MODE = REPLACE(_MODE, 'DELEGACJE.', 'SZKOLENIA.'),
			_Status = 0,
			_TypDelegacji = 0
		;
	END IF;

	IF _MODE LIKE 'SZKOLENIA.%' THEN
		SET @delegacje.mode = _MODE;
		IF _MODE LIKE 'SZKOLENIA.tbuff_e_szkolenia.%' THEN
		/********************************************************************************************************
			CALL delegacjePF('SZKOLENIA.tbuff_e_szkolenia.Create', 'asdfadf', 'adfas','1','','','','','<select>');
			CALL delegacjePF('SZKOLENIA.tbuff_e_szkolenia.Drop', 'asdfadf', 'adfas','1','','','','','<select>');
			gdy w _ParamE <select> to koncowy select
		********************************************************************************************************/
			IF _MODE IN ('SZKOLENIA.tbuff_e_szkolenia.Create') THEN
SET @.3._GUID = _GUID;		
				IF IFNULL(_GUID, '') IN ('', 'NEW') THEN
					SET 
						_GUID = _Get_GUID_xxx('Wniosek.PF.XXX', IF(_TypDelegacji = 0, 'DELEG', 'SZKOL'), '', '', '', '', '')
					;
				END IF;
SET @.4._GUID = _GUID;		
				SET 
					@.delegacje.RC = NULL
				;
				DROP TEMPORARY TABLE IF EXISTS `tbuff_e_szkolenia`;
				IF FALSE THEN --	po staremu do 28 XI 2022
					CREATE TEMPORARY TABLE `tbuff_e_szkolenia` AS (
						SELECT 
							d.GUID,d.GUID_pracownika,d.NrDelegacji,d.DataOd,d.DataDo, d.opis, d.opis2, d.GUID_kier,miasta,d.km,
							d.katcol0,d.katcol1,d.katcol2,d.katcol3,d.katcol4,d.nocleg,d.inne,d.dojazd,d.dieta,d.sumkosztow,d.zamkniety,
							d.typDelegacji,
							d.Zaliczka, d.Stawka_doj_A, d.Stawka_doj_B, d.Wyzywienie, 
						--	kiedys checkbox był w polu Ryczalt_za_dojazdy teraz -> Uwzgl_ryczalt_za_dojazdy
							d.CNoclegiWlasne, d.CNoclegi, d.CTrasy,
							d.Uwzgl_ryczalt_za_dojazdy, 
							d.Ryczalt_dojazd_stawka, 
							d.Ryczalt_nocleg_stawka,
							d.Diety, 
							d.Ryczalt_dojazd, 
							d.Ryczalt_nocleg, 
							d.Koszty_Pobytow, d.Koszty_Przejazdow, 
							d.Koszty_Pozostale, 
							d.LokomTypStr,
							_VarInt((@.d.Wyzywienie_Pelne := IFNULL(d.Wyzywienie LIKE '%Pełne%', FALSE))) AS Wyzywienie_Pelne,
							_VarInt(IF(@.d.Wyzywienie_Pelne, 1, IFNULL(d.Wyzywienie LIKE '%Śniadania%', 0))) AS Wyzywienie_S,
							_VarInt(IF(@.d.Wyzywienie_Pelne, 1, IFNULL(d.Wyzywienie LIKE '%Obiady%', 0))) AS Wyzywienie_O,
							_VarInt(IF(@.d.Wyzywienie_Pelne, 1, IFNULL(d.Wyzywienie LIKE '%Kolacje%', 0))) AS Wyzywienie_K,
							d.PlatnRodzaj,
							d.PlatnNrRachunku,
							u.IdnDetalu AS um_IdnDetalu, 
							u.opis AS um_opis, 
							u.datanadania AS um_datanadania, 
							u.datawaznosci AS um_datawaznosci, 
							u.fullopis AS um_fullopis,
							
							-- c.confirm_status,
							cw_last.Status_Current_Str,
							cw_last.confirm_status,
							cw_last.idn AS workflow_idn,
							cwc_moje.IDN_workflow AS workflow_idn_moje,
							cwc_moje.Next_ResponseCount,
						--	w _UserGUID jest zalogowany - to od tego zalezy Enabled		
							(IFNULL(cwc_moje.Next_ResponseCount, 0) = 0) AND (cwc_moje.confirm_status IN ('', cwc_moje.Start_Status)) AS Decision_Enabled,
							-- Decision_Enabled = 
							-- (cw_moje.confirm_status IN ('', cw_moje.Start_Status)),
							(IFNULL(cwc_moje.Next_ResponseCount, 0) = 0) AND NOT (cwc_moje.confirm_status IN ('', cwc_moje.Start_Status)) AND (cwc_moje.Decision_UserGUID = d.GUID_pracownika) AS Undo_Enabled,
							-- Undo_Enabled = 
							-- 	NOT (cw_moje.confirm_status IN ('', Start_Status)) AND (cw_moje.Decision_UserGUID = c.UserGUID ),
							(IFNULL(cwc_moje.Next_ResponseCount, 0) = 0) AND (NOT cw_last.confirm_status IN ('end')) AS Edit_Enabled,	-- kiedys tylko dla "new"
							-- NOT (cw_moje.confirm_status IN ('', cw_moje.Start_Status)),
							_VarStr(CONCAT_WS(': ', 
								-- st.statusName, 
								_Brackets('"', cw_last.Status_Current, '"')
							)) AS Status_Info,
							CASE 
								-- WHEN c.PodRodzaj = 1 THEN 'W.ZALICZKA'
								-- WHEN c.PodRodzaj = 2 THEN 'W.ZAPOMOGA'
								-- WHEN c.PodRodzaj = 3 THEN 'W.POZYCZKA'
								WHEN c.PodRodzaj = 5 THEN 'W.SZKOLENIE'
								WHEN c.PodRodzaj = 6 THEN 'W.DELEGACJA'
								ELSE 
									'???'
							END
							AS Wniosek_Typ,
							c.Data
						FROM `delegacje` d
						LEFT JOIN `umiejetnosci` u ON u.DelegacjaGUID = d.guid
						LEFT JOIN `crm_commisions` c ON c.GUID = d.guid
						LEFT JOIN `v_crm_workflow` cw_last ON cw_last.IDN = 
						--	LAST workflow
							(
							SELECT 
								cw.IDN 
							-- FROM `v_crm_workflow` cw 
							FROM `crm_workflow` cw 
							WHERE 
								cw.commisionGUID = c.GUID 
							ORDER BY idn DESC 
							LIMIT 1
							)
					--	w _UserGUID jest zalogowany - to od tego zalezy Enabled		
						LEFT JOIN `v_crm_workflow_confirm` cwc_moje ON cwc_moje.IDN_workflow = 
						--	MOJE LAST workflow
							(
							SELECT 
								cwc.IDN_workflow 
							FROM `v_crm_workflow_confirm` cwc 
							INNER JOIN `grupy_osob` go ON go.grupaGUID = cwc.UserGUID
							WHERE 
								cwc.commisionGUID = c.GUID 
								AND go.OsobaGUID = d.GUID_pracownika
							ORDER BY IDN_workflow DESC 
							LIMIT 1
							)
						WHERE 
							d.GUID = _GUID
					);
				END IF;
			--	po nowemu od 28 XI 2022	
				-- CALL crm_workflow_SELECT('Select.User->nodes->crm', @SQL, _GUID, _USERGUID, '', '', '', '', '');	
				CALL crm_workflow_SELECT('Select.User->crm->nodes', @SQL, _GUID, _USERGUID, '', '', '', '', '');	
					CREATE TEMPORARY TABLE `tbuff_e_szkolenia` AS (
					SELECT 
						d.GUID,
						d.GUID_pracownika,d.NrDelegacji,d.DataOd,d.DataDo, d.opis, d.opis2, d.GUID_kier,miasta,d.km,
						d.katcol0,d.katcol1,d.katcol2,d.katcol3,d.katcol4,d.nocleg,d.inne,d.dojazd,d.dieta,d.sumkosztow,d.zamkniety,
						d.typDelegacji,
						d.Zaliczka, d.Stawka_doj_A, d.Stawka_doj_B, d.Wyzywienie, 
					--	kiedys checkbox był w polu Ryczalt_za_dojazdy teraz -> Uwzgl_ryczalt_za_dojazdy
						d.CDojazdDni, d.CNoclegiWlasne, d.CNoclegi, d.CTrasy,
						d.Uwzgl_ryczalt_za_dojazdy, 
						d.Ryczalt_dojazd_stawka, 
						d.Ryczalt_nocleg_stawka,
						d.Diety, 
						d.Ryczalt_dojazd, 
						d.Ryczalt_nocleg, 
						d.Koszty_Pobytow, d.Koszty_Przejazdow, 
						d.Koszty_Pozostale, 
						d.LokomTypStr,
						d.komentarz_rozlicz,
						d.PlatnRodzaj,
						d.PlatnNrRachunku,
						
						d.CDni,
						d.CNocy,
						
						d.Wyzyw_Pelne,
						d.Wyzyw_S,
						d.Wyzyw_O,
						d.Wyzyw_K,
						d.Deleg_Zagraniczna,
						
						_VarInt((@.d.Wyzywienie_Pelne := IFNULL(d.Wyzywienie LIKE '%Pełne%', FALSE))) AS Wyzywienie_Pelne,
						_VarInt(IF(@.d.Wyzywienie_Pelne, 1, IFNULL(d.Wyzywienie LIKE '%Śniadania%', 0))) AS Wyzywienie_S,
						_VarInt(IF(@.d.Wyzywienie_Pelne, 1, IFNULL(d.Wyzywienie LIKE '%Obiady%', 0))) AS Wyzywienie_O,
						_VarInt(IF(@.d.Wyzywienie_Pelne, 1, IFNULL(d.Wyzywienie LIKE '%Kolacje%', 0))) AS Wyzywienie_K,
						u.IdnDetalu AS um_IdnDetalu, 
						u.opis AS um_opis, 
						u.datanadania AS um_datanadania, 
						u.datawaznosci AS um_datawaznosci, 
						u.fullopis AS um_fullopis,
			/* */
						
						-- c.confirm_status,
								-- cw_last.Status_Current_Str,
						c.Status_Current_Str,
									-- cw_last.confirm_status,
						c.confirm_status,

									-- cw_last.idn AS workflow_idn,
						--	było c.Idn_WorkFlow_Curr AS workflow_idn,
						cwn.cwIdnLast AS workflow_idn,
						
									-- cwc_moje.IDN_workflow AS workflow_idn_moje,
						c.UserLast_cwIDN AS workflow_idn_moje,
									-- cwc_moje.Next_ResponseCount,
								-- WON	NULL AS Next_ResponseCount,		-- to moja wstawka bo nie mam skad - ale chyba nie potrzebne
					--	w _UserGUID jest zalogowany - to od tego zalezy Enabled		
								-- (IFNULL(cwc_moje.Next_ResponseCount, 0) = 0) AND (cwc_moje.confirm_status IN ('', cwc_moje.Start_Status)) AS Decision_Enabled,
						(c.Decyzja_Status = 'USER_BRAK_DECYZJI') AS Decision_Enabled,
						-- Decision_Enabled = 
						-- (cw_moje.confirm_status IN ('', cw_moje.Start_Status)),
								-- (IFNULL(cwc_moje.Next_ResponseCount, 0) = 0) AND NOT (cwc_moje.confirm_status IN ('', cwc_moje.Start_Status)) AND (cwc_moje.Decision_UserGUID = d.GUID_pracownika) AS Undo_Enabled,
						(c.Undo_Status = 'YES') AS Undo_Enabled,
						-- Undo_Enabled = 
						-- 	NOT (cw_moje.confirm_status IN ('', Start_Status)) AND (cw_moje.Decision_UserGUID = c.UserGUID ),
						-- (IFNULL(cwc_moje.Next_ResponseCount, 0) = 0) AND (NOT cw_last.confirm_status IN ('end')) AS Edit_Enabled,	-- kiedys tylko dla "new"
						(c.wfButtons  LIKE '%EDIT%') AS Edit_Enabled,
						-- NOT (cw_moje.confirm_status IN ('', cw_moje.Start_Status)),
						
						/*
								_VarStr(CONCAT_WS(': ', 
									-- st.statusName, 
									_Brackets('"', cw_last.Status_Current, '"')
								)) AS Status_Info,
						*/
						c.Status_Info, 	-- to moja wstawka bo nie mam skad - ale chyba nie potrzebne 
								/*
								CASE 
									-- WHEN c.PodRodzaj = 1 THEN 'W.ZALICZKA'
									-- WHEN c.PodRodzaj = 2 THEN 'W.ZAPOMOGA'
									-- WHEN c.PodRodzaj = 3 THEN 'W.POZYCZKA'
									WHEN c.PodRodzaj = 5 THEN 'W.SZKOLENIE'
									WHEN c.PodRodzaj = 6 THEN 'W.DELEGACJA'
									ELSE 
										'???'
								END
								AS Wniosek_Typ,
								*/
						c.Wniosek_Typ,  -- to moja wstawka bo nie mam skad - ale chyba nie potrzebne  bo tu zamiast "W.DELEGACJA" jest "W.DELEGACJA.W.ABSENCJA"
						c.Data,
						-- cwIdnLast
						c.Idn_WorkFlow_Curr AS workflow_idnOLD,
						vrb.SNr AS PlatnNrRachunkuStr,
						vrb.SOpis AS PlatnNrRachunkuOpis
						
					FROM `delegacje` d
					LEFT JOIN `crm_workflow_n` cwn ON cwn.GUID = d.GUID
					INNER JOIN `t_nodes_2022` c ON d.GUID = c.GUID
					LEFT JOIN `umiejetnosci` u ON u.DelegacjaGUID = d.guid
					-- LEFT JOIN `crm_commisions` c ON c.GUID = d.guid
					LEFT JOIN `v_rachbankowereg_prac` vrb ON vrb.reGUID = d.GUID_pracownika AND vrb.Nr = d.PlatnNrRachunku
					WHERE 
						TRUE
						-- and d.GUID = _GUID
					);
				
				-- SET @.delegacje.RC = ROW_COUNT();
			ELSE
				DROP TEMPORARY TABLE IF EXISTS `tbuff_e_szkolenia`;
			END IF;
		END IF;
		
		IF _MODE LIKE 'SZKOLENIA.Create.e_szkolenia%' THEN
		/********************************************************************************************************
			CALL delegacjePF('SZKOLENIA.Create.e_szkolenia', 'asdfadf', 'adfas','1','','','','','<select>');
			CALL delegacjePF('SZKOLENIA.Create.e_szkolenia.OLD', 'asdfadf', 'adfas','1','','','','','<select>');
			gdy w _ParamE <select> to koncowy select
		********************************************************************************************************/
SET @.1._GUID = _GUID;		
			IF IFNULL(_GUID, '') IN ('', 'NEW') THEN
				SET 
					_GUID = _Get_GUID_xxx('Wniosek.PF.XXX', IF(_TypDelegacji = 0, 'DELEG', 'SZKOL'), '', '', '', '', '')
				;
			END IF;
SET @.2._GUID = _GUID;		
			SET 
				@.delegacje.RC = NULL
			;
		--	Create `tbuff_e_szkolenia`
			CALL delegacjePF('SZKOLENIA.tbuff_e_szkolenia.Create', _GUID, _UserGUID, _Status, _ParamA, _ParamB, _ParamC, _ParamD, _ParamE);
			IF _MODE IN ('SZKOLENIA.Create.e_szkolenia') THEN
				DROP TEMPORARY TABLE IF EXISTS `e_szkolenia`;
				CREATE TEMPORARY TABLE `e_szkolenia` AS (SELECT * FROM `tbuff_e_szkolenia`);
			ELSEIF _MODE IN ('SZKOLENIA.Create.e_szkolenia.OLD') THEN
				DROP TEMPORARY TABLE IF EXISTS `e_szkolenia_OLD`;
				CREATE TEMPORARY TABLE `e_szkolenia_OLD` AS (SELECT * FROM `tbuff_e_szkolenia`);
			END IF;
			SET @.delegacje.RC = ROW_COUNT();
		--	Drop `tbuff_e_szkolenia`
			CALL delegacjePF('SZKOLENIA.tbuff_e_szkolenia.Drop', 'asdfadf', 'adfas','1','','','','','<select>');
			LEAVE L_delegacjePF; 
			
		END IF;
					IF _MODE LIKE 'SZKOLENIA.INSERT.from.PF%' THEN
					/********************************************************************************************************
						CALL delegacjePF('DELEGACJE.INSERT.from.PF.IDN', '50', '','1','','','','','<select>');
						gdy w _ParamE <select> to koncowy select
					********************************************************************************************************/
						IF _MODE LIKE 'SZKOLENIA.INSERT.from.PF.IDN' THEN
							SELECT d.GUID INTO @.delegacje.GUID FROM `delegacje` d WHERE d.IDN = _GUID;	-- _GUID jako IDN
							SET _GUID = @.delegacje.GUID;
						END IF;
						SET @.delegacje.GUID = _GUID;
						UPDATE `delegacje` d
						SET
							d.guid_kier = 
								IFNULL(NULLIF(d.guid_kier, ''),
									(
									SELECT 
										hl.OsobaGUID_B 
									FROM `hr_self_links` hl 
									WHERE 
										hl.OsobaGUID_A = d.GUID_pracownika AND hl.rel = 'szef'
									)
								),
							d.dieta = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Dieta'),
							d.Stawka_doj_A = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Stawka>900'),
							d.Stawka_doj_B = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Stawka<900'),
						--	kiedys stawka byla w Ryczalt_dojazd teraz -> Ryczalt_dojazd_stawka	
							d.Ryczalt_dojazd_stawka = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Ryczalt_dojazdy'),
						--	kiedys stawka byla w Ryczalt_nocleg teraz -> Ryczalt_dojazd_stawka	
							d.Ryczalt_nocleg_stawka = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Ryczalt_noclegi')
							
						WHERE
							d.GUID = _GUID
							AND d.TypDelegacji = 0	-- dla delegacji a nie szkoleń
						;	

						SELECT 
							d.GUID_pracownika,
							IF(d.TypDelegacji = 0, 6, 5) AS PodRodzaj,
							IF(d.TypDelegacji = 0, 'W.DELEGACJA', 'W.SZKOLENIE') AS Wniosek_Typ,
							IF(d.TypDelegacji = 0, 3301, 3301) AS Wniosek_log_miejsca,
							CONCAT_WS('&',
								CONCAT('StartTime=', d.DataOd),
								CONCAT('EndTime=', d.DataDo),
								CONCAT('www_tag_text=', d.Opis),
								-- CONCAT('confirm_status=', ''),	-- ????
								NULL
							) AS Params,
							-- d.GUID_opisu AS Tryb_confirm
							zamkniety AS Tryb_confirm
                        INTO
                            @.delegacje.CRM.GUID_pracownika, @.delegacje.PodRodzaj, @.delegacje.Wniosek_Typ, @.delegacje.Wniosek_log_miejsca, @.delegacje.CRM.Params,
                            @.delegacje.CRM.Tryb_confirm
						FROM `delegacje` d
						WHERE
							d.guid = _GUID
						LIMIT 1 -- po co???
						;	
					--	CRM - PortaFide ...	
						-- IF @.delegacje.NEW THEN
						IF NOT EXISTS(SELECT c.GUID FROM crm_commisions c WHERE c.GUID = _GUID) THEN
		SET @.X.w = '1';				
						--	CRM - PortaFide Insert	- uwaga dla _TypDelegacji = 1 ust. podrodzaj = 5 (szkolenia) dla _TypDelegacji = 0 ust. podrodzaj = 6 (delegacje)
							CALL crm_porta_fide_tools('crm.Wniosek.INSERT', _GUID, @.delegacje.CRM.GUID_pracownika, '', @.delegacje.PodRodzaj, @.delegacje.Wniosek_Typ, '', '', '');
						END IF;
					--	CRM - PortaFide Modify	
						CALL crm_porta_fide_tools('crm.Wniosek.MODIFY', _GUID, @.delegacje.CRM.GUID_pracownika, '', '', '', '', '', @.delegacje.CRM.Params);
						UPDATE `delegacje` d, `crm_commisions` c
						SET
							c.nrwewn = d.Nrdelegacji
						WHERE
							d.guid = _GUID
							AND c.guid = d.guid
						;
						
						SELECT MAX(cw.idn) AS IdnWorkFlow INTO @.delegacje.CRM.LAST.IdnWorkFlow FROM `crm_workflow` cw WHERE cw.commisionGUID = _GUID;
						IF @.delegacje.CRM.Tryb_confirm = '1' THEN
							--	zakończono wypłatą z delgacji settlement_accepted -> payment_accepted
							CALL crm_workflow_TOOLS('TECH.confirm.Response', @.delegacje.CRM.LAST.IdnWorkFlow, '', 'settlement_accepted', 'payment_accepted', '', 'decyzja techniczna - zakończenie');
						ELSEIF @.delegacje.CRM.Tryb_confirm = '2' THEN
							--	zakończono wypłatą z delgacji settlement_accepted -> payment_accepted
							CALL crm_workflow_TOOLS('TECH.confirm.Response', @.delegacje.CRM.LAST.IdnWorkFlow, '', 'approved_1', 'accepted', '', 'decyzja techniczna - trwa');
						ELSE
							--	wrócił z delgacji accepted -> settlement
							CALL crm_workflow_TOOLS('TECH.confirm.Response', @.delegacje.CRM.LAST.IdnWorkFlow, '', 'accepted', 'settlement', '', 'decyzja techniczna - powrót z delgacji');
						END IF;
						
					END IF;
		
		IF _MODE LIKE 'SZKOLENIA.INS-EDIT.%' THEN
			IF _MODE IN ('SZKOLENIA.INS-EDIT.INIT') THEN
			/********************************************************************************************************
				CALL delegacjePF('SZKOLENIA.INS-EDIT.INIT', 'asdfadf', 'adfas','1','','','','','<select>');
				gdy w _ParamE <select> to koncowy select
			********************************************************************************************************/
				IF IFNULL(_GUID, '') IN ('', 'NEW') THEN
					SET 
						_GUID = _Get_GUID_xxx('Wniosek.PF.XXX', IF(_TypDelegacji = 0, 'DELEG', 'SZKOL'), '', '', '', '', '')
					;
				END IF;
				SET @.delegacje.GUID = _GUID;
				CALL delegacjePF('SZKOLENIA.Create.e_szkolenia', _GUID, _UserGUID, _Status, _ParamA, _ParamB, _ParamC, _ParamD, _ParamE);
			--	w @.delegacje.RC jest ROW_COUNT	
				-- IF (SELECT COUNT(*) FROM e_delegacja)=0 AND _MODE='UPDATE_DEL_INIT' THEN
				IF @.delegacje.RC = 0 THEN
					-- INSERT INTO e_delegacja (guid) SELECT _GUID;
					INSERT INTO `e_szkolenia` 
					SET 
						GUID = _GUID,
						guid_pracownika = _USERGUID,
						guid_kier = IFNULL(
							(
								SELECT 
									hl.OsobaGUID_B 
								FROM `hr_self_links` hl 
								WHERE 
									hl.OsobaGUID_A = _USERGUID AND hl.rel = 'szef'
							), ''),
						TypDelegacji = _TypDelegacji	-- _VarInt(IFNULL(NULLIF(_Status, ''), 1)) 	0 - zwykła delegacja, 1 - szkolenie,
					;
					UPDATE `e_szkolenia` e
					SET
						e.guid_kier = 
							(
								SELECT 
									hl.OsobaGUID_B 
								FROM `hr_self_links` hl 
								WHERE 
									hl.OsobaGUID_A = _USERGUID AND hl.rel = 'szef'
							),
						e.dieta = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Dieta'),
						e.Stawka_doj_A = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Stawka>900'),
						e.Stawka_doj_B = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Stawka<900'),
					--	kiedys stawka byla w Ryczalt_dojazd teraz -> Ryczalt_dojazd_stawka	
						e.Ryczalt_dojazd_stawka = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Ryczalt_dojazdy'),
					--	kiedys stawka byla w Ryczalt_nocleg teraz -> Ryczalt_dojazd_stawka	
						e.Ryczalt_nocleg_stawka = (SELECT ROUND(ac.Value, 2) FROM `_app_cfg` ac WHERE ac.Cfg_ID = 'DELEGACJE' AND ac.Key = 'Ryczalt_noclegi'),
						
						e.CDni = (@.e.CDni := (TIMESTAMPDIFF(DAY, e.DataOd, e.DataDo) + 1)),
						e.CNocy = GREATEST(@.e.CDni - 1, 0),

						e.Wyzyw_Pelne = 0,
						e.Wyzyw_S = 0,
						e.Wyzyw_O = 0,
						e.Wyzyw_K = 0,
						e.Wyzywienie_Pelne = 0,
						e.Wyzywienie_S = 0,
						e.Wyzywienie_O = 0,
						e.Wyzywienie_K = 0,
						e.Deleg_Zagraniczna = 0,
						e.PlatnNrRachunku = (@.e.PlatnNrRachunku :=
							IFNULL(
							(
								SELECT
									vrb.NR
								FROM `v_rachbankowereg_prac` vrb
								WHERE
									vrb.reGUID = _USERGUID
									AND IsPrimary = 1
								LIMIT 1
							), '')
						),
						e.PlatnRodzaj = IF(IFNULL(@.e.PlatnNrRachunku, '') = 0, 0, 1)
						
					WHERE
						e.GUID = _GUID
						AND e.TypDelegacji = 0	-- dla delegacji a nie szkoleń
					;
				END IF;
				UPDATE `e_szkolenia` e
				SET
					e.CDni = (@.e.CDni := (TIMESTAMPDIFF(DAY, e.DataOd, e.DataDo) + 1)),
					e.CNocy = GREATEST(@.e.CDni - 1, 0)
				WHERE
					e.GUID = _GUID
					AND e.TypDelegacji = 0	-- dla delegacji a nie szkoleń
				;
			END IF;
			
			IF _MODE IN ('SZKOLENIA.INS-EDIT.ROZLICZ.DELEG') THEN
				SET @.delegacje.GUID = _GUID;
				CALL delegacjePF('DELGACJE.Rozliczenie.Prepare', _GUID, _UserGUID, _Status, _ParamA, _ParamB, _ParamC, _ParamD, _ParamE);
				/*
				UPDATE `e_szkolenia` sz, t_Fin_roliczenie_delegacji t
				SET 
					sz.Diety = t.KwotaDelegacji
				WHERE
					sz.GUID = _GUID
					-- and sz.GUID = _GUID
				;
				*/
				UPDATE `delegacje` d, t_Fin_roliczenie_delegacji t
				SET 
					d.Diety = t.KwotaDelegacji
				WHERE
					d.GUID = _GUID
					-- and sz.GUID = _GUID
				;
			END IF;
			
			IF _MODE IN ('SZKOLENIA.INS-EDIT.BEFORE.APPLY') THEN
				DROP TEMPORARY TABLE IF EXISTS `t_del_before_apply`;
                                    set @.jmam = null;
                                    set @.jmam = concat_WS('/', @.jmam, 'BEFORE.APPLY');
						SET @.Err = 0, @.Msg = '';
				IF _TypDelegacji = 0 THEN
				--	tylko dla delegacji
                                    set @.jmam = concat_WS('/', @.jmam, 'typ = 0');
					UPDATE `e_szkolenia` e
					SET
						e.CDni = (@.e.CDni := (TIMESTAMPDIFF(DAY, e.DataOd, e.DataDo) + 1)),
						e.CNocy = GREATEST(@.e.CDni - 1, 0)
					WHERE
						e.guid = _GUID
						AND e.TypDelegacji = 0
					;
					CALL delegacjePF('DELEGACJE.MOD.Plan.PREPARE.SELECT', _GUID, '', '', '', '', '', '', '');
					CREATE TEMPORARY TABLE `t_del_before_apply` (
						`GUID` VARCHAR(38) DEFAULT '',
						`Err` VARCHAR(100) DEFAULT '',
						`Msg` MEDIUMTEXT, -- DEFAULT '',
						`PlanExists` BOOLEAN DEFAULT 0,
						`PlanOd` DATETIME,
						`PlanDo` DATETIME,
						`PlanErr` VARCHAR(100) DEFAULT '',
						`PlanMsg` MEDIUMTEXT --  DEFAULT ''
					)
					;
					TRUNCATE `t_del_before_apply`;
                                    set @.jmam = concat_WS('/', @.jmam, '1');
					INSERT IGNORE INTO `t_del_before_apply` 
					SELECT 
						e.GUID,
						'', '',
						-- e.DataOd, e.DataDo,
						COUNT(dp.IDN) > 0 AS PlanExists,
						MIN(dp.tFrom) AS PlanOd, MAX(dp.tTo) AS PlanDo,
						'', ''
					FROM `e_szkolenia` e
					-- LEFT JOIN `delegacje_plan` dp ON dp.GUIDNg = e.guid -- and false
					LEFT JOIN `te_delegacje_plan` dp ON dp.GUIDNg = e.guid -- and false
					WHERE
						e.guid = _GUID
						-- e.guid = 'WNIOS.DELEG:100200579678076946'
						AND e.TypDelegacji = 0
					;
                                    set @.jmam = concat_WS('/', @.jmam, '2');
					UPDATE `t_del_before_apply` t, `e_szkolenia` e 
					SET
						t.Err = 
							(@.Err :=
								IF(NOT t.PlanExists,
									'WARNING.PLAN.EMPTY',
									IF(e.DataOd > t.PlanOd OR e.DataDo < t.PlanDo, 
										'ERR.DELEG.RANGE',
										IF(e.CDojazdDni > e.CDni, 
											'ERR.DELEG.DOJAZD.DNI',
											IF(e.CNoclegiWlasne > e.CNocy, 
												'ERR.DELEG.NOCLEG.DNI',
												''
											)
										)
									)
								)
							)
				
					WHERE
						t.Err = ''
						AND e.GUID = t.GUID
					;
					UPDATE `t_del_before_apply` t
					SET
						t.Msg = 
							IF(t.Err = 'WARNING.PLAN.EMPTY',
								'Uwaga - Brak planu dojazdów/noclegów!!!!',
								IF(t.Err = 'ERR.DELEG.RANGE', 
									'Zakres dat delegacji jest niezgodny z planem przejazdów - sprawdź i popraw plan lub zakres dat delegacji!', 
									IF(t.Err = 'ERR.DELEG.DOJAZD.DNI', 
										'Liczba dni rozlicz. dojazdów nie może być wyższa niż łączna liczba dni delegacji!', 
										IF(t.Err = 'ERR.DELEG.NOCLEG.DNI',
											'Liczba noclegów we własnym zakresie nie może być wyższa niż liczba nocy!', 
											''
										)
									)
								)
							)
				
					WHERE
						t.Err != ''
					;
					
                                    set @.jmam = concat_WS('/', @.jmam, '3');
					/* było ale Can't reopen table: 'dp'
                    UPDATE `t_del_before_apply` t
					INNER JOIN `te_delegacje_plan` dp ON dp.IDN = 
						(SELECT IDN FROM `te_delegacje_plan` WHERE GUIDNg = t.guid AND Err <> '' LIMIT 1)
					SET
						t.Err = dp.Err,
						t.Msg = dp.ErrMsg
					WHERE
						t.Err = ''
					;
                    */
					UPDATE `t_del_before_apply` t
					INNER JOIN 
						(SELECT dp.Err, dp.ErrMsg FROM `te_delegacje_plan` dp WHERE GUIDNg = _GUID AND Err <> '' LIMIT 1) dp ON TRUE
					SET
						t.Err = dp.Err,
						t.Msg = dp.ErrMsg
					WHERE
						t.Err = ''
					;
                                    set @.jmam = concat_WS('/', @.jmam, '4');
				ELSE
				--	Szkolenia
					CREATE TEMPORARY TABLE IF NOT EXISTS `t_del_before_apply` SELECT '' AS Err, '' AS Msg;
				END IF;
				--	SELECT @.Err AS Err, @.Msg AS Msg;
				SELECT Err, Msg FROM `t_del_before_apply`;
			END IF;
			
			IF _MODE IN ('SZKOLENIA.INS-EDIT.APPLY') THEN
			-- poprz. IF _MODE = 'UPDATE_DEL' THEN
			/********************************************************************************************************
				CALL delegacjePF('SZKOLENIA.INS-EDIT.APPLY', 'asdfadf', 'adfas','1','','','','','<select>');
				gdy w _ParamE <select> to koncowy select
			********************************************************************************************************/
				SET
					@delegacje.mode = _MODE,
					_GUID = 
						IFNULL(NULLIF(_GUID, ''), 
							(SELECT sz.guid FROM `e_szkolenia` sz LIMIT 1)
						)
				;
			--	LOG - Init
				CALL _Log_Diff_Schema('INIT', '', '', '', 'GUID', _GUID, '*,-koszt_sprzedazy,-jpkgtu', '', '');
			--	create `e_szkolenia_OLD` - na chwilę jako dane OLD do LOGa - z aktualnymi jeszcze danymi przed zapisem - (log:OLD)
				CALL delegacjePF('SZKOLENIA.Create.e_szkolenia.OLD', _GUID, _UserGUID, _Status, _ParamA, _ParamB, _ParamC, _ParamD, _ParamE);
			--	LOG - dane OLD
				CALL _Log_Diff_Schema('ADD.Table.OLD', '', 'e_szkolenia_OLD', '', '', '', '', '', '');
			--	zwalniam `e_szkolenia_OLD`;
				DROP TEMPORARY TABLE IF EXISTS `e_szkolenia_OLD`;
				/*
				IF _GUID ='' THEN
				  SELECT guid from e_delegacja into _GUID;
				END IF;
				 */
				INSERT IGNORE INTO `delegacje` (guid) SELECT _GUID;
				SET @.delegacje.RC = ROW_COUNT();
			--	UWAGA gdy @.delegacje.RC = 1 to oznacza tworzenie (wstawił czyli nie bylo jeszcze takiego rekordu)
				SET @.delegacje.NEW = (@.delegacje.RC = 1);
				SELECT typDelegacji INTO @typDelegacji FROM `e_szkolenia`;
				SET @typDelegacji=IFNULL(@typDelegacji,0);
				SELECT COUNT(*) INTO @ile FROM umiejetnosci WHERE DelegacjaGUID=_GUID;
				IF @ile=0 THEN
				  INSERT IGNORE INTO umiejetnosci(DelegacjaGUID) SELECT GUID FROM `e_szkolenia` WHERE typDelegacji=1;
				END IF;
				
				UPDATE `e_szkolenia` e
				SET
					e.CDni = (@.e.CDni := (TIMESTAMPDIFF(DAY, e.DataOd, e.DataDo) + 1)),
					e.CNocy = GREATEST(@.e.CDni - 1, 0)
				WHERE
					e.guid = _GUID
					AND e.TypDelegacji = 0
				;

				UPDATE `e_szkolenia` e
				SET
					-- e.Wyzywienie_S = (@.e.Wyzywienie_S := (e.Wyzyw_S > 0)),
					-- e.Wyzywienie_O = (@.e.Wyzywienie_O := (e.Wyzyw_O > 0)),
					-- e.Wyzywienie_K = (@.e.Wyzywienie_K := (e.Wyzyw_K > 0)),
					-- e.Wyzywienie_Pelne = (@.e.Wyzywienie_Pelne := ((e.Wyzyw_S > 0) AND (e.Wyzyw_O > 0) AND (e.Wyzyw_K > 0))),
					e.Wyzywienie = 
						-- IF(@.e.Wyzywienie_Pelne = 1,
						IF((e.Wyzyw_S > 0) AND (e.Wyzyw_O > 0) AND (e.Wyzyw_K > 0),
							'Pełne',
							CONCAT_WS(';',
								IF(e.Wyzyw_S > 0, 'Śniadania', NULL),
								IF(e.Wyzyw_O > 0, 'Obiady', NULL),
								IF(e.Wyzyw_K > 0, 'Kolacje', NULL),
								NULL
							)
						),
					e.km = 
					(
						SELECT SUM(dp.Dist) FROM `delegacje_plan` dp WHERE dp.GUIDNg = e.guid AND dp.Typ = 'trasa'
					),
					e.Koszty_Pobytow = 
					(
						SELECT SUM(dp.Koszt) FROM `delegacje_plan` dp WHERE dp.GUIDNg = e.guid AND dp.Typ = 'pobyt'
					),
					e.Koszty_Przejazdow = 
					(
						SELECT SUM(dp.Koszt) FROM `delegacje_plan` dp WHERE dp.GUIDNg = e.guid AND dp.Typ = 'trasa'
					),
				--	Wyliczenie rycz. dniowego za dojazdy (dni x stawka)	
					e.Ryczalt_dojazd = 
						IF(e.Deleg_Zagraniczna = 1,
							e.Ryczalt_dojazd,
							e.CDojazdDni * e.Ryczalt_dojazd_stawka
						),
				--	Wyliczenie rycz. dniowego za noclegi (dni x stawka)	
					e.Ryczalt_nocleg = 
						IF(e.Deleg_Zagraniczna = 1,
							e.Ryczalt_nocleg,
							e.CNoclegiWlasne * e.Ryczalt_nocleg_stawka
						)
				WHERE
					e.guid = _GUID
					AND e.TypDelegacji = 0
				;
				/*	było
				UPDATE `e_szkolenia` e
				SET
					e.Wyzywienie = 
						IF(e.Wyzywienie_Pelne = 1,
							'Pełne',
							IF(e.Wyzywienie_S AND e.Wyzywienie_O AND e.Wyzywienie_K,
								'Pełne',
								CONCAT_WS(';',
									IF(e.Wyzywienie_S, 'Śniadania', NULL),
									IF(e.Wyzywienie_O, 'Obiady', NULL),
									IF(e.Wyzywienie_K, 'Kolacje', NULL),
									NULL
								)
							)
						),
					e.km = 
					(
						SELECT SUM(dp.Dist) FROM `delegacje_plan` dp WHERE dp.GUIDNg = e.guid AND dp.Typ = 'trasa'
					),
					e.Koszty_Pobytow = 
					(
						SELECT SUM(dp.Koszt) FROM `delegacje_plan` dp WHERE dp.GUIDNg = e.guid AND dp.Typ = 'pobyt'
					),
					e.Koszty_Przejazdow = 
					(
						SELECT SUM(dp.Koszt) FROM `delegacje_plan` dp WHERE dp.GUIDNg = e.guid AND dp.Typ = 'trasa'
					)

				WHERE
					e.guid = _GUID
					AND e.TypDelegacji = 0
				;
				*/
				UPDATE `e_szkolenia` e, `delegacje` d
				SET
					d.GUID_pracownika = e.GUID_pracownika,
					d.NrDelegacji=e.NrDelegacji,d.typDelegacji=e.typDelegacji,
					d.DataOd=e.DataOd, d.DataDo=e.DataDo,
					d.Opis=e.Opis,d.Opis2=e.Opis2,d.GUID_kier=e.GUID_kier,d.miasta=e.miasta,d.km=e.km,
					d.katcol0=e.katcol0,d.katcol1=e.katcol1,d.katcol2=e.katcol2,d.katcol3=e.katcol3,d.katcol4=e.katcol4,
					d.dojazd=e.dojazd,d.inne=e.inne,d.nocleg=e.nocleg,d.dieta=e.dieta,d.sumkosztow=e.sumkosztow,d.zamkniety=e.zamkniety,
				--	deleg.
					d.Zaliczka = e.Zaliczka, d.Stawka_doj_A = e.Stawka_doj_A, d.Stawka_doj_B = e.Stawka_doj_B, 
					d.CDni = e.CDni,
					d.CNocy = e.CNocy,
					d.CDojazdDni = e.CDojazdDni,
					d.Wyzyw_Pelne = e.Wyzyw_Pelne,
					d.Wyzyw_S = e.Wyzyw_S,
					d.Wyzyw_O = e.Wyzyw_O,
					d.Wyzyw_K = e.Wyzyw_K,
					d.Wyzywienie = e.Wyzywienie, d.CNoclegi = e.CNoclegi, 
					d.CDojazdDni = e.CDojazdDni,
					d.CNoclegiWlasne = e.CNoclegiWlasne, 
					d.Deleg_Zagraniczna = e.Deleg_Zagraniczna,
				--	kiedys checkbox był w polu Ryczalt_za_dojazdy teraz -> Uwzgl_ryczalt_za_dojazdy
					d.Uwzgl_ryczalt_za_dojazdy = e.Uwzgl_ryczalt_za_dojazdy, 
					d.Ryczalt_dojazd_stawka = e.Ryczalt_dojazd_stawka, 
					d.Ryczalt_nocleg_stawka = e.Ryczalt_nocleg_stawka, 
					d.PlatnRodzaj = e.PlatnRodzaj,
					d.PlatnNrRachunku = e.PlatnNrRachunku,
					
					d.Diety = e.Diety, 
					d.Ryczalt_dojazd = e.Ryczalt_dojazd,
					d.Ryczalt_nocleg = e.Ryczalt_nocleg, 
					d.LokomTypStr = e.LokomTypStr,
					d.komentarz_rozlicz = e.komentarz_rozlicz,
					d.Koszty_Pozostale = e.Koszty_Pozostale
					/*
					d.Wyzywienie = @.d.Wyzywienie :=
						IF(e.Wyzywienie_Pelne = 1,
							'Pełne',
							IF(e.Wyzywienie_S AND e.Wyzywienie_O AND e.Wyzywienie_K,
								'Pełne',
								CONCAT_WS(';',
									IF(e.Wyzywienie_S, 'Śniadania', NULL),
									IF(e.Wyzywienie_O, 'Obiady', NULL),
									IF(e.Wyzywienie_K, 'Kolacje', NULL),
									NULL
								)
							)
						),
					e.Wyzywienie = @.d.Wyzywienie
					*/
				WHERE 
					d.guid = e.guid
				;

				UPDATE `e_szkolenia` e, umiejetnosci u
				SET
				  u.GUID_pracownika=e.GUID_pracownika,u.opis=e.um_opis,u.IdnDetalu=e.um_IdnDetalu,u.fullopis=e.um_fullopis,
				  u.DataNadania=e.um_DataNadania,u.DataWaznosci=e.um_datawaznosci,
				  u.typSlownika=(SELECT oc.klasa_cech FROM osoby_cechy oc WHERE oc.idn=e.um_IdnDetalu LIMIT 1)
				WHERE 
					u.DelegacjaGUID = e.guid
				;
			--	Nowy rekord - czas na workflow/portafide GUID w GUID
				SELECT 
					sz.GUID_pracownika,
					IF(sz.TypDelegacji = 0, 6, 5) AS PodRodzaj,
					IF(sz.TypDelegacji = 0, 'W.DELEGACJA', 'W.SZKOLENIE') AS Wniosek_Typ,
					IF(sz.TypDelegacji = 0, 3301, 3301) AS Wniosek_log_miejsca,
					CONCAT_WS('&',
						CONCAT('StartTime=', sz.DataOd),
						CONCAT('EndTime=', sz.DataDo),
						CONCAT('www_tag_text=', sz.Opis),
						-- CONCAT('confirm_status=', ''),	-- ????
						NULL
					) AS Params
                INTO
                    @.delegacje.CRM.GUID_pracownika, @.delegacje.PodRodzaj, @.delegacje.Wniosek_Typ, @.delegacje.Wniosek_log_miejsca, @.delegacje.CRM.Params
				FROM `e_szkolenia` sz 
				WHERE
					sz.guid = _GUID
				LIMIT 1 -- po co???
				;	
			--	CRM - PortaFide ...	
				IF @.delegacje.NEW THEN
SET @.X.w = '1';				
				--	CRM - PortaFide Insert	- uwaga dla _TypDelegacji = 1 ust. podrodzaj = 5 (szkolenia) dla _TypDelegacji = 0 ust. podrodzaj = 6 (delegacje)
					CALL crm_porta_fide_tools('crm.Wniosek.INSERT', _GUID, @.delegacje.CRM.GUID_pracownika, '', @.delegacje.PodRodzaj, @.delegacje.Wniosek_Typ, '', '', '');
				END IF;
			--	CRM - PortaFide Modify	
				CALL crm_porta_fide_tools('crm.Wniosek.MODIFY', _GUID, @.delegacje.CRM.GUID_pracownika, '', '', '', '', '', @.delegacje.CRM.Params);
			--	LOG - dane NEW
				CALL _Log_Diff_Schema('ADD.Table.NEW', '', 'e_szkolenia', '', '', '', '', '', '');
			--	LOG - zapis
				SET @_Idn = NULL;	-- Koniecznie!!! aby wstawił nowe rekordy do LOGU
				CALL log_Ins('INS.from.t_schema_OLD_NEW', @_Idn, @.delegacje.Wniosek_log_miejsca, 3, _GUID, 'delegacje', '', '', '', '', '', '', '');
			
				IF _TypDelegacji = 0 THEN	-- _VarInt(IFNULL(NULLIF(_Status, ''), 1)) 	
				--	dla 0 - zwykłych delegacji
					SET @.X = '';
				END IF;
				IF _TypDelegacji = 0 THEN	-- _VarInt(IFNULL(NULLIF(_Status, ''), 1)) 	
				--	dla 1 - szkolenia
					SET @.X = '';
				END IF;
				/*	Jeszcze zgraj np. idnWorkFlow w nowej tabeli `crm_workflow_n`	*/
				UPDATE `e_szkolenia` sz, `crm_workflow_n` cwn 
				SET
					sz.workflow_idn = cwn.cwIdnLast
				WHERE 
					cwn.GUID = sz.GUID
				;
				/*	wywal teraz jeden wspolny select na koncu
				IF _ParamE LIKE '%<select>%' THEN	
					SELECT sz.* FROM `e_szkolenia` sz;
				END IF;
				*/
			END IF;
			
		--	I jeszcze select ???	WOWŁANY przed DONE bo w DONE jest DROP!!!!
			IF _ParamE LIKE '%<select>%' THEN	
				SELECT 
					sz.*,
					(
					SELECT 
						CONCAT_WS(' ', o.imie1, o.nazwisko) 
					FROM `osoby` o 
					WHERE 
						o.guid = sz.GUID_kier
					) AS delegowal,
					(
					SELECT 
						CONCAT_WS(' ', o.imie1, o.nazwisko) 
					FROM `osoby` o, `hr_self_links` hl 
					WHERE 
						hl.OsobaGUID_A = sz.GUID_pracownika AND hl.Rel = '<-zastepca' AND o.guid = hl.OsobaGUID_B
					) AS Zastepujacy	-- Osoba zastępująca

				FROM `e_szkolenia` sz
				-- LEFT JOIN `slowniki_pierwotne` sp ON sp.slownik_GUID = 'SRODKI_LOKOM' AND sp.Value = sz.LokomTyp
				;
			END IF;
			
			IF _MODE IN ('SZKOLENIA.INS-EDIT.DONE') THEN
			/********************************************************************************************************
				CALL delegacjePF('SZKOLENIA.INS-EDIT.DONE', 'asdfadf', 'adfas','1','','','','','<select>');
				gdy w _ParamE <select> to koncowy select
			********************************************************************************************************/
				SET @delegacje.mode = _MODE;
				/*	wywal teraz jeden wspolny select na koncu/prawie koncu
				IF _ParamE LIKE '%<select>%' THEN	
					SELECT sz.* FROM `e_szkolenia` sz;
				END IF;
				*/
				-- DROP TEMPORARY TABLE IF EXISTS e_delegacja;
				DROP TEMPORARY TABLE IF EXISTS `e_szkolenia`;
				DROP TEMPORARY TABLE IF EXISTS `e_szkolenia_OLD`;
			END IF;
		END IF;
	END IF;

	IF _MODE IN ('SZKOLENIA.SELECT.1.rec', 'SZKOLENIA.SELECT.Print') THEN
	/********************************************************************************************************
		CALL delegacjePF('SZKOLENIA.SELECT.Print', 'asdfadf', 'adfas','1','','','','','<select>');
		CALL delegacjePF('DELEGACJE.SELECT.Print', 'asdfadf', 'adfas','1','','','','','<select>');
		gdy w _ParamE <select> to koncowy select
		_ParamB	= 'ARCH' - oznacza archiwum
	********************************************************************************************************/
		IF _TypDelegacji = 0 THEN
		--	DELEGACJE
			CALL delegacjePF('DELEGACJE.Create.e_szkolenia', _GUID, _UserGUID, _Status, _ParamA, _ParamB, _ParamC, _ParamD, _ParamE);
			SELECT 
				sz.*,
				(SELECT CONCAT(p.imie1,' ',p.nazwisko) FROM osoby p WHERE p.guid = sz.GUID_pracownika) AS delegowany,
				(
				SELECT 
					CONCAT_WS(' ', o.imie1, o.nazwisko) 
				FROM `osoby` o 
				WHERE 
					o.guid = sz.GUID_kier
				) AS delegowal,
				(
				SELECT 
					CONCAT_WS(' ', o.imie1, o.nazwisko) 
				FROM `osoby` o, `hr_self_links` hl 
				WHERE 
					hl.OsobaGUID_A = sz.GUID_pracownika AND hl.Rel = '<-zastepca' AND o.guid = hl.OsobaGUID_B
				) AS Zastepujacy,	-- Osoba zastępująca
				dps.SKoszt,
				dps.SKosztPobyt, 
				dps.SKosztTrasa, 
				IFNULL(dps.SOd, sz.DataOd) AS SOd, 
				IFNULL(dps.SDo, sz.DataDo) AS SDo,
				DATE(IFNULL(dps.SOdDate, sz.DataOd)) AS SOdDate,
				DATE(IFNULL(dps.SDoDate, sz.DataDo)) AS SDoDate,
				dps.SSrodkiLokom,
				@.SKosztyAll := 
					IFNULL(dps.SKoszt, 0.00) + 
					IFNULL(sz.Diety, 0.00) + 
					IFNULL(sz.Ryczalt_dojazd, 0.00) + 
					IFNULL(sz.Ryczalt_nocleg, 0.00) + 
					IFNULL(sz.Koszty_Pozostale, 0.00) 
				AS SKosztyAll,
				-- CONCAT('_', _Get_Slownie(TRUNCATE(@.SKosztyAll, 0)), '_', _Get_Frac(@.SKosztyAll, 2), '/100') AS SKosztyAll_Slownie,
				Get_Slownie(@.SKosztyAll, '**', 2, NULL) AS SKosztyAll_Slownie,
				pod_A.Kto AS Podpis_A_kto, pod_A.Kiedy AS Podpis_A_Kiedy,
				pod_B.Kto AS Podpis_B_kto, pod_B.Kiedy AS Podpis_B_Kiedy,
				pod_C.Kto AS Podpis_C_kto, pod_C.Kiedy AS Podpis_C_Kiedy
			FROM `e_szkolenia` sz
			-- LEFT JOIN `slowniki_pierwotne` sp ON sp.slownik_GUID = 'SRODKI_LOKOM' AND sp.Value = sz.LokomTyp
			INNER JOIN (
				SELECT 
					SUM(dps.Koszt) AS SKoszt, 
					SUM(IF(dps.typ = 'pobyt', dps.Koszt, 0)) AS SKosztPobyt, 
					SUM(IF(dps.typ = 'trasa', dps.Koszt, 0)) AS SKosztTrasa, 
					MIN(dps.tFrom) AS SOd, 
					MAX(dps.tTo) AS SDo, 
					DATE(MIN(dps.tFrom)) AS SOdDate, 
					DATE(MAX(dps.tTo)) AS SDoDate,
					/*	było do 26 III 2024 - teraz view `v_SRODKI_LOKOM`
					GROUP_CONCAT(DISTINCT IF(dps.typ = 'pobyt', NULL, sp.DisplayValue)) AS SSrodkiLokom
					*/
					GROUP_CONCAT(DISTINCT IF(dps.typ = 'pobyt', NULL, sp.Nazwa)) AS SSrodkiLokom
				FROM `delegacje_plan` dps 
				/*	było do 26 III 2024 - teraz view `v_SRODKI_LOKOM`
				LEFT JOIN `slowniki_pierwotne` sp ON sp.slownik_GUID = 'SRODKI_LOKOM' AND sp.Value = dps.LokomTyp
				*/
				LEFT JOIN `v_SRODKI_LOKOM` sp ON sp.Value = dps.LokomTyp
				WHERE 
					dps.GUIDNg = _GUID
			) dps
			LEFT JOIN (
				SELECT
					ModifyAt AS Kiedy,
					CONCAT_WS(' ', o.Imie1, o.Nazwisko) AS Kto
				FROM `crm_workflow_confirm` cwc, `crm_workflow` cw, `osoby` o
				WHERE
					cw.commisionGUID = _GUID
					AND cwc.IDN_workflow = cw.IDN
					AND cwc.confirm_Status = 'accepted'
					AND o.GUID = cwc.Decision_UserGUID
				LIMIT 1
			) pod_A ON TRUE
			LEFT JOIN (
				SELECT
					ModifyAt AS Kiedy,
					CONCAT_WS(' ', o.Imie1, o.Nazwisko) AS Kto
				FROM `crm_workflow_confirm` cwc, `crm_workflow` cw, `osoby` o
				WHERE
					cw.commisionGUID = _GUID
					AND cwc.IDN_workflow = cw.IDN
					AND cwc.confirm_Status IN ('settlement_accepted','settlement_accepted')
					AND o.GUID = cwc.Decision_UserGUID
				LIMIT 1
			) pod_B ON TRUE
			LEFT JOIN (
				SELECT
					ModifyAt AS Kiedy,
					CONCAT_WS(' ', o.Imie1, o.Nazwisko) AS Kto
				FROM `crm_workflow_confirm` cwc, `crm_workflow` cw, `osoby` o
				WHERE
					cw.commisionGUID = _GUID
					AND cwc.IDN_workflow = cw.IDN
					AND cwc.confirm_Status IN ('payment_accepted', 'payment_accepted')
					AND o.GUID = cwc.Decision_UserGUID
				LIMIT 1
			) pod_C ON TRUE
			;
		END IF;
	END IF;

	IF _MODE IN ('SZKOLENIA.SELECT.ALL') THEN
	/********************************************************************************************************
		CALL delegacjePF('SZKOLENIA.SELECT.ALL', 'asdfadf', 'adfas','1','','','','','<select>');
		CALL delegacjePF('DELEGACJE.SELECT.ALL', 'asdfadf', 'adfas','1','','','','','<select>');
		gdy w _ParamE <select> to koncowy select
		_ParamB	= 'ARCH' - oznacza archiwum
	********************************************************************************************************/
		SET @.Params = IFNULL(_ParamE, '');
		SET @_USERGUID = _USERGUID, @_DATA = _DATA, @_TypDelegacji = _TypDelegacji;
		IF @.Params <> '' THEN
			SET
			--	Tab:	ARCH', ''
				@.SZKOLENIA.SELECT.Tab = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'Tab', ''), ''), ''''),
			--	UserView:	<Wszystkie / Moje / Obce>	ALL/Moje/Obce
				@.SZKOLENIA.SELECT.UserView = NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'UserView', ''), ''),
			--	Confirm_status:	"ALL" znaczy wszystkie, pozostałe to typowe ... new, sent, approved_1, accepted
				@.SZKOLENIA.SELECT.Confirm_status = NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'Confirm_status', ''), ''),
			--	Kierownik ????? dopytaj AS-a
				@.SZKOLENIA.SELECT.Kierownik = NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'Kierownik', ''), ''),
			--	Data Od i Do - gdy NULL to odp. od 1 dnia zeszłego roku do ot. dnia przyszłego roku
				@.SZKOLENIA.SELECT.DataOd = DATE(IFNULL(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'DataOd', ''), ''), _FirstDayYYYY(YEAR(CURRENT_DATE()) - 1))),
				@.SZKOLENIA.SELECT.DataDo = DATE(IFNULL(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'DataDo', ''), ''), _LastDayYYYY(YEAR(CURRENT_DATE()) + 1)))
			;
		ELSE
			SET
			--	ARCH', ''
				@.SZKOLENIA.SELECT.Tab = NULL,
			--	<Wszystkie / Moje / Obce>	ALL/Moje/Obce
				@.SZKOLENIA.SELECT.UserView = NULL,
			--	Confirm_status - "ALL" znaczy wszystkie, pozostałe to typowe ... new, sent, approved_1, accepted
				@.SZKOLENIA.SELECT.Confirm_status = NULL,
			--	Kierownik ????? dopytaj AS-a
				@.SZKOLENIA.SELECT.Kierownik = NULL,
			--	Data Od i Do 
				@.SZKOLENIA.SELECT.DataOd = NULL,
				@.SZKOLENIA.SELECT.DataDo = NULL
			;
		END IF;
		SET @delegacje.mode=_MODE;
		SET _DATA = NULLIF(_VarDate(_ParamA),'');
		SET @_GUID = _GUID, @_USERGUID = _USERGUID, @_DATA = _DATA, @_TypDelegacji = _TypDelegacji;
		SELECT  
			d.GUID,
			d.NrDelegacji,
			d.DataOd,
			d.DataDo,
			d.opis,
			d.opis2,
			
			d.GUID_kier,d.miasta,d.km,d.katcol0,d.katcol1,d.katcol2,d.katcol3,d.katcol4,
			(SELECT v.valuex FROM v_ktw4 v WHERE v.klucz=d.katcol0) AS pojazd,
			(SELECT CONCAT(p.imie1,' ',p.nazwisko) FROM osoby p WHERE p.guid=d.GUID_pracownika) AS delegowany,
			(SELECT CONCAT(k.imie1,' ',k.nazwisko) FROM osoby k WHERE k.guid=d.GUID_kier) AS delegowal, 
			d.nocleg, d.inne, d.dojazd, d.dieta, d.sumkosztow, d.zamkniety, d.guid_pracownika=@_USERGUID AS moja,d.typDelegacji,
			d.Zaliczka, d.Stawka_doj_A, d.Stawka_doj_B, d.Wyzywienie, 
		--	kiedys checkbox był w polu Ryczalt_za_dojazdy teraz -> Uwzgl_ryczalt_za_dojazdy
			d.Uwzgl_ryczalt_za_dojazdy, 
			d.Ryczalt_dojazd_stawka, 
			d.Ryczalt_nocleg_stawka,
			d.Diety, 
			d.Ryczalt_dojazd, 
			d.Ryczalt_nocleg, 
			d.CDni, d.CNocy,
			d.CDojazdDni, d.CNoclegiWlasne, d.CNoclegi, d.CTrasy,
			d.Wyzyw_Pelne, d.Wyzyw_S, d.Wyzyw_O, d.Wyzyw_K,
			d.Deleg_Zagraniczna,
		--	w podsumowaniach mamy miesznkę wyliczaną/edycujną
			d.Koszty_Pobytow, d.Koszty_Przejazdow, 
			d.Koszty_Pozostale,
			d.PlatnRodzaj,
			d.PlatnNrRachunku,
			u.IdnDetalu AS um_IdnDetalu, u.opis AS um_opis, u.datanadania AS um_datanadania,u.datawaznosci AS um_datawaznosci, u.fullopis AS um_fullopis,
			(SELECT oc.opis FROM osoby_cechy oc WHERE oc.idn=u.IdnDetalu) AS um_typ_szkolenia,
			
			-- c.confirm_status,
			cw_last.confirm_status,
			cw_last.idn AS workflow_idn,
			cw_last.Status_Current_Str,
			-- było cw_last.Curr_Status,
			cw_last.Status_Current_Str AS Curr_Status,
			cw_last.Curr_Is_Ending,
			cw_last.Curr_Poziom,
			cwc_user.IDN_workflow AS workflow_idn_moje,
			cwc_user.Next_ResponseCount,
		--	było	(IFNULL(cwc_user.Next_ResponseCount, 0) = 0) AND (cwc_user.confirm_status IN ('', cwc_user.Start_Status)) AS Decision_Enabled,
			IFNULL(cwc_user.Decision_Enabled, 0) AS Decision_Enabled,
			-- Decision_Enabled = 
			-- (cw_moje.confirm_status IN ('', cw_moje.Start_Status)),
		/*	było
			(IFNULL(cwc_user.Next_ResponseCount, 0) = 0) 
			AND 
			NOT (cwc_user.confirm_status IN ('', cwc_user.Start_Status)) 
			AND 
		-- 	było ... ale tu chodzi o zalogowanego a nie o pracownika (cwc_user.Decision_UserGUID = d.GUID_pracownika) 
			(cwc_user.Decision_UserGUID = _USERGUID) 
			AS Undo_Enabled,
		*/
		--	Undo_Enabled
		--	tylko gdy cwc_user <> NULL i była podjeta decyzja przez _USERGUID
			IFNULL(
				(
					cwc_user.Next_ResponseCount = 0 
					AND 
					NOT (cwc_user.confirm_status IN ('', cwc_user.Start_Status)) 
					AND
					cwc_user.Decision_UserGUID = @_USERGUID 
				),
				0
			) AS Undo_Enabled,

			-- Undo_Enabled = 
			-- 	NOT (cw_moje.confirm_status IN ('', Start_Status)) AND (cw_moje.Decision_UserGUID = c.UserGUID ),
			-- było (IFNULL(cwc_user.Next_ResponseCount, 0) = 0) AND (NOT cw_last.confirm_status IN ('end')) AS Edit_Enabled,	-- kiedys tylko dla "new"
			(NOT cw_last.confirm_status IN ('end')) AS Edit_Enabled,	-- kiedys tylko dla "new"
			-- NOT (cw_moje.confirm_status IN ('', cw_moje.Start_Status)),
			_VarStr(CONCAT_WS(': ', 
				-- st.statusName, 
				-- _Brackets('"', cw_last.Status_Current, '"')
				cw_last.Status_Current_Str
			)) AS Status_Info,
			IF(cwc_user.Idn_Workflow IS NULL,
				'editable=0;',
				IFNULL(cwc_user.concession, '')
			) AS concession,
			c.Temat, c.Opis,
			c.Status,
			c.Rodzaj,
			c.PodRodzaj,
			c.Data,
			d.guid_pracownika,
			d.LokomTypStr,
			d.komentarz_rozlicz

		FROM `delegacje` d
		LEFT JOIN `umiejetnosci` u ON u.DelegacjaGUID = d.guid
		LEFT JOIN `v_crm_workflow_coms` c ON c.GUID = d.guid
	--	cw_last - ostatni node crm_workflow	
		LEFT JOIN `v_crm_workflow` cw_last ON cw_last.IDN = 
		--	LAST workflow
			(
			SELECT 
				cw.IDN 
			-- FROM `v_crm_workflow` cw 
			FROM `crm_workflow` cw 
			WHERE 
				cw.commisionGUID = c.GUID 
			ORDER BY idn DESC 
			LIMIT 1
			)
	--	cwc_user - crm_workflow_confirm dla zalogowanego
		LEFT JOIN `v_crm_workflow_confirm` cwc_user ON cwc_user.IDN_workflow = 
		--	MOJE LAST workflow
			(
			SELECT 
				cwc.IDN_workflow 
			FROM `v_crm_workflow_confirm` cwc 
			INNER JOIN `grupy_osob` go ON go.grupaGUID = cwc.UserGUID
			WHERE 
				cwc.commisionGUID = c.GUID 
				-- NIE!!! bo d.GUID_pracownika pochodzi z filtrów a moje dotyczy zalogowanego!!!
				-- AND go.OsobaGUID = d.GUID_pracownika	
				AND go.OsobaGUID = @_USERGUID 
			ORDER BY IDN_workflow DESC 
			LIMIT 1
			)
		WHERE 
			(
			--	user jest pracownikiem lub ...	
				d.guid_pracownika= @_USERGUID 
				OR
			--	user jest kierownikiem lub ...	
				d.guid_kier= @_USERGUID 
				OR
				EXISTS(
					SELECT * FROM grupy_osob g WHERE g.osobaguid=@_USERGUID  AND g.grupaguid="G_FK"
				)
				OR
			--	user jest w zainteresowanych wnioskiem - np. grupa koordynatorzy
				EXISTS(
					SELECT 
						cul.osoba 
					FROM `crm_usr_links` cul, `grupy_osob` go 
					WHERE 
						cul.commisionGUID = c.GUID 
						AND cul.osoba = go.GrupaGUID
						AND go.OsobaGUID = @_USERGUID 
				)
				OR
			--	user jest w aktualnych węzłach decyzyjnych
				EXISTS(
					SELECT 
						cul.osoba 
					FROM `crm_usr_links` cul, `grupy_osob` go 
					WHERE 
						cul.commisionGUID = c.GUID 
						AND cul.osoba = go.GrupaGUID
						AND go.OsobaGUID = @_USERGUID 
				)
			) -- ksiegowosc
			AND d.dataod >= IFNULL(@_DATA,'1901-01-01') 
			/*
			AND  
			(
				_Status = '' OR 
				d.typDelegacji = _VarInt(_Status) -- pusty wszystkie, 0 - zwykłe, 1 - szkoleniowe
			)
			*/
			AND d.TypDelegacji = @_TypDelegacji
			AND IF(@_GUID <> '', c.GUID = @_GUID, TRUE)
		--	Parametry...
		--	zakładki Aktualne/Archiwum dla delegacji WNIOSEK/DELEGACJA/Archiwum
			AND 
				IF(@_TypDelegacji = 0,
				--	DELEGACJA	
					IF(IFNULL(@.SZKOLENIA.SELECT.Tab, '') = '', 
						-- c.Status < 3 AND cw_last.confirm_status IN ('new', 'sent'),
						c.Status < 3, --  AND cw_last.Curr_Poziom < 3,	-- 'new', 'sent'
						IF(@.SZKOLENIA.SELECT.Tab = 'DELEGACJA', 
							-- c.Status < 3 AND cw_last.confirm_status IN ('approved_1', 'accepted', 'settlement', 'for_settlement', 'settlement_accepted', 'settlement_back', 'payment_back'),
							c.Status < 3 AND cw_last.Curr_Is_Ending = 0 AND cw_last.Curr_Poziom >= 3,	-- 'approved_1', 'accepted', 'settlement', 'for_settlement', 'settlement_accepted', 'settlement_back', 'payment_back'),
							IF(@.SZKOLENIA.SELECT.Tab = 'ARCH', 
								(
								-- (c.STATUS IN (3, 4, 8, 11, 13, 14)) BEZ 13 ki !!!
								-- (c.STATUS IN (3, 4, 8, 11, 14))
								c.Status_Is_Ending
								AND (NOW() > c.Data)
								),	-- IsArchiwum
								-- c.Status = 3, 
								c.Status < 3 
							)
						)
					),
				--	SZKOLENIA
					IF(IFNULL(@.SZKOLENIA.SELECT.Tab, '') = '', 
						c.Status < 3,
						IF(@.SZKOLENIA.SELECT.Tab = 'ARCH', 
							(
							-- (c.STATUS IN (3, 4, 8, 11, 13, 14)) BEZ 13 ki !!!
							-- (c.STATUS IN (3, 4, 8, 11, 14))
							c.Status_Is_Ending
							AND (NOW() > c.Data)
							),	-- IsArchiwum
							-- c.Status = 3, 
							c.Status < 3 
						)
					)
				)
		--	<Wszystkie / Moje / Obce>	ALL/Moje/Obce
			AND 
				IF(IFNULL(@.SZKOLENIA.SELECT.UserView, '') IN ('', 'ALL'), 
					TRUE, 
					IF(@.SZKOLENIA.SELECT.UserView = 'Moje', 
						d.guid_pracownika = @_USERGUID ,
						d.guid_pracownika != @_USERGUID 
					)	
				)
		--	Confirm_status - "ALL" znaczy wszystkie, pozostałe to typowe ... new, sent, approved_1, accepted
			AND 
				IF(IFNULL(@.SZKOLENIA.SELECT.Confirm_status, '') IN ('', 'ALL'), 
					TRUE, 
					cw_last.confirm_status = @.SZKOLENIA.SELECT.Confirm_status
				)
		--	Kierownik ????? dopytaj AS-a
			AND 
				IF(IFNULL(@.SZKOLENIA.SELECT.Kierownik, '') IN ('', 'ALL'), 
					TRUE, 
					EXISTS(
						SELECT 
							hl.OsobaGUID_B 
						FROM `hr_self_links` hl
						WHERE
							hl.OsobaGUID_A = d.guid_pracownika
							AND hl.rel = 'szef'
							AND hl.OsobaGUID_B = @.SZKOLENIA.SELECT.Kierownik
						--	to lub...	
							AND Get_Status_For_From_To('', NULL, hl.DateFrom, hl.DateTo, hl.Status, 0) LIKE 'OK%'
						--	prościej
							-- AND hl.Status = 0 AND NOW() BETWEEN hl.DateFrom AND hl.DateTo
					)
				)
			--	Data Od i Do 
			AND 
				IF(@.SZKOLENIA.SELECT.DataOd IS NULL AND @.SZKOLENIA.SELECT.DataDo IS NULL, 
					TRUE, 
					_TimeRange('conflict', d.DataOd, d.DataDo, @.SZKOLENIA.SELECT.DataOd, @.SZKOLENIA.SELECT.DataDo, '', '')
				)
		; 
	END IF;
	
	IF _MODE = 'SZKOLENIA.SELECT.GUID' THEN
	--	zmien _MODE i ustaw param.
		SET 
			_MODE = 'SZKOLENIA.SELECT.ALL.NEW',
			_ParamE = ''
		;
	END IF;

	IF _MODE LIKE ('SZKOLENIA.SELECT.ALL.NEW') THEN
	/********************************************************************************************************
		CALL delegacjePF('SZKOLENIA.SELECT.ALL', 'asdfadf', 'adfas','1','','','','','<select>');
		CALL delegacjePF('DELEGACJE.SELECT.ALL', 'asdfadf', 'adfas','1','','','','','<select>');
		gdy w _ParamE <select> to koncowy select
		_ParamB	= 'ARCH' - oznacza archiwum
	********************************************************************************************************/
		SET @delegacje.mode=_MODE;
		SET _DATA = NULLIF(_VarDate(_ParamA),'');
		SET @_GUID = _GUID, @_USERGUID = _USERGUID, @_DATA = _DATA, @_TypDelegacji = _TypDelegacji;
		SET
			@.SZKOLENIA.SELECT._GUID = NULLIF(_GUID, ''),
			@.SZKOLENIA.SELECT._USERGUID = _USERGUID,
			@.SZKOLENIA.SELECT._TypDelegacji = _TypDelegacji
		;
		SET @.Params = IFNULL(_ParamE, '');
		SET @.Params = REPLACE(@.Params, '=END_ARCH', '=END.ARCH');
		IF @.Params <> '' THEN
			SET
				@.SZKOLENIA.SELECT._DATA = _DATA,
			--	Tab:	po staremu '', 'DELEGACJA', 'ARCH' a po nowemu 'CURR', 'CURR.ROZLICZ', 'END', 'END.ARCH'
				@.SZKOLENIA.SELECT.Tab = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'Tab', ''), ''), ''''),
			--	UserView:	<Wszystkie / Moje / Obce>	ALL/Moje/Obce
				@.SZKOLENIA.SELECT.UserView = NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'UserView', ''), ''),
			--	Confirm_status:	"ALL" znaczy wszystkie, pozostałe to typowe ... new, sent, approved_1, accepted
				@.SZKOLENIA.SELECT.Confirm_status = NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'Confirm_status', ''), ''),
			--	Kierownik ????? dopytaj AS-a
				@.SZKOLENIA.SELECT.Kierownik = NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'Kierownik', ''), ''),
			--	Data Od i Do - gdy NULL to odp. od 1 dnia zeszłego roku do ot. dnia przyszłego roku
				@.SZKOLENIA.SELECT.DataOd = _vardate(   IFNULL(NULLIF(DATE(_Params2('_FetchParams', @_ModeParam, @.Params, 'DataOd', '')), ''), _FirstDayYYYY(YEAR(CURRENT_DATE()) - 1))),
				@.SZKOLENIA.SELECT.DataDo = _vardate(IFNULL(NULLIF(DATE(_Params2('_FetchParams', @_ModeParam, @.Params, 'DataDo', '')), ''), _LastDayYYYY(YEAR(CURRENT_DATE()) + 1))),
			--	DelegownyGUID
				@.SZKOLENIA.SELECT.DelegownyGUID = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'DelegownyGUID', ''), 'ALL'), ''),
			--	DelegujacyGUID
				@.SZKOLENIA.SELECT.DelegujacyGUID = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'DelegujacyGUID', ''), 'ALL'), ''),
			--	ZarzadWhere		"Zarzad", "Pozostałe", "ALL"|NULL  wartości 1, 0, NULL
				@.SZKOLENIA.SELECT.ZarzadWhere = NULLIF(NULLIF(_Params2('_FetchParams', @_ModeParam, @.Params, 'ZarzadWhere', ''), ''), 'ALL')
				
			-- @.Params = @.Params;
			;
		ELSE
			SET
			--	'ARCH', ''
				@.SZKOLENIA.SELECT.Tab = NULL,
			--	<Wszystkie / Moje / Obce>	ALL/Moje/Obce
				@.SZKOLENIA.SELECT.UserView = NULL,
			--	Confirm_status - "ALL" znaczy wszystkie, pozostałe to typowe ... new, sent, approved_1, accepted
				@.SZKOLENIA.SELECT.Confirm_status = NULL,
			--	Kierownik ????? dopytaj AS-a
				@.SZKOLENIA.SELECT.Kierownik = NULL,
			--	Data Od i Do 
				@.SZKOLENIA.SELECT.DataOd = NULL,
				@.SZKOLENIA.SELECT.DataDo = NULL
			;
		END IF;
		SET	
		--	Aby od do działało DataDo musi byc jako 1 dzien w przód (albo 23:59)
			@.SZKOLENIA.SELECT.DataDo = @.SZKOLENIA.SELECT.DataDo + INTERVAL 1 DAY - INTERVAL 1 SECOND,
		--	Tab: po staremu '', 'DELEGACJA', 'ARCH' a po nowemu 'CURR', 'CURR.ROZLICZ', 'END', 'END.ARCH'
			@.SZKOLENIA.SELECT.Tab = 
				IF(@.SZKOLENIA.SELECT.Tab IN ('CURR', 'CURR.ROZLICZ', 'END', 'END.ARCH'), 
					@.SZKOLENIA.SELECT.Tab,
					IF(@.SZKOLENIA.SELECT.Tab = 'DELEGACJA',
						'CURR.ROZLICZ',
						IF(@.SZKOLENIA.SELECT.Tab = 'ARCH',
							'END.ARCH',
							'ALL'
						)
					)
				)
		;
		
		SET	
			@.Params = CONCAT_WS('&',
				
				CONCAT('Confirm_status=', NULLIF(@.SZKOLENIA.SELECT.Confirm_status, 'ALL')),
				-- CONCAT('DataOd=', NULLIF(@.SZKOLENIA.SELECT.DataOd, '')),
				-- CONCAT('DataDo=', NULLIF(@.SZKOLENIA.SELECT.DataDo, '')),
			-- 	Czyje - zapytaj Darka czy ma tam na pewno wartości 				
				CONCAT('Czyje=', IF(@.SZKOLENIA.SELECT.UserView = 'Obce', 'NIE.MOJE', @.SZKOLENIA.SELECT.UserView)),	
				-- CONCAT('StanWF=', IF(@.SZKOLENIA.SELECT.Tab = 'ARCH', 'END_ARCH', 'CURR'))
			--	z Tab do StanWF - TAB po staremu '', 'DELEGACJA', 'ARCH' a po nowemu 'CURR', 'CURR.ROZLICZ', 'END', 'END.ARCH'
				CONCAT('StanWF=', 
					IF(@.SZKOLENIA.SELECT.Tab = 'CURR.ROZLICZ', 
						'CURR',
						@.SZKOLENIA.SELECT.Tab
					)
				)
			)
		;
	--	Teraz utworz tabele `t_nodes_2022`
		CALL crm_workflow_SELECT('Select.User->crm->nodes', @SQL, @.SZKOLENIA.SELECT._GUID, @.SZKOLENIA.SELECT._USERGUID, '', '', '', '', @.Params);

		SELECT  
			d.GUID,
			d.NrDelegacji,
			d.DataOd,
			d.DataDo,
			d.opis,
			d.opis2,
			
			d.GUID_kier,d.miasta,d.km,d.katcol0,d.katcol1,d.katcol2,d.katcol3,d.katcol4,
			(SELECT v.valuex FROM v_ktw4 v WHERE v.klucz=d.katcol0) AS pojazd,
			(SELECT CONCAT(p.imie1,' ',p.nazwisko) FROM osoby p WHERE p.guid=d.GUID_pracownika) AS delegowany,
			(SELECT CONCAT(k.imie1,' ',k.nazwisko) FROM osoby k WHERE k.guid=d.GUID_kier) AS delegowal, 
			d.nocleg, d.inne, d.dojazd, d.dieta, d.sumkosztow, d.zamkniety, d.guid_pracownika = @.SZKOLENIA.SELECT._USERGUID AS moja,d.typDelegacji,
			d.Zaliczka, d.Stawka_doj_A, d.Stawka_doj_B, d.Wyzywienie, 
		--	kiedys checkbox był w polu Ryczalt_za_dojazdy teraz -> Uwzgl_ryczalt_za_dojazdy
			d.Uwzgl_ryczalt_za_dojazdy, 
			d.Ryczalt_dojazd_stawka, 
			d.Ryczalt_nocleg_stawka,
			d.Diety, 
			d.Ryczalt_dojazd, 
			d.Ryczalt_nocleg, 
			d.CNoclegiWlasne, d.CNoclegi, d.CTrasy,
		--	w podsumowaniach mamy miesznkę wyliczaną/edycujną
			d.Koszty_Pobytow, d.Koszty_Przejazdow, 
			d.Koszty_Pozostale,
			d.PlatnRodzaj,
			d.PlatnNrRachunku,
			u.IdnDetalu AS um_IdnDetalu, u.opis AS um_opis, u.datanadania AS um_datanadania,u.datawaznosci AS um_datawaznosci, u.fullopis AS um_fullopis,
			(SELECT oc.opis FROM osoby_cechy oc WHERE oc.idn=u.IdnDetalu) AS um_typ_szkolenia,
			
			-- c.confirm_status,
			-- cw_last.confirm_status,
                c.IsEnding,
			c.confirm_status,
			-- cw_last.idn AS workflow_idn,
			Idn_WorkFlow_Curr AS workflow_idn,
			c.Status_Current_Str,
			c.Status_Current_Str AS Curr_Status,
			c.Status_Info,
			c.Last_Poziom,	-- dawniej Curr_Poziom
			
			c.Temat, c.Opis,
			c.Status,
			c.Rodzaj,
			c.PodRodzaj,
			c.Data,
			d.guid_pracownika,
			d.LokomTypStr,
			d.komentarz_rozlicz,
			d.Deleg_Zagraniczna,
				(SELECT COUNT(*) FROM `dokumenty` doc WHERE doc.Klucz = d.guid) AS IleDoc,
				(@.vButtons := 
				CONCAT_WS(',',
				--	HISTORY
					-- IF(@.SZKOLENIA.SELECT.Tab = 'END.ARCH', 'HISTORY', NULL),
					IF(TRUE, 'HISTORY', NULL),
					-- IF(c.Buttons LIKE '
				--	DECISION
					IF(c.Decyzja_Status = 'USER_BRAK_DECYZJI', 'DECISION', NULL),
					--	UWAGA na szybko robie tu wstawke by dla zakładek END i END ARCH nie było przycisku Cofnij ...
					-- 	potem usun to i zwróc to w oparciu o absencje_dict i czas na cofnięcie!!!
				--	UNDO
					IF(c.Undo_Status = 'YES', 'UNDO', NULL),
				--	EDIT
					IF(c.Status < 3, 'EDIT', NULL),
				--	VIEW
					IF(@.SZKOLENIA.SELECT.Tab IN ('END', 'END.ARCH'), 'VIEW', NULL),
				--	PROPS
					IF(TRUE, 'PROPS', NULL),
				--	PRINT	tylko DO wypłaty lub wypłacono
					IF(c.confirm_status IN ('payment_accepted', 'payment_done'), 'PRINT', NULL),
				--	DELETE
					IF(FALSE, 'DELETE', NULL),
					NULL
				)) AS vButtons,
				(@.vButtons := (c.wfButtons)) AS wfButtons,
				IF(@.vButtons LIKE '%DECISION%', c.Idn_WorkFlow_Curr, NULL) AS Idn_WorkFlow_DECISION,
				-- IF(@.vButtons LIKE '%UNDO%', t.Idn_WorkFlow_Prev, NULL) AS Idn_WorkFlow_UNDO,
				IF(@.vButtons LIKE '%UNDO%', c.Undo_IdnWorkFlow, NULL) AS Idn_WorkFlow_UNDO,
			--	json_Buttons	
				CONCAT(
				-- open Brackets
					'{"buttons":[',
				-- buttons 1..n
					CONCAT_WS(',', 
					--	Decision button	
						_Brackets('{',
						IF(@.vButtons LIKE '%DECISION%',
							@.Buttons.wf.DECISION,
							NULL
						), '}'),
					--	Undo button	
						_Brackets('{',
						IF(@.vButtons LIKE '%UNDO%',
							@.Buttons.wf.UNDO,
							NULL
						), '}'),
					--	Edit	
						_Brackets('{',
						IF(@.vButtons LIKE '%EDIT%',
							@.Buttons.wf.EDIT,
							NULL
						), '}'),
					--	View - Podgląd
						_Brackets('{',
						IF(@.vButtons LIKE '%VIEW%',
							btn.btn_VIEW,	-- @.Buttons.wf.VIEW,
							NULL
						), '}'),
					--	Print
						_Brackets('{',
						IF(@.vButtons LIKE '%PRINT%',
							@.Buttons.wf.PRINT,
							NULL
						), '}'),
					--	Szczegóły
						_Brackets('{',
						IF(@.vButtons LIKE '%PROPS%',
							-- btn.btn_PROPS,	-- @.Buttons.wf.PROPS,
							@.Buttons.wf.PROPS,
							NULL
						), '}'),
					--	Usuń	
						_Brackets('{',
						IF(@.vButtons LIKE '%DELETE%' AND FALSE,
							@.Buttons.wf.DELETE,
							NULL
						), '}'),
					--	Historia
						_Brackets('{',
						IF(@.vButtons LIKE '%HISTORY%',
							btn.btn_HISTORY,	-- @.Buttons.wf.HISTORY,
							NULL
						), '}'),
						NULL
					),
				-- close Brackets
					']}'
				) AS json_Buttons
			
		FROM `delegacje` d
		INNER JOIN `t_nodes_2022` c ON d.GUID = c.GUID
		LEFT JOIN `umiejetnosci` u ON u.DelegacjaGUID = d.guid
		INNER JOIN `Pracownicy` p ON p.GUID = d.guid_pracownika 
		LEFT JOIN `t_wf_buttons` btn ON TRUE
		WHERE
			TRUE
			AND d.dataod >= IFNULL(@.SZKOLENIA.SELECT._DATA,'1901-01-01') 
			AND d.TypDelegacji = @.SZKOLENIA.SELECT._TypDelegacji
		--	Zarzad, Pozostałe, Wszyskie
			AND p.katcol0 = IFNULL(@.SZKOLENIA.SELECT.ZarzadWhere, p.katcol0)
		--	DelegownyGUID
			AND d.guid_pracownika = IFNULL(@.SZKOLENIA.SELECT.DelegownyGUID, d.guid_pracownika)
		--	DelegujacyGUID
			AND d.guid_kier = IFNULL(@.SZKOLENIA.SELECT.DelegujacyGUID, d.guid_kier)
			/* nie potrzebne ob w temp. mamy badanie GUIDa AND c.GUID = IFNULL(@.SZKOLENIA.SELECT._GUID, c.GUID),
						AND	
						(
							TRUE 	-- dodałem bo po co sprawdzac to wszysko - jest w CUL to wystarczy
							OR
						--	user jest pracownikiem lub ...	
							d.guid_pracownika = c.UserGUID
							OR
						--	user jest kierownikiem lub ...	
							d.guid_kier = c.UserGUID
						)
			*/	
		--	zakładki Aktualne/Archiwum dla delegacji WNIOSEK/DELEGACJA/Archiwum
		--	po nowemu mamy 4 zakładki (3 dla szkoleń) 'CURR', 'CURR.ROZLICZ', 'END', 'END.ARCH'
			AND 
				IF(@.SZKOLENIA.SELECT._TypDelegacji = 0 ,
				--	DELEGACJE ...
					IF(@.SZKOLENIA.SELECT.Tab = 'CURR',
					--	zakładka Wnioski o delegacje
						c.Last_Poziom < 3,
						IF(@.SZKOLENIA.SELECT.Tab = 'CURR.ROZLICZ',
						--	zakładka Delegacje do rozliczenia
					--	DELEGACJA - zakładka Delegacje	
							c.Last_Poziom >= 3,	-- 'approved_1', 'accepted', 'settlement', 'for_settlement', 'settlement_accepted', 'settlement_back', 'payment_back'),
							TRUE
						)
					),	
					TRUE
				)
			/*	UWAGA zbadaj po co jest ten fragment IF(@.SZKOLENIA.SELECT.Tab = 'DELEGACJA', 
			
			AND 
				IF(@_TypDelegacji = 0,
				--	DELEGACJA	
					IF(IFNULL(@.SZKOLENIA.SELECT.Tab, '') = '', 
						-- c.Status < 3 AND cw_last.confirm_status IN ('new', 'sent'),
						c.Status < 3, --  AND cw_last.Curr_Poziom < 3,	-- 'new', 'sent'
						IF(@.SZKOLENIA.SELECT.Tab = 'DELEGACJA', 
							-- c.Status < 3 AND cw_last.confirm_status IN ('approved_1', 'accepted', 'settlement', 'for_settlement', 'settlement_accepted', 'settlement_back', 'payment_back'),
							c.Status < 3 AND cw_last.Curr_Is_Ending = 0 AND cw_last.Curr_Poziom >= 3,	-- 'approved_1', 'accepted', 'settlement', 'for_settlement', 'settlement_accepted', 'settlement_back', 'payment_back'),
							IF(@.SZKOLENIA.SELECT.Tab = 'ARCH', 
								(
								-- (c.STATUS IN (3, 4, 8, 11, 13, 14)) BEZ 13 ki !!!
								-- (c.STATUS IN (3, 4, 8, 11, 14))
								c.Status_Is_Ending
								AND (NOW() > c.Data)
								),	-- IsArchiwum
								-- c.Status = 3, 
								c.Status < 3 
							)
						)
					),
				--	SZKOLENIA
					IF(IFNULL(@.SZKOLENIA.SELECT.Tab, '') = '', 
						c.Status < 3,
						IF(@.SZKOLENIA.SELECT.Tab = 'ARCH', 
							(
							-- (c.STATUS IN (3, 4, 8, 11, 13, 14)) BEZ 13 ki !!!
							-- (c.STATUS IN (3, 4, 8, 11, 14))
							c.Status_Is_Ending
							AND (NOW() > c.Data)
							),	-- IsArchiwum
							-- c.Status = 3, 
							c.Status < 3 
						)
					)
				)
			
			*/	
		--	<Wszystkie / Moje / Obce>	ALL/Moje/Obce
			/*	
			AND 
				IF(IFNULL(@.SZKOLENIA.SELECT.UserView, '') IN ('', 'ALL'), 
					TRUE, 
					IF(@.SZKOLENIA.SELECT.UserView = 'Moje', 
						d.guid_pracownika = @_USERGUID,
						d.guid_pracownika != @_USERGUID
					)	
				)
			*/
		--	Czyje spr. ogladamy - "ALL" / "" : wszystkie, "MOJE": tylko moje, "NIE.MOJE": NIE moje
		--	mamy juz to sprawdzenie za soba w budowaniu t_nodes_2022 ale mimo wszystko dodajemy to jeszcze warunek na delgacje w razie czego usuniemy to
			AND
				IF(IFNULL(@.cw.SELECT.Czyje, '') = 'MOJE',
					d.guid_pracownika = c.UserGUID,
					IF(IFNULL(@.cw.SELECT.Czyje, '') = 'NIE.MOJE',
						d.guid_pracownika != c.UserGUID,
						TRUE
					)
				)
		--	Confirm_status - "ALL" znaczy wszystkie, pozostałe to typowe ... new, sent, approved_1, accepted
			/*
			AND 
				IF(IFNULL(@.SZKOLENIA.SELECT.Confirm_status, '') IN ('', 'ALL'), 
					TRUE, 
					cw_last.confirm_status = @.SZKOLENIA.SELECT.Confirm_status
				)
			*/
			AND 
				IF(IFNULL(@.SZKOLENIA.SELECT.Confirm_status, '') IN ('', 'ALL'), 
					TRUE, 
					c.confirm_status_last = @.SZKOLENIA.SELECT.Confirm_status
				)
		--	Kierownik - szukaj rekordów jego luszi
			AND 
				IF(IFNULL(@.SZKOLENIA.SELECT.Kierownik, '') IN ('', 'ALL'), 
					TRUE, 
					EXISTS(
						SELECT 
							hl.OsobaGUID_B 
						FROM `hr_self_links` hl
						WHERE
							hl.OsobaGUID_A = d.guid_pracownika
							AND hl.rel = 'szef'
							AND hl.OsobaGUID_B = @.SZKOLENIA.SELECT.Kierownik
						--	to lub...	
							AND Get_Status_For_From_To('', NULL, hl.DateFrom, hl.DateTo, hl.Status, 0) LIKE 'OK%'
						--	prościej
							-- AND hl.Status = 0 AND NOW() BETWEEN hl.DateFrom AND hl.DateTo
					)
				)
		--	Data Od i Do 
			AND 
				IF(@.SZKOLENIA.SELECT.DataOd IS NULL AND @.SZKOLENIA.SELECT.DataDo IS NULL, 
					TRUE, 
					_TimeRange('conflict', d.DataOd, d.DataDo, @.SZKOLENIA.SELECT.DataOd, @.SZKOLENIA.SELECT.DataDo, '', '')
				)
				
			-- AND c.GUID IN ('a66d9c501da14d58fc10d4a941fe75d4', 'WNIOS.DELEG:100048377042960424', 'WNIOS.DELEG:99939613656743945')
		; 
	END IF;
	
	IF _MODE LIKE 'LK.NrRachunku.Prac%' THEN
	/********************************************************************************************************
		CALL delegacjePF('LK.NrRachunku.Prac', 'DelegGUID', '_UserGUID', '', '', '', '', '','<select>');
		CALL delegacjePF('LK.NrRachunku.Prac', 'DelegGUID', '', '', '', '', '', '','<select>');
	********************************************************************************************************/
		SELECT
			CONCAT_WS(' ', vrb.SNr, vrb.SOpis) AS FullOpis,
			vrb.*
		FROM `delegacje` d, `v_rachbankowereg_prac` vrb
		WHERE
			d.GUID = _GUID
			AND vrb.reGUID = d.GUID_pracownika 
			-- AND vrb.Nr = d.PlatnNrRachunku
		ORDER BY IsPrimary DESC, IsDeleg DESC, lp
		;
	END IF;
	
	IF _MODE LIKE 'New.NrRachunku.dla.Deleg.Prac%' THEN
	/********************************************************************************************************
		CALL delegacjePF('New.NrRachunku.dla.Deleg.Prac', 'DelegGUID', '', 'nr k-ku', '', '', '', '','<select>');
		_Status	nowy nr k-ku
	********************************************************************************************************/
		SELECT 
			d.GUID_pracownika INTO @.d.GUID_pracownika
		FROM `delegacje` d 
		WHERE
			d.GUID = _GUID
		;
		SET @.d.PlatnNrRachunku = REGEXP_REPLACE_(_Status, '[^0-9]+', '');
		CALL P1_RachBankowereg('DELEGACJE.ADD.NrRachunku', @.d.GUID_pracownika, @.d.PlatnNrRachunku, NULL, NULL, NULL, NULL, '', '', '', '');
		SELECT
			CONCAT_WS(' ', vrb.SNr, vrb.SOpis) AS FullOpis,
			vrb.*
		FROM `delegacje` d, `v_rachbankowereg_prac` vrb
		WHERE
			d.GUID = _GUID
			AND vrb.reGUID = d.GUID_pracownika 
			AND vrb.Nr = @.d.PlatnNrRachunku
		ORDER BY IsPrimary DESC, IsDeleg DESC, lp
		;
	END IF;
	
	IF _MODE LIKE 'Statusy.worflow%' THEN
	/********************************************************************************************************
		CALL delegacjePF('Statusy.worflow', '', '', '', '', '', '', '','<select>');
	********************************************************************************************************/
		SET @delegacje.mode=_MODE;
		SELECT
			'ALL' AS STATUS, 'Pokaz wszystkie' AS Descr_status,  0 AS LP
		UNION
		SELECT
			s.Status, s.Descr_status, s.crm_status + ABS(s.Poziom)* 1000 AS LP -- s.Poziom AS LP
		FROM `crm_workflow_def` s, `crm_rodzaje` cr
		WHERE
			cr.Rodzaj = 16 AND cr.PodRodzaj = 5 -- Wniosek o szkolenie
			AND s.Def = cr.Def_confirm_statuses	-- 'web_wnioski_2_level_zast_szef'
			AND IF(_MODE IN ('Statusy.worflow'), s.Is_Ending = 0, s.Is_Ending <> 0)
		ORDER BY LP	
		;
	END IF;
	
	IF _MODE IN ('Lista.SRODKI_LOKOM') THEN
	/********************************************************************************************************
		CALL delegacjePF('Lista.SRODKI_LOKOM', '', '', '', '', '', '', '','<select>');
	********************************************************************************************************/
		SET @delegacje.mode=_MODE;
		/*	było do 26 III 2024 - teraz view `v_SRODKI_LOKOM`
		SELECT 
			sp.LP,
			sp.Value, 
			CONCAT_WS(' - ', NULLIF(sparent.DisplayValue, ''), NULLIF(sp.DisplayValue, '')) AS Nazwa, 
			sp.Param2 AS LokTyp, 
			CONCAT_WS('.', sparent.Param1, sp.Param1) AS LP 
		FROM `slowniki_pierwotne` sp 
		LEFT JOIN `slowniki_pierwotne` sparent ON sparent.Value = sp.MasterKey AND sparent.slownik_GUID = 'SRODKI_LOKOM' 
		WHERE 
			sp.slownik_GUID = 'SRODKI_LOKOM' 
			AND NOT EXISTS(SELECT spChild.Value FROM `slowniki_pierwotne` spChild WHERE sp.Value = spChild.MasterKey AND spChild.slownik_GUID = 'SRODKI_LOKOM')
			-- AND sp.MasterKey <> ''
			AND sp.Poziom_Upr >= 0
		ORDER BY sp.LP
		;
		*/
		SELECT sl.* FROM `v_SRODKI_LOKOM` sl WHERE TRUE; -- sl.LokTyp = '';
	END IF;
	
	IF _MODE LIKE 'SELECT.Lista.%' THEN
		SET @delegacje.mode=_MODE;
		SET _TypDelegacji = IF(_MODE LIKE '%DELEGACJE%', 0, 1);

		IF _MODE LIKE 'SELECT.Lista.Statusy.worflow.%' THEN
		/********************************************************************************************************
			CALL delegacjePF('SELECT.Lista.Statusy.worflow.DELEGACJE', '', '', '', '', '', '', '','<select>');
			CALL delegacjePF('SELECT.Lista.Statusy.worflow.SZKOLENIA', '', '', '', '', '', '', '','<select>');
		********************************************************************************************************/
			SET @.Like.Pododzaj = CONCAT('%(', IF(_TypDelegacji = 0,  6, 5), ')%'); -- Wniosek o deleagacje, szkolenie
			SELECT
				'ALL' AS STATUS, 'Pokaz wszystkie' AS Descr_status, -1 AS LP
			UNION
			SELECT 
				s.Status, s.Descr_status, s.LP_2 AS LP
			FROM `v_crm_workflow_def_active` s
			WHERE
				TRUE
				AND s.Podrodzaje LIKE @.Like.Pododzaj
			ORDER BY LP
			;
			/*
			SELECT
				'ALL' AS STATUS, 'Pokaz wszystkie' AS Descr_status, -1 AS LP
			UNION
			SELECT
				s.Status, s.Descr_status, 
				-- s.Is_ending,
				-- s.crm_status + ABS(s.Poziom)* 1000 AS LP -- s.Poziom AS LP
				IF(s.Is_ending = 2, 20000, 10000) + ABS(s.Poziom)* 1000 AS LP -- s.Poziom AS LP
			FROM `crm_workflow_def` s, `crm_rodzaje` cr
			WHERE
				cr.Rodzaj = 16
				AND cr.PodRodzaj = IF(_TypDelegacji = 0,  6, 5) -- Wniosek o deleagacje, szkolenie
				AND s.Def = cr.Def_confirm_statuses	-- 'web_wnioski_2_level_zast_szef'
				AND s.Deleted = 0
				-- AND IF(_MODE IN ('Statusy.worflow'), s.Is_Ending = 0, s.Is_Ending <> 0)
			ORDER BY LP	
			;
			*/
		END IF;
		
		IF _MODE LIKE 'SELECT.Lista.Deleg%' THEN
		/********************************************************************************************************
			CALL delegacjePF('SELECT.Lista.Delegownych.DELEGACJE', '', '', '', '', '', '', '','<select>');
			CALL delegacjePF('SELECT.Lista.Delegownych.SZKOLENIA', '', '', '', '', '', '', '','<select>');
			CALL delegacjePF('SELECT.Lista.Delegujacych.DELEGACJE', '', '', '', '', '', '', '','<select>');
			CALL delegacjePF('SELECT.Lista.Delegujacych.SZKOLENIA', '', '', '', '', '', '', '','<select>');
		********************************************************************************************************/
			SET @delegacje.mode=_MODE;
			IF _MODE LIKE '%Delegownych%' THEN
				SELECT
					'ALL' AS guid_pracownika, ' Dowolny ' AS Delegowany
				UNION
				SELECT
					d.guid_pracownika,	-- d.guid_kier
					CONCAT_WS(' ', o.Nazwisko, o.Imie1) AS Delegowany
				FROM `delegacje` d, `osoby` o
				WHERE
					d.TypDelegacji = _TypDelegacji
					AND o.GUID = d.guid_pracownika
					-- o.Osoba = d.guid_kier
				GROUP BY d.guid_pracownika
				ORDER BY Delegowany
				;
			END IF;
		
			IF _MODE LIKE '%Delegujacych%' THEN
                /*  sty 2025: ponżej lepsze rowiązanie ...
				SELECT
					'ALL' AS guid_kier, ' Dowolny ' AS Delegujacy
				UNION
				SELECT
					d.guid_kier,
					CONCAT_WS(' ', o.Nazwisko, o.Imie1) AS Delegujacy
				FROM `delegacje` d, `osoby` o
				WHERE
					d.TypDelegacji = _TypDelegacji
					AND o.GUID = d.guid_kier
				GROUP BY d.guid_pracownika
                UNION
                SELECT 
                    hl.OsobaGUID_B AS guid_kier, ' Dowolny ' AS Delegujacy
                FROM `hr_self_links` hl 
                WHERE 
                    hl.OsobaGUID_A = d.GUID_pracownika AND hl.rel = 'szef'
				ORDER BY Delegujacy, `osoby` o
				;		
                */
                SET _UserGUID = IFNULL(NULLIF(_UserGUID, ''), @SYSTEM.Client.Session.log_USER_GUID);
				SELECT
					IF(s.guid_kier = 'ALL', 
						'ALL', 
						s.guid_kier
					) AS guid_kier, 
					IF(s.guid_kier = 'ALL', 
						' Dowolny ', 
						CONCAT_WS(' ', o.Nazwisko, o.Imie1)
					) AS Delegujacy
				FROM (
					SELECT
						'ALL' AS guid_kier, ' Dowolny ' AS Delegujacy
					UNION
					SELECT
						d.guid_kier,
						CONCAT_WS(' ', o.Nazwisko, o.Imie1) AS Delegujacy
					FROM `delegacje` d, `osoby` o
					WHERE
						d.TypDelegacji = _TypDelegacji
						AND o.GUID = d.guid_kier
					GROUP BY d.guid_pracownika
					UNION
					SELECT 
						hl.OsobaGUID_B AS guid_kier, ' ???? ' AS Delegujacy
					FROM `hr_self_links` hl 
					WHERE 
						hl.OsobaGUID_A = _UserGUID AND hl.rel = 'szef'
				) s
				LEFT JOIN `osoby` o ON o.GUID = s.guid_kier
				ORDER BY Delegujacy
				;		
			END IF;
		END IF;
	END IF;
	
	IF _MODE LIKE 'DELGACJE.Rozliczenie.%' THEN
		IF _MODE LIKE 'DELGACJE.Rozliczenie.Prepare%' THEN
			SET @.delegacje.GUID = _GUID;
			DROP TEMPORARY TABLE IF EXISTS `t_roliczenie_delegacji`;
			CREATE TEMPORARY TABLE `t_roliczenie_delegacji`
				SELECT
					c.StartTime, c.EndTime,
					@.SDni := TIMESTAMPDIFF(DAY, DATE(d.DataOd), DATE(d.DataDo)) AS SDni,
					@.SMin := TIMESTAMPDIFF(MINUTE, d.DataOd, d.DataDo) AS SMin,
					-- @.SHour := TIMESTAMPDIFF(HOUR, d.DataOd, d.DataDo) AS SHour,
					@.SHour := ROUND(@.SMin/60, 2) AS SHour,
					@.D_Pelne := (@.SHour DIV 24) AS D_Pelne ,
					-- @.H_OstDoby := (@.SHour MOD 24) AS H_OstDoby,
					@.M_OstDoby := (@.SMin MOD (60*24)) AS M_OstDoby,
					@.H_OstDoby := ROUND(@.M_OstDoby/60, 2) AS H_OstDoby,
					@.D_Factor := 
						IF(@.SHour < 8, 
							0, 
							IF(@.SHour <= 12,
								0.5, 
								IF(@.H_OstDoby <= 8, 
									@.D_Pelne + 0.5, 
									@.D_Pelne + 1
								)
							)
						) 
					AS D_Factor,
					-- @.SDobyRozlicz := @.H_OstDoby + IF(@.SHour DIV 24) AS D_Pelne ,
					(@.D_Typ := 
						IF(@.SHour < 8, 
							'0', 
							IF(@.SHour <= 12,
								'1/2', 
								IF(@.H_OstDoby <= 8,
									-- CONCAT_WS('+', CONCAT(@.D_Pelne, ' dob.'), IF(@.H_OstDoby < 8, '1/2', NULL)),
									CONCAT_WS('+', CONCAT(@.D_Pelne, ' dob.'), '1/2'),
									-- CONCAT_WS('+', CONCAT(@.D_Pelne + 1, ' dob.'), IF(@.H_OstDoby < 8, '1/2', NULL))
									CONCAT_WS('+', CONCAT(@.D_Pelne + 1, ' dob.'), NULL)
								)
							)
						)
					) AS D_Typ,
					-- @.D_Str := CONCAT_WS('', CONCAT(_VarStr(NULLIF(@.D_Pelne, 0)), ' dn.'), CONCAT(_VarStr(@.H_OstDoby), 'h')) AS D_Str,
					@.D_Str := _VarStr(_DisplayDurationH('D/H/M', @.SHour, '', '')) AS D_Str,
					CONCAT_WS('', _VarStr(@.D_Typ), ' (', @.D_Str, ')') AS Deleg_D_Typ_Str,
					
					
					d.DataOd AS dOd,
					IF(d.DataDo = ADDTIME(DATE(d.DataDo), '00:00'), ADDTIME(DATE(d.DataDo), '24:00'), d.DataDo) AS dDo,
					(@.Del.TrwaH := TIMESTAMPDIFF(HOUR, d.DataOd, d.DataDo)) AS DelTrwaH,
					(@.Del.StawkaFactor := IF(@.Del.TrwaH < 8, 0, IF(@.Del.TrwaH < 12, 0.5, 1))) AS StawkaFactor,
					(@.Del.TrwaD := TIMESTAMPDIFF(DAY, DATE(d.DataOd), DATE(d.DataDo))) AS DelTrwaD,
					
					/*
					IF(@.L.sniad > 0, 1, 0) AS L_Sniad,	(@.L.sniad := greatest(0, @.L.sniad - 1)) AS Ls,
					IF(@.L.obiad > 0, 1, 0) AS L_Obiad,	(@.L.obiad := GREATEST(0, @.L.obiad - 1)) AS Lo,
					IF(@.L.kolac > 0, 1, 0) AS L_Kolac,	(@.L.kolac := GREATEST(0, @.L.kolac - 1)) AS Lk
					*/
					d.dieta AS Stawka_Init,
					ROUND(d.Wyzyw_S * 0.25 * d.dieta, 2) AS MINUS_Sniad,
					ROUND(d.Wyzyw_O * 0.5 * d.dieta, 2) AS MINUS_Obiad,
					ROUND(d.Wyzyw_K * 0.25 * d.dieta, 2) AS MINUS_Kolac,
					(
						d.Wyzyw_Pelne = 1
						OR
						(
						d.Wyzyw_S >= d.CDni
						AND
						d.Wyzyw_O >= d.CDni
						AND
						d.Wyzyw_K >= d.CDni
						)
					) AS Wyzywienie_Pelne,
					d.* 
				FROM `delegacje` d 
				-- FROM `e_szkolenia` d 
				INNER JOIN `crm_commisions` c ON c.GUID = d.GUID
				WHERE
					d.GUID = _GUID
			;
			SET
				@.L.sniad = NULL,
				@.L.obiad = NULL,
				@.L.kolac = NULL,
				@.S.TrwaH = 0

			;
			DROP TEMPORARY TABLE IF EXISTS `t_Fin_roliczenie_delegacji`;
			CREATE TEMPORARY TABLE `t_Fin_roliczenie_delegacji`
				SELECT 
					-- IF(d.Wyzyw_Pelne = 1,
					IF(d.Wyzywienie_Pelne,
						'Delegacja z pełnym wyżywieniem - dieta nie przysługuje.',
						CONCAT_WS('\n',
							-- CONCAT_WS('', 'Delegacja trwa ', t.Deleg_D_Typ_Str), -- '\n',
							CONCAT_WS('', 'Delegacja trwa ', _VarStr(d.D_Str)),
							IF(d.d_Pelne = 0,
								IF(d.d_Factor = 0,
									'Cała delegacja trwa mniej niż 8h - dieta nie przysługuje.',
									IF(d.d_Factor = 0.5,
										'Cała delegacja trwa nie więcej niż 12h - przysługuje ½ diety.',
										-- IF(t.Day_Type = '1D',
										'Delegacja trwa 1 dobę - przysługuje pełna dieta.'
									)
								),
								CONCAT_WS('',
									IF(d.d_Factor LIKE '%.5',	-- np. 9.5
										CONCAT_WS('',
											-- '(ostatnia doba trwa: ', _VarStr(t.H_OstDoby), 'h < 8h ',
											'(ostatnia doba trwa nie więcej niż 8h ',
											' - przysługuje ½ diety).'
										),
										CONCAT_WS('',
											-- '(ostatnia doba trwa: ', _VarStr(t.H_OstDoby), 'h >= 8h ',
											'(ostatnia doba trwa ponad 8h ',
											' - przysługuje pełna dieta).'
										)
									)
								)
							),
						--	Suma dni x stawka....
							IF(d.d_Factor = 0,
							--	brak diet
								NULL,
							--	0.5, 1 doba, 9.5 doby , 12 (całe doby) 
								IF(d.d_Factor = 0.5,
								--	0.5	
									CONCAT_WS('',
										'½ diety',
										' = ', ROUND(d.Stawka_Init/2, 2)
									),
								--	1 doba, 9.5 doby , 12 (całe doby) 
									IF(d.d_Factor = 1,
									--	1 doba
										CONCAT_WS('',
											'1 x pełna dieta',
											' = ', ROUND(d.Stawka_Init, 2)
										),
									--	9.5 doby albo 12 (całe doby) 
										IF(d.d_Factor LIKE '%.5',	-- np. 9.5
										--	np. 9.5 doby
											CONCAT_WS('',
												_VarStr(d.d_Pelne), ' x pełna dieta + ½ diety', 
												' = ', _VarStr(d.d_Pelne), ' x ', ROUND(d.Stawka_Init, 2), ' + ', ROUND(d.Stawka_Init/2, 2)
											),
										--	(całe doby) 	
											CONCAT_WS('',
												_VarStr(ROUND(d.d_Factor)), ' x pełna dieta', 
												' = ', _VarStr(ROUND(d.d_Factor)), ' x ', ROUND(d.Stawka_Init, 2)
											)
										)
									)
								)		
							),
							-- '',
						--	pomniejszenie
							NULLIF(
							CONCAT_WS('\n',
								IF(d.MINUS_Sniad + d.MINUS_Obiad + d.MINUS_Kolac > 0,
									'\nŁączna dieta pomniejszona o: ',
									NULL
								),
								CONCAT_WS(', ',
									IF(d.MINUS_Sniad > 0,
										CONCAT(d.Wyzyw_S, ' x śniadania (25%) = ', d.MINUS_Sniad),
										NULL
									),
									IF(d.MINUS_Obiad > 0,
										CONCAT(d.Wyzyw_O, ' x obiady (50%) = ', d.MINUS_Obiad),
										NULL
									),
									IF(d.MINUS_Kolac > 0,
										CONCAT(d.Wyzyw_K, ' x kolacje (25%) = ', d.MINUS_Kolac),
										NULL
									)
								),
								NULL
							), ''),
							'',
						--	Kwota ostateczna
							-- CONCAT_WS('', 'Kwota rozliczonej delegacji: ', SUM(ROUND(t.KwotaDelegacjiDnia, 2))),
							CONCAT_WS('', 
								'Rozliczana dieta delegacji: ', 
								ROUND(
									GREATEST(
										0, 
										d.d_Factor*ROUND(d.Stawka_Init, 2) - 
										(d.MINUS_Sniad + d.MINUS_Obiad + d.MINUS_Kolac)
									),
									2
								)
							)
						)
					) AS Inf,
					
					d.Wyzyw_S,d.Wyzyw_O,d.Wyzyw_K, 
					d.d_Factor*ROUND(d.Stawka_Init, 2) AS KwotaDelegacjiPodst,
					d.MINUS_Sniad,
					d.MINUS_Obiad,
					d.MINUS_Kolac,
					ROUND(
						-- IF(d.Wyzyw_Pelne = 1,
						IF(d.Wyzywienie_Pelne,
							0,
							GREATEST(
								0, 
								d.d_Factor*ROUND(d.Stawka_Init, 2) - 
									(d.MINUS_Sniad + d.MINUS_Obiad + d.MINUS_Kolac)
							)
						),
						2	
					) AS KwotaDelegacji,
					d.CDni,
					d.CNocy,
					d.Deleg_Zagraniczna,
					-- COUNT(*) AS Dni,
					-- t.* 
					d.GUID
					-- d.*
				FROM -- `t_narast_roliczenie_delegacji` t
				-- , 
				`t_roliczenie_delegacji` d
				WHERE
					d.GUID = _GUID
			;
		
		END IF;
		
		IF _MODE LIKE 'DELGACJE.Rozliczenie.Prepare.and.Select' THEN
			SELECT 
				tf.*
			FROM `t_Fin_roliczenie_delegacji` tf
			;
		END IF;
		SET @delegacje.mode = _MODE;
	END IF;

	IF _MODE IN ('Lista.szefow', 'Lista.szefów') THEN
	/********************************************************************************************************
		CALL delegacjePF('Lista.szefow', '', '', '', '', '', '', '','<select>');
	********************************************************************************************************/
		SET @delegacje.mode=_MODE;
        SET _MODE = 'Lista.szefow.Choice';
        /*  dawniej
		SELECT
			'ALL' AS SzefGUID, ' Dowolny ' AS SzefStr
		UNION
		SELECT 
			ps.SzefGUID,
			CONCAT_WS(' ', o.Nazwisko, o.Imie1) AS SzefStr
		FROM `v_prac_szef` ps
		INNER JOIN `osoby` o ON o.GUID = ps.SzefGUID
		GROUP BY ps.SzefGUID
		ORDER BY SzefStr
		;   */
	END IF;
    
	-- IF _MODE IN ('Lista.szefow', 'Lista.szefów') THEN
    IF _MODE LIKE 'Lista.szef%' THEN
	/********************************************************************************************************
		CALL delegacjePF('Lista.szefow', '', '', '', '', '', '', '','<select>');
            stare wywołanie CALL delegacjePF('Lista.szefów', '', '', '', '', '', '', '','<select>');
		CALL delegacjePF('Lista.szefow.Deleg', '', '', '', '', '', '', '','<select>');
            de facto uczestnicy grupy DEL_KIEROWNICY
        CALL delegacjePF('Lista.szefow.GRP','','Zalogowany','','Grupa','','','','');
            de facto uczestnicy grupy (z _ParamA)
        CALL delegacjePF('Lista.szefow.1','','Zalogowany','','','','','','');
            kierownik osoby _UserGUID 
            
	********************************************************************************************************/
        SET @delegacje.mode=_MODE;
        IF _MODE IN ('Lista.szefow.Choice', 'Lista.szefow.ALL') THEN
            SET @.l.szefow.with.Dowolny := _MODE LIKE '%.Choice';
            SELECT
                a.*
            FROM (SELECT 'ALL' AS SzefGUID, ' Dowolny ' AS SzefStr ) a
            WHERE
                @.l.szefow.with.Dowolny
            UNION
            SELECT 
                ps.SzefGUID,
                CONCAT_WS(' ', o.Nazwisko, o.Imie1) AS SzefStr
            FROM `v_prac_szef` ps
            INNER JOIN `osoby` o ON o.GUID = ps.SzefGUID
            GROUP BY ps.SzefGUID
            ORDER BY SzefStr
            ;
        END IF;
        IF _MODE IN ('Lista.szefow.GRP','Lista.szefow.Deleg') THEN
        --  1. uczestnicy grupy (z _ParamA)
        --  2. de facto uczestnicy grupy DEL_KIEROWNICY
            IF _MODE IN ('Lista.szefow.Deleg') THEN
                SET _ParamA := 'DEL_KIEROWNICY';
            END IF;
            SELECT 
                o.guid AS SzefGUID,
                CONCAT_WS(' ', o.imie1, o.nazwisko) AS SzefStr 
            FROM `osoby` o, `grupy_osob` g 
            WHERE
                o.guid=g.osobaguid and g.grupaguid=_ParamA and o.rodzaj=1
            ;
        END IF;
        IF _MODE IN ('Lista.szefow.1') THEN
        --  kierownik osoby _UserGUID 
            SELECT 
                hl.OsobaGUID_B AS SzefGUID,
                CONCAT_WS(' ', o.imie1, o.nazwisko) AS SzefStr 
            FROM `hr_self_links` hl, `osoby` o 
            WHERE 
                hl.OsobaGUID_A = _UserGUID AND hl.rel = 'szef'
                AND o.guid = hl.OsobaGUID_B
            ;
        END IF;
	END IF;
	
    IF _MODE = 'GET_KIEROWNICY' THEN
        SELECT 
            o.guid,
            CONCAT_WS(' ', o.imie1, o.nazwisko) as imienazwisko 
        FROM osoby o, grupy_osob g 
        WHERE
            o.guid=g.osobaguid and g.grupaguid='DEL_KIEROWNICY' and o.rodzaj=1;
        SET @delegacje.mode=_MODE;
    END IF;
    
    IF _MODE = 'GET_TYPY_SZKOLEN' THEN
        SET @delegacje.mode=_MODE;
        SELECT c.idn,c.opis,k.nazwa_klasy 
        FROM osoby_cechy c, osoby_klasy_cech k
        WHERE k.idn=c.klasa_cech AND k.param1 like "%szkolenia%";
    END IF;
	
IF @delegacje.mode IS NULL THEN
  SELECT CONCAT(_MODE,' nie zdefiniowany');
END IF;

END $$

DELIMITER ;

/*
====================================================================================================================================================================================
	NOTATNIK
====================================================================================================================================================================================
stwaki do delegacji
-- 1. Wstawienie
INSERT IGNORE INTO `_app_cfg`(`Cfg_ID`,`key`,`value`,`descr`,`Unit`,`VariableName`,`APP_IDs`) VALUES
('DELEGACJE','Dieta','45','Dieta',9,NULL,''),
('DELEGACJE','Stawka>900','1.15','Stawka dla > 900 cm3',10,NULL,''),
('DELEGACJE','Stawka<900','0.89','Stawka dla < 900 cm3',10,NULL,''),
('DELEGACJE','Ryczalt_dojazdy','9','RyczaĹ‚t za dojazdy',10,NULL,''),
('DELEGACJE','Ryczalt_noclegi','67.50','RyczaĹ‚t za noclegi',10,NULL,'');

-- 2. SELECT
SELECT * FROM `_app_cfg`;

*/
