 DELIMITER $$

/* ************************************************************************************************************************************************************************
	BI
************************************************************************************************************************************************************************ */	
DROP TRIGGER IF EXISTS `opng_e_bi`$$
CREATE DEFINER=`root`@`localhost` TRIGGER `opng_e_bi` BEFORE INSERT ON `opng_e` FOR EACH ROW 
S_opng_e_bi: BEGIN
		IF _GetVer() = '5.1.30' THEN LEAVE S_opng_e_bi; END IF;
	--	wartosc @session.trigger_lock rowna TRUE blokuje wykonanie triggera
		IF IFNULL(@session.trigger_lock, FALSE) THEN LEAVE S_opng_e_bi; END IF;
		
	IF NEW.Calc_Ver >= 3 THEN
	
		DROP TEMPORARY TABLE IF EXISTS `t_trigg_operdoc`;
		CREATE TEMPORARY TABLE IF NOT EXISTS `t_trigg_operdoc` SELECT * FROM `operdoc` WHERE rodzaj = NEW.Rodzaj;
		-- ALTER TABLE `t_trigg_operdoc` ADD PRIMARY KEY Rodzaj (`Rodzaj`);
		-- CREATE TEMPORARY TABLE IF NOT EXISTS `t_trigg_operdoc` LIKE `operdoc`;
		-- INSERT INTO `t_trigg_operdoc` SELECT * FROM `operdoc`;
		
		CALL ht_rodzaj_update_zmienne(NEW.Rodzaj);
		-- CALL ht_rodzaj_calc(NEW.Rodzaj);

		IF @ht.doc.MA_Magzyny THEN
			IF (@ht.doc.MagTyp = @ht.mtRZ) THEN
				SET NEW.DoMagazynu = 0;
			END IF;	
			IF (@ht.doc.MagTyp = @ht.mtPZ) THEN
				SET NEW.ZMagazynu = 0;
			END IF;	
		ELSE		
			SET 
				NEW.ZMagazynu = 0, 
				NEW.DoMagazynu = 0
			;
		END IF;
		
		--  CALL e_opng_rec_ustal_magazyny('', NEW.Rodzaj, NEW.ZMagazynu, NEW.DoMagazynu);
		
		SET
			@ng.f.Brutto = IFNULL(NEW.Brutto,	0),	
			
			-- @ng.f.CKwota,		
			-- @ng.f.CKwotaWal,		
			-- @ng.f.CWN,		
			-- @ng.f.CRozliczone,		
			-- @ng.f.Kurs_rozliczen,		
			-- @ng.f.gruparozrach,		
			@ng.f.gruparozrach_wymus = IFNULL(NEW.gruparozrach_wymus, 0),		
			@ng.f.Waluta = IFNULL(NEW.Waluta,	0)
		;	
		
		
		-- UPDATE `t_ht_ngcalc` t
		SET @transact.ISNewDoc = (IFNULL(NEW.IDN, 0) = 0);
		IF @transact.ISNewDoc THEN
			/**/
			UPDATE `t_trigg_operdoc` d
			SET
				NEW.rozrachunek = d.IsRozrachunek,
				NEW.grupaoper = @ng.f.grupaoper := d.Grupa,
				NEW.wzordekr = IF(NEW.fvrudowz AND IFNULL(d.wzordekr_a, '') <> '', d.wzordekr_a, d.wzordekr),
				NEW.rv_id = d.rv_id, 
				NEW.RodzajDowodu = d.RodzajDowodu,
				NEW.lang_id = d.lang_id,                    -- # 034196
				NEW.ugrpGUID = d.ugrpGUID,
				
				NEW.kancelaria_kierunek = d.init_kancelaria_kierunek,
			--	8 VIII dodano zad. 59453 ATM - inicjacja NettoDoRozrach z operdoc
				NEW.NettoDoRozrach = IF(NEW.waluta_rozliczen > 0, d.NettoDoRozrachWal, d.NettoDoRozrachPLN),
				NEW.gruparozrach = IFNULL(@ng.f.gruparozrach := @ht.doc.RzTypRozrach, 0),
				NEW.DoMagazynu = IF(d.MagTyp = @ht.mtRZ, 0, NEW.DoMagazynu),
				NEW.ZMagazynu = IF(d.MagTyp = @ht.mtPZ, 0, NEW.ZMagazynu)
				
			WHERE
				d.Rodzaj = NEW.Rodzaj
			;
	--	TRANSBUD		
			IF (@session.globals.Owner = 'TRANSBUD') AND (@ht.doc.Optyp = @ht.ST OR NEW.Rodzaj = @ht.CRzWz) AND 
				(@session.HT.IR.nrwewn_set_nie_dotyczy) THEN
				SET NEW.NrWewn = 'NIE DOTYCZY';
			END IF; 
		/**/
			SET
				@ht.Init_doc_date =  _Get_Init_doc_date()
			;
			SET
				-- bylo NEW.idnuser = IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin),
				NEW.idnuser = IFNULL(NEW.idnuser, IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin)),
				-- było NEW.ugrpGUID = IFNULL(@session.user.CurrugrpGUID, IFNULL(NEW.ugrpGUID, 'ALL')),
				NEW.ugrpGUID = Get_ugrpguid('', NEW.ugrpGUID),

				NEW.Deleted = IFNULL(NEW.Deleted, 0),
				NEW.ilepoz = IFNULL(NEW.ilepoz, 0),
				--	Daty
				-- NEW.DataWystaw = IFNULL(NEW.DataWystaw, @ht.Init_doc_date),
				NEW.DataWystaw = @ht.Init_doc_date,
				NEW.DataSprzed = IFNULL(NEW.DataSprzed, @ht.Init_doc_date),
				NEW.DataWplywu = IFNULL(NEW.DataWplywu, @ht.Init_doc_date),
				NEW.Data_Vat = 
					CASE 
					WHEN @ht.doc.init_datavat IS NULL THEN '0000-00-00' -- null
					WHEN @ht.doc.init_datavat = 'INIT_DATE' THEN @ht.Init_doc_date
					WHEN @ht.doc.init_datavat = 'DATE_WPLYW_RZECZYW' THEN NEW.datawplywu_rzeczywista
					WHEN @ht.doc.init_datavat = 'CURRENT_DATE' THEN CURRENT_DATE()
					ELSE
						NEW.Data_Vat
					END,
				/* było
				NEW.Data_Vat = 
						IF(@ht.doc.IsKorekta OR NEW.Rodzaj = 105,
							'0000-00-00', 
							@ht.Init_doc_date
						),
				*/
				
				NEW.DataWaluty = IFNULL(NEW.DataWaluty, @ht.Init_doc_date),
				NEW.DataPlatnosci = IFNULL(NEW.DataPlatnosci, @ht.Init_doc_date),
				
				NEW.kurs_rozliczen = IFNULL(NEW.kurs_rozliczen, 1),
				
				NEW.gruparozrach = IFNULL(@ng.f.gruparozrach := @ht.doc.RzTypRozrach, 0),
				NEW.Create_AT = IF(IFNULL(NEW.Create_AT, '0000-00-00 00:00:00') = '0000-00-00 00:00:00', NOW(), NEW.Create_AT),
				
				NEW.kontrklasacenowa = 
					IF(IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE), 
						IFNULL((SELECT kl.idn FROM `klasycen` kl WHERE ugrpGUID = NEW.ugrpGUID ORDER BY idn LIMIT 1), 0), 
						NEW.kontrklasacenowa
					)
			;	

			IF @session.HT.IR.Jedna_data_na_dok_mag AND 
			-- (NEW.Rodzaj IN (@ht.CPzPz, @ht.CRzWz, @ht.CMMMM, @ht.CPZPw, @ht.CRZRW, @ht.CRzKR, @ht.CPzKW, @ht.CRzKW, @ht.CPzKP, @ht.CRzKZ, @ht.CRzKK, @ht.CMMMR, @ht.CMMMP, 104)) 
			-- było do 14-01-2016 (NEW.Rodzaj IN (@ht.CPzPz, @ht.CRzWz, @ht.CMMMM, @ht.CPZPw, @ht.CRZRW, @ht.CRzKR, @ht.CPzKW, @ht.CRzKW, @ht.CPzKP, @ht.CRzKZ, @ht.CRzKK, 104)) 
			-- dodalem (zad Id=41986) 103,102 : PR+ i PR -.
			(NEW.Rodzaj IN (@ht.CPzPz, @ht.CRzWz, @ht.CMMMM, @ht.CPZPw, @ht.CRZRW, @ht.CRzKR, @ht.CPzKW, @ht.CRzKW, @ht.CPzKP, @ht.CRzKZ, @ht.CRzKK, @ht.CMM_MP, @ht.CMM_MR 
			-- , IF(@session.globals.Owner = 'CRIST', @ht.CKsNN, -9999)	--	zakomentowalem (AP wraz z RG 2018-03-08)
			)) 
			THEN
				SET 
					NEW.DataSprzed = NEW.datawystaw,
					NEW.DataWplywu = NEW.datawystaw
				;
			END IF;
			
		--	Na wszelki wypadek -> DataWplywu nie moze byc < datawystaw	
			SET NEW.DataWplywu = GREATEST(NEW.DataWplywu, NEW.datawystaw);
			
		--	KANCELARIA
			SET	NEW.status_obieg = 
				IF(NEW.Rodzaj = @ht.CKsNN AND @session.globals.Owner != 'CRIST',
					3,
					NEW.status_obieg
				)
			;

			SET NEW.DataPlatnosci = _GetDataPlatnosci(NEW.datawystaw, NEW.sposobplatn);
			SET NEW.dataplatnosci_oczekiwana = _GetDataPlatnosci_oczekiwana(NEW.DataPlatnosci, NEW.datawplywu);
		
			SET NEW.rozrachunek = IFNULL(NEW.rozrachunek, 0);
			
			/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
				Rozrachunki
			------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
			/*	od 8 VIII już nie - patrz wyżej...zad. 59453 ATM - inicjacja NettoDoRozrach z operdoc
			SET NEW.NettoDoRozrach = 0;  -- domyslnie od Brutto do rozrach
			*/
			/*
			1. uwaga inicjuj waluta_rozliczen na waluta !!!!!!!!!!!!
			2. Inicjacja nastepuje gdy wpiszemu w UPDATE `opng_e` SET Tag = -1; !!! wtedy w triggerze zosstanie zainicjowana na 0 lub 1
			PATRZ update i @transact.Is_Inicjacja
			*/
			IF NEW.rozrachunek OR (NEW.Rodzaj = @ht.CKsNN) THEN --	gdy Rozrachunek lub Zakup KANCELARIA naliczaj pola rozrachunkowe
				-- CALL rozrach_rodzaj_calc(NEW.Rodzaj, NEW.gruparozrach_wymus, NEW.Brutto);
			CALL _Rozrach_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,
				'', '', '', '');
				
			END IF;	
			
			

		END IF;		--	NOWE czyli @transact.ISNewDoc

   
		SET NEW.akcept_platn_uwagi = IFNULL(NEW.akcept_platn_uwagi, "");
		
		DROP TEMPORARY TABLE IF EXISTS `t_trigg_operdoc`;
	ELSE	--	PO NOWEMU
	--	po staremu
		
		DROP TEMPORARY TABLE IF EXISTS `t_trigg_operdoc`;
		CREATE TEMPORARY TABLE IF NOT EXISTS `t_trigg_operdoc` SELECT * FROM `operdoc` WHERE rodzaj = NEW.Rodzaj;
		-- ALTER TABLE `t_trigg_operdoc` ADD PRIMARY KEY Rodzaj (`Rodzaj`);
		-- CREATE TEMPORARY TABLE IF NOT EXISTS `t_trigg_operdoc` LIKE `operdoc`;
		-- INSERT INTO `t_trigg_operdoc` SELECT * FROM `operdoc`;

		CALL ht_rodzaj_update_zmienne(NEW.Rodzaj);
		-- CALL ht_rodzaj_calc(NEW.Rodzaj);

		CALL e_opng_rec_ustal_magazyny('', NEW.Rodzaj, NEW.ZMagazynu, NEW.DoMagazynu);
		
		SET
			@ng.f.Brutto = IFNULL(NEW.Brutto,	0),	
			
			-- @ng.f.CKwota,		
			-- @ng.f.CKwotaWal,		
			-- @ng.f.CWN,		
			-- @ng.f.CRozliczone,		
			-- @ng.f.Kurs_rozliczen,		
			-- @ng.f.gruparozrach,		
			@ng.f.gruparozrach_wymus = IFNULL(NEW.gruparozrach_wymus, 0),		
			@ng.f.Waluta = IFNULL(NEW.Waluta,	0)
		;	
		
		
		-- UPDATE `t_ht_ngcalc` t
		SET @transact.ISNewDoc = (IFNULL(NEW.IDN, 0) = 0);
		IF @transact.ISNewDoc THEN

			UPDATE `t_trigg_operdoc` d
			SET
				NEW.rozrachunek = d.IsRozrachunek,
				NEW.grupaoper = @ng.f.grupaoper := d.Grupa,
				NEW.wzordekr = d.wzordekr,
				NEW.rv_id = d.rv_id, 
				NEW.RodzajDowodu = d.RodzajDowodu,
				NEW.lang_id = d.lang_id,                    -- # 034196
				NEW.ugrpGUID = d.ugrpGUID,
				NEW.gruparozrach = IFNULL(@ng.f.gruparozrach := @ht.doc.RzTypRozrach, 0)
				
			WHERE
				d.Rodzaj = NEW.Rodzaj
			;
			SET
				-- bylo NEW.idnuser = IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin),
				NEW.idnuser = IFNULL(NEW.idnuser, IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin)),
				NEW.ugrpGUID = IFNULL(@session.user.CurrugrpGUID, ''),
				NEW.Deleted = IFNULL(NEW.Deleted, 0),
				NEW.ilepoz = IFNULL(NEW.ilepoz, 0),
				--	Daty
				NEW.DataWystaw = IFNULL(NEW.DataWystaw, CURRENT_DATE()),
				NEW.DataSprzed = IFNULL(NEW.DataSprzed, CURRENT_DATE()),
				NEW.DataWplywu = IFNULL(NEW.DataWplywu, CURRENT_DATE()),
				NEW.Data_Vat = 
					CASE 
					WHEN @ht.doc.init_datavat IS NULL THEN '0000-00-00' -- null
					WHEN @ht.doc.init_datavat = 'INIT_DATE' THEN @ht.Init_doc_date
					WHEN @ht.doc.init_datavat = 'DATE_WPLYW_RZECZYW' THEN NEW.datawplywu_rzeczywista
					WHEN @ht.doc.init_datavat = 'CURRENT_DATE' THEN CURRENT_DATE()
					ELSE
						NEW.Data_Vat
					END,
				/* było
				NEW.Data_Vat = 
						IF(@ht.doc.IsKorekta OR NEW.Rodzaj = 105,
							'0000-00-00', 
							@ht.Init_doc_date
						),
				*/
				NEW.DataWaluty = IFNULL(NEW.DataWaluty, CURRENT_DATE()),
				NEW.DataPlatnosci = IFNULL(NEW.DataPlatnosci, CURRENT_DATE()),
				NEW.dataplatnosci_oczekiwana = _GetDataPlatnosci_oczekiwana(NEW.DataPlatnosci, NEW.datawplywu),
				NEW.kurs_rozliczen = IFNULL(NEW.kurs_rozliczen, 1),
				
				/*
-- jmam 				NEW.rozrachunek = @ht.doc.IsRozrachunek,
				NEW.grupaoper = @ng.f.grupaoper := @ht.doc.Optyp,
				NEW.wzordekr = @ht.doc.wzordekr,
				NEW.rv_id = @ht.doc.rv_id, 
				NEW.RodzajDowodu = @ht.doc.RodzajDowodu,
				NEW.ugrpGUID = @ht.doc.ugrpGUID,
				*/
				NEW.gruparozrach = IFNULL(@ng.f.gruparozrach := @ht.doc.RzTypRozrach, 0)
				
			;	
			
		END IF;
		
		SET NEW.rozrachunek = IFNULL(NEW.rozrachunek, 0);
		SET NEW.akcept_platn_uwagi = IFNULL(NEW.akcept_platn_uwagi, "");
	END IF;		--	PO Staremu
END;
$$

/* ************************************************************************************************************************************************************************
	AI
************************************************************************************************************************************************************************ */	

/* ************************************************************************************************************************************************************************
	BU
************************************************************************************************************************************************************************ */	
DROP TRIGGER IF EXISTS `opng_e_bu`$$
CREATE DEFINER=`root`@`localhost` TRIGGER `opng_e_bu` BEFORE UPDATE ON `opng_e` FOR EACH ROW 
S_opng_e_bu: BEGIN

	IF _TriggerDisabled() THEN LEAVE S_opng_e_bu; END IF;
	

	IF NEW.Calc_Ver >= 3 THEN
	
		set @XXX = 'opng_e_bu.0';
		CALL ht_rodzaj_update_zmienne(NEW.Rodzaj);
		
		
		DROP TEMPORARY TABLE IF EXISTS `t_trigg_operdoc`;
		CREATE TEMPORARY TABLE IF NOT EXISTS `t_trigg_operdoc` SELECT * FROM `operdoc` WHERE rodzaj = NEW.Rodzaj;
		-- ALTER TABLE `t_trigg_operdoc` ADD PRIMARY KEY Rodzaj (`Rodzaj`);
		-- CREATE TEMPORARY TABLE IF NOT EXISTS `t_trigg_operdoc` LIKE `operdoc`;
		-- INSERT INTO `t_trigg_operdoc` SELECT * FROM `operdoc`;
		set @XXX = 'opng_e_bu.1';
		-- CALL ht_rodzaj_update_zmienne(NEW.Rodzaj);
		set @XXX = 'opng_e_bu.2';
		SET
			@transact.Is_Inicjacja = !(NEW.tag <=> OLD.tag) AND (NEW.tag = -1),
			@transact.Is_Kontrah_Inicjacja = !(NEW.tag <=> OLD.tag) AND (NEW.tag = -2),
			@transact.Rodzaj.Change = !(NEW.Rodzaj <=> OLD.Rodzaj),
			@transact.Mag1.Change = !(NEW.ZMagazynu <=> OLD.ZMagazynu),
			@transact.Mag2.Change = !(NEW.DoMagazynu <=> OLD.DoMagazynu)
		;
		set @XXX = 'opng_e_bu.3';
		
		
		-- CALL ht_rodzaj_calc(NEW.Rodzaj);
		IF @transact.Mag1.Change OR @transact.Mag2.Change THEN
			/*
			SELECT
				IF(d.MagTyp = @ht.mtRZ, 0, NEW.DoMagazynu),
				IF(d.MagTyp = @ht.mtPZ, 0, NEW.ZMagazynu)
			FROM `operdoc` d
			WHERE
				d.Rodzaj = NEW.Rodzaj
			INTO
				NEW.DoMagazynu,
				NEW.ZMagazynu
			;
			*/
			/**/
			UPDATE `t_trigg_operdoc` d
			SET
				NEW.DoMagazynu = IF(d.MagTyp = @ht.mtRZ, 0, NEW.DoMagazynu),
				NEW.ZMagazynu = IF(d.MagTyp = @ht.mtPZ, 0, NEW.ZMagazynu)
			WHERE
				d.Rodzaj = NEW.Rodzaj
			;
			/**/
		END IF;
		
		SET @NEW.DoMagazynu = NEW.DoMagazynu;
		SET @NEW.ZMagazynu = NEW.ZMagazynu;
		SET @ng.f.tag = NEW.tag;
		SET
			@ht.Init_doc_date =  _Get_Init_doc_date()
		;
		
		SET @transact.ISNewDoc = (IFNULL(NEW.IDN, 0) = 0);
		IF @transact.ISNewDoc THEN
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.1', 'opng_e', 'NEW.GUID', '', @.X.log);

			IF NEW.Rodzaj_typ = -1 THEN
				SET NEW.Rodzaj_typ = 0;
			END IF;
			
			IF @transact.Rodzaj.Change THEN
				/*
				SELECT 
					d.IsRozrachunek,
					@ng.f.grupaoper := d.Grupa,	-- ??? 
					d.wzordekr,
					d.rv_id, 
					d.RodzajDowodu,
					d.ugrpGUID,
					IFNULL(@ng.f.gruparozrach := @ht.doc.RzTypRozrach, 0)
				FROM `operdoc` d
				WHERE
					d.Rodzaj = NEW.Rodzaj
				INTO
					NEW.rozrachunek,
					NEW.grupaoper,
					NEW.wzordekr,
					NEW.rv_id, 
					NEW.RodzajDowodu,
					NEW.ugrpGUID,
					NEW.gruparozrach
				;
				*/
				/**/
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.2', 'opng_e', 'NEW.GUID', '', @.X.log);
				UPDATE `t_trigg_operdoc` d
				SET
					NEW.rozrachunek = d.IsRozrachunek,
					NEW.grupaoper = @ng.f.grupaoper := d.Grupa,
					-- NEW.wzordekr = d.wzordekr,
					NEW.wzordekr = IF(NEW.fvrudowz AND IFNULL(d.wzordekr_a, '') <> '', d.wzordekr_a, d.wzordekr),
					NEW.rv_id = d.rv_id, 
					NEW.RodzajDowodu = d.RodzajDowodu,
					-- PO CO??? juz jest ustawiony!!!??? NEW.ugrpGUID = d.ugrpGUID,
					
					NEW.kancelaria_kierunek = d.init_kancelaria_kierunek,
					
				--	8 VIII dodano zad. 59453 ATM - inicjacja NettoDoRozrach z operdoc
					NEW.NettoDoRozrach = IF(NEW.waluta_rozliczen > 0, d.NettoDoRozrachWal, d.NettoDoRozrachPLN),
					NEW.gruparozrach = IFNULL((@ng.f.gruparozrach := @ht.doc.RzTypRozrach), 0)
				
				
				WHERE
					d.Rodzaj = NEW.Rodzaj
				;
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.2...', 'opng_e', 'NEW.GUID', '', @.X.log);
				SET @Watch = 'UPDATE `t_trigg_operdoc` d';
				/**/
			--	KANCELARIA
				SET	NEW.status_obieg = 
					IF(NEW.Rodzaj = @ht.CKsNN AND @session.globals.Owner != 'CRIST',
						3,
						NEW.status_obieg
					)
				;
			END IF;
					/*
					--	Dla SIMEX-u gdy brak wzorca dekr. 12 II 2024 - awaryjnie!!!
					IF NOT @transact.Rodzaj.Change AND @session.globals.Owner = 'SIMEX' and NEW.wzordekr = '' THEN
						UPDATE `t_trigg_operdoc` d
						SET
							NEW.wzordekr = IF(NEW.fvrudowz AND IFNULL(d.wzordekr_a, '') <> '', d.wzordekr_a, d.wzordekr)
						WHERE
							d.Rodzaj = NEW.Rodzaj
						;
					END IF;
					*/
			
													set @XXX = 'opng_e_bu.4';			
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.3', 'opng_e', 'NEW.GUID', '', @.X.log);
			SET
				NEW.idnuser = IFNULL(NEW.idnuser, IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin)),
				-- PO CO??? juz jest ustawiony!!!??? NEW.ugrpGUID = IFNULL(@session.user.CurrugrpGUID, ''),
				NEW.Deleted = IFNULL(NEW.Deleted, 0),
				NEW.ilepoz = IFNULL(NEW.ilepoz, 0),
				--	Daty
				NEW.DataWystaw = IFNULL(NEW.DataWystaw, @ht.Init_doc_date),
				NEW.DataSprzed = IFNULL(NEW.DataSprzed, @ht.Init_doc_date),
				NEW.DataWplywu = IFNULL(NEW.DataWplywu, @ht.Init_doc_date),
				-- jmam.2021-04-20 NEW.DataWaluty = IFNULL(NEW.DataWaluty, @ht.Init_doc_date),
				NEW.DataPlatnosci = IFNULL(NEW.DataPlatnosci, @ht.Init_doc_date),
				/*
				nizej zmieniam/tworze dataplatnosci_oczekiwana o ile zmienila sie data wplywu lub data platmnosci a tutaj nie musze wyprzedzac wypadkow
				NEW.dataplatnosci_oczekiwana = 
					IF(@session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej >= 0,	IFNULL(NEW.dataplatnosci_oczekiwana, @ht.Init_doc_date), NULL),								
				*/	
				NEW.kurs_rozliczen = IFNULL(NEW.kurs_rozliczen, 1),
				/*
	-- jmam			NEW.rozrachunek = @ht.doc.IsRozrachunek,
				NEW.grupaoper = @ng.f.grupaoper := @ht.doc.Optyp,
				NEW.wzordekr = @ht.doc.wzordekr,
				NEW.rv_id = @ht.doc.rv_id, 
				NEW.RodzajDowodu = @ht.doc.RodzajDowodu,
				NEW.ugrpGUID = @ht.doc.ugrpGUID,
				*/
				NEW.gruparozrach = IFNULL((@ng.f.gruparozrach := @ht.doc.RzTypRozrach), 0)
				
			;	
			/* było 
			IF NEW.Data_Vat = '0000-00-00' AND NOT (@ht.doc.IsKorekta OR NEW.Rodzaj = 105) THEN
				SET NEW.Data_Vat = @ht.Init_doc_date;
			END IF;
			*/
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.4', 'opng_e', 'NEW.GUID', '', @.X.log);
			IF NULLIF(NEW.Data_Vat, '0000-00-00') IS NULL THEN
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.4.a', 'opng_e', 'NEW.GUID', '', @.X.log);
				SET 
					NEW.Data_Vat = 
						CASE 
						WHEN @ht.doc.init_datavat IS NULL THEN '0000-00-00' -- null
						WHEN @ht.doc.init_datavat = 'INIT_DATE' THEN @ht.Init_doc_date
						WHEN @ht.doc.init_datavat = 'DATE_WPLYW_RZECZYW' THEN NEW.datawplywu_rzeczywista
						WHEN @ht.doc.init_datavat = 'CURRENT_DATE' THEN CURRENT_DATE()
						ELSE
							NEW.Data_Vat
						END
				;
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.4.b', 'opng_e', 'NEW.GUID', '', @.X.log);
			END IF;
													set @XXX = 'opng_e_bu.5';			
			/*
			To ustawiam zmieniajac kontrahenta a tu tylko gdy jest pusty
			*/
			IF IFNULL(NEW.KontrGUID, '') = '' THEN 
				SET
					NEW.Przeliczenie_B_N = 
						(IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND NEW.Rodzaj IN (0, 2))
						OR
						(IFNULL(@session.HT.IR.Przeliczenie_B_N, FALSE) AND (NEW.grupaoper = @ht.ST OR NEW.Rodzaj = 10))
				;
			END IF;
		END IF;
		
		-- IF _ExtFlags('GET', NEW.ExtFlags, 'USE_VALIDATOR', '', '') = '<USE_VALIDATOR>' THEN
		IF _ExtFlags('GET', NEW.ExtFlags, 'USE_VALIDATOR', '', '') IN ('<USE_VALIDATOR>', '<GUI>') THEN
			SET NEW.ExtFlags = _ExtFlags('Del', NEW.ExtFlags, 'USE_VALIDATOR', '', '');
			SET NEW.ExtFlags = _ExtFlags('Del', NEW.ExtFlags, 'GUI', '', '');
			SET NEW.ExtFlags_Inf = _Validators('Set.USE_VALIDATOR', NEW.ExtFlags_Inf, @session.HT.OP.walidacja_pol_aktywna, '', '', '', '');
			-- SET NEW.ExtFlags_Inf = _Validators('Set.USE_VALIDATOR', NEW.ExtFlags_Inf, TRUE, '', '', '', '');
		END IF;
		
		/*
		IF _ExtFlags('GET', NEW.ExtFlags, 'GUI', '', '') = '<GUI>' THEN
		-- IF NEW.ExtFlags LIKE '%<GUI>%' THEN
			SET NEW.ExtFlags = _ExtFlags('Del', NEW.ExtFlags, 'GUI', '', '');
			SET NEW.ExtFlags_Inf = _Validators('Set.USE_VALIDATOR', NEW.ExtFlags_Inf, @session.HT.OP.walidacja_pol_aktywna, '', '', '', '');
		END IF;
		*/
		
		--	Tymczasowa
		SET NEW.tymczasowa = GREATEST(NEW.tymczasowa, 0);	--	Ważne aby nie było -1
		--	Daty
		IF @session.HT.IR.Jedna_data_na_dok_mag AND 
		-- (NEW.Rodzaj IN (@ht.CPzPz, @ht.CRzWz, @ht.CMMMM, @ht.CPZPw, @ht.CRZRW, @ht.CRzKR, @ht.CPzKW, @ht.CRzKW, @ht.CPzKP, @ht.CRzKZ, @ht.CRzKK, @ht.CMMMR, @ht.CMMMP, 104)) 
		-- (NEW.Rodzaj IN (@ht.CPzPz, @ht.CRzWz, @ht.CMMMM, @ht.CPZPw, @ht.CRZRW, @ht.CRzKR, @ht.CPzKW, @ht.CRzKW, @ht.CPzKP, @ht.CRzKZ, @ht.CRzKK, @ht.CKsNN)) 
		-- było do 14-01-2016 (NEW.Rodzaj IN (@ht.CPzPz, @ht.CRzWz, @ht.CMMMM, @ht.CPZPw, @ht.CRZRW, @ht.CRzKR, @ht.CPzKW, @ht.CRzKW, @ht.CPzKP, @ht.CRzKZ, @ht.CRzKK)) 
		-- dodalem (zad Id=41986) 103,102 : PR+ i PR -.
		(NEW.Rodzaj IN (@ht.CPzPz, @ht.CRzWz, @ht.CMMMM, @ht.CPZPw, @ht.CRZRW, @ht.CRzKR, @ht.CPzKW, @ht.CRzKW, @ht.CPzKP, @ht.CRzKZ, @ht.CRzKK, @ht.CMM_MP, @ht.CMM_MR 
		-- , IF(@session.globals.Owner = 'CRIST', @ht.CKsNN, -9999)	--	zakomentowalem (AP wraz z RG 2018-03-08)
		)) 
		THEN
			SET 
				NEW.DataSprzed = NEW.datawystaw,
				NEW.DataWplywu = NEW.datawystaw
			;
		END IF;
		
													set @XXX = 'opng_e_bu.6';			
		IF @transact.Is_Inicjacja THEN
			/*	od 8 VIII już nie - patrz wyżej...zad. 59453 ATM - inicjacja NettoDoRozrach z operdoc
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.inicjacja', 'opng_e', 'NEW.GUID', '', @.X.log);
			SET NEW.NettoDoRozrach = 0;
			-- UWAGA Dorobic rowniez dla PLN
			-- do zatwierdzenia przez jmam po powrocie z wkacji
			IF NEW.waluta_rozliczen > 0 THEN	--	Dla dokumentow w walucie obcej
				SELECT NettoDoRozrachWal FROM `operdoc` WHERE rodzaj = NEW.Rodzaj INTO @NEW.NettoDoRozrachWal;
				SET NEW.NettoDoRozrach = IFNULL(@NEW.NettoDoRozrachWal, 0);
			END IF; -- NettoDoRozrach
			*/
			UPDATE `t_trigg_operdoc` d
			SET
			--	8 VIII dodano zad. 59453 ATM - inicjacja NettoDoRozrach z operdoc
				NEW.NettoDoRozrach = IF(NEW.waluta_rozliczen > 0, d.NettoDoRozrachWal, d.NettoDoRozrachPLN)
			WHERE
				d.Rodzaj = NEW.Rodzaj
			;
		
		END IF;
		SET NEW.CWN = IFNULL(NEW.CWN, 0); 
		
		/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
			NEW.KontrGUID
		------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
		SET @transact.KontrGUIDChanged = !(NEW.KontrGUID <=> OLD.KontrGUID) OR @transact.Is_Kontrah_Inicjacja;
		IF @transact.KontrGUIDChanged THEN
			SET 
				/* 
					AREAGUID
					gdy @session.HT.IR.Inicjuj_lokaliozacje_z_Kontrahenta to ...
						gdy kontrahent byl pusty czyli jest inicjowany to
							gdy AreaGUID jest pusty to inicjuj
							gdy AreaGUID jest ustawiony to oznacza ze inicjujemy te lokalizacje wczesniej i zostawiamy ja nie zminiajac
						gdy kontrahent NIE byl pusty to zawsze zminiamy lokalizacje
				
				*/
				@transact.AreaGUID.Init.from.Kontrah = 
					((IFNULL(OLD.KontrGUID, '') = '') AND (IFNULL(NEW.AreaGUID, '') = ''))
					OR
					((IFNULL(OLD.KontrGUID, '') != ''))
			;
			IF IFNULL(NEW.KontrGUID, '') != '' THEN 
		
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.KontrGUID.1', 'opng_e', 'NEW.GUID', '', @.X.log);
				UPDATE `kontrah` k
				SET
					NEW.kontridn = k.Idn,
					NEW.kontrnazwa = k.nazwa, 
					NEW.kontrsymbol = k.symbol,
					NEW.kontradres = CONCAT(k.ulica,', ',k.zipcode, ' ', k.nazwamiasta),
					NEW.kontrklasacenowa = IF(NOT IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE) OR NEW.kontrklasacenowa = 0, k.klasacenowa, NEW.kontrklasacenowa),
					NEW.kontrnip = k.nip, 
					NEW.kontrpodzialnip = k.podzialnip, 
					NEW.kontrupowaznienie = k.Upowaznienie,
					NEW.spedycja = k.spedycja,
					NEW.platnikguid = k.platnikguid, 
					NEW.akwizytorguid = k.akwizytorguid, 
					NEW.rodzaj2 = k.rodzaj2, 
					NEW.kontrrabat = k.rabat,
					NEW.idn_tab_kurs = k.idn_tab_kurs,
					NEW.Odbierajacy = IF(@session.HT.IR.PrzenosOdbierajacegoZKartyKontrahenta AND k.Upowaznienie = 0, k.Odbierajacy, NEW.Odbierajacy),
					NEW.info4 = IF(@session.globals.Owner = 'TRANSBUD', _varSTR(k.pesel), NEW.info4),
					NEW.info6 = IF(@session.globals.Owner = 'TRANSBUD', _varSTR(k.krs), NEW.info6),
			-- 2016-01-14	NEW.Przeliczenie_B_N = (@session.HT.IR.Przeliczenie_B_N AND (NEW.grupaoper = @ht.ST OR NEW.Rodzaj = 10)),
			-- 		NEW.Przeliczenie_B_N = IF(@session.HT.IR.Przeliczenie_B_N_z_klasy_cen, kc.czy_ceny_brt, NEW.Przeliczenie_B_N),
					-- NEW.lang_id = k.lang_id,
					-- bylo :(
					-- NEW.lang_id = IFNULL(NEW.lang_id, k.lang_id),
			-- 2018-06-27	wspolna decyzja - konsylium apro + jmam - gdy 10 to bierz tez pod uwage rodzaj2 klienta	
					NEW.Przeliczenie_B_N = 
						(IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND (NEW.Rodzaj IN (0, 2) OR (NEW.Rodzaj = 10 AND k.rodzaj2 IN (0, 2))))
						OR
						(IFNULL(@session.HT.IR.Przeliczenie_B_N, FALSE) AND (NEW.grupaoper = @ht.ST OR NEW.Rodzaj = 10)),
					NEW.Rodzaj_Przeliczenia = 
				--	Gdy drukarka fiskalna i realizujemy tu paragon lub Fakt. imienna (uproszcz.) to ustaw rodzaj przeliczenia na 3 (Fiskalny)
				--	Mamy ciag zam-> Rodzaj2 ale przeliczany wg rodzaju rodzaj_fin_do_WZ z kontrahenta... potem Rodzaj2->Finansowy
						IF(
						IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND 
						(NEW.Rodzaj IN (@ht.CSpBR, @ht.CSpRU, @ht.CSpKR) OR (NEW.Rodzaj = 10 AND IFNULL(k.rodzaj_fin_do_WZ, NEW.Rodzaj2) IN (@ht.CSpBR, @ht.CSpRU, @ht.CSpKR))),
							3,	--	_BN_CN_WN - fiskalne z brutto->netto  (fiskalne)
							NEW.Rodzaj_Przeliczenia
						),
					NEW.lang_id = IFNULL(k.lang_id, NEW.lang_id),
					NEW.KatCol0 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol0, NEW.KatCol0),
					NEW.KatCol1 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol1, NEW.KatCol1),
					NEW.KatCol2 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol2, NEW.KatCol2),
					NEW.KatCol3 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol3, NEW.KatCol3),
					NEW.KatCol4 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol4, NEW.KatCol4),
				--	Stare ... inicj.spos.platn - nie uzywane (błędna logika)
					-- NEW.sposobplatn = IF((@ht.doc.Optyp IN (@ht.ZT, @ht.ZP)) AND @session.HT.IR.Zakup_nie_inicjuj_sposobu_platnosci_z_karty_kontra, NEW.sposobplatn, k.sposplat),
				--	Nowe ... inicj.spos.platn 	(apro luty 2022) + (jmam mar 2022)
					NEW.sposobplatn = 
						/*
						IF((@ht.doc.Optyp IN (@ht.ZT, @ht.ZP)) AND @session.HT.IR.Zakup_inicjuj_sposob_platnosci_z_karty_kontrah, 
							IFNULL(k.sposplat, 0), 	-- zakup i flaga
							IF(NOT (@ht.doc.Optyp IN (@ht.ZT, @ht.ZP)),	
								k.sposplat,			-- nie zakup
								NEW.sposobplatn		
							)
						),
						*/
						_Get_sposobplatn('', 'OP', @ht.doc.Optyp, NEW.Rodzaj, NEW.sposobplatn, k.sposplat, 0),
					NEW.kontofk = 
						IF(@session.globals.Owner != 'ASEKURACJA', 
							IF(@ht.doc.Rztyp IN (@ht.Rz_NL, @ht.RzSNL, @ht.Rz_SN, @ht.RzSSN), -- aRzTyp in [Rz_NL, RzSNL, Rz_SN, RzSSN],
								k.kontofk,
								IF(@ht.doc.Rztyp IN (@ht.Rz_ZB, @ht.RzSZB, @ht.Rz_SZ, @ht.RzSSZ), -- aRzTyp in [Rz_ZB, RzSZB, Rz_SZ, RzSSZ],
									k.kontofk2,
									NEW.kontofk
								)	
							),	
							NEW.kontofk
						),
					NEW.uwagi = 
						IF(@session.HT.IR.przepisz_uwagi_kontrah_do_oper, 
							IF(@session.globals.Owner in  ('CDG','AXIS','ASTE'),
								CONCAT(k.UwagiNaFV, '\n'),
								_CONCATStr(k.Uwagi, k.UwagiNaFV, '\n') 
							),
							NEW.uwagi
						),

						NEW.dotyczy = IF(@session.globals.Owner = 'STANPOL', k.opis_dzialalnosci, NEW.dotyczy),
					k.TypSymbolow = (@tr.oppo_e.TypSymbolow := k.TypSymbolow),
					NEW.ugrpGUID = IF(@session.HT.IR.przepisz_ugrpGUID_z_kontrah, k.ugrpGUID, NEW.ugrpGUID),
					NEW.AreaGUID = 
						IF(@session.HT.IR.Inicjuj_lokaliozacje_z_Kontrahenta AND @transact.AreaGUID.Init.from.Kontrah AND NEW.Rodzaj = 11, 
							IFNULL(k.AreaGUID,
								(SELECT an.GUID FROM `erp_area_nodes` an WHERE an.Type = 'LOC' AND an.KontrGUID = NEW.KontrGUID LIMIT 1)
							),
							NEW.AreaGUID
						),
					NEW.split_payment = IF(@ht.doc.Optyp IN (@ht.ZT, @ht.ZP), k.SplitPayment, 0),
				--	pole powiazany w `kontrah` gdy 0 po pole jpkflags tylko czyścic gdy <> 0 dodać do jpkflags "TP"
					NEW.jpkflags = 
						REPLACE(
							IF(IFNULL(k.powiazany, 0) = 0,
								REPLACE(CONCAT(NULLIF(NEW.jpkflags, ''), ';'), 'TP;', ''), 
								REPLACE(CONCAT_WS(';', REPLACE(CONCAT(NULLIF(NEW.jpkflags, ''), ';'), 'TP;', ''), 'TP'), ';;', ';')
							),
							';;', ';'
						)	
					
				/*					
					  {$IFDEF UprawnieniaDoZapisow}
					  if RegistryInt.GetRegIntValueBoolean('przepisz_ugrpGUID_z_kontrah', False, 'OPNGINFOPATH') then
						aNaglowek.FieldByName('ugrpGUID').AsString := aDSTempKontrah.FieldByName('ugrpGUID').AsString;
					  {$ENDIF UprawnieniaDoZapisow}
				*/
				WHERE 
					k.guid = NEW.KontrGUID
				;
				
											-- tylko testy!!!	CALL _exproc_LOG('LOG', 'test&opng_e.update.KontrGUID.1...', 'opng_e', 'NEW.GUID', '', @.X.log);
				
			ELSE
			--	WYCZYŚĆ
				-- UPDATE `t_ht_ngpo_transact` t
				SET
					NEW.kontridn = 0,
					@tr.oppo_e.TypSymbolow := 0,
					NEW.kontrnazwa = '', 
					NEW.kontrsymbol = '',
					NEW.kontradres = '',
					NEW.kontrklasacenowa = IF(NOT IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE), 0, NEW.kontrklasacenowa),
					NEW.kontrnip = '', 
					NEW.kontrpodzialnip = 0, 
					NEW.kontrupowaznienie = 0,
					NEW.spedycja = 0,
					NEW.platnikguid = '', 
					NEW.akwizytorguid = '', 
					NEW.rodzaj2 = 0, 
					NEW.kontrrabat = 0,
					NEW.idn_tab_kurs = 0,
					NEW.Odbierajacy = NULL,
					NEW.info4 = '',
					NEW.info6 = '',
			 		-- 2016-01-14	NEW.Przeliczenie_B_N = (@session.HT.IR.Przeliczenie_B_N AND (NEW.grupaoper = @ht.ST OR NEW.Rodzaj = 10)),
					NEW.lang_id = NULL,
					NEW.KatCol0 = -1,
					NEW.KatCol1 = -1,
					NEW.KatCol2 = -1,
					NEW.KatCol3 = -1,
					NEW.KatCol4 = -1,
					NEW.sposobplatn = 0,
					NEW.kontofk = '',	
					NEW.uwagi = '',
					NEW.dotyczy = '',
					NEW.split_payment = 0,
					NEW.jpkflags = ''
				;
			END IF;
			
		END IF;
		
		IF (IFNULL(NEW.PlatnikGUID, '') = '') AND (IFNULL(NEW.KontrGUID, '') != '') THEN
 			-- SET NEW.PlatnikGUID = NEW.KontrGUID;
			UPDATE `kontrah` k
			SET
				NEW.platnikguid = IFNULL(k.platnikguid, NEW.KontrGUID)
			WHERE 
				k.guid = NEW.KontrGUID
			;	
		END IF;
	
-- TU DOTARLEM z 'NG<-kontrah'	
	--	PlatnikGUID
		SET @transact.PlatnikGUIDChanged = !(NEW.PlatnikGUID <=> OLD.PlatnikGUID) OR @transact.Is_Kontrah_Inicjacja;
		/* jmam */
		IF @transact.PlatnikGUIDChanged THEN
			--	Usun adres platnika
			--	Ustaw klase cenowa z platnika dla IZOHANU
			UPDATE `kontrah` k
			SET
				NEW.kontrklasacenowa = IF(NOT IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE) OR NEW.kontrklasacenowa = 0, k.klasacenowa, NEW.kontrklasacenowa)
				,
				NEW.KatCol0 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol0, NEW.KatCol0),
				NEW.KatCol1 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol1, NEW.KatCol1),
				NEW.KatCol2 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol2, NEW.KatCol2),
				NEW.KatCol3 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol3, NEW.KatCol3),
				NEW.KatCol4 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol4, NEW.KatCol4),
			--	Stare ... inicj.spos.platn - nie uzywane (błędna logika)
				-- NEW.sposobplatn = IF((@ht.doc.Optyp = @ht.ZT) AND @session.HT.IR.Zakup_nie_inicjuj_sposobu_platnosci_z_karty_kontra, NEW.sposobplatn, k.sposplat)
			--	Nowe ... inicj.spos.platn 	(apro luty 2022) + (jmam mar 2022)
				/*
				NEW.sposobplatn = IF((@ht.doc.Optyp IN (@ht.ZT, @ht.ZP)) AND @session.HT.IR.Zakup_inicjuj_sposob_platnosci_z_karty_kontrah, IFNULL(k.sposplat, 0), NEW.sposobplatn)
				*/
				NEW.sposobplatn = 
					_Get_sposobplatn('', 'OP', @ht.doc.Optyp, NEW.Rodzaj, NEW.sposobplatn, k.sposplat, 0)
			WHERE 
				k.guid = NEW.PlatnikGUID
				AND
				@session.globals.Owner IN ('PARAQUA', 'IZOHAN')
			;
			
			IF IFNULL(@ht.doc.Init_From_Platnik, FALSE) THEN
			/*	UWAGA tutaj musimy uwzglednic czy niektore pola nie maja byc inicjowane z platnika
				zad.  51740 - Akwizytor, termin płatności, region określony w teczce kontrahenta (na Płatniku) 
				z automatu ma się przepisywać do zamówienia/wz/faktury z możliwością zmiany
			*/
				UPDATE `kontrah` k
				SET
					NEW.AkwizytorGUID = IFNULL(k.AkwizytorGUID, NEW.AkwizytorGUID), 
					NEW.kontrklasacenowa = IF(NOT IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE) OR NEW.kontrklasacenowa = 0, k.klasacenowa, NEW.kontrklasacenowa),
					NEW.rodzaj2 = k.rodzaj2, 
					NEW.kontrrabat = k.rabat,
					NEW.idn_tab_kurs = k.idn_tab_kurs,
					-- ?? NEW.Odbierajacy = IF(@session.HT.IR.PrzenosOdbierajacegoZKartyKontrahenta AND k.Upowaznienie = 0, k.Odbierajacy, NEW.Odbierajacy),
					-- ?? NEW.info4 = IF(@session.globals.Owner = 'TRANSBUD', _varSTR(k.pesel), NEW.info4),
					-- ?? NEW.info6 = IF(@session.globals.Owner = 'TRANSBUD', _varSTR(k.krs), NEW.info6),
			-- 2016-01-14	NEW.Przeliczenie_B_N = (@session.HT.IR.Przeliczenie_B_N AND (NEW.grupaoper = @ht.ST OR NEW.Rodzaj = 10)),
			-- 		NEW.Przeliczenie_B_N = IF(@session.HT.IR.Przeliczenie_B_N_z_klasy_cen, kc.czy_ceny_brt, NEW.Przeliczenie_B_N),
					-- NEW.lang_id = k.lang_id,
					-- bylo :(
					-- NEW.lang_id = IFNULL(NEW.lang_id, k.lang_id),
			-- 2018-06-27	wspolna decyzja - konsylium apro + jmam - gdy 10 to bierz tez pod uwage rodzaj2 klienta	
					NEW.Przeliczenie_B_N = 
						(IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND (NEW.Rodzaj IN (0, 2) OR (NEW.Rodzaj = 10 AND k.rodzaj2 IN (0, 2))))
						OR
						(IFNULL(@session.HT.IR.Przeliczenie_B_N, FALSE) AND (NEW.grupaoper = @ht.ST OR NEW.Rodzaj = 10)),
					NEW.Rodzaj_Przeliczenia = 
				--	Gdy drukarka fiskalna i realizujemy tu paragon lub Fakt. imienna (uproszcz.) to ustaw rodzaj przeliczenia na 3 (Fiskalny)
				--	Mamy ciag zam-> Rodzaj2 ale przeliczany wg rodzaju rodzaj_fin_do_WZ z kontrahenta... potem Rodzaj2->Finansowy
						IF(
						IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND 
						(NEW.Rodzaj IN (@ht.CSpBR, @ht.CSpRU, @ht.CSpKR) OR (NEW.Rodzaj = 10 AND IFNULL(k.rodzaj_fin_do_WZ, NEW.Rodzaj2) IN (@ht.CSpBR, @ht.CSpRU, @ht.CSpKR))),
							3,	--	_BN_CN_WN - fiskalne z brutto->netto  (fiskalne)
							NEW.Rodzaj_Przeliczenia
						),
					NEW.lang_id = IFNULL(k.lang_id, NEW.lang_id),
					NEW.KatCol0 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol0, NEW.KatCol0),
					NEW.KatCol1 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol1, NEW.KatCol1),
					NEW.KatCol2 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol2, NEW.KatCol2),
					NEW.KatCol3 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol3, NEW.KatCol3),
					NEW.KatCol4 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol4, NEW.KatCol4),
				--	Stare ... inicj.spos.platn - nie uzywane (błędna logika)
					-- NEW.sposobplatn = IF((@ht.doc.Optyp IN (@ht.ZT,@ht.ZP)) AND @session.HT.IR.Zakup_nie_inicjuj_sposobu_platnosci_z_karty_kontra, NEW.sposobplatn, k.sposplat)
				--	Nowe ... inicj.spos.platn 	(apro luty 2022) + (jmam mar 2022)
					-- NEW.sposobplatn = IF((@ht.doc.Optyp IN (@ht.ZT, @ht.ZP)) AND @session.HT.IR.Zakup_inicjuj_sposob_platnosci_z_karty_kontrah, IFNULL(k.sposplat, 0), NEW.sposobplatn)
					/*
					NEW.sposobplatn = 
						IF((@ht.doc.Optyp IN (@ht.ZT, @ht.ZP)) AND @session.HT.IR.Zakup_inicjuj_sposob_platnosci_z_karty_kontrah, 
							IFNULL(k.sposplat, 0), 	-- zakup i flaga
							IF(NOT (@ht.doc.Optyp IN (@ht.ZT, @ht.ZP)),	
								k.sposplat,			-- nie zakup
								NEW.sposobplatn		
							)
						)
					*/
					NEW.sposobplatn = 
						_Get_sposobplatn('', 'OP', @ht.doc.Optyp, NEW.Rodzaj, NEW.sposobplatn, k.sposplat, 0)
					/*
					,
					NEW.kontofk = 
						IF(@session.globals.Owner != 'ASEKURACJA', 
							IF(@ht.doc.Rztyp IN (@ht.Rz_NL, @ht.RzSNL, @ht.Rz_SN, @ht.RzSSN), -- aRzTyp in [Rz_NL, RzSNL, Rz_SN, RzSSN],
								k.kontofk,
								IF(@ht.doc.Rztyp IN (@ht.Rz_ZB, @ht.RzSZB, @ht.Rz_SZ, @ht.RzSSZ), -- aRzTyp in [Rz_ZB, RzSZB, Rz_SZ, RzSSZ],
									k.kontofk2,
									NEW.kontofk
								)	
							),	
							NEW.kontofk
						),
					NEW.uwagi = 
						IF(@session.HT.IR.przepisz_uwagi_kontrah_do_oper, 
							IF(@session.globals.Owner in  ('CDG','AXIS'),
								CONCAT(k.UwagiNaFV, '\n'),
								_CONCATStr(k.Uwagi, k.UwagiNaFV, '\n') 
							),
							NEW.uwagi
						),

						NEW.dotyczy = IF(@session.globals.Owner = 'STANPOL', k.opis_dzialalnosci, NEW.dotyczy),
					k.TypSymbolow = (@tr.oppo_e.TypSymbolow := k.TypSymbolow),
					NEW.ugrpGUID = IF(@session.HT.IR.przepisz_ugrpGUID_z_kontrah, k.ugrpGUID, NEW.ugrpGUID),
					NEW.AreaGUID = 
						IF(@session.HT.IR.Inicjuj_lokaliozacje_z_Kontrahenta AND @transact.AreaGUID.Init.from.Kontrah AND NEW.Rodzaj = 11, 
							IFNULL(k.AreaGUID,
								(SELECT an.GUID FROM `erp_area_nodes` an WHERE an.Type = 'LOC' AND an.KontrGUID = NEW.KontrGUID LIMIT 1)
							),
							NEW.AreaGUID
						),
					NEW.split_payment = IF(@ht.doc.Optyp IN (@ht.ZT, @ht.ZP), k.SplitPayment, 0)
								
					*/
				WHERE 
					k.guid = NEW.PlatnikGUID
				;	
			END IF;
			SET @.Nic = '';
		END IF;

		
		IF !(NEW.ugrpGUID <=> OLD.ugrpGUID) AND IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE) THEN -- zmienila sie grupa (np. w CALL Opng_E_Run('', @IdnOper, '', '', ''); po insert)
			SET
				NEW.kontrklasacenowa = 
					IFNULL((SELECT kl.idn FROM `klasycen` kl WHERE ugrpGUID = NEW.ugrpGUID ORDER BY idn LIMIT 1), 0)
			;
		END IF;
		
		IF !(NEW.kontrklasacenowa <=> OLD.kontrklasacenowa) AND @session.HT.IR.Przeliczenie_B_N_z_klasy_cen THEN -- zmienila sie klasa cenowa
			UPDATE `klasycen` kc 
			SET
				-- NEW.Przeliczenie_B_N = IF(@session.HT.IR.Przeliczenie_B_N_z_klasy_cen, kc.czy_ceny_brt, NEW.Przeliczenie_B_N)
				NEW.Przeliczenie_B_N = kc.czy_ceny_brt
			WHERE 
				kc.idn = NEW.kontrklasacenowa
			;
		END IF;
		
		set @XXX = 'opng_e_bu.99';
		
		/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
			NEW.Waluta
		------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
		SET @transact.WalutaChanged = !(NEW.Waluta <=> OLD.Waluta);
		/* jmam.2021-04-20 
		IF @transact.WalutaChanged OR @transact.Is_Inicjacja THEN
			IF (NEW.Kurs <=> OLD.Kurs) THEN	--	skoro kurs sie nie zmienia to w JEDNYM Update mamy tylko zmiane waluty (bez kursu) a to oznacza że musimy pobrać Kurs
				SELECT 
					Kurs 
				FROM `kursy_calc` 
				WHERE 
					idnwaluty1 = NEW.Waluta 
					AND idnwaluty2 = 0 
				LIMIT 1 
				INTO 
					@NEW.Kurs
				;
				SET NEW.Kurs = IFNULL(@NEW.Kurs, 1);
			END IF;
			
			IF NEW.Waluta_Rozliczen < 0 THEN
				SET NEW.Waluta_Rozliczen = NEW.Waluta;
			END IF;
			
			IF NEW.Waluta = 0 THEN
				SET
					NEW.datawaluty = @.NEW.datawaluty,
					NEW.tabela_kursow = @.NEW.tabela_kursow
				;
			END IF;

		END IF;
		
		poniżej nowsza od
		2021-04-20 !!!!
		*/
		
		/*	
		Gdy zmieniamy date wystawienia niech data waluty podąża za nia - czyli dajemy ja na NULL - alg. sam ja ustawi	
		ALE!!!! gdy zarazem zmieniamy te datę (z choice data-kurs) to nie tykamy tej daty
		*/
		/* jmam.2024-08-23 
		IF 
		!(NEW.DataWystaw <=> OLD.DataWystaw) 		-- zmieniła się datawystaw
		AND (NEW.datawaluty <=> OLD.datawaluty) 	-- ale NIE zmieniła się sama datawaluty
	--	2022-04-05 Dodajemy jeszcze warunek aby nie robic tego dla korekt i 105 ki
		AND NOT (@ht.doc.IsKorekta OR NEW.Rodzaj = 105)
		THEN
			SET NEW.datawaluty = NULL;
		END IF;
		SET 
			@transact.Waluta.Changed = !(NEW.Waluta <=> OLD.Waluta),
			@transact.Kurs.Changed = !(NEW.Kurs <=> OLD.Kurs),
			@transact.datawaluty.Changed = !(NEW.datawaluty <=> OLD.datawaluty)
		;
		IF @transact.Waluta.Changed OR @transact.datawaluty.Changed THEN
		--	gdy zmieniła sie waluta lub data waluty
			IF NEW.Waluta = 0 THEN
				SET
					NEW.datawaluty = NULL,
					NEW.Kurs = 1,
					NEW.tabela_kursow = NULL
				;
			ELSE
				SET
					@.NEW.MAX.datawaluty = LEAST(@.NEW.DataWystaw - INTERVAL 1 DAY, CURRENT_DATE() - INTERVAL 1 DAY)
				;
				SET
					NEW.datawaluty = LEAST(@.NEW.MAX.datawaluty, IFNULL(NEW.datawaluty, NEW.DataWystaw - INTERVAL 1 DAY)),
					@.NEW.datawaluty = NULL,
					-- @.NEW.datawaluty.Find = LEAST(NEW.datawaluty, CURRENT_DATE() - INTERVAL 1 DAY),
					@.NEW.Kurs = 1,
					@.NEW.tabela_kursow = NULL
				;
				SELECT
					k.data, k.kurs, CONCAT_WS(' z dnia ', k.numer_tab_kurs, _Format_DT(k.data, '%d %mmm %YYYY')) AS tabela_kursow
				INTO 
					@.NEW.DataWaluty, @.NEW.kurs, @.NEW.tabela_kursow
				FROM `kursy` k 
				WHERE 
					NEW.Waluta <> 0
					AND k.idnwaluty = NEW.Waluta
					-- AND k.Data <= (NEW.datawaluty - INTERVAL 1 DAY)
					AND k.Data <= NEW.datawaluty
				ORDER BY k.data DESC
				LIMIT 1
				;
				SET
					NEW.datawaluty = @.NEW.datawaluty,
					NEW.Kurs = @.NEW.Kurs,
					NEW.tabela_kursow = @.NEW.tabela_kursow
				;
			END IF;
			
			IF NEW.Waluta_Rozliczen < 0 THEN
				SET NEW.Waluta_Rozliczen = NEW.Waluta;
			END IF;
			IF NEW.Waluta_Rozliczen = NEW.Waluta THEN
				SET NEW.Kurs_Rozliczen = IFNULL(NEW.Kurs, 1);
			END IF;
		END IF;
		poniżej nowsza od
		2024-08-23 !!!!
		*/
		
		/*	Wersja od 2024-08-23 !!!!
			1. Zmiana daty waluty lub zmiana daty wyst. wymusza spr. daty waluty 
			2. Operujemy zmienną @.NEW.WE.datawaluty i na koniec z 
				select-a otrzymujemy NEW.datawaluty
				-> _Get_DataWaluty_Kurs(...);
		*/
		SET @transact.datawaluty.Check = FALSE;
		IF 
		!(NEW.DataWystaw <=> OLD.DataWystaw) 		-- zmieniła się datawystaw
		AND (NEW.datawaluty <=> OLD.datawaluty) 	-- ale NIE zmieniła się sama datawaluty
	--	2022-04-05 Dodajemy jeszcze warunek aby nie robic tego dla korekt i 105 ki
		AND NOT (@ht.doc.IsKorekta OR NEW.Rodzaj = 105)
		THEN
		--	zmieniła się datawystaw ale NIE zmieniła się sama datawaluty
		--	gdy datawaluty (która może być NULL) jest wcześniejsza od datawystaw to zostaw ją
			-- SET NEW.datawaluty = NULL;
			SET @transact.datawaluty.Check = TRUE;
		END IF;
		SET 
			@transact.Waluta.Changed = !(NEW.Waluta <=> OLD.Waluta),
			@transact.Kurs.Changed = !(NEW.Kurs <=> OLD.Kurs),
			@transact.datawaluty.Changed = !(NEW.datawaluty <=> OLD.datawaluty)
		;
		SET @transact.datawaluty.Check = @transact.datawaluty.Check OR @transact.datawaluty.Changed;
		
		-- IF @transact.Waluta.Changed OR @transact.datawaluty.Changed THEN	
		IF @transact.Waluta.Changed OR @transact.datawaluty.Check THEN
			DO _Get_DataWaluty_Kurs('', 'OP', NEW.Rodzaj, NEW.Waluta, NEW.Kurs, NEW.datawaluty, NEW.DataWystaw);
			SET
				NEW.datawaluty = @.NEW.datawaluty,
				NEW.Kurs = @.NEW.Kurs,
				NEW.tabela_kursow = @.NEW.tabela_kursow
			;
			IF NEW.Waluta_Rozliczen < 0 THEN
				SET NEW.Waluta_Rozliczen = NEW.Waluta;
			END IF;
			IF NEW.Waluta_Rozliczen = NEW.Waluta THEN
				SET NEW.Kurs_Rozliczen = IFNULL(NEW.Kurs, 1);
			END IF;
		END IF;
		
		/*
		Jeśli chodzi o walute rozliczeń to...
		gdy zmieniła sie waluta bo zmieniliśmy jedna i druga to juz nic nie ustawiaj (obie waluty sa sobie równe)
		gdy zmienia sie sam kurs to tez nic nie zmieniaj bo kurs wpisanio z ręki.
		Ale gdy zmienia sie waluta rozl. i jest <> od waluty to pobierz z kursów
		*/
		IF 
		!(NEW.Waluta_Rozliczen <=> OLD.Waluta_Rozliczen)	-- gdy się zmieniła Waluta_Rozliczen
		AND !(NEW.Waluta_Rozliczen <=> OLD.Waluta)			-- i jest inna niż sama waluta
		AND (NEW.Kurs_Rozliczen <=> OLD.Kurs_Rozliczen) 	-- ale sam kurs rozl. sie nie zmienia !!!
		THEN
			/*	było do 26 VIII 2024 - teraz jako funkcja
			SET
				NEW.Kurs_Rozliczen = 
					IF(NEW.Waluta_Rozliczen = 0,
						1,		-- PLN
						IFNULL(
						(
							SELECT
								k.kurs
							FROM `kursy` k 
							WHERE 
								k.idnwaluty = NEW.Waluta_Rozliczen
								AND k.Data <= IFNULL(NEW.datawaluty, NEW.DataWystaw - INTERVAL 1 DAY)
							ORDER BY k.data DESC
							LIMIT 1
						), NEW.Kurs_Rozliczen
						)
					)
			;
			*/
			DO _Get_DataWaluty_Kurs('Waluta_Rozliczen', 'OP', NEW.Rodzaj, NEW.Waluta_Rozliczen, NEW.Kurs_Rozliczen, NEW.datawaluty, NEW.DataWystaw);
			SET
				NEW.Kurs_Rozliczen = @.NEW.Kurs
			;
		/* było
		SET @transact.Waluta_RozliczenChanged = !(NEW.Waluta_Rozliczen <=> OLD.Waluta_Rozliczen);
		SET @transact.Kurs_RozliczenChanged = !(NEW.Kurs_Rozliczen <=> OLD.Kurs_Rozliczen);
		IF (@transact.Waluta_RozliczenChanged OR @transact.Is_Inicjacja) AND  THEN
			IF (NEW.Kurs_Rozliczen <=> OLD.Kurs_Rozliczen) THEN	--	skoro Kurs_Rozliczen sie nie zmienia to w JEDNYM Update mamy tylko zmiane Waluta_Rozliczen (bez Kurs_Rozliczen) a to oznacza że musimy pobrać Kurs
				SELECT Kurs FROM `kursy_calc` WHERE idnwaluty1 = NEW.Waluta_Rozliczen AND idnwaluty2 = 0 LIMIT 1 INTO @NEW.Kurs;
				SET NEW.Kurs_Rozliczen = IFNULL(@NEW.Kurs, 1);
			END IF;
		*/	
		END IF;

		/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
			NEW.idn_tab_kurs
		-- 	jmam.2021-04-20   PO CO TO ????????????????????????????????
			powyżej nowsza do
			2021-04-20 !!!!
		------------------------------------------------------------------------------------------------------------------------------------------------------------------	
		IF NEW.Waluta != 0 AND
			(!(NEW.idn_tab_kurs <=> OLD.idn_tab_kurs) OR !(NEW.DataWystaw <=> OLD.DataWystaw)) THEN
			SET @.NEW.datawaluty = NULL, @.NEW.tabela_kursow = NULL;
			SELECT 
				k.data, IFNULL(k.numer_tab_kurs, '') 
			FROM `kursy` k 
			WHERE 
				k.idnwaluty = NEW.Waluta 
				AND k.idn_tab_kurs = NEW.idn_tab_kurs 
				AND k.data < NEW.DataWystaw 
			ORDER BY k.data DESC	--	najstarsza
			LIMIT 1
			INTO 
				@.NEW.datawaluty, @.NEW.tabela_kursow
			;
			SET
				NEW.datawaluty = IFNULL(@.NEW.datawaluty, NEW.datawaluty),
				NEW.tabela_kursow = IFNULL(@.NEW.tabela_kursow, NEW.tabela_kursow)
			;
		END IF;
		*/
		
		/*/
	--	AreaGUID
		SET @transact.AreaGUIDChanged = !(NEW.AreaGUID <=> OLD.AreaGUID) OR @transact.Is_Kontrah_Inicjacja;
		/* jmam */
		IF @transact.AreaGUIDChanged THEN
			--	Usun adres platnika
			SET @.Nic = '';
		END IF;
		/*/
		SET NEW.CWN = IFNULL(NEW.CWN, 0); 

		/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
			NEW.sposobplatn
		------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
		SET @transact.sposobplatn.Change = !(NEW.sposobplatn <=> OLD.sposobplatn);
		SET @transact.sposobplatn.Change = @transact.sposobplatn.Change or !(NEW.datawystaw <=> OLD.datawystaw);
		-- SET @transact.sposobplatn.Change = @transact.sposobplatn.Change or !(NEW.datawplywu <=> OLD.datawplywu);
		
		IF @transact.sposobplatn.Change AND NEW.sposobplatn <> -1  THEN
			SET NEW.DataPlatnosci = _GetDataPlatnosci(NEW.datawystaw, NEW.sposobplatn);
			-- zad 48872 SET NEW.dataplatnosci_oczekiwana = _GetDataPlatnosci_oczekiwana(NEW.DataPlatnosci, NEW.datawplywu);
		END IF;
		
	--	dataplatnosci_oczekiwana
	--	UWAGA gdy nawe zmieniły się pwody do zmiany tego pola np. DataPlatnosci lub DataWplywu (patrz funkcja _GetDataPlatnosci_oczekiwana()) ...
	--	ale samo to pole zostało tkniete w tym triggerze to zostawiamy to pole tak jak ktos wpisał bez zmian ww funkcja.
	--	PRZYKŁAD ktos zmienił sposób płatności przez co zmieniła się data płatności ale w polu dataplatnosci_oczekiwana tez wpisał datę to powiinna ona 
	--	zostać niezmieniona
		IF 
		(!(NEW.DataPlatnosci <=> OLD.DataPlatnosci) OR !(NEW.datawplywu <=> OLD.datawplywu))	--	cos w tych polach się zmianiło ale ...
		AND
		(NEW.dataplatnosci_oczekiwana <=> OLD.dataplatnosci_oczekiwana)		--	zarazem nie nikt nie zmienił niczego w polu dataplatnosci_oczekiwana
		THEN
		--	wtedy możesz to pole naliczyc funkcja
			SET NEW.dataplatnosci_oczekiwana = _GetDataPlatnosci_oczekiwana(NEW.DataPlatnosci, NEW.datawplywu);
		END IF;
		/* 
		było do 2019-06-05
	--	DataPlatnosci oraz (dla RELACOMU) DataWplywu moga/maja wplyw na dataplatnosci_oczekiwana
	--	jesli sie te daty nie zmienialy to nie ruszaj dataplatnosci_oczekiwana !!! bo mioze ktos wstawil tam inna date
		IF @session.globals.Owner != 'RELACOM' THEN
		--	Do dataplatnosci_oczekiwana wstaw DataPlatnosci jesli sie zmienila ale jesli nie to zostaw stara wartosc (czyli zmieniam tylko gdy DataPlatnosci sie zmiana
			SET NEW.dataplatnosci_oczekiwana = 
				IF(!(NEW.DataPlatnosci <=> OLD.DataPlatnosci),
					NEW.DataPlatnosci,
					NEW.dataplatnosci_oczekiwana
				)
			;
		ELSE
		--	Dla RELACOM	
			SET NEW.dataplatnosci_oczekiwana = 
		--	Zmien dataplatnosci_oczekiwana na podstawie datawplywu jesli sie zmienila ale jesli nie to zostaw stara wartosc 
				IF(!(NEW.DataWplywu <=> OLD.DataWplywu),
					DATE_ADD(NEW.datawplywu, INTERVAL @session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej DAY),
					NEW.dataplatnosci_oczekiwana
				)
			;
		END IF;
		*/
		
		SET NEW.rozrachunek = IFNULL(NEW.rozrachunek, 0);
		
		/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
			Rozrachunki
		------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
		IF NEW.rozrachunek OR (NEW.Rodzaj = @ht.CKsNN) THEN --	gdy Rozrachunek lub Zakup KANCELARIA naliczaj pola rozrachunkowe
			-- CALL rozrach_rodzaj_calc(NEW.Rodzaj, NEW.gruparozrach_wymus, NEW.Brutto);
			-- CALL rozrach_nalicz_pola(NEW.Rodzaj, NEW.gruparozrach_wymus, NEW.Netto, NEW.NettoWal, NEW.Brutto, 
			CALL _Rozrach_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,
				'', '', '', '');
		END IF;	

		
		IF !(NEW.nrdokmag <=> OLD.nrdokmag) AND NEW.Rodzaj = 10 AND (@session.globals.Owner = 'IZOHAN') THEN
			SET NEW.info2 = NEW.nrdokmag;
		END IF;
		
		SET NEW.CWN = IFNULL(NEW.CWN, 0); 
		
		/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
			Numery
		------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
		IF !(NEW.NrDokFin <=> OLD.NrDokFin) THEN
			SET NEW.NrDokFin = IF(@NEW.P := (LOCATE('#', IFNULL(NEW.NrDokFin, ''))) = 1,  SUBSTRING(IFNULL(NEW.NrDokFin, ''), 2, 255), IFNULL(NEW.NrDokFin, ''));
			SET @NEW.NrDokFin.Changed = @NEW.P;
		END IF;
		IF !(NEW.NrDokMag <=> OLD.NrDokMag) THEN
			SET NEW.NrDokMag = IF(@NEW.P := (LOCATE('#', IFNULL(NEW.NrDokMag, ''))) = 1,  SUBSTRING(IFNULL(NEW.NrDokMag, ''), 2, 255), IFNULL(NEW.NrDokMag, ''));
			SET @NEW.NrDokMag.Changed = @NEW.P;
		END IF;
		IF !(NEW.NrWewn <=> OLD.NrWewn) THEN
			SET NEW.NrWewn = IF(@NEW.P := (LOCATE('#', IFNULL(NEW.NrWewn, ''))) = 1,  SUBSTRING(IFNULL(NEW.NrWewn, ''), 2, 255), IFNULL(NEW.NrWewn, ''));
			SET @NEW.NrWewn.Changed = @NEW.P;
		END IF;
		IF !(NEW.lp_ks_podawcza_str <=> OLD.lp_ks_podawcza_str) THEN
			SET NEW.lp_ks_podawcza_str = IF(@NEW.P := (LOCATE('#', IFNULL(NEW.lp_ks_podawcza_str, ''))) = 1,  SUBSTRING(IFNULL(NEW.lp_ks_podawcza_str, ''), 2, 255), IFNULL(NEW.lp_ks_podawcza_str, ''));
			SET @NEW.lp_ks_podawcza_str.Changed = @NEW.P;
		END IF;
		
		/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
			Koniec
		------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
		IF NEW.tag < 0 THEN
			SET NEW.tag = OLD.tag;
		END IF;
		
		IF NEW.tag = 1 THEN
			SET NEW.tag = 0;
		END IF;
		
		IF NEW.tag = 2 THEN
			SET NEW.tag = 1;
		END IF;
		
		IF NEW.tag = 3 THEN
			SET NEW.tag = 2;
		END IF;
		
		IF NEW.tag = 4 THEN
			SET NEW.tag = 3;
		END IF;
		
		DROP TEMPORARY TABLE IF EXISTS `t_trigg_operdoc`;
		
	--	PO NOWEMU
	ELSE	
	-- PO STAREMU
			DROP TEMPORARY TABLE IF EXISTS `t_trigg_operdoc`;
			CREATE TEMPORARY TABLE IF NOT EXISTS `t_trigg_operdoc` SELECT * FROM `operdoc` WHERE rodzaj = NEW.Rodzaj;
			-- ALTER TABLE `t_trigg_operdoc` ADD PRIMARY KEY Rodzaj (`Rodzaj`);
			-- CREATE TEMPORARY TABLE IF NOT EXISTS `t_trigg_operdoc` LIKE `operdoc`;
			-- INSERT INTO `t_trigg_operdoc` SELECT * FROM `operdoc`;
			
			SET @session.opng_e = FALSE;	--	CELOWO!!!!!!!!
			IF IFNULL(@session.opng_e, FALSE) THEN 
				LEAVE S_opng_e_bu; 
			END IF;
			-- SET @session.opng_e = FALSE;
			
			
			CALL ht_rodzaj_update_zmienne(NEW.Rodzaj);
			-- CALL ht_rodzaj_calc(NEW.Rodzaj);
			
			CALL e_opng_rec_ustal_magazyny('', NEW.Rodzaj, NEW.ZMagazynu, NEW.DoMagazynu);
				  -- [FieldByName('WalutaSymbol').AsString, FieldByName('datawaluty').AsString, FieldByName('kurs').DisplayText]);
			SET @NEW.DoMagazynu = NEW.DoMagazynu;
			SET @NEW.ZMagazynu = NEW.ZMagazynu;
			SET @ng.f.tag = NEW.tag;
			
			SET @transact.ISNewDoc = (IFNULL(NEW.IDN, 0) = 0);
			IF @transact.ISNewDoc THEN
			
				UPDATE `t_trigg_operdoc` d
				SET
					NEW.rozrachunek = d.IsRozrachunek,
					NEW.grupaoper = @ng.f.grupaoper := d.Grupa,
					NEW.wzordekr = d.wzordekr,
					NEW.rv_id = d.rv_id, 
					NEW.RodzajDowodu = d.RodzajDowodu,
					NEW.ugrpGUID = d.ugrpGUID,
					NEW.gruparozrach = IFNULL(@ng.f.gruparozrach := @ht.doc.RzTypRozrach, 0)
				WHERE
					d.Rodzaj = NEW.Rodzaj
				;
				SET
					NEW.idnuser = IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin),
					NEW.ugrpGUID = IFNULL(@session.user.CurrugrpGUID, ''),
					NEW.Deleted = IFNULL(NEW.Deleted, 0),
					NEW.ilepoz = IFNULL(NEW.ilepoz, 0),
					--	Daty
					NEW.DataWystaw = IFNULL(NEW.DataWystaw, CURRENT_DATE()),
					NEW.DataSprzed = IFNULL(NEW.DataSprzed, CURRENT_DATE()),
					NEW.DataWplywu = IFNULL(NEW.DataWplywu, CURRENT_DATE()),
					NEW.DataWaluty = IFNULL(NEW.DataWaluty, CURRENT_DATE()),
					NEW.DataPlatnosci = IFNULL(NEW.DataPlatnosci, CURRENT_DATE()),
					NEW.dataplatnosci_oczekiwana = _GetDataPlatnosci_oczekiwana(NEW.DataPlatnosci, NEW.datawplywu),
					NEW.kurs_rozliczen = IFNULL(NEW.kurs_rozliczen, 1),
					/*
		-- jmam			NEW.rozrachunek = @ht.doc.IsRozrachunek,
					NEW.grupaoper = @ng.f.grupaoper := @ht.doc.Optyp,
					NEW.wzordekr = @ht.doc.wzordekr,
					NEW.rv_id = @ht.doc.rv_id, 
					NEW.RodzajDowodu = @ht.doc.RodzajDowodu,
					NEW.ugrpGUID = @ht.doc.ugrpGUID,
					*/
					NEW.gruparozrach = IFNULL(@ng.f.gruparozrach := @ht.doc.RzTypRozrach, 0)
					
				;	
				-- juz nie ZAD 46609 SET	NEW.Data_Vat = IF(NEW.Data_Vat='0000-00-00',CURRENT_DATE(), NEW.Data_Vat);
		
				IF NEW.Data_Vat = '0000-00-00' AND NOT (@ht.doc.IsKorekta OR NEW.Rodzaj = 105) THEN
					SET NEW.Data_Vat = @ht.Init_doc_date;
				END IF;
				
			END IF;
		--	Daty
			IF 
			(!(NEW.DataPlatnosci <=> OLD.DataPlatnosci) OR !(NEW.datawplywu <=> OLD.datawplywu))	--	cos w tych polach się zmianiło ale ...
			AND
			(NEW.dataplatnosci_oczekiwana <=> OLD.dataplatnosci_oczekiwana)		--	zarazem nie nikt nie zmienił niczego w polu dataplatnosci_oczekiwana
			THEN
			--	wtedy możesz to pole naliczyc funkcja
				SET NEW.dataplatnosci_oczekiwana = _GetDataPlatnosci_oczekiwana(NEW.DataPlatnosci, NEW.datawplywu);
			END IF;
			/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
				NEW.Waluta
			------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
			SET @transact.WalutaChanged = IFNULL(NEW.Waluta, '') != IFNULL(OLD.Waluta, '');
			IF @transact.WalutaChanged THEN
				SELECT Kurs FROM `kursy_calc` WHERE idnwaluty1 = NEW.Waluta AND idnwaluty2 = 0 LIMIT 1 INTO @NEW.Kurs;
				SET NEW.Kurs = IFNULL(@NEW.Kurs, 1);
			END IF;
			
			/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
				NEW.KontrGUID
			------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
			-- SET @transact.KontrGUIDChanged = IFNULL(NEW.KontrGUID, '') != IFNULL(OLD.KontrGUID, '');
			SET @transact.KontrGUIDChanged = !(NEW.KontrGUID <=> OLD.KontrGUID);
			IF @transact.KontrGUIDChanged THEN
				IF IFNULL(NEW.KontrGUID, '') != '' THEN 
			
					UPDATE `kontrah` k
					SET
						NEW.kontridn = k.Idn,
						NEW.kontrnazwa = k.nazwa, 
						NEW.kontrsymbol = k.symbol,
						NEW.kontradres = CONCAT(k.ulica,', ',k.zipcode, ' ', k.nazwamiasta),
						NEW.kontrklasacenowa = k.klasacenowa, 
						NEW.kontrnip = k.nip, 
						NEW.kontrpodzialnip = k.podzialnip, 
						NEW.kontrupowaznienie = k.Upowaznienie,
						NEW.spedycja = k.spedycja,
						NEW.platnikguid = k.platnikguid, 
						NEW.akwizytorguid = k.akwizytorguid, 
						NEW.rodzaj2 = k.rodzaj2, 
						NEW.kontrrabat = k.rabat,
						NEW.idn_tab_kurs = k.idn_tab_kurs,
						NEW.Odbierajacy = IF(@session.HT.IR.PrzenosOdbierajacegoZKartyKontrahenta AND k.Upowaznienie = 0, k.Odbierajacy, NEW.Odbierajacy),
						NEW.info4 = IF(@session.globals.Owner = 'TRANSBUD', _varSTR(k.pesel), NEW.info4),
						NEW.info6 = IF(@session.globals.Owner = 'TRANSBUD', _varSTR(k.krs), NEW.info6),
				-- 		NEW.Przeliczenie_B_N = IF(@session.HT.IR.Przeliczenie_B_N_z_klasy_cen, kc.czy_ceny_brt, NEW.Przeliczenie_B_N),
						NEW.lang_id = k.lang_id,
						NEW.KatCol0 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol0, NEW.KatCol0),
						NEW.KatCol1 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol1, NEW.KatCol1),
						NEW.KatCol2 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol2, NEW.KatCol2),
						NEW.KatCol3 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol3, NEW.KatCol3),
						NEW.KatCol4 = IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng, k.KatCol4, NEW.KatCol4),
					--	Stare ... inicj.spos.platn - nie uzywane (błędna logika)
						-- NEW.sposobplatn = IF(@session.HT.IR.Zakup_nie_inicjuj_sposobu_platnosci_z_karty_kontra, k.sposplat, NEW.sposobplatn),
					--	Nowe ... inicj.spos.platn 	(apro luty 2022) + (jmam mar 2022)
						/*
						NEW.sposobplatn = IF(@session.HT.IR.Zakup_inicjuj_sposob_platnosci_z_karty_kontrah, IFNULL(k.sposplat, 0), NEW.sposobplatn),
						*/
						NEW.sposobplatn = 
							_Get_sposobplatn('', 'OP', @ht.doc.Optyp, NEW.Rodzaj, NEW.sposobplatn, k.sposplat, 0),
						NEW.kontofk = 
							IF(@session.globals.Owner != 'ASEKURACJA', 
								IF(TRUE, -- aRzTyp in [Rz_NL, RzSNL, Rz_SN, RzSSN],
									k.kontofk,
									IF(TRUE, -- aRzTyp in [Rz_ZB, RzSZB, Rz_SZ, RzSSZ],
										k.kontofk2,
										NEW.kontofk
									)	
								),	
								NEW.kontofk
							),
						NEW.uwagi = 
							IF(@session.HT.IR.przepisz_uwagi_kontrah_do_oper, 
								IF(@session.globals.Owner in ('CDG','AXIS'),
									CONCAT(k.UwagiNaFV, '\n'),
									_CONCATStr(k.Uwagi, k.UwagiNaFV, '\n') 
								),
								NEW.uwagi
							),
						NEW.dotyczy = IF(@session.globals.Owner = 'STANPOL', k.opis_dzialalnosci, NEW.dotyczy),
						k.TypSymbolow = (@tr.oppo_e.TypSymbolow := k.TypSymbolow)
					WHERE 
						k.guid = NEW.KontrGUID
					;
					
					UPDATE `klasycen` kc 
					SET
						NEW.Przeliczenie_B_N = IF(@session.HT.IR.Przeliczenie_B_N_z_klasy_cen, kc.czy_ceny_brt, NEW.Przeliczenie_B_N)
					WHERE 
						kc.idn = NEW.kontrklasacenowa
					;
					
				ELSE
				--	WYCZYŚĆ
					-- UPDATE `t_ht_ngpo_transact` t
					SET
						NEW.kontridn = 0,
						@tr.oppo_e.TypSymbolow := 0,
						NEW.kontrnazwa = '', 
						NEW.kontrsymbol = '',
						NEW.kontradres = '',
						NEW.kontrklasacenowa = 0, 
						NEW.kontrnip = '', 
						NEW.kontrpodzialnip = 0, 
						NEW.kontrupowaznienie = 0,
						NEW.spedycja = 0,
						NEW.platnikguid = '', 
						NEW.akwizytorguid = '', 
						NEW.rodzaj2 = 0, 
						NEW.kontrrabat = 0,
						NEW.idn_tab_kurs = 0,
						NEW.Odbierajacy = NULL,
						NEW.info4= '',
					    NEW.info6= '',
						NEW.Przeliczenie_B_N = 0,
						NEW.lang_id = NULL,
						NEW.KatCol0 = -1,
						NEW.KatCol1 = -1,
						NEW.KatCol2 = -1,
						NEW.KatCol3 = -1,
						NEW.KatCol4 = -1,
						NEW.sposobplatn = 0,
						NEW.kontofk = '',	
						NEW.uwagi = '',
						NEW.dotyczy = ''
					;
				END IF;
				
			END IF;
	
			IF (IFNULL(NEW.PlatnikGUID, '') = '') AND (IFNULL(NEW.KontrGUID, '') != '') THEN
				SET NEW.PlatnikGUID = NEW.KontrGUID;
			END IF;

	
			SET NEW.rozrachunek = IFNULL(NEW.rozrachunek, 0);
	
			/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
				Rozrachunki
			------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
			IF NEW.rozrachunek THEN
				-- CALL rozrach_rodzaj_calc(NEW.Rodzaj, NEW.gruparozrach_wymus, NEW.Brutto);
				CALL rozrach_nalicz_pola(NEW.Rodzaj, NEW.gruparozrach_wymus, NEW.Netto, NEW.NettoWal, NEW.Brutto, NEW.Zaplacono, 
					NEW.Kurs,
					NEW.Kurs_rozliczen,
					NEW.CWN,
					NEW.CKwota,
					NEW.CKwotaWal,
					NEW.CRozliczone,
					NEW.CRozliczoneWal,
					NEW.nierozliczony,
					'', '', '', '');
				
			END IF;	
			
			/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
				Koniec
			------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
			IF NEW.tag = 1 THEN
				SET NEW.tag = 0;
			END IF;
			
			IF NEW.tag = 2 THEN
				SET NEW.tag = 1;
			END IF;
	
			IF NEW.tag = 3 THEN
				SET NEW.tag = 2;
			END IF;
			
			IF NEW.tag = 4 THEN
				SET NEW.tag = 3;
			END IF;
			
			
			
			SET @session.opng_e = FALSE;
	
	END IF;		--	PO Staremu NEW.Calc_Ver < 3

	SET @.NEW.Update_status = NEW.Update_status;	--	zawsze
	SET NEW.Update_status = '';	--	zawsze
	
END;
$$


/* ************************************************************************************************************************************************************************
	AU
************************************************************************************************************************************************************************ */	
DROP TRIGGER IF EXISTS `opng_e_au`$$
CREATE DEFINER=`root`@`localhost` TRIGGER `opng_e_au` AFTER UPDATE ON `opng_e` FOR EACH ROW 
S_opng_e_au: BEGIN
	IF _GetVer() = '5.1.30' THEN LEAVE S_opng_e_au; END IF;
	-- wartosc @session.trigger_lock rowna TRUE blokuje wykonanie triggera
	IF IFNULL(@session.trigger_lock, FALSE) THEN LEAVE S_opng_e_au; END IF;
	--
	/*
	SET @rec.oppo.Need.Update.from.opng = (
		IFNULL(NEW.Rodzaj, -1) != IFNULL(OLD.Rodzaj, -1) OR
		IFNULL(NEW.ZMagazynu, -1) != IFNULL(OLD.ZMagazynu, -1) OR
		IFNULL(NEW.DoMagazynu, -1) != IFNULL(OLD.DoMagazynu, -1) OR
		IFNULL(NEW.tymczasowa, '') != IFNULL(OLD.tymczasowa, '') OR
		IFNULL(NEW.DataWystaw, '2100-01-01') != IFNULL(OLD.DataWystaw, '2100-01-01') OR
		IFNULL(NEW.DataWplywu, '2100-01-01') != IFNULL(OLD.DataWplywu, '2100-01-01') OR
		IFNULL(NEW.DataSprzed, '2100-01-01') != IFNULL(OLD.DataSprzed, '2100-01-01') OR
		IFNULL(NEW.KontrGUID, '') != IFNULL(OLD.KontrGUID, '') OR
		IFNULL(NEW.katcol0, -1) != IFNULL(OLD.katcol0, -1) OR
		IFNULL(NEW.katcol1, -1) != IFNULL(OLD.katcol1, -1) OR
		IFNULL(NEW.katcol2, -1) != IFNULL(OLD.katcol2, -1) OR
		IFNULL(NEW.katcol3, -1) != IFNULL(OLD.katcol3, -1) OR
		IFNULL(NEW.katcol4, -1) != IFNULL(OLD.katcol4, -1) OR
		IFNULL(NEW.Waluta, -1) != IFNULL(OLD.Waluta, -1) OR
		IFNULL(NEW.Kurs, -1) != IFNULL(OLD.Kurs, -1) OR
		False
		
	)
	;
	IF @rec.oppo.Need.Update.from.opng THEN
		CALL stztmg_e_update_oppo_e_from_epng_e('', NEW.GUID);
	END IF;
	*/
	
	
	--	Tabelka VAT
	IF 
	!(NEW.Kurs <=> OLD.Kurs)
	OR
	!(NEW.Rodzaj <=> OLD.Rodzaj)
	OR
	!(NEW.rodzaj_typ <=> OLD.rodzaj_typ)
	OR
	!(NEW.Calc_Ver <=> OLD.Calc_Ver)
	OR
	!(NEW.blokada_przeliczenia_tab_vat <=> OLD.blokada_przeliczenia_tab_vat)
	OR
	!(NEW.lp_ks_podawcza_str <=> OLD.lp_ks_podawcza_str)
	THEN
	--	Musimy unicestwic `t_xxng_vat_INF` bo zawiera ona powyzsze pola i moze w nich trzymac nieaktualne wartosci (zad 46893)
	--	Zatem jesli tylko cokolwiek sie zmienilo w tych polach to raz jeszcze budujemy tego tempa
		DROP TEMPORARY TABLE IF EXISTS `t_xxng_vat_INF`;
	END IF;
	
	IF @session.globals.HT.erp_obj_counters_values_e_1_rec IS NULL THEN
		CALL _Globals_Get('erp_obj_counters_values_e_1_rec', @session.globals.HT.erp_obj_counters_values_e_1_rec, FALSE);		
	END IF;
	
	IF @session.globals.HT.erp_obj_counters_values_e_1_rec THEN
		SET
			@NEW.NrDokFin.Changed = !(NEW.NrDokFin <=> OLD.NrDokFin),
			@NEW.NrDokMag.Changed = !(NEW.NrDokMag <=> OLD.NrDokMag),
			@NEW.NrWewn.Changed = !(NEW.NrWewn <=> OLD.NrWewn),
			@NEW.lp_ks_podawcza_str.Changed = !(NEW.lp_ks_podawcza_str <=> OLD.lp_ks_podawcza_str),
			@NEW.erp_obj_counters_values_e_1_rec.Update_Mode = IFNULL(@NEW.erp_obj_counters_values_e_1_rec.Update_Mode, '')
		;
		IF @NEW.erp_obj_counters_values_e_1_rec.Update_Mode = '' THEN
			UPDATE `erp_obj_counters_values_e_1_rec` r
			SET
				r.Number_Text_1 = CASE 
					WHEN r.ObjType_1 = 'opng.nrdokfin' AND @NEW.NrDokFin.Changed THEN NEW.nrdokfin 
					WHEN r.ObjType_1 = 'opng.nrwewn' AND @NEW.nrwewn.Changed THEN NEW.nrwewn 
					WHEN r.ObjType_1 = 'opng.nrdokmag' AND @NEW.nrdokmag.Changed THEN NEW.nrdokmag 
					WHEN r.ObjType_1 = 'opng.lp_ks_podawcza_str' AND @NEW.lp_ks_podawcza_str.Changed THEN NEW.lp_ks_podawcza_str
					ELSE r.Number_Text_1
					END, 
				r.Number_Text_2 = CASE 
					WHEN r.ObjType_2 = 'opng.nrdokfin' AND @NEW.NrDokFin.Changed THEN NEW.nrdokfin 
					WHEN r.ObjType_2 = 'opng.nrwewn' AND @NEW.nrwewn.Changed THEN NEW.nrwewn 
					WHEN r.ObjType_2 = 'opng.nrdokmag' AND @NEW.nrdokmag.Changed THEN NEW.nrdokmag 
					WHEN r.ObjType_2 = 'opng.lp_ks_podawcza_str' AND @NEW.lp_ks_podawcza_str.Changed THEN NEW.lp_ks_podawcza_str
					ELSE r.Number_Text_2
					END, 
				r.Number_Text_3 = CASE 
					WHEN r.ObjType_3 = 'opng.nrdokfin' AND @NEW.NrDokFin.Changed THEN NEW.nrdokfin 
					WHEN r.ObjType_3 = 'opng.nrwewn' AND @NEW.nrwewn.Changed THEN NEW.nrwewn 
					WHEN r.ObjType_3 = 'opng.nrdokmag' AND @NEW.nrdokmag.Changed THEN NEW.nrdokmag 
					WHEN r.ObjType_3 = 'opng.lp_ks_podawcza_str' AND @NEW.lp_ks_podawcza_str.Changed THEN NEW.lp_ks_podawcza_str
					ELSE r.Number_Text_3
					END, 
				r.Number_Text_4 = CASE 
					WHEN r.ObjType_4 = 'opng.nrdokfin' AND @NEW.NrDokFin.Changed THEN NEW.nrdokfin 
					WHEN r.ObjType_4 = 'opng.nrwewn' AND @NEW.nrwewn.Changed THEN NEW.nrwewn 
					WHEN r.ObjType_4 = 'opng.nrdokmag' AND @NEW.nrdokmag.Changed THEN NEW.nrdokmag 
					WHEN r.ObjType_4 = 'opng.lp_ks_podawcza_str' AND @NEW.lp_ks_podawcza_str.Changed THEN NEW.lp_ks_podawcza_str
					ELSE r.Number_Text_4
					END,
				r.Update_Mode = 'INIT'
			WHERE
				r.ID = NEW.GUID
			;
		END IF;
	END IF;
	
/*	
	IF 
	IFNULL(@NEW.NrDokFin.Changed, FALSE) OR
	IFNULL(@NEW.NrDokMag.Changed, FALSE) OR
	IFNULL(@NEW.NrWewn.Changed, FALSE) OR
	IFNULL(@NEW.lp_ks_podawcza_str.Changed, FALSE) THEN
		IF @session.globals.HT.erp_obj_counters_values_e_1_rec IS NULL THEN
			CALL _Globals_Get('erp_obj_counters_values_e_1_rec', @session.globals.HT.erp_obj_counters_values_e_1_rec, FALSE);		
		END IF;
		
		IF @session.globals.HT.erp_obj_counters_values_e_1_rec AND IFNULL(@NEW.erp_obj_counters_values_e_1_rec.Update_Mode, '') = '' THEN
			UPDATE `erp_obj_counters_values_e_1_rec` r
			SET
				r.Number_Text_1 = CASE 
					WHEN r.ObjType_1 = 'opng.nrdokfin' AND IFNULL(@NEW.NrDokFin.Changed, FALSE) THEN NEW.nrdokfin 
					WHEN r.ObjType_1 = 'opng.nrwewn' AND IFNULL(@NEW.nrwewn.Changed, FALSE) THEN NEW.nrwewn 
					WHEN r.ObjType_1 = 'opng.nrdokmag' AND IFNULL(@NEW.nrdokmag.Changed, FALSE) THEN NEW.nrdokmag 
					WHEN r.ObjType_1 = 'opng.lp_ks_podawcza_str' AND IFNULL(@NEW.lp_ks_podawcza_str.Changed, FALSE) THEN NEW.lp_ks_podawcza_str
					ELSE r.Number_Text_1
					END, 
				r.Number_Text_2 = CASE 
					WHEN r.ObjType_2 = 'opng.nrdokfin' AND IFNULL(@NEW.NrDokFin.Changed, FALSE)  THEN NEW.nrdokfin 
					WHEN r.ObjType_2 = 'opng.nrwewn' AND IFNULL(@NEW.nrwewn.Changed, FALSE) THEN NEW.nrwewn 
					WHEN r.ObjType_2 = 'opng.nrdokmag' AND IFNULL(@NEW.nrdokmag.Changed, FALSE) THEN NEW.nrdokmag 
					WHEN r.ObjType_2 = 'opng.lp_ks_podawcza_str' AND IFNULL(@NEW.lp_ks_podawcza_str.Changed, FALSE) THEN NEW.lp_ks_podawcza_str
					ELSE r.Number_Text_2
					END, 
				r.Number_Text_3 = CASE 
					WHEN r.ObjType_3 = 'opng.nrdokfin' AND IFNULL(@NEW.NrDokFin.Changed, FALSE)  THEN NEW.nrdokfin 
					WHEN r.ObjType_3 = 'opng.nrwewn' AND IFNULL(@NEW.nrwewn.Changed, FALSE) THEN NEW.nrwewn 
					WHEN r.ObjType_3 = 'opng.nrdokmag' AND IFNULL(@NEW.nrdokmag.Changed, FALSE) THEN NEW.nrdokmag 
					WHEN r.ObjType_3 = 'opng.lp_ks_podawcza_str' AND IFNULL(@NEW.lp_ks_podawcza_str.Changed, FALSE) THEN NEW.lp_ks_podawcza_str
					ELSE r.Number_Text_3
					END, 
				r.Number_Text_4 = CASE 
					WHEN r.ObjType_4 = 'opng.nrdokfin' AND IFNULL(@NEW.NrDokFin.Changed, FALSE)  THEN NEW.nrdokfin 
					WHEN r.ObjType_4 = 'opng.nrwewn' AND IFNULL(@NEW.nrwewn.Changed, FALSE) THEN NEW.nrwewn 
					WHEN r.ObjType_4 = 'opng.nrdokmag' AND IFNULL(@NEW.nrdokmag.Changed, FALSE) THEN NEW.nrdokmag 
					WHEN r.ObjType_4 = 'opng.lp_ks_podawcza_str' AND IFNULL(@NEW.lp_ks_podawcza_str.Changed, FALSE) THEN NEW.lp_ks_podawcza_str
					ELSE r.Number_Text_4
					END,
				r.Update_Mode = 'INIT'
			WHERE
				r.ID = NEW.GUID
			;
		END IF;
	--	na koniec wszystki ena false	
		SET 
			@NEW.NrDokFin.Changed = FALSE,
			@NEW.NrDokMag.Changed = FALSE,
			@NEW.NrWewn.Changed = FALSE,
			@NEW.lp_ks_podawcza_str.Changed = FALSE
		;
	END IF;
*/			

--	KontrGUID
	SET @transact.KontrGUIDChanged = !(NEW.KontrGUID <=> OLD.KontrGUID);
--	PlatnikGUID
	SET @transact.PlatnikGUIDChanged = !(NEW.PlatnikGUID <=> OLD.PlatnikGUID) OR @transact.Is_Kontrah_Inicjacja;
--	AreaGUID
	SET @transact.AreaGUIDChanged = !(NEW.AreaGUID <=> OLD.AreaGUID) OR @transact.Is_Kontrah_Inicjacja;
--	Adresacja!!!
	IF @session.globals.DOC_with_AdrLink IS NULL THEN
		CALL _Globals_Get('DOC_with_AdrLink', @session.globals.DOC_with_AdrLink, FALSE);
	END IF;
	
set @NEW.KontrGUID = NEW.KontrGUID, @OLD.KontrGUID = OLD.KontrGUID;
	IF @session.globals.DOC_with_AdrLink THEN
		IF @transact.KontrGUIDChanged OR @.NEW.Update_status = 'adr_link.RESET.Kontr' THEN
set @.adr.err = '1.a';		
		--	Usun adresy kontrahenta
			CALL geo_int_adr_link_NED('REC.DELETE', '', NEW.GUID, 'opng', 'KontrPlatDost', '', '', '', '', 'Only.no.midified', '');
-- set @.adr.err = '1.aa';		
			CALL geo_int_adr_link_NED('REC.CLONE', '', NEW.KontrGUID, 'kontrah', '', '', NEW.GUID, 'opng', 'KontrPlatDost', 'Only.no.midified', '');
set @.adr.err = '1.b';		
		--	a gdyby nie bylo w ogole to dodaj pusty	
			CALL geo_int_adr_link_NED('REC.CLONE', 'DEFAULT', '', '', '', '', NEW.GUID, 'opng', 'KontrPlatDost', '', '');				
		--	Usun adres dostawy kontrahenta
			CALL geo_int_adr_link_NED('REC.DELETE', '', NEW.GUID, 'opng', 'Dost', '', '', '', '', 'Only.no.midified', '');
set @.adr.err = '1.c';		
			CALL geo_int_adr_link_NED('REC.CLONE', '', NEW.KontrGUID, 'kontrah_wys', '', '', NEW.GUID, 'opng', 'Dost', 'Only.no.midified', '');
		END IF;
	
	
		IF @transact.PlatnikGUIDChanged OR @.NEW.Update_status = 'adr_link.RESET.Plat' THEN
			--	Usun adres platnika
			IF IFNULL(OLD.PlatnikGUID, '') != ''  THEN
set @.adr.err = '2.a';		
				CALL geo_int_adr_link_NED('REC.DELETE', '', NEW.GUID, 'opng', 'Plat', '', '', '', '', 'Only.no.midified', '');
			END IF;
			IF NEW.PlatnikGUID != NEW.KontrGUID THEN
set @.adr.err = '2.b';		
				CALL geo_int_adr_link_NED('REC.CLONE', '', NEW.PlatnikGUID, 'kontrah', '', '', NEW.GUID, 'opng', 'Plat', 'Only.no.midified', '');
			END IF;
			
		END IF;
		
		IF @transact.AreaGUIDChanged OR @.NEW.Update_status = 'adr_link.RESET.Dost' THEN
			--	Usun adres dostawy
			IF IFNULL(OLD.AreaGUID, '') != ''  THEN
				CALL geo_int_adr_link_NED('REC.DELETE', '', NEW.GUID, 'opng', 'Dost', '', '', '', '', 'Only.no.midified', '');
			END IF;
			IF IFNULL(NEW.AreaGUID, '') != ''  THEN
set @.adr.err = '3.a';		
				CALL geo_int_adr_link_NED('REC.CLONE', '', NEW.AreaGUID, 'erp_area_nodes,kontrah', '', '', NEW.GUID, 'opng', 'Dost', 'Only.no.midified', '');
			ELSE
set @.adr.err = '3.b';		
				CALL geo_int_adr_link_NED('REC.CLONE', '', NEW.KontrGUID, 'kontrah_wys', '', '', NEW.GUID, 'opng', 'Dost', 'Only.no.midified', '');
			END IF;
			
		END IF;

		IF @.NEW.Update_status = 'adr_link.ADD.Dost' THEN
set @.adr.err = '4.a';		
			CALL geo_int_adr_link_NED('REC.CLONE', 'DEFAULT', '', '', '', '', NEW.GUID, 'opng', 'Dost', '', '');				
		END IF;

		
	END IF;

	SET @.NEW.Update_status = '';	--	zawsze
	
END;
$$

/* ************************************************************************************************************************************************************************
	AD
************************************************************************************************************************************************************************ */	
DROP TRIGGER IF EXISTS `opng_e_ad`$$
CREATE DEFINER = `root`@`localhost` TRIGGER `opng_e_ad` AFTER DELETE ON `opng_e` FOR EACH ROW 
A: BEGIN
	IF _TriggerDisabled() THEN LEAVE A; END IF;
--	INIT Lock trigger zmienna @session.trigger.xxx
	--	IF IFNULL(@session.trigger.opng_e, FALSE) THEN LEAVE A; END IF;
	--	SET @session.trigger.opng_e = TRUE;
/* 
	DELETE al FROM `geo_int_adr_link` al
	WHERE
		al.objguid = OLD.GUID AND al.objTable = 'opng' 
		AND
		NOT EXISTS(SELECT n.guid FROM `opng` n WHERE n.GUID = al.objguid)
		-- AND FALSE
	;
*/

--	FINAL UnLock trigger zmienna @session.trigger.xxx
	--	SET @session.trigger.opng_e = FALSE;
END;
$$

/* ************************************************************************************************************************************************************************
	Narzędzia 
************************************************************************************************************************************************************************ */	
DROP FUNCTION IF EXISTS `_GetDataPlatnosci`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_GetDataPlatnosci`(
	_datawystaw DATE,
	_sposobplatn INTEGER
	) RETURNS DATE
    NO SQL
    DETERMINISTIC
/*
*/	
BEGIN
	SELECT plat.dni FROM `platnosc` plat WHERE plat.IDN = _sposobplatn LIMIT 1 INTO @plat.dni;
	RETURN DATE_ADD(_datawystaw, INTERVAL @plat.dni DAY);
END$$

DROP FUNCTION IF EXISTS `_GetDataPlatnosci_oczekiwana`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_GetDataPlatnosci_oczekiwana`(
	_Dataplatnosci DATE,
	_Datawplywu DATE
	) RETURNS DATE
    NO SQL
    DETERMINISTIC
/*
*/	
BEGIN
/*
	SET @session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej = 
		_IReg_Get_Get_Only_IFNULL('', 'Kontrah', 'DniPowiekszeniaDatyPlatnosciOczekiwanej', 0, 'INTEGER', @session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej);
*/		
	SET
		@NEW.dataplatnosci_oczekiwana = 
			IF(@session.globals.Owner = 'RELACOM',
				DATE_ADD(_Datawplywu, INTERVAL IFNULL(@session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej, 0) DAY),
				IF(@session.globals.Owner = 'Laczpol',
					_Dataplatnosci,
					IF(@session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej >= 0,
						DATE_ADD(_Dataplatnosci, INTERVAL GREATEST(0, @session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej) DAY),
						NULL
					)
				)	
			)	
		
	;	
	/*
	SET
		@NEW.dataplatnosci_oczekiwana = 
			IF(@session.globals.Owner = 'RELACOM',
				DATE_ADD(_Datawplywu, INTERVAL @session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej DAY),
				_Dataplatnosci
			)	
		
	;	
	SET
		@NEW.DataPlatnosci_oczekiwana = 
			IF(@session.globals.Owner = 'Laczpol',
				_Dataplatnosci,
				@NEW.DataPlatnosci_oczekiwana
				-- DATE_ADD(_Datawplywu, INTERVAL GREATEST(0, @session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej) DAY)
			)	
	;
	*/
	RETURN DATE(@NEW.DataPlatnosci_oczekiwana);
END$$

DROP FUNCTION IF EXISTS `_Get_Default_DataWystaw_Realizacji_FromVAR`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_Get_Default_DataWystaw_Realizacji_FromVAR`(
	_MODE VARCHAR(250),	 --	_handle_oper INSERT, EDIT, DELETE,
	_ZM_TerminRealizacji DATE,
	_IReg_VAR_Value VARCHAR(100)	-- 0, 1, 2 +0 +X -X
	) RETURNS DATE
    NO SQL
    DETERMINISTIC
/*
*/	
BEGIN
	-- SET @.Find._Working_Day = IF(@session.globals.Owner IN ('SECURITY'), 'NewDoc', NULL);
	SET @.Find._Working_Day = 'NewDoc';
	SET
		@.D.Wyst = 
		(
			CASE _IReg_VAR_Value 
			WHEN '0' THEN CURRENT_DATE()	-- np. PLISZKA
			WHEN '1' THEN GREATEST(CURRENT_DATE(), _ZM_TerminRealizacji) 
			WHEN '2' THEN _ZM_TerminRealizacji 
			WHEN '+0' THEN DATE(_Get_Next_Prev_Working_Day(@.Find._Working_Day, _ZM_TerminRealizacji, NULL))
			ELSE 
				IF(_IReg_VAR_Value LIKE '-%',
					DATE(_Get_Next_Prev_Working_Day(@.Find._Working_Day, _ZM_TerminRealizacji, _IReg_VAR_Value)),
					DATE(_Get_Next_Prev_Working_Day(@.Find._Working_Day, _ZM_TerminRealizacji, _IReg_VAR_Value))
				)
			END
		)
	;
	RETURN @.D.Wyst;
END$$

DROP FUNCTION IF EXISTS `_Get_Default_DataWystaw_Realizacji_ZM`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_Get_Default_DataWystaw_Realizacji_ZM`(
	_MODE VARCHAR(250),	 		--	
	_Rodzaj INTEGER,			--	Rodzaj dok. realiz.
	_ZM_Rodzaj INTEGER,			--	Rodzaj zam.
	_ZM_zamwpermn BOOLEAN,		--	czy zam. permanentne
	_ZM_TerminRealizacji DATE	--	termin realizacji zam.
	) RETURNS DATE
    NO SQL
    DETERMINISTIC
/*
*/	
BEGIN
	IF _MODE = '' THEN 
		IF ((_Rodzaj = @ht.CMMMM) AND (@session.globals.Owner IN ('CDG','MPGK'))) THEN
		--	0. Gdy CDG i MM-ka to date jako termin realizacji
		--	Ustaw flagę z IRega dla perm.
			SET @._IReg_VAR_Value = '2';	--	termin realizacji zam.
		ELSEIF _ZM_zamwpermn AND _ZM_Rodzaj IN (@ht.CZmOO, @ht.CZmEx) THEN
		--	1. Permanentne - zam. OO lub eksportowe - dla nich to ustal date jako pierwszy nastepny roboczy dzien
		--	Ustaw flagę z IRega dla perm.
			SET @._IReg_VAR_Value = @session.HT.IR.Inicjacja_DataWystaw_dok_realizujacego_zam_perm;
		ELSE
		--	2. Pozostałe wszystkie zamówienia	
		--	Ustaw flagę z IRega dla nieperm.
			SET @._IReg_VAR_Value = 
			--	UWAGA FLAGA z IREGa - docelowo to bedzie string ale na razie mamy INT a więc nie ma tu +X -X
			--	zatem dla SECURITY ustawiam specjalnie...
				IF(@session.globals.Owner IN ('SECURITY'),
					'-3', --	Dla SECURITY zawsze od 0 do 3 dni wstecz (omija wolne i swieta)
					@session.HT.IR.Inicjacja_DataWystaw_dok_realizujacego_zam
				);
		END IF;
	--	Ustaw Date wystawienia
		SET
			@.D.Wyst = _Get_Default_DataWystaw_Realizacji_FromVAR(_MODE, _ZM_TerminRealizacji, @._IReg_VAR_Value)
		;
			/*
			SET
				@.D.Wyst = 
				(
					IF(@session.globals.Owner = 'PLISZKA',	
					-- 	2021-11-18 dla PLISZKI ZAWSZE!!! data bieżąca
						CURRENT_DATE(),
						IF(@session.globals.Owner = 'SECURITY',
						--	SECURITY
							DATE(_Get_Next_Prev_Working_Day('NewDoc', _ZM_TerminRealizacji, -3)),
						--	Wszyscy Normalsi	
							IFNULL(@.DEST.datawystaw, 	-- wymuszona data z parametrow wtedy ponizej juz nie sa brane pod uwage 
								-- było _ZM_TerminRealizacji
								(
									CASE @session.HT.IR.Inicjacja_DataWystaw_dok_realizujacego_zam 
									WHEN 0 THEN CURRENT_DATE()	-- gdy chemy wymusic musimy datawystaw dac w param. (@.DEST.datawystaw)
									WHEN 1 THEN GREATEST(CURRENT_DATE(), _ZM_TerminRealizacji) 
									ELSE _ZM_TerminRealizacji 
									END
								)
							)
						)
					)
				)
			;
			*/
		RETURN @.D.Wyst;
	ELSE
		RETURN @.D.Wyst;
	END IF;
END$$

DELIMITER ;

DELIMITER $$
DROP FUNCTION IF EXISTS `_Get_sposobplatn`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_Get_sposobplatn`(
	_MODE VARCHAR(250),	 		--	
	_FROM VARCHAR(250),
	_OpTyp INTEGER,					--	OpTyp dok. realiz.
	_Rodzaj INTEGER,				--	Rodzaj dok. NADMIAROWY jakby kiedys był potrzebny
	_We_sposobplatn INTEGER,		--	aktualny spos. platnosci
	_Kontr_sposobplatn INTEGER,		--	spos. platnosci z kontrahenta
	_Default_sposobplatn INTEGER	--	Default spos. platnosci - może byc NULL
	) RETURNS INTEGER
    NO SQL
    DETERMINISTIC
/*
	Nowe ... inicj.spos.platn 	(apro luty 2022) + (jmam mar 2022)
	n.sposobplatn = _Get_sposobplatn('', 'OP', @ht.doc.Optyp, n.Rodzaj, n.sposobplatn, k.sposplat, 0)
	NEW.sposobplatn = _Get_sposobplatn('', 'OP', @ht.doc.Optyp, NEW.Rodzaj, NEW.sposobplatn, k.sposplat, 0)
*/	
BEGIN
					--	set @_OpTyp = _OpTyp, @_Rodzaj = _Rodzaj, @_We_sposobplatn = _We_sposobplatn, @_Kontr_sposobplatn = _Kontr_sposobplatn, @_Default_sposobplatn = _Default_sposobplatn;
	IF _FROM = 'OP' THEN
		SET @session.HT.IR.Zakup_inicjuj_sposob_platnosci_z_karty_kontrah = IFNULL(@session.HT.IR.Zakup_inicjuj_sposob_platnosci_z_karty_kontrah, 0);
		SET @.sposobplatn.RETURN = 
			IFNULL(
				IF(NOT (_OpTyp IN (@ht.ZT, @ht.ZP)) OR @session.HT.IR.Zakup_inicjuj_sposob_platnosci_z_karty_kontrah,
				-- 	sprzedaz albo zakup i flaga zazwalająca (inicjuj = True)
					IFNULL(_Kontr_sposobplatn, _We_sposobplatn), 	
				-- 	zakup i flaga zabraniająca (inicjuj = False)
					_We_sposobplatn					
				),
				_Default_sposobplatn
			)
		;
	ELSE
		SET @.sposobplatn.RETURN = 
			IFNULL(
				IFNULL(_Kontr_sposobplatn, _We_sposobplatn),
				_Default_sposobplatn
			)
		;
	END IF;
	RETURN @.sposobplatn.RETURN;
END$$

DELIMITER ;

DELIMITER $$
DROP FUNCTION IF EXISTS `_Get_DataWaluty_Kurs`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_Get_DataWaluty_Kurs`(
	_MODE VARCHAR(250),	 		--	
	_FROM VARCHAR(250),
	_Rodzaj INTEGER,				--	Rodzaj dok. NADMIAROWY jakby kiedys był potrzebny
	_Waluta INTEGER,				--	aktualna waluta
	_Kurs DOUBLE(16,4),			
	_DataWaluty DATE,				--	aktualna waluta
	_DataWystaw DATE
	) RETURNS VARCHAR(20)
    NO SQL
    DETERMINISTIC
/*
	Nowe ... inicj.spos.platn 	(apro luty 2022) + (jmam mar 2022)
	n.sposobplatn = _Get_sposobplatn('', 'OP', @ht.doc.Optyp, n.Rodzaj, n.sposobplatn, k.sposplat, 0)
	NEW.sposobplatn = _Get_sposobplatn('', 'OP', @ht.doc.Optyp, NEW.Rodzaj, NEW.sposobplatn, k.sposplat, 0)
*/	
BEGIN
	SET @.NEW.Kurs = 1;
					set
						@_DataWaluty = _DataWaluty, @_DataWystaw = _DataWystaw, @_Waluta = _Waluta;
	IF _MODE IN ('', 'for.Waluta') THEN
	/*
		DO _Get_DataWaluty_Kurs('', 'OP', NEW.Rodzaj, NEW.Waluta, NEW.Kurs, NEW.datawaluty, NEW.DataWystaw);
	*/
		IF _FROM = 'OP' THEN
			SET
				@.NEW.datawaluty = NULL,
				@.NEW.Kurs = 1,
				@.NEW.tabela_kursow = NULL
			;
			IF _Waluta != 0 THEN
			/*
				SET
					@.NEW.datawaluty = NULL,
					@.NEW.Kurs = 1,
					@.NEW.tabela_kursow = NULL
				;
			ELSE
			*/
				SET
					@.NEW.datawaluty = IFNULL(_DataWaluty, _DataWystaw - INTERVAL 1 DAY),
					@.NEW.MAX.datawaluty = LEAST(_DataWystaw - INTERVAL 1 DAY, CURRENT_DATE() - INTERVAL 1 DAY)
				;
				SET
					@.NEW.datawaluty = LEAST(@.NEW.datawaluty, @.NEW.MAX.datawaluty),
					@.NEW.Kurs = 1,
					@.NEW.tabela_kursow = NULL
				;
				SELECT
					k.data, k.kurs, CONCAT_WS(' z dnia ', k.numer_tab_kurs, _Format_DT(k.data, '%d %mmm %YYYY')) AS tabela_kursow
				INTO 
					@.NEW.DataWaluty, @.NEW.kurs, @.NEW.tabela_kursow
				FROM `kursy` k 
				WHERE 
					_Waluta <> 0
					AND k.idnwaluty = _Waluta
					-- AND k.Data <= (NEW.datawaluty - INTERVAL 1 DAY)
					AND k.Data <= @.NEW.datawaluty
				ORDER BY k.data DESC
				LIMIT 1
				;
				SET
					@.NEW.datawaluty = @.NEW.datawaluty,
					@.NEW.Kurs = ROUND(@.NEW.Kurs, 4),
					@.NEW.tabela_kursow = @.NEW.tabela_kursow
				;
			END IF;
		END IF;
	END IF;
	
	IF _MODE IN ('Waluta_Rozliczen') THEN
		/*
		DO _Get_DataWaluty_Kurs('Waluta_Rozliczen', 'OP', NEW.Rodzaj, NEW.Waluta_Rozliczen, NEW.Kurs_Rozliczen, NEW.datawaluty, NEW.DataWystaw);
		Jeśli chodzi o walute rozliczeń to...
		gdy zmieniła sie waluta bo zmieniliśmy jedna i druga to juz nic nie ustawiaj (obie waluty sa sobie równe)
		gdy zmienia sie sam kurs to tez nic nie zmieniaj bo kurs wpisanio z ręki.
		Ale gdy zmienia sie waluta rozl. i jest <> od waluty to pobierz z kursów
		*/
		SET
			@.NEW.Kurs = 
				IF(_Waluta = 0,	-- jako NEW.Waluta_Rozliczen
					1,		-- PLN
					IFNULL(
					(
						SELECT
							k.kurs
						FROM `kursy` k 
						WHERE 
							k.idnwaluty = _Waluta	--	jako Waluta_Rozliczen
							AND k.Data <= IFNULL(_DataWaluty, _DataWystaw - INTERVAL 1 DAY)
						ORDER BY k.data DESC
						LIMIT 1
					), _Kurs	--	jako Kurs_Rozliczen
					)
				)
		;
		SET
			@.NEW.Kurs = ROUND(@.NEW.Kurs, 4)	--	NEW.Kurs_Rozliczen
			-- @.NEW.tabela_kursow = @.NEW.tabela_kursow
		;
	END IF;
	
	RETURN @.NEW.Kurs;
END$$
DELIMITER ;

DELIMITER $$
DROP FUNCTION IF EXISTS `_Get_Mag`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `_Get_Mag`(
	_MODE VARCHAR(250),	 		--	
	_FROM VARCHAR(250),
	_Rodzaj INTEGER,				--	Rodzaj dok. NADMIAROWY jakby kiedys był potrzebny
	_MagTyp INTEGER,				--	_MagTyp
	_nMag1 INTEGER,				--	z nagłówka ZMgazynu , idnMagazyn
	_nMag2 INTEGER,				--	z nagłówka DoMgazynu , MagazynWys
	_pMag1 INTEGER,				--	z nagłówka ZMgazynu , idnMagazyn
	_pMag2 INTEGER,				--	z nagłówka DoMgazynu , MagazynWys
	_Param_A VARCHAR(200),			
	_Param_B VARCHAR(200),			
	_Param_C VARCHAR(200)			
	) RETURNS VARCHAR(20)
    NO SQL
    DETERMINISTIC
/*
	Nowe ... inicj.spos.platn 	(apro luty 2022) + (jmam mar 2022)
	n.sposobplatn = _Get_sposobplatn('', 'OP', @ht.doc.Optyp, n.Rodzaj, n.sposobplatn, k.sposplat, 0)
	NEW.sposobplatn = _Get_sposobplatn('', 'OP', @ht.doc.Optyp, NEW.Rodzaj, NEW.sposobplatn, k.sposplat, 0)
*/	
BEGIN
	SET 
		@._nMag1 = _nMag1,
		@._nMag2 = _nMag2,
		@._pMag1 = _pMag1,
		@._pMag2 = _pMag2
	;
	IF _MODE = 'pRZ' THEN	--	Daj magazyn rozch
		SET
			@._MagTyp = IFNULL(_MagTyp, @ht.mtRZ),
			@._nMag1 = IFNULL(@._nMag1, @._pMag1),
			@._nMag2 = IFNULL(@._nMag2, @._pMag2)
		;
		SET
			@.Mag = 
				IF(@._MagTyp = @ht.mtPZ, 
					GREATEST(@._pMag2, @._nMag2), 
					GREATEST(@._pMag1, @._nMag1) 
				)
			;
		RETURN @.Mag;
	END IF;
	
END$$

DELIMITER ;



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

*/
	