 /*!40101 SET NAMES cp1250 */;
DELIMITER $$

/*
teraz w oppo_e_Update w C_HT_oppo_e.sql
*/
DROP PROCEDURE IF EXISTS `oppo_e_Update`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `oppo_e_Update`(
	IN _MODE VARCHAR(250),
	IN _GUID VARCHAR(38),
	IN _IdnOper VARCHAR(38)
)
S_oppo_e_Update: BEGIN 

	DECLARE _IdnTowr VARCHAR(38);
	DECLARE _Ilosc, _CenaNet DECIMAL(16,4);
	DECLARE _SQLText TEXT;
	
	SET _GUID = IFNULL(_GUID, '');
	SET @aDoIt = @session.HT.IR.Wymus_przepisywanie_katcol_do_poz;
	SET @oppo_e_Update_e_from_opng_e = 'TAK';
	IF _MODE IN ('one_rec', '') AND (_GUID != '') THEN
		CALL oppo_e_Update('from_opng_e', _GUID, _IdnOper);
	END IF; --	_MODE = 'one_rec' 
	
	IF _MODE = 'from_opng_e' THEN
		UPDATE `oppo_e` p, `opng_e` n
		SET
			p.Tymczasowa = n.Tymczasowa,
			p.kontridn = n.kontridn,
			p.rodzaj_typ = n.rodzaj_typ,
			p.datawystaw = n.datawystaw,
			p.datasprzed = n.datasprzed,
			p.datawplywu = n.datawplywu,
			p.ZMagazynu = IFNULL(p.ZMagazynu, n.ZMagazynu),
			p.DoMagazynu = IFNULL(p.DoMagazynu, n.DoMagazynu),
			p.kat0 = IF(n.KatCol0 != -1 AND @aDoIt, n.KatCol0, p.kat0),
			p.kat1 = IF(n.KatCol1 != -1 AND @aDoIt, n.KatCol1, p.kat1),
			p.kat2 = IF(n.KatCol2 != -1 AND @aDoIt, n.KatCol2, p.kat2),
			p.kat3 = IF(n.KatCol3 != -1 AND @aDoIt, n.KatCol3, p.kat3),
			p.kat4 = IF(n.KatCol4 != -1 AND @aDoIt, n.KatCol4, p.kat4),
			-- p.TypSymbolow = IF(n.rodzaj = 73, 0, IFNULL(@transact.TypSymbolow, 0)), 	--	CZmZP = 73;      { Zamówienie - zlecenie produkcyjne }
			p.kurs = n.kurs
		WHERE
			IF(_GUID != '', p.GUID = _GUID, p.IdnOper = _IdnOper)
			AND
			n.GUID = p.IdnOper
		;	
	END IF; --	_MODE = 'from_opng_e' 
	
	IF _MODE = 'lp' THEN
		-- POBIERZ z oper_doc SortTyp !!!!!!!!!!!!!!!!!!
		SET @aSortTyp = 0;
		
		SET @LP = 0;
		DROP TEMPORARY TABLE IF EXISTS `t_oppo_e_lp`;
		IF @aSortTyp = @ht.COpTypSortTyp_NONE THEN
			CREATE TEMPORARY TABLE `t_oppo_e_lp` AS
				SELECT
					p.GUID, 
					_VarInt(@LP := @LP + 1) AS LP
				FROM `oppo_e` p
				LEFT JOIN `TowrNg` t ON p.idntowr = t.GUID
				WHERE
					p.IdnOper = _IdnOper
				-- ORDER BY IF(p.Idn = 0, CONCAT('z', p.LOCALTIME), CONCAT('a', p.IDN))
				ORDER BY IF(p.Idn = 0, LPAD(p.LP, 8, '0'), CONCAT('a', p.IDN))
			;		
		ELSEIF @aSortTyp = @ht.COpTypSortTyp_Usluga_TreeNode_Symbol THEN
			CREATE TEMPORARY TABLE `t_oppo_e_lp` AS
				SELECT
					p.GUID, 
					_VarInt(@LP := @LP + 1) AS LP
				FROM `oppo_e` p
				LEFT JOIN `TowrNg` t ON p.idntowr = t.GUID
				WHERE
					p.IdnOper = _IdnOper
				ORDER BY p.usluga, t.Treenode, p.towrsymb
			;		
		ELSEIF @aSortTyp = @ht.COpTypSortTyp_Usluga_Symbol THEN
			CREATE TEMPORARY TABLE `t_oppo_e_lp` AS
				SELECT
					p.GUID, 
					_VarInt(@LP := @LP + 1) AS LP
				FROM `oppo_e` p
				WHERE
					p.IdnOper = _IdnOper
				ORDER BY IF(IFNULL(p.IdnTowr, '') = '', 'ZZZZZZ', ''), p.usluga, p.towrsymb	
				-- było ORDER BY p.usluga, p.towrsymb
			;		
		END IF;

		UPDATE `oppo_e` p, `t_oppo_e_lp` t
		SET
			p.lp = t.lp
		WHERE 
			p.GUID = t.GUID
		; 
		DROP TEMPORARY TABLE `t_oppo_e_lp`;
	END IF; --	_MODE = 'lp' 
	
	IF _MODE = 'rozrzucanie' THEN
		CALL t_oppo_rozrzuc('DROP', _IdnOper, 0, '', '');
		
		
		LEAVE S_oppo_e_Update;	--	na razie
		
	--	koszt_nabycia	
		CALL t_oppo_rozrzuc('INIT', _IdnOper, 0, '', '');
		
		UPDATE `t_oppo_rozrzuc` t,  `oppo_e` p
		SET
			t.Waga = p.WartNet -- p.koszt_nabycia -- p.WartNet
		WHERE
			p.IdnOper = _IdnOper
			AND
			t.GUID = p.GUID
		;
	
		CALL t_oppo_rozrzuc('CALC', _IdnOper, 0, '', '');
		
		UPDATE `t_oppo_rozrzuc` t,  `oppo_e` p
		SET
			p.koszt_nabycia = p.RValue
		WHERE
			p.IdnOper = _IdnOper
			AND
			t.GUID = p.GUID
		;

	--	WartClo
		/*
		Bazuje to na koszcie, który jest dodawany do wartosciNet i zwiększa w ten
		sposób podstawę naliczenia cła}
		aWartNetTemp := Rnd2(DS.FieldByName('WartNetWal').AsCurrency*DS.FieldByName('Kurs').AsCurrency) +
		DS.FieldByName('koszt_nabycia').AsCurrency;
		Result := Rnd2(aWartNetTemp*DS.FieldByName('stawkacla').AsCurrency/100);
		*/
		CALL t_oppo_rozrzuc('INIT', _IdnOper, 0, '', '');
		
		UPDATE `t_oppo_rozrzuc` t,  `oppo_e` p
		SET
			t.Waga = _Rnd2(
				stawkacla*(WartNetWal * Kurs + koszt_nabycia)/100
			)
		WHERE
			p.IdnOper = _IdnOper
			AND
			t.GUID = p.GUID
		;
	
		CALL t_oppo_rozrzuc('CALC', _IdnOper, 0, '', '');
		
		UPDATE `t_oppo_rozrzuc` t,  `oppo_e` p
		SET
			p.WartClo = p.RValue
		WHERE
			p.IdnOper = _IdnOper
			AND
			t.GUID = p.GUID
		;

		CALL t_oppo_rozrzuc('DROP', _IdnOper, 0, '', '');
		
	END IF; --	_MODE = 'rozrzucanie' 
	
END$$

-- oppo_e_Insert WON
DROP PROCEDURE IF EXISTS `oppo_e_Insert`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `oppo_e_Insert`(
	IN _MODE VARCHAR(250),
	INOUT _GUID VARCHAR(38),
	IN _IdnOper VARCHAR(38),
	IN _Param_A VARCHAR(50),	
	IN _Param_B VARCHAR(50),	
	IN _Param_C VARCHAR(50),	
	IN _Param_D VARCHAR(50)	
)
BEGIN 
	DECLARE _IdnTowr, _ZM_Key VARCHAR(38);
	DECLARE _Ilosc, _CenaNet DECIMAL(16,4);
	DECLARE _Typ_Przepisania_Cen INTEGER;
	--	TCenyZZm 

	IF _MODE = 'IdnTowr' THEN
		SET _GUID = IF(IFNULL(_GUID, '') = '', NEWGUID(), _GUID);
		SET 
			_Param_C = IF(IFNULL(_Param_C, '') = '', 0, _Param_C),
			_IdnTowr = IFNULL(_Param_A, ''),
			_Ilosc = IFNULL(_Param_B, 0.0),
			_CenaNet = IFNULL(_Param_C, 0.0)
		;
		
		INSERT IGNORE INTO `oppo_e` (GUID, IdnOper, IdnTowr, Ilosc, CenaNet)
			SELECT
				_GUID,
			-- 	n.Rodzaj,
				_IdnOper,
				_IdnTowr,
				_Ilosc,
				_CenaNet
			-- FROM `opng_e` n
			-- WHERE
			-- 	n.GUID = _IdnOper
		ON DUPLICATE KEY UPDATE
			IdnTowr = _Param_A,
			Ilosc = _Param_B
			
		;
		CALL oppo_e_Update('one_rec', _GUID, '');
		-- CALL pozycje_cenyrabat_oppo_e('', _GUID, '', '', '');
	END IF;		-- _MODE = 'INSERT.IdnTowr' 
	
	
END$$

/* ************************************************************************************************************************************************************************
	Teraz w `oppo_E_Let_Insert` w C_HT_oppo_e.sql
	Wstawianie do, edycja `oppo_e` 
************************************************************************************************************************************************************************ */	

DROP PROCEDURE IF EXISTS `oppo_e_LetInsert`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `oppo_e_LetInsert`(
	IN _MODE VARCHAR(250),
	INOUT _GUID VARCHAR(38),
	IN _IdnOper VARCHAR(38),
	IN _IdnTowr VARCHAR(38),
	IN _Ilosc DECIMAL(16,4),
	IN _CenaNet DECIMAL(16,4),
	IN _Param_A VARCHAR(50),	
	IN _Param_B VARCHAR(50),	
	IN _Param_C VARCHAR(50),	
	IN _Param_D VARCHAR(50)	
)
BEGIN 
	DECLARE _ZM_Key VARCHAR(38);
	DECLARE _Typ_Przepisania_Cen INTEGER;
	
	DECLARE CZZ_Zamowienie INTEGER DEFAULT 0;
	DECLARE CZZ_KursDzis INTEGER DEFAULT 1;
	DECLARE CZZ_OdNowa INTEGER DEFAULT 2;
	
	SET _GUID = IF(IFNULL(_GUID, '') = '', NEWGUID(), _GUID);
	
	IF _MODE IN ('', 'IdnTowr') THEN
		INSERT IGNORE INTO `oppo_e` (GUID, IdnOper, IdnTowr, Ilosc, CenaNet)
			SELECT
				_GUID,
				_IdnOper,
				_IdnTowr,
				IFNULL(_Ilosc, 0.0),
				IFNULL(_CenaNet, 0.0)
		ON DUPLICATE KEY UPDATE
			IdnTowr = _IdnTowr,
			Ilosc = _Ilosc
			
		;
		CALL oppo_e_Update('one_rec', _GUID, '');
		-- CALL pozycje_cenyrabat_oppo_e('', _GUID, '', '', '');
	END IF;		-- _MODE = 'IdnTowr' 
	
	IF _MODE = 'From.zmng' THEN
		SET 
			_ZM_Key = IFNULL(_Param_A, ''),
			_Typ_Przepisania_Cen = IFNULL(_Param_B, 0)
		;	
		SELECT
			n.DataWystaw, 
			s.DisplayValue AS MonthLongName, 
			LPAD(MONTH(n.DataWystaw), 2, '0') AS MonthNo2, 
			LPAD(YEAR(n.DataWystaw), 4, '0') AS YearNo4, 
			LPAD(YEAR(n.DataWystaw) MOD 1000, 2, '0') AS YearNo2
		INTO
			@n.DataWystaw, @n.MonthLongName, @n.MonthNo2, @n.YearNo4, @n.YearNo2
		FROM `opng_e` n, `slowniki_pierwotne` s
		WHERE
			GUID = _IdnOper
			AND
			s.slownik_GUID = 'MIESIACE'
			AND
			s.Value = MONTH(n.DataWystaw)
		;
			
		CALL _IReg_Get('', 'Wymuszaj_zero_stawke_VAT_dla_STFE', 0, 'BOOLEAN', @session.HT.IR.Wymuszaj_zero_stawke_VAT_dla_STFE, FALSE);
		
		INSERT IGNORE INTO `oppo_e` 
		(GUID, IdnOper, GUIDzm, IdnTowr, Ilosc, CenaNet)
			SELECT
				NEWGUID(),
				_IdnOper,
				p.GUID,
				p.IdnTowr,
				(p.Ilosc - p.zrealizowano) AS DoRealizacji,
				p.CenaNet
			FROM `zmpo` p
			WHERE
				p.IdnNG = _ZM_Key
				AND
				(p.Ilosc - p.zrealizowano) > 0
				AND
				IFNULL(p.IdnTowr, '') != ''
			ORDER BY p.LP	
		;
		CALL oppo_e_Update('from_opng_e', '', _IdnOper);
		CALL pozycje_cenyrabat_oppo_e('dla.IdnOper', _IdnOper, '', '', '');
		
		--	Teraz update pozycji szczegolowe
		UPDATE `oppo_e` p, `zmpo` z
		SET
			p.Lp = z.Lp,
			p.rabat = IF(_Typ_Przepisania_Cen != CZZ_OdNowa,  z.rabat, p.rabat),
			p.idnvat =
				IF(p.Rodzaj = @ht.CSpFE AND @session.HT.IR.Wymuszaj_zero_stawke_VAT_dla_STFE,
					2,	--	to stawka 0%
					IF(p.Rodzaj IN (@ht.CSTUE, @ht.CZkIm, @ht.CZTUE) AND (z.idnVat != 5),		--	<> od niepodlega
						2,	--	to stawka 0%
						IF(p.Rodzaj IN (@ht.CZkRU),		--	<> od niepodlega
							5,	--	to stawka niepodlega
							IF((p.idnvat != z.idnvat) AND (z.idnvat IN (2, 3, 5)),		--	<> od 0, zwolniony, niepodlega
								z.idnvat,
								p.idnvat
							)
						)	
					)	
				),
			p.usluga = z.usluga,
			p.towrsymb = z.towrsymb,
			
			p.towrnazwa = 
						-- UstawRokMsc(aSrcPo.FieldByName('towrnazwa').AsString, FNg.FieldByName('DataWystaw').AsDateTime);
					REPLACE(REPLACE(REPLACE(REPLACE(z.towrnazwa, '%WW', _VArStr(@n.MonthNo2)), '%W', _VarStr(@n.MonthLongName)), '%RRRR', _VarStr(@n.YearNo4)), '%RR', _VarStr(@n.YearNo2)),
			p.uwagi = z.uwagi,
			p.uwagi2 = z.uwagi2,
			p.ilosc_L_do_przeliczen = z.ilosc_L_do_przeliczen,
			p.ilosc_M_do_przeliczen = z.ilosc_M_do_przeliczen,
			p.id_przelicznika = z.id_przelicznika,
			-- p.przelicznik = z.przelicznik,
			p.opakowanie_zwrotne = z.opakowanie_zwrotne,
			
			p.Rodzaj_Przeliczenia = z.Rodzaj_Przeliczenia,
			p.WartnetWal = z.WartnetWal,
			p.OsobaGuid = z.OsobaGuid,
			p.jednostka = z.jednostka,
			p.RecepturaGuid = z.RecepturaGuid,
			p.oplata_produktowa = z.oplata_produktowa,
			p.info = z.info,	 -- ????
			p.info2 = z.info2,
			p.info3 = z.info3,
			p.info4 = z.info4,
			-- p.RcNgGuid = IF(p.Rodzaj IN (@ht.CZmOO, @ht.CZmEx, @ht.CZmZP, @ht.cZmWE), z.RcNgGuid, p.RcNgGuid), 
			p.RcNgGuid = IF(z.Rodzaj IN (@ht.CZmZP), z.RcNgGuid, p.RcNgGuid), 
			p.GUID_ZmPo_MM = z.GUID
			
		WHERE
			p.IdnOper = _IdnOper
			AND
			z.GUID = p.GUIDzm
		;

		IF (_Typ_Przepisania_Cen != CZZ_OdNowa) THEN
			UPDATE `oppo_e` p, `zmpo` z
			SET
				p.idncennik = p.idncennik,
				p.cenanet = 
					IF(p.Rodzaj_Przeliczenia IN (3,4,5),	 -- CRodzaj_Przeliczenia_Brutto_Netto, CRodzaj_Przeliczenia_Brutto_Netto2, CRodzaj_Przeliczenia_CenaBrutto_Netto
						z.cenanet,
						z.cenanet
					),	
				p.cenabrt = 
					IF(p.Rodzaj_Przeliczenia IN (3,4,5),	 -- CRodzaj_Przeliczenia_Brutto_Netto, CRodzaj_Przeliczenia_Brutto_Netto2, CRodzaj_Przeliczenia_CenaBrutto_Netto
						z.cenabrt,
						p.cenabrt
					)	
			WHERE
				p.IdnOper = _IdnOper
				AND
				z.GUID = p.GUIDzm
			;
		END IF;
		
		IF (_Typ_Przepisania_Cen = CZZ_Zamowienie) THEN
			UPDATE `oppo_e` p, `zmpo` z
			SET
				p.kurs = p.kurs,
				p.cenanet = 
					IF(p.Rodzaj_Przeliczenia IN (3,4,5),	 -- CRodzaj_Przeliczenia_Brutto_Netto, CRodzaj_Przeliczenia_Brutto_Netto2, CRodzaj_Przeliczenia_CenaBrutto_Netto
						z.cenanet,
						z.cenanet
					),	
				p.cenabrt = 
					IF(p.Rodzaj_Przeliczenia IN (3,4,5),	 -- CRodzaj_Przeliczenia_Brutto_Netto, CRodzaj_Przeliczenia_Brutto_Netto2, CRodzaj_Przeliczenia_CenaBrutto_Netto
						z.cenabrt,
						p.cenabrt
					)	
			WHERE
				p.IdnOper = _IdnOper
				AND
				z.GUID = p.GUIDzm
			;
		END IF;
		
		IF (@session.globals.Owner = 'PLISZKA') THEN
			UPDATE `oppo_e` p, `zmpo` z
			SET
				p.kat5 = p.kat5,
				p.kat6 = p.kat6,
				p.kat7 = p.kat7,
				p.kat8 = p.kat8,
				p.kat9 = p.kat9
			WHERE
				p.IdnOper = _IdnOper
				AND
				z.GUID = p.GUIDzm
			;
		END IF;
		
		IF @session.HT.IR.PrzepiszKatColZZamowienia THEN
	-- UWAGA !!!!!!!!tu w Delphi jest {$IFDEF PrzepiszKatColeZPozycjiZM}
			UPDATE `oppo_e` p, `zmpo` z
			SET
				p.kat0 = p.kat0,
				p.kat1 = p.kat1,
				p.kat2 = p.kat2,
				p.kat3 = p.kat3,
				p.kat4 = p.kat4,
				p.kat5 = p.kat5,
				p.kat6 = p.kat6,
				p.kat7 = p.kat7,
				p.kat8 = p.kat8,
				p.kat9 = p.kat9
			WHERE
				p.IdnOper = _IdnOper
				AND
				z.GUID = p.GUIDzm
			;
		END IF;
		
	END IF;		-- _MODE = 'From.zmng' 
	
END$$

/*
teraz w `oppo_E_Let_Edit` w C_HT_oppo_e.sql
*/
DROP PROCEDURE IF EXISTS `oppo_e_LetEdit`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `oppo_e_LetEdit`(
	IN _MODE VARCHAR(250),
	IN _GUID VARCHAR(38),
	IN _IdnOper VARCHAR(38),
	IN _IdnTowr VARCHAR(38),
	IN _Ilosc DECIMAL(16,4),
	IN _CenaNet DECIMAL(16,4),
	IN _Param_A VARCHAR(50),	
	IN _Param_B VARCHAR(50),	
	IN _Param_C VARCHAR(50),	
	IN _Param_D VARCHAR(50)	
)
BEGIN 
	UPDATE `oppo_e` p
	SET
		p.IdnTowr = IFNULL(_IdnTowr, p.IdnTowr),
		p.Ilosc = IFNULL(_Ilosc, p.Ilosc),
		p.CenaNet = IFNULL(_CenaNet, p.CenaNet)
	WHERE
		p.GUID = _GUID
	;
	CALL oppo_e_Update('one_rec', _GUID, '');
	-- CALL pozycje_cenyrabat_oppo_e('', _GUID, '', '', '');
END$$


/* ************************************************************************************************************************************************************************
	Narzędzia 
************************************************************************************************************************************************************************ */	

DROP PROCEDURE IF EXISTS `e_oppo_rec_ustal_magazyny_rodzaj`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `e_oppo_rec_ustal_magazyny_rodzaj`(
	IN _MODE VARCHAR(250),
	INOUT _Rodzaj INTEGER,			--	rodzaj z nagłówka
	INOUT _ZMagazynu INTEGER,		--	ZMagazynu z nagłówka		
	INOUT _DoMagazynu INTEGER,		--	DoMagazynu z nagłówka
	IN _Ilosc DECIMAL(16,2),
	IN _WartNet DECIMAL(16,2)
)
BEGIN 
	CALL ht_rodzaj_calc(_Rodzaj);
-- 		SET @Kiedy = NOW(), @FINAL_Rodzaj = 10000, @Wchodze = (_Ilosc > 0); -- AND @ht.doc.IsKorekta;
		
	
	SET @Mag = ht_Doc_Is('MA_Magzyny', _Rodzaj);
	IF @Mag THEN
		SET 
			@_ZMagazynu = _ZMagazynu, @_DoMagazynu = _DoMagazynu
		;
		-- w @ht.doc.antyrodzaj korygowany przeciwrodzaj dokumentu @ht.doc.rodzaj
		IF @ht.doc.IsKorekta THEN
			IF (_Ilosc > 0) OR (_WartNet > 0) THEN 
				SET 
					_Rodzaj = @ht.doc.antyrodzaj
				; -- , _DoMagazynu = @_ZMagazynu, _ZMagazynu = @_DoMagazynu;
			END IF;	
			
		ELSEIF _Rodzaj IN (@ht.CInwn, @ht.CInNW, @ht.CInND) THEN	
			IF (_Ilosc > 0) THEN 
			-- 67 Przychod z mag  Ilosc (+) TwTyp = 0
				SET _Rodzaj = @ht.CInNW;
			ELSE	
			-- 68 Rozchod do mag  Ilosc (-) TwTyp = 2
				SET _Rodzaj = @ht.CInND;
			END IF;	
			
		ELSEIF _Rodzaj IN (@ht.CZmZP) THEN	
				SET _Rodzaj = @ht.CZM_ZP1;
			
		END IF;	
		
		CALL ht_rodzaj_calc(_Rodzaj);
		
		SET
			_ZMagazynu = 
				CASE 
			/*RZ*/	WHEN @ht.doc.MagTyp = @ht.mtRZ THEN IF(@_ZMagazynu > 0, @_ZMagazynu, @_DoMagazynu) 
			/*PZ*/	WHEN @ht.doc.MagTyp = @ht.mtPZ THEN 0
			/*MM*/	WHEN @ht.doc.MagTyp = @ht.mtMM THEN IF(@_ZMagazynu > 0, @_ZMagazynu, @_DoMagazynu) 
			/*NN*/	ELSE 0
				END,
			_DoMagazynu = 
				CASE 
			/*RZ*/	WHEN @ht.doc.MagTyp = @ht.mtRZ THEN 0
			/*PZ*/	WHEN @ht.doc.MagTyp = @ht.mtPZ THEN IF(@_DoMagazynu > 0, @_DoMagazynu, @_ZMagazynu) 
			/*MM*/	WHEN @ht.doc.MagTyp = @ht.mtMM THEN IF(@_DoMagazynu > 0, @_DoMagazynu, @_ZMagazynu) 
			/*NN*/	ELSE 0
				END
		;	
		
		
		/*
		B Y Ł O
		-- w @ht.doc.antyrodzaj korygowany przeciwrodzaj dokumentu @ht.doc.rodzaj
		IF @ht.doc.IsKorekta THEN
			IF (_Ilosc > 0) OR (_WartNet > 0) THEN 
				SET _Rodzaj = @ht.doc.antyrodzaj, _DoMagazynu = @_ZMagazynu, _ZMagazynu = @_DoMagazynu;
			END IF;	
			
		ELSEIF _Rodzaj IN (@ht.CInwn, @ht.CInNW, @ht.CInND) THEN	
			IF (_Ilosc > 0) THEN 
			-- 67 Przychod z mag  Ilosc (+) TwTyp = 0
				SET _Rodzaj = @ht.CInNW;
				IF _DoMagazynu = 0 THEN
					SET _DoMagazynu = @_ZMagazynu;
				END IF;
				SET _ZMagazynu = 0;
			ELSE	
			-- 68 Rozchod do mag  Ilosc (-) TwTyp = 2
				SET _Rodzaj = @ht.CInND;
				IF _ZMagazynu = 0 THEN
					SET _ZMagazynu = @_DoMagazynu;
				END IF;
				SET _DoMagazynu = 0;
			END IF;	
			
		ELSEIF _Rodzaj IN (@ht.CDoNW, @ht.CDoND) then	
			IF (@ht.doc.MagTyp = @ht.mtPZ) THEN
				SET _DoMagazynu = @_ZMagazynu, _ZMagazynu = @_DoMagazynu;
			END IF;	
		END IF;	
		*/
	END IF;
END$$

DROP PROCEDURE IF EXISTS `e_opng_rec_ustal_magazyny`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `e_opng_rec_ustal_magazyny`(
	IN _MODE VARCHAR(250),
	IN _Rodzaj INTEGER,
	INOUT _ZMagazynu INTEGER,		
	INOUT _DoMagazynu INTEGER
)
BEGIN 
	SET @Mag = ht_Doc_Is('MA_Magzyny', _Rodzaj);
	IF @Mag THEN
		IF (@ht.doc.MagTyp = @ht.mtRZ) THEN
			SET _DoMagazynu = 0;
		END IF;	
		IF (@ht.doc.MagTyp = @ht.mtPZ) THEN
			SET _ZMagazynu = 0;
		END IF;	
	ELSE		
		SET _ZMagazynu = 0, _DoMagazynu = 0;
	END IF;
END$$

DROP PROCEDURE IF EXISTS `opng_Numeracja_po_Apply`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `opng_Numeracja_po_Apply`(
	IN _MODE VARCHAR(250),
	IN _Key VARCHAR(38),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_C VARCHAR(255)
)
/*
	CALL opng_Numeracja_po_Apply('', _Key, '', '', '');
*/
S_opng_Numeracja_po_Apply: BEGIN 
	SELECT
		n.rodzaj, n.Rodzaj_typ, n.NrDokFin, n.NrDokMag, n.NrDokKas, n.fvrudowz,
		n.KontrGUID, n.PlatnikGUID, n.ZMagazynu, n.DoMagazynu, n.NrKasy, n.RodzajDowodu, n.Rv_id, n.DataWystaw, n.DataWplywu, n.transza_zamow,
		n.tymczasowa,
		n.ugrpGUID
	INTO
		@n.rodzaj, @n.Rodzaj_typ, @n.NrDokFin, @n.NrDokMag, @n.NrDokKas, @n.fvrudowz,
		@n.KontrGUID, @n.PlatnikGUID, @n.ZMagazynu, @n.DoMagazynu, @n.NrKasy, @n.RodzajDowodu, @n.Rv_id, @n.DataWystaw, @n.DataWplywu, @n.transza_zamow,
		@n.tymczasowa,
		@n.ugrpGUID
	FROM `opng` n
	WHERE
		n.GUID = _Key
	;
	CALL ht_rodzaj_calc(@n.rodzaj); 
	IF @session.HT.IR.NieNadawajNumerowDlaTymczas AND @n.tymczasowa > 0 AND @n.rodzaj = @ht.CPzPZ THEN
		LEAVE S_opng_Numeracja_po_Apply;
	END IF;
	
	SET 
		@_Res1 = 
			IF(@ht.doc.Optyp = 6, 	--	Czy KASA?
				@n.NrKasy,
				IF(@ht.doc.MagTyp IN (@ht.mtMM, @ht.mtRZ), 
					@n.ZMagazynu, 
					@n.DoMagazynu
				)
			),
		@_Res2 = 
			IF(@ht.doc.MagTyp IN (@ht.mtMM, @ht.mtPZ), 
				@n.DoMagazynu, 
				0
			)
	;	
	SET
		@_Params =
		CONCAT(
			_VarStr(@_Res1), ';',
			_VarStr(@_Res2), ';',
			_VarStr(@n.DataWystaw), ';',
			_VarStr(@n.RodzajDowodu), ';', 
			_VarStr(@n.Rv_id), ';',
			_VarStr(@n.ugrpGUID), ';'
		)
	;
	IF IFNULL(@n.NrDokMag, '') = '' AND @ht.doc.MA_Magzyny AND @n.fvrudowz = 0 THEN
	-- NR DokMAG w magazynowych ale i w fakturach
		IF (@n.rodzaj = @ht.CRzWZ) AND (@session.globals.Owner = 'KONKOL') AND @n.PlatnikGUID = '{B3B597BB-72E1-473B-B972-33DA256FF062}' THEN
			CALL Auto_Biedronka_Get_NrDokMag('', @n.KontrGUID, @n.transza_zamow, @n.DataWystaw, @n.NrDokMag);
		ELSE
			CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_Params, @n.NrDokMag);
			-- CALL numdok_prapre_num('', @n.rodzaj, 0, '', @n.ZMagazynu, @n.DoMagazynu, @n.DataWystaw, @n.RodzajDowodu, @n.Rv_id, @n.NrDokMag);
		END IF;
		-- select @n.NrDokMag;
		/* */
		UPDATE `opng` n
		SET
			n.NrDokMag = @n.NrDokMag
		WHERE
			n.GUID = _Key
		;
		/* */
	END IF;
	
	/*
	@ht.doc.Optyp = 2 -- MG		NrDokMag
	@ht.doc.Optyp = 6 -- KS		NrDokKas
	ELSE	NrDokFin
	*/
	IF @ht.doc.Optyp = 2 THEN -- MG		NrDokMag
		IF IFNULL(@n.NrDokMag, '') != '' THEN
			LEAVE S_opng_Numeracja_po_Apply;
		END IF;
		CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_Params, @n.NrDokMag);
		UPDATE `opng` n
		SET
			n.NrDokMag = @n.NrDokMag
		WHERE
			n.GUID = _Key
		;
	ELSEIF @ht.doc.Optyp = 6 THEN -- KS		NrDokKas
		IF IFNULL(@n.NrDokKas, '') != '' THEN
			LEAVE S_opng_Numeracja_po_Apply;
		END IF;
		CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_Params, @n.NrDokKas);
		UPDATE `opng` n
		SET
			n.NrDokKas = @n.NrDokKas
		WHERE
			n.GUID = _Key
		;
	ELSE				 -- 		NrDokFin
		IF IFNULL(@n.NrDokFin, '') != '' THEN
			LEAVE S_opng_Numeracja_po_Apply;
		END IF;
		CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_Params, @n.NrDokFin);
		UPDATE `opng` n
		SET
			n.NrDokFin = @n.NrDokFin
		WHERE
			n.GUID = _Key
		;
	END IF;

	
	
END$$


DROP PROCEDURE IF EXISTS `t_oppo_rozrzuc`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `t_oppo_rozrzuc`(
	IN _MODE VARCHAR(250),
	IN _IdnOper VARCHAR(38),
	IN _SValue DOUBLE,
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255)
)
/*
	CALL t_oppo_rozrzuc('INIT', _IdnOper, 0, '', '');
	CALL t_oppo_rozrzuc('CALC', _IdnOper, 0, '', '');
	CALL t_oppo_rozrzuc('DROP', _IdnOper, 0, '', '');
*/
S_t_oppo_rozrzuc: BEGIN 
	DECLARE _SWaga, _SRValue, _Nadw DECIMAL(16,6);
	DECLARE _LasLP INTEGER;

	IF _MODE = 'INIT' THEN
		DROP TEMPORARY TABLE IF EXISTS `t_oppo_rozrzuc`;
		CREATE TEMPORARY TABLE `t_oppo_rozrzuc`
		SELECT 
			_VarInt(0) AS Lp,
			p.GUID,
			_VarDecimal(0) AS Waga,	
			_VarDecimal(0) AS RValue	--	recValue
		FROM `oppo_e` p
		WHERE
			p.IdnOper = _IdnOper
		;
	END IF; --	_MODE = 'INIT'

	IF _MODE = 'CALC' THEN
		
		DELETE FROM `t_oppo_rozrzuc` WHERE Waga = 0;
		
		SET @oppoLP = 0;
		UPDATE `t_oppo_rozrzuc`
		SET
			LP = _VarInt(@oppoLP := @oppoLP + 1)
		;
		SET _SWaga = IFNULL(_VarDecimal((SELECT SUM(Waga) FROM `t_oppo_rozrzuc`)), 0);
		-- SELECT _SValue, _SWaga;
		UPDATE `t_oppo_rozrzuc` t
		SET
			t.RValue = _Rnd2(IF(_SWaga = 0, 0, t.Waga*_SValue/_SWaga))
		;
		SELECT MAX(Lp), SUM(RValue) INTO _LasLP, _SRValue FROM `t_oppo_rozrzuc`;
		SET _Nadw = _SRValue - _SValue;
		UPDATE `t_oppo_rozrzuc`
		SET
			RValue = RValue - _Nadw
		WHERE
			LP = _LasLP
		;

	END IF; --	_MODE = 'CALC'
	
	IF _MODE = 'DROP' THEN
		DROP TEMPORARY TABLE IF EXISTS `t_oppo_rozrzuc`;
	END IF; --	_MODE = 'DROP'
	
END$$

/* ************************************************************************************************************************************************************************
	NIETYPOWE
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `VatTable_dla_wielostawkowcow`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `VatTable_dla_wielostawkowcow`(
	IN _MODE VARCHAR(250),
	IN _IdnOper VARCHAR(38),
	IN _Param_A VARCHAR(250),	
	IN _Param_B VARCHAR(250)	
)
/*
	VatTable_dla_wielostawkowcow 
	wołana np. dla BALTIMY. 
	1. Po edycji wolamy algorytm naliczajacy tabelkeVat - potem 
	2. w Delphi otwieramy dokument który ma już nie tylko właściwą tabelkę (której nie ruszamy juz) ale ma naliczone naglówkowe B, N i Vat! 
	3. Wołamy naliczanie rozrach i kończymy.
	Ale aby naliczyc tabelkę (p.1) musimy przeprowadzić dokument w świat E a czesem musimy dac ją też do edycji. 
	1.1 dokument w swiat E
		CALL VatTable_dla_wielostawkowcow('init', IdnOper, '', '');
	1.2 do edycji lub nie `opng_vat_e`
	1.3 powrt do świata N
		CALL VatTable_dla_wielostawkowcow('apply', IdnOper, '', '');
	
*/
BEGIN 
	IF _MODE = 'Init' THEN
		CALL opng_E_LetEdit('', _IdnOper, '', '', '', '');
		CALL ng_vat_e_build_from_po('', 'OP', _IdnOper, '', '');
		CALL opng_E_LetPost('', _IdnOper, '', '');
	END IF;	-- _MODE = 'Init'
	
	IF _MODE = 'apply' THEN
		CALL opng_E_LetApply('', _IdnOper, '', '');
		-- CALL opng_E_LetCancel('', _IdnOper, '', '');
		CALL opng_E_LetEnd('', _IdnOper, '', '');
	END IF;	-- _MODE = 'apply'

END$$


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

DELIMITER ;

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

CALL _Session_Refresh_Variables('', '', '');
CALL ht_init('');
SELECT * FROM kontrah WHERE dostawca = 1;
SET 
@IdnOper = 'PZ6',
@Rodzaj = 12
;
CALL ht_rodzaj_calc(1);
SET 
@KontrGUID = 'HODOWLA',
@_Tymczasowa = TRUE,
@G = ''
;

CALL opng_E_LetInsert('', @IdnOper, @Rodzaj, 0, @KontrGUID, 2, 2, @_Tymczasowa, 0, '', '', '', '', '', '');
SELECT @IdnOper, @G;

SET @G = '';
CALL oppo_e_Insert('IdnTowr', @G, @IdnOper, 'NESQ', 10, 4.14, '');
CALL oppo_e_LetInsert('IdnTowr', @G, @IdnOper, 'NESQ', 10, 4.14, '', '', '', '');
SET @G = '';
CALL oppo_e_Insert('IdnTowr', @G, @IdnOper, 'M580', 12, 2.5, '');
CALL oppo_e_LetInsert('IdnTowr', @G, @IdnOper, 'M580', 12, 2.5, '', '', '', '');
-- i jeszcze 'CUKIER'
DESC `oppo_corr`;

	CALL ng_vat_e_build_from_po('', 'ZM', @IdnNg, '', '');
CALL opng_E_LetPost('', @IdnOper, '', '');
CALL opng_E_LetApply('', @IdnOper, '', '');
	CALL opng_E_LetCancel('', @IdnOper, '', '');
CALL opng_E_LetEnd('', @IdnOper, '', '');

CALL opng_E_LetEdit('', @IdnOper, '', '', '', '');


SELECT * FROM opng WHERE GUID = @IdnOper; 
SELECT * FROM oppo WHERE IdnOper = @IdnOper; 
SELECT * FROM oppo_mag WHERE IdnOper = @IdnOper; 
SELECT * FROM opng_vat WHERE IdnOper = @IdnOper; 

SELECT * FROM opng_e WHERE GUID = @IdnOper; 
SELECT * FROM oppo_e WHERE IdnOper = @IdnOper; 
SELECT * FROM oppo_mag_e WHERE IdnOper = @IdnOper; 
SELECT * FROM opng_vat_e WHERE IdnOper = @IdnOper; 

SELECT @transact.KontrGUIDChanged, @session.HT.IR.Przepisz_katcol_kontrah_do_opng;
SELECT * FROM kontrah WHERE GUID = '{67F4D723-1F09-41C4-AF7C-1F3393C377AE}';





ZAM


CALL oppo_e_Insert('IdnTowr', @G, @IdnOper, 'M580', 12, 2.5, '');
CALL oppo_e_LetInsert('IdnTowr', @G, @IdnOper, 'M580', 12, 2.5, '', '', '', '');

SET @IdnNg = 'Z1';
CALL zmpo_e_LetInsert('IdnTowr', @G, @IdnNg, 'NESQ', 10, 4.14, '', '', '', '');
SET @G = '';
CALL zmpo_e_LetInsert('IdnTowr', @G, @IdnNg, 'M580', 12, 2.5, '', '', '', '');

CALL ht_vat_init('');
CALL ng_vat_e_build_from_po('', 'Z1', 'zmpo_e', TRUE);

SELECT @_SQLText;

		SELECT 
			Rodzaj, rodzaj_typ, przeliczenie_B_N 
		INTO 
			@ht.vat.Rodzaj, @ht.vat.Rodzaj_typ, @ht.vat.przeliczenie_B_N 
		FROM `zmng_e` n 
		WHERE 
			n.GUID = @IdnNg
		;

-- KOREKTA
CALL _Session_Refresh_Variables('', '', '');
CALL C_HT('', '', '', '');
CALL ht_init('');
CALL mag_delta_init('');
CALL ht_vat_init('');

SET 
	@IdnOper = '{42148332-C8B8-4193-9EC0-B0D51609B9CB}',
	@Rodzaj = 3
;

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/
