 DELIMITER $$

/* ************************************************************************************************************************************************************************
	Edycja, Wstawianie, etc 
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `Zmng_E_init`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Zmng_E_init`(
	IN _MODE VARCHAR(250),	 --	_handle_oper INSERT, EDIT, DELETE,
	IN _Key VARCHAR(38),
	IN _handle_UserGUID VARCHAR(38),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255)
)
/*
	CALL Zmng_E_init('INSERT', 'x', 'jmam', '', '');
	CALL Zmng_E_init('EDIT', '{4367FDA9-1EF9-4117-B768-BCD4D91C6DE1}', 'jmam', '', '');
	CALL Zmng_E_init('INSERT', 'x', 'jmam', '', '');
*/
BEGIN 
	CALL _ng_e_rec_init(_MODE, 'ZM', _Key, _handle_UserGUID, _Param_A, _Param_B);
END$$

DROP PROCEDURE IF EXISTS `Zmng_E_init_set`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Zmng_E_init_set`(
	IN _MODE VARCHAR(250),	--	
	IN _Key VARCHAR(38),	
	IN _Rodzaj INTEGER,
	IN _Rodzaj_Typ INTEGER,
	IN i_MODE VARCHAR(255),
	IN i_Calc_Ver INTEGER,
	IN i_KontrGUID VARCHAR(38),
	IN i_Magazyn1_Kasa INTEGER,
	IN i_Magazyn2 INTEGER,
	IN i_Tymczasowa INTEGER,
	IN i_Waluta INTEGER,
	IN i_OsobaGUID VARCHAR(38),
	IN i_AreaGUID VARCHAR(38),
	IN i_Input_GUID VARCHAR(255),
	IN i_fvrudowz INTEGER,
	IN i_Param_A VARCHAR(255),
	IN i_Param_B VARCHAR(255),
	IN i_Param_C VARCHAR(255)
	
)
/*
	CALL Zmng_E_init_set('', 'x', 1, 0, '', 0, 'kontrGUID', 1, 0, 0, 0, 'OsobaGUID', 'AreaGUID', '', 0, '', '', '');
	CALL Zmng_E_init_set('', 'x', 10, 0, '', 0, 'kontrGUID', 1, 3, 0, 0, 'OsobaGUID', 'AreaGUID', '', 0, '', '', '');
*/
BEGIN 
	CALL _ng_e_rec_set(
		_MODE, _Key, _Rodzaj, _Rodzaj_Typ, i_MODE, i_Calc_Ver, i_KontrGUID, i_Magazyn1_Kasa, i_Magazyn2, 
		i_Tymczasowa, i_Waluta, i_OsobaGUID, i_AreaGUID, i_Input_GUID, i_fvrudowz, i_Param_A, i_Param_B, i_Param_C
	);
END$$

DROP PROCEDURE IF EXISTS `Zmng_E_init_set_from_another_doc`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Zmng_E_init_set_from_another_doc`(
	IN i_MODE VARCHAR(250),	--	
	IN _Key VARCHAR(38),	
	IN _OtherKey VARCHAR(38),	
	IN i_Param_A VARCHAR(255),
	IN i_Param_B VARCHAR(255),
	IN i_Param_C VARCHAR(255)
	
)
/*
	CALL Zmng_E_init_set_from_another_doc('', 'Key', '_OtherKey', '', '', '');
*/

BEGIN 
	DECLARE _Rodzaj, _Rodzaj_typ, _Magazyn, _Magazyn2, _Waluta, _i_Waluta, _Typ_Przepisania_Cen, _Tymczasowa, _i_Zrealizowano INTEGER DEFAULT 0;  	--  TCenyZZm = (CZZ_Zamowienie, CZZ_KursDzis, CZZ_OdNowa);
	DECLARE _KontrGUID , _OsobaGUID, _AreaGUID VARCHAR(38);
	
	CALL _ng_e_rec_set_from_another_doc(i_MODE, _Key, _OtherKey, i_Param_A, i_Param_B, i_Param_C);

	IF(i_MODE LIKE 'CLONE%') THEN	
		IF(i_MODE LIKE 'CLONE.AS.ZAM.FROM%') THEN	
		--	To moze byc oferta albo zapotrzebowanie ZATEM spr. realizowalnosc
			IF(i_MODE LIKE '%OFERTA') THEN	
				CALL _zmng_Update_zrealizowane('oferta', _OtherKey, '1', '');
			ELSE
				CALL _zmng_Update_zrealizowane('zmng', _OtherKey, '1', '');
			END IF;
		END IF;
		
		SELECT
			z.rodzaj, z.rodzaj_typ, z.rodzaj2, z.KontrGUID, z.osobaGUID, z.AreaGUID, z.Waluta, z.idnmagazyn, z.magazynwys, z.zamwpermn, z.terminrealizacji,
			r.Rodzaj, r.Rodzaj_Typ, i_Magazyn1_Kasa, i_Magazyn2, i_Waluta,
			!(z.ilepoz > z.IlepozZreal) AS Zrealizowano
		INTO
			@z.rodzaj, @z.rodzaj_typ, @z.rodzaj2, _KontrGUID, _osobaGUID, _AreaGUID, _Waluta, @z.idnmagazyn, @z.magazynwys, @z.zamwpermn, @z.terminrealizacji,
			_Rodzaj, _Rodzaj_Typ, _Magazyn, _Magazyn2, _i_Waluta,
			_i_Zrealizowano
		FROM `zmng` z, 	`ng_e_rec` r
		WHERE
			z.GUID = _OtherKey
			AND
			r.GUID = _Key
		LIMIT 1
		;
		IF i_MODE = 'CLONE.AS.ZAM.FROM' THEN
	--	WIEMY ze to nie zwyczajny klon ale (tez zamowienia z zaqmowienia) tyle ze z zapotrzebowania albo z oferty 
	--	I UWAGA !!! Gdy nie znamy kontekstu (czy tworzymy zamowienie z zapotrzebowania czy z oferty to po rodzaju stwierdzamy
			SET i_MODE = IF(@z.rodzaj = @ht.CZmOF, 'CLONE.AS.ZAM.FROM.OFERTA', 'CLONE.AS.ZAM.FROM.ZAPOTRZEBOWANIE');
		END IF;
	--	Teraz juz mam i_MODE
		IF i_MODE = 'CLONE.AS.ZAM.FROM.OFERTA' THEN
			CALL _ng_e_rec_msg_clear('', _Key, 'BeforeInit', '');
			IF _i_Zrealizowano  THEN
			--	Uwaga wszystko zrealizowane !!!
				--	_res_str_get( 'ng_msg_check.init.BrakPozDoRealizacji', ''),
				CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeInit', 
					'Dokument nie ma pozycji do realizacji - wszystkie są zrealizowane!', 
					'Error', 'Stop', '', ''
				);
			END IF;
		
		--	Oferta	
			SET	_Rodzaj = 
				IF(@session.globals.Owner IN ('COMEX') AND @z.rodzaj_typ = 0,	-- zad 57084
					@ht.CZmOO,
					IF(_Waluta != 0, 
						@ht.CZmEX,
						@ht.CZmOO
					)
				)
			;
		ELSE
			SET	_Rodzaj = 
				@ht.CZmDD
			;
		END IF;
		
		SET
			_Magazyn = @z.idnmagazyn, _Magazyn2 = @z.magazynwys
		;
	
		CALL Zmng_E_init_set('', _Key, _Rodzaj, _Rodzaj_typ, i_MODE, 3, _KontrGUID, _Magazyn, _Magazyn2, _Tymczasowa, _Waluta, _OsobaGUID, _AreaGUID, _OtherKey, 0, i_Param_A, i_Param_B, i_Param_C);
	END IF;
END$$

DROP PROCEDURE IF EXISTS `Zmng_E_Run`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Zmng_E_Run`(
	IN _MODE VARCHAR(250),	 --	'before.run' 'after.run' ''
	IN _Key VARCHAR(38),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_C VARCHAR(255)
)
/*
	CALL Zmng_E_Run('before.run', 'x', '', '', '');
	CALL Zmng_E_Run('', '{4367FDA9-1EF9-4117-B768-BCD4D91C6DE1}', '', '', '');
	CALL Zmng_E_Run('after.run', 'x', '', '', '');
	CALL Zmng_E_Run('after.print', 'IdnOper', '', '', '');
	lub
	CALL Zmng_E_Run('all', 'IdnOper', '', '', '');
*/
S_Zmng_E_Run: BEGIN 


	IF _MODE = 'all' THEN
                SET @Zmng_E_Run.dubug = 'before.run';
		CALL Zmng_E_Run('before.run', _Key, _Param_A, _Param_B, _Param_C);
                SET @Zmng_E_Run.dubug = '..""..';
		CALL Zmng_E_Run('', _Key, _Param_A, _Param_B, _Param_C);
                SET @Zmng_E_Run.dubug = 'after.run';
		CALL Zmng_E_Run('after.run', _Key, _Param_A, _Param_B, _Param_C);
		LEAVE S_Zmng_E_Run;
	END IF;

			SET @zmpo.real.to.e = -1;
	CALL _ng_E_Run(_MODE, _Key, _Param_A, _Param_B, _Param_C);
	
	IF _MODE = '' THEN
	/**********************************************************************************************************************************
		RUN Czyli mamy juz załadowany lub skreowany rekord i znamy juz zmienne:
			@handle_oper,
			@handle_FROM,
			@i_MODE,
			@i_Input_GUID
	**********************************************************************************************************************************/
		
		IF (@handle_oper = 'Insert') THEN
		/**********************************************************************************************************************************
			INSERT
		**********************************************************************************************************************************/
			IF (@i_MODE LIKE 'CLONE%') THEN
			/**********************************************************************************************************************************
				Klonowanie zamowienia @i_Input_GUID
				w _Input_GUID ID zamowienia do klonowania
			**********************************************************************************************************************************/
				SET @jmamWashere = true;
				CALL zmng_E_LetInsertCloneFrom(@i_MODE, _Key, @i_Input_GUID, '', '');

			END IF;
		END IF;
		
		IF (@handle_oper = 'Edit') THEN
		/**********************************************************************************************************************************
			Edycja
		**********************************************************************************************************************************/
			SET @X = '';
		END IF;
	END IF;	
	
END$$

DROP PROCEDURE IF EXISTS `zmng_E_Let`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `zmng_E_Let`(
	IN _MODE VARCHAR(250),	 --	'before.run' 'after.run' ''
	IN _Key VARCHAR(38),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255)
)
/*
	CALL zmng_E_Let('Post', @IdnOper, '', '');
	CALL zmng_E_Let('Apply', @IdnOper, '', '');
	CALL zmng_E_Let('ApplyAndClear', @IdnOper, '', '');
	CALL zmng_E_Let('End', @IdnOper, '', '');
	-- to samo co
		CALL zmng_E_Let('Clear', @IdnOper, '', '');
		i
		CALL zmng_E_Let('Cancel', @IdnOper, '', '');
*/
BEGIN 
	IF _MODE = 'Post' THEN
		/**********************************************************************************************************************************
			Post
		**********************************************************************************************************************************/
		CALL _ng_E_LetPost('', 'ZM', _Key, _Param_A, _Param_B);
		IF @session.HT.ZM.walidacja_pol_aktywna THEN
			CALL sys_fld_validator_tools('UPDATE.ValidatorField.N', 'zmng', _Key, '', '', '', '', '');
		END IF;
		-- CALL sys_fld_validator_tools('UPDATE.ValidatorField.P', 'zmpo', _Key, '', '', '', '', '');
	END IF;
	
	IF _MODE = 'PO.AfterPost' THEN
		/**********************************************************************************************************************************
			pozycja After Post
			_Key	IdnNg, _Param_A GUID pozycji
			CALL zmng_E_Let('PO.AfterPost', @IdnNg, GuidPozycji, '');
		**********************************************************************************************************************************/
		-- CALL sys_fld_validator_tools('UPDATE.ValidatorField.N', 'zmpo', _Param_A, '', '', '', '', '');
		IF @session.HT.ZM.walidacja_pol_aktywna THEN
			CALL sys_fld_validator_tools('UPDATE.ValidatorField.P', 'zmpo', _Key, '', '', '', '', '');
		END IF;
		CALL _ng_E_ON('PO.After.Post', _Key, 'ZM', '');
	END IF;
	
	IF _MODE = 'Apply' THEN
		/**********************************************************************************************************************************
			Apply
		**********************************************************************************************************************************/
		CALL _ng_E_LetApply('', 'ZM', _Key, _Param_A, _Param_B);
	END IF;
	
	IF _MODE = 'ApplyAndClear' THEN
		/**********************************************************************************************************************************
			Apply i czysc
		**********************************************************************************************************************************/
		CALL _ng_E_LetApply('', 'ZM', _Key, _Param_A, _Param_B);
		CALL _ng_E_LetEnd('', 'ZM', _Key, _Param_A, _Param_B);
	END IF;
	
	IF _MODE IN ('End', 'Cancel', 'Clear') THEN
		/**********************************************************************************************************************************
			Czysc
		**********************************************************************************************************************************/
		CALL _ng_E_LetEnd('', 'ZM', _Key, _Param_A, _Param_B);
	END IF;
	
	IF _MODE = 'refresh.real.to.e' THEN
		CALL _ng_E_Tools('refresh.real.to.e', _Key, 'ZM', _Param_A);
	END IF;
	
	IF _MODE = 'DeletePozycjeZerowe' THEN
		DELETE FROM `zmpo_e` 
		WHERE 
			IdnNg = _Key 
			AND IFNULL(IDN, 0) = 0
			AND Ilosc = 0
		;
		IF @ht.ZezwalajNaGrupowaniePozycji  THEN
			CALL C_HT_xxNgPo_GRP('P.Ungroup.Zombie', 'ZM', 'E', _Key, '', '', '', '', '');
		END IF;
	END IF;
	
	IF _MODE = 'DeletePozycjeZPustymIdnTowr' THEN
		DELETE FROM `zmpo_e` 
		WHERE 
			IdnNg = _Key 
			AND IFNULL(IDN, 0) = 0
			AND IFNULL(IdnTowr, '') = ''
		;
		UPDATE `zmng_e` n
		SET
			n.ilepoz = ((SELECT COUNT(*) FROM `zmpo_e` p WHERE p.IdnNg = n.GUID AND p.wersja = n.wersja))
		WHERE
			n.GUID = _Key
			AND n.zamwpermn = 0
		;	
		IF @ht.ZezwalajNaGrupowaniePozycji  THEN
			CALL C_HT_xxNgPo_GRP('P.Ungroup.Zombie', 'ZM', 'E', _Key, '', '', '', '', '');
		END IF;
	END IF;
	
	IF _MODE = 'CheckBeforeApply' THEN
		/**********************************************************************************************************************************
			CheckBeforeApply
		**********************************************************************************************************************************/
		
		SET @k.KontrGUID = NULL;
		SELECT 
			n.IDN, n.Rodzaj, n.grupaoper, IFNULL(n.nrzamw, ''), n.brutto, op.IsDostawa, op.IsKorekta, ng.handle_ReadOnly, n.Kurs, n.sposobplatn,
			n.createdfrom_GUID,
			n.brutto,
			k.GUID AS KontrGUID,
			k.Blokujsprzedaz, 
			k.Nazwa,
			k.Symbol,
			op.Grupa AS OpTyp 
		INTO
			@n.IDN, @n.Rodzaj, @n.grupaoper, @n.nrzamw, @n.brutto, @op.IsDostawa, @op.IsKorekta, @ng.handle_ReadOnly, @n.Kurs, @n.sposobplatn,
			@n.createdfrom_GUID,
			@n.brutto,
			@k.KontrGUID,
			@k.Blokujsprzedaz,
			@k.Nazwa,
			@k.Symbol,
			@op.OpTyp
		FROM `zmng_e` n 
		INNER JOIN `operdoc` op ON op.Rodzaj = n.Rodzaj
		INNER JOIN `ng_e_rec` ng ON ng.GUID = n.GUID
		LEFT JOIN `kontrah` k ON k.GUID = n.KontrGUID
		WHERE
			n.GUID = _Key
		;
set @XYZ = '1';		
		IF _Param_A = 'PozycjeZerowe' THEN
			CALL _ng_e_rec_msg_clear('', _Key, 'BeforeApply.PozycjeZerowe', '');
set @XYZ = '2';		
			DELETE FROM `zmpo_e` 
			WHERE 
				IdnNg = _Key 
				AND IFNULL(IDN, 0) = 0
				AND IFNULL(IdnTowr, '') = ''
			;
			/*
			UPDATE `zmpo_e` p
			SET	
				p.Ilosc = 0,
				p.iloscdo = 0
			WHERE
				p.IdnNg = _Key
				AND IFNULL(p.IdnTowr, '') = ''
				AND p.Ilosc != 0
			;
			*/
set @XYZ = '3';		
		/**********************************************************************************************************************************
			Same tylko pytanie o pozycje
		**********************************************************************************************************************************/
		--	Sprawdz pozycje zerowe
			IF (NOT @op.IsDostawa)
				AND NOT @ng.handle_ReadOnly
				THEN
set @XYZ = '4';		
				SELECT COUNT(*) AS IlePozZerowe INTO @n.IlePozZerowe
				FROM `zmpo_e` WHERE IdnNg = _Key AND Ilosc = 0 AND iloscdo = 0 AND WartBrt = 0 AND WartNet = 0 AND WartVat = 0;
				IF @n.IlePozZerowe > 0 THEN
					CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply.PozycjeZerowe', 
						-- REPLACE('W zestawie sa pozycje z zerowa iloscia (%d)\nCzy usunąć je ?', '%d', @n.IlePozZerowe), 
						REPLACE(_res_str_get('ng_msg_BeforeApply.PozycjeZerowe', ''), '%d', _VarStr(@n.IlePozZerowe)), 
						'Ask', '', '', '');
					-- ResID = 'ng_msg_BeforeApply.PozycjeZerowe'	
				END IF;
			END IF;
			
		END IF;

		IF _Param_A = '' THEN
			CALL _ng_e_rec_msg_clear('', _Key, 'BeforeApply', '');

			IF NOT EXISTS (SELECT GUID FROM `zmng_e` WHERE GUID = _Key) THEN
				CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
					_res_str_get('ng_msg_BeforeApply.BrakDanych', ''),
					'Error', 'Stop', '', '');
			END IF;
			/*
			IF NOT EXISTS (SELECT GUID FROM `zmng_e` WHERE GUID = _Key) THEN
				-- LEAVE S_zmng_E_Let;
			END IF;
			*/
		/**********************************************************************************************************************************
			Pozostale
		**********************************************************************************************************************************/
		/*
		--	Numer zam!!!!!!!!	
			IF @session.HT.IR.Kontroluj_wypelnienie_pola_nrdokfin 
				AND (@n.nrzamw = '') 
				AND @n.Rodzaj IN (@ht.CZKFV, @ht.CKsFV, @ht.CZKKF, @ht.CKsKF, @ht.CZTUE, @ht.CZkIm, @ht.CZTKU) 
				THEN
				SET
					@CheckBeforeApply.Msg = 'Brak numeru dokumentu finansowego',
					@CheckBeforeApply.Blokuj = @session.HT.IR.UmozliwiajZapisBezWypelPolaNrDokFin
				;
	
				CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
					-- 'Brak numeru dokumentu finansowego', 
					_res_str_get( 'ng_msg_BeforeApply.BrakNrDokFin', ''),
					'Warning', IF(NOT @session.HT.IR.UmozliwiajZapisBezWypelPolaNrDokFin, 'Stop', ''), '', '');
					-- ResID = 'ng_msg_BeforeApply.BrakNrDokFin'	
			END IF;
		*/	
			
		--	Gdy jest to WSTAWIANIE i Sprzedaż i NIE MA pozycji!!!!!!!!	
			IF (IFNULL(@n.IDN, 0) = 0) THEN
				SELECT COUNT(*) AS IlePoz INTO @n.IlePoz FROM `zmpo_e` WHERE IdnNg = _Key;
				IF @n.IlePoz = 0  THEN	--	OR @n.brutto = 0
					SET
						@CheckBeforeApply.Msg = 'Nie można zapisywać zamówienia nie posiadającego pozycji!',
						@CheckBeforeApply.Blokuj = 1
					;
					CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
						-- _res_str_get('ng_msg_BeforeApply.BrakPozycjiZM', ''),
						@CheckBeforeApply.Msg, 
						'Error', 'Stop', '', '');
					-- ResID = 'ng_msg_BeforeApply.BrakPozycji'	
				END IF;
			END IF;

		--	Gdy kurs = 0 
			IF (IFNULL(@n.Kurs, 0) = 0) THEN
				CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
					-- _res_str_get('ng_msg_BeforeApply.KursWalutyZerowy', ''),
					'Kurs waluty nie może być zerowy.\nProsimy poprawić!', 
					'Error', 'Stop', '', '');
				-- ResID = 'ng_msg_BeforeApply.BrakPozycji'	
			END IF;
			
		--	Gdy sposobplatn = 0 
			IF (IFNULL(@n.sposobplatn, 0) = 0) AND @session.HT.IR.alert_pusty_sposob_platnosci THEN
				CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
				-- _res_str_get('ng_msg_BeforeApply.BrakSposobuPlatn', ''),
					'Pole z wyborem sposobu płatności jest puste.\nProsimy poprawić!', 
					'Error', 'Stop', '', '');
				-- ResID = 'ng_msg_BeforeApply.BrakPozycji'	
			END IF;
			
		--	Gdy Blokujsprzedaz = 0 
			IF (IFNULL(@k.KontrGUID, '') != '') AND (@k.Blokujsprzedaz <> 0) AND @session.HT.IR.Blokuj_kontrahenta_przy_zam_i_zlecprod THEN
				CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
					REPLACE(REPLACE(_res_str_get('ng_msg_check.kontrahent.Blokujsprzedaz', ''), '#KontrNazwa#', _VarStr(@k.Nazwa)), '#KontrSymbol#', _VarStr(@k.Symbol)),
					'Error', 
					'Stop', '', ''
				);
			END IF;
			
		--	przy zapisie zamówienia dodać komunikat dla pozycji przekraczających ofertę zad 40746
			IF (IFNULL(@n.createdfrom_GUID, '') != '') THEN
			set @X123 = '1';
				DROP TEMPORARY TABLE IF EXISTS `t_ofr_poz`;
				CREATE TEMPORARY TABLE `t_ofr_poz`
				SELECT
					tp.GUID AS GUID, -- pGUID_OFR, 
					tp.Ilosc AS Ilosc_OFR,
					IFNULL((SELECT SUM(pp.ilosc) FROM `zmpo` pp WHERE pp.zamowienieGUID = tp.GUID AND pp.iDNnG != n.guid), 0) AS IleZreal_OFR,
					_VarDouble(0.0) AS IleMoich
				FROM `zmng_e` n, `zmpo` tp
				WHERE
					n.GUID = _Key
					AND tp.IdnNg = n.createdfrom_GUID
					AND tp.Rodzaj = @ht.CZmOF	--	wazne bo w createdfrom_GUID moze byc guid zamowiuenia z ktorego klonowalismy a nie oferta
				;
				SET @.t_ofr_poz.COUNT = ROW_COUNT();
				IF @.t_ofr_poz.COUNT > 0 THEN
				-- gdy > 0 to uzupelnij IleMoich
					UPDATE `t_ofr_poz` t, `zmpo_e` p
					SET
						t.IleMoich = p.Ilosc
					WHERE
						p.IdnNg = _Key
						AND p.zamowienieGUID = t.GUID
					;
					--	a na koniec zbacz czy przekroczono czyli IleZreal_OFR + IleMoich > Ilosc_OFR
					IF EXISTS(
						SELECT GUID FROM `t_ofr_poz` t WHERE t.IleZreal_OFR + t.IleMoich > t.Ilosc_OFR AND t.IleMoich > 0
					) THEN
						CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
					--	tutaj będziemy uzywac res str: 'ng_msg_BeforeApply.ZamPrzekraczaOferte'
					-- _res_str_get('ng_msg_BeforeApply.ZamPrzekraczaOferte', ''),
							'Zamówienie przekracza pulę realizowanej oferty !!!',
							'Warning', 
							'', '', ''
						);
					END IF;
				END IF;
				DROP TEMPORARY TABLE IF EXISTS `t_ofr_poz`;
			END IF;
			
		--	przy zapisie zamówień kontrolować, czy ilości pokrywają pełne opakowania
			IF (IFNULL(@n.createdfrom_GUID, '') != '') THEN
			--	ale tylko dla IZOHANU
				IF @session.globals.Owner = 'IZOHAN'
					AND 
					EXISTS(
						SELECT GUID FROM `zmng` WHERE GUID = @n.createdfrom_GUID AND Rodzaj = @ht.CZmOF	--	wazne bo w createdfrom_GUID moze byc guid zamowiuenia z ktorego klonowalismy a nie oferta
					)
					AND 
					EXISTS(
						SELECT 
							p.GUID 
						FROM `zmpo_e` p, `TowrNg` t
						WHERE 
							p.IdnNg = _Key
							AND IFNULL(p.zamowienieGUID, '') != ''
							AND t.GUID = p.IdnTowr
							-- AND t.opakowanie_zbiorcze_d > 1		--	po rozmowie z p.Dudkiem 8-10-2015 jednak ma być opakowanie_d
							AND t.opakowanie_d > 1
							-- AND (p.Ilosc MOD t.opakowanie_zbiorcze_d) != 0	--	po rozmowie z p.Dudkiem 8-10-2015 jednak ma być opakowanie_d
							AND (_VarDecimal(p.Ilosc) MOD _VarDecimal(t.opakowanie_d)) != 0
					) THEN

					CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
						'Pozycje muszą zawierać wyłącznie ilości które pokrywają pełne opakowania !!!',
						'Error', 
						'Stop', '', ''
					);
					-- !!!!!!!!!! dodać do `_res_strings` jesli ktos uzyje tego - na 27 VI 2023 to jest tylko dla IZOHANU
				END IF;
			END IF;
			

			IF 
			(
				(@op.OpTyp = @ht.ST) OR 
				(@n.Rodzaj IN (@ht.CRzWZ, @ht.CRzRW, @ht.CRzKR, @ht.CZmEX, @ht.CZMOO))		
			)
			AND
			(
				NOT @session.HT.IR.Sprzedaz_ponizej_ceny_min
				OR
				NOT @session.HT.IR.Sprzedaz_ponizej_ceny_zakupu
			)
			AND
			IFNULL((SELECT _GetUprawnienie('HT_SprzedPonizejCenyZakupLubCenyMin', n.Handle_UserGUID) FROM `ng_e_rec` n WHERE n.GUID = _Key), -1) <= 0
		--	NUREK !!!	
			THEN
				SET @.Msg = '';
				SELECT 
					_VarText(
					CONCAT(
					-- _VarStr(IFNULL(@session.Registration.Admin, ' Admin is null')), ' UserGUID: ', _VarStr(IFNULL(@session.Registration.UserGUID, '?')),
					--	weź string 'ng_msg_BeforeApply.Nurek' i REPLACE '#ROWS#' na group_concat
						'Uwaga sa ceny sprzedazy po rabacie ktore sa mniejsza od ceny zakupu lub od ceny minimalnej. \rPozycje dla nast. towarow: \r',
						GROUP_CONCAT(CONCAT(p.TowrSymb, ' - cena po rabacie: ', _VarStr(round(p.CenaNet *(100-p.Rabat)/100 * p.Kurs, 2))) SEPARATOR '\r') 
						 
					)) AS Msg
				INTO
					@.Msg
				FROM `zmpo_e` p 
				WHERE 
					p.IdnNg = _Key
					AND
					p.ExtFlags LIKE '%<NUREK>%'
				;
			
				IF IFNULL(@.Msg, '') != '' THEN
					CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
						@.Msg,
						'Error', 
						'Stop', '', ''
					);
				END IF;
			END IF;
			
		--	VALIDATORY !!!!!
			IF @session.HT.ZM.walidacja_pol_aktywna THEN
				IF @session.globals.Owner = 'TRANSBUD'  THEN
					UPDATE `zmng_e` SET `ExtFlags` = '<USE_VALIDATOR>' WHERE GUID = _Key;
					CALL sys_fld_validator_tools('UPDATE.ValidatorField.N', 'zmng', _Key, '', '', '', '', '');
				END IF;
				CALL C_HT_xxNgPo_DO('Befor.Apply.MSG_Err/MSG_War<-ExtFlags_Inf', 'ZM', 'n:E;p:E', _Key, '', @session.HT.ZM.walidacja_pol_aktywna, '', '', '', '');
				SET	
					@.ZM.BU.MSG_Err = @.Valid.MSG_Err,
					@.ZM.BU.MSG_War = @.Valid.MSG_War
				;
				-- CALL C_HT_xxNgPo_DO('Befor.Apply.MSG_Err/MSG_War<-ExtFlags_Inf', 'OP', 'n:E;p:E', _Key, '', @session.HT.OP.walidacja_pol_aktywna, '', '', '', '');
				/*
			
				SET @.ZM.BU.MSG_n_Err := NULL, @.ZM.BU.MSG_n_War := NULL, @.ZM.BU.MSG_p_Err := NULL, @.ZM.BU.MSG_p_War := NULL;
				SELECT
					NULLIF(_ExtFlags('Get.Content', n.ExtFlags_Inf, 'Err', '', ''), '') AS MSG_n_Err,
					NULLIF(_ExtFlags('Get.Content', n.ExtFlags_Inf, 'War', '', ''), '') AS MSG_n_War,
					GROUP_CONCAT(DISTINCT NULLIF(_ExtFlags('Get.Content', p.ExtFlags_Inf, 'Err', '', ''), '') SEPARATOR ',\n') AS MSG_p_Err,
					GROUP_CONCAT(DISTINCT NULLIF(_ExtFlags('Get.Content', p.ExtFlags_Inf, 'War', '', ''), '') SEPARATOR ',\n') AS MSG_p_War
						
				FROM `zmng_e` n
				LEFT JOIN `zmpo_e` p ON p.IdnNg = n.GUID
				WHERE
					n.GUID = _Key
				INTO @.ZM.BU.MSG_n_Err, @.ZM.BU.MSG_n_War, @.ZM.BU.MSG_p_Err, @.ZM.BU.MSG_p_War
				;
				SET 
					@.ZM.BU.MSG_Err = 
					CONCAT_WS(',\n',
						CONCAT('Błędy nagłówka:\n', @.ZM.BU.MSG_n_Err),
						CONCAT('Błędy w pozycjach:\n', @.ZM.BU.MSG_p_Err)
					),
					@.ZM.BU.MSG_War = 
					CONCAT_WS(',\n',
						CONCAT('Ostrzeżenia nagłówka:\n', @.ZM.BU.MSG_n_War),
						CONCAT('Ostrzeżenia w pozycjach:\n', @.ZM.BU.MSG_p_War)
					)
				;
				*/
			--	Err o ile są	
				IF IFNULL(@.ZM.BU.MSG_Err, '') <> '' THEN
					CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
						@.ZM.BU.MSG_Err,
						'Error', 
						'Stop', '', ''
					);
				END IF;
				
			--	Warrningi o ile są	
				IF IFNULL(@.ZM.BU.MSG_War, '') <> '' THEN
					CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
						@.ZM.BU.MSG_War,
						'Warning', 
						'', '', ''
					);
				END IF;
			END IF;
		
		/*	
		--	NrDokFin - powtorzony Gdy jest to WSTAWIANIE i Sprzedaż i NIE MA pozycji!!!!!!!!	
			IF NOT @n.nrdokfin IN ('', 'LOCKED') 
				-- AND (@n.grupaoper = @ht.ST)
			THEN
				SET @_Is_ZT_ZP = ((@n.grupaoper IN (@ht.ZT, @ht.ZP)) OR IF(@session.globals.Owner = 'PBUCH', @n.Rodzaj = @ht.CPzPZ, FALSE));
				CALL opng_E_CheckNotRepeatedNumber('', _Key, 'opng', 'NrDokFin', @_Is_ZT_ZP, @Nr_ile, '');				
				IF @Nr_ile != 0 THEN
					CALL _ng_e_rec_msg_ins('', '', _Key, 'BeforeApply', 
						-- Dokument %s o numerze "%s" już istnieje. Czy na pewno zapisać dokument ?
						CONCAT(
							REPLACE(REPLACE(
								-- 'Dokument #f# o numerze "#N#" już istnieje!', 
								_res_str_get('ng_msg_BeforeApply.PowtorzonyNrDokFin', ''),
								'#N#', _VarStr(@n.nrdokfin)), '#f#', IF(@_Is_ZT_ZP, 'finansowy', '')),
							IF(@_Is_ZT_ZP,  
								-- CONCAT('\n', 'Czy na pewno zapisać dokument ?'),
								_res_str_get('ng_msg_BeforeApply.PowtorzonyNrDokFin.Ask', ''),
								''
							)
						),
						IF(@_Is_ZT_ZP, 'Ask', 'Error'), 
						'Stop', '', '');
					-- ResID = 'ng_msg_BeforeApply.PowtorzonyNrDokFin'	
					-- ResID = 'ng_msg_BeforeApply.PowtorzonyNrDokFin.Ask'	
				END IF;
			END IF;
		*/	
		/**********************************************************************************************************************************
			IZOHAN TO DO !!!!!!!!!!!!!!!!!!!!!!!!!
				TDZamowienia.DoApplyUpdate: Integer;

				{$IFDEF IZOHAN}
				  if INgPoCOMZamowienia.cds.FieldByName('rodzaj').asInteger = 73 then  // zlecprod
					Kontrola_akcyzy(INgPoCOMZamowienia.cds.FieldByName('GUID').asString);
				{$ENDIF}


				procedure TDZamowienia.Kontrola_akcyzy(aGUID: String);
				const
				  c_ht_kontrola_akcyzySQL =
					' call ht_kontrola_akcyzy(''%s'',''%s'') ';
				var
				  aMode,
				  aSQL: String;
				  aDS: TDataSet;
				begin
				  aMode := 'ZMZP';
				  aSQL := Format(c_ht_kontrola_akcyzySQL, [aMode, aGUID]);
				  try
					aDS := ConnectSupport.GetNavQuery(aSQL);
					if DataSetIsNotEmpty(aDS) then
					  DbGuiSupport.RunESimpleChoice(aDS, 'Przekroczenie norm akcyzowych ', 700, 500);
				  finally
					if Assigned(aDS) then
					  FreeAndNil(aDS);
				  end;
				end;
		**********************************************************************************************************************************/
			
		END IF;
		-- TUTAJ wolac ...
		IF _Param_B != '' THEN
			IF _Param_A = 'PozycjeZerowe' THEN
				CALL _ng_e_rec_msg_select('', _Key, 'BeforeApply.PozycjeZerowe', '');
			ELSE
				CALL _ng_e_rec_msg_select('', _Key, 'BeforeApply', '');
			END IF;
		END IF;
		
	END IF;
	
	IF _MODE = 'ChangeWaluta' THEN
		/**********************************************************************************************************************************
			ChangeWaluta
		**********************************************************************************************************************************/
		UPDATE `zmng_e` ne
		SET 
			ne.Waluta = _Param_A
		WHERE
			ne.GUID = _Key
		;
		CALL zmpo_E_Let_Update('waluta.changed', '', _Key, '', '');
	END IF;
	
	IF _MODE = 'Update.kurs.z.zaglowka.i.przelicz' THEN
		/**********************************************************************************************************************************
			Wpisuje do pozycji kurs z naglowka i przelicza
		**********************************************************************************************************************************/
		UPDATE `zmpo_e` pe, `zmng_e` ne
		SET
			pe.Kurs = ne.Kurs
		WHERE
			ne.GUID = _Key
			AND
			pe.IdnNg = ne.GUID
		;
		CALL zmng_E_Let('Post', _Key, '', '');
	END IF;
	
	IF _MODE LIKE 'Change.Magazyny.%' THEN
		/**********************************************************************************************************************************
			Change.Magazyny.idnmagazyn lub
			Change.Magazyny.MagazynWys 
			_Param_A nowy magazyn
			CALL zmng_E_Let('Change.Magazyny.idnmagazyn', '{B14AAE18-A57D-4AD6-B423-7E46E5A7F593}', '201', ''); -- zmien z mag na 201
			CALL zmng_E_Let('Change.Magazyny.MagazynWys', '{B14AAE18-A57D-4AD6-B423-7E46E5A7F593}', '101', ''); -- zmien do mag na 101
		**********************************************************************************************************************************/
		
		UPDATE `zmng_e` ne
		SET 
			ne.idnmagazyn = IF(_MODE = 'Change.Magazyny.idnmagazyn', _Param_A, ne.idnmagazyn),
			ne.MagazynWys = IF(_MODE = 'Change.Magazyny.MagazynWys', _Param_A, ne.MagazynWys),
			ne.ExtFlags_Inf = IF(@session.HT.ZM.walidacja_pol_aktywna, _ExtFlags('Add', ne.ExtFlags_Inf, 'USE_VALIDATOR', '', ''), ne.ExtFlags_Inf) 
		WHERE
			ne.GUID = _Key
		;
		UPDATE `zmpo_e` p
		SET
			p.idnmagazyn = IF(_MODE = 'Change.Magazyny.idnmagazyn', -100, p.idnmagazyn),
			p.MagazynWys = IF(_MODE = 'Change.Magazyny.MagazynWys', -100, p.MagazynWys),
			p.ExtFlags_Inf = IF(@session.HT.ZM.walidacja_pol_aktywna, _ExtFlags('Add', p.ExtFlags_Inf, 'USE_VALIDATOR', '', ''), p.ExtFlags_Inf) 
		WHERE
			p.IdnNg = _Key
		;
		
		CALL _ng_e_rec_do('update.from.xxng_e', _Key, '', '');	-- update ng_rec_e
		IF @session.HT.ZM.walidacja_pol_aktywna THEN
			CALL sys_fld_validator_tools('UPDATE.ValidatorField.P', 'zmpo', _Key, '', '', '', '', '');
			CALL sys_fld_validator_tools('UPDATE.ValidatorField.N', 'zmng', _Key, '', '', '', '', '');
		END IF;
		
		
	END IF;
	
	IF _MODE = 'SET.TerminRealizacji' THEN
		/**********************************************************************************************************************************
			CALL zmng_E_Let('SET.TerminRealizacji', '{B14AAE18-A57D-4AD6-B423-7E46E5A7F593}', '', ''); 
		**********************************************************************************************************************************/
		
		UPDATE `zmpo_e` p, `zmng_e` n
		SET
			n.TerminRealizacji = _Param_A,
			p.TerminRealizacji = _Param_A,
			n.ExtFlags_Inf = IF(@session.HT.ZM.walidacja_pol_aktywna, _ExtFlags('Add', n.ExtFlags_Inf, 'USE_VALIDATOR', '', ''), n.ExtFlags_Inf), 
			p.ExtFlags_Inf = IF(@session.HT.ZM.walidacja_pol_aktywna, _ExtFlags('Add', p.ExtFlags_Inf, 'USE_VALIDATOR', '', ''), p.ExtFlags_Inf) 
		WHERE
			n.GUID = _Key
			AND
			p.IdnNg = n.GUID
		;
		IF @session.HT.ZM.walidacja_pol_aktywna THEN
			CALL sys_fld_validator_tools('UPDATE.ValidatorField.P', 'zmpo', _Key, '', '', '', '', '');
			CALL sys_fld_validator_tools('UPDATE.ValidatorField.N', 'zmng', _Key, '', '', '', '', '');
		END IF;
		
	END IF;
	
	IF _MODE = 'TerminRealizacji.Z.ng.2.po' THEN
		/**********************************************************************************************************************************
			CALL zmng_E_Let('TerminRealizacji.Z.ng.2.po', '{B14AAE18-A57D-4AD6-B423-7E46E5A7F593}', '', ''); 
		**********************************************************************************************************************************/
		
		UPDATE `zmpo_e` p, `zmng_e` n
		SET
			p.TerminRealizacji = n.TerminRealizacji,
			p.ExtFlags_Inf = IF(@session.HT.ZM.walidacja_pol_aktywna, _ExtFlags('Add', p.ExtFlags_Inf, 'USE_VALIDATOR', '', ''), p.ExtFlags_Inf) 
		WHERE
			n.GUID = _Key
			AND
			p.IdnNg = n.GUID
		;
		IF @session.HT.ZM.walidacja_pol_aktywna THEN
			CALL sys_fld_validator_tools('UPDATE.ValidatorField.P', 'zmpo', _Key, '', '', '', '', '');
			CALL sys_fld_validator_tools('UPDATE.ValidatorField.N', 'zmng', _Key, '', '', '', '', '');
		END IF;
		
	END IF;
	
	
END$$

/* ************************************************************************************************************************************************************************
	Dodatkowe np. klonowanie
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `zmng_E_LetInsertCloneFrom`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `zmng_E_LetInsertCloneFrom`(
	IN _MODE VARCHAR(250),	 --	 np. 'CLONE'
	IN _Key VARCHAR(38),
	IN _KeySrc VARCHAR(38),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255)
)
/*
	CALL zmng_E_LetInsertCloneFrom('CLONE', @IdnOper, _ZM_Key, '', '');
	CALL zmng_E_LetInsertCloneFrom('CLONE.AS.ZAM.FROM.OFERTA', @IdnOper, _ZM_Key, '', '');
*/
BEGIN 
	IF _MODE LIKE 'CLONE%' THEN
		/**********************************************************************************************************************************
			Naglowek
		**********************************************************************************************************************************/
		DROP TEMPORARY TABLE IF EXISTS `t_zmng_ZAM_Kopiuj`;
		CREATE TEMPORARY TABLE `t_zmng_ZAM_Kopiuj` LIKE `zmng_e`;
		INSERT INTO `t_zmng_ZAM_Kopiuj` SELECT * FROM `zmng` WHERE GUID = _KeySrc;
		
		IF IFNULL(_Key, '') = '' THEN
			SET _Key = NEWGUID();
		END IF;
		
		
		
		IF _MODE LIKE 'CLONE.AS.ZAM.FROM.%' THEN
		--	(zam z oferty) czyli pozycje wersji nagloewka 'CLONE.AS.ZAM.FROM.OFERTA' LUB
		--	(zam z zapotrz)  'CLONE.AS.ZAM.FROM.ZAPOTRZEBOWANIE'
			UPDATE `t_zmng_ZAM_Kopiuj` n, `ng_e_rec` nr
			SET
				-- n.Rodzaj = IF(_MODE = 'CLONE.AS.ZAM.FROM.OFERTA', @ht.CZmOO, @ht.CZmDD),
				n.Rodzaj = nr.Rodzaj,
				n.Rodzaj_Typ = nr.Rodzaj_Typ,
				n.idnmagazyn = nr.i_Magazyn1_Kasa,
				n.MagazynWys = nr.i_Magazyn2,
				n.createdfrom_GUID = n.guid
			WHERE
				nr.GUID = _Key
			;
		END IF;
		
		IF NOT _MODE LIKE 'CLONE.AS.ZAM.FROM.%' THEN
			UPDATE `t_zmng_ZAM_Kopiuj` n, `ng_e_rec` nr
			SET
				n.idnuser = nr.handle_UserLogin,
				n.OsobaGUID = nr.handle_UserGUID
			WHERE
				nr.GUID = _Key
			;
		END IF;
/*
		Self.CDS.FieldByName('nrzamw').AsString := RegistryInt.GetRegIntValueString('Prefiks_klonowanego_num_zam', '*** ', 'Zamowienia')+aDSNg.FieldByName('nrzamw').AsString;
          if aNewRodzaj=CZmZP then Self.CDS.FieldByName('nrzamwkontr').AsString := aDSNg.FieldByName('nrzamwkontr').AsString;
          Self.CDS.FieldByName('uwagi').AsString := aDSNg.FieldByName('uwagi').AsString;
*/		
		UPDATE `t_zmng_ZAM_Kopiuj` n
		SET
			n.IDN = 0,
			n.GUID = _Key,
			
			-- n.tymczasowa = 1,
			-- n.nrzamw = '*',
			n.nrzamw = 
				IF(n.Rodzaj = @ht.CZmZP,
					n.nrzamwkontr,
					CONCAT(@session.HT.IR.Prefiks_klonowanego_num_zam, n.nrzamw)
				),
			n.nrzamwkontr = IF(_MODE = 'CLONE.AS.ZAM.FROM.OFERTA', CONCAT('OFERTA: ', n.nrzamwkontr), ''),
			n.zamwpermn = IF(_MODE = 'CLONE.AS.ZAM.FROM.OFERTA', FALSE, n.zamwpermn),
			-- n.nrzamwkontr = '',
			n.Uwagi = IF(@session.HT.IR.Klonuj_uwagi_zamowien, n.Uwagi, ''),
			n.status = 0, 
			n.ilepozzreal = 0, 
			n.zrealizowane = 0, 
			n.wersja = IF(n.Rodzaj = @ht.CZmOF, n.wersja, 0),
			n.TerminRealizacji_Plan = NULL,
			n.TerminRealizacji = IF(@session.globals.Owner = 'IZOHAN', NULL, n.TerminRealizacji), 	--	dla IZOHANU TerminRealizacji ustawiaj na NULL
			n.localtime = now(), n.remotetime = NULL,
			n.idnuser = IFNULL(@session.Registration.IdnUser, n.idnuser),
			n.osobaGUID = '',
			n.wyjazdGUID = '',
			n.create_AT = NOW() 
		;	
		
		DELETE FROM `zmng_e` WHERE GUID = _Key;
		INSERT INTO `zmng_e` SELECT * FROM `t_zmng_ZAM_Kopiuj`;
		DROP TEMPORARY TABLE IF EXISTS `t_zmng_ZAM_Kopiuj`;
		
		--	Adresacja!!!
		CALL ht_clone_tools('CLONE.ADDR', _KeySrc, _Key, 'zmng', 'zmng', 'CLEAR.before'); -- klonowanie z zmng do zmng
		
		
		/**********************************************************************************************************************************
			Pozycje
		**********************************************************************************************************************************/
		CALL zmpo_E_Let_Insert(_MODE, '', _Key, '', 0, 0, _KeySrc, 0, '', '');
	--	I tutaj dodaje 	UPDATE `ng_e_rec` r ALE CZY TO MA BYĆ tak czy inaczej to rozwiązać?????
		UPDATE `ng_e_rec` r
		SET
			r.handle_check = 103	
		WHERE
			r.GUID = _Key
			and
			false
		;	
		
	END IF;
END$$

DROP PROCEDURE IF EXISTS `zmng_e_Numeracja_po_Apply`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `zmng_e_Numeracja_po_Apply`(
	IN _MODE VARCHAR(250),
	IN _Key VARCHAR(38),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_C VARCHAR(255)
)
/*
	CALL zmng_e_Numeracja_po_Apply('', _Key, '', '', '');
*/
S_zmng_e_Numeracja_po_Apply: BEGIN 
	SELECT
		n.rodzaj, n.Rodzaj_typ, IFNULL(n.NrZamw, ''), 
		n.KontrGUID, 
		n.IdnMagazyn, 
		n.MagazynWys, 
		-- IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = n.IdnMagazyn), 0) AS IdnMagazyn_grupa,
		-- IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = n.MagazynWys), 0) AS MagazynWys_grupa,
		n.RodzajDowodu, n.DataWystaw, n.DataWplywu, n.transza_zamow,
		n.tymczasowa,
		n.ugrpGUID,
		od.Grupa AS OpTyp, 
		od.TwTyp, od.MagTyp,
		od.MA_Magzyny,
		od.numdok_automat,
		od.numwewn_automat
	INTO
		@n.rodzaj, @n.Rodzaj_typ, @n.NrZamw,
		@n.KontrGUID,
		-- @n.ZMagazynu_n, @n.DoMagazynu_n,
		@n.ZMagazynu, @n.DoMagazynu,
		@n.RodzajDowodu, @n.DataWystaw, @n.DataWplywu, @n.transza_zamow,
		@n.tymczasowa,
		@n.ugrpGUID,
		@od.OpTyp,
		@od.TwTyp, @od.MagTyp,
		@od.MA_Magzyny,
		@od.numdok_automat,
		@od.numwewn_automat
	FROM `zmng_e` n
	INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
	WHERE
		n.GUID = _Key
	;
		
	/*
	Już chyba niepotrzebne
	CALL ht_rodzaj_update_zmienne(@n.rodzaj);
	*/
	SET 
		@_Res1_mask = @n.ZMagazynu,
		/* jmam (2015-09-08) zablokowalem bo co mialo byc ??? w zamowieniach???
			IF(@od.OpTyp = 6, 	--	Czy KASA?
				@n.NrKasy,
				IF(@od.MagTyp IN (@ht.mtMM, @ht.mtRZ), 
					@n.ZMagazynu, 
					@n.DoMagazynu
				)
			),
		*/	
		@_Res2_mask = @n.DoMagazynu
		/* jmam (2015-09-08) zablokowalem bo co mialo byc ??? w zamowieniach???
			IF(@od.MagTyp IN (@ht.mtMM, @ht.mtPZ), 
				@n.DoMagazynu, 
				0
			)
		*/	
	;	
	SET 
		@_Res1 =
			IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = @_Res1_mask), @_Res1_mask),
		@_Res2 =
			IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = @_Res2_mask), @_Res2_mask)
	;
	--			SET @zmng_e_Numeracja_po_Apply = '_Scan_numdok_get_NumerText(_MODE, _Numer, _Rodzaj, _Mask, _Params)';
	SET
		@_Params =
		CONCAT(
			_VarStr(@_Res1_mask), ';',
			_VarStr(@_Res2_mask), ';',
			_VarStr(@n.DataWystaw), ';',
			_VarStr(@n.RodzajDowodu), ';', 
			_VarStr(0), ';',			-- jako @n.Rv_id
			_VarStr(@n.ugrpGUID), ';'
		)
	;
	
	/*
	@od.OpTyp = 2 -- MG		NrDokMag
	@od.OpTyp = 6 -- KS		NrDokKas
	ELSE	NrZamw
	*/
	-- 		NrZamw
	IF (IFNULL(@n.NrZamw, '') = '') AND @od.numdok_automat THEN
	/* ? ? ? ? ? Czy to wlaczyc ? ? ? ? ? */
	--	UWAGA dla SEVENETU?
		-- IF (@session.globals.Owner = 'SEVENET') THEN
		-- 	CALL AutoNum_GetNumberText_OperDoc('', @_Numer, @n.NrZamw, '', 'NrZamw', @n.rodzaj, 0, @n.ZMagazynu, @n.DoMagazynu,  @n.DataWplywu, @n.RodzajDowodu, @n.Rv_id, @n.ugrpGUID);
		-- ELSE
		CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_Params, @n.NrZamw);
		-- END IF;
	
		UPDATE `zmng_e` n
		SET
			n.NrZamw = @n.NrZamw
		WHERE
			n.GUID = _Key
		;
	END IF;

END$$


DROP PROCEDURE IF EXISTS `zmng_Calc_ver_Change`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `zmng_Calc_ver_Change`(
	IN _MODE VARCHAR(150),
	IN _Key VARCHAR(38),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_C MEDIUMTEXT
)
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
		Zmiana Calc_ver na 3 gdzy < 3
		CALL zmng_Calc_ver_Change('', '{9234A546-1902-4971-948D-E043D53A98CB}', '', '', '');
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
S_zmng_Calc_ver_Change: BEGIN
	IF EXISTS((SELECT n.Idn FROM `zmng` n WHERE n.GUID = _Key AND n.Calc_ver < 3)) THEN
	--	zmien Calc_ver
		UPDATE `zmng` n SET n.Calc_ver = 3 WHERE  n.GUID = _Key;
		UPDATE `zmpo` p SET p.Calc_ver = 3 WHERE  p.IdnNg = _Key;
	--	do LOG
		CALL log_Insert('INSERT', @Idn, 
			'', @Miejsce := 3, 2, 
			_Key, 
			@session.Registration.IP, 'Zmiana Calc_ver na 3 do edycji w "E".', 'zmng'
		);
	END IF;
END$$


/* ************************************************************************************************************************************************************************
	Dodatkowe inne
************************************************************************************************************************************************************************ */	

DELIMITER ;

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

CALL _Session_Refresh_Variables('', '', '');
--	NOWY
SET 
	@IdnOper = 'X',
	@KontrGUID = 'INT',
	@_Tymczasowa = TRUE,
	@G = ''
;
CALL zmng_E_init('INSERT', @IdnOper, 'jmam', '', '');
CALL zmng_E_init_set('', @IdnOper, 27, 0, '', 0, @KontrGUID, 1, 0, 0, 0, 'OsobaGUID', 'AreaGUID', '', 0, '', '', '');

--	EDYCJA
SET 
	@IdnOper = '{4367FDA9-1EF9-4117-B768-BCD4D91C6DE1}'
;
CALL zmng_E_init('EDIT', @IdnOper, 'jmam', '', '');

--	DALEJ
CALL zmng_E_Run('before.run', @IdnOper, '', '', '');
CALL zmng_E_Run('', @IdnOper, '', '', '');
CALL zmng_E_Run('after.run', @IdnOper, '', '', '');
SELECT n.rozrachunek, n.grupaoper, n.wzordekr, n.ugrpGUID, n.* FROM zmng_e n WHERE GUID = @IdnOper;
SELECT p.* FROM zmpo_e p WHERE IdnOper = @IdnOper;
	CALL zmng_E_Let('Post', @IdnOper, '', '');
	CALL zmng_E_Let('Apply', @IdnOper, '', '');
	CALL zmng_E_Let('ApplyAndClear', @IdnOper, '', '');
	CALL zmng_E_Let('End', @IdnOper, '', '');
	-- to samo co
		CALL zmng_E_Let('Clear', @IdnOper, '', '');
		-- i to samo co
		CALL zmng_E_Let('Cancel', @IdnOper, '', '');


ID naglowka w trakcie edycji (IDNOperFin zawsze lub IdnOper gdy WZ-ka podpieta jest edytowana w WZ
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/

