 DELIMITER $$

/* ************************************************************************************************************************************************************************
	Narzędzia do klonowania
************************************************************************************************************************************************************************ */	


DROP PROCEDURE IF EXISTS `C_HT_CloneTools`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `C_HT_CloneTools`(
	IN _MODE VARCHAR(200),
	IN _SRC_GUID VARCHAR(50),
	IN _DEST_GUID VARCHAR(50),
	IN _Params TEXT,
	IN _ParamA VARCHAR(250),
	IN _ParamB VARCHAR(250),
	IN _ParamC VARCHAR(250)
)
/*
Kreuje z tabelki `t_clone_cnf`
CALL C_HT_CloneTools('ZM.ZM', 'IM_2017-03-11_392457', 'Dest_1', '', '', '', '');

*/

S_C_HT_CloneTools: BEGIN
DECLARE _GUID, _KontrGuid VARCHAR(38);
DECLARE _V255, _ModeParam VARCHAR(255);
DECLARE CPzPW INTEGER;
DECLARE _NrMag INTEGER;
DECLARE _Mag, _Calc_ver INTEGER;
DECLARE _Kancel BOOLEAN;

DECLARE _Ile INTEGER;

	IF (_MODE LIKE 'ZM.%') OR (_MODE LIKE 'OP.%') THEN
	/* *************************************************************************************************************************************************************
		KLONOWANIE
			CALL C_HT_CloneTools('OP.2.OP', 'Src', 'Dest_1', '', '', '', '');
			...
			CALL C_HT_CloneTools('ZM.2.ZM', 'IM_2017-03-13_56145811', 'Dest_1', '', '', '', '');
			CALL C_HT_CloneTools('ZM.ZMZP.2.ZMDD', 'IM_2017-03-13_56145811', 'Dest_1', '', '', '', '');
			CALL C_HT_CloneTools('ZM.ZMZP.2.ZMZA', 'IM_2017-03-13_56145811', 'Dest_1', '', '', '', '');
			Z wyborem pozycjiprzygotowanie checkowni
			CALL C_HT_CloneTools('ZM.2.ZM.SELECT.POZ.PREPARE', 'HCa74d5d69-5c24-11ed-94d8-5254000078b4', '', 'Rodzaj=91', '', '', '');
			Sklonowanie zaznaczonych
			CALL C_HT_CloneTools('ZM.2.ZM.SELECT.POZ.APPLY', 'HCa74d5d69-5c24-11ed-94d8-5254000078b4', '', 'Rodzaj=91', '', '', '');
			Czyszczenie
			CALL C_HT_CloneTools('ZM.2.ZM.SELECT.POZ.CLEAN', 'HCa74d5d69-5c24-11ed-94d8-5254000078b4', '', 'Rodzaj=91', '', '', '');
			
	**************************************************************************************************************************************************************/
		SET 
			@.CLONE_MODE = _MODE	--	!!!!!!!!!!!!!!! TO JEST NAJWAZNIEJSZA ZMIENNA
		;
		IF @_handle_UserGUID IS NULL THEN
			CALL _Get_Actual_handle_rec_User_Params('', @SYSTEM.Client.Session.GUID, @_handle_UserGUID, @_handle_UserLogin, @_handle_UserUgrpGUID, '', '', '', '', '');
		END IF;
		
		
		IF _MODE LIKE '%.SELECT.POZ%' THEN
			IF _MODE LIKE '%.PREPARE' THEN
			
				CALL _Session_Refresh_Variables('', '', '');
				CALL C_HT_CloneTools('DO.SELECT.CLEAN', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
				CALL C_HT_CloneTools('DO.INIT', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
				CALL C_HT_CloneTools('DO.SELECT.PO', _SRC_GUID, @.DEST.GUID, _Params, _ParamA, _ParamB, _ParamC);
			
				
			END IF;
		
			IF _MODE LIKE '%.APPLY' THEN
		
				CALL _Session_Refresh_Variables('', '', '');
				CALL C_HT_CloneTools('DO.INIT', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
				CALL C_HT_CloneTools('DO.Prepare.NG', _SRC_GUID, @.DEST.GUID, _Params, _ParamA, _ParamB, _ParamC);
				CALL C_HT_CloneTools('DO.Prepare.PO', _SRC_GUID, @.DEST.GUID, _Params, _ParamA, _ParamB, _ParamC);
				CALL C_HT_CloneTools('DO.Prepare.VAT', _SRC_GUID, @.DEST.GUID, _Params, _ParamA, _ParamB, _ParamC);
				CALL C_HT_CloneTools('DO.Apply', _SRC_GUID, @.DEST.GUID, _Params, _ParamA, _ParamB, _ParamC);
			
				SELECT CONCAT('Liczba Sklonowanych pozycji: ', @checked) AS MSG;

			END IF;
		
			IF _MODE LIKE '%.CLEAN' THEN
		
				CALL C_HT_CloneTools('DO.SELECT.CLEAN', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
		
			END IF;
	
		ELSE
	
			CALL _Session_Refresh_Variables('', '', '');
			CALL C_HT_CloneTools('DO.INIT', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
			CALL C_HT_CloneTools('DO.Prepare.NG', _SRC_GUID, @.DEST.GUID, _Params, _ParamA, _ParamB, _ParamC);
			CALL C_HT_CloneTools('DO.Prepare.PO', _SRC_GUID, @.DEST.GUID, _Params, _ParamA, _ParamB, _ParamC);
			CALL C_HT_CloneTools('DO.Prepare.VAT', _SRC_GUID, @.DEST.GUID, _Params, _ParamA, _ParamB, _ParamC);
			CALL C_HT_CloneTools('DO.Apply', _SRC_GUID, @.DEST.GUID, _Params, _ParamA, _ParamB, _ParamC);
		
		END IF;
	END IF;
	
	
	
	

	IF _MODE LIKE 'DO.%' THEN	
	/* *************************************************************************************************************************************************************
		MODY Techniczne wolane wewnetrznie
	**************************************************************************************************************************************************************/
				
				IF _MODE = 'DO.SELECT.CLEAN' THEN
					SET @checked=0;
					DROP TEMPORARY TABLE IF EXISTS t_zmpo_select;
					DROP TEMPORARY TABLE IF EXISTS t_oppo_select;
				END IF;
				
				
				
			
				IF _MODE = 'DO.INIT' THEN	
					SET
						@.CLON.ERR = 0,
						@.CLON.ERR_msg = '',
						_ModeParam = IF(LOCATE('<#', _Params) > 0, '<>', '')
					;
					IF @.CLONE_MODE LIKE 'OP.%' THEN
						SET
							@.SRC.TableName = 'opng',
							@.DEST.TableName = 'opng'
						;
					ELSE
						SET
							@.SRC.TableName = 'zmng',
							@.DEST.TableName = 'zmng'
						;
					END IF;
					SET 
						@_ModeParam = _ModeParam, 
						@_Params = _Params
					;
					SET
						-- @.DEST.GUID = IF(IFNULL(_Param_A, '') = '', UUID(), _Param_A),
						-- @.DEST.osobaGUID = _FetchParams(_ModeParam, _Params, '<OsobaGUID>', '<#OsobaGUID>'),
						@.SRC.GUID = _SRC_GUID,
						@.DEST.GUID = IF(IFNULL(_DEST_GUID, '') != '', _DEST_GUID, CONCAT('HC', UUID())),
						@.DEST.KontrGUID = IFNULL(_FetchParams(_ModeParam, _Params, 'KontrGUID', ''), ''),
						@.DEST.Rodzaj = NULLIF(_FetchParams(_ModeParam, _Params, 'Rodzaj', ''), ''),
						@.DEST.Rodzaj_typ = NULLIF(_FetchParams(_ModeParam, _Params, 'Rodzaj_typ', ''), ''),
						@.DEST.Tymczasowa = NULLIF(_FetchParams(_ModeParam, _Params, 'Tymczasowa', ''), ''),
						@.DEST.terminrealizacji = DATE(_VarStr(NULLIF(_FetchParams(_ModeParam, _Params, 'terminrealizacji', ''), ''))),
						@.DEST.datawystaw = DATE(_VarStr(NULLIF(_FetchParams(_ModeParam, _Params, 'datawystaw', ''), ''))),
						@.DEST.Kancel = NULLIF(_FetchParams(_ModeParam, _Params, 'Kancel', ''), ''),
						@.DEST.Oryginalne_Uwagi = NULLIF(_FetchParams(_ModeParam, _Params, 'Oryginalne_Uwagi', ''), ''),
						@.DEST.IS_Rozrachunek = NULLIF(_FetchParams(_ModeParam, _Params, 'IS_Rozrachunek', ''), ''),
						@.DEST.IS_GUID_Dostawy = NULLIF(_FetchParams(_ModeParam, _Params, 'IS_GUID_Dostawy', ''), ''),
						@.DEST.IsStorno = NULLIF(_FetchParams(_ModeParam, _Params, 'IsStorno', ''), ''),
						@.DEST.adr_link.RESET = NULLIF(_FetchParams(_ModeParam, _Params, 'adr_link.RESET', ''), ''),
						@.DEST.Allways.calc_ver.3 = NULLIF(_FetchParams(_ModeParam, _Params, 'Allways.calc_ver.3', ''), ''),
						@.DEST.domagazynu = _VarInt(NULLIF(_FetchParams(_ModeParam, _Params, 'domagazynu', ''), '')),
						@.DEST.zmagazynu = _VarInt(NULLIF(_FetchParams(_ModeParam, _Params, 'zmagazynu', ''), '')),
						@.DEST.idnmagazyn = _VarInt(NULLIF(_FetchParams(_ModeParam, _Params, 'idnmagazyn', ''), '')),
						@.DEST.magazynwys = _VarInt(NULLIF(_FetchParams(_ModeParam, _Params, 'magazynwys', ''), '')),

						@.DEST.info5 = NULLIF(_FetchParams(_ModeParam, _Params, 'info5', ''), ''),
						@.DEST.ugrpguid = NULLIF(_FetchParams(_ModeParam, _Params, 'ugrpguid', ''), ''),
						
						@.DEST.UPDATE_zamowienieGUID = NULLIF(_FetchParams(_ModeParam, _Params, 'UPDATE_zamowienieGUID', ''), ''),
						@.DEST.Zapotrzebowanie_Powiazane = NULLIF(_FetchParams(_ModeParam, _Params, 'Zapotrzebowanie_Powiazane', ''), ''),
						@.DEST.UPDATE_KatCol_from_kontrah = NULLIF(_FetchParams(_ModeParam, _Params, 'UPDATE_KatCol_from_kontrah', ''), ''),
						@.DEST.Vat_Fixed = NULLIF(_FetchParams(_ModeParam, _Params, 'Vat_Fixed', ''), '')
					;
					
					SET
						@.DEST.Kancel = IFNULL(@.DEST.Kancel, FALSE),
						@.DEST.Oryginalne_Uwagi = IFNULL(@.DEST.Oryginalne_Uwagi, FALSE),
						@.DEST.IS_GUID_Dostawy = IFNULL(@.DEST.IS_GUID_Dostawy, FALSE),
						@.DEST.adr_link.RESET = IFNULL(@.DEST.adr_link.RESET, FALSE),
						@.DEST.Allways.calc_ver.3 = IFNULL(@.DEST.Allways.calc_ver.3, FALSE)
					;
					IF (IFNULL(@.DEST.KontrGUID, '') <> '') AND NOT EXISTS(SELECT k.GUID FROM `kontrah` k WHERE k.guid = @.DEST.KontrGUID) THEN
						SET
							@.CLON.ERR = TRUE,
							@.CLON.ERR_msg = CONCAT('Nie znaleziono kontrahenta: "', @.DEST.KontrGUID, '"')
						;
						SELECT @.CLON.ERR_msg AS info, @.CLON.ERR;
						LEAVE S_C_HT_CloneTools;
						
					END IF;

					IF @session.globals.DOC_with_AdrLink IS NULL THEN
						CALL _Globals_Get('DOC_with_AdrLink', @session.globals.DOC_with_AdrLink, FALSE);
					END IF;

				--	Specyficzny kod dla ...
					IF @.DEST.TableName = 'zmng' THEN
					--	ZAMOWIEN
						CALL C_HT_CloneTools('DO.INIT.ZM', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					ELSE
					--	OPERACJI
						CALL C_HT_CloneTools('DO.INIT.OP', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					END IF;
					
				--	Ustaw docelowe parametry z OperDOC !!!!!!!!!!!!!	
					SELECT 
						od.Magtyp, od.Nazwa, od.Grupa, od.rv_id, od.RodzajDowodu, od.antyrodzaj, 
						od.twtyp, od.rztyp, od.fntyp, od.IsRozrachunek, 
						od.IsPozycjeVisible, od.MA_Magzyny, od.MA_Detale, od.MA_Kontrahenta, od.IsKorekta, od.IsPodlegaVAT, od.IsSprzedazNieKrajowa, 
						od.IsDostawa, od.IsWlasny
                    INTO
						@.DEST.Magtyp, @.DEST.Rodzaj.Nazwa, @.DEST.grupaoper, @.DEST.rv_id, @.DEST.RodzajDowodu, @.DEST.antyrodzaj,
						@.DEST.twtyp, @.DEST.rztyp, @.DEST.fntyp, @.DEST.IsRozrachunek,
						@.DEST.IsPozycjeVisible, @.DEST.MA_Magzyny, @.DEST.MA_Detale, @.DEST.MA_Kontrahenta, @.DEST.IsKorekta, @.DEST.IsPodlegaVAT, @.DEST.IsSprzedazNieKrajowa,
						@.DEST.IsDostawa, @.DEST.IsWlasny
					FROM `operdoc` od
					WHERE
						od.Rodzaj = @.DEST.Rodzaj
					;
					
				--	Specyficzny kod dla ...
					IF @.DEST.TableName = 'zmng' THEN
					--	ZAMOWIEN
						DROP TABLE IF EXISTS `t_zmng`;
						DROP TABLE IF EXISTS `t_zmpo`;
					ELSE
					--	OPERACJI
						DROP TABLE IF EXISTS `t_opng`;
						DROP TABLE IF EXISTS `t_oppo`;
						SET @.DEST.IsRozrachunek = IFNULL(@.DEST.IS_Rozrachunek, @.DEST.IsRozrachunek);
					END IF;
				--	Tabelka VAT	
					DROP TABLE IF EXISTS `t_ng_vat`;

				END IF;	 -- IF _MODE = 'create.t_clone_cnf' THEN	
				
				IF _MODE = 'DO.INIT.SELECT.@' THEN	
						SELECT
							'CLONE',
							@_SRCGUID AS SRCGUID,
							@.DEST.TableName,
							@_Dest_GUID AS Dest_GUID,
							_VarInt(@.DEST.Rodzaj) AS Rodzaj,
							_VarInt(@.DEST.Rodzaj_typ) AS rodzaj_typ,
							@_Dest_KontrGuid AS Dest_KontrGuid,
							_VarInt(@.DEST.Tymczasowa) AS Tymczasowa,
							DATE(@.DEST.terminrealizacji) AS terminrealizacji,
							DATE(@.DEST.datawystaw) AS datawystaw,
							@.DEST.Kancel AS Kancel,
							@.DEST.Oryginalne_Uwagi AS Oryginalne_Uwagi,
							@.DEST.IS_Rozrachunek AS IS_Rozrachunek,

							@.DEST.IS_GUID_Dostawy AS IS_GUID_Dostawy,
							@.DEST.IsStorno AS IsStorno,
							_VarInt(@.DEST.domagazynu) AS domagazynu,
							_VarInt(@.DEST.zmagazynu) AS zmagazynu,
							_VarInt(@.DEST.idnmagazyn) AS idnmagazyn,
							_VarInt(@.DEST.magazynwys) AS magazynwys,
							@.DEST.UPDATE_zamowienieGUID AS UPDATE_zamowienieGUID,
							@.DEST.UPDATE_KatCol_from_kontrah AS UPDATE_KatCol_from_kontrah,
							@.DEST.Zapotrzebowanie_Powiazane AS Zapotrzebowanie_Powiazane,
							@.DEST.Vat_Fixed AS Vat_Fixed,
							
							FALSE AS cnf_err,
							'' AS cnf_err_msg,
							TRUE AS cnf_return_err_msg,
							FALSE AS KontrGuid_Exists
					;	
				
				END IF;

				IF _MODE = 'DO.Prepare.NG' THEN
				--	Wyjdz gdy Err
					IF @.CLON.ERR THEN LEAVE S_C_HT_CloneTools; END IF;
				--	Tworzenie Temp dla ...
					IF @.DEST.TableName = 'zmng' THEN
					--	ZAMOWIEN
						CREATE TEMPORARY TABLE `t_zmng` 
							SELECT n.* FROM `zmng` n WHERE n.guid = @.SRC.GUID
						;
						SELECT 
							t.Rodzaj, 
							t.KontrGUID,
							t.PlatnikGUID,
							t.AreaGUID,
							t.IdnMagazyn,
							t.MagazynWys
                        INTO
							@.SRC.Rodzaj,
							@.SRC.KontrGUID,
							@.SRC.PlatnikGUID,
							@.SRC.AreaGUID,
							@.SRC.IdnMagazyn,
							@.SRC.MagazynWys
						FROM `t_zmng` t
						;
					ELSE
					--	OPERACJI
						CREATE TEMPORARY TABLE `t_opng` 
							SELECT n.* FROM `opng` n WHERE n.guid = @.SRC.GUID
						;
						SELECT 
							t.Rodzaj, 
							t.KontrGUID,
							t.PlatnikGUID,
							t.AreaGUID,
							t.ZMagazynu,
							t.DoMagazynu,
							t.Brutto
                        INTO
							@.SRC.Rodzaj,
							@.SRC.KontrGUID,
							@.SRC.PlatnikGUID,
							@.SRC.AreaGUID,
							@.SRC.ZMagazynu,
							@.SRC.DoMagazynu,
							@.SRC.Brutto
						FROM `t_opng` t
						;
						SET @.DEST.Magazyny.Changed = 
							@.DEST.MA_Magzyny AND
							(
								(IFNULL(@.DEST.ZMagazynu, @.SRC.ZMagazynu) <> @.SRC.ZMagazynu) OR
								(IFNULL(@.DEST.DoMagazynu, @.SRC.DoMagazynu) <> @.SRC.DoMagazynu)
							);
						IF @.DEST.Magazyny.Changed THEN
							IF (@.DEST.MagTyp = @ht.mtRZ) THEN
								SET @.DEST.ZMagazynu = GREATEST(@.DEST.ZMagazynu, @.SRC.DoMagazynu);
								SET @.DEST.DoMagazynu = 0;
							ELSEIF (@ht.doc.MagTyp = @ht.mtPZ) THEN
								SET @.DEST.DoMagazynu = GREATEST(@.DEST.ZMagazynu, @.SRC.DoMagazynu);
								SET @.DEST.ZMagazynu = 0;
							END IF;	
						END IF;	
					--	Ustal wielk. rozrachunkowe	
						IF @.DEST.IsRozrachunek THEN
						--	@ht.doc.IsRozrachunek
							CALL rozrach_rodzaj_calc(@.DEST.Rodzaj, 0, @.SRC.Brutto);
						END IF;
					END IF;
					
					SELECT 
						od.Magtyp, od.Nazwa
                    INTO
						@.SRC.Magtyp, @.SRC.Rodzaj.Nazwa
					FROM `operdoc` od
					WHERE
						od.Rodzaj = @.SRC.Rodzaj
					;
					
					
					IF (@.DEST.KontrGUID <> '') THEN	
						SET 
							@.DEST.KontrGUID.Changed = (@.DEST.KontrGUID != @.SRC.KontrGUID)
						;
					ELSE
						SET 
							@.DEST.KontrGUID.Changed = FALSE,
							@.DEST.KontrGUID = @.SRC.KontrGUID
						;
					END IF;
					
					IF @.DEST.KontrGUID.Changed THEN
					--	Gdy sie zmienil to zawsze 1 ale gdy nie... to zostaw taki jaki byl w parametrach
						SET @.DEST.adr_link.RESET = 1;
					END IF;
					
				--	Specyficzny kod dla ...
					IF @.DEST.TableName = 'zmng' THEN
					--	ZAMOWIEN
						CALL C_HT_CloneTools('DO.Prepare.NG.ZM', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					ELSE
					--	OPERACJI
						CALL C_HT_CloneTools('DO.Prepare.NG.OP', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					END IF;
					
				END IF;
				
				
				IF _MODE = 'DO.SELECT.PO' THEN
				
					IF @.CLON.ERR THEN LEAVE S_C_HT_CloneTools; END IF;
					IF @.DEST.TableName = 'zmng' THEN
						CALL C_HT_CloneTools('DO.SELECT.PO.ZM', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					ELSE
						CALL C_HT_CloneTools('DO.SELECT.PO.OP', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					END IF;
				END IF;
				
				IF _MODE = 'DO.Prepare.PO' THEN
				--	Wyjdz gdy Err
					IF @.CLON.ERR THEN LEAVE S_C_HT_CloneTools; END IF;
				--	Tworzenie Temp dla i 
				--	Specyficzny kod dla ...
					IF @.DEST.TableName = 'zmng' THEN
					--	ZAMOWIEN
						CALL C_HT_CloneTools('DO.Prepare.PO.ZM', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					ELSE
					--	OPERACJI
						CALL C_HT_CloneTools('DO.Prepare.PO.OP', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					END IF;
				END IF;

				IF _MODE = 'DO.Prepare.VAT' THEN
					IF @.DEST.TableName = 'zmng' THEN
					--	ZAMOWIEN
						CREATE TEMPORARY TABLE `t_ng_vat`
							SELECT * FROM `zmng_vat` 
							WHERE idnoper = _SRC_GUID
						;
					ELSE
					--	OPERACJI
						CREATE TEMPORARY TABLE `t_ng_vat`
							SELECT * FROM `opng_vat` 
							WHERE idnoper = _SRC_GUID
						;
					END IF;

				END IF;
				
				IF _MODE = 'DO.APPLY' THEN
					IF @.CLON.ERR THEN LEAVE S_C_HT_CloneTools; END IF;
					
				--	VAT ...
					UPDATE `t_ng_vat` t SET t.idnoper = @.DEST.GUID;

					IF IFNULL(@.DEST.IsStorno, FALSE) THEN
						UPDATE `t_ng_vat` 
						SET 
							Netto=-Netto, Vat=-Vat, Brutto=-Brutto, 
							NettoWal=-NettoWal, VatWal=-VatWal, BruttWal=-BruttoWal
						;
					END IF;
					IF @.DEST.Vat_Fixed THEN
						UPDATE `t_ng_vat` 
						SET 
							FIXED = 1 
						WHERE 
							netto <> 0 OR brutto <> 0
						; 	
					END IF;
					
				--	Specyficzny kod dla ...
					IF @.DEST.TableName = 'zmng' THEN
					--	ZAMOWIEN
						CALL C_HT_CloneTools('DO.Apply.ZM', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					ELSE
					--	OPERACJI
						CALL C_HT_CloneTools('DO.Apply.OP', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
					END IF;
					
					IF @.CLON.ERR THEN LEAVE S_C_HT_CloneTools; END IF;
					

				--	Adresy
					CALL C_HT_CloneTools('DO.Apply.ADDR', _SRC_GUID, _DEST_GUID, _Params, _ParamA, _ParamB, _ParamC);
				END IF;

								
		IF _MODE LIKE 'DO.%.ZM' THEN							
		/* *************************************************************************************************************************************************************
			ZAMOWIENIA
		**************************************************************************************************************************************************************/
		
			IF _MODE = 'DO.INIT.ZM' THEN
			/* *************************************************************************************************************************************************************
				INICJACJA - ZAMOWIENIA
			**************************************************************************************************************************************************************/
				IF @.CLONE_MODE = 'ZM.ZMZP.2.ZMDD' THEN
					SET
						@.DEST.Rodzaj = 28,
						@.DEST.Zapotrzebowanie_Powiazane = TRUE
					;
					IF @session.globals.Owner = 'PBUCH' THEN
						SET @.DEST.UPDATE_zamowienieGUID = TRUE;
					END IF;
				ELSEIF @.CLONE_MODE = 'ZM.ZMZP.2.ZMZA' THEN
					SET
						@.DEST.Rodzaj = 108,
						@.DEST.UPDATE_zamowienieGUID = TRUE,
						@.DEST.Zapotrzebowanie_Powiazane = TRUE
					;
					-- !!!!!!!!!!!!UWAGA!!!!!!!!!! 
					IF @session.globals.Owner = 'HYDROMEGA_zablokowane_mail_20150304_RG' THEN
						SET @.DEST.UPDATE_zamowienieGUID = FALSE;
					END IF;
				ELSEIF @.CLONE_MODE = 'ZM.ZAOF.2.ZMDD' THEN
					--	np. Simex z notatnika zapotrzeb. budowane jest zapyt. ofertowe ZAOF a potem zniego budowane ZMDD (klon)
					SET
						@.DEST.Rodzaj = 28,
						@.DEST.UPDATE_zamowienieGUID = TRUE
					;
				END IF;
				
				IF @session.globals.Owner = 'TRANSBUD' THEN
					SET @.DEST.UPDATE_KatCol_from_kontrah = '1', @.DEST.Oryginalne_Uwagi = TRUE;
				--	zawsze tworz nowe adresy w adr_link	
					SET 
						@.DEST.idnmagazyn = 1,
						@.DEST.magazynwys = 1,
						@.DEST.adr_link.RESET = TRUE,
						@.DEST.Allways.calc_ver.3 = TRUE,
						@.DEST.terminrealizacji = CURRENT_DATE(),
						@.DEST.info5 = '',
						@.DEST.ugrpguid = 'TRANSBUD'
					;
				END IF;
			END IF;
			
			IF _MODE = 'DO.Prepare.NG.ZM' THEN
			/* *************************************************************************************************************************************************************
				Naglowek - ZAMOWIENIA
			**************************************************************************************************************************************************************/

				IF @.CLON.ERR THEN
					LEAVE S_C_HT_CloneTools;
				END IF;
				
				SET _GUID = @.DEST.GUID;
				
				UPDATE `t_zmng` t, `operdoc` od
				SET
					t.idn = 0,
					t.GUID = @.DEST.GUID,
					t.tymczasowa = IFNULL(@.DEST.Tymczasowa, 1),
					t.calc_ver = IF(@.DEST.Allways.calc_ver.3, 3, t.calc_ver),
					t.Rodzaj = IFNULL(@.DEST.Rodzaj, t.Rodzaj),
					t.rodzaj_typ = IFNULL(@.DEST.Rodzaj_typ, t.rodzaj_typ),
					t.idnmagazyn = IFNULL(@.DEST.idnmagazyn, t.idnmagazyn),
					t.MagazynWys = IFNULL(@.DEST.magazynwys, t.MagazynWys),
					t.terminrealizacji = IFNULL(@.DEST.terminrealizacji, t.terminrealizacji),
					t.uwagi = IF(NOT @.DEST.Oryginalne_Uwagi, CONCAT('klon:', t.kontrsymbol,' zam:', t.nrzamw,'  dnia:', t.datawystaw), t.uwagi),
					t.datawystaw = IFNULL(@.DEST.datawystaw, CURRENT_DATE()),
					t.datawplywu = IFNULL(@.DEST.datawystaw, CURRENT_DATE()),
					t.info5 = IFNULL(@.DEST.info5, t.info5),
					t.ugrpguid = IFNULL(@.DEST.ugrpguid, t.ugrpguid),
					t.wyjazdguid = '',
					t.nrzamwkontr = '',
--					t.status = 0,
					t.status_obieg = 0,
					t.OsobaGUID = '',
					t.status = IF(@.DEST.Rodzaj.Nazwa := od.Opis, 0, 0),	--	tutaj i tak wstawiam ZERO ALE!!!! ten MYK umozliwia mi przepisanie d.Nazwa
					t.ilepozzreal = 0, t.wersja = 0,
					t.TerminRealizacji_Plan = NULL,
					t.localtime = NOW(), t.remotetime = NULL, t.Create_At = NOW(),
					t.CreatorGUID = @_handle_UserGUID,
					-- t.UgrpGUID = @_handle_UserUgrpGUID,
					-- bylo t.idnuser = IFNULL(@session.Registration.IdnUser, t.idnuser)
					t.IdnUser = @_handle_UserLogin
				WHERE
					od.Rodzaj = IFNULL(@.DEST.Rodzaj, t.Rodzaj)
				;

				IF @session.globals.Owner IN ('PBUCH','CLIMAREM') and @.DEST.Rodzaj=87 THEN
					SELECT nrzamw INTO @nrzamw FROM t_zmng LIMIT 1;
					SET @nrzamw_p=substring_index(@nrzamw,'/',1),@nrzamw_s=substring_index(@nrzamw,'/',-1);
					SET @nrzamw_s=_VarStr(_VarINT(IF(@nrzamw_s=@nrzamw,0,@nrzamw_s))+1);
					-- SELECT @nrzamw_p,@nrzamw_s;
					UPDATE t_zmng t SET t.nrzamw = CONCAT(@nrzamw_p,'/',@nrzamw_s),
					    t.idnuser = IFNULL(@session.Registration.IdnUser, t.idnuser),
						t.status_obieg = 1;
				ELSE
					UPDATE t_zmng t SET t.nrzamw = '*',t.OsobaGUID = '';
				END IF;

				UPDATE `t_zmng` t, `kontrah` k 
				SET
					t.kontrguid = k.GUID, 
					-- t.uwagi = CONCAT('klon:', t.kontrsymbol, ' zam:', t.nrzamw, '  dnia:', t.datawystaw),
					t.klasacenowa = k.klasacenowa, 
					t.akwizytorguid = k.akwizytorguid	-- A co z kontrsymbol ??? nie przepisujey  ???
				WHERE 
					k.guid = @.DEST.KontrGUID AND 
					@.DEST.KontrGUID <> '' 
				;
				
				IF @.DEST.KontrGUID.Changed THEN
					UPDATE `t_zmng` t, `kontrah` k 
					SET
						t.kontrsymbol = k.symbol, 
						t.platnikguid = k.platnikguid, 
						t.akwizytorguid = k.akwizytorguid
					WHERE 
						k.guid = @.DEST.KontrGUID
					;
				END IF;
				
				IF IFNULL(@.DEST.UPDATE_KatCol_from_kontrah, '') != '' THEN
					UPDATE `t_zmng` n, kontrah k 
					SET
						n.katcol0 = k.katcol0,
						n.katcol1 = k.katcol1,
						n.katcol2 = k.katcol2,
						n.katcol3 = k.katcol3,
						n.katcol4 = k.katcol4
					WHERE 
						n.KontrGuid = k.guid
					;
				END IF;

				SELECT 
					t.KontrGUID,
					t.PlatnikGUID,
					t.AreaGUID 
                INTO
					@.DEST.KontrGUID,
					@.DEST.PlatnikGUID,
					@.DEST.AreaGUID
				FROM `t_zmng` t 
				;
				SET 
					@.DEST.PlatnikGUID.Changed = (@.DEST.PlatnikGUID != @.SRC.PlatnikGUID),
					@.DEST.AreaGUID.Changed = (@.DEST.AreaGUID != @.SRC.AreaGUID)
				;
				
			END IF;
			
			/* *************************************************************************************************************************************************************
				Pozycje checkownia - ZAMOWIENIA
			**************************************************************************************************************************************************************/
			
			
			IF _MODE = 'DO.SELECT.PO.ZM' THEN
				IF @.CLON.ERR THEN
					LEAVE S_C_HT_CloneTools;
				END IF;
			
				
				CREATE TEMPORARY TABLE `t_zmpo_select`
					SELECT 
					
					_varINT(IF(ilosc_na_przyszlym=p.ilosc,0,1)) AS checked,p.idnNG,p.guid,p.idntowr,p.towrsymb,p.towrnazwa,p.idnmagazyn,p.ilosc_pierwotna, ilosc_na_przyszlym AS `Wygenerowano`,
						p.terminrealizacji,p.ilosc-ilosc_na_przyszlym AS ilosc ,KC5.Valuex AS katcol5,
						KC6.Valuex AS katcol6, KC7.Valuex AS katcol7, KC8.Valuex AS katcol8,KC9.Valuex AS katcol9,p.info,p.info2
					FROM `zmpo` p 
						LEFT JOIN zmng n ON n .guid=p.idnng  AND n.wersja = p.wersja
						LEFT JOIN v_ktw0 KC5 ON p.kat5 = KC5.klucz AND KC5.rok IN(0, 2022) 
						LEFT JOIN v_ktw1 KC6 ON p.kat6 = KC6.klucz AND KC6.rok IN(0, 2022) 
						LEFT JOIN v_ktw2 KC7 ON p.kat7 = KC7.klucz AND KC7.rok IN(0, 2022) 
						LEFT JOIN v_ktw3 KC8 ON p.kat8 = KC8.klucz AND KC8.rok IN(0, 2022) 
						LEFT JOIN v_ktw4 KC9 ON p.kat9 = KC9.klucz AND KC9.rok IN(0, 2022) 
					WHERE 
						n.guid = @.SRC.GUID
				; 
				ALTER TABLE t_zmpo_select ADD PRIMARY KEY (guid);
				SELECT * from t_zmpo_select;
			END IF;
			
			IF _MODE = 'DO.Prepare.PO.ZM' THEN
			/* *************************************************************************************************************************************************************
				Pozycje - ZAMOWIENIA
			**************************************************************************************************************************************************************/
				IF @.CLON.ERR THEN
					LEAVE S_C_HT_CloneTools;
				END IF;
				CREATE TEMPORARY TABLE `t_zmpo`
					SELECT 
						p.* 
					FROM `zmpo` p, `zmng` n 
					WHERE 
						n.guid = @.SRC.GUID
						AND p.idnng = n.guid
						AND n.wersja = p.wersja
				; 
				
				IF @.CLONE_MODE LIKE '%.SELECT.POZ%' THEN
				
					DELETE t.* FROM t_zmpo t,t_zmpo_select s WHERE t.guid=s.guid AND s.checked<>1;
					UPDATE  t_zmpo t,t_zmpo_select s SET 
						t.ilosc=s.ilosc,
						t.terminrealizacji=s.terminrealizacji 
					WHERE t.guid=s.guid;
				
				set @checked = (SELECT count(*) from t_zmpo);
				
					IF NOT @checked THEN 
						SELECT 'Nie wybrano pozycji do sklonowania' as MSG;
						SET @.CLON.ERR=1;
						LEAVE S_C_HT_CloneTools;
					END IF ; 
				
				END IF;
				

				UPDATE `t_zmpo` p
				SET 
					p.zamowienieGUID = IF(IFNULL(@.DEST.Rodzaj, p.Rodzaj) = 108 OR IFNULL(@.DEST.UPDATE_zamowienieGUID, '') != '', p.guid, p.zamowienieGUID)
				;
				IF @session.globals.Owner = 'HYDROMEGA_zablokowane_mail_20150304_RG' THEN
					UPDATE `t_zmpo` t 
					SET
						t.zamowienieGUID = IF(t.rodzaj = 108, '', t.zamowienieGUID)
					;
				END IF;  
				
				
				IF @.DEST.Zapotrzebowanie_Powiazane THEN
				--	np. dla @.CLONE_MODE IN ('ZM.ZMZP.2.ZMDD', 'ZM.ZMZP.2.ZMZA') THEN
					DELETE t FROM `t_zmpo` t WHERE t.magtyp = 0;	-- bez pozycji przychodowych 
					DELETE t FROM `t_zmpo` t, `zmpo` p WHERE t.zamowienieGUID = p.zamowienieGUID AND t.zamowienieGUID <> ''; 
					SELECT COUNT(*) INTO @.DEST.ilepoz FROM `t_zmpo`;
					IF @.DEST.ilepoz = 0 THEN
						SET
							@.CLON.ERR = 1,
							@.CLON.ERR_msg = CONCAT('Dla wszystkich pozycji zlecenia bylo juz stworzone ', @.DEST.Rodzaj.Nazwa, ' - nie tworze zatem tego dokumentu!')
						;
						LEAVE S_C_HT_CloneTools;
					ELSE
						SET
							@.CLON.ERR_msg = CONCAT('OK utworzono ', @.DEST.Rodzaj.Nazwa, ' - ilosc pozycji: ', @.DEST.ilepoz)
						;
					END IF;
				END IF;
				
				
				UPDATE `t_zmpo` p, `operdoc` od
				SET 
					p.idn = 0,
					p.GUID = CONCAT('HC', UUID()),
					p.idnng = @.DEST.GUID,
					p.tymczasowa = IFNULL(@.DEST.Tymczasowa, 1),

					p.idnmagazyn = IFNULL(@.DEST.idnmagazyn, p.idnmagazyn),
					p.MagazynWys = IFNULL(@.DEST.magazynwys, p.MagazynWys),
					
					p.calc_ver = IF(@.DEST.Allways.calc_ver.3, 3, p.calc_ver),
					
					p.Rodzaj = IFNULL(@.DEST.Rodzaj, p.Rodzaj),
					p.rodzaj_typ = IFNULL(@.DEST.Rodzaj_typ, p.rodzaj_typ),
					p.terminrealizacji = IFNULL(@.DEST.terminrealizacji, p.terminrealizacji),
					-- p.magtyp = od.magtyp,
					p.magtyp= IF(@.DEST.Rodzaj=73,p.magtyp,od.magtyp),
					p.zrealizowano = 0, 
					p.zlecono = 0, 
					p.spakowano = 0, 
					p.status = 0, 
					p.commision_guid = '',
					p.localtime = NOW(), p.remotetime = NULL, p.Create_At = NOW(),
					p.wersja = 0,
					p.grp_GUID = '',
					p.grp_TowrSymb = DEFAULT(p.grp_TowrSymb),
					p.grp_TowrNazwa = DEFAULT(p.grp_TowrNazwa),
					p.grp_Jednostka = DEFAULT(p.grp_Jednostka),
					p.grp_Ilosc = DEFAULT(p.grp_Ilosc)
				WHERE
					od.Rodzaj = IFNULL(@.DEST.Rodzaj, p.Rodzaj)
				;

				IF IFNULL(@.DEST.UPDATE_KatCol_from_kontrah, '') != '' THEN
					UPDATE `t_zmpo` p, `t_zmng` n, `kontrah` k 
					SET
						p.kat0 = k.katcol0,
						p.kat1 = k.katcol1,
						p.kat2 = k.katcol2,
						p.kat3 = k.katcol3,
						p.kat4 = k.katcol4
					WHERE 
						p.IdnNg = n.GUID 
						AND
						k.guid = n.KontrGuid
						
					;
				END IF;

				SELECT COUNT(*) INTO @.DEST.ilepoz FROM `t_zmpo`;
				UPDATE `t_zmng` t 
				SET 
					t.ilepoz = @.DEST.ilepoz
					-- ??? t.ilepozzreal = 0,
					-- ??? t.status = 0
				;
				
			END IF;
		
			IF _MODE = 'DO.Apply.ZM' THEN
			/* *************************************************************************************************************************************************************
				Zapis - ZAMOWIENIA
			**************************************************************************************************************************************************************/
			--	Wstawianie naglowka
				INSERT IGNORE INTO `zmng` SELECT * FROM `t_zmng`;
			--	Wstawianie pozycji
				INSERT IGNORE INTO `zmpo` SELECT * FROM `t_zmpo`;
			--	Wstawianie tabelki VAT
				INSERT INTO `zmng_vat` SELECT * FROM `t_ng_vat`;
				
				IF @.CLONE_MODE LIKE '%.SELECT.POZ%' THEN
					UPDATE  t_zmpo t,zmpo z SET 
						z.ilosc_na_przyszlym=t.ilosc
					WHERE t.zamowienieguid=z.guid;
				END IF;
				
			END IF;
			
		END IF;	--	ZAMOWIENIA

		
		IF _MODE LIKE 'DO.%.OP' THEN							
		/* *************************************************************************************************************************************************************
			OPERACJE
		**************************************************************************************************************************************************************/
		
			IF _MODE = 'DO.INIT.OP' THEN
			/* *************************************************************************************************************************************************************
				INICJACJA - OPERACJE
			**************************************************************************************************************************************************************/
			
				IF @.CLONE_MODE = 'OP.2.WEW' THEN 	-- klonuje dokumenty wewnetrzne, bez kontrahenta
					SET
						@.DEST.Tymczasowa = 1
					;
				END IF;

				IF @.CLONE_MODE = 'OP.ZT.2.SW' THEN 	-- tworzenie FV Wewn do ZT IM/UE
					SET
						@.DEST.Tymczasowa = 1,
						@.DEST.rodzaj = 83
					;
				END IF;
				
		--	RODZAJ z MODE	
				SET	@.DEST.rodzaj =
					CASE @.CLONE_MODE 
					WHEN 'OP.ZT.2.SW' THEN 83	-- tworzenie FV Wewn do ZT IM/UE
					WHEN 'OP.2.MM' THEN 9
					WHEN 'OP.2.WZ' THEN 10
					WHEN 'OP.2.WZ_DODOSTAWY' THEN 10
					WHEN 'OP.2.RW' THEN 11
					WHEN 'OP.2.PZ' THEN 12
					WHEN 'OP.2.PZ_DEPOZYT' THEN 12
					WHEN 'OP.2.PW' THEN 13
					ELSE
						@.DEST.rodzaj
					END
				;				
		--	IS_Rozrachunek z MODE	
				IF @.CLONE_MODE IN (
					'OP.2.WEW', 
					'OP.2.MM', 'OP.2.PZ', 'OP.2.WZ', 'OP.2.PW', 'OP.2.RW', 'OP.2.PZ_DEPOZYT', 'OP.2.WZ_DODOSTAWY'
				) THEN
					SET @.DEST.IS_Rozrachunek = FALSE;	--	klon nie ma byc rozrachunkiem !!!! bez wzgledu na rodzaj
				END IF;
				
				IF @.CLONE_MODE IN ('OP.2.WZ_DODOSTAWY') THEN
					SET @.DEST.IS_GUID_Dostawy = TRUE;
				END IF;
				
				IF @session.globals.Owner = 'TRANSBUD' THEN
					SET @.DEST.UPDATE_KatCol_from_kontrah = '1';
				END IF;

				SET @.DEST.Tymczasowa = IF(@.CLONE_MODE IN ('OP.ZT.2.SW', 'OP.2.WEW'), 1, @.DEST.Tymczasowa);
--    ????????????????????				SET @.DEST.Tymczasowa = IF(@.DEST.Kancel, 0, 1); 
				
			END IF;
			
			IF _MODE = 'DO.Prepare.NG.OP' THEN
			/* *************************************************************************************************************************************************************
				Naglowek - OPERACJE
			**************************************************************************************************************************************************************/

				IF @.CLON.ERR THEN
					LEAVE S_C_HT_CloneTools;
				END IF;
				
				
				SET _GUID = @.DEST.GUID;
				
				
				UPDATE `t_opng` t
				SET
					t.idn = 0,
					t.GUID = @.DEST.GUID,
					t.Rodzaj = IFNULL(@.DEST.Rodzaj, t.Rodzaj),
					t.rodzaj_typ = IFNULL(@.DEST.Rodzaj_typ, t.rodzaj_typ),
					t.grupaoper = @.DEST.grupaoper,
					
					t.tymczasowa = IFNULL(@.DEST.Tymczasowa, 1),
					t.paragon_printed = 0,
					t.idnattach = t.GUID,  -- przechowanie guida dokumentu zrodlowego, z ktorego powstaje klon
				--	MAGAZYNY !!!!!!!!!
					t.ZMagazynu = IF(@.DEST.Magazyny.Changed, @.DEST.ZMagazynu, t.ZMagazynu),
					t.DoMagazynu = IF(@.DEST.Magazyny.Changed, @.DEST.DoMagazynu, t.DoMagazynu),
					
					t.uwagi = 
						IF(@.CLONE_MODE = 'OP.2.WEW', 
							CONCAT('klon:', @.SRC.Rodzaj.Nazwa,' nr:', t.nrdokmag),
							CONCAT('klon:', t.kontrsymbol, ' oper.:', @.SRC.Rodzaj.Nazwa, ' nr:', t.nrdokmag, ' z dnia:', t.datawystaw)
						),
					t.datawystaw = IFNULL(@.DEST.datawystaw, CURRENT_DATE()),
					t.rozrachunek = IFNULL(@.DEST.IsRozrachunek, t.rozrachunek),
					t.nrdokmag = '*', 
					t.nrwewn = IF(@.DEST.Kancel, t.nrwewn, '*'), -- t.nrwewn='*', 
					t.nrdokfin = 
						IF(@.DEST.rodzaj = 83, 
							t.NrFvWewn,
							CONCAT(t.nrdokfin, '*')
						), 
					t.CRozliczone = 0, t.CRozliczoneWal = 0, t.zaksiegowana = 0,
					t.akcept_platn_kwota = 0, t.akcept_platn = 0,
					t.datadekretacji = '',
					t.status = 0,
					t.statusEDI = 0, 
					t.status_obieg = IF(@.DEST.Kancel, 1, 0), 
					t.status_przelewu = 0, t.statusEmail = 0, t.wyslano_przelew = 0,
					t.lp_ks_podawcza_str = '',
					t.ewidenc = 0,
					
					-- t.rv_id = IF(@.DEST.rodzaj = 83, 2029, t.rv_id),
					t.rv_id = IFNULL(@.DEST.rv_id, t.rv_id),
					t.CWN = IF(@.DEST.IsRozrachunek, @ht.doc.StronaWNForRozrach, 0), -- IF(@.DEST.rodzaj = 83, 1, t.CWN), 
					t.ckwota = IF(@.DEST.IsRozrachunek, t.ckwota, 0),
					t.ckwotawal = IF(@.DEST.IsRozrachunek, t.ckwotawal, 0),
					t.zaksiegowana = IF(@.DEST.rodzaj = 83, 0, t.zaksiegowana), 
					t.fvrudowz = IF(@.DEST.rodzaj = 83, 0, t.fvrudowz), 
					t.wzordekr = IF(@.DEST.rodzaj = 83, '', t.wzordekr), 
					t.kancelaria_kierunek = IF(@.DEST.rodzaj = 83, 0, t.kancelaria_kierunek), 

						
					t.localtime = NOW(), t.remotetime = NULL, t.Create_At = NOW(),
					t.CreatorGUID = @_handle_UserGUID,
					-- t.UgrpGUID = @_handle_UserUgrpGUID,
					-- bylo t.idnuser = IFNULL(@session.Registration.IdnUser, t.idnuser)
					t.IdnUser = @_handle_UserLogin,
					t.statusEmail=0
					
				;

				
				UPDATE `t_opng` t, `kontrah` k 
				SET
					t.kontrguid = k.GUID, 
					t.kontrklasacenowa = k.klasacenowa 
				WHERE 
					k.guid = @.DEST.KontrGUID AND 
					@.DEST.KontrGUID <> ''
				;
				
				IF @.DEST.KontrGUID.Changed THEN
					UPDATE `t_opng` t, `kontrah` k 
					SET
						t.kontrnazwa = k.nazwa, t.kontrsymbol = k.symbol, t.kontradres = CONCAT(k.ulica, ', ', k.zipcode, ' ', k.nazwamiasta),
						t.kontrklasacenowa = k.klasacenowa, t.kontrnip = k.nip, t.kontrpodzialnip = k.podzialnip, 
						t.platnikguid = k.platnikguid, t.akwizytorguid = k.akwizytorguid
					WHERE 
						k.guid = @.DEST.KontrGUID
					;
				END IF;
				
				IF IFNULL(@.DEST.UPDATE_KatCol_from_kontrah, '') != '' THEN
					UPDATE `t_opng` n, kontrah k 
					SET
						n.katcol0 = k.katcol0,
						n.katcol1 = k.katcol1,
						n.katcol2 = k.katcol2,
						n.katcol3 = k.katcol3,
						n.katcol4 = k.katcol4
					WHERE 
						n.KontrGuid = k.guid
					;
				END IF;
				
				IF IFNULL(@.DEST.IsStorno, FALSE) THEN
				-- to jest kawalek gdy chcemy uzyskac dokument z odwrotnym znakiem
					UPDATE `t_opng` 
					SET 
						netto=-netto, 
						vat=-vat, 
						brutto=-brutto,nettowal=-nettowal,BruttoWal=-BruttoWal,CKwota=-CKwota,CKwotaWal=-CKwotaWal,  	
						tabwartnetto1=-tabwartnetto1,tabwartnetto2=-tabwartnetto2,tabwartnetto3=-tabwartnetto3,tabwartnetto4=-tabwartnetto4,tabwartnetto5=-tabwartnetto5,tabwartnetto6=-tabwartnetto6,
						tabwartnetto7=-tabwartnetto7,tabwartnetto8=-tabwartnetto8,tabwartnetto9=-tabwartnetto9,tabwartnetto10=-tabwartnetto10,tabwartnetto11=-tabwartnetto11,tabwartnetto12=-tabwartnetto12,
						tabwartnetto13=-tabwartnetto13,tabwartnetto14=-tabwartnetto14,tabwartvat1=-tabwartvat1,tabwartvat2=-tabwartvat2,tabwartvat3=-tabwartvat3,tabwartvat4=-tabwartvat4,
						tabwartvat7=-tabwartvat7,tabwartvat8=-tabwartvat8,tabwartvat9=-tabwartvat9,tabwartvat10=-tabwartvat10, tabwartvat11=-tabwartvat11,tabwartvat12=-tabwartvat12,  
						tabwartbrutto1=-tabwartbrutto1,tabwartbrutto2=-tabwartbrutto2,tabwartbrutto3=-tabwartbrutto3,tabwartbrutto4=-tabwartbrutto4,tabwartbrutto7=-tabwartbrutto7,
						tabwartbrutto8=-tabwartbrutto8,tabwartbrutto9=-tabwartbrutto9,tabwartbrutto10=-tabwartbrutto10,tabwartbrutto11=-tabwartbrutto11,tabwartbrutto12=-tabwartbrutto12 
					;
				
				END IF;

				SELECT 
					t.KontrGUID,
					t.PlatnikGUID,
					t.AreaGUID
                INTO
					@.DEST.KontrGUID,
					@.DEST.PlatnikGUID,
					@.DEST.AreaGUID
				FROM `t_opng` t 
				;
				SET 
					@.DEST.PlatnikGUID.Changed = (@.DEST.PlatnikGUID != @.SRC.PlatnikGUID),
					@.DEST.AreaGUID.Changed = (@.DEST.AreaGUID != @.SRC.AreaGUID)
				;
				
			END IF;
			
			
			IF _MODE = 'DO.SELECT.PO.OP' THEN
				IF @.CLON.ERR THEN
					LEAVE S_C_HT_CloneTools;
				END IF;
				
				CREATE TEMPORARY TABLE `t_oppo_select`
					SELECT 
					
				     	0 AS checked,p.idnoper AS idnNG,p.guid,p.idntowr,p.towrsymb,p.towrnazwa,p.ilosc AS ilosc_pierwotna, p.ilosc  AS `Wygenerowano`
						,p.ilosc,KC5.Valuex AS katcol5,
						KC6.Valuex AS katcol6, KC7.Valuex AS katcol7, KC8.Valuex AS katcol8,p.info,p.info2
					FROM `oppo` p 
						LEFT JOIN opng n ON n.guid=p.idnoper 
						LEFT JOIN v_ktw0 KC5 ON p.kat5 = KC5.klucz AND KC5.rok IN(0, 2022) 
						LEFT JOIN v_ktw1 KC6 ON p.kat6 = KC6.klucz AND KC6.rok IN(0, 2022) 
						LEFT JOIN v_ktw2 KC7 ON p.kat7 = KC7.klucz AND KC7.rok IN(0, 2022) 
						LEFT JOIN v_ktw3 KC8 ON p.kat8 = KC8.klucz AND KC8.rok IN(0, 2022) 
						LEFT JOIN v_ktw4 KC9 ON p.kat9 = KC9.klucz AND KC9.rok IN(0, 2022) 
					WHERE 
						n.guid = @.SRC.GUID
				; 
				
				select * from t_oppo_select;
			END IF;
			
			IF _MODE = 'DO.Prepare.PO.OP' THEN
			/* *************************************************************************************************************************************************************
				Pozycje - OPERACJE
			**************************************************************************************************************************************************************/
				IF @.CLON.ERR THEN
					LEAVE S_C_HT_CloneTools;
				END IF;
				CREATE TEMPORARY TABLE `t_oppo`
					SELECT 
						p.* 
					FROM `oppo` p, `opng` n 
					WHERE 
						n.guid = @.SRC.GUID
						AND p.idnOper = n.guid
				; 
				
				
				IF @.CLONE_MODE LIKE '%.SELECT.POZ%' THEN
				
					DELETE t.* FROM t_oppo t,t_oppo_select s WHERE t.guid=s.guid AND s.checked<>1;
					SET @checked = (SELECT COUNT(*) FROM t_oppo);
		
					IF NOT @checked THEN 
						SELECT 'Nie wybrano pozycji do sklonowania' AS MSG;
						
						LEAVE S_C_HT_CloneTools;
					END IF ; 
				END IF;
				
				IF @.DEST.IS_GUID_Dostawy THEN
					UPDATE `t_oppo` t 
					SET
						t.GUID_dostawy = t.GUID
					;
				END IF;
				
				UPDATE `t_oppo` p, `operdoc` od
				SET 
					p.idn = 0,
					p.GUID = CONCAT('HC', UUID()),
					p.IdnOper = @.DEST.GUID,
					p.idnoperfin = @.DEST.GUID,
					p.idnwz = '', 
					p.guidzm = '',
					p.tymczasowa = IFNULL(@.DEST.Tymczasowa, 1),
					
					p.Rodzaj = IFNULL(@.DEST.Rodzaj, p.Rodzaj),
					p.rodzaj_typ = IFNULL(@.DEST.Rodzaj_typ, p.rodzaj_typ),
					p.grp_GUID = '',
					p.grp_TowrSymb = DEFAULT(p.grp_TowrSymb),
					p.grp_TowrNazwa = DEFAULT(p.grp_TowrNazwa),
					p.grp_Jednostka = DEFAULT(p.grp_Jednostka),
					p.grp_Ilosc = DEFAULT(p.grp_Ilosc),
					p.localtime = NOW(), p.remotetime = NULL, p.Create_At = NOW()
				WHERE
					od.Rodzaj = IFNULL(@.DEST.Rodzaj, p.Rodzaj)
				;
				
			--	MAGAZYNY !!!!!!!!!
				IF @.DEST.Magazyny.Changed THEN
					UPDATE `t_oppo` p, `t_opng` n
					SET
						p.ZMagazynu = n.ZMagazynu,
						p.DoMagazynu = n.DoMagazynu
					WHERE 
						p.IdnOper = n.GUID 
					;
				END IF;
				
				IF IFNULL(@.DEST.UPDATE_KatCol_from_kontrah, '') != '' THEN
					UPDATE `t_oppo` p, `t_opng` n, `kontrah` k 
					SET
						p.kat0 = k.katcol0,
						p.kat1 = k.katcol1,
						p.kat2 = k.katcol2,
						p.kat3 = k.katcol3,
						p.kat4 = k.katcol4
					WHERE 
						p.IdnOper = n.GUID 
						AND
						k.guid = n.KontrGuid
						
					;
				END IF;

				IF @.CLONE_MODE = 'OP.2.PZ' AND @session.globals.Owner = 'STANPOL' THEN 	-- tworzenie PZ dla Stampolu
					SELECT info1 into @lot from t_opng;

					SELECT 
						n.nrdokfin 
						INTO @nrdokfin
					FROM opng n
					INNER JOIN oppo o ON o.idnoperfin=n.GUID
					INNER JOIN t_opng t ON t.idnattach=o.idnoper 
					LIMIT 1
					;

					UPDATE t_oppo t 
					SET
						t.nrseryjny = IF(t.nrseryjny = '', @lot, t.nrseryjny),
						t.info = IF(t.info = '', @nrdokfin,t.info)
					;
					UPDATE `t_opng` t 
					SET 
						t.nrdokfin = @nrdokfin
					;
				END IF;
				
				SELECT COUNT(*) INTO @.DEST.ilepoz FROM `t_oppo`;
				UPDATE `t_opng` t 
				SET 
					t.ilepoz = @.DEST.ilepoz
					-- ??? t.ilepozzreal = 0,
					-- ??? t.status = 0
				;
				
			END IF;
		
			IF _MODE = 'DO.Apply.OP' THEN
			/* *************************************************************************************************************************************************************
				Zapis - OPERACJE
			**************************************************************************************************************************************************************/
			--	Wstawianie naglowka
				INSERT IGNORE INTO `opng` SELECT * FROM `t_opng`;
			--	Wstawianie pozycji
				INSERT IGNORE INTO `oppo` SELECT * FROM `t_oppo`;
			--	Wstawianie tabelki VAT
				INSERT INTO `opng_vat` SELECT * FROM `t_ng_vat`;
            --  Wstaw oppo_mag
                SET @.DEST.GUID = _DEST_GUID;
                CALL oppo_mag('UPDATE_OPNG_REC', @.DEST.GUID);
                
				
			END IF;
			
		END IF;	--	OPERACJE

	END IF;	
	
	IF _MODE = 'DO.Apply.ADDR' THEN
	/* *************************************************************************************************************************************************************
		ADRESY dla OP i ZM
	**************************************************************************************************************************************************************/
	--	Klonowanie adresow
		IF @session.globals.DOC_with_AdrLink THEN
		--	Usun jakby cos bylo (ale skad niby ??? :(
			CALL geo_int_adr_link_NED('REC.DELETE', '', @.DEST.GUID, '*', '*', '', '', '', '', '', '');
			-- bylo IF @.DEST.KontrGUID.Changed THEN
			IF @.DEST.adr_link.RESET THEN
			--	OD NOWA
			--	Usun adresy kontrahenta
				CALL geo_int_adr_link_NED('REC.CLONE', '', @.DEST.KontrGUID, 'kontrah', '', '', @.DEST.GUID, @.DEST.TableName, 'KontrPlatDost', 'Only.no.midified', '');
			--	a gdyby nie bylo w ogole to dodaj pusty	
				CALL geo_int_adr_link_NED('REC.CLONE', 'DEFAULT', '', '', '', '', @.DEST.GUID, @.DEST.TableName, 'KontrPlatDost', '', '');				
			--	dodaj ewent. adres dostawy kontrahenta
				CALL geo_int_adr_link_NED('REC.CLONE', '', @.DEST.KontrGUID, 'kontrah_wys', '', '', @.DEST.GUID, @.DEST.TableName, 'Dost', 'Only.no.midified', '');
			--	dodaj Odbior dla TRANSBUDU - klonowanie adresu odbioru
                IF @session.globals.Owner = 'TRANSBUD' THEN
                    CALL geo_int_adr_link_NED('REC.CLONE', '', @.SRC.GUID, @.SRC.TableName, 'Odbior', '', @.DEST.GUID, @.DEST.TableName, 'Odbior', '', '');  -- klonowanie adresu odbioru
				END IF;
			--	Adres Platnika o ile rozny od kontrah	
				IF @.DEST.PlatnikGUID != @.DEST.KontrGUID THEN
					CALL geo_int_adr_link_NED('REC.CLONE', '', @.DEST.PlatnikGUID, 'kontrah', '', '', @.DEST.GUID, @.DEST.TableName, 'Plat', 'Only.no.midified', '');
				END IF;
			--	Adres dostawy	
				IF IFNULL(@.DEST.AreaGUID, '') != ''  THEN
					CALL geo_int_adr_link_NED('REC.CLONE', '', @.DEST.AreaGUID, 'erp_area_nodes', '', '', @.DEST.GUID, @.DEST.TableName, 'Dost', 'Only.no.midified', '');
				ELSE
					CALL geo_int_adr_link_NED('REC.CLONE', '', @.DEST.KontrGUID, 'kontrah_wys', '', '', @.DEST.GUID, @.DEST.TableName, 'Dost', 'Only.no.midified', '');
				END IF;
				
			ELSE
			--	KLONOWANIE
				CALL geo_int_adr_link_NED('REC.CLONE', '', @.SRC.GUID, @.SRC.TableName, '*', '', @.DEST.GUID, @.DEST.TableName, '*', '', '');  -- klonowanie adresow zam X do dokumentumentu _Key (realizacja)
			END IF;
		END IF;
	END IF;	--	'DO.Apply.ADDR'
	

END$$

DELIMITER ;

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

Zmien Zapytanie ofertowe na zmDD
CALL C_HT_CloneTools('ZM.ZAOF.2.ZMDD', @_Key, @_GUID_ZMDD, CONCAT('idnmagazyn=', %d,'&', 'magazynwys=', %d,'&'), '', '', '');
@_Key - GUID zapytania ofertowego na ktorym stoisz
@_GUID_ZMDD - GUID docelowego zam. DD
Uwaga w parametrach podac magazyny jako %d
	
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

*/

/*
$Log$
*/
