DELIMITER $$

CREATE OR REPLACE DEFINER=`root`@`localhost` VIEW `v_wyjazdy_rewiry` AS
	SELECT 
		rew.GUID,
		rew.Type,
		rew.Symbol, rew.Nazwa, rew.ParentGUID, rew.Dzial, 
		d.Symbol AS Oddzial_Symbol, d.Nazwa As Oddzial_Nazwa,
		rew.Dzial AS ugrpguid, 
		rew.deleted,
		rew.alocaltime
	FROM `erp_area_nodes` rew
	LEFT JOIN `erp_division_schema` d ON d.GUID = rew.Dzial
	WHERE
		rew.Type = 'REWIR'
	GROUP BY rew.GUID	
	;
$$

DELIMITER ;

DELIMITER $$

CREATE OR REPLACE DEFINER=`root`@`localhost` VIEW `v_wyjazdy_akwizytorzy` AS
	SELECT
		k.GUID As AkwizytorGUID,
		o.GUID As OsobaGUID,
		_ConcatStr(o.Nazwisko, o.Imiona, ' ') As Kierowca_NazwiskoImie,
		k.Symbol, k.Nazwa AS AkwizytorNazwa,
		k.AreaGUID,
		_VarStr_NotNull(IFNULL(r.Nazwa, '?')) As Rewir_Nazwa,
		k.magazyn_akwizytora,
		_VarStr_NotNull(mg.Opis) AS Magazyn_akwizytora_Nazwa,
		k.ugrpguid
		
	FROM `kontrah` k
	INNER JOIN `hr_kontrah_links` kl ON kl.kontrGUID = k.GUID AND kl.Kontekst LIKE '%(AKW)%'
	INNER JOIN `osoby` o ON o.GUID = kl.osobaGUID
	LEFT JOIN `erp_area_nodes` r ON r.GUID = k.AreaGUID
	LEFT JOIN `Magazyny` mg ON mg.IdnMagazynu = k.magazyn_akwizytora
	WHERE
		k.akwizytor = 1
	;	
$$

DELIMITER ;

DELIMITER $$
DROP VIEW IF EXISTS v_wyjazdy$$

CREATE VIEW v_wyjazdy as
SELECT c.guid,LEFT(c.starttime,10) AS `data`,
	c.nrwewn AS nrrej,concat(o.imie1,' ',o.nazwisko) AS kierowca,
	c.areaguid,a.nazwa AS trasa, a.dzial as oddzial,
	du.imei,du.gmail,du.login,du.test,du.powiadom,c.katcol0
	FROM crm_usr_links ul, crm_commisions c,erp_area_nodes a , droid_users du, osoby o
	WHERE c.guid=ul.commisionGUID AND c.areaguid=a.guid AND  du.osobaguid=ul.osoba AND du.osobaguid=o.guid AND 
	ul.poziom=2 AND LEFT(c.starttime,10)>'2012-05-01'
$$

DROP VIEW IF EXISTS v_kierowcy_export$$

CREATE VIEW v_kierowcy_export as
SELECT 
concat(o.imie1,' ',o.nazwisko) as `Name`,
o.imie1 as `First Name`,
o.nazwisko as `Last Name`,
u.login as `Nickname`,
u.gmail as `E-mail Address`,
u.nrtelefonu as `Mobile Phone`,
"CDG" as `Organization`,
u.oddzial as `Organization - Location`
FROM droid_users u, osoby o 
WHERE u.osobaguid=o.guid
$$

DROP VIEW IF EXISTS v_dng$$

CREATE VIEW v_dng as
SELECT 
z.*,
k.symbol as kontrsymbol,
v.login,v.oddzial,v.data,v.trasa
FROM droid_zmng z
INNER JOIN v_wyjazdy v ON v.guid=z.wyjazd
LEFT JOIN kontrah k ON k.guid=z.kontrguid
$$

DROP VIEW IF EXISTS v_dpo$$

CREATE VIEW v_dpo as
SELECT 
z.*,n.autonrfv,n.autonrzs,n.autonrwz,
k.symbol as kontrsymbol,
v.login,v.oddzial,v.data,v.trasa,n.wyjazd
FROM droid_zmpo z
INNER JOIN droid_zmng n ON n.zmngguid=z.zmngguid
INNER JOIN v_wyjazdy v ON v.guid=n.wyjazd
LEFT JOIN kontrah k ON k.guid=n.kontrguid
$$

DROP VIEW IF EXISTS v_dzap$$

CREATE VIEW v_dzap as
SELECT 
z.*,n.autonrfv,n.autonrzs,n.autonrwz,
k.symbol as kontrsymbol,
v.login,v.oddzial,v.data,v.trasa
FROM droid_zaplaty z
INNER JOIN droid_zmng n ON n.zmngguid=z.zmngguid
INNER JOIN v_wyjazdy v ON v.guid=n.wyjazd
LEFT JOIN kontrah k ON k.guid=n.kontrguid
$$

DELIMITER ;
DELIMITER $$


DROP PROCEDURE IF EXISTS `ht_gasdroid`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_gasdroid`(
	IN _MODE VARCHAR(150),
	IN _SESSION VARCHAR(150),
	IN _DATA VARCHAR(10),
	IN _KIEROWCA VARCHAR(38),
	IN _WYJAZD VARCHAR(38),
	IN _TIME VARCHAR(20),
	IN _TOWRGUID VARCHAR(38),
	IN _ZMPOGUID VARCHAR(38),
	IN _ILOSC VARCHAR(38),
	IN _LATITUDE VARCHAR(38),
	IN _LONGITUDE VARCHAR(38),
	IN _STATUS VARCHAR(10),
	IN _SEARCH VARCHAR(100),
	IN _KONTRGUID VARCHAR(38)
)

BEGIN
-- 	SET @dr:=PI()/180;
DECLARE _LAT DOUBLE;
DECLARE _LON DOUBLE;

    SET @ht_gasdroid_result := -1;
    SET _LAT=IF(_LATITUDE='',0,_LATITUDE);
    SET _LON=IF(_LONGITUDE='',0,_LONGITUDE);
    SELECT a.dzial FROM crm_commisions c,erp_area_nodes a 
    WHERE c.areaguid=a.guid AND c.guid=_WYJAZD LIMIT 1 INTO @oddzial;
    SET @oddzial:=IFNULL(@oddzial,'');
    SET _DATA=IF(IFNULL(_DATA,'')='',CURRENT_DATE,_DATA);
		
	-- podaje dane dot. wyjazdu kierowcy danego dnia
	-- call ht_gasdroid('WYJAZD','012983','2012-02-21','IM_85','','','','','','','','','','');
	
	IF _MODE = 'WYJAZD' THEN

	    SELECT c.guid,LEFT(c.starttime,10) AS `data`,
			c.nrwewn AS nrrej,c.opis AS kierowca,
			c.areaguid,a.nazwa AS trasa, a.dzial,
			du.autoNrZS,
			du.autoNrFV,
			du.autoNrWZ,
			CONCAT(du.nrprefix,'/%05d/',a.dzial,'/',RIGHT(YEAR(CURRENT_DATE),2)) AS formatNumeru,
			CONCAT(du.nrprefix,'/%05d/',a.dzial,'/',RIGHT(YEAR(CURRENT_DATE),2)) AS formatNumeruWZ,
			CONCAT(replace(du.nrprefix,'M','F'),'/%05d/',a.dzial,'/',RIGHT(YEAR(CURRENT_DATE),2)) AS formatNumeruFV,
			CONCAT(replace(du.nrprefix,'M','P'),'/%05d/',a.dzial,'/',RIGHT(YEAR(CURRENT_DATE),2)) AS formatNumeruZS,
			IF(IFNULL(a.kontrguid,'')='',(SELECT guid FROM kontrah WHERE symbol=CONCAT('DETAL_',a.dzial) LIMIT 1),a.kontrguid) AS detal_kontrguid,
			'3.0.2013.09.19' AS min_wersja


		FROM crm_usr_links ul, crm_commisions c,erp_area_nodes a , droid_users du
		WHERE c.guid=ul.commisionGUID AND c.areaguid=a.guid AND  du.osobaguid=_KIEROWCA AND
			ul.osoba=_KIEROWCA AND ul.poziom=2 AND c.status IN (0,1,2) AND LEFT(c.starttime,10)=_DATA -- CURRENT_DATE ?
			;
		SET @ht_gasdroid_result := 0;
	END IF;	
	
	
	IF _MODE = 'KONTRLIST.pre.zmng'  THEN
		DROP TEMPORARY TABLE IF EXISTS temp_klist;
		UPDATE crm_commisions SET status=2 WHERE status IN (0,1) AND guid=_WYJAZD;
-- zamwstatus=16 - wyslane
		
-- UPDATE zmng z SET z.status=16,z.localtime=z.localtime WHERE z.status IN (0) AND z.wyjazdguid=_WYJAZD;


		CREATE TEMPORARY TABLE temp_klist
		SELECT 
		n.kontrguid, 
		GROUP_CONCAT(IFNULL(CONCAT(p.towrsymb,':',ROUND(p.ilosc)),'') ORDER BY p.towrsymb) AS towary,
		SUM(n.ilepoz) AS ilepoz,
		GROUP_CONCAT(DISTINCT concat(IFNULL(concat(n.warunki_dostawy,' '),''),IFNULL(n.uwagi,''))) AS uwagi,
		MAX(n.status) AS STATUS,k.numer_na_trasie AS kolejnosc,
		MAX(GREATEST(n.localtime,IFNULL(p.localtime,NOW()))) AS alocaltime,		
		GROUP_CONCAT(DISTINCT IFNULL(n.nrzamw,'') ORDER BY n.idn) AS nrDok,
		MAX(n.rodzaj2) AS rodzajDok,
		IFNULL(MAX(n.sposobplatn),k.sposplat) AS sposobplatn
		
		
		FROM zmng n 
		INNER JOIN kontrah k ON k.guid=n.kontrguid
		LEFT JOIN zmpo p ON n.guid=p.idnng 
		LEFT JOIN droid_zmpo dp ON  dp.zmpoguid=p.guid
		WHERE n.wyjazdguid=_WYJAZD AND n.wyjazdguid<>'' AND IFNULL(dp.statuszam,0)=0
		GROUP BY n.kontrguid
		HAVING alocaltime>_TIME
		ORDER BY kolejnosc;
		
		SET @ht_gasdroid_result := 0;
	END IF;	

-- call ht_gasdroid('KONTRLIST.powiadom.list','','','','','100','','','','','','','','');
--  przyklad dla 100 minut
	IF _MODE in ('KONTRLIST.powiadom','KONTRLIST.powiadom.list')  THEN
		DROP TABLE IF EXISTS temp_gd_powiadom;
		CREATE TABLE temp_gd_powiadom
		SELECT 
		n.kontrguid, 
		n.wyjazdguid,
		GROUP_CONCAT(IFNULL(CONCAT(p.towrsymb,':',ROUND(p.ilosc)),'') ORDER BY p.towrsymb) AS towary,
		GROUP_CONCAT(DISTINCT concat(IFNULL(concat(n.warunki_dostawy,' '),''),IFNULL(n.uwagi,''))) AS uwagi,
		MAX(GREATEST(n.localtime,IFNULL(p.localtime,NOW()))) AS alocaltime,		
		k.nazwa as kontrnazwa,
		@adresFV:=CONCAT(IFNULL(k.ulica,''),', ',ifnull(k.zipcode,''),' ',k.nazwamiasta) AS adresFV,
		IF(IFNULL(SUBSTRING_INDEX(g.adres,'(',1),'')='', IF(IFNULL(a.adres,'')<>'',a.adres,@adresFV) ,SUBSTRING_INDEX(g.adres,'(',1)) AS adres,
		w.kierowca,w.gmail, w.data=current_date as nadzis
				
		FROM zmng n 
		INNER JOIN v_wyjazdy w ON w.guid= n.wyjazdguid AND w.powiadom=1  -- tylko dzisiejsze!
		INNER JOIN kontrah k ON k.guid=n.kontrguid
		LEFT JOIN zmpo p ON n.guid=p.idnng 
		LEFT JOIN droid_zmpo dp ON  dp.zmpoguid=p.guid
		LEFT JOIN erp_area_nodes a ON a.kontrguid=n.kontrguid
		LEFT JOIN erp_area_nodes e ON k.guid=e.kontrguid
		LEFT JOIN geo_int_adr_link g ON e.guid=g.objguid
		WHERE n.wyjazdguid<>'' AND IFNULL(dp.statuszam,0)=0 
			AND n.wydzial=0 -- znacznik - 0 - nie powiadomiono, 1 - powiadom mail+QS, 2 - przekazano do QS, 3 - powiadom tylko QS (bez maila)
			AND n.localtime>current_date -- bezpiecznik
		GROUP BY n.kontrguid
		HAVING alocaltime>date_sub(now(),interval _TIME minute) -- z crona - interpretowane jako ilość minut wstecz
		ORDER BY alocaltime;
		
		IF _MODE in ('KONTRLIST.powiadom','KONTRLIST.powiadom.list')  THEN
			SELECT * FROM temp_gd_powiadom;
		END IF;	

		SET @ht_gasdroid_result := 0;
	END IF;	


	IF _MODE = 'KONTRLIST.pre.gps'  THEN
	--  call ht_gasdroid('KONTRLIST.gps','','','','','','','','',18.616514,54.2409,'','','');

		IF _STATUS='' THEN
			SET @promien:=0.3; -- km
		ELSE
			SET @promien:=_STATUS; -- km
		END IF;
		
		SET @diff:=@promien/50; -- przybliżenie, tak by koło o promieniu zmiesciło się w prostokacie
		
		
		DROP TABLE IF EXISTS temp_klist;
		CREATE TEMPORARY TABLE temp_klist
		SELECT 
			k.GUID	AS kontrguid,'' as towary,0 as ilepoz,'' as uwagi,0 AS STATUS,
			geo_distance(_LAT,_LON,g.latitude,g.longitude)  as kolejnosc,
			
			k.localtime AS alocaltime,'' AS nrDok,k.rodzaj2 AS rodzajDok,k.sposplat as sposobplatn
			
			FROM kontrah k
		INNER JOIN erp_area_nodes e ON k.guid=e.kontrguid
		INNER JOIN geo_int_adr_link g ON e.guid=g.objguid
		WHERE
		-- celowo nie stosuje tu dokladnej odleglosci ze wzgledu na wydajnosc
			k.deleted=0 AND g.latitude BETWEEN _LAT-@diff AND _LAT+@diff  AND g.longitude BETWEEN  _LON-@diff AND _LON+@diff AND _LAT<>0 AND _LON<>0
		HAVING kolejnosc<=@promien
		
		ORDER by kolejnosc;
		
		SET @ht_gasdroid_result := 0;
	END IF;	
	
	
	IF _MODE = 'SV.KONTRLIST.zmng'  THEN
	-- select uuid() as guid,g.guid as geoguid,k.guid as kontrguid,k.platnikguid,k.symbol as kontrsymbol,k.nazwa as kontrnazwa,g.zipcode,g.adres,g.latitude,g.longitude,400 as promien,4 as kolejnosc,5 as  czaspunktu, '' as czasprzybycia from kontrah k LEFT JOIN erp_area_nodes a ON k.guid=a.kontrguid LEFT JOIN geo_int_adr_link g ON a.guid=g.objguid where k.guid='IM_164b4ca4a3cf422500523764fd09c4de'
	-- select g.*,k.guid as kontrguid,k.platnikguid,k.symbol as kontrsymbol,k.nazwa as kontrnazwa,400 as promien,4 as kolejnosc,5 as  czaspunktu, '' as czasprzybycia from kontrah k LEFT JOIN erp_area_nodes a ON k.guid=a.kontrguid LEFT JOIN geo_int_adr_link g ON a.guid=g.objguid where k.guid='IM_164b4ca4a3cf422500523764fd09c4de'
	
	select g.guid,
	k.guid as kontrguid,k.platnikguid,k.symbol as kontrsymbol,k.nazwa as kontrnazwa,
	v.nazwa_pelna as miejscowosc,gia.Srch_Cecha_N1_N2 as ulica,g.nrpos as nr_posesji,g.nrloc as nr_lokalu,
	v.woj_str as wojewodztwo,g.latitude,g.longitude,400 as promien,
	4 as kolejnosc,5 as  czaspunktu, '' as czasprzybycia 
	FROM kontrah k 
	LEFT JOIN erp_area_nodes a ON k.guid=a.kontrguid 
	LEFT JOIN geo_int_adr_link g ON a.guid=g.objguid 
	LEFT JOIN v_geo_int_miejsca v ON v.id=g.geo_int_miejsca_id 
	LEFT JOIN geo_int_adresy gia on gia.id=g.geo_int_adresy_id 
	WHERE k.guid='IM_164b4ca4a3cf422500523764fd09c4de';
	
	SET @ht_gasdroid_result := 0;
	END IF;	

	IF _MODE = 'SV.WYJAZDY'  THEN
	-- select guid,data,kierowca,trasa,oddzial, starttime* from v_wyjazdy where data=current_date limit;
		SET @ht_gasdroid_result := 0;
	END IF;	
		
		
	IF _MODE = 'KONTRLIST.pre.search.count' or _MODE = 'KONTRLIST.pre.search'  THEN
	-- call ht_gasdroid('KONTRLIST.pre.search.count','','','','{313A2517-76D6-4846-B505-AF89A68AA4C3}','','','','','','','','top','');
	-- call ht_gasdroid('KONTRLIST.search','','','','{313A2517-76D6-4846-B505-AF89A68AA4C3}','','','','','','','','','');


	
		-- SELECT c.areaguid from crm_commisions c	WHERE c.guid=_WYJAZD INTO @rewir;
		SET _SEARCH=REPLACE(_SEARCH,'+','%');
		SET _SEARCH=REPLACE(_SEARCH,' ','%');
		
		DROP TABLE IF EXISTS temp_klist;
		CREATE TEMPORARY TABLE temp_klist
		SELECT DISTINCT
			k.GUID	AS kontrguid,'' as towary,0 as ilepoz,'' as uwagi,0 AS STATUS,
			geo_distance(_LAT,_LON,g.latitude,g.longitude)  as kolejnosc,
			k.localtime AS alocaltime,'' AS nrDok,k.rodzaj2 AS rodzajDok,k.sposplat as sposobplatn
			FROM kontrah k
		LEFT JOIN erp_area_nodes a ON k.guid=a.kontrguid
		LEFT JOIN geo_int_adr_link g ON a.guid=g.objguid
		WHERE
			k.deleted=0 AND 
		--	k.areaguid=@rewir and (
			(if(@oddzial='',1,k.ugrpguid=@oddzial) or k.ugrpguid='ALL') and (
					k.nazwa like CONCAT('%',_SEARCH,'%') or
					k.ulica like CONCAT('%',_SEARCH,'%') or
					k.nip like CONCAT('%',_SEARCH,'%') or
					ifnull(a.adres,k.ulica) like CONCAT('%',_SEARCH,'%') or
					ifnull(g.adres,k.ulica) like CONCAT('%',_SEARCH,'%') or
					k.symbol like CONCAT('%',_SEARCH,'%')
				)
		ORDER by kolejnosc
		LIMIT 30; -- więcej nie ma sensu zwracać
		IF _MODE = 'KONTRLIST.pre.search.count' THEN
			SELECT count(*) as ile from temp_klist;
		END IF;
		
		SET @ht_gasdroid_result := 0;
	END IF;	
	
	IF _MODE = 'KONTRLIST.zmng.count'  THEN
	    CALL ht_gasdroid('KONTRLIST.pre.zmng',_SESSION,_DATA,_KIEROWCA,_WYJAZD,_TIME,_TOWRGUID,_ZMPOGUID,_ILOSC,_LATITUDE,_LONGITUDE,_STATUS,_SEARCH,_KONTRGUID);
	    SELECT count(*) as ile from temp_klist;
	    SET @ht_gasdroid_result := 0;
	END IF;	

	IF _MODE = 'KONTRLIST.zmng' or _MODE = 'KONTRLIST.search' or _MODE = 'KONTRLIST.gps' THEN
		
		-- 
		-- call ht_gasdroid('KONTRLIST.search','','','','{313A2517-76D6-4846-B505-AF89A68AA4C3}','','','','',53.689452,17.588307,'','most','');
		-- wywołanie KONTRLIST.pre.search.count przygotowuje już temp_klist wiec jesli _SEARCH jest pusty to podaje wczesniej przygotowane dane jeśli nie, to wykonywane jest 
		IF _MODE = 'KONTRLIST.search' and IFNULL(_SEARCH,'')<>'' THEN
			CALL ht_gasdroid('KONTRLIST.pre.search',_SESSION,_DATA,_KIEROWCA,_WYJAZD,_TIME,_TOWRGUID,_ZMPOGUID,_ILOSC,_LATITUDE,_LONGITUDE,_STATUS,_SEARCH,_KONTRGUID);
		END IF;	

		IF _MODE = 'KONTRLIST.gps' THEN
			CALL ht_gasdroid('KONTRLIST.pre.gps',_SESSION,_DATA,_KIEROWCA,_WYJAZD,_TIME,_TOWRGUID,_ZMPOGUID,_ILOSC,_LATITUDE,_LONGITUDE,_STATUS,_SEARCH,_KONTRGUID);
			
			-- SELECT rewir,count(*) FROM temp_klist into @rewir,@ile; -- TODO: @rewir - co autor mial na mysli???
			SELECT count(*) FROM temp_klist into @ile;
			IF @ile = 0 THEN
				SET @ht_gasdroid_result := -2;
			END IF;
		
		END IF;

		IF _MODE = 'KONTRLIST.zmng' THEN
			CALL ht_gasdroid('KONTRLIST.pre.zmng',_SESSION,_DATA,_KIEROWCA,_WYJAZD,_TIME,_TOWRGUID,_ZMPOGUID,_ILOSC,_LATITUDE,_LONGITUDE,_STATUS,_SEARCH,_KONTRGUID);
		END IF;

		SELECT 
		k.symbol as kontrsymbol,
		k.nazwa, n.kontrguid, 
		concat('GX',md5(concat(n.kontrguid, _WYJAZD))) AS zmngguid,  -- dla danego wyjazdu i kontrahenta unikalny
		@adresFV:=CONCAT(IFNULL(k.ulica,''),', ',ifnull(k.zipcode,''),' ',k.nazwamiasta) AS adresFV,
		IF(IFNULL(SUBSTRING_INDEX(g.adres,'(',1),'')='', IF(IFNULL(a.adres,'')<>'',a.adres,@adresFV) ,SUBSTRING_INDEX(g.adres,'(',1)) AS adres,	
		towary,
		-- sposplat=1 to gotowka 0 dni
		-- 1 | BEZPOSREDNIA |2 | KLATKA|3| HURT|4 | CENTRALNY|6 | ODSPRZEDAWCA |7| PRZEMYSL|8|UM_MPGK
		-- bylo: k.katcol0 as rodzaj_klienta,
		if(k.treenode like "*|CENTRALNY%",4,if(k.treenode like "*|KLATKA%",2,1)) as rodzaj_klienta,
		(k.sposplat=1 and not (k.treenode like "*|CENTRALNY%")) as potw_drukuj_ceny,
		n.kolejnosc, -- lub km
		n.ilepoz,
		ifnull(g.latitude,'') as latitude, ifnull(g.longitude,'') as longitude,
		CONCAT(if((select current_status from  ht_platnik_pay_info p where p.platnikguid=n.kontrguid)>10,'BLOKADA!!! ',''),
		ifnull(n.uwagi,'')) as uwagi,
		n.status,
		n.alocaltime,		
		IFNULL((SELECT SUM(ABS(IF(O.CWN, O.CKwota, -O.CKwota)- O.CRozliczone))  
			FROM opng O WHERE O.kontrguid = k.GUID AND O.CWN = 1 AND O.nierozliczony>0 AND O.deleted = 0 AND O.rozrachunek = 1), 
			_varDOUBLE(0)) AS zaleglosci,
		(SELECT ko.adres from kontakty ko where ko.kontrguid=k.guid and typ_medium in (0,2) and nieaktywny=0 order by typ_medium desc limit 1) AS telefon, 
		n.nrDok,n.rodzajDok,
		k.nip AS nip,
		date_add(CURRENT_DATE,interval ifnull((select pl.dni from platnosc pl where pl.idn=n.sposobplatn),0) day) AS terminPlatnosci,
		-- (select pl.nazwa from platnosc pl where pl.idn=n.sposobplatn) AS sposobPlatnosci,
		_VarInt(IFNULL((select pl.nazwa from platnosc pl where pl.idn=n.sposobplatn)='GOTOWKA',1)) AS sposobPlatnosci, -- 0 - przelew - 1 - gotowka
		SUBSTRING(k.Odbierajacy,1,100) AS odbiorcy,
		k.serwis_koment as stan_klatki
		
		FROM temp_klist n 
		INNER JOIN kontrah k ON k.guid=n.kontrguid
		LEFT JOIN erp_area_nodes a ON a.kontrguid=n.kontrguid
		LEFT JOIN geo_int_adr_link g ON a.guid=g.objguid
		WHERE n.alocaltime>_TIME
		ORDER BY kolejnosc;
		
		DROP TABLE IF EXISTS temp_klist;
		
		SET @ht_gasdroid_result := 0;
	END IF;	
	
	IF _MODE = 'ZALADUNEK'  THEN
		SELECT 
		p.idntowr AS towrguid,
		p.towrsymb AS towar,
		p.guid as zmpoguid,
		concat('GX',md5(concat(n.kontrguid, _WYJAZD))) AS zmngguid,  -- dla danego wyjazdu i kontrahenta unikalny
		ROUND(p.ilosc) AS ilosc,
		ROUND(p.zrealizowano) AS zrealizowano,
		ifnull(p.cenabrt,0) AS cena,
		ifnull(p.wartbrt,0) AS wartosc,
		p.idnvat AS vat,
		ROUND(p.zwrot) AS obcebutle,
		IFNULL(p.uwagi, '') AS uwagi, 
		GREATEST(n.localtime,IFNULL(p.localtime,NOW())) AS alocaltime,
		n.rodzaj2 AS rodzajDokSprzed,
		_varInt(0) AS statusZam,
	    n.powod_niezrealizowania AS powod_niezrealizowania,
		_varInt(0) AS blokadaceny
		FROM zmpo p 
		LEFT JOIN zmng n ON n.guid=p.idnng 
		LEFT JOIN droid_zmpo dp ON  dp.zmpoguid=p.guid
		WHERE n.wyjazdguid=_WYJAZD AND n.wyjazdguid<>'' AND IFNULL(dp.statuszam,0)=0
		HAVING alocaltime>_TIME
		;
	
		SET @ht_gasdroid_result := 0;
	END IF;	
	
	IF _MODE = 'ZALEGLOSCI'  THEN
		SELECT 
		n.guid as zmngguid,
		O.kontrguid, 
		O.nrdokfin, 
		O.datawystaw, 
		O.dataplatnosci, 		
		ABS(IF(O.CWN, O.CKwota, -O.CKwota)- O.CRozliczone) AS dozaplaty, 
		O.CRozliczone AS rozliczono,
		O.idn AS idnOpNg,
		_varInt(0) AS  status,
		_varInt(0) AS  checked,		
		IFNULL(O.localtime,NOW()) AS alocaltime
		FROM  zmng n
		INNER JOIN opng O ON n.kontrguid=O.kontrguid
		LEFT JOIN droid_zaplaty dz ON  dz.idnoper=O.idn
		WHERE n.wyjazdguid=_WYJAZD AND n.wyjazdguid<>'' AND (IFNULL(dz.rozliczono,0)=0) -- ignoujemy takie dokumenty, ktore maja juz zapis w zaplatach, ale jeszcze nie wciagniete do systemu
		-- TODO _KONTRGUID
		AND O.CWN = 1 AND O.nierozliczony>0 AND O.deleted = 0 AND O.rozrachunek = 1 		
		GROUP BY O.GUID
		HAVING alocaltime>_TIME
		ORDER BY kontrguid, dataplatnosci
		;
	
		SET @ht_gasdroid_result := 0;
	END IF;	
		
	
	IF _MODE = 'ZALEGLOSCI.kontrah'  THEN
		SELECT 
		-- n.guid as zmngguid,
		'' as zmngguid,
		O.kontrguid, 
		O.nrdokfin, 
		O.datawystaw, 
		O.dataplatnosci, 		
		-- ABS(IF(O.CWN, O.CKwota, -O.CKwota)- O.CRozliczone) AS dozaplaty, 
		ABS(IF(O.CWN, O.CKwota, -O.CKwota)- O.CRozliczone)-IFNULL(IF(dz.status=3, dz.rozliczono,0),0) AS dozaplaty, 
		O.CRozliczone AS rozliczono,
		O.idn AS idnOpNg,
		_varInt(0) AS  status,
		_varInt(0) AS  checked,		
		IFNULL(O.localtime,NOW()) AS alocaltime
		FROM opng O 
		LEFT JOIN droid_zaplaty dz ON  dz.idnoper=O.idn
		WHERE O.kontrguid=_KONTRGUID 
		-- AND IFNULL(dz.status,0)=0
		AND IFNULL(dz.rozliczono<>dz.dozaplaty,1)
		AND O.CWN = 1 AND O.nierozliczony>0 AND O.deleted = 0 AND O.rozrachunek = 1 		
		GROUP BY O.GUID
		HAVING alocaltime>_TIME
		ORDER BY kontrguid, dataplatnosci
		;
	
		SET @ht_gasdroid_result := 0;
	END IF;	
		
	IF _MODE = 'TOWARY' or _MODE = 'TOWAR.cena' or _MODE = 'TOWARY.stan' THEN
		-- TODO - zastanowic sie od strony aplikacji , czy pobierac wszystko, czy konkretny towar
		-- mod TOWARY pelna lista towarów z ilosciami i cenami:
		-- PARAMETRY OBOWIAZKOWE: _WYJAZD
		-- PARAMETRY OPCJONALNE: _KONTRGUID, _TOWRGUID
		-- call ht_gasdroid('TOWARY','','','','{915CA682-845E-11E1-9E3F-001372373EE4}','','','','','','','','','IM_937e0d1c064de3778d546efac3760a2d');
		
		-- mod TOWAR.cena - podaje tylko cene dla konkretnego kontrahenta i towaru
		-- GasDroid: PARAMETRY OBOWIAZKOWE: _WYJAZD, _KONTRGUID, _TOWRGUID
		-- CallCenter: PARAMETRY OBOWIAZKOWE: _KONTRGUID, _TOWRGUID
		-- call ht_gasdroid('TOWAR.cena','','','','{915CA682-845E-11E1-9E3F-001372373EE4}','','{6341715D-E105-4417-B7E1-E053E9CB25F3}','','','','','','','IM_937e0d1c064de3778d546efac3760a2d');
		-- call ht_gasdroid('TOWAR.cena','','','','','','MIX11','','','','','','','IM_937e0d1c064de3778d546efac3760a2d');
		
		-- mod TOWAR.stan - podaje pelna liste towarow na stanie dla konkretnego kontrahenta
		-- PARAMETRY OBOWIAZKOWE: _WYJAZD, _KONTRGUID
		-- PARAMETRY OPCJONALNE:_TOWRGUID
		-- call ht_gasdroid('TOWARY.stan','','','','{915CA682-845E-11E1-9E3F-001372373EE4}','','','','','','','','','IM_937e0d1c064de3778d546efac3760a2d');
		
		-- sprawdzam, czy dla trasy jest okreslony cennik indywidualny, i pobieram go
		
		
		SET @trasa:='';
		
		-- dla pustego wyjazdu pobieram trase i oddzial na podstawie danych kontrahenta - dla CallCenter
		
		IF (_WYJAZD='') AND (_KONTRGUID<>'') THEN
			SELECT ugrpguid,areaguid from kontrah where guid=_KONTRGUID into @oddzial,@trasa;
		ELSE
			SELECT areaguid from crm_commisions where guid=_WYJAZD into @trasa;
		END IF;
		
		SET @cennik:=NULL;
		SELECT k.idn,if(k.czy_ceny_brt,1,1.23) as brt FROM erp_area_nodes a, klasycen k 
		WHERE a.guid=@trasa and a.lp*3+10=k.idn and a.lp<>0 into @cennik,@brt;
		
		IF ISNULL(@cennik) THEN
			SELECT c.idn,if(c.czy_ceny_brt,1,1.23) as brt FROM klasycen c 
			WHERE nazwa=concat(@oddzial,' Indywidualny') into @cennik,@brt;
		END IF;
		
		CREATE TEMPORARY TABLE tempt		
		SELECT t.symbol, concat(t.symbol,' ',t.kasafiskalnanazwa) as nazwa, t.wwwsortorder,
		ifnull((SELECT s.stan FROM temp_olap_stany s WHERE s.idntowr=t.guid and s.kontrguid=_KONTRGUID ORDER by rok,mc DESC limit 1),0) as ilosc, 
		t.wyroznik, t.GUID, 
		_varDOUBLE_NOTNULL(
		round(@brt*(t.cena_minimalna+if(t.wyroznik='G',t.waga*ifnull((select k.msc_plan_sprzed/1000 from kontrah k WHERE k.guid=_KONTRGUID ),0),0 )),2))
		as cena_minimalna,
		_Rnd2(
		ifnull(if(kc.czy_ceny_brt,1,1.23)*kc.cenaobl,
		 ifnull(@brt*c.cena,
		 ifnull(cd.cena, -- zawsze brt
		  0)))) as cena,'' as status
		FROM TowrNg t
		LEFT JOIN cennik cd on cd.idntowr=t.guid and cd.klasa=1 -- cena domyslna - zawsze brt
		LEFT JOIN cennik c  on c.idntowr=t.guid  and c.klasa=@cennik --  cena detaliczna z odpowiedniej klasy cenowej oddzialu lub trasy
		LEFT JOIN ht_kontrah_ceny kc on kc.idntowr=t.guid and kc.kontrguid=_KONTRGUID
		
		where (t.status_www=1) and (_TOWRGUID='' or t.guid=_TOWRGUID)
		;
		IF _MODE = 'TOWARY' THEN
			SELECT * from tempt ORDER BY wwwsortorder;
		END IF;
		IF _MODE = 'TOWAR.cena' THEN
			select count(*) from tempt into @ile;
			IF @ile<>1 THEN 
				SELECT _varDOUBLE_NOTNULL(0) as cena, _varDOUBLE_NOTNULL(0) as cena_minimalna, if(@ile=0,"BRAK CEN?","TOWRGUID NIEOKRESLONY") AS STATUS;
			ELSE
				SELECT _varDOUBLE_NOTNULL(cena) as cena, _varDOUBLE_NOTNULL(cena_minimalna) as cena_minimalna from tempt into @cena,@cena_minimalna;
				SELECT _varDOUBLE_NOTNULL(cena) as cena, _varDOUBLE_NOTNULL(cena_minimalna) as cena_minimalna from tempt;
			END IF;
		END IF;
		
		IF _MODE = 'TOWARY.stan' THEN
			SELECT * from tempt where ilosc<>0;
		END IF;
		DROP TABLE IF EXISTS tempt;
		SET @ht_gasdroid_result := 0;
		
	END IF;	
	
	
	IF @ht_gasdroid_result = -1 THEN
		SELECT "MODE NIE ZDEFINIOWANY" AS STATUS,_MODE AS `mode`;
	END IF;
	
END$$

DROP PROCEDURE IF EXISTS `ht_gasdroid_zmng`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_gasdroid_zmng`(
	IN _id INT, 
	IN zmngguid VARCHAR(38),
	IN kontrguid VARCHAR(38), 
	IN latitude VARCHAR(38),
	IN longitude VARCHAR(38),
	IN alocaltime DATETIME,
	IN status INT,
	IN idDevice  VARCHAR(38),
	IN autoNrZS  VARCHAR(38),
	IN autoNrFV  VARCHAR(38),
	IN autoNrWZ  VARCHAR(38),
	IN wyjazd   VARCHAR(250),
	IN _p1   VARCHAR(250),
	IN _p2   VARCHAR(250),
	IN _p3   VARCHAR(250)
)

BEGIN
	REPLACE `droid_zmng` (_id, zmngguid, kontrguid, latitude, longitude, alocaltime, status, idDevice, autoNrZS ,autoNrFV , autoNrWZ, wyjazd)
	VALUES (_id, zmngguid, kontrguid, latitude, longitude, alocaltime, status, idDevice, autoNrZS ,autoNrFV , autoNrWZ, wyjazd);

END$$

DROP PROCEDURE IF EXISTS `ht_gasdroid_zmpo`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_gasdroid_zmpo`(
	IN _id INT, 
	IN zmngguid VARCHAR(38),
	IN zrealizowano DOUBLE(16,4), 
	IN obcebutle INT, 
	IN alocaltime DATETIME,
	IN rodzajDokSprzed INT, 
	IN statusZam INT, 
	IN wartosc DOUBLE(16,2), 
	IN powod_niezrealizowania INT, 
	IN towrguid  VARCHAR(38),
	IN zmpoguid  VARCHAR(38),
	IN _p1   VARCHAR(250),
	IN _p2   VARCHAR(250),
	IN _p3   VARCHAR(250),
	IN _p4   VARCHAR(250)
)

BEGIN
  SET @zrealizowano:=0;
  SELECT zrealizowano FROM droid_zmpo p WHERE p.zmpoguid=zmpoguid into @zrealizowano;
  IF IFNULL(@zrealizowano,0)=0 THEN 
 	  REPLACE `droid_zmpo` (_id, zmngguid, zrealizowano, obcebutle, alocaltime, rodzajDokSprzed, statusZam, wartosc, powod_niezrealizowania, towrguid, zmpoguid)
	  VALUES (_id, zmngguid, zrealizowano, obcebutle, alocaltime, rodzajDokSprzed, statusZam, wartosc, powod_niezrealizowania, towrguid, zmpoguid);
	END IF;

END$$

DROP PROCEDURE IF EXISTS `ht_gasdroid_zaplaty`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_gasdroid_zaplaty`(
	IN _id INT, 
	IN kontrguid VARCHAR(38),
	IN datawystaw DATE,
	IN zmngguid VARCHAR(38),
	IN rozliczono DOUBLE(16,2), 
	IN alocaltime DATETIME,
	IN idnoper INT, 
	IN status INT, 
	IN dozaplaty DOUBLE(16,2), 
	IN wyjazd   VARCHAR(250),
	IN _p1   VARCHAR(250),
	IN _p2   VARCHAR(250),
	IN _p3   VARCHAR(250)
)

BEGIN
	REPLACE `droid_zaplaty` (_id, kontrGUID, datawystaw, zmngguid, rozliczono, alocaltime, idnoper, status, dozaplaty, wyjazd)
	VALUES (_id, kontrGUID, datawystaw, zmngguid, rozliczono, alocaltime, idnoper, status, dozaplaty, wyjazd);
	
END$$

DELIMITER ;

DELIMITER $$
-- TODO: idnoper - jest -1 - sprawdz
DROP PROCEDURE IF EXISTS `ht_gasdroid_apply`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_gasdroid_apply`(
	IN _MODE VARCHAR(150),
	IN _WYJAZD VARCHAR(38),
	IN _ZMNGGUID VARCHAR(38),
	IN _DATA VARCHAR(10),
	IN _ODDZIAL VARCHAR(38),
	IN _PARAM_A VARCHAR(250),
	IN _PARAM_B VARCHAR(250)
)

SPROC: BEGIN

	-- call ht_gasdroid_apply('INIT',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,PARAM_B);
	-- call ht_gasdroid_apply('WYJAZD','','','2012-05-08','SO','','');
	-- call ht_gasdroid_apply('ALL','','','','','','');
	-- call ht_gasdroid_apply('GUID','','','','','','');
	-- call ht_gasdroid_apply('UPDATE.zm','','','','','','');
	-- call ht_gasdroid_apply('CREATE.op','','','','','','');
	-- call ht_gasdroid_apply('CREATE.ks','','','','','','');
	DECLARE _MMGUID VARCHAR(38) DEFAULT '';
	SET @ht_gasdroid_apply_result := -1;

	IF _MODE = 'INIT' THEN
		SELECT a.dzial,ul.osoba FROM crm_commisions c,erp_area_nodes a,crm_usr_links ul
		WHERE c.areaguid=a.guid AND c.guid=ul.commisionGUID AND ul.poziom=2 AND c.guid=_WYJAZD
		limit 1 INTO @oddzial,@kierowca;
		SET @oddzial:=IFNULL(@oddzial,'');
		SET @kierowca:=IFNULL(@kierowca,'');
		SELECT kontrguid FROM hr_kontrah_links WHERE osobaguid=@kierowca AND Kontekst LIKE '%(AKW)%' LIMIT 1 INTO @akwizytor;
	END IF;


	IF _MODE = 'ALL' THEN
		 SET @ht_gasdroid_apply_result := -1;
		
		BEGIN
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE c_proc CURSOR FOR
				SELECT DISTINCT z.wyjazd FROM droid_zmng z, v_wyjazdy w 
				WHERE z.wyjazd=w.guid and z.status<100 and (w.data = _DATA) and (w.oddzial=_ODDZIAL) and NOT w.test;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			OPEN c_proc;
			  loop2: LOOP
				FETCH c_proc INTO _WYJAZD;
				IF done THEN
					LEAVE loop2;
				ELSE
					-- SELECT z.wyjazd,w.login,count(*) FROM droid_zmng z, v_wyjazdy w 
					-- WHERE z.wyjazd=w.guid and z.status<100 and w.guid=_WYJAZD;
					CALL ht_gasdroid_apply('WYJAZD',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);
				END IF;
			END LOOP;
			CLOSE c_proc;
			SELECT 0 as status, "OK" as info;
		END;
		 
	 END IF;

	 IF _MODE = 'WYJAZD' THEN 
		SET @ht_gasdroid_apply_result := -1;
		IF IFNULL(_WYJAZD,'')='' THEN
			SET @ht_gasdroid_apply_result := -2;
			SELECT @ht_gasdroid_apply_result as status, "wyjazd musi byc okreslony!" as info;
			LEAVE SPROC;
		END IF;
		CALL ht_gasdroid_apply('INIT',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);
		UPDATE crm_commisions SET status=3 WHERE guid=_WYJAZD;

		BEGIN
			DECLARE _GUID VARCHAR(38) DEFAULT '';
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE c_proc CURSOR FOR
				SELECT zmngguid FROM droid_zmng WHERE wyjazd=_WYJAZD and status<4;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			OPEN c_proc;
			  loop1: LOOP
				FETCH c_proc INTO _GUID;
				IF done THEN
					LEAVE loop1;
				ELSE
					call ht_gasdroid_apply('GUID',_WYJAZD,_GUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);
				END IF;
			END LOOP;
			CLOSE c_proc;
			SELECT max(autoNrZS),max(autoNrFV),max(autoNrWZ) from droid_zmng WHERE wyjazd=_WYJAZD INTO @nrZS,@nrFV,@nrWZ;
			-- docelowo: UPDATE droid_users set autoNrZS=@nrZS,autoNrFV=@nrFV,autoNrWZ=@nrWZ WHERE osobaguid=@kierowca;
			UPDATE droid_users set autoNrZS=GREATEST(@nrZS+1,autoNrZs),autoNrFV=GREATEST(@nrFV+1,autoNrFv),autoNrWZ=GREATEST(@nrWZ+1,autoNrWZ) WHERE osobaguid=@kierowca;
			SELECT 0 as status, "OK" as info;
		END;
	END IF;
	IF _MODE = 'internal.create.temp' THEN
		DROP TEMPORARY TABLE IF EXISTS t_opng;
		DROP TEMPORARY TABLE IF EXISTS t_oppo;
		DROP TEMPORARY TABLE IF EXISTS t_zmng;

		CREATE TEMPORARY TABLE t_opng like opng;
		ALTER TABLE t_opng DROP COLUMN idn;
		ALTER TABLE t_opng add column idn int not null default 0 first;

		CREATE TEMPORARY TABLE t_oppo like oppo;
		ALTER TABLE t_oppo DROP COLUMN idn;
		ALTER TABLE t_oppo add column idn int not null default 0 first;
	END IF;


	IF _MODE = 'GUID' THEN
		IF _ZMNGGUID='' THEN LEAVE SPROC; END IF;

		CALL ht_gasdroid_apply('internal.create.temp',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);
		
		CALL ht_gasdroid_apply('CREATE.op',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);
		CALL ht_gasdroid_apply('UPDATE.zm',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);
		UPDATE droid_zmng set status=status+100 WHERE wyjazd=_WYJAZD and zmngguid=_ZMNGGUID;

		DROP TEMPORARY TABLE IF EXISTS t_opng;
		DROP TEMPORARY TABLE IF EXISTS t_oppo;
		DROP TEMPORARY TABLE IF EXISTS t_zmng;

		CALL ht_gasdroid_apply('CREATE.ks',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);

		SET @ht_gasdroid_apply_result := -1;
	END IF;

	IF _MODE = 'UPDATE.zm' THEN
	
	-- TODO: status, warto�ci
	
		UPDATE TowrPo t, zmpo zp,t_oppo p SET t.zamowiono_oo = t.zamowiono_oo - zp.ilosc 
		WHERE t.idntowr=zp.idntowr and p.guidzm=zp.guid and t.magazyn=zp.idnmagazyn;

		UPDATE zmpo zp,t_oppo p set 
			zp.zrealizowano=@zr:=(SELECT sum(o.ilosc) FROM oppo o where o.guidzm=zp.guid),
			zp.ilosc=@zr,
			zp.wartnet=zp.cenanet*@zr,
			zp.wartnetwal=zp.cenanet*@zr
			-- TODO: vat i brt
		WHERE zp.guid=p.guidzm;
		
		CREATE TEMPORARY TABLE t_zmng 
		SELECT zp.idnng as guid,max(p.exported) as powod_niezrealizowania,sum(zp.wartnet) as netto,
				sum(zp.wartnetwal) as nettowal ,sum(zp.ilosc) as ilosc, sum(zp.ilosc<=zp.zrealizowano) as ilepozzreal
		FROM zmpo zp,t_oppo p WHERE p.guidzm=zp.guid
		GROUP BY zp.idnng;  

		UPDATE zmng n,t_zmng t set 
			n.ilepozzreal=t.ilepozzreal,n.netto=t.netto,n.nettowal=t.nettowal,
			n.powod_niezrealizowania=IF(t.ilosc=0, t.powod_niezrealizowania,0),
			n.status=IF(t.ilosc=0,8,0)
		WHERE n.guid=t.guid;
		
	END IF;

	IF _MODE = 'DELETE.op' THEN
		-- do u�ytku wewn�trznego - INIT musi by wywo�any przy zewn�trznym wywo�aniu, @magazyn musi by okre�lony

		UPDATE TowrPo t, oppo p SET t.ilosc=t.ilosc+p.ilosc WHERE t.idntowr=p.idntowr and t.magazyn=@zmagazynu and p.idnoper=_ZMNGGUID;
		-- CALL ht_gasdroid_apply('UPDATE.zm',_WYJAZD,_ZMNGGUID,'','','','');
		SET _MMGUID=_PARAM_B;
		DELETE FROM opng where guid in (_ZMNGGUID,_MMGUID);
		DELETE FROM oppo where idnoper in (_ZMNGGUID,_MMGUID);
		DELETE FROM oppo_mag where idnoper in (_ZMNGGUID,_MMGUID);
		DELETE FROM opng_vat where idnoper in (_ZMNGGUID,_MMGUID);

	END IF;
	IF _MODE = 'internal.getkontrah' THEN

		UPDATE t_opng t, kontrah k SET 
			t.platnikguid=k.platnikguid,t.kontrsymbol=k.symbol,t.kontrnazwa=k.nazwa,t.kontrnip=k.nip,
			t.kontradres=CONCAT(IFNULL(CONCAT(k.ulica,', '),''),ifnull(k.zipcode,''),' ',k.nazwamiasta),
			t.katcol0=k.katcol0,t.katcol1=k.katcol1,t.katcol2=k.katcol2,t.katcol3=k.katcol3,t.katcol4=k.katcol4,t.kontofk=k.kontofk,
			t.kontrpodzialnip=k.podzialnip
			-- TODO: sprawdzic: odbierajacy, UwagiNaFV, uwagi,  magazyn_akwizytora
			-- TODO: sprawd�: t.uwagi, t.warunki_dostawy

		WHERE t.kontrguid=k.guid;
	END IF;

	IF _MODE = 'CREATE.op' THEN

		IF IFNULL(_WYJAZD,'')='' THEN
			SET @ht_gasdroid_apply_result := -2;
			SELECT @ht_gasdroid_apply_result as status, "wyjazd musi byc okreslony!" as info;
			LEAVE SPROC;
		END IF;
		
		SELECT count(*) from droid_zmpo where zmngguid=_ZMNGGUID and zrealizowano<>0  INTO @ilepozzreal;
		
		CALL ht_gasdroid_apply('INIT',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);

		SET _MMGUID=concat('M',md5(_ZMNGGUID));
		SELECT idnmagazynu FROM Magazyny where primarymag=1 and symbol=@oddzial ORDER BY idnmagazynu LIMIT 1 INTO @zmagazynu;
		CALL ht_gasdroid_apply('DELETE.op',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_MMGUID);

		-- TODO: sprawdzac, czy jest ju� taka operacja
		-- DEBUG:
		IF ifnull(@zmagazynu,0)=0 THEN
			SET @ht_gasdroid_apply_result := -2;
			SELECT @ht_gasdroid_apply_result as status, concat("problem z okresleniem magazynu i oddzialu:",@oddzial) as info;
			LEAVE SPROC;
		END IF;

		
		-- TODO: ujednolicenie miejsca pobierania maski
		-- SELECT concat(nrprefix,'/$/',@oddzial,'/',right(year(current_date),2)) as maska FROM droid_users where osobaguid=@kierowca INTO @maska;
-- jest unique na osobie i loginie
		SELECT concat(MID(nrprefix,2,3),'/$/',@oddzial,'/',right(ifnull(year(_DATA),year(CURRENT_DATE)),2)) as maska FROM droid_users where osobaguid=@kierowca INTO @maska;
		
		INSERT INTO t_opng (rodzaj,zmagazynu,domagazynu,guid,nrdokfin,nrdokmag,datawystaw,brutto,
			sposobplatn,kontrguid,platnikguid,kontrklasacenowa,rozrachunek,akwizytorGUID,wyjazdGUID,remotetime,info4)
		SELECT
			p.rodzajdoksprzed as rodzaj,
--			ifnull(if(zn.magazynwys<>0,zn.magazynwys,zn.idnmagazyn),if(k.magazyn_akwizytora=0,@zmagazynu,k.magazyn_akwizytora)) as zmagazynu,
			if(k.magazyn_akwizytora=0,@zmagazynu,k.magazyn_akwizytora) as zmagazynu,
			0 as domagazynu,
			n.zmngguid as guid,
			CONCAT(IF(p.rodzajdoksprzed=0, 'P', 'F'),replace(@maska,'$',lpad(if(p.rodzajdoksprzed=0, n.autoNrZS,if(p.rodzajdoksprzed=1, n.autoNrFV,NULL)),5,'0') ) ) as nrdokfin,
			CONCAT('M', replace(@maska,'$',lpad(if(p.rodzajdoksprzed=10, n.autoNrWZ,''),5,'0') ) ) as nrdokmag,
			-- TODO: apk:alocaltime powinien byc ustawiany na czas wykonania operacji
			if(p.alocaltime='0000-00-00 00:00:00',date(p.stime),date(p.alocaltime)) as datawystaw,
			sum(p.wartosc) as brutto, IFNULL(MAX(zn.sposobplatn),k.sposplat) as sposobplatn,
			n.kontrguid,k.platnikguid,ifnull(zn.klasacenowa,k.klasacenowa) as kontrklasacenowa,p.rodzajdoksprzed<>10 as rozrachunek,
			@akwizytor as akwizytorGUID,_WYJAZD,n.alocaltime as remotetime, concat(n.alocaltime,' GPS:',n.latitude,',',n.longitude) as info4
		FROM droid_zmng n
		INNER JOIN droid_zmpo p on n.zmngguid=p.zmngguid
		LEFT JOIN kontrah k on k.guid=n.kontrguid
		LEFT JOIN zmpo zp on zp.guid=p.zmpoguid
		LEFT JOIN zmng zn on zn.guid=zp.idnng
		WHERE n.zmngguid=_ZMNGGUID
		GROUP BY guid;

--		SELECT n.kontrklasacenowa,c.czy_ceny_brt from t_opng n, klasycen c where c.idn=n.kontrklasacenowa INTO @idncennik,@cenybrutto;
		SELECT n.kontrklasacenowa,if(n.rodzaj=10,c.czy_ceny_brt,1) from t_opng n, klasycen c where c.idn=n.kontrklasacenowa INTO @idncennik,@cenybrutto;
-- ceny netto tylko dla WZ-ek - dla fiskalnych zawsze tak jak jest na dokumencie 

		-- TODO t_opng_vat->t_opng
		-- netto,vat,brutto,nettowal,bruttowal
		UPDATE t_opng o, operdoc d SET
			o.datasprzed=o.datawystaw,o.datawplywu=o.datawystaw,o.data_vat=o.datawystaw,o.rodzajdowodu='S',
			o.ckwota=if(o.rozrachunek,o.brutto,0),o.ckwotawal=if(o.rozrachunek,o.brutto,0),
			o.rv_id=d.rv_id,o.grupaoper=d.grupa,
			o.kurs=1,o.kurs_rozliczen=1,o.cwn=1,o.przeliczenie_B_N=@cenybrutto, 
			o.ugrpguid=@oddzial,o.gruparozrach=1,
			o.dataplatnosci=date_add(o.datawystaw,interval ifnull((select pl.dni from platnosc pl where pl.idn=o.sposobplatn),0) day)
			-- o.paragon_printed=(o.rodzaj in(0,1))
		WHERE d.rodzaj=o.rodzaj;
		
		-- TODO idnuser=
		CALL ht_gasdroid_apply('internal.getkontrah',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);
		
		SELECT n.kontrklasacenowa,if(n.rodzaj=10,c.czy_ceny_brt,1) from t_opng n, klasycen c where c.idn=n.kontrklasacenowa INTO @idncennik,@cenybrutto;
		
		INSERT INTO t_oppo (rodzaj,lp,guid,idnoper,guidzm,datawystaw,cenanet,wartbrt,rodzaj_przeliczenia,idncennik,cenabrt,ilosc,idntowr,towrsymb,towrnazwa,
									jednostka,idnvat,usluga,cena_minimalna,pkwiu,waga_jedn,waga,kat5,kat6,kat7,kat8,kat9,remotetime,exported)
		SELECT
			p.rodzajdoksprzed as rodzaj,p._id as lp,p.zmpoguid as guid,p.zmngguid as idnoper,ifnull(zp.guid,'') as guidzm, @datawystaw as datawystaw,
			ifnull(zp.cenanet,0) as cenanet,
			@wartbrt:=if(p.rodzajdoksprzed=10,ifnull(zp.cenabrt*p.zrealizowano,p.wartosc),p.wartosc) as wartbrt,
			if(@cenybrutto,5,0) as rodzaj_przeliczenia, 
			ifnull(zp.idncennik,@idncennik) as idncennik, 
			if(p.rodzajdoksprzed=10,ifnull(zp.cenabrt,_rnd2(@wartbrt/p.zrealizowano)), _rnd2(@wartbrt/p.zrealizowano)) as cenabrt,
			p.zrealizowano as ilosc,p.towrguid as idntowr,
			t.symbol as towrsymb,t.nazwa as towrnazwa,t.jednostka as jednostka,t.vat as idnvat,t.usluga ,t.cena_minimalna,t.pkwiu,
			t.waga as waga_jedn,_rnd2(t.waga*p.zrealizowano) as waga,
			t.katcol0 as kat5,t.katcol1 as kat6,t.katcol2 as kat7,t.katcol3 as kat8,t.katcol4 as kat9,p.alocaltime as remotetime, p.powod_niezrealizowania as exported
		FROM droid_zmng n
		INNER JOIN droid_zmpo p on n.zmngguid=p.zmngguid
		LEFT JOIN zmpo zp on zp.guid=p.zmpoguid
		LEFT JOIN TowrNg t on t.guid=p.towrguid
		WHERE n.zmngguid=_ZMNGGUID;
--		AND p.zrealizowano>0;

		UPDATE t_opng n,t_oppo p SET
			p.datasprzed=n.datasprzed,p.datawplywu=n.datawplywu,p.datawystaw=n.datawystaw,p.idnoperfin=n.guid,p.zrealizowana=0,p.idncennik=if(p.idncennik=0,n.kontrklasacenowa,p.idncennik),
			p.zmagazynu=n.zmagazynu,p.domagazynu=n.domagazynu,p.kat0=n.katcol0,p.kat1=n.katcol1,p.kat2=n.katcol2,p.kat3=n.katcol3,p.kat4=n.katcol4,guid_zmpo_mm=guidzm
		;
		 -- TODO: lp
		SET @lp:=0;
		UPDATE t_oppo p SET	p.lp=@lp:=@lp+1 ORDER BY p.lp;
		-- Dla WZ nie wystawianych na podstawie zam�wienia bierzemy zawsze z ht_kontrah_ceny
		 
		UPDATE t_opng n,t_oppo p, ht_kontrah_ceny c SET
			p.cenanet=c.cena,p.cenabrt=c.cena  /* !! tak - to nie blad!! */	,p.rodzaj_przeliczenia=if(c.czy_ceny_brt,5,0)
		WHERE  n.kontrguid=c.kontrguid and p.idntowr=c.idntowr and p.idnoper=n.guid and n.rodzaj=10 and p.guidzm='';
		 
		UPDATE t_oppo p SET
			p.wartnet=@wartnet:=_Rnd2(p.wartbrt/(1+(SELECT v.value FROM v_erp_vat v WHERE v.id=p.idnvat))),
			p.wartvat=wartbrt-@wartnet,
			p.wartnetwal=@wartnet,
			p.cenanet=_Rnd2(@wartnet/p.ilosc),
			p.cenanetwalzrab=_Rnd2(@wartnet/p.ilosc)
		WHERE p.rodzaj_przeliczenia in (3,4,5);
		
		UPDATE t_oppo p SET
			p.wartnet=@wartnet:=_Rnd2(p.ilosc*p.cenanet),
			p.cenanetwalzrab=p.cenanet,
			p.wartbrt=@wartbrt:=_Rnd2(@wartnet*(1+(SELECT v.value FROM v_erp_vat v WHERE v.id=p.idnvat))),
			p.wartvat=@wartbrt-@wartnet,
			p.wartnetwal=@wartnet,
			p.cenabrt=_Rnd2(@wartbrt/p.ilosc)
		WHERE p.rodzaj_przeliczenia in (0);
		-- przechowuj�  utworzone na  p�zniej, by zachowa� kolejno�� idn - najpierw MM potem ST

		IF @ilepozzreal=0  THEN
			-- t_oppo przygotowane do uaktualnienia zam�wie�, ale poniewa� nie by�o pozycji 
			LEAVE SPROC;
		END IF;


		DROP TEMPORARY TABLE IF EXISTS t_opng_;
		DROP TEMPORARY TABLE IF EXISTS t_oppo_;
		CREATE TEMPORARY TABLE t_opng_ select * from t_opng;
		CREATE TEMPORARY TABLE t_oppo_ select * from t_oppo;
		SELECT zmagazynu FROM t_opng INTO @magazyn_akwizytora;
		
		IF (@zmagazynu<>@magazyn_akwizytora) THEN
		-- robimy MM-k�
			UPDATE t_opng SET
				zmagazynu=@zmagazynu,domagazynu=@magazyn_akwizytora,
			-- TODO: zastanowi� si� na numeracj� MM
				nrdokmag=IF(rodzaj=10,nrdokmag,nrdokfin),
				nrdokfin='',rodzaj=9,grupaoper=2 ,rv_id=0,
				guid=_MMGUID,rozrachunek=0,ckwota=0,ckwotawal=0;
				
			UPDATE t_oppo SET
				zmagazynu=@zmagazynu,domagazynu=@magazyn_akwizytora,rodzaj=9,
				guid=concat('M',md5(guid)),guidzm='',idnoper=_MMGUID,idnoperfin=_MMGUID;
			INSERT INTO opng select * from t_opng;
			INSERT INTO oppo select * from t_oppo WHERE ilosc>0;
			CALL erp_vat_tools('t_opng_vat.Build', _MMGUID, '', '', '', '');
			CALL erp_vat_tools('Update.oper', _MMGUID, '', '', '', '');
			CALL erp_vat_tools('Update.oper.opng_vat.to.opng', _MMGUID, '', '', '', '');
			CALL ht_oppo_mag_tool('UPDATE_OPNG_REC',  _MMGUID, '', '', '');
		END IF;
		
		INSERT INTO opng select * from t_opng_;DROP TEMPORARY TABLE IF EXISTS t_opng_;
		INSERT INTO oppo select * from t_oppo_ WHERE ilosc>0;DROP TEMPORARY TABLE IF EXISTS t_oppo_;
		
		CALL erp_vat_tools('t_opng_vat.Build', _ZMNGGUID, '', '', '', '');
		CALL erp_vat_tools('Update.oper', _ZMNGGUID, '', '', '', '');
		CALL erp_vat_tools('Update.oper.opng_vat.to.opng', _ZMNGGUID, '', '', '', '');
		CALL ht_oppo_mag_tool('UPDATE_OPNG_REC',  _ZMNGGUID, '', '', '');
		
		UPDATE ht_kontrah_info h,opng n set h.zam_prev_date=n.datawystaw WHERE n.kontrguid=h.kontrguid and n.guid=_ZMNGGUID;	

		UPDATE TowrPo t, t_oppo p SET t.ilosc=t.ilosc-p.ilosc WHERE t.idntowr=p.idntowr and t.magazyn=@zmagazynu;
		UPDATE t_oppo SET guidzm=guid_zmpo_mm; -- dla UPDATE.zm

		SET @ht_gasdroid_apply_result := -1;
	END IF;

	IF _MODE = 'CREATE.ks' THEN
		select n.kontrguid,(select p.rodzajdoksprzed from droid_zmpo p where p.zmngguid=n.zmngguid limit 1) from droid_zmng n WHERE n.zmngguid=_ZMNGGUID limit 1 INTO @kontrguid,@rodzajopng;
		SELECT count(*),sum(rozliczono) from droid_zaplaty WHERE wyjazd=_WYJAZD and kontrguid=@kontrguid and status<4 INTO @ileKP,@kwota;
		IF (@ileKP=0) or (@kwota=0) THEN
			LEAVE SPROC;
		END IF;

		DROP TEMPORARY TABLE IF EXISTS t_opng;
		CREATE TEMPORARY TABLE t_opng like opng;
		ALTER TABLE t_opng DROP COLUMN idn;
		ALTER TABLE t_opng add column idn int not null default 0 first;
		-- SET @KSGUID:=concat('K',md5(_ZMNGGUID ));
		SET @KSGUID:=LEFT(concat('K',_ZMNGGUID ),38);
		DELETE FROM opng WHERE GUID=@KSGUID;

		INSERT INTO t_opng (rodzaj,nrkasy,guid,datawystaw,zaplacono, kontrguid,platnikguid,rozrachunek,akwizytorGUID,wyjazdGUID,remotetime)
		SELECT
			20 as rodzaj,
			@zmagazynu as nrkasy,
			@KSGUID as guid,
			MAX(if(z.alocaltime='0000-00-00 00:00:00',date(z.stime),date(z.alocaltime))) as datawystaw,
			sum(z.rozliczono) as zaplacono,
			z.kontrguid,k.platnikguid,1 as rozrachunek,
			@akwizytor as akwizytorGUID,_WYJAZD,
			z.alocaltime as remotetime
		FROM droid_zaplaty z
		LEFT JOIN kontrah k ON k.guid=z.kontrguid
		-- WHERE z.wyjazd=_WYJAZD and z.kontrguid=@kontrguid and z.status<4
		WHERE z.wyjazd=_WYJAZD and z.zmngguid=_ZMNGGUID and z.status<4
		-- GROUP BY z.kontrguid;
		GROUP BY z.zmngguid
		HAVING zaplacono>0;
		
		-- UPDATE droid_zaplaty z SET z.status=z.status+100 WHERE z.wyjazd=_WYJAZD and z.kontrguid=@kontrguid and z.status<4;
		UPDATE droid_zaplaty z SET z.status=z.status+100 WHERE z.wyjazd=_WYJAZD and z.zmngguid=_ZMNGGUID and z.status<4;
		
		CALL ht_gasdroid_apply('internal.getkontrah',_WYJAZD,_ZMNGGUID,_DATA,_ODDZIAL,_PARAM_A,_PARAM_B);

		UPDATE t_opng o, operdoc d SET
			o.datasprzed=o.datawystaw,o.datawplywu=o.datawystaw,o.rodzajdowodu=d.rodzajdowodu,
			o.ckwota=o.zaplacono,o.ckwotawal=o.zaplacono,
			o.rv_id=d.rv_id,o.grupaoper=d.grupa,
			o.kurs=1,o.kurs_rozliczen=1,o.cwn=0,o.ugrpguid=@oddzial,o.gruparozrach=5,
			o.dataplatnosci=o.datawystaw
			-- TODO opis za co? czy przy rozliczeniu
		WHERE d.rodzaj=o.rodzaj;

	-- SELECT datawystaw FROM t_opng into @datawystaw;
	--	SET @nrraportu:=(select o.nrraportu from opng o where o.nrkasy=@zmagazynu and o.rodzaj=22 and o.datawystaw  between  date_sub(@datawystaw,interval 3 day) and @datawystaw order by o.datawystaw desc limit 1);
		SET @maskaKP=RIGHT(@maska,7);

		-- select o.nrraportu from t_opng t,opng o where o.nrkasy=t.nrkasy and o.rodzaj=20 and o.datawystaw  between  date_sub(t.datawystaw,interval 3 day) and t.datawystaw order by o.datawystaw desc limit 1 INTO @nrraportu;
		-- biezacy numer raportu
		SELECT REPLACE(@maskaKP,'$',LPAD(n.nr,3,'0')) FROM numdok n, t_opng t WHERE n.rodzaj=22 AND n.magazyn=t.nrkasy INTO @nrraportu;
		
		INSERT INTO opng 	SELECT * FROM t_opng;
		
		UPDATE opng t,numdok m SET
			t.nrdokkas=REPLACE(@maskaKP,'$',LPAD(m.nr+1,5,'0') ),
			m.nr=m.nr+1,
			t.nrraportu =@nrraportu
		WHERE m.magazyn=t.nrkasy and m.rodzaj=t.rodzaj and t.guid=@KSGUID;

		SELECT platnikguid from t_opng INTO @platnikguid;

		DROP TEMPORARY TABLE t_opng;

		SET @ht_gasdroid_apply_result := -1;

		DROP TEMPORARY TABLE IF EXISTS t_rozrach;
		CREATE TEMPORARY TABLE t_rozrach like rozrach;
		ALTER TABLE t_rozrach DROP COLUMN idn;
		ALTER TABLE t_rozrach add column idn int not null default 0 after odsetki;
		
		INSERT IGNORE INTO t_rozrach (idnoper,idnoper2,kwota,kwotawal,platnikguid)
		SELECT @KSGUID,if(z.idnoper=-1,_ZMNGGUID,n.guid),-z.rozliczono,-z.rozliczono,@platnikguid
		FROM droid_zaplaty z 
		LEFT JOIN opng n on n.idn=z.idnoper
		WHERE z.wyjazd=_WYJAZD AND z.zmngguid=_ZMNGGUID AND (z.idnoper>0 OR @rodzajopng<>10);

		INSERT  IGNORE  INTO t_rozrach (idnoper2,idnoper,kwota,kwotawal,platnikguid)
		SELECT @KSGUID,if(z.idnoper=-1,_ZMNGGUID,n.guid),z.rozliczono,z.rozliczono,@platnikguid
		FROM droid_zaplaty z 
		LEFT JOIN opng n on n.idn=z.idnoper
		WHERE z.wyjazd=_WYJAZD AND z.zmngguid=_ZMNGGUID AND (z.idnoper>0 OR @rodzajopng<>10);
		
		DELETE FROM rozrach WHERE idnoper=@KSGUID;
		DELETE FROM rozrach WHERE idnoper2=@KSGUID;

		INSERT IGNORE INTO rozrach SELECT * from t_rozrach;
		CALL ht_rozrach_rozlicz('ROZLICZ.CALC.OPNG', @KSGUID, '', '', '', '');
		CALL ht_rozrach_rozlicz('ROZLICZ.CALC.OPNG.RELATED', @KSGUID, '', '', '', '');
		
		DROP TEMPORARY TABLE t_rozrach;

	END IF;
	IF _MODE = 'internal.recalc.WZ.centralne' THEN
--  call ht_gasdroid_apply('internal.recalc.WZ.centralne','','','','','2012-09-01','2012-09-30');
		IF _Param_A='' THEN
			SET _Param_A=date_sub(current_date,interval 8 day);
			SET _Param_B=current_date;

		END IF;

		create temporary table twz
		select 
		o.idn,o.datawplywu,o.idnoper,n.nrdokmag,n.kontrsymbol,o.cenanet,c.cena,o.wartnet
		from oppo o
		inner join opng n on n.guid=o.idnoper
		left join cennik c on c.idntowr=o.idntowr and c.klasa=o.idncennik and o.datawplywu between c.waznoscod and c.waznoscdo
		where o.datawplywu between _Param_A and _Param_B and o.rodzaj=10 and o.idncennik=7 and c.cena<>o.cenanet 
		and o.idnwz=''
		;
		alter table twz add unique (idn);
		
		update oppo o,twz
		set o.cenanet=twz.cena,
		o.wartnet=@wartnet:=_Rnd2(o.ilosc*twz.cena),
		o.cenanetwalzrab=twz.cena,
		o.wartbrt=@wartbrt:=_Rnd2(@wartnet*(1+(SELECT v.value FROM v_erp_vat v WHERE v.id=o.idnvat))),
		o.wartvat=@wartbrt-@wartnet,
		o.wartnetwal=@wartnet,
		o.cenabrt=_Rnd2(@wartbrt/o.ilosc)
		where o.idn=twz.idn;
		
		BEGIN
			DECLARE _GUID VARCHAR(38) DEFAULT '';
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE c_proc CURSOR FOR
				SELECT distinct idnoper FROM twz;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			OPEN c_proc;
			  loop1: LOOP
				FETCH c_proc INTO _GUID;
				IF done THEN
					LEAVE loop1;
				ELSE
					CALL erp_vat_tools('t_opng_vat.Build', _GUID, '', '', '', '');
					CALL erp_vat_tools('Update.oper', _GUID, '', '', '', '');
					CALL erp_vat_tools('Update.oper.opng_vat.to.opng', _GUID, '', '', '', '');
					CALL ht_oppo_mag_tool('UPDATE_OPNG_REC',  _GUID, '', '', '');
				END IF;
			END LOOP;
			CLOSE c_proc;
		END;
		SELECT * from twz;
		DROP TEMPORARY TABLE twz;
	END IF;
	
END$$

DELIMITER ;

/*
set @zmguid='';
set @awyjazd='{53110ED6-4072-4030-A9A6-40B3C76651EA}';
CALL ht_gasdroid_apply('WYJAZD',@awyjazd,'','','','','');

CALL ht_gasdroid_apply('CREATE.op',@awyjazd,@zguid,'','','','');
CALL ht_gasdroid_apply('UPDATE.zm',@awyjazd,@zguid,'','','','');

CALL ht_gasdroid_apply('INIT',@awyjazd,@zguid,'','','','');
SELECT @oddzial,@kierowca;
CALL ht_gasdroid_apply('CREATE.ks',@awyjazd,@zguid,'','','','');

*/
