 DELIMITER $$

/* ************************************************************************************************************************************************************************
	Edycja cen
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `_pozycje_cenyrabat_xxpo_e_one_rec`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_pozycje_cenyrabat_xxpo_e_one_rec`(
	IN _MODE VARCHAR(150),
	IN _GUID VARCHAR(38),	--	GUID pozycji
	IN _for_Tagged BOOLEAN,	--	rob tylko dla zaznaczonych
	IN _rabat_fixed BOOLEAN,	--	nie ruszaj zwrotnie np. rabatu
	IN _Param_A VARCHAR(50),	--	
	IN _Param_B VARCHAR(50)	--	
)
/*
	CALL _pozycje_cenyrabat_xxpo_e_one_rec('ZM', @IdnOper, FALSE, FALSE, '', '');	
*/
S__pozycje_cenyrabat_xxpo_e_one_rec: BEGIN

	DECLARE _SQLText TEXT;

	-- IF _MODE != '' and _Param_B = 'jmam.test'  THEN 
	IF _MODE != '' THEN
		CALL cenyrabat_edit_info('INIT', '', '', '', '', '', '', '');		
		TRUNCATE `t_cenyrabat_edit_info`;
		SET _SQLText = 
		"
		INSERT INTO `t_cenyrabat_edit_info`
			(KontrGUID, PlatnikGUID, Rodzaj, Kontrah_KlasaCenowa, CzyCenaSprzedazy, CzyRabatyHierarchiczne, DataSprzed, Kontrah_KlasaRabatowa,
			IdnTowr, Kontrah_TreeNode, Kontrah_Rabat, Waluta, AkwizytorGUID,
			Towar_TreeNode, Towar_KalasaRabatowa, Towar_CenaEwid, Towar_Cenazkpnet, Towar_nie_realizuje_zamow, idn_tab_kurs)
			SELECT
				n.KontrGUID,
				n.PlatnikGUID, 
				@Rodzaj := n.Rodzaj AS Rodzaj,
				(@Kontrah_KlasaCenowa := IF(p.IdnCennik != 0, p.IdnCennik, n.#kontrklasacenowa#)) AS Kontrah_KlasaCenowa,		-- lub klasacenowa
			-- bylo	0 AS CzyCenaSprzedazy, --	na razie bo potem ust. by rodzaj
				@FCzyCenaSprzedazy := 
				IF(od.TwTyp = @ht.TwZm,
					od.Rodzaj IN (@ht.CZmOO, @ht.CZmEx, @ht.CZmZP, @ht.CZmOF),
					IF(od.Rodzaj IN (@ht.CRzRW, @ht.CRzKR, @ht.CPzKW),
						@Kontrah_KlasaCenowa <> 0, -- czyli gdy Kontrah_KlasaCenowa <> 0 dla RW i korekt rw i PZ
						(od.TwTyp <> @ht.TwPz) OR (od.Rodzaj = @ht.CMGZW)
					)
				) AS CzyCenaSprzedazy,				
				@session.HT.IR.RabatyHierarchiczne AS CzyRabatyHierarchiczne,
				IFNULL(n.#DataSprzed#, CURRENT_DATE()) AS DataSprzed,	--	zm.terminrealizacji
				IFNULL(k.KlasaRabatowa, 0) AS Kontrah_KlasaRabatowa,
				
				p.IdnTowr,
				k.Treenode AS Kontrah_TreeNode, 
			-- bylo	(@Kontrah_KlasaCenowa := IF(p.IdnCennik != 0, p.IdnCennik, n.#kontrklasacenowa#)) AS Kontrah_KlasaCenowa,		-- lub klasacenowa
				#kontrrabat#,	-- zm.rabat
				n.Waluta,
				n.AkwizytorGUID,
				
				t.TreeNode,
				t.klasarabatowa,
				IFNULL(t.cenaewid, 0) AS cenaewid,
				t.cenazkpnet, 
				t.nie_realizuje_zamow,
				n.idn_tab_kurs
			FROM `#xxpo_e#` p
			INNER JOIN `#xxng_e#` n ON n.GUID = p.#IdnOper#
			INNER JOIN `kontrah` k ON k.GUID = #n.KontrGUID#
			INNER JOIN `TowrNg` t ON t.GUID = p.IdnTowr
			INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
			WHERE
				p.GUID = '#_GUID#'
				AND
				#TAG#
			LIMIT 1
		;
		"
		;
		-- bylo SET _SQLText = REPLACE(_SQLText, '#kontrklasacenowa#', IF(_MODE != 'ZM', 'kontrklasacenowa', 'klasacenowa'));
		SET _SQLText = REPLACE(_SQLText, '#kontrklasacenowa#', IF(_MODE LIKE 'ZM%', 'klasacenowa', 'kontrklasacenowa'));
		-- bylo SET _SQLText = REPLACE(_SQLText, '#kontrrabat#', IF(_MODE != 'ZM', 'n.kontrrabat', 'GREATEST(IFNULL(n.rabat, 0), k.Rabat)'));
		SET _SQLText = REPLACE(_SQLText, '#kontrrabat#', IF(_MODE LIKE 'OP%', 'n.kontrrabat', 'GREATEST(IFNULL(n.rabat, 0), k.Rabat)'));
		-- bylo SET _SQLText = REPLACE(_SQLText, '#DataSprzed#', IF(_MODE != 'ZM', 'DataSprzed', 'terminrealizacji'));
		SET _SQLText = REPLACE(_SQLText, '#DataSprzed#', IF(_MODE LIKE 'OP%', 'DataSprzed', 'terminrealizacji'));
		-- bylo SET _SQLText = REPLACE(_SQLText, '#xxng_e#', IF(_MODE != 'ZM', 'opng_e', 'zmng_e'));
		SET _SQLText = REPLACE(_SQLText, '#xxng_e#', IF(_MODE = 'OP:TE', 'TE_opng', IF(_MODE = 'ZM:TE', 'TE_zmng', IF(_MODE LIKE 'OP%', 'opng_e', 'zmng_e'))));
		-- bylo SET _SQLText = REPLACE(_SQLText, '#xxpo_e#', IF(_MODE != 'ZM', 'oppo_e', 'zmpo_e'));
		SET _SQLText = REPLACE(_SQLText, '#xxpo_e#', IF(_MODE = 'OP:TE', 'TE_oppo', IF(_MODE = 'ZM:TE', 'TE_zmpo', IF(_MODE LIKE 'OP%', 'oppo_e', 'zmpo_e'))));
		SET _SQLText = REPLACE(_SQLText, '#_GUID#', _GUID);
		SET _SQLText = REPLACE(_SQLText, '#IdnOper#', IF(_MODE LIKE 'OP%', 'IdnOper', 'IdnNG'));
		SET _SQLText = REPLACE(_SQLText, '#TAG#', IF(_for_Tagged, ' p.Tag = 1 ', ' TRUE '));
		SET _SQLText = REPLACE(_SQLText, '#n.KontrGUID#', IF(true /*wgplatnika - sprawdzic, czy moze byc inaczej i dla kogo*/, 'n.PlatnikGUID', 'n.KontrGUID'));

		SET @_SQLText = _SQLText;
		SET @_SQLText1 = _SQLText;
		SET @_SQLText_CenyRabaty__Init = _SQLText;
		SET @_SQLText_CenyRabaty__Init.1 = _SQLText;
		CALL _ExecuteCmd(_SQLText, @Error);
	
		-- DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_info2`;
		-- CREATE TEMPORARY TABLE `t_cenyrabat_edit_info2` SELECT * FROM `t_cenyrabat_edit_info`; update `t_cenyrabat_edit_info2` set kontrah_TreeNode = concat(kontrah_TreeNode, '.');
	

		SET @_CzyPrzypisywacCenyEwid = 
			NOT @FCzyCenaSprzedazy AND (
				(@session.HT.IR.PrzypisywacCenyEwidDoPW AND @Rodzaj IN (13, 15)) OR	--	PW i -PW
				(@session.HT.IR.PrzypisywacCenyEwidDoRW AND @Rodzaj IN (11, 14)) OR	--	RW i -RW
				(@session.HT.IR.PrzypisywacCenyEwidDoPW AND @Rodzaj IN (39, 67, 68)) 	--	Inwentaryzacja i inw. nadw, niedob. UWAGA czy tu nie powinno byc @session.HT.IR.PrzypisywacCenyEwidDoINWENT
			)
		;

		/*
		UPDATE `t_cenyrabat_edit_info` tci
		SET
			tci.Last_Kurs_For_Waluta = 
				IFNULL(
					-- @Kurs
					(
						SELECT 
							k.kurs
						FROM `kursy` k 
						WHERE
							k.idnwaluty = tci.Waluta AND 
							k.idn_tab_kurs = tci.Idn_tab_kurs
						ORDER BY k.data DESC 
						LIMIT 1
					)
				, 1)
		-- 	,CzyCenaSprzedazy = @FCzyCenaSprzedazy
		WHERE
			tci.Waluta <> 0
		;	
		*/
	
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_ALL', '', '', '', '', '', '', '1');		-- bez selecta
	--	tezraz zrób update oppo_e
		
		SET _SQLText = 
		"
		UPDATE `#xxpo_e#` p, `t_cenyrabat_edit_result_k_x_t` t
		SET
			p.Rodzaj_Przeliczenia = 
				IF(NOT t.czy_ceny_brt,
					IF(p.Rodzaj_Przeliczenia != @ht._BN_CN_WN,
						@ht._NB_CN_WN,
						p.Rodzaj_Przeliczenia
					),	
					@ht._BN_CB_WN
				),
					
			p.CenaNet = 
				IF(NOT t.czy_ceny_brt,
					t.Cena,
					p.CenaNet
				),	
			p.CenaBrt = 
				IF(NOT t.czy_ceny_brt,
					p.CenaBrt,
					t.Cena
				),	
			p.Rabat = #rabat#, 
			p.idncennik = 
				IF(t.RabatType != 8,	 -- nie jest to pozycja z oferty gdy RabatType <> 8 czyli <> CRT_OFERTA
					t.KlasaCenowa,
					p.idncennik
				),	
			p.wartnet = 
				IF((t.Towar_nie_realizuje_zamow <> 0) AND (@session.globals.Owner = 'PLISZKA'),
					0,
					p.wartnet
				)	
			
		WHERE
			p.GUID = '#_GUID#'
			AND
			#TAG#
		;
		"
		;
		-- bylo SET _SQLText = REPLACE(_SQLText, '#xxpo_e#', IF(_MODE != 'ZM', 'oppo_e', 'zmpo_e'));
		SET _SQLText = REPLACE(_SQLText, '#xxpo_e#', IF(_MODE = 'OP:TE', 'TE_oppo', IF(_MODE = 'ZM:TE', 'TE_zmpo', IF(_MODE LIKE 'OP%', 'oppo_e', 'zmpo_e'))));

		SET _SQLText = REPLACE(_SQLText, '#_GUID#', _GUID);
		SET _SQLText = REPLACE(_SQLText, '#IdnOper#', IF(_MODE LIKE 'OP%', 'IdnOper', 'IdnNG'));
		SET _SQLText = REPLACE(_SQLText, '#TAG#', IF(_for_Tagged, ' p.Tag = 1 ', ' TRUE '));
		SET _SQLText = REPLACE(_SQLText, '#rabat#', IF(_rabat_fixed, 'p.Rabat', 't.Rabat'));
		SET @_SQLText = _SQLText;
		SET @_SQLText2 = _SQLText;
		SET @_SQLText_CenyRabaty__Update = _SQLText;
		-- LEAVE S__pozycje_cenyrabat_xxpo_e_one_rec;
		CALL _ExecuteCmd(_SQLText, @Error);
		
		-- CALL cenyrabat_edit_info('CLEAR', '', '', '', '', '', '', '');		
		-- DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_result_k_x_t`;	
	leave S__pozycje_cenyrabat_xxpo_e_one_rec;
	
	END IF;
	
	
	IF FALSE AND _MODE != '' THEN
		CALL cenyrabat_edit_info('INIT', '', '', '', '', '', '', '');		
		TRUNCATE `t_cenyrabat_edit_info`;
		SET _SQLText = 
		"
		INSERT INTO `t_cenyrabat_edit_info`
			(KontrGUID, PlatnikGUID, Rodzaj, CzyCenaSprzedazy, CzyRabatyHierarchiczne, DataSprzed, Kontrah_KlasaRabatowa,
			IdnTowr, Kontrah_TreeNode, Kontrah_KlasaCenowa, Kontrah_Rabat, Waluta, AkwizytorGUID,
			Towar_TreeNode, Towar_KalasaRabatowa, Towar_CenaEwid, Towar_Cenazkpnet, Towar_nie_realizuje_zamow)
			SELECT
				n.KontrGUID,
				n.PlatnikGUID, 
				@Rodzaj := n.Rodzaj,
				0 AS CzyCenaSprzedazy, --	na razie bo potem ust. by rodzaj
				@session.HT.IR.RabatyHierarchiczne,
				IFNULL(n.#DataSprzed#, CURRENT_DATE()),	--	zm.terminrealizacji
				IFNULL(k.KlasaRabatowa, 0),
				
				p.IdnTowr,
				k.Treenode AS Kontrah_TreeNode, 
				(@Kontrah_KlasaCenowa := IF(p.IdnCennik != 0, p.IdnCennik, n.#kontrklasacenowa#)) AS Kontrah_KlasaCenowa,		-- lub klasacenowa
				#kontrrabat#,	-- zm.rabat
				n.Waluta,
				n.AkwizytorGUID,
				
				t.TreeNode,
				t.klasarabatowa,
				IFNULL(t.cenaewid, 0) AS cenaewid,
				t.cenazkpnet, 
				t.nie_realizuje_zamow
			FROM `#xxpo_e#` p
			INNER JOIN `#xxng_e#` n ON n.GUID = p.#IdnOper#
			INNER JOIN `kontrah` k ON k.GUID = #n.KontrGUID#
			INNER JOIN `TowrNg` t ON t.GUID = p.IdnTowr
			WHERE
				p.GUID = '#_GUID#'
				AND
				#TAG#
			LIMIT 1
		;
		"
		;
		SET _SQLText = REPLACE(_SQLText, '#kontrklasacenowa#', IF(_MODE != 'ZM', 'kontrklasacenowa', 'klasacenowa'));
		SET _SQLText = REPLACE(_SQLText, '#kontrrabat#', IF(_MODE != 'ZM', 'n.kontrrabat', 'GREATEST(IFNULL(n.rabat, 0), k.Rabat)'));
		SET _SQLText = REPLACE(_SQLText, '#DataSprzed#', IF(_MODE != 'ZM', 'DataSprzed', 'terminrealizacji'));
		SET _SQLText = REPLACE(_SQLText, '#xxng_e#', IF(_MODE != 'ZM', 'opng_e', 'zmng_e'));
		SET _SQLText = REPLACE(_SQLText, '#xxpo_e#', IF(_MODE != 'ZM', 'oppo_e', 'zmpo_e'));
		SET _SQLText = REPLACE(_SQLText, '#_GUID#', _GUID);
		SET _SQLText = REPLACE(_SQLText, '#IdnOper#', IF(_MODE != 'ZM', 'IdnOper', 'IdnNG'));
		SET _SQLText = REPLACE(_SQLText, '#TAG#', IF(_for_Tagged, ' p.Tag = 1 ', ' TRUE '));
		SET _SQLText = REPLACE(_SQLText, '#n.KontrGUID#', IF(true /*wgplatnika - sprawdzic, czy moze byc inaczej i dla kogo*/, 'n.PlatnikGUID', 'n.KontrGUID'));

		SET @_SQLText = _SQLText;
		SET @_SQLText1 = _SQLText;
		SET @_SQLText_CenyRabaty__Init = _SQLText;
		CALL _ExecuteCmd(_SQLText, @Error);
		
		CALL ht_rodzaj_calc(@Rodzaj);
		IF @ht.doc.TwTyp = @ht.TwZm THEN
			SET @FCzyCenaSprzedazy := (@ht.doc.Rodzaj in (@ht.CZmOO, @ht.CZmEx, @ht.CZmZP, @ht.CZmOF));
		ELSEIF @ht.doc.Rodzaj IN (@ht.CRzRW, @ht.CRzKR, @ht.CPzKW) THEN
			SET @FCzyCenaSprzedazy := @Kontrah_KlasaCenowa <> 0; 
		ELSE	
			SET @FCzyCenaSprzedazy := (@ht.doc.TwTyp <> @ht.TwPz) or (@ht.doc.Rodzaj = @ht.CMGZW);
		END IF;	
		
		-- SET @CzyCenaSprzedazy = @FCzyCenaSprzedazy;
		
		SET @_CzyPrzypisywacCenyEwid = 
			NOT @FCzyCenaSprzedazy AND (
				(@session.HT.IR.PrzypisywacCenyEwidDoPW AND @Rodzaj IN (13, 15)) OR	--	PW i -PW
				(@session.HT.IR.PrzypisywacCenyEwidDoRW AND @Rodzaj IN (11, 14)) OR	--	RW i -RW
				(@session.HT.IR.PrzypisywacCenyEwidDoPW AND @Rodzaj IN (39, 67, 68)) 	--	Inwentaryzacja i inw. nadw, niedob. UWAGA czy tu nie powinno byc @session.HT.IR.PrzypisywacCenyEwidDoINWENT
			)
		;
		
		
		SET @Kurs = 1;
		SELECT 
			k.kurs INTO @Kurs
		FROM `t_cenyrabat_edit_info` tci
		LEFT JOIN `kursy` k ON k.idnwaluty = tci.Waluta AND k.idn_tab_kurs = tci.Idn_tab_kurs
		ORDER BY data DESC 
		LIMIT 1
		;
		UPDATE `t_cenyrabat_edit_info` tci
		SET
			tci.Last_Kurs_For_Waluta = IFNULL(@Kurs, 1),
			CzyCenaSprzedazy = @FCzyCenaSprzedazy
		;	
		
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_ALL', '', '', '', '', '', '', '1');		-- bez selecta
	--	tezraz zrób update oppo_e
		
		SET _SQLText = 
		"
		UPDATE `#xxpo_e#` p, `t_cenyrabat_edit_result_k_x_t` t
		SET
			p.Rodzaj_Przeliczenia = 
				IF(NOT t.czy_ceny_brt,
					IF(p.Rodzaj_Przeliczenia != @ht._BN_CN_WN,
						@ht._NB_CN_WN,
						p.Rodzaj_Przeliczenia
					),	
					@ht._BN_CB_WN
				),
					
			p.CenaNet = 
				IF(NOT t.czy_ceny_brt,
					t.Cena,
					p.CenaNet
				),	
			p.CenaBrt = 
				IF(NOT t.czy_ceny_brt,
					p.CenaBrt,
					t.Cena
				),	
			p.Rabat = #rabat#, 
			p.idncennik = 
				IF(t.RabatType != 8,	 -- nie jest to pozycja z oferty gdy RabatType <> 8 czyli <> CRT_OFERTA
					t.KlasaCenowa,
					p.idncennik
				),	
			p.wartnet = 
				IF((t.Towar_nie_realizuje_zamow <> 0) AND (@session.globals.Owner = 'PLISZKA'),
					0,
					p.wartnet
				)	
			
		WHERE
			p.GUID = '#_GUID#'
			AND
			#TAG#
		;
		"
		;
		SET _SQLText = REPLACE(_SQLText, '#xxpo_e#', IF(_MODE != 'ZM', 'oppo_e', 'zmpo_e'));
		SET _SQLText = REPLACE(_SQLText, '#_GUID#', _GUID);
		SET _SQLText = REPLACE(_SQLText, '#IdnOper#', IF(_MODE != 'ZM', 'IdnOper', 'IdnNG'));
		SET _SQLText = REPLACE(_SQLText, '#TAG#', IF(_for_Tagged, ' p.Tag = 1 ', ' TRUE '));
		SET _SQLText = REPLACE(_SQLText, '#rabat#', IF(_rabat_fixed, 'p.Rabat', 't.Rabat'));
		SET @_SQLText = _SQLText;
		SET @_SQLText2 = _SQLText;
		SET @_SQLText_CenyRabaty__Update = _SQLText;
		-- LEAVE S__pozycje_cenyrabat_xxpo_e_one_rec;
		CALL _ExecuteCmd(_SQLText, @Error);
		
		-- CALL cenyrabat_edit_info('CLEAR', '', '', '', '', '', '', '');		
		-- DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_result_k_x_t`;
	END IF;		--	_MODE = ''
	
	
END$$

DROP PROCEDURE IF EXISTS `_pozycje_cenyrabat_oppo_e`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_pozycje_cenyrabat_oppo_e`(
	IN _MODE VARCHAR(150),
	IN _GUID VARCHAR(38),	--	GUID pozycji
	IN _for_Tagged BOOLEAN,	--	rob tylko dla zaznaczonych
	IN _rabat_fixed BOOLEAN,	--	nie ruszaj zwrotnie np. rabatu
	IN _Param_A VARCHAR(50),	--	
	IN _Param_B VARCHAR(50)	--	
)
/*
	CALL _pozycje_cenyrabat_oppo_e('', _GUID, FALSE, FALSE, '', '');	--	dla pozycji _GUID
	CALL _pozycje_cenyrabat_oppo_e('dla.IdnOper', @IdnOper, FALSE, FALSE, '', '');	--	dla wszystkich pozycji o IdnOper = _IdnOper
	CALL _pozycje_cenyrabat_oppo_e('dla.IdnOper', @IdnOper, TRUE, FALSE, '', '');	--	dla wszystkich pozycji o IdnOper = _IdnOper ALE zaznaczonych
*/
S_pozycje_cenyrabat_oppo_e: BEGIN

	IF _MODE = 'dla.IdnOper' THEN
	
		BEGIN
			DECLARE _oppoGUID VARCHAR(38);
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE c_proc CURSOR FOR
				SELECT 
					p.GUID
				FROM `oppo_e` p
				WHERE
					p.IdnOper = _GUID
					AND 
					IF(_Param_B != '', p.Tag = 1, TRUE)	-- dla zaznaczonych
			;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			OPEN c_proc;
			loop1: LOOP
				FETCH c_proc INTO
					_oppoGUID
				;
				IF done THEN
					LEAVE loop1;
				ELSE
				--	kolejny rekord
					CALL _pozycje_cenyrabat_oppo_e('', _oppoGUID, _for_Tagged, _rabat_fixed, '', '');	
				END IF;
			END LOOP;
			CLOSE c_proc;
		END;
		
		LEAVE S_pozycje_cenyrabat_oppo_e;
	END IF;		--	_MODE = 'dla.IdnOper'
		
	IF _MODE = '' THEN
		CALL _pozycje_cenyrabat_xxpo_e_one_rec('OP', _GUID, _for_Tagged, _rabat_fixed, '', '');	
	END IF;		--	_MODE = ''
END$$

DROP PROCEDURE IF EXISTS `_pozycje_cenyrabat_zmpo_e`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_pozycje_cenyrabat_zmpo_e`(
	IN _MODE VARCHAR(150),
	IN _GUID VARCHAR(38),	--	GUID pozycji
	IN _for_Tagged BOOLEAN,	--	rob tylko dla zaznaczonych
	IN _rabat_fixed BOOLEAN,	--	nie ruszaj zwrotnie np. rabatu
	IN _Param_A VARCHAR(50),	--	
	IN _Param_B VARCHAR(50)	--	
)
/*
	CALL _pozycje_cenyrabat_zmpo_e('', _GUID, FALSE, FALSE, '', '');	--	dla pozycji _GUID
	CALL _pozycje_cenyrabat_zmpo_e('dla.IdnOper', @IdnOper, FALSE, FALSE, '', '');	--	dla wszystkich pozycji o IdnOper = _IdnOper
	CALL _pozycje_cenyrabat_zmpo_e('dla.IdnOper', @IdnOper, TRUE, FALSE, '', '');	--	dla wszystkich pozycji o IdnOper = _IdnOper ALE zaznaczonych
*/
S_pozycje_cenyrabat_zmpo_e: BEGIN

	IF _MODE = 'dla.IdnOper' THEN
	
		BEGIN
			DECLARE _zmpoGUID VARCHAR(38);
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE c_proc CURSOR FOR
				SELECT 
					p.GUID
				FROM `zmpo_e` p
				WHERE
					p.IdnNg = _GUID
					AND 
					IF(_Param_B != '', p.Tag = 1, TRUE)	-- dla zaznaczonych
			;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			OPEN c_proc;
			loop1: LOOP
				FETCH c_proc INTO
					_zmpoGUID
				;
				IF done THEN
					LEAVE loop1;
				ELSE
				--	kolejny rekord
					CALL _pozycje_cenyrabat_zmpo_e('', _zmpoGUID, _for_Tagged, _rabat_fixed, '', '');	
				END IF;
			END LOOP;
			CLOSE c_proc;
		END;
		
		LEAVE S_pozycje_cenyrabat_zmpo_e;
	END IF;		--	_MODE = 'dla.IdnOper'
		
	IF _MODE = '' THEN
		CALL _pozycje_cenyrabat_xxpo_e_one_rec('ZM', _GUID, _for_Tagged, _rabat_fixed, '', '');	
	END IF;		--	_MODE = ''
END$$

DROP PROCEDURE IF EXISTS `_pozycje_cenyrabat_TE_zmpo`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_pozycje_cenyrabat_TE_zmpo`(
	IN _MODE VARCHAR(150),
	IN _GUID VARCHAR(38),	--	GUID pozycji
	IN _for_Tagged BOOLEAN,	--	rob tylko dla zaznaczonych
	IN _rabat_fixed BOOLEAN,	--	nie ruszaj zwrotnie np. rabatu
	IN _Param_A VARCHAR(50),	--	
	IN _Param_B VARCHAR(50)	--	
)
/*
	CALL _pozycje_cenyrabat_TE_zmpo('', _GUID, FALSE, FALSE, '', '');	--	dla pozycji _GUID
	CALL _pozycje_cenyrabat_TE_zmpo('dla.IdnOper', @IdnOper, FALSE, FALSE, '', '');	--	dla wszystkich pozycji o IdnOper = _IdnOper
	CALL _pozycje_cenyrabat_TE_zmpo('dla.IdnOper', @IdnOper, TRUE, FALSE, '', '');	--	dla wszystkich pozycji o IdnOper = _IdnOper ALE zaznaczonych
*/
S_pozycje_cenyrabat_TE_zmpo: BEGIN

	IF _MODE = 'dla.IdnOper' THEN
	
		BEGIN
			DECLARE _zmpoGUID VARCHAR(38);
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE c_proc CURSOR FOR
				SELECT 
					p.GUID
				FROM `TE_zmpo` p
				WHERE
					p.IdnNg = _GUID
					AND 
					IF(_Param_B != '', p.Tag = 1, TRUE)	-- dla zaznaczonych
			;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			OPEN c_proc;
			loop1: LOOP
				FETCH c_proc INTO
					_zmpoGUID
				;
				IF done THEN
					LEAVE loop1;
				ELSE
				--	kolejny rekord
					-- CALL _pozycje_cenyrabat_TE_zmpo('', _zmpoGUID, _for_Tagged, _rabat_fixed, '', '');	
					CALL _pozycje_cenyrabat_xxpo_e_one_rec('ZM:TE', _zmpoGUID, _for_Tagged, _rabat_fixed, '', '');	
				END IF;
			END LOOP;
			CLOSE c_proc;
		END;
		
		LEAVE S_pozycje_cenyrabat_TE_zmpo;
	END IF;		--	_MODE = 'dla.IdnOper'
		
	IF _MODE = '' THEN
		CALL _pozycje_cenyrabat_xxpo_e_one_rec('ZM:TE', _GUID, _for_Tagged, _rabat_fixed, '', '');	
	END IF;		--	_MODE = ''
END$$

DROP PROCEDURE IF EXISTS `_pozycje_cenyrabat_TE_oppo`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_pozycje_cenyrabat_TE_oppo`(
	IN _MODE VARCHAR(150),
	IN _GUID VARCHAR(38),	--	GUID pozycji
	IN _for_Tagged BOOLEAN,	--	rob tylko dla zaznaczonych
	IN _rabat_fixed BOOLEAN,	--	nie ruszaj zwrotnie np. rabatu
	IN _Param_A VARCHAR(50),	--	
	IN _Param_B VARCHAR(50)	--	
)
/*
	CALL _pozycje_cenyrabat_TE_oppo('', _GUID, FALSE, FALSE, '', '');	--	dla pozycji _GUID
	CALL _pozycje_cenyrabat_TE_oppo('dla.IdnOper', @IdnOper, FALSE, FALSE, '', '');	--	dla wszystkich pozycji o IdnOper = _IdnOper
	CALL _pozycje_cenyrabat_TE_oppo('dla.IdnOper', @IdnOper, TRUE, FALSE, '', '');	--	dla wszystkich pozycji o IdnOper = _IdnOper ALE zaznaczonych
*/
S_pozycje_cenyrabat_TE_oppo: BEGIN

	IF _MODE = 'dla.IdnOper' THEN
	
		BEGIN
			DECLARE _oppoGUID VARCHAR(38);
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE c_proc CURSOR FOR
				SELECT 
					p.GUID
				FROM `TE_oppo` p
				WHERE
					p.IdnOper = _GUID
					AND 
					IF(_Param_B != '', p.Tag = 1, TRUE)	-- dla zaznaczonych
			;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			OPEN c_proc;
			loop1: LOOP
				FETCH c_proc INTO
					_oppoGUID
				;
				IF done THEN
					LEAVE loop1;
				ELSE
				--	kolejny rekord
					CALL _pozycje_cenyrabat_TE_oppo('', _oppoGUID, _for_Tagged, _rabat_fixed, '', '');	
				END IF;
			END LOOP;
			CLOSE c_proc;
		END;
		
		LEAVE S_pozycje_cenyrabat_TE_oppo;
	END IF;		--	_MODE = 'dla.IdnOper'
		
	IF _MODE = '' THEN
		CALL _pozycje_cenyrabat_xxpo_e_one_rec('OP:TE', _GUID, _for_Tagged, _rabat_fixed, '', '');	
	END IF;		--	_MODE = ''
END$$


-- !!! JUŻ nie uzywana w zasadzie {90C0DBE0-81C4-49FA-9BE0-B1BDB7317D43}
DROP PROCEDURE IF EXISTS `pozycje_cenyrabat_oppo_e`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pozycje_cenyrabat_oppo_e`(
	IN _MODE VARCHAR(150),
	IN _GUID VARCHAR(38),	--	GUID pozycji
	IN _IdnTowr VARCHAR(38),	--	nie konieczny
	IN _Param_A VARCHAR(50),	--	nie ruszaj zwrotnie np. rabatu
	IN _Param_B VARCHAR(50)	--	rob tylko dla zaznaczonych
)
/*
	CALL pozycje_cenyrabat_oppo_e('', _GUID, '', '', '');	--	dla pozycji _GUID
	CALL pozycje_cenyrabat_oppo_e('dla.IdnOper', _IdnOper, '', '', '');	--	dla wszystkich pozycji o IdnOper = _IdnOper
	CALL pozycje_cenyrabat_oppo_e('dla.IdnOper', _IdnOper, '', '', '1');	--	dla wszystkich pozycji o IdnOper = _IdnOper ALE zaznaczonych
*/
S_pozycje_cenyrabat_oppo_e: BEGIN

		/*
		_Param_A != '' = nie ruszaj zwrotnie np. rabatu
		_Param_B != '' = rob tylko dla zaznaczonych
		SET	@CzyCenaSprzedazy = _VarInt_NotNull(_Param_C);
		SET @Rodzaj = _VarInt_NotNull(_Param_B);
		SET _DataSprzed = DATE(_Param_E);
		SET _DataSprzed = IFNULL(_DataSprzed, current_date);
		IF _DataSprzed < '1900-01-01' THEN
			SET _DataSprzed = current_date;
		END IF;
		*/
		/*
		select max(datasprzed) as datasprzed, (katcol0 = 2) As IsKlatkowiec, kontrsymbol from opng where kontrguid = @kontrguid and rodzaj in (0,1,2) and datasprzed < current_date;
		klatkowiec to 
		katcol0 = 2 w kontrah
		*/
		
	--	standardowe przeliczenie cena net.->rabat->wart.wal.
		DECLARE _NB_CN_WN  INTEGER DEFAULT 0;	-- CRodzaj_Przeliczenia_CenaNet_NettoWal
	--	z wart.wal->(rabat nie ruszany)->cena net.	
		DECLARE _NB_WN_CN  INTEGER DEFAULT 1;	-- CRodzaj_Przeliczenia_NettoWal_CenaNet
	--	z wart.wal->rabat	
		DECLARE _NB_WN_R   INTEGER DEFAULT 2;	-- CRodzaj_Przeliczenia_NettoWal_Rabat
	--	fiskalne z brutto->netto  (fiskalne)	z ceny netto -> wrt brutto, -> ceny brutto (zaokr), -> i dalej jak dla _BN_CB_WN
		DECLARE _BN_CN_WN  INTEGER DEFAULT 3;	-- CRodzaj_Przeliczenia_Brutto_Netto
	--	z wart brutto->netto							
		DECLARE _BN_WB_WN  INTEGER DEFAULT 4;	-- CRodzaj_Przeliczenia_Brutto_Netto2
	--	z ceny brutto->netto	
		DECLARE _BN_CB_WN  INTEGER DEFAULT 5;	-- CRodzaj_Przeliczenia_CenaBrutto_Netto
	--	z wart.wal->(rabat nie ruszany)->cena net. wart vat edytowana	
		DECLARE _BN_WN_CNve  INTEGER DEFAULT 6;	-- CRodzaj_Przeliczenia_NettoWal_CenaNet_VatEdyt

		DECLARE _for_oppo  BOOLEAN DEFAULT TRUE;	-- domyslnie ceny dla oppo
		
	IF _MODE = 'dla.IdnOper' THEN
	
		BEGIN
			DECLARE _oppoGUID VARCHAR(38);
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE c_proc CURSOR FOR
				SELECT 
					p.GUID
				FROM `oppo_e` p
				WHERE
					p.IdnOper = _GUID
					AND 
					IF(_Param_B != '', p.Tag = 1, TRUE)	-- dla zaznaczonych
			;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			OPEN c_proc;
			loop1: LOOP
				FETCH c_proc INTO
					_oppoGUID
				;
				IF done THEN
					LEAVE loop1;
				ELSE
				--	kolejny rekord
					CALL pozycje_cenyrabat_oppo_e('', _oppoGUID, '', _Param_A, _Param_B);		
				END IF;
			END LOOP;
			CLOSE c_proc;
		END;
		
		LEAVE S_pozycje_cenyrabat_oppo_e;
	END IF;		--	_MODE = 'dla.IdnOper'
		
	IF _MODE = '' THEN
		CALL cenyrabat_edit_info('INIT', '', '', '', '', '', '', '');		
		TRUNCATE `t_cenyrabat_edit_info`;
		INSERT INTO `t_cenyrabat_edit_info`
			(KontrGUID, Rodzaj, CzyCenaSprzedazy, CzyRabatyHierarchiczne, DataSprzed, Kontrah_KlasaRabatowa,
			IdnTowr, Kontrah_TreeNode, Kontrah_KlasaCenowa, Kontrah_Rabat, Waluta, AkwizytorGUID,
			Towar_TreeNode, Towar_KalasaRabatowa, Towar_CenaEwid, Towar_Cenazkpnet, Towar_nie_realizuje_zamow)
			SELECT
				n.KontrGUID,
				@Rodzaj := n.Rodzaj,
				0 AS CzyCenaSprzedazy, --
				@session.HT.IR.RabatyHierarchiczne,
				n.DataSprzed,	--	zm.terminrealizacji
				IFNULL(k.KlasaRabatowa, 0),
				
				p.IdnTowr,
				k.Treenode AS Kontrah_TreeNode, 
				IF(p.IdnCennik != 0, p.IdnCennik, n.kontrklasacenowa) AS Kontrah_KlasaCenowa,		-- lub klasacenowa
				n.kontrrabat,	-- zm.rabat
				n.Waluta,
				n.AkwizytorGUID,
				
				t.TreeNode,
				t.klasarabatowa,
				IFNULL(t.cenaewid, 0) AS cenaewid,
				t.cenazkpnet,
				t.nie_realizuje_zamow
			FROM `oppo_e` p
			INNER JOIN `opng_e` n ON n.GUID = p.IdnOper
			INNER JOIN `kontrah` k ON k.GUID = n.KontrGUID
			INNER JOIN `TowrNg` t ON t.GUID = p.IdnTowr
			WHERE
				p.GUID = _GUID
				AND 
				IF(_Param_B != '', p.Tag = 1, TRUE)	-- dla zaznaczonych
		;	
		
		SET @_CzyPrzypisywacCenyEwid = 
			NOT @CzyCenaSprzedazy AND (
				(@session.HT.IR.PrzypisywacCenyEwidDoPW AND @Rodzaj IN (13, 15)) OR	--	PW i -PW
				(@session.HT.IR.PrzypisywacCenyEwidDoRW AND @Rodzaj IN (11, 14)) OR	--	RW i -RW
				(@session.HT.IR.PrzypisywacCenyEwidDoPW AND @Rodzaj IN (39, 67, 68)) 	--	Inwentaryzacja i inw. nadw, niedob. UWAGA czy tu nie powinno byc @session.HT.IR.PrzypisywacCenyEwidDoINWENT
			)
		;
		CALL ht_rodzaj_calc(@Rodzaj);
		IF @ht.doc.TwTyp = @ht.TwZm THEN				
			SET @FCzyCenaSprzedazy := (@ht.doc.Rodzaj in (@ht.CZmOO, @ht.CZmEx, @ht.CZmZP, @ht.CZmOF));
		ELSEIF @ht.doc.Rodzaj IN (@ht.CRzRW, @ht.CRzKR, @ht.CPzKW) THEN
			SET @FCzyCenaSprzedazy := @Kontrah_KlasaCenowa <> 0;
		ELSE	
			SET @FCzyCenaSprzedazy := (@ht.doc.TwTyp <> @ht.TwPz) or (@ht.doc.Rodzaj = @ht.CMGZW);
		END IF;	

		
		SET @Kurs = 1;
		SELECT 
			k.kurs INTO @Kurs
		FROM `t_cenyrabat_edit_info` tci
		LEFT JOIN `kursy` k ON k.idnwaluty = tci.Waluta AND k.idn_tab_kurs = tci.Idn_tab_kurs
		ORDER BY data DESC 
		LIMIT 1
		;
		UPDATE `t_cenyrabat_edit_info` tci
		SET
			tci.Last_Kurs_For_Waluta = IFNULL(@Kurs, 1),
			CzyCenaSprzedazy = @FCzyCenaSprzedazy
		;	
		
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_ALL', '', '', '', '', '', '', '1');		-- bez selecta
	--	tezraz zrób update oppo_e
		
		UPDATE `oppo_e` p, `t_cenyrabat_edit_result_k_x_t` t
		SET
			p.Rodzaj_Przeliczenia = 
				IF(NOT t.czy_ceny_brt,
					IF(p.Rodzaj_Przeliczenia != _BN_CN_WN,
						_NB_CN_WN,
						p.Rodzaj_Przeliczenia
					),	
					_BN_CB_WN
				),
					
			p.CenaNet = 
				IF(NOT t.czy_ceny_brt,
					t.Cena,
					p.CenaNet
				),	
			p.CenaBrt = 
				IF(NOT t.czy_ceny_brt,
					p.CenaBrt,
					t.Cena
				),	
			p.Rabat = IF(_Param_A != '', p.Rabat, t.Rabat),
			p.idncennik = 
				IF(t.RabatType != 8,	 -- nie jest to pozycja z oferty gdy RabatType <> 8 czyli <> CRT_OFERTA
					t.KlasaCenowa,
					p.idncennik
				),	
			p.wartnet = 
				IF((t.Towar_nie_realizuje_zamow <> 0) AND (@session.globals.Owner = 'PLISZKA'),
					0,
					p.wartnet
				)	
			
		WHERE
			p.GUID = _GUID
			AND 
			IF(_Param_B != '', p.Tag = 1, TRUE)	-- dla zaznaczonych
		;
		CALL cenyrabat_edit_info('CLEAR', '', '', '', '', '', '', '');		
		DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_result_k_x_t`;
	END IF;		--	_MODE = ''
END$$

/* ************************************************************************************************************************************************************************
	Naliczanie cen
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `cenyrabat_edit_info`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `cenyrabat_edit_info`(
	IN _MODE VARCHAR(150),
	IN _Param_A VARCHAR(250),	
	IN _Param_B VARCHAR(250),	
	IN _Param_C VARCHAR(250),	
	IN _Param_D VARCHAR(250),	
	IN _Param_E VARCHAR(250),	
	IN _Param_F VARCHAR(250),	
	IN _Param_G VARCHAR(250)	
)
S_cenyrabat_edit_info: BEGIN

	-- dla pola RabatType 
	DECLARE CRT_DEFAULT INTEGER DEFAULT 0;
	DECLARE CRT_AKWIZYTOR INTEGER DEFAULT 1;
	DECLARE CRT_TABRABAT INTEGER DEFAULT 2;
	DECLARE CRT_MATRAB INTEGER DEFAULT 4;
	DECLARE CRT_OFERTA INTEGER DEFAULT 8;

	IF _MODE = 'CLEAR' THEN
		SET @t_cenyrabat_edit_info.temporary.table = NULL;
		LEAVE S_cenyrabat_edit_info;

		DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_info`;
		DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_result`;
		LEAVE S_cenyrabat_edit_info;
	END IF;	--	IF _MODE = 'CLEAR'
	
	
	IF _MODE = 'aINIT' THEN
		DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_info`;
		CREATE TEMPORARY TABLE `t_cenyrabat_edit_info`(
			KontrGUID VARCHAR(38) NOT NULL DEFAULT '',
			PlatnikGUID VARCHAR(38) NOT NULL DEFAULT '',
			IdnTowr VARCHAR(38) NOT NULL DEFAULT '',
			AkwizytorGUID VARCHAR(38) NOT NULL DEFAULT '',
			Rodzaj INT(11),
			CzyCenaSprzedazy INT(11),
			DataSprzed DATE,
			CzyRabatyHierarchiczne INT(11),
			
			Kontrah_TreeNode VARCHAR(250) NOT NULL DEFAULT '',
			Kontrah_KlasaCenowa INT(11) NOT NULL DEFAULT 0,
			Kontrah_KlasaRabatowa INT(11) NOT NULL DEFAULT 0,
			Kontrah_Rabat DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			
			Towar_TreeNode VARCHAR(250) NOT NULL DEFAULT '',
			Towar_KalasaRabatowa INT(11) NOT NULL DEFAULT 0,
			Towar_CenaEwid DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			Towar_Cenazkpnet DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			Towar_nie_realizuje_zamow INT(11) NOT NULL DEFAULT 0,
			--  dla Pliszki??? sprawdzic!!!	Towar_nie_realizuje_zamow int(11),
			
			Default_KlasaCenowa INT(11) NOT NULL DEFAULT 0,
			Default_Cena DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			Default_Waluta INT(11) NOT NULL DEFAULT 0,
			
			Waluta INT(11) NOT NULL DEFAULT 0,
			Idn_tab_kurs INT(11) NOT NULL DEFAULT 0,
			Last_Kurs_For_Waluta DOUBLE(16,4) NOT NULL DEFAULT '1.0000',	--	NIE UZYWANA KOLUMNA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			PRIMARY KEY (`IdnTowr`)
		) ENGINE MEMORY;
		
		DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_result`;
		CREATE TEMPORARY TABLE `t_cenyrabat_edit_result`(
			RabatType INT(11) NOT NULL DEFAULT 0,
			KlasaCenowa INT(11) NOT NULL DEFAULT 0,
			Waluta INT(11) NOT NULL DEFAULT 0,
			czy_ceny_brt INT(11) DEFAULT 0,
			CenaWal DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			Cena DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			Rabat DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			-- CenaAddWal DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			-- CenaAdd DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			CenaObl DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
			AskExist INT(11) NOT NULL DEFAULT 0,
			WarunekMsg VARCHAR(250) DEFAULT '',
			AskMsg TEXT,
			priorytet INT(11) NOT NULL DEFAULT 0,
			internal_ord INT(11) NOT NULL DEFAULT 0,
			Towar_nie_realizuje_zamow INT(11) NOT NULL DEFAULT 0,
			I_cenyPrecision INT(11) NOT NULL DEFAULT 2
		) ENGINE MYISAM;
		LEAVE S_cenyrabat_edit_info;
	END IF;	--	IF _MODE = 'INIT'
	
	
	IF _MODE = 'INIT' THEN
		SET @t_cenyrabat_edit_info.temporary.table = IFNULL(@t_cenyrabat_edit_info.temporary.table, FALSE);
		
		IF NOT @t_cenyrabat_edit_info.temporary.table THEN
			DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_info`;
			CREATE TEMPORARY TABLE `t_cenyrabat_edit_info`(
				KontrGUID VARCHAR(38) NOT NULL DEFAULT '',
				PlatnikGUID VARCHAR(38) NOT NULL DEFAULT '',
				IdnTowr VARCHAR(38) NOT NULL DEFAULT '',
				AkwizytorGUID VARCHAR(38) NOT NULL DEFAULT '',
				Rodzaj int(11),
				CzyCenaSprzedazy int(11),
				DataSprzed DATE,
				CzyRabatyHierarchiczne int(11),
				
				Kontrah_TreeNode VARCHAR(250) NOT NULL DEFAULT '',
				Kontrah_KlasaCenowa int(11) NOT NULL DEFAULT 0,
				Kontrah_KlasaRabatowa int(11) NOT NULL DEFAULT 0,
				Kontrah_Rabat DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				
				Towar_TreeNode VARCHAR(250) NOT NULL DEFAULT '',
				Towar_KalasaRabatowa int(11) NOT NULL DEFAULT 0,
				Towar_CenaEwid DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				Towar_Cenazkpnet DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				Towar_nie_realizuje_zamow int(11) NOT NULL DEFAULT 0,
				--  dla Pliszki??? sprawdzic!!!	Towar_nie_realizuje_zamow int(11),
				
				Default_KlasaCenowa int(11) NOT NULL DEFAULT 0,
				Default_Cena DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				Default_Waluta int(11) NOT NULL DEFAULT 0,
				
				Waluta int(11) NOT NULL DEFAULT 0,
				Idn_tab_kurs int(11) NOT NULL DEFAULT 0,
				Last_Kurs_For_Waluta DOUBLE(16,4) NOT NULL DEFAULT '1.0000',	--	NIE UZYWANA KOLUMNA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
				PRIMARY KEY (`IdnTowr`)
			);
			DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_result`;
			CREATE TEMPORARY TABLE `t_cenyrabat_edit_result`(
				RabatType int(11) NOT NULL DEFAULT 0,
				KlasaCenowa int(11) NOT NULL DEFAULT 0,
				Waluta int(11) NOT NULL DEFAULT 0,
				czy_ceny_brt int(11) DEFAULT 0,
				CenaWal DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				Cena DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				Rabat DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				-- CenaAddWal DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				-- CenaAdd DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				CenaObl DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
				AskExist int(11) NOT NULL DEFAULT 0,
				WarunekMsg VARCHAR(250) DEFAULT '',
				AskMsg TEXT,
				priorytet int(11) NOT NULL DEFAULT 0,
				internal_ord int(11) NOT NULL DEFAULT 0,
				Towar_nie_realizuje_zamow int(11) NOT NULL DEFAULT 0,
				I_cenyPrecision int(11) NOT NULL DEFAULT 2
			);
		END IF;
		LEAVE S_cenyrabat_edit_info;
	END IF;	--	IF _MODE = 'INIT'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'CALC_CENA_RABAT_CALC_ALL'
		Parametry brak
			_Param_G	!= '' to nie zwracam wyniku (selct)
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_ALL', '', '', '', '', '', '', '');		
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_ALL', '', '', '', '', '', '', '1');		-- bez selecta
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'CALC_CENA_RABAT_CALC_ALL' THEN
		SET _Param_A = IFNULL(_Param_A, 0);
		SELECT CzyCenaSprzedazy INTO @CzyCenaSprzedazy FROM `t_cenyrabat_edit_info` LIMIT 1;
		
		IF @CzyCenaSprzedazy THEN
		-- S P R Z E D A Z
			CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_DEFAULT', '', '', '', '', '', '', '');		
			IF _Param_A = 0 THEN
				CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_OFERTA', '', '', '', '', '', '', '');		
				-- testuj bo gdy jest oferta to rezygnuj
				CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_MATRAB', '', '', '', '', '', '', '');		
				CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_TABRABAT', '', '', '', '', '', '', '');		
			END IF;
			
		ELSE
		-- Z A K U P Y
			CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_DEFAULT', '', '', '', '', '', '', '');		
			IF NOT @_CzyPrzypisywacCenyEwid THEN
				CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_OFERTA', '', '', '', '', '', '', '');		
			END IF;	
		
		END IF;
	--	Jeszcze przelicz	
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_UPATE_AFTER', '', '', '', '', '', '', '');		
		
		IF IFNULL(_Param_G, '') = '' THEN
		--	Select zwracany	
			SELECT 
				IF(RabatType = CRT_DEFAULT, 
					'DEFAULT',
					IF(RabatType = CRT_AKWIZYTOR,
						'AKWIZ',
						IF(RabatType = CRT_TABRABAT,
							'TABRABAT',
							IF(RabatType = CRT_MATRAB,
								'MATRAB',
								IF(RabatType = CRT_OFERTA,
									'OFERTA',
									'DEFAULT'
								)
							)
						)
					)
				) AS RabatTypeLevel,
				tcr.*
			FROM `t_cenyrabat_edit_result` tcr	
			ORDER BY tcr.RabatType DESC, internal_ord
			;
		ELSE
		--	Kreuj pomocnicza dla CALL cenyrabat_edit_info('KONTR_x_TOWR_CALC', ...
			DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_result_k_x_t`;
			CREATE TEMPORARY TABLE  `t_cenyrabat_edit_result_k_x_t`
				SELECT 
				IF(RabatType = CRT_DEFAULT, 
					'DEFAULT',
					IF(RabatType = CRT_AKWIZYTOR,
						'AKWIZ',
						IF(RabatType = CRT_TABRABAT,
							'TABRABAT',
							IF(RabatType = CRT_MATRAB,
								'MATRAB',
								IF(RabatType = CRT_OFERTA,
									'OFERTA',
									'DEFAULT'
								)
							)
						)
					)
				) AS RabatTypeLevel,
				tcr.*
				FROM `t_cenyrabat_edit_result` tcr	
				ORDER BY tcr.RabatType DESC, internal_ord
				LIMIT 1
			;
		END IF;
	END IF;	--	IF _MODE = 'CALC_CENA_RABAT_CALC_ALL'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'CALC_CENA_RABAT_CALC_UPATE_AFTER'
		Parametry
			_Param_A	RabatType - gdy '' przeliczam dla wszystkiech
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_UPATE_AFTER', '', '', '', '', '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'CALC_CENA_RABAT_CALC_UPATE_AFTER' THEN
		SET _Param_A = IFNULL(_Param_A, '');
		/* jmam
		SELECT tci.Last_Kurs_For_Waluta INTO @Last_Kurs_For_Waluta FROM `t_cenyrabat_edit_info` tci;
		IF @Last_Kurs_For_Waluta != 1 AND @Last_Kurs_For_Waluta > 0 THEN
			SET @I_cenyPrecision = _VarInt(@session.HT.IR.CenyPrecisionWalutowe);
		ELSE
			SET @I_cenyPrecision = _VarInt(@session.HT.IR.CenyPrecisionPLN);
		END IF;
		*/
		UPDATE `t_cenyrabat_edit_result` tcr, `t_cenyrabat_edit_info` tci	
		SET
			tcr.I_cenyPrecision = IF(tci.Waluta <> 0, @session.HT.IR.CenyPrecisionWalutowe, @session.HT.IR.CenyPrecisionPLN),
			tcr.Towar_nie_realizuje_zamow = tci.Towar_nie_realizuje_zamow,
			tcr.Rabat = IF(tci.Towar_nie_realizuje_zamow, 100, tcr.Rabat)		--	warunek PLISZKA dla towarów z wlacz."nie_realizuje_zamow" dajemy rabat 100%
		;
		
		UPDATE `t_cenyrabat_edit_result` tcr, `t_cenyrabat_edit_info` tci, `kursy_calc` ku
		SET
			tcr.Cena = 
				IF(tcr.Waluta <> tci.Waluta,
					-- bylo Round(tcr.CenaWal*IFNULL(ku.kurs, 0), @I_cenyPrecision), 
					Round(tcr.CenaWal*IFNULL(ku.kurs, 0), tcr.I_cenyPrecision), 
					tcr.CenaWal
				)
			/*	,	
			tcr.CenaAdd = 
				IF(tcr.Waluta <> tci.Waluta,
					Round(tcr.CenaAddWal*IFNULL(ku.kurs, 0), @session.HT.IR.CenyPrecisionWalutowe),	
					tcr.CenaAddWal
				)	
			*/	
		WHERE
			IF(_Param_A = '', TRUE, tcr.RabatType = _Param_A)
			-- AND tcr.Waluta <> tci.Waluta
			AND ku.idnwaluty1 = tcr.waluta AND ku.idnwaluty2 = tci.Waluta
		;
		
		UPDATE `t_cenyrabat_edit_result` tcr, `t_cenyrabat_edit_info` tci	
		SET
			tcr.CenaObl = 
					Round((1-tcr.Rabat/100)*tcr.Cena, tcr.I_cenyPrecision)
		;	
		-- SET NAAMES 'cp1250';
		UPDATE `t_cenyrabat_edit_result` tcr
		SET
			tcr.AskMsg = 
					CONCAT(
						IF(tcr.RabatType = CRT_OFERTA,
							'Warunek zastosowania ceny specjalnej:',
							'Warunek udzielenia rabatu:'),
						'\n', '"', tcr.WarunekMsg, '"', '\n',	
						'Czy przepisać następującą pozycję:', '\n',
						'Cena wej.: ', ROUND(tcr.Cena, tcr.I_cenyPrecision), ' \n',
						IF(tcr.Rabat != 0,
							CONCAT('Rabat: ', ROUND(tcr.Rabat,2), '%\n'),
							''),
						'Cena nal.: ', ROUND(tcr.CenaObl, tcr.I_cenyPrecision), ' ?'
					)
		WHERE 
			tcr.RabatType IN (CRT_OFERTA, CRT_MATRAB)	
			AND tcr.AskExist
		;	
		
	END IF;	--	IF _MODE = 'CALC_CENA_RABAT_CALC_UPATE_AFTER'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'CALC_CENA_RABAT_CALC_DEFAULT'
		Parametry brak
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_DEFAULT', '', '', '', '', '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'CALC_CENA_RABAT_CALC_DEFAULT' THEN
		DELETE FROM `t_cenyrabat_edit_result` WHERE RabatType IN (CRT_DEFAULT, CRT_AKWIZYTOR);
		
		INSERT INTO `t_cenyrabat_edit_result`
			(RabatType, Waluta, KlasaCenowa, CenaWal, Rabat, CenaObl, czy_ceny_brt)
			SELECT
				--	CRT_DEFAULT, tci.Waluta, tci.Kontrah_KlasaCenowa, tci.Towar_CenaEwid, 0, tci.Towar_CenaEwid
				CRT_DEFAULT, tci.Waluta, tci.Kontrah_KlasaCenowa AS KlasaCenowa, IF(tci.CzyCenaSprzedazy, 0, tci.Towar_CenaEwid) AS CenaWal, tci.Kontrah_Rabat AS Rabat, 0, kl.czy_ceny_brt
			FROM `t_cenyrabat_edit_info` tci 
			LEFT JOIN klasycen kl ON kl.Idn = tci.Kontrah_KlasaCenowa
		;	
		IF @_CzyPrzypisywacCenyEwid THEN
		--	Gdy zakup i RW, PW, INW i ustawione w regu to konczymy na cenie ewidencyjnej
			CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_UPATE_AFTER', CRT_DEFAULT, '', '', '', '', '', '');		
			LEAVE S_cenyrabat_edit_info;	--	wychodze bo nie mam nic do zapisywania
		END IF;
		
		INSERT INTO `t_cenyrabat_edit_result`
			(RabatType, Waluta, KlasaCenowa, Cena, Rabat, CenaObl, czy_ceny_brt)
			SELECT
				CRT_AKWIZYTOR, tci.Waluta, tci.Kontrah_KlasaCenowa AS KlasaCenowa, 0 AS Cena, k.rabat, 0 AS CenaObl, kl.czy_ceny_brt
			FROM `t_cenyrabat_edit_info` tci 
			INNER JOIN `kontrah` k ON k.GUID = tci.AkwizytorGUID
			LEFT JOIN `klasycen` kl ON kl.Idn = tci.Kontrah_KlasaCenowa
-- 			LEFT JOIN klasycen kl ON kl.Idn = tci.Kontrah_KlasaCenowa
			WHERE
				tci.AkwizytorGUID != ''
				AND k.rabat > 0		--	WIERSZ Akwizytora (CRT_AKWIZYTOR) ma znaczenie tylko gdy jest jakis rabat!!!
-- 				AND k.GUID = tci.AkwizytorGUID
				
		;	
		
		DROP TEMPORARY TABLE IF EXISTS `t_cennik_towaru`;
		CREATE TEMPORARY TABLE `t_cennik_towaru`
		
			SELECT 
				tci.DataSprzed,
				IF(IFNULL(tci.DataSprzed BETWEEN c.waznoscod AND c.waznoscdo, TRUE),
				-- IF(tci.DataSprzed BETWEEN c.waznoscod AND c.waznoscdo, 
					IF( @session.HT.IR.Ceny_promocyjne_aktywne AND c.Cena_promocyjna != 0, 
						c.Cena_promocyjna, 
						c.cena
					),
					0 -- c.cena
				) AS Cena, 
				/*
				-- bylo IF((tci.DataSprzed between ifnull(c.waznoscod,'2000-01-01') and ifnull(c.waznoscdo,'2100-01-01')), 
				IF((tci.DataSprzed BETWEEN IFNULL(c.waznoscod,'2000-01-01') AND IF(IFNULL(c.waznoscdo, '0000-00-00') = '0000-00-00', '2100-01-01', c.waznoscdo)), 
					IF( @session.HT.IR.Ceny_promocyjne_aktywne AND c.Cena_promocyjna != 0, c.Cena_promocyjna, c.cena),
					0) AS Cena, 
				*/	
				c.waluta, 
				c.klasa, 
				IFNULL(kl.czy_ceny_brt, 0) AS czy_ceny_brt, 
				IF(tci.CzyCenaSprzedazy, 
					(c.klasa = tci.Kontrah_KlasaCenowa),
					1) AS Valid_Klasa
			FROM `t_cenyrabat_edit_info` tci	
			INNER JOIN cennik c ON c.idntowr = tci.idntowr
			LEFT JOIN klasycen kl ON kl.Idn = c.klasa
			WHERE
				c.czyzakup = IF(tci.CzyCenaSprzedazy, 0, 1)
			HAVING cena <> 0	
			ORDER BY c.klasa
			
		;
/*		
			SELECT 
				IF(((tci.DataSprzed between c.waznoscod and c.waznoscdo) and @session.HT.IR.Ceny_promocyjne_aktywne), 
					c.Cena_promocyjna, 
					c.cena) AS Cena, 
				c.waluta, 
				c.klasa, 
				IFNULL(kl.czy_ceny_brt, 0) AS czy_ceny_brt, 
				(c.klasa = tci.Kontrah_KlasaCenowa) AS Valid_Klasa
			FROM `t_cenyrabat_edit_info` tci	
			INNER JOIN cennik c ON c.idntowr = tci.idntowr
			LEFT JOIN klasycen kl ON kl.Idn = c.klasa
			WHERE
				c.czyzakup = IF(tci.CzyCenaSprzedazy, 0, 1)
			ORDER BY c.klasa
		;
*/
		
		SELECT COUNT(*) INTO @C_t_cennik_towaru FROM `t_cennik_towaru`;
		IF @C_t_cennik_towaru > 0 THEN

			SET @cena = NULL;
			--	szukam klasy i waluty
			SELECT 
				c.cena, c.waluta, c.klasa, c.czy_ceny_brt
			INTO 
				@cena, @waluta, @klasa, @czy_ceny_brt
			FROM `t_cennik_towaru` c, `t_cenyrabat_edit_info` tci
			WHERE
				c.Valid_Klasa
				AND c.Waluta = tci.Waluta
			LIMIT 1	
			;
			IF @cena IS NULL THEN
			--	gdy cena NULL to szukam tylko klasy
				SELECT 
					c.cena, c.waluta, c.klasa, c.czy_ceny_brt
				INTO 
					@cena, @waluta, @klasa, @czy_ceny_brt
				FROM `t_cennik_towaru` c
				WHERE
					c.Valid_Klasa
				LIMIT 1	
				;
			END IF;
			
			IF @cena IS NULL AND @session.HT.IR.Pobieraj_cene_z_najwyzszej_klasy_cen THEN
				SELECT 
					c.cena, c.waluta, c.klasa, c.czy_ceny_brt
				INTO 
					@cena, @waluta, @klasa, @czy_ceny_brt
				FROM `t_cennik_towaru` c
				ORDER BY c.klasa	
				LIMIT 1	
				;
			END IF;
			
			IF @cena IS NOT NULL THEN		--	JEST CENA
				--	Teraz przepisz uzyskana cenę domyślną i klasę domyślną do pól Cena i KlasaCenowa
				UPDATE `t_cenyrabat_edit_result` tcr
				SET
					tcr.CenaWal = IFNULL(@Cena, 0),
					tcr.Cena = IFNULL(@Cena, 0),
					tcr.CenaObl = IFNULL(@Cena, 0),
					tcr.KlasaCenowa = IFNULL(@klasa, 0),
					tcr.Waluta = IFNULL(@waluta, tcr.Waluta),
					tcr.czy_ceny_brt = IFNULL(@czy_ceny_brt, 0)
				WHERE
					tcr.RabatType IN (CRT_DEFAULT, CRT_AKWIZYTOR)
				;	
			END IF;
			
		END IF;
		
		-- DROP TEMPORARY TABLE IF EXISTS `t_cennik_towaru`;
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_UPATE_AFTER', CRT_DEFAULT, '', '', '', '', '', '');		
		
	END IF;	--	IF _MODE = 'CALC_CENA_RABAT_CALC_DEFAULT'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'CALC_CENA_RABAT_CALC_OFERTA'
		dla CRT_OFERTA
		Parametry brak
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_OFERTA', '', '', '', '', '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'CALC_CENA_RABAT_CALC_OFERTA' THEN
		DELETE FROM `t_cenyrabat_edit_result` WHERE RabatType = CRT_OFERTA;
		
		INSERT INTO `t_cenyrabat_edit_result`
			(RabatType, Waluta, CenaWal, Cena, Rabat, czy_ceny_brt, AskExist, WarunekMsg)
			SELECT
					CRT_OFERTA, O.waluta, 
					IF(O.cenazaile = 0, O.cena, O.cena/O.cenazaile) AS CenaWal, 
					ROUND((IF(O.cenazaile = 0, O.cena, O.cena/O.cenazaile))*IFNULL(ku.kurs, 0), @session.HT.IR.CenyPrecisionWalutowe) AS Cena, 
					IFNULL(O.rabat, 0) AS Rabat, 
					O.czy_ceny_brt,
					(IFNULL(O.warunek, '') <> '') AS AskExist, 
					O.warunek AS WarunekMsg
			FROM `t_cenyrabat_edit_info` tci
--			INNER JOIN `oferty` O ON O.idntowr = tci.idntowr and O.kontrGUID = tci.kontrGUID
			INNER JOIN `oferty` O ON O.idntowr = tci.idntowr AND O.kontrGUID IN (tci.kontrGUID, tci.platnikGUID)
			LEFT JOIN `kursy_calc` ku ON ku.idnwaluty1 = O.waluta AND ku.idnwaluty2 = tci.Waluta
			WHERE
				O.dataoferty <= NOW() AND O.status = 0 AND cena <> 0 
            --  Data do dopisana na razie dla konkola
                AND 
                    IF(@session.globals.Owner IN ('KONKOL'),
                        NOW() <= IFNULL(O.DataDo, '2099-12-31'),
                        TRUE
                    )
				AND (NOT tci.CzyCenaSprzedazy OR tci.CzyRabatyHierarchiczne)		--	zawsze dla zakupu lub sprzedazy z wlaczonymi rabatami hierarch. 
		;	
		
		-- SET @CzyLiczyc = 2;
		UPDATE `t_cenyrabat_edit_result` tcr
		SET
			tcr.AskMsg = 
				CONCAT(
					'Warunek zastosowania ceny specjalnej:', '\n', '"', tcr.WarunekMsg, '"', '\n',
					'Czy przepisać następującą cenę:', '\n',
					'Cena: ', tcr.Cena, ' ?')
		WHERE 
			tcr.RabatType = CRT_OFERTA	
			AND tcr.AskExist
		;	

		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_UPATE_AFTER', CRT_OFERTA, '', '', '', '', '', '');		
		
	END IF;	--	IF _MODE = 'CALC_CENA_RABAT_CALC_OFERTA'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'CALC_CENA_RABAT_CALC_MATRAB'
		dla CRT_MATRAB
		Parametry brak
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_MATRAB', '', '', '', '', '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'CALC_CENA_RABAT_CALC_MATRAB' THEN
		DELETE FROM `t_cenyrabat_edit_result` WHERE RabatType = CRT_MATRAB;
		
-- 		SET @session.HT.IR.RabatyHierarchiczne_DataWaznosciUsed = TRUE; -- FALSE;
		
		SET @internal_ord = 0;
		INSERT INTO `t_cenyrabat_edit_result`
			(RabatType, Waluta, KlasaCenowa, CenaWal, Rabat, /*CenaObl,*/ AskExist, WarunekMsg, priorytet, internal_ord, czy_ceny_brt)
		
			SELECT 
				CRT_MATRAB,
				c.waluta, 
				c.klasa AS KlasaCenowa, 
				IF((tci.DataSprzed BETWEEN c.waznoscod AND c.waznoscdo) AND @session.HT.IR.Ceny_promocyjne_aktywne AND c.Cena_promocyjna != 0, 
					c.Cena_promocyjna, 
					IF(m.czy_rabat_kwotowy = 0, 
						c.cena, 
						c.cena - m.rabat_kwotowy
					)
				) AS cenawal, 
				/*
				IF(((tci.DataSprzed BETWEEN IFNULL(c.waznoscod,'2000-01-01') AND IF(IFNULL(c.waznoscdo, '0000-00-00') = '0000-00-00', '2100-01-01', c.waznoscdo)) AND 
					@session.HT.IR.Ceny_promocyjne_aktywne), 
				-- IF(((tci.DataSprzed between c.waznoscod and c.waznoscdo) and @session.HT.IR.Ceny_promocyjne_aktywne), 
					c.Cena_promocyjna, 
					IF(m.czy_rabat_kwotowy = 0, 
						c.cena, 
						c.cena - m.rabat_kwotowy
					)
				) AS cenawal, 
				*/
				IF(m.czy_rabat_kwotowy = 0, 
					m.procent, 
					0
				) AS Rabat,	
				
				/*
				(1-m.procent/100)*
				IF(((current_date between c.waznoscod and c.waznoscdo) and @session.HT.IR.Ceny_promocyjne_aktywne), 
					c.Cena_promocyjna, 
					IF(m.czy_rabat_kwotowy = 0, 
						c.cena, 
						tci.Default_Cena - m.rabat_kwotowy
					)
				) AS cenaobl, 
				*/
				(IFNULL(m.warunek, '') <> ''),
				m.warunek, 
				m.priorytet, 
				@internal_ord := @internal_ord + 1,
				kl.czy_ceny_brt
			FROM `t_cenyrabat_edit_info` tci, `matrab` m, `cennik` c 
			LEFT JOIN klasycen kl ON kl.Idn = c.Klasa
			WHERE 
				( 
				  ((tci.Towar_TreeNode LIKE CONCAT(towar, '%')) and towar <> '') OR 
				  (GuidT != '' AND (GuidT = tci.idntowr)) OR 
				  (klasarabattowar = tci.Towar_KalasaRabatowa and klasarabattowar <> 0) 
				) 
				AND 
				( 
				  ((tci.Kontrah_TreeNode LIKE CONCAT(kontrahent, '%')) and kontrahent <> '') OR 
--	nie uwzglednial rabatu platnika - źle!
--				(GuidK != '' AND (GuidK = tci.KontrGUID or GuidK = tci.AkwizytorGUID)) OR -- dla slon zadanie nr 004347 -> ten drugi %s to aAkwizytorGUID
				  (GuidK != '' AND m.GuidK IN (tci.kontrGUID, tci.platnikGUID, tci.AkwizytorGUID)) OR
				  (m.klasarabatkontrah = tci.Kontrah_KlasaRabatowa AND m.klasarabatkontrah <> 0) 
				) 
				AND 
				( 
				  c.czyzakup = 0 and (c.klasa=IF(m.cennik = 0, tci.Kontrah_KlasaCenowa, m.cennik)) and c.idntowr = tci.idntowr AND
				  (tci.DataSprzed BETWEEN IFNULL(c.waznoscod,'2000-01-01') AND IF(IFNULL(c.waznoscdo, '0000-00-00') = '0000-00-00', '2100-01-01', c.waznoscdo)) AND 
				  IF(@session.HT.IR.RabatyHierarchiczne_DataWaznosciUsed, m.waznosc >= CURDATE(), TRUE)
				) 
			 
			ORDER BY m.priorytet DESC
		;	
		/*
			--, cenaobl
		--;
		*/
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_UPATE_AFTER', CRT_MATRAB, '', '', '', '', '', '');		
		
		SET @internal_ord = 0;
		UPDATE `t_cenyrabat_edit_result` tcr
		SET
			tcr.internal_ord = @internal_ord := @internal_ord + 1
		WHERE 
			tcr.RabatType = CRT_MATRAB	
		ORDER BY tcr.priorytet DESC,  tcr.cenaobl	
		;	
		
		UPDATE `t_cenyrabat_edit_result` tcr
		SET
			tcr.AskMsg = 
				CONCAT(
					'Warunek udzielenia rabatu:', '\n', '"', tcr.WarunekMsg, '"', '\n',
					'Czy przepisać następującą pozycję:', '\n',
					'Rabat:', tcr.Rabat, '\n',
					'Cena: ', tcr.Cena, ' ?')
		WHERE 
			tcr.RabatType = CRT_MATRAB	
			AND tcr.AskExist
		;	

	
	END IF;	--	IF _MODE = 'CALC_CENA_RABAT_CALC_MATRAB'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'CALC_CENA_RABAT_CALC_TABRABAT'
		dla CRT_TABRABAT
		Parametry brak
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_TABRABAT', '', '', '', '', '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'CALC_CENA_RABAT_CALC_TABRABAT' THEN
		DELETE FROM `t_cenyrabat_edit_result` WHERE RabatType = CRT_TABRABAT;
		
		SELECT cenawal, waluta INTO @tcenawal, @twaluta FROM `t_cenyrabat_edit_result` WHERE RabatType = CRT_DEFAULT;
		SET @tcenawal = IFNULL(@tcenawal, 0);
		IF @tcenawal = 0 THEN
			LEAVE S_cenyrabat_edit_info;	--	wychodze bo nie mam nic do zapisywania
		END IF;
		
		INSERT INTO `t_cenyrabat_edit_result`
			(RabatType, Waluta, KlasaCenowa, CenaWal, Rabat)
			SELECT 
				CRT_TABRABAT,
				@twaluta,
				tr.cennik, 
				-- tr.klasarabatkontrah, tr.klasarabattowar, 
				@tcenawal, 
				tr.procent 
				-- (1-tr.procent/100)*@tcenawal
				-- tr.waznosc  
			FROM `t_cenyrabat_edit_info` tci, `tabrabat` tr
			WHERE 
				tr.klasarabatkontrah = tci.Kontrah_KlasaRabatowa
				AND  tr.klasarabattowar = tci.Towar_KalasaRabatowa
		;
		CALL cenyrabat_edit_info('CALC_CENA_RABAT_CALC_UPATE_AFTER', CRT_TABRABAT, '', '', '', '', '', '');		
			
	END IF;	--	IF _MODE = 'CALC_CENA_RABAT_CALC_TABRABAT'

END$$




/* ************************************************************************************************************************************************************************
	inicjalne 
************************************************************************************************************************************************************************ */	

DROP PROCEDURE IF EXISTS `CenyRabaty_init`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `CenyRabaty_init`(
	IN _MODE VARCHAR(250)
)
BEGIN 
	SET @ht.CenyRabaty_init_init = TRUE;
	CALL cenyrabat_edit_info('INIT', '', '', '', '', '', '', '');		
	
/*	
	
	DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_info`;
	CREATE TEMPORARY TABLE `t_cenyrabat_edit_info`(
		KontrGUID VARCHAR(38) NOT NULL DEFAULT '',
		PlatnikGUID VARCHAR(38) NOT NULL DEFAULT '',
		IdnTowr VARCHAR(38) NOT NULL DEFAULT '',
		AkwizytorGUID VARCHAR(38) NOT NULL DEFAULT '',
		Rodzaj int(11),
		CzyCenaSprzedazy int(11),
		DataSprzed DATE,
		CzyRabatyHierarchiczne int(11),
		
		Kontrah_TreeNode VARCHAR(250) NOT NULL DEFAULT '',
		Kontrah_KlasaCenowa int(11) NOT NULL DEFAULT 0,
		Kontrah_KlasaRabatowa int(11) NOT NULL DEFAULT 0,
		Kontrah_Rabat DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		
		Towar_TreeNode VARCHAR(250) NOT NULL DEFAULT '',
		Towar_KalasaRabatowa int(11) NOT NULL DEFAULT 0,
		Towar_CenaEwid DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		Towar_Cenazkpnet DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		Towar_nie_realizuje_zamow int(11) NOT NULL DEFAULT 0,
		--  dla Pliszki??? sprawdzic!!!	Towar_nie_realizuje_zamow int(11),
		
		Default_KlasaCenowa int(11) NOT NULL DEFAULT 0,
		Default_Cena DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		Default_Waluta int(11) NOT NULL DEFAULT 0,
		
		Waluta int(11) NOT NULL DEFAULT 0,
		Idn_tab_kurs int(11) NOT NULL DEFAULT 0,
		Last_Kurs_For_Waluta DOUBLE(16,4) NOT NULL DEFAULT '1.0000',
		PRIMARY KEY (`IdnTowr`)
	);
	DROP TEMPORARY TABLE IF EXISTS `t_cenyrabat_edit_result`;
	CREATE TEMPORARY TABLE `t_cenyrabat_edit_result`(
		RabatType int(11) NOT NULL DEFAULT 0,
		KlasaCenowa int(11) NOT NULL DEFAULT 0,
		Waluta int(11) NOT NULL DEFAULT 0,
		czy_ceny_brt int(11) NOT NULL DEFAULT 0,
		CenaWal DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		Cena DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		Rabat DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		-- CenaAddWal DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		-- CenaAdd DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		CenaObl DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
		AskExist int(11) NOT NULL DEFAULT 0,
		WarunekMsg VARCHAR(250) DEFAULT '',
		AskMsg TEXT,
		priorytet int(11) NOT NULL DEFAULT 0,
		internal_ord int(11) NOT NULL DEFAULT 0,
		Towar_nie_realizuje_zamow int(11) NOT NULL DEFAULT 0
	
	);
*/	
END$$

DELIMITER ;



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

*/

/*  Zmiany CVS
$Log$
*/