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

DROP PROCEDURE IF EXISTS `fr_ht_OPZM`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `fr_ht_OPZM`(
	IN _MODE VARCHAR(38),
	IN _GUID VARCHAR(38),
	IN _scenario VARCHAR(50),
	IN _translate VARCHAR(50),
	IN _Param_A VARCHAR(50), -- wykorzystywany do wywolania z ksef
	IN _Param_B VARCHAR(50),
	IN _Param_C VARCHAR(50),
	IN _Param_D VARCHAR(50)
	)
	
BEGIN
	DECLARE _SQLText TEXT;
    DECLARE _SQLText2 TEXT;
	DECLARE _lp2 TEXT; 
	DECLARE _zaliczka TEXT; 
	DECLARE _dorealizacji TEXT; 
	DECLARE _group_by TEXT; 
	DECLARE _podpisy TEXT; 
	DECLARE _cp INT(11); 

	DECLARE _PlatnikGUID VARCHAR(38);
	DECLARE _waluta INT(11);
	DECLARE _PlatnikIDN INT(11);
	DECLARE _rodzaj INT(11);
	DECLARE _status_obieg INT(11);
	DECLARE _nrdok VARCHAR(100);
	DECLARE _nazwadoc VARCHAR(100); 
	DECLARE _lang_id VARCHAR(5);
	DECLARE _SposobPlatnosci TEXT;

	DECLARE _BankNazwa VARCHAR(200); 
	DECLARE _BankPrefix VARCHAR(12); 
	DECLARE _Dynamiczne VARCHAR(1); 
	DECLARE _DomyslnyBank INT(11); 
	DECLARE _KontoBankowe TEXT; 
	DECLARE _BankOpisDodatkowy TEXT; 
	
	SET _SQLText = '', _SQLText2 = '', _lp2 = '', _zaliczka = '', _dorealizacji = '' , _group_by = '';
	
	SET group_concat_max_len = 1024*1024;
/*
	Procedura dla wydruków pozycji operacji i zamowien, ale wylacznie grupowanie internalne.
	Powinna zostac przeniesiona do fr_ht_OP.sql, ale komu sie chce...
	
	Dodany mod GRUPOWANIE_INTERNALNE_ZM. Po ustaleniu grup,reszta pol jest przeniesiona z fr_ht_zm2.

  CALL fr_ht_OPZM('GRUPOWANIE_INTERNALNE','%GUID%','','','','','','');
*/
  IF _MODE = 'GRUPOWANIE_INTERNALNE' THEN
	DROP TEMPORARY TABLE IF EXISTS `t_oppo`;
	CREATE TEMPORARY TABLE `t_oppo` LIKE oppo;
	ALTER TABLE t_oppo ADD INDEX grp_GUID(grp_GUID);

	INSERT INTO t_oppo
	SELECT * FROM oppo p
	WHERE (p.idnOper = _GUID) OR (p.idnWZ = _GUID);


	DROP TEMPORARY TABLE IF EXISTS `t_oppo_grp`;
	CREATE TEMPORARY TABLE `t_oppo_grp`
	SELECT
		IF(@IS.grp := (IFNULL(p.grp_GUID, '') != ''),  p.grp_GUID, p.GUID) AS GUID,
		IF(@IS.grp := (IFNULL(p.grp_GUID, '') != ''),  p.grp_GUID, p.GUID) AS GGUID,
		@IS.grp_Node := @IS.grp AND (p.grp_GUID = p.GUID) AS IS_Grp_Node,
		IF(@IS.grp, p.grp_GUID, '') AS grp_GUID,
		p.IdnTowr,
		p.towrsymb,
		-- p.towrnazwa,
		IF(IFNULL(p.TowrNazwa2, '') != '', p.TowrNazwa2, p.TowrNazwa) AS towrnazwa, -- to dla sevent - Czy zostawić to?????
		p.Jednostka,
		p.Ilosc,
		-- MAX(IF(@IS.grp, grp_TowrSymb, p.towrsymb)) AS towrsymb,
		-- MAX(IF(@IS.grp, grp_TowrNazwa, p.towrnazwa)) AS towrnazwa,
		-- IF(@IS.grp, grp_Ilosc, p.Ilosc) AS Ilosc,
		p.idnvat,
		SUM(WartNet) AS WartNet,
		SUM(WartNetWal) AS WartNetWal,

		IF((SELECT n.przeliczenie_B_N FROM opng n WHERE n.guid=p.idnoperfin LIMIT 1)=0 AND _scenario<>'STZTMGZM_FV_DEFAULT_GR',SUM(WartNet)*(SELECT v.value FROM v_erp_vat v WHERE  v.Id=p.idnvat LIMIT 1),SUM(WartVat) ) AS WartVat,
		-- SUM(WartVat) AS WartVat,
		IF((SELECT n.przeliczenie_B_N FROM opng n WHERE n.guid=p.idnoperfin LIMIT 1)=0 AND _scenario<>'STZTMGZM_FV_DEFAULT_GR',SUM(WartNet)+(SUM(WartNet)*(SELECT v.value FROM v_erp_vat v WHERE  v.Id=p.idnvat LIMIT 1)),SUM(WartBrt) ) AS WartBrt,
		-- SUM(WartBrt) AS WartBrt,
		IF((SELECT n.przeliczenie_B_N FROM opng n WHERE n.guid=p.idnoperfin LIMIT 1)=0 AND _scenario<>'STZTMGZM_FV_DEFAULT_GR',SUM(WartNetWal)+(SUM(WartNetWal)*(SELECT v.value FROM v_erp_vat v WHERE  v.Id=p.idnvat LIMIT 1)),SUM(WartBrtWal)  ) AS WartBrtWal,

		-- SUM(WartBrtWal) AS WartBrtWal,
		p.CenaNet,
		round(SUM(p.CenaNet*p.ilosc),2) AS wartnet_przed_rab,
		--	p.cenanetWal,
		SUM(WartNetWal)/p.Ilosc AS cenanetWal,
		p.CenaBrt,
		sum(p.waga) As waga
	FROM `t_oppo` p
	GROUP BY GGUID
	;

	ALTER TABLE `t_oppo_grp` ADD PRIMARY KEY GUID(`GUID`), ADD KEY grp_GUID(`grp_GUID`);
	ALTER TABLE `t_oppo_grp` MODIFY COLUMN towrnazwa VARCHAR(250);
	ALTER TABLE `t_oppo_grp` ADD COLUMN wagabrt DOUBLE(16,10);
	ALTER TABLE `t_oppo_grp` ADD COLUMN pcn VARCHAR(20);
	-- ALTER TABLE `t_oppo_grp` ADD COLUMN idnvat INT;
	-- ALTER TABLE `t_oppo_grp` ADD COLUMN WartVat DOUBLE(16,10);
	-- ALTER TABLE `t_oppo_grp` ADD COLUMN WartBrt DOUBLE(16,10);
	-- ALTER TABLE `t_oppo_grp` ADD COLUMN WartBrtWal DOUBLE(16,10);

	IF _GUID = '' THEN 
		TRUNCATE `t_oppo_grp`;
	END IF;
	UPDATE `t_oppo_grp` tp, `oppo` p
	SET
		tp.towrsymb = p.grp_TowrSymb,
		tp.towrnazwa = p.grp_TowrNazwa,
		tp.Ilosc = p.grp_Ilosc,
		tp.Jednostka = IFNULL(p.grp_Jednostka, tp.Jednostka),
		tp.IdnTowr = IF(@session.globals.Owner IN ('TRANSBUD'),p.IdnTowr, p.grp_IdnTowr )
	WHERE
		tp.grp_GUID != ''
	AND
	tp.GUID = p.GUID
	;

	UPDATE `t_oppo_grp` tp, TowrNg t
	SET
		tp.pcn = t.pcn
	WHERE
		tp.grp_GUID = '' AND tp.idntowr = t.GUID
	;

	UPDATE `t_oppo_grp` tp, oppo p, TowrNg t
	SET
		tp.pcn = t.pcn,
		tp.idnvat = p.idnvat -- podmiana stawki vat na vat pozycji grupy (a nie skladowej pierwszej, jak wczesniej)
	WHERE
		tp.grp_GUID <> '' AND p.GUID = tp.GGUID AND p.idntowr = t.GUID
	;

	UPDATE `t_oppo_grp` p SET
		WartVat = IF((SELECT n.przeliczenie_B_N FROM opng n WHERE n.guid= _GUID LIMIT 1)=0 AND _scenario<>'STZTMGZM_FV_DEFAULT_GR',(WartNet)*(SELECT v.value FROM v_erp_vat v WHERE  v.Id=p.idnvat LIMIT 1),(WartVat) ),
		WartBrt = IF((SELECT n.przeliczenie_B_N FROM opng n WHERE n.guid= _GUID LIMIT 1)=0 AND _scenario<>'STZTMGZM_FV_DEFAULT_GR',(WartNet)+((WartNet)*(SELECT v.value FROM v_erp_vat v WHERE  v.Id=p.idnvat LIMIT 1)),(WartBrt) ),
		WartBrtWal = IF((SELECT n.przeliczenie_B_N FROM opng n WHERE n.guid= _GUID LIMIT 1)=0 AND _scenario<>'STZTMGZM_FV_DEFAULT_GR',(WartNetWal)+((WartNetWal)*(SELECT v.value FROM v_erp_vat v WHERE  v.Id=p.idnvat LIMIT 1)),(WartBrtWal)  )
	;


	UPDATE t_oppo_grp tp
	SET
		tp.wagabrt = (select sum(P.waga+(P.ilosc*(T.opak_waga_papier + T.opak_waga_drewno + T.opak_waga_tw_sztuczne + T.opak_waga_metal))) from t_oppo P, TowrNg T
		where T.GUID = P.idntowr AND IF(P.grp_GUID <> '', P.grp_GUID = tp.GGUID, tp.GUID = P.GUID))
	;


	UPDATE `t_oppo_grp` tp
	SET
		tp.CenaNet = IF(tp.Ilosc != 0, tp.wartnet_przed_rab/tp.Ilosc, 0),
		tp.CenaBrt = IF(tp.Ilosc != 0, tp.WartBrt/tp.Ilosc, 0),
		tp.CenaNetWal = IF(tp.Ilosc != 0, tp.WartNetWal/tp.Ilosc, 0)
	WHERE
		tp.grp_GUID != ''
	;
	DROP TEMPORARY TABLE IF EXISTS `t_oppo_grp_prn`;
	CREATE TEMPORARY TABLE `t_oppo_grp_prn` LIKE `oppo_e`;
	ALTER TABLE `t_oppo_grp_prn` MODIFY COLUMN towrnazwa VARCHAR(250);
	INSERT INTO `t_oppo_grp_prn` SELECT o.* FROM `t_oppo_grp` tp, `oppo` o WHERE tp.GUID = o.GUID;

	ALTER TABLE `t_oppo_grp_prn` ADD COLUMN pcn VARCHAR(20);
	ALTER TABLE `t_oppo_grp_prn` ADD COLUMN wagabrt DOUBLE(16,10);

	UPDATE `t_oppo_grp_prn` p, `t_oppo_grp` tp
	SET
		p.towrsymb = tp.towrsymb,
		p.towrnazwa = tp.towrnazwa,
		p.Ilosc = tp.Ilosc,
		p.Jednostka = tp.Jednostka,
		p.IdnTowr = tp.IdnTowr,
		p.CenaNet = tp.CenaNet,
		p.CenaBrt = tp.CenaBrt,
		p.CenaNetWal = tp.CenaNetWal,
		p.WartNet = tp.WartNet,
		p.WartVat = tp.WartVat,
		p.WartBrt = tp.WartBrt,
		p.WartNetWal = tp.WartNetWal,
		p.WartBrtWal = tp.WartBrtWal,
		p.pcn = tp.pcn,
		p.waga = tp.waga,
		p.wagabrt = tp.wagabrt
	WHERE
		p.GUID = tp.GUID
	;

	-- DROP TEMPORARY TABLE IF EXISTS `t_oppo_grp`;
	
	IF _Param_A = '' THEN
		SELECT
			'grupowanie_internalne' AS grupowanie_internalne,
			P.GUID,
			P.IdnTowr,
			P.TowrSymb,
			-- P.TowrNazwa,
			IF(N.lang_id <> "pl", IFNULL(( SELECT tostr from lang_translations where to_lang=N.lang_id and object_name="TowrNg" and object_key=P.IdnTowr LIMIT 1), P.towrnazwa), P.towrnazwa)
			AS TowrNazwa,

			P.Ilosc,
			-- P.Jednostka,

			P.CenaNet,
			P.CenaBrt,
			P.CenaNetWal,
			P.WartNet,
			P.WartVat,
			P.WartBrt,
			P.WartNetWal,
			P.WartBrtWal,

			v.shortName AS VatStr,
			case when N.lang_id <> 'pl' then IFNULL((SELECT tostr FROM lang_translations  WHERE fromstr= v.shortname AND to_lang = N.lang_id),v.shortname)
			else v.shortname end AS idnVatStr,
			(P.grp_GUID != '') AS IS_Grp_Node,

			-- IF((J.Nazwa = '' OR ISNULL(J.Nazwa)), J.Nazwa, J.Nazwa) AS Jednostka,
			case when N.lang_id <> 'pl' then
			IF((J.Nazwa1 = '' or isnull(J.Nazwa1)), J.Nazwa, J.Nazwa1)
			else J.Nazwa END As Jednostka,

			J.precyzja AS JednostkaPrecyzja,
			IF(@session.globals.Owner = "TRANSBUD" AND P.kat9=1,'kg',JP.Nazwa) AS JednostkaPom,
			JP.precyzja AS JednostkaPomPrecyzja,
			W.Symbol AS WalutaStr,

			_VarStr(IF(T.nazwa=P.towrnazwa,
				IFNULL(( SELECT tostr FROM lang_translations WHERE to_lang='pl' AND object_name='TowrNg' AND object_key=P.IdnTowr LIMIT 1), P.towrnazwa),
				P.towrnazwa
			)) AS towrnazwa,
			P.cenanet, P.idntowr, P.wspolplatnosc, P.rabat, P.uwagi, P.uwagi2, P.waga_pozycji, P.towrnazwa2,

			P.waga,
			-- _Rnd2(P.waga*P.ilosc) AS waga,

			'0' AS Ilosc_Przelicznik,
			_VarStr(IF(P.GUID_dostawy <> '',
				(
					SELECT CONCAT(OD.nazwa,' ',zn.nrdokmag)
					FROM opng zn
					INNER JOIN oppo zo ON zn.guid=zo.idnoper
					LEFT JOIN operdoc OD ON OD.rodzaj=zn.rodzaj
					WHERE
						zo.guid=P.GUID_dostawy
				),
				'.'
			)) AS nrdokmag_zwrotu,
			N.waluta,
			_VarStr(IF(P.idnoper <> P.idnoperfin,
				(
					SELECT NG.nrdokmag FROM opng NG WHERE NG.guid=P.idnoper
				),
				N.nrdokmag
			)) AS nrdokmag,
			_VarStr(".") AS osobaGUID,
			_VarStr(".") AS osobaNazwiskoImie,
			T.lokalizacja1, T.lokalizacja2, T.lokalizacja3, T.lokalizacja4,
			P.ilosc*T.objetosc AS objetosc,
			T.objetosc AS objetosc_jedn,
			T.min_ord_quant,(P.cenabrt) AS cenabrt_przed_rab, _varDOUBLE(0.0) AS magTyp,
			P.kat0, P.kat1, P.kat2, P.kat3, P.kat4, P.kat5, P.kat6, P.kat7, P.kat8, P.kat9,
			/* IF(P.kat0 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat0 AND kc.typ=0 AND kc.colnr=1), "" ) AS katcol0Str,
			IF(P.kat1 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat1 AND kc.typ=0 AND kc.colnr=2), "" ) AS katcol1Str,
			IF(P.kat2 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat2 AND kc.typ=0 AND kc.colnr=3), "" ) AS katcol2Str,
			IF(P.kat3 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat3 AND kc.typ=0 AND kc.colnr=4), "" ) AS katcol3Str,
			IF(P.kat4 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat4 AND kc.typ=0 AND kc.colnr=5), "" ) AS katcol4Str,
			IF(P.kat5 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat5 AND kc.typ=1 AND kc.colnr=1), "" ) AS katcol5Str,
			IF(P.kat6 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat6 AND kc.typ=1 AND kc.colnr=2), "" ) AS katcol6Str,
			IF(P.kat7 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat7 AND kc.typ=1 AND kc.colnr=3), "" ) AS katcol7Str,
			IF(P.kat8 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat8 AND kc.typ=1 AND kc.colnr=4), "" ) AS katcol8Str,
			IF(P.kat9 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat9 AND kc.typ=1 AND kc.colnr=5), "" ) AS katcol9Str, */

			IF(P.kat0 > 0, (SELECT kc.valuex FROM v_kkn0 kc WHERE kc.klucz=P.kat0 AND kc.rok IN (0, @session.FK.AktRokObrach)), "" ) AS katcol0Str,
			IF(P.kat1 > 0, (SELECT kc.valuex FROM v_kkn1 kc WHERE kc.klucz=P.kat1 AND kc.rok IN (0, @session.FK.AktRokObrach)), "" ) AS katcol1Str,
			IF(P.kat2 > 0, (SELECT kc.valuex FROM v_kkn2 kc WHERE kc.klucz=P.kat2 AND kc.rok IN (0, @session.FK.AktRokObrach)), "" ) AS katcol2Str,
			IF(P.kat3 > 0, (SELECT kc.valuex FROM v_kkn3 kc WHERE kc.klucz=P.kat3 AND kc.rok IN (0, @session.FK.AktRokObrach)), "" ) AS katcol3Str,
			IF(P.kat4 > 0, (SELECT kc.valuex FROM v_kkn4 kc WHERE kc.klucz=P.kat4 AND kc.rok IN (0, @session.FK.AktRokObrach)), "" ) AS katcol4Str,
			IF(P.kat5 > 0, (SELECT IF(@session.globals.Owner = 'TRANSBUD',(CONCAT(kc.valuex,IF(descr<>'',CONCAT(' "',kc.descr,'"'),''))),
			kc.valuex) FROM katcols kc WHERE kc.klucz=P.kat5 AND kc.typ=1 AND kc.colnr=1), "" ) AS katcol5Str,
			-- IF(P.kat5 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat5 AND kc.typ=1 AND kc.colnr=1), "" ) AS katcol5Str,
			IF(P.kat6 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat6 AND kc.typ=1 AND kc.colnr=2), "" ) AS katcol6Str,
			IF(P.kat7 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat7 AND kc.typ=1 AND kc.colnr=3), "" ) AS katcol7Str,
			IF(P.kat8 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat8 AND kc.typ=1 AND kc.colnr=4), "" ) AS katcol8Str,
			IF(P.kat9 > 0, (SELECT kc.valuex FROM katcols kc WHERE kc.klucz=P.kat9 AND kc.typ=1 AND kc.colnr=5), "" ) AS katcol9Str,
			(SELECT symbol_edi FROM oferty WHERE N.kontrGUID=oferty.kontrguid AND P.idntowr=oferty.idntowr ) AS oferty_symbol_edi,
			P.idn,
			-- P.CenaNetWalzRab,
			P.CenaNetWal as CenaNetWalzRab,
			CONCAT(P.ilosc DIV T.opakowanie,"+",P.ilosc MOD T.opakowanie) AS opakowan, P.Lp,
			IFNULL(CONCAT(zp.lp," "),"1") AS zplp, P.datawystaw AS datawystaw_pozycji, P.cenamag, P.wartmag,
			P.GUID, P.usluga, P.kurs, P.info, P.info2, P.info3, P.info4, P.termin_waznosci AS terminrealizacji ,
			(P.cenabrt) AS cenabrt_przed_rab, T.Opis, T.waga AS wagatowaru, T.NazwaUProducenta, T.kod_kreskowy, T.kod_kreskowy1, T.kod_kreskowy2,
			(P.Ilosc/P.ilewopakowaniu) AS ileopakowan, P.ilewopakowaniu,
			T.akcyza,
			IF(@session.globals.Owner = 'TRANSBUD' AND DATABASE()= 'ht',(IF(P.kat5 > 0, (SELECT kc.param5 FROM katcols kc WHERE kc.klucz=P.kat5 AND kc.typ=1 AND kc.colnr=1), "" )),T.pcn ) AS pcn,
			P.pcn AS grp_pcn,
			T.podlega_akcyzie, T.symboludost, T.SymbolProducenta, T.dataprodukcji, T.nazwa_segment3, T.wyroznik,
			(((P.ilosc-1) DIV T.opakowanie_zbiorcze)+1) + _varDOUBLE(0.0) AS ilosc_palet,
			T.info as Tinfo, T.info2 as Tinfo2, T.info3 as Tinfo3, T.info4 as Tinfo4,
			_varDOUBLE(0.0) as inwnbo,
			_varDOUBLE(P.waga+(P.ilosc*(T.opak_waga_papier + T.opak_waga_drewno + T.opak_waga_tw_sztuczne + T.opak_waga_metal))) AS wagabrt,
			P.waga AS grp_waga,
			P.wagabrt AS grp_wagabrt,
			CONCAT(os.Imiona," ",os.Nazwisko) AS Osoba_ImieNazwisko, os.info1 AS Osoba_Info1, os.info2 AS Osoba_Info2, os.nazwa_dzialu, P.ilosc AS Ilosc, P.iloscdo AS IloscDo,
			IF(@session.globals.Owner = "TRANSBUD" AND P.kat9=1,_varDOUBLE(_Rnd(P.ilosc * 1000 / 1, JP.precyzja)),_varDOUBLE(_Rnd(P.ilosc * T.przelicznik_l / T.przelicznik_m, JP.precyzja)))  AS iloscPom,
			J.EDI_index, P.idnvat, P.Rodzaj_przeliczenia,
			zn.nrzamw, zn.nrzamwkontr, CAST(IFNULL(zn.datawystaw,N.datawystaw) AS CHAR) AS datazamowienia, P.wartnet AS wartnetpln, P.wartvat AS wartvat, P.wartnet AS wartnet,
			P.wartbrt AS wartbrt, P.cenabrt AS cenabrt, P.wartbrt/P.kurs AS wartbrtwal, P.wartvat/P.kurs AS wartvatwal, P.grupuj, P.GUIDKorPO, P.wartvat AS wartvatWal,
			P.wartnetWal AS wartnetWal, P.nrseryjny, P.oplata_produktowa, P.wartBrtWal AS BruttoWal, T.treenode, T.symbol, P.pkwiu, T.sww
		FROM `opng` N
		INNER JOIN `t_oppo_grp_prn` P
		-- INNER JOIN `oppo` P ON P.GUID = tp.GUID
		LEFT JOIN `v_erp_vat` v ON v.ID = P.IdnVat
		LEFT JOIN TowrNg T ON T.GUID = P.idntowr
		LEFT JOIN Jednostki J ON J.idn = P.Jednostka
		LEFT JOIN Jednostki JP ON JP.idn = T.jednostka_pom
		LEFT JOIN zmpo zp ON zp.GUID = P.GUIDzm
		LEFT JOIN zmng zn ON zn.GUID = zp.IdnNG
		LEFT JOIN waluty W ON W.idn = N.waluta
		LEFT JOIN osoby os ON os.GUID = P.osobaGUID
		WHERE
			(N.GUID = _GUID)
			AND IF(N.rodzaj IN (11,12,13) OR ((P.grp_GUID != '')), 1, T.opakowanie_zwrotne=0)
			AND P.usluga <> 2
			AND CASE WHEN @session.globals.Owner IN ('COMEX') AND _scenario IN  ('STZTMGZM_L_PACK')
									THEN (P.towrsymb not in ("U_DELIVERY"))
			ELSE TRUE END

		ORDER BY  P.Lp
		;
	END IF;
	
	-- DROP TEMPORARY TABLE IF EXISTS `t_oppo_grp_prn`;
	
  END IF;

	
  IF _MODE='' THEN
	
  SELECT
	* 
	from opng;
	
  END IF;


  -- tutaj nie ma zmian, ktore sa dla operacja dla Comexu (czyli pcn, waga, wagabrt dla grup)
  -- SET @session.globals.Owner = 'SIMEX';
  -- CALL fr_ht_OPZM('GRUPOWANIE_INTERNALNE_ZM','{F8EB0B0D-6E55-430E-9896-4C787CCCC54A}','','','','','','');
 IF _MODE = 'GRUPOWANIE_INTERNALNE_ZM'  THEN
  
 
  DROP TEMPORARY TABLE IF EXISTS `t_zmpo_grp`;
	CREATE TEMPORARY TABLE `t_zmpo_grp`
	SELECT
		IF(@IS.grp := (IFNULL(p.grp_GUID, '') != ''),  p.grp_GUID, p.GUID) AS GUID,
		IF(@IS.grp := (IFNULL(p.grp_GUID, '') != ''),  p.grp_GUID, p.GUID) AS GGUID,
		@IS.grp_Node := @IS.grp AND (p.grp_GUID = p.GUID) AS IS_Grp_Node,
		IF(@IS.grp, p.grp_GUID, '') AS grp_GUID,
		p.IdnTowr,
		p.towrsymb,
		IF(IFNULL(p.TowrNazwa2, '') != '', p.TowrNazwa2, p.TowrNazwa) AS towrnazwa,	
		p.Jednostka,
		p.Ilosc,
		 SUM(WartNet) AS WartNet,
		IF(  _scenario<>'STZTMGZM_FV_DEFAULT_GR',SUM(WartNet)*(SELECT v.value FROM v_erp_vat v WHERE  v.Id=p.idnvat LIMIT 1),SUM(WartVat) ) AS WartVat,
		
		IF( _scenario<>'STZTMGZM_FV_DEFAULT_GR',SUM(WartNet)+(SUM(WartNet)*(SELECT v.value FROM v_erp_vat v WHERE  v.Id=p.idnvat LIMIT 1)),SUM(WartBrt) ) AS WartBrt,
		
		SUM(WartNetWal) AS WartNetWal,
		IF( _scenario<>'STZTMGZM_FV_DEFAULT_GR',SUM(WartNetWal)+(SUM(WartNetWal)*(SELECT v.value FROM v_erp_vat v WHERE  v.Id=p.idnvat LIMIT 1)),SUM(WartBrtWal)  ) AS WartBrtWal,
		p.CenaNet,

		round(SUM(p.CenaNet*p.ilosc),2) AS wartnet_przed_rab,

	SUM(WartNetWal)/p.Ilosc AS cenanetWal,
	p.CenaBrt
	FROM `zmpo` p
	WHERE
		p.idnng = _GUID 
	GROUP BY GGUID;
  
	ALTER TABLE `t_zmpo_grp` ADD PRIMARY KEY GUID(`GUID`), ADD KEY grp_GUID(`grp_GUID`);
	ALTER TABLE `t_zmpo_grp` MODIFY COLUMN towrnazwa VARCHAR(250);
	
	IF _GUID = '' THEN 
	TRUNCATE `t_zmpo_grp`;
	END IF;
	UPDATE `t_zmpo_grp` tp, `zmpo` p
	SET
		tp.towrsymb = p.grp_TowrSymb,
		tp.towrnazwa = p.grp_TowrNazwa,
		tp.Ilosc = p.grp_Ilosc,
		tp.Jednostka = IFNULL(p.grp_Jednostka, tp.Jednostka),
		tp.IdnTowr = IF(@session.globals.Owner = 'TRANSBUD',p.IdnTowr, p.grp_IdnTowr )
	WHERE
		tp.grp_GUID != ''
	AND
	tp.GUID = p.GUID
	;
	UPDATE `t_zmpo_grp` tp
	SET
		tp.CenaNet = IF(tp.Ilosc != 0, tp.wartnet_przed_rab/tp.Ilosc, 0),
		tp.CenaBrt = IF(tp.Ilosc != 0, tp.WartBrt/tp.Ilosc, 0),
		tp.CenaNetWal = IF(tp.Ilosc != 0, tp.WartNetWal/tp.Ilosc, 0)
	WHERE
		tp.grp_GUID != ''
	;
	DROP TEMPORARY TABLE IF EXISTS `t_zmpo_grp_prn`;
	CREATE TEMPORARY TABLE `t_zmpo_grp_prn` LIKE `zmpo_e`;
	ALTER TABLE `t_zmpo_grp_prn` MODIFY COLUMN towrnazwa VARCHAR(250);
	INSERT INTO `t_zmpo_grp_prn` SELECT o.* FROM `t_zmpo_grp` tp, `zmpo` o WHERE tp.GUID = o.GUID;

	ALTER TABLE `t_zmpo_grp_prn` ADD COLUMN CenaNetWal DOUBLE(16,4);

	UPDATE `t_zmpo_grp_prn` p, `t_zmpo_grp` tp
	SET
		p.towrsymb = tp.towrsymb,
		p.towrnazwa = tp.towrnazwa,
		p.Ilosc = tp.Ilosc,
		p.Jednostka = tp.Jednostka,
		p.IdnTowr = tp.IdnTowr,
		p.CenaNet = tp.CenaNet,
		p.CenaBrt = tp.CenaBrt,
		p.CenaNetWal = tp.CenaNetWal,

		p.WartNet = tp.WartNet,
		p.WartVat = tp.WartVat,
		p.WartBrt = tp.WartBrt,
		p.WartNetWal = tp.WartNetWal,
		p.WartBrtWal = tp.WartBrtWal
	WHERE
		p.GUID = tp.GUID
	;
	DROP TEMPORARY TABLE IF EXISTS `t_zmpo_grp`;

	 SET _SQLText =	
			'
			SELECT 
				"fr_ht_ZM2_ZM_PO_gr10" as fr_ht_ZM2__ZM_PO_gr10,
				"." as nrdokmag_zwrotu,
				"0" as Ilosc_Przelicznik, 
				P.idn, 
				P.GUID, "." as tabela_kursow, T.min_ord_quant, P.transza_zamow,
				P.ilosc*T.objetosc as objetosc, T.objetosc as objetosc_jedn, T.lokalizacja1, T.lokalizacja2, T.lokalizacja3, T.lokalizacja4,
				P.info,P.info2, P.info3, P.info4,P.kat0, P.kat1, P.kat2, P.kat3, P.kat4, P.kat5, P.kat6, P.kat7, P.kat8, P.kat9, 
								
				IF(P.kat0 > 0, (select kc.valuex from v_kkn0 kc where kc.klucz=P.kat0 and rok in (0, #rok#) ), "" ) as katcol0Str, 
				IF(P.kat1 > 0, (select kc.valuex from v_kkn1 kc where kc.klucz=P.kat1 and rok in (0, #rok#) ), "" ) as katcol1Str, 
				IF(P.kat2 > 0, (select kc.valuex from v_kkn2 kc where kc.klucz=P.kat2 and rok in (0, #rok#) ), "" ) as katcol2Str, 
				IF(P.kat3 > 0, (select kc.valuex from v_kkn3 kc where kc.klucz=P.kat3 and rok in (0, #rok#) ), "" ) as katcol3Str, 
				IF(P.kat4 > 0, (select kc.valuex from v_kkn4 kc where kc.klucz=P.kat4 and rok in (0, #rok#) ), "" ) as katcol4Str, 
				
				IF(P.kat5 > 0, (select kc.valuex from katcols kc where kc.klucz=P.kat5 and kc.typ=1 and kc.colnr=1 and rok in (0, #rok#)), "" ) as katcol5Str, 
				IF(P.kat6 > 0, (select kc.valuex from katcols kc where kc.klucz=P.kat6 and kc.typ=1 and kc.colnr=2 and rok in (0, #rok#)), "" ) as katcol6Str, 
				IF(P.kat7 > 0, (select kc.valuex from katcols kc where kc.klucz=P.kat7 and kc.typ=1 and kc.colnr=3 and rok in (0, #rok#)), "" ) as katcol7Str, 
				IF(P.kat8 > 0, (select kc.valuex from katcols kc where kc.klucz=P.kat8 and kc.typ=1 and kc.colnr=4 and rok in (0, #rok#)), "" ) as katcol8Str, 
				IF(P.kat9 > 0, (select kc.valuex from katcols kc where kc.klucz=P.kat9 and kc.typ=1 and kc.colnr=5 and rok in (0, #rok#)), "" ) as katcol9Str, 
			
			
				(select symbol_edi from oferty WHERE N.kontrGUID=oferty.kontrguid and P.idntowr=oferty.idntowr) as oferty_symbol_edi,
				(select symbol from oferty WHERE N.kontrGUID=oferty.kontrguid and P.idntowr=oferty.idntowr) as oferty_symbol,
				(select nazwa from oferty WHERE N.kontrGUID=oferty.kontrguid and P.idntowr=oferty.idntowr) as oferty_nazwa,
				(select zerod from zero) + P.magTyp as magTyp, 
				-- (select zerod from zero) as CenaNetWalzRab,
				_Rnd(P.wartnetwal/P.ilosc, #cp#) as CenaNetWalzRab,
				IF(@session.globals.Owner = "ASTE", ROUND(cenanet*(1-P.rabat/100),4), _Rnd2(P.wartnetwal/P.ilosc)) AS cenanetwal, 
				concat(P.ilosc div T.opakowanie,"+",P.ilosc mod T.opakowanie) as opakowan, 
				"." as nrdokmag,
				_VarINT(N.waluta) as waluta, _varDOUBLE(0.0) as inwnbo,
				"." as nrseryjny, 
				P.uwagi, P.uwagi2 as uwagi2, 
				"." as towrnazwa2, 
				P.terminrealizacji, 
				P.osobaGUID as osobaGUID, 
				
				N.datawystaw as datawystaw_pozycji, -- np. data wystawienia wz <> od daty wyst. FV
				CONCAT(O.Imiona," ",O.Nazwisko) as osobaNazwiskoImie, CAST(N.datawystaw  as char) as datazamowienia, 
				W.Symbol AS WalutaStr, 
				IFNULL(concat(P.lp," "),"1") as zplp, 
				P.Lp, 
				P.cenanet as cenamag, 
				P.wartnet as wartmag, 
				P.wartnet,  P.wartvat, P.wartbrt,
				P.wartnetwal, _Rnd2(P.wartvat/P.kurs) as wartvatwal, P.wartbrtwal,
				P.wartBrtWal as BruttoWal,
				-- if(P.wartvat=0,P.wartnetwal,P.wartbrt/P.kurs) as wartbrtwal, 
				-- if(P.wartvat=0,P.wartnet,P.wartbrt/P.kurs) as wartbrt, --  < kontynuacja zniesmaczonego Apro ;) <- wartvatwal dodano kurs aby podawalo w walucie
								
				(P.cenabrt) as cenabrt_przed_rab, 
				(P.wartbrt/P.ilosc) as cenabrt, 
				(P.wartnet/P.kurs) as wartnetpln, 
				P.usluga, 
				P.kurs, 
				T.NazwaUProducenta, 
				T.kod_kreskowy,  T.kod_kreskowy1, T.kod_kreskowy2,
				T.Opis, 
				T.waga as wagatowaru, 
				T.info as Tinfo, T.info2 as Tinfo2, T.info3 as Tinfo3, T.info4 as Tinfo4, 
				(P.Ilosc/P.ilewopakowaniu) AS ileopakowan, 

				(((P.ilosc-1) div T.opakowanie_zbiorcze)+1)+(select zerod from zero) as ilosc_palet, 
				(P.waga+(((P.ilosc-1) div T.opakowanie_zbiorcze)+1) * 20)+(select zerod from zero) as wagabrt, 
			
				P.oplata_produktowa, 
				P.ilewopakowaniu, 
				J.EDI_index, 
				T.akcyza, T.pcn, T.podlega_akcyzie, 
				T.symboludost, T.SymbolProducenta, T.dataprodukcji, T.nazwa_segment3, T.wyroznik, T.idn as towr_idn,
				P.towrsymb, 
				IF(T.nazwa=P.towrnazwa, IFNULL(( SELECT tostr from lang_translations where to_lang="#LANG#" and object_name="TowrNg" and object_key=P.IdnTowr LIMIT 1), P.towrnazwa), P.towrnazwa) AS towrnazwaTranslate, 

				-- IF(N.lang_id<>"pl", IF(T.nazwa=P.towrnazwa, IFNULL(( SELECT tostr from lang_translations where to_lang="#LANG#" and object_name="TowrNg" and object_key=P.IdnTowr LIMIT 1), P.towrnazwa), P.towrnazwa), P.towrnazwa) AS towrnazwa,

				-- dla towarow grupowanych bierzemy nazwe grupy w simexie
				case when @session.globals.Owner = "SIMEX" AND P.grp_TowrNazwa <> "" then
				P.grp_TowrNazwa
				else
				IF(N.lang_id <> "pl", IFNULL(( SELECT tostr from lang_translations where to_lang=N.lang_id and object_name="TowrNg" and object_key=P.IdnTowr LIMIT 1), P.towrnazwa), P.towrnazwa)
				END AS towrnazwa,

				P.towrnazwa AS towrnazwa_org,
				P.cenanet, P.cenanet as CenaJednostkowa, 
				P.idntowr, 
				P.wspolplatnosc, 
				P.rabat, 
				P.waga,
				P.waga AS waga_pozycji,
				P.ilosc As Ilosc, P.iloscdo As IloscDo, P.zrealizowano,
				P.ilosc_pierwotna AS ilosc_pierwotnaZam,
				#ilosc# AS Ilosc2, 
				-- IF((J.Nazwa#nr# ="" or isnull(J.Nazwa#nr#)), J.Nazwa, J.Nazwa#nr#) As Jednostka, 
				case when N.lang_id <> "pl" then
					IF((J.Nazwa1 = "" or isnull(J.Nazwa1)), J.Nazwa, J.Nazwa1) 
					else J.Nazwa END As Jednostka, 
				J.precyzja as JednostkaPrecyzja, 
				IFNULL(IF((JP.Nazwa ='''' or isnull(JP.Nazwa)), JP.Nazwa, JP.Nazwa),"") As JednostkaPom, JP.precyzja as JednostkaPomPrecyzja, 
				--  _varDOUBLE(_Rnd2(P.ilosc * T.przelicznik_l / T.przelicznik_m)) as iloscPom, 
				_varDOUBLE(_Rnd(P.ilosc * T.przelicznik_l / T.przelicznik_m, JP.precyzja)) as iloscPom,
				_varDOUBLE(_Rnd2(P.wartnetwal/(_Rnd(P.ilosc * T.przelicznik_l / T.przelicznik_m, JP.precyzja)))) as cenaPom,
				P.idnvat, vat.shortname AS idnVatStr,
				P.Rodzaj_przeliczenia, N.nrzamw, N.nrzamwkontr, 
				P.Lp as grupuj,
				_VarInt(#lp2#) as lp2,
				LEFT(".",38) as GUIDKorPO, 
				Concat(os.Imiona," ",os.Nazwisko) as Osoba_ImieNazwisko, 
				os.info1 as Osoba_Info1, 
				os.info2 as Osoba_Info2, 
				T.treenode, T.symbol, T.pkwiu, T.sww,
				IF(rn.nazwa is null,"",concat("Receptura: ",rn.nazwa)) as nazwa_receptury,
				P.CzasOczekiwania,  
				CZ.DisplayValue as CzasOczekiwaniaStr,
				J.idn as JednostkaIdn,
				_VarStr(nd.Nazwa) AS AreaNazwa,
				IF(@session.globals.Owner = "ASTE", IF(J.Nazwa = "", "", J.Nazwa), IF(J.Nazwa = "", "", Concat("/",J.Nazwa))) As Jednostka2, 
				IF(@session.globals.Owner = "ASTE", IF(J.Nazwa = "", "", J.Nazwa), IF(J.Nazwa = "", "", Concat("/",J.Nazwa))) As JednostkaStr2,
				kon.symbol AS Nazwa_Dostawcy, 
				-- T.idn as Towr_IDN,
				T.producent as producentT,
				ifnull(P.komentarz,"") as komentarz 
			FROM zmng N
			inner join t_zmpo_grp_prn P
			LEFT JOIN osoby O ON O.GUID=P.osobaGUID 
			LEFT JOIN TowrNg T ON T.GUID = P.idntowr 
			LEFT JOIN Jednostki J ON J.idn = P.jednostka 
			LEFT JOIN Jednostki JP ON JP.idn = T.jednostka_pom 
			LEFT JOIN waluty W ON W.idn = N.waluta 
			LEFT JOIN osoby os ON os.GUID = P.osobaGUID
			LEFT JOIN rcng rn ON rn.GUID = P.recepturaGUID
			LEFT JOIN v_erp_vat vat ON vat.ID = P.idnvat
			LEFT JOIN erp_area_nodes nd ON nd.GUID = P.areaGUID AND nd.deleted = 0
			LEFT JOIN slowniki_pierwotne CZ on CZ.Slownik_GUID = "CZAS_OCZEK_ZAM" and CZ.Value=P.CzasOczekiwania
			LEFT JOIN kontrah kon ON kon.GUID=T.dostawcaGUID 
			WHERE 
				-- N.idnNg="#GUID#"  
				N.GUID="#GUID#"  
				and N.wersja=P.Wersja AND (N.transza_zamow #transza#) 
				and IF(N.rodzaj in (28) or (@session.globals.Owner IN ("JARZEBINSCY") AND N.rodzaj=27), true, ifnull(T.opakowanie_zwrotne,0)=0) 
				and #zaliczka#
				and #dorealizacji#
				#transza_zamow#
			#ORDER#
			';	
		  SET _lp2 = '0';	

		  SET _zaliczka = 
				CASE WHEN @session.globals.Owner IN ('PBUCH') AND @rodzaj IN (27,52) THEN 'T.wyroznik <> "ZAL"'
						 WHEN @session.globals.Owner IN ('PLISZKA') AND @rodzaj IN (27,52) AND _scenario = 'STZTMGZM_PROFORMA' THEN '(T.usluga <> 8)' 
						 WHEN @session.globals.Owner IN ('HYDROMEGA') AND @rodzaj IN (27) AND _scenario = 'STZTMGZM_PROFORMA_ZALICZKOWA1' THEN '(T.usluga = 8 and P.wartnet > 0)'
						 WHEN @session.globals.Owner IN ('MAXFORM') AND @rodzaj IN (27) AND _scenario IN ('STZTMGZM_PROFORMA_ZALICZKOWA1','STZTMGZM_PROFORMA_ZALICZKOWA2') 
									THEN '(T.usluga = 8 and P.wartnet > 0)'
						 WHEN @session.globals.Owner IN ('HYDROMEGA') AND @rodzaj IN (27) AND _scenario IN 
							('STZTMGZM_ZAMOWIENIEMI','STZTMGZM_ZAMOWIENIEMI_EN', 'STZTMGZM_ZAMOWIENIE', 'STZTMGZM_ZAMOWIENIE_ZLEC') THEN '(T.usluga not in (8,9))'
						WHEN @session.globals.Owner IN ('HYDROMEGA') AND @rodzaj IN (27) AND _scenario IN 
							('STZTMGZM_PROFORMA_ZALICZKOWA2') THEN '(T.usluga not in (8,9) AND NOT (T.usluga=1 AND T.wyroznik = "CER") )'
						WHEN @session.globals.Owner IN ('KONKOL') AND _scenario IN ('STZTMGZM_ZAMOWIENIE_WZ','STZTMGZM_ZAMOWIENIE_ZM') THEN 'P.ilosc > 0'
						ELSE TRUE END;
		  
		  SET _dorealizacji = IF(@session.globals.Owner IN ('AXIS','IZOHAN') AND @rodzaj IN (27,52) AND _scenario ='STZTMGZM_ZAMOWIENIE_DZR' ,'NOT (P.zrealizowano = P.ilosc)',TRUE);
		  
		  SET _group_by = 
				CASE WHEN @session.globals.Owner IN ('HYDROMEGA') THEN 'GROUP BY  P.idntowr, P.cenanet, P.rabat , P.idnvat, P.terminrealizacji'
					ELSE 'GROUP BY P.idntowr, P.cenanet, P.rabat , P.idnvat' 
				END;
		  
		  SET _cp = (SELECT ValueI FROM IReg WHERE idkey='CenyPrecision' LIMIT 1);
		  SET @test = _cp;

			SET _SQLText =	REPLACE(_SQLText, '#GUID#', _GUID);
			SET _SQLText =	REPLACE(_SQLText, '#nr#', '');
			SET _SQLText =	REPLACE(_SQLText, '#LANG#', IFNULL((SELECT lang_id FROM zmng WHERE guid=_GUID LIMIT 1),'pl'));

			IF _scenario IN ('STZTMGZM_ZAMOWIENIE_WZ','STZTMGZM_ZAMOWIENIE_ZM') THEN
				SET _SQLText =	REPLACE(_SQLText, '#transza#', ' >= 0');
			ELSE
				SET _SQLText =	REPLACE(_SQLText, '#transza#', ' = 0');
			END IF;
			
			
			SET _SQLText =	REPLACE(_SQLText, '#transza_zamow#', IF(IFNULL(_Param_B,'')<>'' AND _scenario NOT IN ('STZTMGZM_ZAMOWIENIE_WZ','STZTMGZM_ZAMOWIENIE_ZM')
																,CONCAT(' and P.transza_zamow = ',IFNULL(_Param_B,0)),''));
			SET _SQLText =	REPLACE(_SQLText, '#lp2#', _lp2);
			SET _SQLText =	REPLACE(_SQLText, '#zaliczka#', _zaliczka);
			SET _SQLText =	REPLACE(_SQLText, '#dorealizacji#', _dorealizacji);
			SET _SQLText =	REPLACE(_SQLText, '#rok#', IFNULL(@session.FK.AktRokObrach, YEAR(CURRENT_DATE)));
			SET _SQLText =	REPLACE(_SQLText, '#GROUP_BY#', _group_by);
			SET _SQLText =	REPLACE(_SQLText, '#cp#', _cp);
			
			
			
			SET _SQLText =	REPLACE(_SQLText, '#ilosc#', 
				  CASE WHEN @session.globals.Owner IN ('AXIS','IZOHAN') AND @rodzaj IN (27,52) AND _scenario ='STZTMGZM_ZAMOWIENIE_DZR' THEN 'P.ilosc - P.zrealizowano'
						 ELSE 'P.ilosc' END
			);		

			
			SET _SQLText = REPLACE(_SQLText, '#ORDER#', 
				CASE WHEN @session.globals.Owner = 'KONKOL' AND _scenario IN ('STZTMGZM_ZAMOWIENIE_WZ','STZTMGZM_ZAMOWIENIE_ZM') THEN 'ORDER BY towrsymb'
						 WHEN @session.globals.Owner IN ('IZOHAN') THEN 'ORDER BY transza_zamow, lp2, P.Lp'
						 
						 WHEN @session.globals.Owner IN ('MAXFORM') AND @rodzaj IN (27) AND _scenario = 'STZTMGZM_PROFORMA_ZALICZKOWA2' THEN 'ORDER BY P.Lp LIMIT 1'
						 
						 WHEN @session.globals.Owner IN ('BYSEWO') AND _scenario IN ('STZTMGZM_PROFORMA') THEN 'ORDER BY P.idn'

						 WHEN _Param_D <> '' THEN CONCAT('ORDER BY ',_Param_D)
						 WHEN _Param_D = '' THEN 'ORDER BY P.transza_zamow, P.Lp'
                END
			);		
			
			
			SET @nowy_naglowek = 'nie';
			IF _zaliczka <> TRUE OR _dorealizacji <> TRUE THEN
				DROP TABLE IF EXISTS temp_poz01;
				SET _SQLText2 = CONCAT('create temporary table temp_poz01 ', _SQLText);
				CALL _ExecuteCmd(_SQLText2, @Error);
				SET @nowy_naglowek = 'tak';
				SET @_SQLText2 =	_SQLText2;
			END IF;
			
			SET @_SQLText =	_SQLText;
 			CALL _ExecuteCmd(_SQLText, @Error);	
	
  END IF;
	
END$$

DELIMITER ;
