/* v 2013-05-10 */
DELIMITER $$
DROP PROCEDURE IF EXISTS `ht_bakerdroid_auth`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_bakerdroid_auth`(
	IN _MODE VARCHAR(150),
	IN _USER VARCHAR(150),
	IN _PASS VARCHAR(150),
	IN _HOST VARCHAR(150),
	IN _IP VARCHAR(150),
	IN _SESSION VARCHAR(150)
)
BEGIN
	DECLARE ErrorNo INT;

	IF _MODE = 'LOGIN' THEN
		CALL _sys_connection_Tool('VERIFY LOGIN', 'Verify',MD5(_USER),_PASS, _HOST, '', _IP, 'BakerDroid', '');
		CALL _sys_connection_Tool('LOGON', '', '', '', '', '', '', '', '');
		
		select @session.Registration.Err as error,guid as session_id from _db_logons where id=connection_id();
		
	END IF;
	
	IF _MODE = 'LOGOUT' THEN
		select 0 as error,guid as session_id from _db_logons where id=connection_id();
	
	END IF;

END$$
	
DROP PROCEDURE IF EXISTS `ht_bakerdroid`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_bakerdroid`(
	IN _MODE VARCHAR(150),
	IN _SESSION VARCHAR(150),
	IN _DATA VARCHAR(10),
	IN _TRASA INT,
	IN _GRUPA INT,
	IN _KONTRGUID VARCHAR(38),
	IN _TOWRGUID VARCHAR(38),
	IN _ZMPOGUID VARCHAR(38),
	IN _ILOSC VARCHAR(38),
	IN _STATUS VARCHAR(10)
)
BEGIN
	
    SET @ht_bakerdroid_result := -1;
	
	
	IF _MODE = 'ODSTEPSTWA' THEN
		select value as idn,DisplayValue as opis 
		from slowniki_pierwotne 
		where slownik_guid='ZM_POWODY_ODSTEPSTW' and value>0;
		SET @ht_bakerdroid_result := 0;
	END IF;	
	
	IF _MODE = 'TRASY' THEN
		
		select distinct k.klucz as idn,k.Valuex as opis 
		from zmpo p,zmng n,katcols k 
		where k.typ=0 and k.colnr=3 and k.klucz=n.katcol2 and n.guid=p.idnng 
		and n.terminrealizacji=_DATA
		and p.ilosc<>p.zlecono and p.ilosc>0
		order by opis;

		SET @ht_bakerdroid_result := 0;
	END IF;	

	IF _MODE = 'GRUPY' THEN
				
		select distinct k.klucz as idn,k.Valuex as opis 
		from zmpo p,zmng n,katcols k 
		where k.typ=1 and k.colnr=1 and k.klucz=p.kat5 and n.guid=p.idnng 
		and n.terminrealizacji=_DATA
		and p.ilosc<>p.zlecono and p.ilosc>0
		and (n.katcol2=_TRASA or _TRASA='')
		order by opis;

		SET @ht_bakerdroid_result := 0;
	END IF;	

	IF _MODE = 'KONTRLIST'  THEN
		select distinct 
		-- n.kontrsymbol as symbol,
		k.symbol as kontrsymbol,
		k.nazwa,concat(k.nazwamiasta,', ',k.ulica) as adres,n.kontrguid 
		from zmpo p,zmng n,kontrah k 
		where k.guid=n.kontrguid and n.guid=p.idnng 
		and p.ilosc<>p.zlecono and p.ilosc>0 
		and (p.kat5=_GRUPA or _GRUPA='')
		and n.terminrealizacji=_DATA 
		and n.katcol2=_TRASA
		order by kontrsymbol;
	
		SET @ht_bakerdroid_result := 0;
	END IF;	

	IF _MODE = 'TOWRLIST' THEN
		select distinct p.towrsymb as symbol,p.towrnazwa as nazwa,p.idntowr
		from zmpo p,zmng n, TowrNg t
		where t.guid=p.idntowr and n.guid=p.idnng 
		and p.ilosc<>p.zlecono and p.ilosc>0 
		and n.terminrealizacji=_DATA 
		and t.katcol0=_GRUPA
		order by towrnazwa;
	
		SET @ht_bakerdroid_result := 0;
	END IF;	
	
	IF (_MODE = 'ZAMOWIENIE' and _TOWRGUID<>'') THEN
	-- pakowanie grupa/towar
		SELECT
		k.symbol,k.nazwa,concat(k.nazwamiasta,', ',k.ulica) as adres,
		p.iloscdo,p.uwagi,p.guid as zmpoguid,p.jednostka=3 as wazenie,
		if(p.jednostka=3,0.10,0) as tolerancja, -- do wyrzucenia po aktualizacji
		if(p.jednostka=3,0.60,0) as tolerancjaminus,
		if(p.jednostka=3,0.60,0) as tolerancjaplus
		
		from zmpo p,zmng n, kontrah k
		where k.guid=n.kontrguid and n.guid=p.idnng 
		and p.ilosc<>p.zlecono and p.ilosc>0 
		and n.terminrealizacji=_DATA 
		and p.idntowr=_TOWRGUID
		order by symbol;
		
	
		SET @ht_bakerdroid_result := 1;
	END IF;	
	
	IF _MODE = 'ZAMOWIENIE' and _TRASA<>''  and ifnull(_GRUPA,0)=0 THEN
	-- pakowanie zbiorcze - do wywalenia po zmianach z 2012-03-12
		select 
		p.towrsymb,p.towrnazwa,p.idntowr,
		
		sum(p.iloscdo) as iloscdo,'' as uwagi,'' as zmpoguid,
		(p.jednostka=3) as wazenie, 
		if(p.jednostka=3,0.10,0) as tolerancja,
		if(p.jednostka=3,0.60,0) as tolerancjaminus,
		if(p.jednostka=3,0.60,0) as tolerancjaplus
		
		
		from zmpo p,zmng n, kontrah k
		where k.guid=n.kontrguid and n.guid=p.idnng 
		and p.ilosc<>p.zlecono and p.ilosc>0 
		and n.terminrealizacji=_DATA 
		and n.katcol2=_TRASA
		-- and p.kat5=1 -- pakowanie zbiorcze tylko dla pieczywa
		group by p.idntowr
		order by towrnazwa;
		
	
		SET @ht_bakerdroid_result := 1;
	END IF;	
	
	IF _MODE = 'ZAMOWIENIE' and _TRASA<>'' and ifnull(_GRUPA,0)>0 THEN
	-- pakowanie zbiorcze - z grupa
		select 
		p.towrsymb,p.towrnazwa,p.idntowr,
		
		sum(p.iloscdo) as iloscdo,'' as uwagi,'' as zmpoguid,
		(p.jednostka=3) as wazenie, 
		if(p.jednostka=3,0.10,0) as tolerancja,
		if(p.jednostka=3,0.60,0) as tolerancjaminus,
		if(p.jednostka=3,0.60,0) as tolerancjaplus
		
		
		from zmpo p,zmng n, kontrah k
		where k.guid=n.kontrguid and n.guid=p.idnng 
		and p.ilosc<>p.zlecono and p.ilosc>0 
		and n.terminrealizacji=_DATA 
		and n.katcol2=_TRASA
		and p.kat5=_GRUPA
		
		-- and p.kat5=1 -- pakowanie zbiorcze tylko dla pieczywa
		group by p.idntowr
		order by towrnazwa;
		
	
		SET @ht_bakerdroid_result := 1;
	END IF;	
	
	IF _MODE = 'ZAMOWIENIE' and _KONTRGUID<>'' and _GRUPA<>'' THEN
	-- pakowanie trasa/grupa/kontrahent
		select 
		p.towrsymb,p.towrnazwa,p.idntowr,
		
		p.iloscdo,p.uwagi,p.guid as zmpoguid,
		(p.jednostka=3) as wazenie,
		if(p.jednostka=3,0.10,0) as tolerancja, -- do wyrzucenia po aktualizacji
		if(p.jednostka=3,0.60,0) as tolerancjaminus,
		if(p.jednostka=3,0.60,0) as tolerancjaplus
		
		from zmpo p,zmng n, kontrah k
		where k.guid=n.kontrguid and n.guid=p.idnng 
		and p.ilosc<>p.zlecono and p.ilosc>0 
		and n.terminrealizacji=_DATA 
		and (n.kontrguid=_KONTRGUID)
		and p.kat5=_GRUPA
		order by towrnazwa;
		
		
		SET @ht_bakerdroid_result := 1;
	END IF;	
	
	IF _MODE = 'UPDATE' THEN 
		IF _ZMPOGUID<>'' THEN
			select p.ilosc,p.idnmagazyn,p.idntowr,p.idnng,
			@stawkavat:=(select v.value from v_erp_vat v where v.id=p.idnvat) as stawkavat,
			@wartbrt:=_Rnd2(p.cenabrt*_ILOSC*(100-p.rabat)/100) as wartbrt,
			_Rnd2(@wartbrt/(1+@stawkavat)) as wartnet
						
			from zmpo p 
			where guid=_ZMPOGUID into @iloscprzed,@magazyn,@idntowr,@idnng,@stawkavat,@wartbrt,@wartnet;
			
			update zmpo p set 
			p.zlecono=_ILOSC,p.ilosc=_ILOSC,p.status=_STATUS,p.remotetime=now(),
			p.wartnet=@wartnet,p.wartbrt=@wartbrt,p.wartnetwal=@wartnet,
			p.wartvat=_Rnd2(@wartbrt-@wartnet)
			
			where p.guid=_ZMPOGUID;
			
			IF @iloscprzed<>_ILOSC THEN
			  update TowrPo set zamowiono_oo=zamowiono_oo-@iloscprzed+_ILOSC 
			  where idntowr=@idntowr and magazyn=@magazyn; 
			  CALL erp_vat_tools('Update.zam', @idnng, '', '', '', '');
			  select sum(netto),sum(brutto) from zmng_vat where idnoper=@idnng into @netto,@brutto;
			  select count(*) as ile from zmpo where idnng=@idnng and zlecono=ilosc into @ilespakowano;
			  update zmng set 
			  netto=@netto,nettowal=@netto,
			  brutto=@brutto,bruttowal=@brutto,
			  katcol4=if(@ilespakowano>0,if(@ilespakowano=ilepoz,2,1),0) 
			  where guid=@idnng;
			END IF;
-- TODO zgodnosc!!!!!!!!!
		END IF;

		IF _ZMPOGUID='' and _TOWRGUID<>'' THEN
		-- zbiorcze wydanie tylko  w calosci - nie potrzeba statusu i zgodnosci
			update zmpo p, zmng n
			set p.zlecono=p.ilosc, p.remotetime=now()
			where 
			n.guid=p.idnng 
			and p.idntowr=_TOWRGUID	
			and n.katcol2=_TRASA
			and n.terminrealizacji=_DATA ;
			
		END IF;
		
		SELECT 0 as status;
		-- 0 - OK
		-- 1 - nie ma takiej pozycji w zmpo (guid)
		-- 2 - pozycja zostala juz wydana
		
		SET @ht_bakerdroid_result := 0;
	END IF;	
	
		
	IF _MODE = 'ZERUJWYDANIA' THEN
		update zmpo p,zmng n
		set p.zlecono=0,ilosc=iloscdo
		where n.guid=p.idnng 
		and p.zlecono>0 and p.ilosc>0 
		and n.terminrealizacji=_DATA;

		SELECT 0 as status;
		
		SET @ht_bakerdroid_result := 0;
	END IF;	
	
	IF @ht_bakerdroid_result = -1 THEN
		SELECT "MODE NIE ZDEFINIOWANY" as status,_MODE as `mode`;
	END IF;
	
END$$

DELIMITER ;

