 DELIMITER $$


/* ************************************************************************************************************************************************************************
	Narzedzia 
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `rozrach_rodzaj_calc`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `rozrach_rodzaj_calc`(
	IN _Rodzaj INTEGER,
	IN _gruparozrach_wymus INTEGER,
	IN _Brutto DECIMAL(16,4)
)
-- call rozrach_rodzaj_calc(33,1,1);
BEGIN 
	CALL ht_rodzaj_calc(_Rodzaj);
	IF @ht.doc.IsRozrachunek OR (_Rodzaj = @ht.CKsNN) THEN --	gdy Rozrachunek lub Zakup KANCELARIA naliczaj pola rozrachunkowe
		SET @ht.doc.Rztyp = IF(IFNULL(@ht.doc.Rztyp,1) = 0, 1, @ht.doc.Rztyp); -- jesli jest rozrachunek, ale w operdoc jest 0 to przyjmujemy default 
		IF _gruparozrach_wymus = 0 THEN
			SET @ht.doc.RzTypRozrach = IF(IFNULL(@ht.doc.Rztyp,0)=0,@ht.Rz_NL, @ht.doc.Rztyp);
			IF (@ht.doc.FnTyp = @ht.fnKor AND _Brutto > 0)  OR (@ht.doc.fnTyp = @ht.fnNrm AND _Brutto < 0) THEN
			    SET @ht.doc.RzTypRozrach=_varINT(
			    IF(@ht.doc.RzTypRozrach=@ht.RzSNL,@ht.Rz_NL,
			      IF(@ht.doc.RzTypRozrach=@ht.Rz_NL,@ht.RzSNL,
				IF(@ht.doc.RzTypRozrach=@ht.RzSZB,@ht.Rz_ZB,
				  IF(@ht.doc.RzTypRozrach=@ht.Rz_ZB,@ht.RzSZB,@ht.doc.RzTypRozrach
			    )))));
			END IF;
		ELSE
			SET @ht.doc.RzTypRozrach = _gruparozrach_wymus;
		END IF;
		
		SET @ht.doc.IsKorektaNaPlus = @IsKorektaNaPlus := (@ht.doc.IsKorekta AND _Brutto > 0);
		SET @ht.doc.SignRozliczone = IF(@ht.doc.RzTypRozrach IN (@ht.Rz_ZB, @ht.Rz_SN, @ht.RzSSZ,@ht.RzSNL),-1,1) * IF(@ht.doc.IsKorektaNaPlus,-1,1);
		SET @ht.doc.StronaWNForRozrach = @ht.doc.RzTypRozrach IN (@ht.Rz_NL, @ht.RzSNL, @ht.Rz_Sz, @ht.RzSSZ);
		SET @RzTypRozrach = @ht.doc.RzTypRozrach;
	END IF;
	
	IF @ht.doc.Rodzaj IN (@ht.CBNBO, @ht.CRKBO,@ht.CBNBM) THEN
		SET @ht.doc.StronaWNForRozrach = @ht.doc.Rodzaj = @ht.CBNBM;
	END IF;
	
END$$


DROP PROCEDURE IF EXISTS `_GetKwotyForRozrach`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_GetKwotyForRozrach`(
	INOUT _CKwota DECIMAL(16,4),
	INOUT _CKwotaWal DECIMAL(16,4),
	IN _Rodzaj INTEGER,
	IN _gruparozrach_wymus INTEGER,
	IN _Netto DECIMAL(16,4),
	IN _NettoWal DECIMAL(16,4),
	IN _Brutto DECIMAL(16,4),
	IN _BruttoWal DECIMAL(16,4),
	IN _NettoDoRozrach BOOLEAN,
	IN _Zaplacono DECIMAL(16,4),
	IN _Kurs DECIMAL(16,4),
	IN _Kurs_rozliczen DECIMAL(16,4),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_D VARCHAR(255),
	IN _Param_C VARCHAR(255)
	) 
BEGIN
	
	CALL rozrach_rodzaj_calc(_Rodzaj, _gruparozrach_wymus, _Brutto);
	/*
	apro 2017-03
	_GetKwotyForRozrach(...
	GetKwotaWalForRozrach do pola _CKwotaWal
	TODO:
	Kwestia do generalnego przemyslenia - dodanie pola bruttoWal i vatWal
	na razie NettoWal
	*/
	IF (_Rodzaj IN (@ht.CBNBO, @ht.CRKBO, @ht.CBNBM)) OR (@ht.doc.RzTyp IN (@ht.RZ_SN, @ht.RZ_SZ)) THEN
		SET _CKwotaWal = _Rnd2(ABS(_Zaplacono));
		SET	_CKwota = _Rnd2(ABS(_Zaplacono*_kurs_rozliczen));
	ELSE
		IF _NettoDoRozrach THEN
			SET _CKwotaWal = _NettoWal;
			SET _CKwota = _Netto;
		ELSE
			SET _CKwotaWal = _BruttoWal;
			SET _CKwota = _Brutto;
			--	APRO!!! - > jmam pyta - UWAGA CZY MOGĘ TAK????
			IF _BruttoWal = 0 AND _Kurs = 1 THEN
				SET _CKwotaWal = _Brutto;
				SET _CKwota = _Brutto;
			END IF;
		END IF;
		
		IF (_Kurs_rozliczen != 0) AND (_Kurs_rozliczen != _Kurs) THEN
			SET _CKwotaWal = _Rnd2(_CKwotaWal*_Kurs/_kurs_rozliczen);
			-- SET _CKwota -- nie zmieniamy pozostaje bez zmian
		END IF;
	END IF;		--	 IF Rodzaj
		
END$$


DROP FUNCTION IF EXISTS `_GetKwotaWalForRozrach`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_GetKwotaWalForRozrach`(
	_Rodzaj INTEGER,
	_gruparozrach_wymus INTEGER,
	_Netto DECIMAL(16,4),
	_NettoWal DECIMAL(16,4),
	_Brutto DECIMAL(16,4),
	_BruttoWal DECIMAL(16,4),
	_NettoDoRozrach BOOLEAN,
	_Zaplacono DECIMAL(16,4),
	_Kurs DECIMAL(16,4),
	_Kurs_rozliczen DECIMAL(16,4),
	_Param_A VARCHAR(255),
	_Param_B VARCHAR(255),
	_Param_D VARCHAR(255),
	_Param_C VARCHAR(255)
	) RETURNS DECIMAL(16,4)
    NO SQL
    DETERMINISTIC
/*
SELECT BENCHMARK(100000, (SELECT _Rnd(-@V, 4)));	
*/	
BEGIN
	DECLARE _CKwotaWal DECIMAL(16,4) DEFAULT 0;
	
	CALL rozrach_rodzaj_calc(_Rodzaj, _gruparozrach_wymus, _Brutto);
	/*
	_GetKwotaWalForRozrach(...)
	GetKwotaWalForRozrach do pola _CKwotaWal
	TODO:
	Kwestia do generalnego przemyslenia - dodanie pola bruttoWal i vatWal
	na razie NettoWal
	*/
	IF (_Rodzaj IN (@ht.CBNBO, @ht.CRKBO, @ht.CBNBM)) OR (@ht.doc.RzTyp IN (@ht.RZ_SN, @ht.RZ_SZ)) THEN
		SET _CKwotaWal = _Rnd2(ABS(_Zaplacono));
	ELSE
		IF _NettoDoRozrach THEN
			SET _CKwotaWal = _NettoWal;
		ELSE
			SET _CKwotaWal = _BruttoWal;
			--	APRO!!! - > jmam pyta - UWAGA CZY MOGĘ TAK????
			IF _BruttoWal = 0 AND _Kurs = 1 THEN
				SET _CKwotaWal = _Brutto;
			END IF;
		END IF;
		
		IF (_Kurs_rozliczen != 0)	THEN
			SET _CKwotaWal = _Rnd2(_CKwotaWal*_Kurs/_kurs_rozliczen);
		END IF;
	END IF;		--	 IF Rodzaj
	
	
	RETURN _CKwotaWal;
END$$

DROP FUNCTION IF EXISTS `_GetCPozostalo`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_GetCPozostalo`(
	_CKwota DECIMAL(16,4),
	_CWN INTEGER,
 	_CRozliczone DECIMAL(16,4)
	) RETURNS DECIMAL(16,4)
    NO SQL
    DETERMINISTIC
/*
*/	
BEGIN
	DECLARE aCKwota DECIMAL(16,4) DEFAULT 0;
	SET aCKwota = IF(_CWN = @ht.CSTR_MA, -_CKwota, _CKwota);
	RETURN _Rnd2(aCKwota - _CRozliczone);
END$$

DROP FUNCTION IF EXISTS `_GetCPozostaloWal`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_GetCPozostaloWal`(
	_CKwotaWal DECIMAL(16,4),
	_CWN INTEGER,
 	_CRozliczoneWal DECIMAL(16,4)
	) RETURNS DECIMAL(16,4)
    NO SQL
    DETERMINISTIC
/*
*/	
BEGIN
	DECLARE aCKwota DECIMAL(16,4) DEFAULT 0;
	SET aCKwota = IF(_CWN = @ht.CSTR_MA, -_CKwotaWal, _CKwotaWal);
	RETURN _Rnd2(aCKwota - _CRozliczoneWal);
END$$

DROP PROCEDURE IF EXISTS `_R_Nalicz_Pola`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_R_Nalicz_Pola`(
	IN _MODE VARCHAR(250),	 --	'before.run' 'after.run' ''
	IN _IdnOper VARCHAR(250),	 --	rekord
	IN _Rodzaj INTEGER,
	IN _gruparozrach_wymus INTEGER,
	IN _Netto DECIMAL(16,4),
	IN _NettoWal DECIMAL(16,4),
	IN _Brutto DECIMAL(16,4),
	IN _BruttoWal DECIMAL(16,4),
	IN _NettoDoRozrach BOOLEAN,
	IN _Zaplacono DECIMAL(16,4),
	IN _Kurs DECIMAL(16,4),
	IN _Kurs_rozliczen DECIMAL(16,4),
	IN _In_1 VARCHAR(255),
	IN _In_2 VARCHAR(255),
	IN _In_3 VARCHAR(255),
	IN _In_4 VARCHAR(255),
	INOUT _CWN INTEGER,
	INOUT _CKwota DECIMAL(16,4),
	INOUT _CKwotaWal DECIMAL(16,4),
	INOUT _CRozliczone DECIMAL(16,4),
	INOUT _CRozliczoneWal DECIMAL(16,4),
	INOUT _nierozliczony INTEGER,
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_D VARCHAR(255),
	IN _Param_C VARCHAR(255)
)
/*
	
*/	
BEGIN
	IF _MODE = 'for.opng' THEN
	/**********************************************************************************************************************************
		Nalicz dla rekordu _IdnOper z `opng`
		CALL _R_Nalicz_Pola('for.opng', 'IdnOper', 0, 0, 0, 0, 0, 0, 0,
			0, 
			0,
			0,
			'', '', '', '',
			@.NEW.CWN,
			@.NEW.CKwota,
			@.NEW.CKwotaWal,
			@.NEW.CRozliczone,
			@.NEW.CRozliczoneWal,
			@.NEW.nierozliczony,
			'', '', '', '')
		;
	**********************************************************************************************************************************/

		SELECT
			NEW.Rodzaj, NEW.gruparozrach_wymus, NEW.Netto, NEW.NettoWal, NEW.Brutto, NEW.BruttoWal, NEW.NettoDoRozrach,
			NEW.Zaplacono, 
			NEW.Kurs,
			NEW.Kurs_rozliczen,
			NEW.CWN,
			NEW.CKwota,
			NEW.CKwotaWal,
			NEW.CRozliczone,
			NEW.CRozliczoneWal,
			NEW.nierozliczony
   INTO
			@.NEW.Rodzaj, @.NEW.gruparozrach_wymus, @.NEW.Netto, @.NEW.NettoWal, @.NEW.Brutto, @.NEW.BruttoWal, @.NEW.NettoDoRozrach,
			@.NEW.Zaplacono,
			@.NEW.Kurs,
			@.NEW.Kurs_rozliczen,
			_CWN,
			_CKwota,
			_CKwotaWal,
			_CRozliczone,
			_CRozliczoneWal,
			_nierozliczony
		FROM `opng` NEW
		WHERE
			NEW.GUID = _IdnOper
		;
		CALL _R_Nalicz_Pola('', '', @.NEW.Rodzaj, @.NEW.gruparozrach_wymus, @.NEW.Netto, @.NEW.NettoWal, @.NEW.Brutto, @.NEW.BruttoWal, @.NEW.NettoDoRozrach,
			@.NEW.Zaplacono, 
			@.NEW.Kurs,
			@.NEW.Kurs_rozliczen,
			'', '', '', '',
			_CWN,
			_CKwota,
			_CKwotaWal,
			_CRozliczone,
			_CRozliczoneWal,
			_nierozliczony,
			'', '', '', '')
		;
		UPDATE `opng` n
		SET
			n.CWN = _CWN,
			n.CKwota = _CKwota,
			n.CKwotaWal = _CKwotaWal,
			n.CRozliczone = _CRozliczone,
			n.CRozliczoneWal = _CRozliczoneWal,
			n.nierozliczony = _nierozliczony
		WHERE
			n.GUID = _IdnOper
		;
	END IF;
	
	IF _MODE = '' THEN
	/**********************************************************************************************************************************
		Nalicza pola w opng (jako zmienne)
		np. triggerze `opng_e`
		CALL _R_Nalicz_Pola('', '', NEW.Rodzaj, NEW.gruparozrach_wymus, NEW.Netto, NEW.NettoWal, NEW.Brutto, NEW.BruttoWal, NEW.NettoDoRozrach,
			NEW.Zaplacono, 
			NEW.Kurs,
			NEW.Kurs_rozliczen,
			'', '', '', '',
			NEW.CWN,
			NEW.CKwota,
			NEW.CKwotaWal,
			NEW.CRozliczone,
			NEW.CRozliczoneWal,
			NEW.nierozliczony,
			'', '', '', '')
		;
		
	**********************************************************************************************************************************/
		CALL rozrach_rodzaj_calc(_Rodzaj, _gruparozrach_wymus, _Brutto);
		SET
			_CWN := @ht.doc.StronaWNForRozrach
		;	
		/*
		GetKwotaWalForRozrach do pola _CKwotaWal
		TODO:
		Kwestia do generalnego przemyslenia - dodanie pola bruttoWal i vatWal
		na razie NettoWal
		*/
		
		/*
		BYLO
		IF @session.globals.Owner IN ('BALTIMA') THEN
			CALL _GetKwotyForRozrach(_CKwota, _CKwotaWal, _Rodzaj, _gruparozrach_wymus, _Netto, _NettoWal, _Brutto, _BruttoWal, _NettoDoRozrach, _Zaplacono, _Kurs, _Kurs_rozliczen, '', '', '', ''); -- kwoty pobierane a nie przeliczane
		ELSE
			SET _CKwotaWal = _GetKwotaWalForRozrach(_Rodzaj, _gruparozrach_wymus, _Netto, _NettoWal, _Brutto, _BruttoWal, _NettoDoRozrach, _Zaplacono, _Kurs, _Kurs_rozliczen, '', '', '', '');
			--	CKwota	
			-- nie wykonujemy przeliczenia na PLN, gdy kurs został ustawiony na 0
			IF (_Kurs_rozliczen != 0)	THEN
				SET _CKwota = _Rnd2(_CKwotaWal*_kurs_rozliczen);
			END IF;
		END IF;
		a jest ... */
		CALL _GetKwotyForRozrach(_CKwota, _CKwotaWal, _Rodzaj, _gruparozrach_wymus, _Netto, _NettoWal, _Brutto, _BruttoWal, _NettoDoRozrach, _Zaplacono, _Kurs, _Kurs_rozliczen, '', '', '', ''); -- kwoty pobierane a nie przeliczane
		IF NOT (@session.globals.Owner IN ('BALTIMA')) THEN
			-- nie wykonujemy przeliczenia na PLN, gdy kurs został ustawiony na 0
			IF (_Kurs_rozliczen != 0)	THEN
				SET _CKwota = _Rnd2(_CKwotaWal*_kurs_rozliczen);
			END IF;
		END IF;
		
		
		--	//Slon CRM:9745
		IF _Rodzaj IN (@ht.CRoWn, @ht.CRoMa, @ht.CRoNO, @ht.CRoSW, @ht.CRoSM, @ht.CRoSN, @ht.CRoSZ, @ht.CROZN, @ht.CROZZ) AND _CKwota = 0 THEN
		SET
			_CRozliczone = 0,
			_CRozliczoneWal = 0
		;
		END IF;
			
		/*
		Pole nierozliczony znaczenie:
		0-rozliczony, 1 czesciowo, 2 nierozliczony
		czyli odwrotnie niż w dotychczasowym OnCalc
		CNierozliczony_0 =   0;  //rozliczony
		CNierozliczony_50 =  1;  //czesciowo
		CNierozliczony_100 = 2;  //nierozliczony
		*/
		--	gdy kurs został ustawiony na 0 i Ckwotawal=0 wtedy uznajemy, że zapis jest z założenia rozliczony
		IF (_Kurs_rozliczen = 0) AND (_CKwotaWal = 0) THEN
			SET _CRozliczone = IF(_CWN = 1, _CKwota, -_CKwota);
		END IF;

		IF (_Kurs_rozliczen != 1) OR (_CKwotaWal != _CKwota) THEN
			SET _CRozliczoneWal = IF(_CWN = 1, _CKwotaWal, -_CKwotaWal);
		ELSE
			SET _CRozliczoneWal = _CRozliczone;
		END IF;
		
		SET	@aCPozostalo := _GetCPozostalo(_CKwota,	_CWN, _CRozliczone);
		IF ABS(@aCPozostalo) < 0.001 THEN
			SET _nierozliczony = @ht.CNierozliczony_0;
		ELSE	
			SET _nierozliczony = IF(_CRozliczone = 0, @ht.CNierozliczony_100, @ht.CNierozliczony_50);
		END IF;
		SET @_nierozliczony = _nierozliczony;
		SET @_CRozliczone = _CRozliczone;
	END IF;
	
END$$


DROP PROCEDURE IF EXISTS `_Rozrach_Nalicz_Pola`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_Rozrach_Nalicz_Pola`(
	IN _Rodzaj INTEGER,
	IN _gruparozrach_wymus INTEGER,
	IN _Netto DECIMAL(16,4),
	IN _NettoWal DECIMAL(16,4),
	IN _Brutto DECIMAL(16,4),
	IN _BruttoWal DECIMAL(16,4),
	IN _NettoDoRozrach BOOLEAN,
	IN _Zaplacono DECIMAL(16,4),
	IN _Kurs DECIMAL(16,4),
	IN _Kurs_rozliczen DECIMAL(16,4),
	INOUT _CWN INTEGER,
	INOUT _CKwota DECIMAL(16,4),
	INOUT _CKwotaWal DECIMAL(16,4),
	INOUT _CRozliczone DECIMAL(16,4),
	INOUT _CRozliczoneWal DECIMAL(16,4),
	INOUT _nierozliczony INTEGER,
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_D VARCHAR(255),
	IN _Param_C VARCHAR(255)
)
BEGIN 
	CALL rozrach_rodzaj_calc(_Rodzaj, _gruparozrach_wymus, _Brutto);
	SET
		_CWN := @ht.doc.StronaWNForRozrach
	;	
	/*
	GetKwotaWalForRozrach do pola _CKwotaWal
	TODO:
	Kwestia do generalnego przemyslenia - dodanie pola bruttoWal i vatWal
	na razie NettoWal
	*/
	
	
	CALL _GetKwotyForRozrach(_CKwota, _CKwotaWal, _Rodzaj, _gruparozrach_wymus, _Netto, _NettoWal, _Brutto, _BruttoWal, _NettoDoRozrach, _Zaplacono, _Kurs, _Kurs_rozliczen, '', '', '', ''); -- kwoty pobierane a nie przeliczane
	IF NOT (@session.globals.Owner IN ('BALTIMA')) THEN
		-- nie wykonujemy przeliczenia na PLN, gdy kurs został ustawiony na 0
		IF (_Kurs_rozliczen != 0)	THEN
			SET _CKwota = _Rnd2(_CKwotaWal*_kurs_rozliczen);
		END IF;
	END IF;
	
	
	--	//Slon CRM:9745
	IF _Rodzaj IN (@ht.CRoWn, @ht.CRoMa, @ht.CRoNO, @ht.CRoSW, @ht.CRoSM, @ht.CRoSN, @ht.CRoSZ, @ht.CROZN, @ht.CROZZ) AND _CKwota = 0 THEN
	SET
		_CRozliczone = 0,
		_CRozliczoneWal = 0
	;
	END IF;
		
	/*
	Pole nierozliczony znaczenie:
	0-rozliczony, 1 czesciowo, 2 nierozliczony
	czyli odwrotnie niż w dotychczasowym OnCalc
	CNierozliczony_0 =   0;  //rozliczony
	CNierozliczony_50 =  1;  //czesciowo
	CNierozliczony_100 = 2;  //nierozliczony
	*/
	--	gdy kurs został ustawiony na 0 i Ckwotawal=0 wtedy uznajemy, że zapis jest z założenia rozliczony
	IF (_Kurs_rozliczen = 0) AND (_CKwotaWal = 0) THEN
		SET _CRozliczone = IF(_CWN = 1, _CKwota, -_CKwota);
		
	END IF;
	
	IF (_Kurs_rozliczen != 1) OR (_CKwotaWal != _CKwota) THEN
		SET _CRozliczoneWal = IF(_CWN = 1, _CKwotaWal, -_CKwotaWal);
	ELSE
		SET _CRozliczoneWal = _CRozliczone;
	END IF;
	
	
	SET	@aCPozostalo := _GetCPozostalo(_CKwota,	_CWN, _CRozliczone);
	IF ABS(@aCPozostalo) < 0.001 THEN
		SET _nierozliczony = @ht.CNierozliczony_0;
	ELSE	
		SET _nierozliczony = IF(_CRozliczone = 0, @ht.CNierozliczony_100, @ht.CNierozliczony_50);
	END IF;
	set @_nierozliczony = _nierozliczony;
	set @_CRozliczone = _CRozliczone;
END$$

-- ZANIKOWA !!!!!  do usuniecia  - Tylko w calc_ver < 3 w opng 
DROP PROCEDURE IF EXISTS `rozrach_nalicz_pola`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `rozrach_nalicz_pola`(
	IN _Rodzaj INTEGER,
	IN _gruparozrach_wymus INTEGER,
	IN _Netto DECIMAL(16,4),
	IN _NettoWal DECIMAL(16,4),
	IN _Brutto DECIMAL(16,4),
	IN _Zaplacono DECIMAL(16,4),
	IN _Kurs DECIMAL(16,4),
	IN _Kurs_rozliczen DECIMAL(16,4),
	INOUT _CWN INTEGER,
	INOUT _CKwota DECIMAL(16,4),
	INOUT _CKwotaWal DECIMAL(16,4),
	INOUT _CRozliczone DECIMAL(16,4),
	INOUT _CRozliczoneWal DECIMAL(16,4),
	INOUT _nierozliczony INTEGER,
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_D VARCHAR(255),
	IN _Param_C VARCHAR(255)
)
/*
ZANIKOWA !!!!!  do usuniecia  - Tylko w calc_ver < 3 w opng 
*/
BEGIN 
	CALL rozrach_rodzaj_calc(_Rodzaj, _gruparozrach_wymus, _Brutto);
	IF _Rodzaj IN (@ht.CBNBO, @ht.CRKBO) THEN
		SET _CKwotaWal = _Rnd2(Abs(_Zaplacono));
	ELSEIF _Rodzaj IN (@ht.CBNBM) THEN
		SET _CKwotaWal = _Rnd2(Abs(_Zaplacono));
	ELSEIF @ht.doc.RzTyp IN (@ht.RZ_SN, @ht.RZ_SZ) THEN	--	TODO: przejsc na edycje pola CKwotaWal dla RO**, KS i BN
		SET _CKwotaWal = _Rnd2(Abs(_Zaplacono));
	ELSEIF (_Kurs != 1) OR (_Kurs_rozliczen != 1)	THEN	--	w chwili obecnej nie obslugujemy sytuacji, gdy jest sprzedaz eksportowa z VAT<>0!!!! (rzadkie ale bywa)
		SET _CKwotaWal = _NettoWal;
	ELSE
		SET _CKwotaWal = _Brutto;
	END IF;
	
	SET
		_CWN := @ht.doc.StronaWNForRozrach
	;	
	SET
	--	nie wykonujemy przeliczenia na PLN, gdy kurs zostal ustawiony na 0
		_CKwota = 
			IF(_Kurs_rozliczen != 0,
				_CKwotaWal * _Kurs_rozliczen,
				_CKwota
			)	
			
	;
	--	CKwota
	CASE 
	WHEN _Rodzaj IN (@ht.CZkIm, @ht.CZTUE, @ht.CZTKU) THEN
		IF @session.HT.IR.Zakupy_import_Netto_do_rozrach THEN
			SET _CKwota = _Netto;
		END IF;
	WHEN _Rodzaj IN (@ht.CSTUE, @ht.CSTKE, @ht.CSTKU, @ht.CSpFE, @ht.CSpFV, @ht.CSpRU, @ht.CSpKF, @ht.CSpKR) THEN
		IF @session.HT.IR.Sprzedaz_export_Brutto_do_rozrach THEN
			SET _CKwota = _Brutto;
		END IF;
	WHEN _Rodzaj = @ht.CZkFV THEN
		IF @session.HT.IR.Zakup_krajowy_walucie_Brutto_do_rozrach AND (_Kurs_rozliczen != 0) THEN
			SET _CKwota = _Brutto;
		END IF;
	ELSE
		SET _CKwota = _CKwota;
	
	END CASE;
	
	--	//Slon CRM:9745
	IF _Rodzaj IN (@ht.CRoWn, @ht.CRoMa, @ht.CRoNO, @ht.CRoSW, @ht.CRoSM, @ht.CRoSN, @ht.CRoSZ, @ht.CROZN, @ht.CROZZ) AND _CKwota = 0 THEN
	SET
		_CRozliczone = 0,
		_CRozliczoneWal = 0
	;
	END IF;
		
	/*
	Pole nierozliczony znaczenie:
	0-rozliczony, 1 czesciowo, 2 nierozliczony
	czyli odwrotnie niż w dotychczasowym OnCalc
	CNierozliczony_0 =   0;  //rozliczony
	CNierozliczony_50 =  1;  //czesciowo
	CNierozliczony_100 = 2;  //nierozliczony
	*/
	--	gdy kurs został ustawiony na 0 i Ckwotawal=0 wtedy uznajemy, że zapis jest z założenia rozliczony
	IF (_Kurs_rozliczen = 0) AND (_CKwotaWal = 0) THEN
		SET _CRozliczone = IF(_CWN = 1, _CKwota, -_CKwota);
	END IF;
	
	IF (_Kurs_rozliczen != 1) OR (_CKwotaWal != _CKwota) THEN
		SET _CRozliczoneWal = IF(_CWN = 1, _CKwotaWal, -_CKwotaWal);
	ELSE
		SET _CRozliczoneWal = _CRozliczone;
	END IF;
	
	
/*
	SET	@aCPozostalo := _Rnd2(GetCPozostalo(aDataSet));
*/
	IF ABS(@aCPozostalo) < 0.001 THEN
		SET _nierozliczony = @ht.CNierozliczony_0;
	ELSE	
		SET _nierozliczony = IF(_CRozliczone= 0, @ht.CNierozliczony_100, @ht.CNierozliczony_50);
	END IF;
	
END$$

DROP PROCEDURE IF EXISTS `rozrach_Change_Tymczasowa`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `rozrach_Change_Tymczasowa`(
	IN _MODE VARCHAR(250),	 --	'before.run' 'after.run' ''
	IN _Key VARCHAR(38),
	IN _Na_Tymczasowa INTEGER,
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255)
)
/*
	CALL rozrach_Change_Tymczasowa
*/	
BEGIN
	IF _MODE = '' THEN
	/**********************************************************************************************************************************
		Czyli zmień na _Na_Tymczasowa
	**********************************************************************************************************************************/
		CALL Opng_r_E_init('EDIT', 'R', _Key, 0, '', @session.Registration.UserGUID, '', '');
		CALL Opng_r_E_Run('before.run', _Key, '', '', '');
		CALL Opng_r_E_Run('', _Key, '', '', '');
		CALL Opng_r_E_Run('after.run', _Key, '', '', '');
		UPDATE `opng_r_e` n
		SET
			n.Tymczasowa = _Na_Tymczasowa,
			n.Rozrachunek = IF(_Na_Tymczasowa = 1, 0, 1),
			n.nrraportu = '',
			n.DataWystaw = CURRENT_DATE(),
			n.DataSprzed = CURRENT_DATE(),
			n.DataWplywu = CURRENT_DATE(),
			n.data_vat = CURRENT_DATE(),
			n.DataWaluty = CURRENT_DATE(),
			n.DataPlatnosci = CURRENT_DATE(),
			n.dataplatnosci_oczekiwana = CURRENT_DATE()
		WHERE
			n.GUID = _Key
		;
		IF _Na_Tymczasowa = 0 THEN
			SELECT 
				n.nrraportu,
				n.GUID
				INTO
				@NEW.r_nrraportu,
				@NEW.r_Family_GUID
			FROM `opng` n, `opng_r_e` ne 
			WHERE 
				TRUE
				AND ne.GUID = _Key
				AND n.nrkasy = ne.nrkasy
				AND n.rodzaj = @ht.CRKBO
				-- AND n.datawystaw  BETWEEN  DATE_SUB('2014-01-01',INTERVAL 3 DAY) AND CURRENT_DATE()
			ORDER BY n.datawystaw DESC 
			LIMIT 1
			;
			UPDATE `opng_r_e` n
			SET
				n.nrraportu = @NEW.r_nrraportu,
				n.Family_GUID = @NEW.r_Family_GUID
			WHERE
				n.GUID = _Key
			;
		END IF;
		CALL opng_r_E_Let('ApplyAndClear', _Key, '', '');
	END IF;
END$$

/* ************************************************************************************************************************************************************************
	inicjalne 
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `rozrach_init`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `rozrach_init`(
	IN _MODE VARCHAR(250)
)
BEGIN 
	SET @ht.rozrach_init = TRUE;

END$$

DELIMITER ;
