 DELIMITER $$

/* ************************************************************************************************************************************************************************
	Nowe, Edycja, etc
	Ten plik generalnie zastepuje wszystkie C_HT_TE xxxxx np C_HT_TE.SQL, C_HT_TE_konkol.SQL tct
	2019-12-19 - jeszcze w Security uzywaja CALL C_HT_TE_Oper( reszta nie zatem gdy security przejdzie na to tu ponizej 
	2020-02-02 - juz nigdzie nie uzywaja CALL C_HT_TE_Oper( reszta nie zatem gdy security przejdzie na to tu ponizej 
	wyrzuc ifa OWNER i wtedy wywal pliki C_HT_TE xxxxx .SQL
************************************************************************************************************************************************************************ */	


DROP PROCEDURE IF EXISTS `C_HT_TE_Proc`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `C_HT_TE_Proc`(
	IN _MODE VARCHAR(250),
	IN _IN_MODE VARCHAR(250),
	IN _FROM VARCHAR(250),
	IN _IdnOper VARCHAR(38),	--	IdnOper/IdnNg
	IN _GUID VARCHAR(38),		--	GUID pozycji ALBO!!! IdnNg realizowanego zamowienia w INIT _GUID wedruje do @.OPZM.INPUT_Key
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_C VARCHAR(255),
	IN _Param_D VARCHAR(255),
	IN _Param_E TEXT
)
/******************************************************************************************************************************************************
	Procedury ogólne np. realizacja zam. realizacja wstępna i przeniesienie do E, etc.
	oczywiście korzysta z proc. C_HT_TE_Oper() czyli z TE
	_MODE najczesciej to
	'CREATE'		oznacza kreowanie od początku do konca w TE i zapis w rzeczywistych tabelach (UWAGA synionim 'NEW.APPLY')
	'NEW.APPLY'		to samo co 'CREATE' patrz wyżej 
	'NEW'			oznacza kreowanie w TE ale bez zapisu do rzeczywistych tabel - dane pozostaja w tabelach TE
	'NEW.EDIT.E'	oznacza kreowanie w TE ale bez zapisu do rzeczywistych tabel, nastepnie dane są kopiowane do tabel E i tam przetwarzane 
					w świecie E natomiast w tabelach TE dane są usuwane
******************************************************************************************************************************************************/
SC_HT_TE_Proc: BEGIN 
	DECLARE _Limit INTEGER;
	DECLARE _IdnNg VARCHAR(38);
	-- DECLARE _WyjazdGUID, _KontrGUID VARCHAR(38);
	-- DECLARE _SQLText, _Params TEXT;
	-- DECLARE _IdnTowr, _ModeParam, _ZM_Key VARCHAR(38);
	-- DECLARE _Ilosc, _CenaNet DOUBLE(16,4);
	-- DECLARE _rodzaj_przeliczenia INTEGER;
	
	IF _MODE IN ('CREATE', 'NEW.APPLY', 'NEW', 'NEW.EDIT.E') AND _IN_MODE LIKE 'Realizacja.ZM.%' THEN
	/*************************************************************************************************************************************************
		Realizacja zamówień i ??? zleceń ????
		CALL C_HT_TE_Proc('CREATE', 'Realizacja.ZM.From.zmng', 'OP', @_IdnOper, @_IdnNg, '', '', '', '' , @Params);
	*************************************************************************************************************************************************/
	
	-- bylo do 18 II 2020 IF (@session.globals.Owner != 'SECURITY') THEN
	--	DLA POZOSTAŁYCH PROCKA z roznymi swiatami (zlecamy ten sam MODE i swiat = TE) !!!!!!!!!!!!!!
-- test CALL _erp_external_process_log_tools('Insert', 'System OPZM', 'doINT', 'Realizacja Start', 0, '', '');
		
		CALL C_HT_OPZM_Proc(_MODE, _IN_MODE, 'OP', 'TE', _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
-- test CALL _erp_external_process_log_tools('Insert', 'System OPZM', 'doINT', 'Realizacja End', 0, '', '');

		
	END IF;

	
	IF _MODE IN ('E<-TE.Realizacja.ZM') AND _IN_MODE LIKE 'CREATE.ZM.FROM.ZM%' THEN
	/*************************************************************************************************************************************************
		CO TO JEST ?????
		PO CO ???????????????????
		szczatki tego szukaj w ... C_HT_TE.sql
	*************************************************************************************************************************************************/
		LEAVE SC_HT_TE_Proc;
	END IF;	
	
	IF _MODE IN ('ODREALIZUJ') AND _IN_MODE IN ('ZAM.cale', 'ZAM<-usun.poz.z.Doc.MAG') THEN
	/*************************************************************************************************************************************************
		
		
		CO TO JEST ????????????????
		TO CHYBA NIE SKONCZONE CO ????????
		
		
		Odrealizacja zamówień poprzez ...
		usuwanie pozycji z dok. mag. `oppo` - InnOper  czyli _FROM = 'OP'
		CALL C_HT_TE_Proc('ODREALIZUJ', 'ZAM<-usun.poz.z.Doc.MAG', 'OP', @_IdnOper, '', '', '', '', '' , @Params);
		cale odrealizowanie zamowienia - usuwanie pozycji wszystkich dokumentow z dok. mag. `oppo` - UWAGA tutaj _IdnOper to IdnNg  
		CALL C_HT_TE_Proc('ODREALIZUJ', 'ZAM.cale', 'ZM', @_IdnNg, '', '', '', '', '' , @Params);
	*************************************************************************************************************************************************/
		CALL C_HT_OPZM('recreate.`TE_xxxx`', '', _FROM, 'TE', '', '', '', '', '', '', '');
		IF _IN_MODE = 'Doc.MAG' THEN
			CALL C_HT_OPZM('INIT.EDIT(CLEAR)', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
			CALL C_HT_OPZM('START', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
			DELETE p FROM `TE_oppo` p WHERE p.IdnOper = _IdnOper;
			CALL C_HT_OPZM('NG.POST', '', _FROM, 'TE', @_IdnOper, '', '', '', '' ,'', '');
			CALL C_HT_OPZM('APPLY', '', _FROM, 'TE', _IdnOper, '', '', '', '' ,'', '');			
		-- 	nie potrzebne bo Apply jest uwzgl. :) CALL _ZM_Update_Realizacja('UPDATE.for.zmng', @_IdnNg, '', '');
			
		END IF;
		
		IF _IN_MODE = 'ZAM' THEN
			--	Tutaj konieczna petla dok. mag. aby je wyedytowac - na kiedys
			SET @costam = '';
		END IF;
		
	END IF;	
	
	IF _MODE IN ('CREATE', 'NEW.APPLY', 'NEW', 'NEW.EDIT.E') AND _IN_MODE LIKE 'CREATE.WZ.In.blanco.do.ZM%' THEN
	/*************************************************************************************************************************************************
		Tworzenie WZ/FV in blanco dla zamowienia _GUID
		CALL C_HT_TE_Proc('CREATE', 'CREATE.WZ.In.blanco.do.ZM', 'OP', @_IdnOper, @_IdnNg, '', '', '', '' , @Params);
		CALL C_HT_TE_Proc('NEW', 'CREATE.WZ.In.blanco.do.ZM', 'OP', @_IdnOper, @_IdnNg, '', '', '', '' , @Params);
		Dla zaznaczonych w shellu czyli w `tb_zmng`
		CALL C_HT_TE_Proc('CREATE', 'CREATE.WZ.In.blanco.do.ZM.for.`tb_zmng`', 'OP', NULL, NULL, '', '', '', '' , @Params);

	*************************************************************************************************************************************************/
		IF _IN_MODE = 'CREATE.WZ.In.blanco.do.ZM.for.`tb_zmng`' THEN
		--	Dla zamówień w shelowej temporarce `tb_zmng`
			BEGIN
				DECLARE _curr_IdnNg VARCHAR(38);
				DECLARE _error BOOL DEFAULT FALSE;
				DECLARE done BOOL DEFAULT FALSE;
				DECLARE c_t_in_blanco_tb_zmng CURSOR FOR
					SELECT 	
						mn.GUID AS IdnNg
					FROM `tb_zmng` mn
					WHERE
						TRUE
				;
				DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
				OPEN c_t_in_blanco_tb_zmng;
				Loop__t_in_blanco_tb_zmng: LOOP
					FETCH c_t_in_blanco_tb_zmng INTO 
						_curr_IdnNg
					;
					IF done THEN
						LEAVE Loop__t_in_blanco_tb_zmng;
					END IF;
				--	Wykonaj dla poj. rekordu
					CALL C_HT_TE_Proc('CREATE', 'CREATE.WZ.In.blanco.do.ZM', 'OP', NULL, _curr_IdnNg, '', '', '', '' , _Param_E);
				END LOOP;
				CLOSE c_t_in_blanco_tb_zmng;
				
			END;

		END IF;

		IF _IN_MODE = 'CREATE.WZ.In.blanco.do.ZM' THEN
		--	Dla pojedynczego zamowienia
			SET _FROM = 'OP', @_IdnOper = NULLIF(_IdnOper, ''), @_IdnNg = _GUID, @Params = _Param_E;
set @polo = '1';
		--	czy w ogole istnieje zamowienie ?
			IF NOT EXISTS(SELECT GUID FROM `zmng` WHERE GUID = @_IdnNg) THEN
				LEAVE SC_HT_TE_Proc;
			END IF;
set @polo = '2';
			
		--	Teraz Parametry	
			SELECT
				-- bylo _Get_GUID_xxx('zmngGUID', n.KontrGUID, n.transza_sped, n.TerminRealizacji, '', '', '') AS IdnNg,
				IFNULL(NULLIF(@_IdnOper, ''),
					_Get_GUID_xxx('IdnOper<-IdnNg.new', n.GUID, '', '', '', '', '')
				) AS IdnOper,
				IFNULL(NULLIF(@_IdnOper, ''),
					_Get_GUID_xxx('IdnOper<-IdnNg.old', n.GUID, '', '', '', '', '')
				) AS IdnOper_Old,
				n.nrdokmag,
				CONCAT_WS('&', 
					'&', 
					'AutoNum=1', 
					CONCAT('Rodzaj=', n.Rodzaj2), 
					CONCAT('KontrGUID=', n.KontrGUID), 
					CONCAT('datawystaw=', n.TerminRealizacji), 
					CONCAT('zmagazynu=', n.IdnMagazyn),
					CONCAT('domagazynu=', n.IdnMagazyn), 
					'&'
				) AS Params
			INTO
				@_IdnOper, @_IdnOper_Old, @zm.NrDokMag, @Params
			FROM `zmng` n 
			WHERE	
				n.GUID = @_IdnNg
			;
		--	I proba	
		--	Czy jest takie WZ i czy ma NrDokMag	
			SET _IdnOper = @_IdnOper_Old;	--	nowy GUID in blanco (ale po staremu budowany)
			SET @.n.IDN = NULL, @.n.Nrdokmag = NULL;
			SELECT
				n.IDN, n.Nrdokmag
				INTO @.n.IDN, @.n.Nrdokmag
			FROM `opng` n
			WHERE
				n.GUID = _IdnOper
			;
			IF @.n.IDN IS NULL OR IFNULL(@.n.Nrdokmag, '') = '' THEN
		--	II proba dla @_IdnOper
		--	Czy jest takie WZ i czy ma NrDokMag	
				SET _IdnOper = @_IdnOper;	--	nowy GUID in blanco
				SET @.n.IDN = NULL, @.n.Nrdokmag = NULL;
				SELECT
					n.IDN, n.Nrdokmag
					INTO @.n.IDN, @.n.Nrdokmag
				FROM `opng` n
				WHERE
					n.GUID = _IdnOper
				;
			END IF;
			
			SET _FROM = 'OP', @_IdnOper = _IdnOper;
		
		/*
			SET _IdnOper = @_IdnOper;	--	nowy GUID in blanco
			SET _FROM = 'OP', @_IdnOper = _IdnOper;
						-- set @X = 0;
			
		--	Czy jest takie WZ i czy ma NrDokMag	
			SET @.n.IDN = NULL, @.n.Nrdokmag = NULL;
			SELECT
				n.IDN, n.Nrdokmag
			FROM `opng` n
			WHERE
				n.GUID = _IdnOper
			INTO @.n.IDN, @.n.Nrdokmag
			;
		*/	
set @polo = '3';
						-- set @X = 1;
			IF @.n.IDN IS NULL OR IFNULL(@.n.Nrdokmag, '') = '' THEN
			--	Gdy nie ma WZ lub Nrdokmag pusty 
				CALL C_HT_OPZM('INIT.NEW', '', 'OP', 'TE', @_IdnOper, '', '', '', '' ,'', @Params);
set @polo = '4';
				CALL C_HT_OPZM('START', '', 'OP', 'TE', @_IdnOper, '', '', '', '' ,'', '');
set @polo = '5';

						-- set @X = 2;
			--	UWAGA ważne!!!!
			--	Moze byc tak że są wstawione pozycje `zmpo` trzeba zatem wstawić do `TE_zmpo` pozycje z `zmpo`.
				CALL C_HT_xxNgPo_DO('R.p->.p', 'OP', 'TE', _IdnOper, '', '', '', '', '', '');
set @polo = '6';
				CALL C_HT_OPZM('NG.POST', '', 'OP', 'TE', _IdnOper, '', '', '', '' ,'', '');
set @polo = '7';
				
				IF _MODE IN ('CREATE', 'NEW.APPLY') THEN
					-- slon & jmam 2019-02-22
					 UPDATE `TE_opng` n, zmng z 
					 SET 
						n.transza_zamow = z.transza_zamow
					 WHERE
						n.GUID = @_IdnOper
						AND
						z.GUID = @_IdnNg
					;
set @polo = '8';
					CALL C_HT_OPZM('APPLY', '', 'OP', 'TE', _IdnOper, '', '', '', '' ,'', '');
-- set @polo = '9';
				END IF;
				
			END IF;	

			IF IFNULL(@zm.NrDokMag, '') = '' THEN
				UPDATE `zmng` zn, `opng` n  
				SET 
					zn.NrDokMag = n.NrDokMag 
				WHERE
					zn.GUID = @_IdnNg
					AND
					n.GUID = _IdnOper
				;
			END IF;
		END IF;
	
	END IF;	

	IF _MODE IN ('CREATE', 'NEW.APPLY', 'NEW', 'NEW.EDIT.E') AND _IN_MODE LIKE 'CREATE.ZM.FROM.ZM%' THEN
	/*************************************************************************************************************************************************
		Cos jakby klonowanie zamówień - kreowanie nowych na podstawie poprzednich
		CALL C_HT_TE_Proc('CREATE', 'CREATE.ZM.FROM.ZM', 'OP', @_IdnOper, @_IdnNg, '', '', '', '' , @Params);
		CALL C_HT_TE_Proc('NEW', 'CREATE.ZM.FROM.ZM', 'OP', @_IdnOper, @_IdnNg, '', '', '', '' , @Params);
		Dla konkola ale i dla innych moze byc _IN_MODE = CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano
		CALL C_HT_TE_Proc('NEW', 'CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano', 'OP', @_IdnOper, @_IdnNg, '', '', '', '' , @Params);
	*************************************************************************************************************************************************/
		SET _FROM = 'ZM', @_IdnOper = NULLIF(_IdnOper, ''), @_IdnNg = _GUID, @Params = _Param_E;
		
		IF _IN_MODE = 'CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano' THEN
		--	Sprawdz czy sa pozycje wymagajace dowozki
			SET
			@.Dowozka.EXISTS = 
				EXISTS(
					SELECT
						p.IDN
					FROM `zmpo` p
					WHERE	
						p.IdnNg = @_IdnNg
						AND 
						(
							p.status_pakowania = 6		--	6 = Brak - dowózka
							OR
							_ExtFlags('GET', p.ExtFlags, '<PAK:DOW>', '', '') != ''
						)
						AND GREATEST(GREATEST(p.Ilosc - p.Zrealizowano, 0) - p.Spakowano, 0) > 0
				)
			;
			IF NOT @.Dowozka.EXISTS THEN
				LEAVE SC_HT_TE_Proc;	--	brak jakichkolwiek pozycji do budowania dowozki
			END IF;
		END IF;
		
		DROP TEMPORARY TABLE IF EXISTS `t_in_zmng`; 
		CREATE TEMPORARY TABLE `t_in_zmng`
		SELECT * FROM zmng WHERE GUID = @_IdnNg
		;
		DROP TEMPORARY TABLE IF EXISTS `t_in_zmpo`; 
		CREATE TEMPORARY TABLE `t_in_zmpo`
		SELECT * FROM zmpo WHERE IdnNg = @_IdnNg
		;
		SET @.DEST.terminrealizacji = DATE(_VarStr(NULLIF(_FetchParams('', _Param_E, 'terminrealizacji', ''), '')));
		
		UPDATE `t_in_zmng` n
		SET
			n.TerminRealizacji = 
				IF(_IN_MODE = 'CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano',
					n.TerminRealizacji,
					IFNULL(@.DEST.terminrealizacji, _Get_Next_Prev_Working_Day('A', n.TerminRealizacji + INTERVAL 1 DAY, 1))
				)
		;
		IF _IN_MODE = 'CREATE.ZM.FROM.ZM' THEN
			UPDATE `t_in_zmng` n
			SET
				n.GUID = 
					IFNULL(NULLIF(@_IdnOper, ''),
						_Get_GUID_xxx('zmngGUID', n.KontrGUID, IFNULL(n.transza_sped, 0), n.TerminRealizacji, '', '', '')
					)
			;
		ELSEIF _IN_MODE = 'CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano' THEN
			UPDATE `t_in_zmng` n
			SET
				n.GUID = 
					IFNULL(NULLIF(@_IdnOper, ''),
						_Get_GUID_xxx('IdnNg<-KLON.IdnNg.transza_sped.TerminRealizacji', n.GUID, IFNULL(n.transza_sped, 0), n.TerminRealizacji, '', '', '')
						-- _Get_GUID_xxx('zmngGUID', n.KontrGUID, IFNULL(n.transza_sped, 0), n.TerminRealizacji, '', '', '')
					),
				n.WyjazdGUID = '???'
			;
		END IF;
	--	 czy aby ?????	
		UPDATE `t_in_zmpo` p
		SET 
			p.zamowienieGUID = p.GUID,
			p.Ilosc_Pierwotna = p.Ilosc
		;
		
		UPDATE `t_in_zmpo` p, `t_in_zmng` n
		SET 
			p.Idn = 0,
			p.GUID = _Get_GUID_xxx('zmpoGUID<-IdnNg,IdnTowr,Receptura,Tekst', n.GUID, p.IdnTowr, '' /* RecepturaGUID */ , '', '', p.Komentarz),
			p.IdnNg = n.GUID,
			p.Ilosc = 
				IF(_IN_MODE = 'CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano',	
					IF(p.status_pakowania = 6,		--	6 = Brak - dowózka
						GREATEST(GREATEST(p.Ilosc - p.Zrealizowano, 0) - p.Spakowano, 0),
						0
					),
					p.ilosc_na_przyszlym
				)
		WHERE 
			TRUE
		;
	--	Teraz Parametry	
		SELECT
			-- bylo _Get_GUID_xxx('zmngGUID', n.KontrGUID, n.transza_sped, n.TerminRealizacji, '', '', '') AS IdnNg,
			n.GUID AS IdnNg,
			CONCAT_WS('&', 
				'&', 'Rodzaj=27', 'AutoNum=1', 
				CONCAT('KontrGUID=', n.KontrGUID), 
				CONCAT('datawystaw=', CURRENT_DATE()), 
				CONCAT('terminrealizacji=', n.TerminRealizacji), 
				CONCAT('idnmagazyn=', n.IdnMagazyn),
				CONCAT('magazynwys=', n.IdnMagazyn), 
				CONCAT('transza_sped=', n.transza_sped),
				IF(_IN_MODE = 'CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano', 
					'Tymczasowa=1',
					''
				),
				IF(_IN_MODE = 'CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano', 
					'nrzamw=*** DOWOZKA ***',
					''
				),
				'&'
			) AS Params
			INTO
			@IdnNg, @Params
		FROM `t_in_zmng` n 
		;
		SET _IdnOper = @IdnNg;	--	nowy GUID zamowienia
		SET _FROM = 'ZM', @_IdnOper = _IdnOper;
		
		CALL C_HT_OPZM('INIT.NEW', '', 'ZM', 'TE', @_IdnOper, '', '', '', '' ,'', @Params);
		CALL C_HT_OPZM('START', '', 'ZM', 'TE', @_IdnOper, '', '', '', '' ,'', '');

	--	UWAGA ważne!!!!
	--	Moze byc tak że są wstawione pozycje `zmpo` z `m_xxpo` ale nie ma jeszcze nagłówka w `zmng` i trzeba wstawiać nowe zamówienie ale 
	--	za razem wstawić do `TE_zmpo` pozycje z `zmpo`.  hmmm teraz jak to czytam to mam watpliwosc czy aby NA PEWNO???? zdarza sie taka sytuacja...
	--	...	zeby byly zmpo bez zmng (wstawiane z m_xxpo ?????? Co to jest ?????????
		CALL C_HT_xxNgPo_DO('R.p->.p', 'ZM', 'TE', @_IdnOper, '', '', '', '', '', '');
		
		CALL C_HT_OPZM('NG.POST', '', 'ZM', 'TE', _IdnOper, '', '', '', '' ,'', '');
		IF @.OPZM.N.Exists THEN
			UPDATE `TE_zmng` n
			SET
				n.Deleted = 0
			WHERE
				n.GUID = @_IdnOper
			;		
		END IF;
		
		IF _IN_MODE = 'CREATE.ZM.FROM.ZM' THEN
			INSERT IGNORE INTO `TE_zmpo`
			(GUID, IdnNg, IdnTowr, RecepturaGUID, Ilosc, Ilosc_Pierwotna, ilosc_na_przyszlym, zamowienieGUID, komentarz, commision_guid)
			SELECT
				tp.GUID, tp.IdnNg, tp.IdnTowr, tp.RecepturaGUID,
				tp.Ilosc, tp.Ilosc_Pierwotna, tp.ilosc_na_przyszlym,
				tp.zamowienieGUID,
				tp.komentarz, n.WyjazdGUID AS commision_guid
			FROM `t_in_zmpo` tp, `t_in_zmng` n
			WHERE
				TRUE
				AND n.GUID = tp.IdnNg
				AND tp.Ilosc > 0
			;
			INSERT IGNORE INTO `TE_zmpo`
			(GUID, IdnNg, IdnTowr, RecepturaGUID, Ilosc, Ilosc_Pierwotna, ilosc_na_przyszlym, zamowienieGUID, komentarz, commision_guid)
			SELECT
				tp.GUID, tp.IdnNg, tp.IdnTowr, tp.RecepturaGUID,
				tp.Ilosc, tp.Ilosc_Pierwotna, tp.ilosc_na_przyszlym,
				tp.zamowienieGUID,
				tp.komentarz, n.WyjazdGUID AS commision_guid
			FROM `t_in_zmpo` tp, `t_in_zmng` n
			WHERE
				TRUE
				AND n.GUID = tp.IdnNg
				AND tp.Ilosc = 0
			;							
		ELSEIF _IN_MODE = 'CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano' THEN
			INSERT IGNORE INTO `TE_zmpo`
			(GUID, IdnNg, IdnTowr, RecepturaGUID, Ilosc, Ilosc_Pierwotna, ilosc_na_przyszlym, zamowienieGUID, komentarz, commision_guid)
			SELECT
				tp.GUID, tp.IdnNg, tp.IdnTowr, tp.RecepturaGUID,
				tp.Ilosc, tp.Ilosc AS Ilosc_Pierwotna, DEFAULT(tp.ilosc_na_przyszlym) AS ilosc_na_przyszlym,
				tp.zamowienieGUID,
				tp.komentarz, DEFAULT(tp.commision_guid) AS commision_guid
			FROM `t_in_zmpo` tp, `t_in_zmng` n
			WHERE
				TRUE
				AND n.GUID = tp.IdnNg
				AND tp.Ilosc > 0
			;
			
			UPDATE `TE_zmng` n
			SET
				n.WyjazdGUID = '<DOWOZKA>',
				n.ExtFlags = _ExtFlags('ADD', n.ExtFlags, 'DOWOZKA', '', '')
			WHERE
				n.GUID = @_IdnOper
			;
			
		END IF;
		
		CALL C_HT_OPZM('PO.POST', '', 'ZM', 'TE', @_IdnOper, '', '', '', '' ,'', '');
		CALL C_HT_xxNgPo_DO('PO.CALC_LP', 'ZM', 'n:TE;p:TE', @_IdnOper, '', '', '', IF(@session.globals.Owner = 'KONKOL', '2', ''), '', '');
		CALL C_HT_OPZM('PO<-POZYCJE_CENYRABAT', '', 'ZM', 'TE', @_IdnOper, '', '', '', '' ,'', '');
		CALL C_HT_OPZM('NG.POST', '', 'ZM', 'TE', @_IdnOper, '', '', '', '' ,'', '');
		
		
		
		IF _MODE IN ('CREATE', 'NEW.APPLY') THEN
			CALL C_HT_OPZM('APPLY', '', 'ZM', 'TE', _IdnOper, '', '', '', '' ,'', '');
		END IF;

		IF _MODE IN ('NEW.EDIT.E') THEN
			--	przenosimy do świata E
			CALL C_HT_OPZM('MOVE.TO.E', '', 'ZM', 'TE', _IdnOper, '', '', '', '' ,'', '');
		END IF;
		
	END IF;	

	IF _MODE IN ('ZM.Zamknij.2.0', 'ZM.Clear.2.0') THEN
	/*************************************************************************************************************************************************
		Reedycja zamówień  
		- zamykanie Ilosc <- Zrealizowano
		CALL C_HT_TE_Proc('ZM.Zamknij.2.0', '', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		CALL C_HT_TE_Proc('ZM.Zamknij.2.0', 'ANULUJ', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		CALL C_HT_TE_Proc('ZM.Zamknij.2.0', 'Ilosc=Spakowano', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		W 
		_IN_MODE jest decyzja np 'ANULUJ'
		_Param_A	powod niezrealizowania
	*************************************************************************************************************************************************/
		
		SET _FROM = 'ZM', @_IdnOper = NULLIF(_IdnOper, ''), @_IdnNg = NULLIF(_IdnOper, ''), @Params = _Param_E;

	--	dla np. CDG _Param_A to powod_niezrealizowania
		SET 
			@.n.powod_niezrealizowania = _VarInt(
				IFNULL(
					NULLIF(_Param_A, ''), 
					IF(_IN_MODE = 'ZAMKNIĘTO', -1, IF(_IN_MODE = 'ANULUJ', -2, 0))
				)
			),	-- -1 to ZAMK/Zamknięcie zamówienia
			@.n.createdfrom_GUID = NULL
		;
		
	--	wstępne Update zm	
		CALL _ZM_Update_Realizacja('UPDATE.for.zmng', _IdnOper, '', '');
		CALL C_HT_OPZM('recreate.`TE_xxxx`', '', _FROM, 'TE', '', '' ,'', '', '', '' ,'');		
		CALL C_HT_OPZM('INIT.EDIT(CLEAR)', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('START', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		
		IF _IN_MODE = 'Ilosc=Spakowano' THEN
			UPDATE `TE_zmpo` p
			SET 
				p.Ilosc_Pierwotna = IF(p.Ilosc_Pierwotna = 0, p.ilosc, p.Ilosc_Pierwotna),
				p.ilosc = p.Spakowano
			WHERE 
				p.idnng = _IdnOper
				AND p.ilosc != p.Spakowano
			;
		ELSE
			UPDATE `TE_zmpo` p
			SET 
				p.Ilosc = GREATEST(0, IFNULL(p.Zrealizowano, 0))
			WHERE 
				p.idnng = _IdnOper
				AND p.ilosc <> p.zrealizowano
			;
			UPDATE `TE_zmng` n 
			SET 
				n.powod_niezrealizowania = (@.n.powod_niezrealizowania := 
					IFNULL(@.n.powod_niezrealizowania, n.powod_niezrealizowania)
				),
				n.createdfrom_GUID = (@.n.createdfrom_GUID := NULLIF(n.createdfrom_GUID, '')),
				/*
				n.status = 
					IF(@session.globals.Owner IN ('CDG', 'MPGK'),
						IF(_MODE != 'ANULUJ', 8, 4), 
						-- było	IF(@.n.powod_niezrealizowania = 0, 8, 4), 
						IF(_MODE != 'ANULUJ', 8, 4)
					), 
				-- n.uwagi = CONCAT(IF(_MODE != 'ANULUJ', 'ZAMKNIETO ', 'ANULOWANO '), LEFT(NOW(), 20), ' ', (n.uwagi)) 
				*/
				n.uwagi = CONCAT_WS(' ',
					IF(_IN_MODE != 'ANULUJ', 'ZAMKNIĘTO', 'ANULOWANO'), 
					LEFT(NOW(), 20), 
					n.uwagi
				) 
			WHERE 
				n.GUID = _IdnOper
			;
			/*
			UPDATE `TE_zmng` n 
			SET 
				n.status = 
					IF(@session.globals.Owner IN ('CDG', 'MPGK'),
						IF(n.powod_niezrealizowania = 0, 8, 4), 
						IF(_IN_MODE != 'ANULUJ', 8, 4)
					), 
				n.uwagi = CONCAT_WS(' / ', IF(_IN_MODE != 'ANULUJ', 'ZAMKNIETO ', 'ANULOWANO '), LEFT(NOW(), 20), ' ', (n.uwagi)) 
			WHERE 
				n.GUID = _IdnOper
			;
			*/
		END IF;
	--	Pozycje
		CALL C_HT_OPZM('PO.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
	--	Teraz juz naglowek	
		CALL C_HT_OPZM('NG.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('APPLY', '', _FROM, 'TE', _IdnOper, '', '', '', '' ,'', '');
	--	Byc moze to zamowienie dotyczy oferty (czyli realizuje oferte)
		IF @.n.createdfrom_GUID IS NOT NULL THEN
			CALL oper_Delta_Oferty_Update('update.from.zmng', '', _IdnOper, '', '', '');
		END IF;	
		
	END IF;
	
	IF _MODE IN ('ZM.Zamknij', 'ZM.Clear', 'ZM.Zmniejsz') THEN
	/*************************************************************************************************************************************************
		Reedycja zamówień  
		- zamykanie Ilosc <- Zrealizowano
		CALL C_HT_TE_Proc('ZM.Zamknij', '', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		CALL C_HT_TE_Proc('ZM.Zamknij', 'ANULUJ', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		CALL C_HT_TE_Proc('ZM.Zamknij', 'Ilosc=Spakowano', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		W 
		_IN_MODE jest decyzja np 'ANULUJ'
	*************************************************************************************************************************************************/
		
		SET _FROM = 'ZM', @_IdnOper = NULLIF(_IdnOper, ''), @_IdnNg = NULLIF(_IdnOper, ''), @Params = _Param_E;
		CALL C_HT_OPZM('INIT.EDIT(CLEAR)', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('START', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		
		IF _IN_MODE = 'Ilosc=Spakowano' THEN
			UPDATE `TE_zmpo` p
			SET 
				p.Ilosc_Pierwotna = IF(p.Ilosc_Pierwotna = 0, p.ilosc, p.Ilosc_Pierwotna),
				p.ilosc = p.Spakowano
			WHERE 
				p.idnng = _IdnOper
				AND p.ilosc != p.Spakowano
			;
		ELSE
			UPDATE `TE_zmpo` p
			SET 
				p.Ilosc = GREATEST(0, IFNULL(p.Zrealizowano, 0))
			WHERE 
				p.idnng = _IdnOper
				AND p.ilosc <> p.zrealizowano
			;
			
			UPDATE `TE_zmng` n 
			SET 
				n.status = 
					IF(@session.globals.Owner IN ('CDG', 'MPGK'),
						IF(n.powod_niezrealizowania = 0, 8, 4), 
						IF(_IN_MODE != 'ANULUJ', 8, 4)
					),
                n.Update_status = CONCAT_WS('', '<SET.Status.', _MODE,'>'), 
				n.uwagi = CONCAT_WS(' / ', IF(_IN_MODE != 'ANULUJ', 'ZAMKNIETO ', 'ANULOWANO '), LEFT(NOW(), 20), ' ', (n.uwagi)) 
			WHERE 
				n.guid = _IdnOper
			;
		END IF;
	--	Pozycje
		-- było CALL C_HT_OPZM('TE.PO.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('PO.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
	--	Teraz juz naglowek	
		-- bylo CALL C_HT_OPZM('TE.xxng.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('NG.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('APPLY', '', _FROM, 'TE', _IdnOper, '', '', '', '' ,'', '');
		CALL oper_Delta_Oferty_Update('update.from.zmng', '', _IdnOper, '', '', '');
		
	END IF;

	IF _MODE IN ('ZM.Clear+Calc') THEN
	/*************************************************************************************************************************************************
		Czyszczenie i reedycja zamówień  
		CALL C_HT_TE_Proc('ZM.Clear+Calc', '', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		W 
		_IN_MODE jest - nic????
	*************************************************************************************************************************************************/
		
		SET _FROM = 'ZM', @_IdnOper = NULLIF(_IdnOper, ''), @_IdnNg = NULLIF(_IdnOper, ''), @Params = _Param_E;
			CALL C_HT_OPZM('recreate.`TE_xxxx`', '', _FROM, 'TE', '', '', '', '', '', '', '');
			
		CALL C_HT_OPZM('INIT.EDIT(CLEAR)', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('START', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
	--	Usuń pozycje
		DELETE p FROM `TE_zmpo` p
		WHERE 
			p.idnng = _IdnOper
		;
		SET
			@.ZM.Clear.remotetime = NULLIF(_Params2('_FetchParams', @_ModeParam, @Params, 'remotetime', ''), '')
		;
		UPDATE `TE_zmng` n 
		SET 
			n.deleted = 1,
			n.remotetime = IFNULL(@.ZM.Clear.remotetime, n.remotetime)
			/*
			,
			moze użyć jakiegoś statusu??? (jmam)
			n.status = 
				IF(@session.globals.Owner IN ('CDG', 'MPGK'),
					IF(n.powod_niezrealizowania = 0, 8, 4), 
					IF(_IN_MODE != 'ANULUJ', 8, 4)
				), 
			n.uwagi = CONCAT_WS(' / ', IF(_IN_MODE != 'ANULUJ', 'ZAMKNIETO ', 'ANULOWANO '), LEFT(NOW(), 20), ' ', (n.uwagi)) 
			*/
		WHERE 
			n.guid = _IdnOper
		;
	--	Pozycje
		-- było CALL C_HT_OPZM('TE.PO.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('PO.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
	--	Teraz juz naglowek	
		-- bylo CALL C_HT_OPZM('TE.xxng.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('NG.POST', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
		CALL C_HT_OPZM('APPLY', '', _FROM, 'TE', _IdnOper, '', '', '', '' ,'', '');
		CALL oper_Delta_Oferty_Update('update.from.zmng', '', _IdnOper, '', '', '');
		
	END IF;

	IF _MODE LIKE ('ZM.Obetnij.i.klonuj.Ilosc=Ilosc-Spakowano.%') THEN
	/*************************************************************************************************************************************************
		Reedycja zamówień  
		- zamykanie Ilosc <- Zrealizowano
		CALL C_HT_TE_Proc('ZM.Obetnij.i.klonuj.Ilosc=Ilosc-Spakowano.for.IdnNg', '', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		CALL C_HT_TE_Proc('ZM.Obetnij.i.klonuj.Ilosc=Ilosc-Spakowano.for.WyjzadGUID', '', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		W 
		_Param_A jest decyzja np 'ANULUJ'
	*************************************************************************************************************************************************/
		IF _MODE IN ('ZM.Obetnij.i.klonuj.Ilosc=Ilosc-Spakowano.for.IdnNg') THEN
			SET _FROM = 'ZM', @_IdnOper = NULLIF(_IdnOper, ''), @_IdnNg = NULLIF(_IdnOper, ''), @Params = _Param_E;
			SET _IdnNg = _IdnOper;
			CALL C_HT_OPZM('recreate.`TE_xxxx`', '', _FROM, 'TE', '', '', '', '', '', '', '');
		--	1. kreuj klon z Ilosc=Ilosc-Spakowano
			CALL C_HT_TE_Proc('CREATE', 'CREATE.ZM.FROM.ZM.z.Ilosc=Ilosc-Spakowano', 'OP', '', _IdnNg, '', '', '', '' , @Params);
		--	2. zetnij oryginal z Ilosc=Spakowano
			CALL C_HT_TE_Proc('ZM.Zmniejsz', 'Ilosc=Spakowano', 'ZM', _IdnNg, '', '', '', '', '' , @Params);
		END IF;
	END IF;

	IF _MODE LIKE ('ZM.Ustaw.Ilosc=Spakowano%') THEN
	/*************************************************************************************************************************************************
		Reedycja zamówień  
		- zamykanie Ilosc <- Zrealizowano
		CALL C_HT_TE_Proc('ZM.Ustaw.Ilosc=Spakowano', '', 'ZM', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
	*************************************************************************************************************************************************/
		IF _MODE IN ('ZM.Obetnij.i.klonuj.Ilosc=Ilosc-Spakowano.for.IdnNg') THEN
			SET _FROM = 'ZM', @_IdnOper = NULLIF(_IdnOper, ''), @_IdnNg = NULLIF(_IdnOper, ''), @Params = _Param_E;
			SET _IdnNg = _IdnOper;
			CALL C_HT_OPZM('recreate.`TE_xxxx`', '', _FROM, 'TE', '', '', '', '', '', '', '');
		--	1. zetnij oryginal z Ilosc=Spakowano
			CALL C_HT_TE_Proc('ZM.Zmniejsz', 'Ilosc=Spakowano', 'ZM', _IdnNg, '', '', '', '', '' , @Params);
		END IF;
	END IF;

	IF _MODE LIKE 'ZM->FIN.%' THEN
	/*************************************************************************************************************************************************
		Do zamówień WWW
		CALL C_HT_TE_Proc('ZM->FIN.SELECT.ZM', '', 'OP', '', '', '', '', '', '' , @Params);
		Kreuj tymczasowy dok. @_IdnOper do zam. @_IdnNg
		CALL C_HT_TE_Proc('ZM->FIN.Create.Tymczasowa', '', 'OP', '', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '1' , @Params);
		Odtymczasowij dok. @_IdnOper a potem zamknij zam. @_IdnNg
		CALL C_HT_TE_Proc('ZM->FIN.Odtymczsaowij->ZAM.Zamknij', '', 'OP', '{4294B316-775B-46F1-A9B6-515E152E8B13}', '', '', '', '', '' , @Params);
		W 
		_IN_MODE jest decyzja np 'ANULUJ'
	*************************************************************************************************************************************************/
		SET 
			_FROM = 'OP', 
			@_IdnNg = _GUID, 
			@Params = _Param_E
		;
		IF _MODE = 'ZM->FIN.SELECT.ZM' THEN
			SELECT 	
				mn.GUID AS IdnNg,
				n.nrzamw, 
				n.terminrealizacji,
				n.kontrsymbol,
				n.WyjazdGUID,
				_Get_GUID_xxx('IdnOper<-IdnNg.new', n.GUID, '', '', '', '', '') AS IdnOper,
				_VarInt(1) AS Checked
			FROM `m_zmng` mn, `zmng` n
			WHERE
				TRUE
				AND n.GUID = mn.GUID
				-- AND mn.WyjazdGUID = 'SPED:5427f1334dc204e0068ec8ee513697c7' -- _WyjazdGUID
				-- na chwile AND n.TerminRealizacji >= CURRENT_DATE() 	-- '2020-06-08'
				AND n.TerminRealizacji >= '2020-06-08'
				AND n.ExtFlags LIKE '%<WWW>%'
				AND NOT EXISTS(
					SELECT
						fn.GUID
					FROM `opng` fn
					WHERE
						fn.GUID = _Get_GUID_xxx('IdnOper<-IdnNg.new', n.GUID, '', '', '', '', '')
				)
			;
			
		--	WYCHODZIMY bo to tylko select
			LEAVE SC_HT_TE_Proc;
		END IF;
		
		SET _IdnOper = IFNULL(NULLIF(_IdnOper, ''), _Get_GUID_xxx('IdnOper<-IdnNg.new', @_IdnNg, '', '', '', '', ''));
		SET
			@_IdnOper = _IdnOper,
			@Params = 
			CONCAT_WS('&', 
				@Params,
				'AutoNum=1', 
				/*
				CONCAT('KontrGUID=', n.KontrGUID), 
				CONCAT('datawystaw=', n.TerminRealizacji), 
				CONCAT('zmagazynu=', @.w.Magazyn),
				CONCAT('domagazynu=', @.w.Magazyn), 
				*/
				CONCAT('Tymczasowa=', '1'),
				'&'
			)
		;
		IF _MODE IN ('ZM->FIN.Create.Tymczasowa') THEN
		--	Kreuj tymczasowy dok. @_IdnOper do zam. @_IdnNg
			CALL C_HT_OPZM_Proc('CREATE', 'Realizacja.ZM.From.zmng', 'OP', 'TE', @_IdnOper, @_IdnNg, '', '', '', '' , @Params);
		END IF;
		
		IF _MODE IN ('ZM->FIN.Odtymczsaowij->ZAM.Zamknij') THEN
		--	odtymczasowij dok. @_IdnOper a potem zamknij zam. @_IdnNg
			CALL C_HT_TE_Proc('Set.Tymczasowa', '0', 'OP', @_IdnOper, '', '', '', '', '', @Params);	-- odtymczasowienie
		--	Teraz w `zmpo` zrealizowano juz jest > 0 i tę liczbe przepiszemy do ilości
			UPDATE `zmpo` p
			SET 
				p.Ilosc = GREATEST(0, IFNULL(p.Zrealizowano, 0))
			WHERE 
				p.idnng = @_IdnNg
				AND p.ilosc <> p.zrealizowano
			;
			CALL _ZM_Update_Realizacja('UPDATE.for.zmng', @_IdnNg, '', '');
			IF @Params LIKE '%<SEND_HOLD_OPER>%' THEN
			--	wysłanie maila z dok. fin.
				CALL com_mailer('SEND_HOLD_OPER', @_IdnOper, '', @_IdnNg, '', '');
			END IF;
			-- SELECT @_IdnOper AS IdnOper;
		END IF;
		
	END IF;
						IF 
							(_MODE IN ('Reedit') AND (_IN_MODE LIKE 'Init.`t_in_xxng`' OR (_IN_MODE = 'Init.t_in_xxng_bez'))) 
							OR
							(_MODE = 'Init.`t_in_xxng`')
						THEN
							DROP TEMPORARY TABLE IF EXISTS `t_in_xxng`;
							CREATE TEMPORARY TABLE IF NOT EXISTS `t_in_xxng` (`GUID` VARCHAR(38), `DONE` INTEGER DEFAULT FALSE, PRIMARY KEY GUID(GUID));
						END IF;
						
						IF 
							
							(_MODE IN ('Reedit') AND _IN_MODE LIKE 'Final.`t_in_xxng`')
							OR
							(_MODE = 'Final.`t_in_xxng`')
						THEN
							DROP TEMPORARY TABLE IF EXISTS `t_in_xxng`;
						END IF;
						
	IF _MODE LIKE ('Set.Tymczasowa%') THEN
	/*************************************************************************************************************************************************
		CALL C_HT_TE_Proc('Set.Tymczasowa', '0', _FROM, _Key, '', '', '', '', '', _Param_E);	-- odtymczasowienie
		CALL C_HT_TE_Proc('Set.Tymczasowa', '1', _FROM, _Key, '', '', '', '', '', _Param_E);	-- zatymczasowienie
		Set.Tymczasowa=1 czyli Tymczasowa = 1 lub Set.Tymczasowa=0 Tymczasowa = 0
		w _IN_MODE  jest 0 lub 1
		w _Param_E 'Clear_Star_Numbers=1'
	*************************************************************************************************************************************************/
		CALL oper_Delta_Tools('OP.Set.Tymczasowa=', _IdnOper, _IN_MODE, '', '', '', ''); 
		IF _Param_E LIKE '%Clear_Star_Numbers%' THEN
			CALL C_HT_xxNgPo_DO('NG<-Numeracja', _FROM, 'n:;p:', _IdnOper, '', '', '', '', '', _Param_E);
		END IF;
		-- SELECT '' AS ErrMsg;
	END IF;
	
	IF _MODE IN ('Reedit') THEN
	/*************************************************************************************************************************************************
		Reedycja operacji/zamówień 
	*************************************************************************************************************************************************/

		IF (_IN_MODE = 'from.`t_in_xxng`' OR _IN_MODE = 'from.t_in_xxng_bez') THEN
		/*************************************************************************************************************************************************
			Reedycja operacji/zamówień PETLA po tabeli `t_in_xxng`
			CALL C_HT_TE_Proc('Reedit', 'from.`t_in_xxng`', 'OP', '', '', '', '', '', '', @Params);
		*************************************************************************************************************************************************/
		--	Wołamy MODE który jest ponizej ten traci sens
			CALL C_HT_TE_Proc('Reedit.Execute', 'Reedit', _FROM, '', '', _Param_A,_Param_B, _Param_C, _Param_D, _Param_E);

			LEAVE SC_HT_TE_Proc;
		END IF;
		
		IF _IN_MODE IN ('', 'one.rec') THEN
		/*************************************************************************************************************************************************
			Reedycja operacji/zamówień 1 rekordu
			CALL C_HT_TE_Proc('Reedit', '', 'OP', IdnOper, GUID, '', '', '', '', @Params);
			przykład na @Params
				gdy zawiera sekwencję 
					calc_ver
				to przepisuje wszystkim pozycjom calc_ver
					Dont_touch_poz
				to wtedy w ogóle nie tyka pozycji (w tym cen)
					Ceny
				to o ile nie ma Dont_touch_poz to ustawia na nowo ceny w pozycjach
		*************************************************************************************************************************************************/
			SET @Params = IFNULL(_Param_E, '');
		--	Wołamy MODE który jest ponizej ten traci sens
			CALL C_HT_TE_Proc('Reedit.1.rec', '', _FROM, _IdnOper, '', _Param_A,_Param_B, _Param_C, _Param_D, _Param_E);
			LEAVE SC_HT_TE_Proc;
		END IF;
		
	END IF;
	
	
	
	
	IF _MODE IN ('FOR.`t_in_xxng`.DO', 'DO.FOR.`t_in_xxng`') THEN
	/*************************************************************************************************************************************************
		NIGDZIE NIE WOLANA
	*************************************************************************************************************************************************/
		LEAVE SC_HT_TE_Proc;
	END IF;
	

	IF _MODE LIKE 'Reedit.%' THEN
	/*************************************************************************************************************************************************
		Najnowsza odsłona reedycji z tabeli `t_in_xxng`
		Uwaga
		_MODE LIKE 'Reedit.xxng% ten mode wychodzi z uzytku byl chwilowy ale ze za dlugi wykorzystujemy teraz Reedit.????
		CALL C_HT_TE_Proc('Reedit.Init', '', '', '', '', '', '', '', '', '');	
		CALL C_HT_TE_Proc('Reedit.Execute', '0', _FROM, _Key, '', '', '', '', '', _Param_E);	
		CALL C_HT_TE_Proc('Reedit.Final', '', '', '', '', '', '', '', '', '');	
		UWAGA w _IN_MODE mamy np '' lub 'Reedit' domyslnie ale moze byc 'Set.Tymczasowa=0' lub 'Set.Tymczasowa=1' a moze i inne w przyszlosci?
	*************************************************************************************************************************************************/
		
		IF _MODE IN ('Reedit.Init', 'Reedit.xxng.Init', 'Reedit.xxng.Init.`t_in_xxng`') THEN
			CALL C_HT_TE_Proc('Init.`t_in_xxng`', '', '', '', '', '', '', '', '', '');
		END IF;
		
		IF _MODE IN ('Reedit.Final', 'Reedit.xxng.Final', 'Reedit.xxng.Final.`t_in_xxng`') THEN
			CALL C_HT_TE_Proc('Final.`t_in_xxng`', '', '', '', '', '', '', '', '', '');
		END IF;
		
		IF _MODE IN ('Reedit.Execute', 'Reedit.Exe', 'Reedit.xxng.Execute', 'Reedit.xxng.Exe') THEN
			SET @Q = CONCAT_WS('/', @Q := null, 'pocz');
			SET @_tools_t_in_xxng = 0;
		--	przenosimy do świata TE
			CALL C_HT_OPZM('recreate.`TE_xxxx`', '', _FROM, 'TE', '', '', '', '', '', '', '');
			SET _Limit = IF(IFNULL(_Param_A, '') <> '', _Param_A, 1000);
			SET @Q = CONCAT_WS('/', @Q, _Limit);
			BEGIN
			-- Operacje np. magazynowe
				DECLARE done BOOL DEFAULT FALSE;
				DECLARE _curr_GUID VARCHAR(38);
			--	3.1 Kursor	
				DECLARE c_tools_t_in_xxng CURSOR FOR
					SELECT
						t.GUID
					FROM `t_in_xxng` t
					WHERE
						t.DONE = 0
					LIMIT _Limit
				;	
				DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			--	3.2 Open Kursor	
				OPEN c_tools_t_in_xxng;
				loop_c_tools_t_in_xxng: LOOP
					FETCH c_tools_t_in_xxng INTO 
						_curr_GUID
					;
					IF done THEN
						LEAVE loop_c_tools_t_in_xxng;
					END IF;
								SET @_tools_t_in_xxng = @_tools_t_in_xxng + 1;
				--	Wykonaj ....
					IF _IN_MODE IN ('Reedit', '') THEN
					--	Reedycja 1 rekordu
						CALL C_HT_TE_Proc('Reedit.1.rec', _IN_MODE, _FROM, _curr_GUID, '', '', '', '', '', _Param_E);
					ELSEIF _IN_MODE LIKE 'Set.Tymczasowa%' THEN
						CALL C_HT_TE_Proc('Set.Tymczasowa', IF(_IN_MODE = 'Set.Tymczasowa=0', '0', '1'), _FROM, _curr_GUID, '', '', '', '', '', _Param_E);
					END IF;
					UPDATE `t_in_xxng` t SET t.DONE = 1 WHERE t.GUID = _curr_GUID;
				END LOOP;
				CLOSE c_tools_t_in_xxng;
			END;
			LEAVE SC_HT_TE_Proc;			
		END IF;
		
		IF _MODE IN ('Reedit.1.rec', 'Reedit.xxng.1.rec') THEN
			SET @Params = IFNULL(_Param_E, '');
			SET @Params1 = IFNULL(_Param_E, '');	--	do testow
			SET @Q = CONCAT_WS('/', @Q, _IdnOper);
			-- LEAVE SC_HT_TE_Proc;
			-- na wszelki wypadek !!!! bo ponowne wywolanie tej samej operacji nie zmienia vat i sa zdziwienia
			DROP TEMPORARY TABLE IF EXISTS `t_xxng_vat_INF`;
set @.debug = concat_WS(' / ', @.debug, 'INIT');
			CALL C_HT_OPZM('INIT.EDIT(CLEAR)', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
set @.debug = concat_WS(' / ', @.debug, 'START');
			CALL C_HT_OPZM('START', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
set @.debug = concat_WS(' / ', @.debug, 'po START');
			IF @Params LIKE '%calc_ver%' THEN
				IF _FROM = 'OP' THEN
					UPDATE TE_oppo p, TE_opng n
					SET p.calc_ver = n.calc_ver
					WHERE
						p.IdnOper = _IdnOper
						AND
						n.GUID = p.idnOper
					;
				ELSE
					UPDATE TE_zmpo p, TE_zmng n
					SET p.calc_ver = n.calc_ver
					WHERE
						p.IdnNg = _IdnOper
						AND
						n.GUID = p.IdnNg
					;
				END IF;
			END IF;
			/*
			w @Params może byc także
				(NG<-Kontrah)
				(NG->PO)
				(TowrNg->PO)
				(<-Ceny)
			
			*/
			
			
			-- SET @_Dont_touch_poz = IFNULL((@Params LIKE '%Dont_touch_poz%'), FALSE);
			SET @_Dont_touch_poz = null; -- zmienna ta ustawiona bedzie zaraz w ponizszum callu 
set @.debug = concat_WS(' / ', @.debug, 'REEDIT.Prepare');
			CALL C_HT_xxNgPo_DO('REEDIT.Prepare', _FROM, 'TE', _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, @Params);
			IF NOT @_Dont_touch_poz THEN
			--	Pozycje tez mozna naliczyc a nie tylko naglowek
				CALL C_HT_xxNgPo_DO('PO.POST', _FROM, 'TE', _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @Params);
				IF @Params LIKE '%Ceny%' THEN
					CALL C_HT_OPZM('TE.xxpo<-POZYCJE_CENYRABAT', '', _FROM, 'TE', _IdnOper, '', '', '', '', '' , @Params);
				END IF;
			END IF;
		--	Teraz juz naglowek	
			IF @Params LIKE '%NG<-DEFAULT%' THEN
			--	moze jest taka flaja - wewnatrz przypisdze tez kontrahenta
				CALL C_HT_xxNgPo_DO('NG<-DEFAULT', _FROM, 'TE', _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @Params);
			ELSE
			--	przynajmnie zadbaj o kontrahenta jest byl w extflags
				CALL C_HT_xxNgPo_DO('NG<-Kontrah', _FROM, 'TE', _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @Params);
			END IF;
			
set @.debug = concat_WS(' / ', @.debug, 'NG.POST');
			CALL C_HT_xxNgPo_DO('NG.POST', _FROM, 'TE', _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @Params);
			CALL C_HT_OPZM('APPLY', '', _FROM, 'TE', _IdnOper, '', '', '', '' ,'', '');
		
			LEAVE SC_HT_TE_Proc;
			
		END IF;
	
	END IF;
	
END$$


DELIMITER ;

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

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/

/*  Zmiany CVS
$Log$
*/

