DELIMITER $$

DROP PROCEDURE IF EXISTS `qs_get_kontrah`$$


CREATE DEFINER=`root`@`localhost` PROCEDURE `qs_get_kontrah`(
	IN _MODE VARCHAR(50),
	_Param_A VARCHAR(38)
	)
-- qs_get_kontrah('1','IM_00003e3b9e5336685200ae85d21b4f5e');	
BEGIN
/*
	Proc zwracajaca dane kontrahenta na podstawie nr telefonu albo GUIDU
*/
	DROP TEMPORARY TABLE IF EXISTS kg;
	IF _MODE = '0' THEN
		CREATE TEMPORARY TABLE kg 
		SELECT k.guid as kontrGUID,kt.osobaguid,_VarInt(0) as ostidn
--		,_VarInt(0) as ostidnMIX11,_VarInt(0) as ostidnL10,_VarInt(0) as ostidnP11
		FROM kontakty kt, kontrah k
		WHERE k.guid=kt.kontrguid AND k.deleted=0 AND REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(kt.adres,' ',''),')',''),'0-',''),'(',''),'+48','') = REPLACE(_Param_A,'+48','')
		LIMIT 5;
	END IF;	
	
	IF _MODE = '1' THEN
		CREATE TEMPORARY TABLE kg 
		SELECT _Param_A as kontrGUID,'' as osobaguid,
		(SELECT max(o.idn) from  oppo o, opng n	WHERE n.kontrGUID=_Param_A AND n.rodzaj IN (0,1,10) and n.deleted=0 AND o.idnoper=n.guid) as ostidn
--		,_VarInt(0) as ostidnMIX11,_VarInt(0) as ostidnL10,_VarInt(0) as ostidnP11
		;
	END IF;	

	UPDATE kg SET 
	ostidn=(SELECT max(o.idn) from  oppo o, opng n	WHERE kg.kontrGUID=n.kontrGUID AND n.rodzaj IN (0,1,10) and n.deleted=0 AND o.idnoper=n.guid)
/*	,
	ostidnMIX11=(SELECT max(o.idn) from  oppo o, opng n	WHERE kg.kontrGUID=n.kontrGUID AND n.rodzaj IN (0,1,10) and n.deleted=0 AND o.idnoper=n.guid AND o.idntowr='MIX11'),
	ostidnL10  =(SELECT max(o.idn) from  oppo o, opng n	WHERE kg.kontrGUID=n.kontrGUID AND n.rodzaj IN (0,1,10) and n.deleted=0 AND o.idnoper=n.guid AND o.idntowr='L10'),
	ostidnP11  =(SELECT max(o.idn) from  oppo o, opng n	WHERE kg.kontrGUID=n.kontrGUID AND n.rodzaj IN (0,1,10) and n.deleted=0 AND o.idnoper=n.guid AND o.idntowr='P11')
*/	;

	SET @cennik:=NULL;
	SELECT k.ugrpguid,k.areaguid,k.treenode FROM kontrah k,kg WHERE kg.kontrguid=k.guid LIMIT 1 INTO @oddzial,@trasa,@ktreenode; -- TODO - jeĹ›li jest wiÄ™cej to co?
	
	SELECT k.idn,if(k.czy_ceny_brt,1,1.23) as brt FROM klasycen k WHERE k.param1=@trasa and k.param3=@ktreenode 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') LIMIT 1 into @cennik,@brt;
	END IF;

	SELECT 
		if(ifnull(kg.osobaGUID,'')<>'',kg.osobaGUID,k.GUID) as guid,
		-- GUID, platnikGUID, nazwa, nip, NazwaMiasta, zipcode, ulica, katcol0, katcol1, ugrpGUID, symbol, sposplat, rodzaj2
		k.platnikGUID,
		k.nazwa,
		k.nip,
		k.NazwaMiasta,
		k.zipcode,
		k.ulica,
		@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 adresDostawy,	
		k.katcol0, k.katcol1,k.katcol4 as handlowiec,k.treenode,
		k.ugrpGUID, k.symbol, k.sposplat, k.rodzaj2,
		concat(o.imie1,' ',o.nazwisko) as osoba,
		eds.nazwa as oddzial,
		ean.nazwa as trasa,
		ean.guid as trasa_guid,
		-- if(k.katcol1=1,'tak','nie') as czyindywidualny,
--		concat(ifnull(k.opis_dzialalnosci,''),'\n',ifnull(ean.info,'')) as info,
		k.uwagi as info,
		(SELECT p.idntowr FROM oppo p	 where p.idn=kg.ostidn) as ost_towar,
		round((SELECT p.ilosc FROM oppo p	 where p.idn=kg.ostidn)) as ost_ilosc,
		round((SELECT p.cenabrt FROM oppo p	 where p.idn=kg.ostidn),2) as ost_cena,
/*		round((SELECT p.ilosc FROM oppo p	 where p.idn=kg.ostidnMIX11)) as ost_iloscMIX11,
		round((SELECT p.cenabrt FROM oppo p	 where p.idn=kg.ostidnMIX11),2) as ost_cenaMIX11,
		round((SELECT p.ilosc FROM oppo p	 where p.idn=kg.ostidnL10)) as ost_iloscL10,
		round((SELECT p.cenabrt FROM oppo p	 where p.idn=kg.ostidnL10),2) as ost_cenaL10,
		round((SELECT p.ilosc FROM oppo p	 where p.idn=kg.ostidnP11)) as ost_iloscP11,
		round((SELECT p.cenabrt FROM oppo p	 where p.idn=kg.ostidnP11),2) as ost_cenaP11,
*/
		round(ifnull((select cenaObl from ht_kontrah_ceny htc where htc.kontrguid=kg.kontrguid and htc.idntowr='L10'  ),
				(select cena from cennik c where c.klasa=@cennik and c.idntowr='L10' ORDER BY waznoscod DESC LIMIT 1))) as cenaL10,
		round(ifnull((select cenaObl from ht_kontrah_ceny htc where htc.kontrguid=kg.kontrguid and htc.idntowr='MIX11'),
				(select cena from cennik c where c.klasa=@cennik and c.idntowr='MIX11' ORDER BY waznoscod DESC LIMIT 1))) as cenaMIX11,
		round(ifnull((select cenaObl from ht_kontrah_ceny htc where htc.kontrguid=kg.kontrguid and htc.idntowr='P11'  ),
				(select cena from cennik c where c.klasa=@cennik and c.idntowr='P11' ORDER BY waznoscod DESC LIMIT 1))) as cenaP11,
		(SELECT p.towrsymb FROM oppo p where p.idn=kg.ostidn) as towary_kupione
		
		
	FROM kg 	
	LEFT JOIN kontrah k ON k.GUID=kg.kontrGUID	
	LEFT JOIN osoby o ON o.GUID=kg.osobaGUID
	LEFT JOIN erp_area_nodes a ON a.kontrguid=kg.kontrguid
	LEFT JOIN geo_int_adr_link g ON g.objguid=a.guid
	LEFT JOIN erp_area_nodes ean ON ean.GUID=k.areaGUID
	LEFT JOIN erp_division_schema eds ON k.UGrpGUID=eds.GUID
	;


END$$

DELIMITER ;
DELIMITER $$

DROP PROCEDURE IF EXISTS `qs_get_wyjazdy`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `qs_get_wyjazdy`(
	IN _MODE VARCHAR(50),
	  _nadzien DATE,
	  _kontrGUID VARCHAR(38)
	)
	
BEGIN
/*
	Procedura zwracajaca wyjazdy na podstawie daty i ewentualnie guidu kontrahenta
*/

DECLARE _ugrpGUID VARCHAR(38);
DECLARE _areaGUID VARCHAR(38);

IF _MODE IN ('0','1') THEN
	
	IF _kontrGUID<>'' THEN
	  SELECT ugrpGUID,areaguid FROM kontrah WHERE GUID=_kontrGUID INTO _ugrpGUID,_areaGUID;
	END IF;

	IF IFNULL(_nadzien,'0000-00-00')='0000-00-00' THEN
	  SET _nadzien=CURRENT_DATE;
	END IF;

	SELECT 
	ean.nazwa AS trasa,
	DATE(crm.starttime) AS dzien,
	crm.temat, crm.opis, crm.nrwewn,
	crm.GUID AS wyjazdGUID,
	ean.dzial as oddzial
	FROM crm_commisions crm
	LEFT JOIN erp_area_nodes ean ON ean.GUID=crm.areaGUID
	WHERE crm.rodzaj=5 AND crm.podrodzaj=1 AND crm.deleted=0 
	AND DATE(crm.starttime)=_nadzien 
	AND (
	IF(IFNULL(_ugrpGUID,'') NOT IN ('','ALL'), ean.dzial=_ugrpGUID, TRUE) OR
	IF(IFNULL(_ugrpGUID,'') IN ('WL','GD'), ean.dzial IN ('WL','GD'), FALSE)
	)
	AND IF(IFNULL(_areaGUID,'')<>'', ean.GUID=_areaGUID or _MODE='1', TRUE);
	
	SET @nadzien:=_nadzien;
	SET @areaguid:=_areaguid;
	SET @ugrpguid:=_ugrpguid;
	
END IF;  -- MODE 0

-- CALL qs_get_wyjazdy('0','2012-06-13','{E7C11896-B447-11E1-9E3F-001372373EE4}');


END$$

DELIMITER ;
DELIMITER $$

DROP PROCEDURE IF EXISTS `qs_klasyfikacja`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `qs_klasyfikacja`(IN _MODE VARCHAR(50))
BEGIN
	select symbol from TreeDict where id=400 and symbol like "*|BEZPO%";

/*		symbol<>"*" and 
		not (symbol like "%konkurencja%") and 
		not (symbol like "%centralny%")   and 
		not (symbol like "%us_uga_trans%");
*/

END$$

DELIMITER ;
DELIMITER $$

DROP PROCEDURE IF EXISTS `qs_log`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `qs_log`(
	IN _MODE VARCHAR(50),
	_id_rozmowy VARCHAR(38),
	_kontrGUID VARCHAR(38),
	_operator VARCHAR(38),
	_czas DATETIME,
	_czas_trwania TIME,
	_nrtelefonu VARCHAR(20)
	)
/*
qs_log(kontrguid, nrtelefonu, id rozmowy (guid w logu) , czas, czas trwania, operator)
*/	
	
	
BEGIN
/*
	Proc dodajaca w logu zapis o rozmowie
*/
	
	insert into `log` (useridn, czas, miejsce, czynnosc, info, GUIDlink)
	select _operator, _czas, 90, 20,       
	 concat('Tel: ',_nrtelefonu, '\r', 'Czas trwania: ',_czas_trwania,'\r','ID rozmowy: ',_id_rozmowy),
	 _kontrGUID;
	
	

-- 	CALL qs_log('','QS_123456789','IM_697cac67466e215e782f2e7021ff048c','test','2011-02-20 10:10:10','00:10:01','502264817');
	
	
END$$

DELIMITER ;
DELIMITER $$

DROP PROCEDURE IF EXISTS `qs_new_kontrah2`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `qs_new_kontrah2`(
	IN _MODE VARCHAR(50),
	_GUID VARCHAR(38),
	_nazwa VARCHAR(250),
	_NazwaMiasta VARCHAR(35),
	_zipcode VARCHAR(20),
	_adres VARCHAR(50),
	_nip VARCHAR(20),
	_imie VARCHAR(15),
	_nazwisko VARCHAR(30),
	_nrtelefonu1 VARCHAR(50),
	_nrtelefonu2 VARCHAR(50),
	_oddzial VARCHAR(50),
	_katcol0 VARCHAR(10),
	_katcol1 VARCHAR(10),
	_sposplat VARCHAR(10),
	_rodzaj2 VARCHAR(10),
	_odpowiada VARCHAR(20),
	_areaGUID VARCHAR(38),
	_treenode  VARCHAR(250),
	_handlowiec  VARCHAR(250),
	_uwagi VARCHAR(250),
	_Param_A  VARCHAR(250)
	)
BEGIN
	DECLARE _kontrGUID VARCHAR(38);
	DECLARE _kontakt1GUID VARCHAR(38);
	DECLARE _kontakt2GUID VARCHAR(38);
	
	DECLARE _symbol VARCHAR(38);

	DECLARE _ugrpGUID VARCHAR(38);

	IF NOT EXISTS (SELECT GUID FROM erp_division_schema WHERE symbol=_oddzial) THEN 
		SET _ugrpGUID = 'ALL';
	ELSE
		SET _ugrpGUID = (SELECT GUID FROM erp_division_schema WHERE symbol=_oddzial);
	END IF;

	SET _kontakt1GUID = CONCAT('QS_',MD5(CONCAT('kt1',CURRENT_TIME)));
	SET _kontakt2GUID = CONCAT('QS_',MD5(CONCAT('kt2',CURRENT_TIME)));
	
	

IF _MODE = '0' THEN    -- Proc dodajaca kontrahenta i kontakt do niego

	SET _kontrGUID = CONCAT('QS_',MD5(CONCAT('k',CURRENT_TIME)));
	SET _symbol = CONCAT('',LEFT(_nazwa,35));
	
	SELECT idn FROM klasycen c WHERE c.param1=_areaGUID and c.param3=_treenode INTO @cennik;
	IF ISNULL(@cennik) THEN
		SET @cennik=1;
	END IF;

	INSERT INTO kontrah (GUID, platnikGUID, nazwa, nip, NazwaMiasta, zipcode, ulica, ugrpGUID, symbol, sposplat, rodzaj2, odpowiada,areaGUID,treenode,katcol4,uwagi,katcol3,klasacenowa)
	SELECT _kontrGUID,_kontrGUID,_nazwa,_nip,_NazwaMiasta,_zipcode,_adres,_ugrpGUID,_symbol,
		_sposplat, _rodzaj2, _odpowiada,_areaGUID,_treenode,_handlowiec,_uwagi,2 as status_aktywny,@cennik
	;
	
	IF _nrtelefonu1<>'' THEN
		INSERT INTO kontakty (GUID, kontrGUID, typ_medium, rodzaj, adres, opis)
		SELECT _kontakt1GUID, _kontrGUID,0,0,_nrtelefonu1, 'Telefon';
	END IF;
	
	IF _nrtelefonu2<>'' THEN
		INSERT INTO kontakty (GUID, kontrGUID, typ_medium, rodzaj, adres, opis)
		SELECT _kontakt2GUID, _kontrGUID,2,0,_nrtelefonu2, 'Telefon komórkowy';
	END IF;
	
	
	IF NOT EXISTS (SELECT NazwaMiasta FROM Miasta WHERE NazwaMiasta=_NazwaMiasta) THEN
	
	INSERT INTO Miasta (NazwaMiasta,AlterName,IDNKraju)
	SELECT _NazwaMiasta, _NazwaMiasta, 'PL'
	;
	
	END IF
	;

END IF;  -- MODE 0	
-- 	CALL qs_new_kontrah('0','','test2 nazwa bla bla','Gdynia','01234','ul. betonowa 123','123456789','Grzegorz','Brzeczyszykiewicz','586200000','502264817','SO','1','3','1','1');

IF _MODE = '1' THEN    -- Update danych kontrahenta

	UPDATE kontrah SET  
		nazwa=_nazwa, 
		nip=_nip, 
		NazwaMiasta=_NazwaMiasta,
		zipcode=_zipcode, 
		ulica=_adres, 
		ugrpGUID=_ugrpGUID,
		sposplat=_sposplat, 
		rodzaj2=_rodzaj2,
		areaguid=_areaGUID,
		treenode=_treenode,
		katcol4=_handlowiec,
		katcol3=2,
		uwagi=_uwagi
	WHERE GUID=_GUID;

	SET _kontrGUID=_GUID;	
	
	IF _nrtelefonu1<>'' THEN
		INSERT IGNORE INTO kontakty (GUID, kontrGUID, typ_medium, rodzaj, adres, opis)
		SELECT _kontakt1GUID, _kontrGUID,0,0,_nrtelefonu1, 'Telefon';
	END IF;
	
	IF _nrtelefonu2<>'' THEN
		INSERT IGNORE INTO kontakty (GUID, kontrGUID, typ_medium, rodzaj, adres, opis)
		SELECT _kontakt2GUID, _kontrGUID,2,0,_nrtelefonu2, 'Telefon komórkowy';
	END IF;	
		
		

-- CALL qs_new_kontrah('1','QS_dd2dabf0d50d3c5aac0dae825f25aef5','test zmiany danych','Gdynia','01234','ul. betonowa 123', '123456789', 'Grzegorz', 'Brzeczyszykiewicz', '586200000', '502264817', 'SO','1','3','1','1');
		

END IF;  -- MODE 1	
	
	
END$$

DELIMITER ;
DELIMITER $$

DROP PROCEDURE IF EXISTS `qs_zamowienie2`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `qs_zamowienie2`(
	IN _MODE VARCHAR(50),
	_id_rozmowy VARCHAR(38),
	_kontrGUID VARCHAR(38),
	_idntowr VARCHAR(38),
	_ilosc DOUBLE(16,4),
	_terminrealizacji DATE,
	_nrtelefonu VARCHAR(50),
	_wyjazdGUID VARCHAR(38),
	_ParamA  VARCHAR(250),
	_ParamB  VARCHAR(250),
	_ParamC  VARCHAR(250),
	_ParamD  VARCHAR(250)
	)
BEGIN
/*
	Proc dodajaca zamowienie na podstawie rozmowy
*/
	DECLARE _zmngGUID VARCHAR(38);
	DECLARE _zmpoGUID VARCHAR(38);
	DECLARE _ugrpGUID VARCHAR(38);
	
	SET _zmngGUID = CONCAT('QS_',_id_rozmowy);
	SET _zmpoGUID = CONCAT('QS_',MD5(CONCAT(_id_rozmowy,_idntowr)));
	
	INSERT INTO log SET useridn="QS",ip="QS",guidlink=_zmngGUID,table_link="zmng",
       info=concat("kontr:",_kontrGUID," towr:",_idntowr,":",_VarStr(round(_ilosc))," tel:",_nrtelefonu,
			" na:",_VarStr(_terminrealizacji)," wyjazd:",_VarStr(_wyjazdGUID));

	SELECT oddzial from v_wyjazdy WHERE guid=_wyjazdGUID INTO _ugrpGUID ;

	IF isnull(_ugrpGUID) THEN
		SELECT ugrpGUID FROM kontrah WHERE GUID=_kontrGUID  INTO _ugrpGUID;
	END IF;
	
-- todo co z sytuacja, gdy 	
-- wyszukanie ceny towaru
	CALL ht_gasdroid('TOWAR.cena','','','','','',_idntowr,'','','','','','',_kontrGUID);
	-- SELECT @cena, @cena_minimalna
	
	
	INSERT IGNORE INTO zmng (GUID, kontrGUID, kontrsymbol, nrzamw, rodzaj, rodzaj2, idnmagazyn, MagazynWys, 
					  przeliczenie_B_N, datawystaw, datawplywu, terminrealizacji, ugrpGUID, createdfrom_GUID, uwagi, wyjazdGUID,warunki_dostawy)
	SELECT  _zmngGUID AS GUID,_kontrGUID, k.symbol AS kontrsymbol,	'QS' AS nrzamw,	27 AS rodzaj, 
	k.rodzaj2,        #rodzaj dokumentu realizujacego zamowienie
	(SELECT idnMagazynu FROM Magazyny WHERE symbol=_ugrpGUID AND primarymag=1) AS idnmagazyn,
	(SELECT idnMagazynu FROM Magazyny WHERE symbol=_ugrpGUID AND primarymag=1) AS MagazynWys,
	1 as przeliczenie_B_N,
	CURRENT_DATE,CURRENT_DATE,_terminrealizacji, _ugrpGUID, '', CONCAT('Tel: ',_nrtelefonu), _wyjazdGUID,_ParamA
	FROM kontrah k where k.guid=_kontrGUID;
	
	INSERT IGNORE INTO zmpo (GUID, idnNG, idntowr, ilosc, rodzaj, towrsymb, towrnazwa, jednostka,idnvat, cenabrt, wartbrt, rodzaj_przeliczenia,info)
	SELECT _zmpoGUID, _zmngGUID,_idntowr,_ilosc,27,
	t.symbol,	t.nazwa,t.jednostka,t.vat,
	@cena,@cena*_ilosc,5,now()as info
	FROM TowrNg t 
	WHERE t.guid=_idntowr;

	UPDATE zmpo 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.terminrealizacji=_terminrealizacji
	WHERE p.guid=_zmpoGUID;

END$$

DELIMITER ;
		
/*
CALL qs_zamowienie2('','QS_123456789.333','IM_697cac67466e215e782f2e7021ff048c','MIX11',10,'2011-02-20','502264817','','','','','');
mod TOWAR.cena - podaje tylko cenę dla konkretnego kontrahenta i towaru
 PARAMETRY OBOWIĄZKOWE: _WYJAZD, _KONTRGUID, _TOWRGUID

*/

