 DELIMITER $$

DROP PROCEDURE IF EXISTS `ht_interwencje`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_interwencje`(
	IN _MODE VARCHAR(150),
	IN _NaDzien VARCHAR(10),
	IN _Param_A VARCHAR(50), -- podajemy baze/firme - SEC lub MS
	IN _Param_B VARCHAR(50),
	IN _Param_C VARCHAR(50),
	IN _Param_D VARCHAR(50)
)
BEGIN
  DECLARE _S TEXT;
	DECLARE _okres VARCHAR(6);

/*
 DROP TABLE security_interwencje;
CREATE TABLE security_interwencje (
  `data_zdarzenia` DATETIME NOT NULL,
  `id_zdarzenia` VARCHAR(23) DEFAULT NULL,
  `kryptonim` VARCHAR(255) NOT NULL,
  `kategoria` VARCHAR(255) NOT NULL,
  `typ` VARCHAR(255) DEFAULT NULL,
  `przyjazd_patrolu` DATETIME DEFAULT NULL,
  `przyczyna` VARCHAR(255) DEFAULT NULL,
  `status1` INT(11) NOT NULL DEFAULT '0',
  `obiektguid` VARCHAR(38) DEFAULT NULL,
  KEY data_zdarzenia (data_zdarzenia),
  KEY id_zdarzenia (id_zdarzenia),
  KEY kryptonim (kryptonim),
  KEY status1 (status1)
) DEFAULT CHARSET=cp1250;
*/
/*
CALL ht_interwencje('INSERT_INTERWENCJE','','','','','');
Ta sekcja dodaje do tabeli sec.security_interwencje dane z podlaczonej tabeli z inego systemu. Oraz uzupelnia guid  obiektu, na razie dla jednej bazy, ale docelowo bedzie sprawdzala wszystkie bazy. Chyba ze tabela obektow stanie sie wspolna dla obu firm.
*/


-- w interwencjach rozliczamy poprzedni miesiac, terminy realizacji zamowien sa z aktualnego miesiaca!!!
-- dlatego podajemy date z miesiaca aktualnego
	IF _NaDzien = '' THEN 
		SET _NaDzien = Current_Date();
	END IF;

	SET @OdDnia = _varstr(CONCAT(LEFT(_NaDzien,8),'01')), @DoDnia = _varstr(LAST_DAY(_NaDzien));
	SET _okres = REPLACE(LEFT(ADDDATE(_NaDzien, INTERVAL -1 MONTH),7),'-','');
	SET @OdDnia2 = ADDDATE(@OdDnia, INTERVAL -1 MONTH), @DoDnia2 = ADDDATE(@DoDnia, INTERVAL -1 MONTH); -- potrzebne dla interwencji z pop. miesiaca


IF _MODE = 'INSERT_INTERWENCJE' THEN

	/* ten import juz jest nieaktulany, jest nowe zasilianie danymi przez api - RL wie więcej
	INSERT INTO sec.security_interwencje (data_zdarzenia, id_zdarzenia, kryptonim, kategoria, typ, przyjazd_patrolu, przyczyna)
	SELECT * 
	FROM sec.navo_export
	WHERE DATE(data_zdarzenia) >= '2018-01-01'
	AND CONCAT(data_zdarzenia,id_zdarzenia) NOT IN (SELECT CONCAT(data_zdarzenia,id_zdarzenia) FROM sec.security_interwencje);
*/

 -- uzupelnianie guid obiektu na podstawie symbol guidu do kolumny kryptonim
 -- czasami sa takie dane, HGW dlaczego
	UPDATE sec.security_interwencje i, sec.erp_area_nodes e
	SET i.obiektguid = e.guid
	WHERE e.symbol = i.kryptonim AND i.obiektguid IS NULL;

	UPDATE sec.security_interwencje i, sec.erp_area_nodes e
	SET i.obiektguid2 = e.guid
	WHERE e.symbol = i.kryptonim AND i.obiektguid2 IS NULL -- AND e.param1 = 'I'
	AND DATE(i.data_zdarzenia) >= '2018-12-01'	
	;

	-- uzupelnianie guid obiektu na podstawie wrzuconego guidu do kolumny kryptonim
 UPDATE sec.security_interwencje i, sec.erp_area_nodes e
	SET i.obiektguid = e.guid
	WHERE e.guid = i.kryptonim AND i.obiektguid IS NULL;

	UPDATE sec.security_interwencje i, sec.erp_area_nodes e
	SET i.obiektguid2 = e.guid
	WHERE e.guid = i.kryptonim AND i.obiektguid2 IS NULL -- AND e.param1 = 'I'
	AND DATE(i.data_zdarzenia) >= '2025-01-01';

/*
	UPDATE sec.security_interwencje i, sec.erp_area_nodes e
	SET i.obiektguid = e.guid
	WHERE e.symbol = i.kryptonim AND i.obiektguid IS NULL;
*/

END IF; -- MODE 'INSERT_INTERWENCJE'


-- CALL ht_interwencje('ROZLICZENIE_INTERWENCJI','2019-02-07','','','','');
-- CALL ht_interwencje('ROZLICZENIE_INTERWENCJI','2019-02-07','MS','','','');
-- rozliczenie interwencji w zamowieniach
-- UPDATE sec.security_interwencje i SET status1=1 WHERE data_zdarzenia<'2018-11-01'

IF _MODE = 'ROZLICZENIE_INTERWENCJI' THEN
	-- zerowanie interwencji hurtem, dla wszystkich naglowkow z okresu
	UPDATE zmpo p, zmng n
	SET p.ilosc = 0, p.wartnet = 0, wartvat = 0, wartbrt = 0, wartnetwal = 0, wartBrtWal = 0,
			p.uwagi = 'Brak interwencji'
	WHERE n.guid = p.idnng AND n.deleted=0 AND p.towrsymb IN ('INTERWENCJE','INTERWENCJE_ODW_OB')
		AND n.terminrealizacji>= @OdDnia AND n.terminrealizacji<= @DoDnia
	;

	DROP TABLE IF EXISTS t0_int;
	CREATE TEMPORARY TABLE t0_int
		SELECT i.obiektguid, COUNT(i.obiektguid) AS liczba_interwencji, 
		GROUP_CONCAT(data_zdarzenia,' ',typ,' ',IFNULL(przyczyna,'') ORDER BY data_zdarzenia SEPARATOR '\n') AS opis,
		e.kontrguid,
		(SELECT p.guid FROM zmpo p, zmng n WHERE n.guid = p.idnng AND n.deleted=0 AND i.obiektguid = p.areaguid 
		AND p.towrsymb IN ('INTERWENCJE','INTERWENCJE_ODW_OB') AND p.terminrealizacji>= @OdDnia AND p.terminrealizacji<= @DoDnia
		LIMIT 1) AS guid
		FROM  sec.security_interwencje i
		INNER JOIN erp_area_nodes e ON i.obiektguid2 = e.guid
		INNER JOIN kontrah k ON k.guid = e.kontrguid
		WHERE i.obiektguid IS NOT NULL AND IF(_Param_A='MS',RIGHT(k.symbol,2)='MS',RIGHT(k.symbol,2)<>'MS') 
		AND DATE(i.data_zdarzenia) >= @OdDnia2 AND DATE(i.data_zdarzenia) <= @DoDnia2
		AND i.status1 = 0
		-- AND e.param1 = 'I'
		GROUP BY i.obiektguid;

		ALTER TABLE t0_int ADD INDEX guid(guid), ADD INDEX obiektguid(obiektguid), ADD INDEX kontrguid(kontrguid);
		ALTER TABLE t0_int ADD COLUMN cenanet DOUBLE(16,4);

		UPDATE zmpo p, t0_int t
		SET p.ilosc_pierwotna = liczba_interwencji,
		p.ilosc = if(liczba_interwencji - p.zwrot_platny < 0,0,liczba_interwencji - p.zwrot_platny),
		-- p.uwagi = t.opis -- wstawic na koncu "uwzgledniono gratisy w liczbie: "
		p.uwagi = CONCAT(t.opis, IF(p.zwrot_platny>0,CONCAT('\nUwzgledniono gratisy w liczbie: ',p.zwrot_platny),''))
		WHERE p.guid = t.guid
		;

		UPDATE zmpo p, t0_int t SET
			p.wartnet    = _Rnd2(p.cenanet * p.ilosc),
			p.wartnetwal = _Rnd2(p.cenanet * p.ilosc),
			p.wartvat    = _Rnd2(p.cenanet * p.ilosc * 0.23),
			p.wartbrt    = _Rnd2(p.cenanet * p.ilosc * 1.23),
			p.cenabrt    = _Rnd2(p.cenanet * 1.23),
			p.wartbrtwal = _Rnd2(p.cenanet * p.ilosc * 1.23)
		WHERE p.guid = t.guid
		;

		-- sekcja dopisujaca zamowiania, jezeli sa interwencje, do ktorych nie ma zamowienia permanentnego na dany okres
		-- najpierw trzeba ustalic cene uslugi, jezeli sie da
		UPDATE t0_int t, zmpo p, zmng n
		SET t.cenanet = p.cenanet
		WHERE n.guid = p.idnng AND p.permanentne = 1 AND t.obiektguid = p.areaguid AND n.deleted = 0 AND p.towrsymb IN ('INTERWENCJE','INTERWENCJE_ODW_OB')
		AND t.guid IS NULL
		;
		
		UPDATE t0_int t SET cenanet=0 WHERE cenanet IS NULL;


	INSERT IGNORE INTO zmng (GUID, kontrGUID, kontrsymbol, nrzamw, rodzaj, rodzaj2, idnmagazyn, MagazynWys, przeliczenie_B_N, 
			datawystaw, datawplywu, terminrealizacji, ugrpGUID, uwagi,
			netto, nettowal, brutto, bruttowal,
			zamwpermn, calc_ver, zrealizowane, ilepoz,
			Create_At)

	SELECT DISTINCT
	CONCAT('IA_',MD5(concat(t.kontrguid,@OdDnia))) AS GUID,
	k.GUID AS kontrGUID, 
	k.symbol AS kontrsymbol,
	'AUTO' AS nrzamw,	
	27 AS rodzaj, 
	1 AS rodzaj1, -- k.rodzaj2,        #rodzaj dokumentu realizujacego zamowienie
		1 AS idnmagazyn,
		1 AS MagazynWys,
		0 AS przeliczenie_B_N,
		@OdDnia AS data1, @OdDnia AS data2,
		@DoDnia AS terminrealizacji, 
		'ALL' AS ugrpguid,
		CONCAT('Automat-brak zam. perm. ',@OdDnia) AS uwagi,
		_Rnd2(cenanet * sum(liczba_interwencji)), _Rnd2(cenanet * sum(liczba_interwencji)), 
		_Rnd2(cenanet * sum(liczba_interwencji) * 1.23), _Rnd2(cenanet * sum(liczba_interwencji) * 1.23),
		0,4,0,1 as ilepoz,
		NOW()
		FROM t0_int t 
		INNER JOIN kontrah k ON k.guid = t.kontrguid
		WHERE t.guid IS NULL
		GROUP BY t.kontrGUID
		;

	SELECT guid, symbol, nazwa, jednostka, vat
	INTO @towguid, @towsymbol, @townazwa, @towjednostka, @towvat
	FROM TowrNg WHERE symbol='INTERWENCJE'
	;


	SELECT guid, symbol, nazwa, jednostka, vat
	INTO @towguid2, @towsymbol2, @townazwa2, @towjednostka2, @towvat2
	FROM TowrNg WHERE symbol='INTERWENCJE_ODW_OB'
	;

	
	INSERT IGNORE INTO zmpo 
	(GUID, idnNG, idntowr, ilosc, rodzaj, towrsymb, towrnazwa, jednostka,idnvat, usluga,
	cenanet, wartnet, wartnetwal, wartvat, wartbrt, cenabrt, wartbrtwal, 
	zwrot_platny, terminrealizacji, areaguid, uwagi, permanentne, idnmagazyn, MagazynWys, calc_ver)

	SELECT CONCAT('IAP_',MD5(concat(t.kontrguid,t.obiektguid,@OdDnia))), CONCAT('IA_',MD5(concat(t.kontrguid,@OdDnia))),
	IF(t.kontrguid='{DADC8870-6C38-4DDD-AB1E-496E31446244}',@towguid2,@towguid) AS idntowr,
	sum(liczba_interwencji) AS ilosc,
	27,
	IF(t.kontrguid='{DADC8870-6C38-4DDD-AB1E-496E31446244}',@towsymbol2,@towsymbol) AS towsymbol,
	@townazwa, @towjednostka, 
	IF(t.kontrguid='{DADC8870-6C38-4DDD-AB1E-496E31446244}',@towvat2,@towvat) AS towvat,
	1 as usluga,
	_Rnd2(t.cenanet),_Rnd2(cenanet * sum(liczba_interwencji)), _Rnd2(cenanet * sum(liczba_interwencji)), _Rnd2(t.cenanet * sum(liczba_interwencji) * 0.23), _Rnd2(cenanet * sum(liczba_interwencji) * 1.23), _Rnd2(t.cenanet * 1.23), _Rnd2(cenanet * sum(liczba_interwencji) * 1.23),
	_Rnd2(0),
	@DoDnia AS terminrealizacji,
	t.obiektguid, t.opis,
	0 as permanentne,
	1 AS idnmagazyn,
	1 AS MagazynWys,
	4
	FROM t0_int t
	WHERE t.guid IS NULL
	GROUP BY t.obiektGUID
	;

	-- UPDATE sec.security_interwencje i, t0_int t SET i.status1=1 WHERE i.obiektguid = t.obiektguid;

END IF; -- MODE 'ROZLICZENIE_INTERWENCJI'


-- CALL ht_interwencje('ROZLICZENIE_GODZIN','2019-02-07','','','','');
-- CALL ht_interwencje('ROZLICZENIE_GODZIN','2019-02-07','MS','','','');
IF _MODE = 'ROZLICZENIE_GODZIN' THEN

	DROP TABLE IF EXISTS t2_int;
	CREATE TEMPORARY TABLE t2_int
		SELECT g.areaguid AS obiektGUID, g.normatlg + g.godzdod AS liczba_godzin, 
		g.kontrguid,
		(SELECT p.guid FROM zmpo p, zmng n WHERE n.guid = p.idnng AND n.deleted=0 AND g.areaguid = p.areaguid AND p.towrsymb='OCHRONA FIZYCZNA'
		AND p.terminrealizacji>= @OdDnia AND p.terminrealizacji<= @DoDnia
		LIMIT 1) AS guid
		FROM  sec.pl_karty_obiektu_ng g
		INNER JOIN kontrah k ON k.guid = g.kontrguid
		WHERE g.deleted=0 AND IF(_Param_A='MS',RIGHT(k.symbol,2)='MS',RIGHT(k.symbol,2)<>'MS') 
		AND CONCAT(g.rok,IF(g.miesiac > 9,g.miesiac,CONCAT('0',g.miesiac))) = _okres 
;

		SET @_okres = _okres;

		ALTER TABLE t2_int ADD INDEX guid(guid), ADD INDEX obiektguid(obiektguid), ADD INDEX kontrguid(kontrguid);

		UPDATE zmpo p, t2_int t
		SET p.ilosc = liczba_godzin
		WHERE p.guid = t.guid
		;

		-- sekcja zerowania pozycji zamowien, dla ktorych nie ma godzin w ogole w danym miesiacu
		UPDATE zmpo p, zmng n
		SET p.ilosc = 0,
				p.uwagi = 'Brak godzin'
		WHERE n.guid = p.idnng AND n.deleted=0 AND p.towrsymb='OCHRONA FIZYCZNA'
		AND p.terminrealizacji>= @OdDnia AND p.terminrealizacji<= @DoDnia
		AND p.guid NOT IN (SELECT guid FROM t2_int)
		;


END IF; -- MODE 'ROZLICZENIE_GODZIN'

IF _MODE = 'UWAGI_MONITORINGU' THEN

	-- uwagi do monitoringu, uruchamiane w zasadzie raz na miesiąc, dotyczą miesiaca aktualnego
	UPDATE zmpo p, zmng n
	SET p.uwagi = CONCAT('Od dnia ',@OdDnia,', do dnia ',@DoDnia)
	WHERE n.guid = p.idnng
	AND p.towrsymb IN ('MONITORING','MONITORING_ODW_OB','SPRZĄTANIE ZEWNĘTRZNE','MONITORING WIZYJNY','SPRZĄTANIE','OCHRONA FIZYCZNA R', 
											'NADZÓR GRUP INTERWENCYJNYCH','OCHRONA FIZYCZNA G','NADZÓR GRUP INTERWENCYJNYCH', 'OCHRONA Fizyczna OBC',
											'OCHRONA FIZYCZNA G')
	AND p.terminrealizacji >= @OdDnia AND p.terminrealizacji <= @DoDnia
	;

	-- uwagi do monitoringu, dla cykli rozliczeniowych wiekszych od jednego miesiaca
	UPDATE zmpo p, zmng n
	SET p.uwagi = CONCAT('Od dnia ',@OdDnia,', do dnia ',LAST_DAY(DATE_ADD(@OdDnia, INTERVAL permanentne_cykl-1 MONTH)))
	WHERE n.guid = p.idnng
	AND p.towrsymb IN ('MONITORING','MONITORING WIZYJNY','MONITORING_ODW_OB')
	AND p.terminrealizacji >= @OdDnia AND p.terminrealizacji <= @DoDnia
	AND n.permanentne_cykl > 1
	;

END IF; -- MODE 'UWAGI_MONITORINGU'


-- CALL ht_interwencje('PRZELICZENIE_NAGLOWKOW','2019-02-07','','','','');
IF _MODE = 'PRZELICZENIE_NAGLOWKOW' THEN
	-- przygotowanie procedury, w sumie tabeli, do przeliczen naglowkow
	SET @Params = '';
	-- było CALL C_HT_TE_Proc('Reedit', 'Init.`t_in_xxng`', 'ZM', '', '', '', '', '', '', @Params);
	CALL C_HT_TE_Proc('Reedit.Init', '', '', '', '', '', '', '', '', '');	
	
		-- sekcja zerowania pozycji zamowien dla interwencji dla zamowien z danego miesiaca naglowkowo
	DROP TABLE IF EXISTS tt10;
	CREATE TEMPORARY TABLE tt10
	SELECT 
	n.guid AS idnoper, SUM(p.wartnet) AS wartnet, n.netto AS wartnet2
	FROM zmpo p, zmng n
	WHERE n.guid = p.idnng AND n.terminrealizacji >= @OdDnia AND n.terminrealizacji <= @DoDnia
	GROUP BY n.guid
	HAVING wartnet<>wartnet2
	;

	INSERT IGNORE INTO t_in_xxng (GUID) 
	SELECT idnoper
	FROM tt10
	GROUP BY idnoper
	;

	-- przeliczenie naglowkow wszystkich 
	-- było CALL C_HT_TE_Proc('Reedit', 'from.`t_in_xxng`', 'ZM', '', '', '', '', '', '', @Params := 'Dont_touch_poz');
	CALL C_HT_TE_Proc('Reedit.Execute', '', 'ZM', '', '', '', '', '', '', @Params := 'Dont_touch_poz');	
	CALL C_HT_TE_Proc('Reedit.Final', '', '', '', '', '', '', '', '', '');	

END IF; -- MODE 'PRZELICZENIE_NAGLOWKOW'


/* pakiet miesiecznego przeliczania
use sec;
CALL ht_interwencje('ROZLICZENIE_INTERWENCJI',current_date(),'','','','');
CALL ht_interwencje('ROZLICZENIE_GODZIN',current_date(),'','','','');
CALL ht_interwencje('UWAGI_MONITORINGU',current_date(),'','','','');
CALL ht_interwencje('PRZELICZENIE_NAGLOWKOW',current_date(),'','','','');

use ms;
CALL ht_interwencje('ROZLICZENIE_INTERWENCJI',current_date(),'MS','','','');
CALL ht_interwencje('ROZLICZENIE_GODZIN',current_date(),'MS','','','');
CALL ht_interwencje('UWAGI_MONITORINGU',current_date(),'','','','');
CALL ht_interwencje('PRZELICZENIE_NAGLOWKOW',current_date(),'','','','');

*/


/*
SELECT *
FROM zmpo p
WHERE 
guid LIKE 'IAP%'
AND p.terminrealizacji>='2019-02-01' AND p.terminrealizacji<='2019-02-28';

SELECT *
FROM zmng p
WHERE 
guid LIKE 'IA%'
AND p.terminrealizacji>='2019-02-01' AND p.terminrealizacji<='2019-02-28';
*/





	
END$$

DELIMITER ;
