 DELIMITER $$

DROP PROCEDURE IF EXISTS `pl_gratyfikacje_tools_arg7`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pl_gratyfikacje_tools_arg7`(
	IN _MODE VARCHAR(150),
	IN _Param_A VARCHAR(50),  -- GUID zlecenia
	IN _Param_B VARCHAR(50),  -- rok
	IN _Param_C VARCHAR(50),  -- miesiac 	
	IN _Param_D VARCHAR(50),  -- GUID pracownika	  
	IN _Param_E VARCHAR(50),	  
	IN _Param_F VARCHAR(50)   -- tryb: "auto" (naliczanie automat.) lub "manual" (r?czne)    Jest to naliczanie dla Konkola
)
SPROC: BEGIN

	DECLARE _RozliczajWg INTEGER;
	DECLARE _I, _MZ_idn, _suma_mies, _dniW, _period INTEGER;
	DECLARE _ZLEC_Potr INTEGER DEFAULT 4;   -- cInnePotracenia
	DECLARE cInneDodatki INTEGER DEFAULT 5;   -- cInneDodatki
	DECLARE _ZLEC_ZUS  INTEGER DEFAULT 6;	-- 3
	DECLARE _ZaZlecenie, _ZaZlecenie2, _SklHestia, _GratyfPodst, _DodNocny, _MinWynagr, _NomCzasPracyREG, _Godziny, _Godziny2, _extra_wynagr  DOUBLE;
	DECLARE  _KwotaJarzExtra1,  _KwotaJarzExtra2, _Usluga DOUBLE;
	DECLARE _SQLText TEXT;
	
	DECLARE _GrafikCzasPracy, _CzasZ, _ProcPremii, _SG, _SGdef, aSGNoc, _SGp, _SGz DOUBLE;
	DECLARE _MaxAreaGUID, _CurrAreaGUID, _CurrFrekwGUID, _CurrWorkerGUID, _OrderGUID, _RangeGUID, _GUIDPracownika, _GUIDZlecPrac VARCHAR(38);
	DECLARE _IsMaxArea BOOLEAN;
	
	DECLARE _godzSNS, _godzSNS_nast,  _NCP,  _GodzNocne, _godzW, _OCP, _OCP_3mc, _godz_3mc,
			_SUM_12m, _kwotaW, _kwota_def, _godz100, _godz150, _godz200 DOUBLE;
	
	DECLARE _godzP, _godz_niedorobka, _godz_total, _godz100prac,  _godziny150, _godz_plus100wolne, 
			_godziny_premia, _godz_noc, _godz_yy DOUBLE;  -- ,  _godzSNS
	
	DECLARE aPlaca, aNadGodz150, aNadGodz200,  aPremia, aPremiaMotyw, aPremiaUzn, 
	        _suma_place, _suma_zlec, aNoc, aNoc_yy, _Kwota100, _Kwota150, _Kwota200 DOUBLE;
	
	DECLARE _SymbZakr VARCHAR(200);
	DECLARE _Def_NCP_REG, _NCP_REG_mc VARCHAR(10);
	
	DECLARE _DataWyplaty varchar(10);
	DECLARE _DataWyplDoDeklar varchar(10);
	
	DECLARE _done BOOL DEFAULT FALSE;	

	DECLARE _OsobaGUID VARCHAR(38);
	DECLARE _Tryb, _netto_brutto INTEGER;
	
	DECLARE _Rok INTEGER;
 DECLARE _Miesiac INTEGER;
	DECLARE _GuidKO VARCHAR(38);
	DECLARE _SklPZU DOUBLE;
	
/*-----------------------------------------------------------------------------------------------------------
	'pl.kreuj.zlec.storno'  
		utworzenie zapisu storno wzgledem zlecenia o GUIDzie przekazanego w _Param_A
		Parametry
		_Param_A				  GUID oryginalnego zlecenia		
		_Param_B VARCHAR(50),  -- rok tworzonego zapisu
		_Param_C VARCHAR(50),  -- miesiac
		_Param_D   				  -- nr listy 
		
		CALL pl_gratyfikacje_tools_arg7('pl.kreuj.zlec.storno', 'GUID_Zlec', '', '', '', '');
------------------------------------------------------------------------------------------------------------*/
	IF _MODE = 'pl.kreuj.zlec.storno' THEN
		-- SET @TESTMALPA = _Param_E;
		
		-- niesetety tak bo mam tylko 1 wolny parametr '_Datawyplaty _DataWyplDoDeklar'
		
		SET _Param_E = IFNULL(_Param_E,'');
		IF _Param_E = '' THEN 
		  SELECT Datawyplaty, DataWyplDoDeklar INTO _Datawyplaty, _DataWyplDoDeklar from prace_zlecone where guid = _Param_A;
		ELSE   
			SET _Datawyplaty = IFNULL(LEFT(_Param_E,10), CURRENT_DATE);	
			SET _DataWyplDoDeklar = IFNULL(RIGHT(_Param_E,10), CURRENT_DATE);	
		END IF;  
		
    
		DROP TEMPORARY TABLE IF EXISTS t_pz_storno;
		CREATE TEMPORARY TABLE t_pz_storno AS
		SELECT * FROM prace_zlecone 
		WHERE GUID  =  _Param_A;
		
		DROP TEMPORARY TABLE IF EXISTS t_pz_poz_storno;
		CREATE TEMPORARY TABLE t_pz_poz_storno AS
		SELECT * FROM place_skladniki
		WHERE GUID_zapisu_placowego  =  _Param_A;
		
		-- aNewGUIDPlac := ReplaceBadChar(Format('{PL_STORNO_%d_', [DPlaceStorno.aCDSPlace.FieldByName('idn').asInteger])+DateToStr(date)+'}','-', '_');
		set _I = 0;
		select idn into _I from t_pz_storno;
		SET @pl.kreuj.zlec.storno.GUID = CONCAT('ZL_STORNO_', _I);
		
		update t_pz_storno 	set 
		GUID = @pl.kreuj.zlec.storno.GUID, idn = 0,  ZamknietyZapis = 1,   GUID_storno = _Param_A,
		rok = _Param_B, miesiac = _Param_C, NrListy = _Param_D,
		datawyplaty = _Datawyplaty,
		DataWyplDoDeklar = _DataWyplDoDeklar,
		InneZasilkZUS = - InneZasilkZUS,
		KwotaBrutto = - KwotaBrutto,
		KosztyUzyskania = - KosztyUzyskania,
		ZasChorRazem = - ZasChorRazem,
		InneDod = - InneDod,
		PodsFundEmerytBezOgranicz = - PodsFundEmerytBezOgranicz,
		Dochod = - Dochod,
		Zaliczka = - Zaliczka,
		ZryczaltowanyPodatek = - ZryczaltowanyPodatek,
		DoWyplaty = - DoWyplaty,
		WyplataPrzelewem = - WyplataPrzelewem,
		WyplataGotowka = - WyplataGotowka,
		InnePotr = - InnePotr,
		-- stawka_godz = - 
		ZusZleceniodawcaKwota = - ZusZleceniodawcaKwota,
		SklKChZleceniobOdliczNomin = - SklKChZleceniobOdliczNomin,
		SklKChZleceniobPobrNomin = - SklKChZleceniobPobrNomin,
		ZwiekszPodatku = - ZwiekszPodatku,
		ZmnPodatku = - ZmnPodatku,
		PotracenieZUS = - PotracenieZUS,
		dieta_delegacje = - dieta_delegacje,
		KwotaNetto = - KwotaNetto,
		RazemSkladkiZleceniodawcy = - RazemSkladkiZleceniodawcy,
		ZasMacierz = - ZasMacierz, 		ZasRehab = - ZasRehab,
		ZaZlecenie = - ZaZlecenie, 
		SklKasaChorychZleceniobOdlicz = - SklKasaChorychZleceniobOdlicz,
		KwotaChorobowego100proc = - KwotaChorobowego100proc,
		SkladkaPPE = - SkladkaPPE,
		KwotaZwPod = - KwotaZwPod,
		KorektaNaMinus = - KorektaNaMinus,	KorektaNaPlus = - KorektaNaPlus,
		PodstFemerytalny = - PodstFemerytalny,	PodstFrentowy = - PodstFrentowy, PodstFchorobowy = - PodstFchorobowy, 	PodstFwypadkowy = - PodstFwypadkowy,
		PodstKasaChorych = - PodstKasaChorych,
		SklFemerytalnyZleceniob = - SklFemerytalnyZleceniob,
		SklFrentowyZleceniob = - SklFrentowyZleceniob,
		SklFchorobowyZleceniob = - SklFchorobowyZleceniob, 
		SklFwypadkowyZleceniob = - SklFwypadkowyZleceniob,
		SklKasaChorychZleceniobPobr = - SklKasaChorychZleceniobPobr,
		SklFemerytalnyZleceniod = - SklFemerytalnyZleceniod,
		SklFrentowyZleceniod = - SklFrentowyZleceniod,
		SklFchorobowyZleceniod = - SklFchorobowyZleceniod,
		SklFwypadkowyZleceniod = - SklFwypadkowyZleceniod,
		SklKasaChorychZleceniod = - SklKasaChorychZleceniod,
		RazemSkladkiZleceniobiorcy = - RazemSkladkiZleceniobiorcy,
		kwota_za_UW = - kwota_za_UW,
		SklFGSP = - SklFGSP,
		koszty_podrozy = - koszty_podrozy, SklZdrPobr_koszty_podrozy = - SklZdrPobr_koszty_podrozy,
		PodstUbSpolNarastAktualna = - PodstUbSpolNarastAktualna,
		PodstUbSpolNarastFirstTime = - PodstUbSpolNarastFirstTime,
		WynagrodzeniePlatnika = - WynagrodzeniePlatnika,
		KwotaPodatkuDoWplaty = - KwotaPodatkuDoWplaty,
		SklFundPracy = - SklFundPracy,
		PodstFpFGSP = - PodstFpFGSP,
		ZaliczkaPrzedSklUbezp = - ZaliczkaPrzedSklUbezp,
		ZryczPodatekPrzedSklUbezp = - ZryczPodatekPrzedSklUbezp,
		DeklarowanaPodstUbezpiecz = - DeklarowanaPodstUbezpiecz,
		BruttoDoDeklarRocznej = - BruttoDoDeklarRocznej,
		PPKskladkaPracow = - PPKskladkaPracow,
		PPKskladkaPracod = - PPKskladkaPracod,
		PodstFemerytBezOgr = -PodstFemerytBezOgr,
		KwotaDoLimitu26 = - KwotaDoLimitu26,
		
		RazemSklZleceniobiorcyDoOdlicz = -RazemSklZleceniobiorcyDoOdlicz,
		DochodHipotetyczna = -DochodHipotetyczna,
		ZalPrzedSklUbezpHipotetyczna = -ZalPrzedSklUbezpHipotetyczna,
		KosztyUzyskaniaHipotetyczna = -KosztyUzyskaniaHipotetyczna,
		PodstawaUKS = -PodstawaUKS,
		UlgaKS  = -UlgaKS,
		PodstawaUDR = -PodstawaUDR,
		UlgaDR = -UlgaDR,
		PodstawaUPE = -PodstawaUPE, 
		UlgaPE = -UlgaPE,
		KwotaDoLimituKS = -KwotaDoLimituKS,
		KwotaDoLimituDR = -KwotaDoLimituDR,
		KwotaDoLimituPE = -KwotaDoLimituPE,
		SklKCZlecOdliczHipot = -SklKCZlecOdliczHipot,
		ZaliczkaOdroczona = -ZaliczkaOdroczona,
		ZaliczkaHipotetyczna = -ZaliczkaHipotetyczna,

		KwotaWolnaOdPodatkuZlec = - KwotaWolnaOdPodatkuZlec,
  z26latzPodatPrzychod = - z26latzPodatPrzychod,
  z26latzPodatKoszty = - z26latzPodatKoszty,
  z26latzPodatPodatek = -z26latzPodatPodatek,
  z26latbezPodatPrzychod = -z26latbezPodatPrzychod,
  z26latbezPodatZasMac = -z26latbezPodatZasMac,
  zPEzPodatPrzychod = -zPEzPodatPrzychod,
  zPEzPodatKoszty = -zPEzPodatKoszty,
  zPEzPodatPodatek = -zPEzPodatPodatek,
  zPEbezPodatPrzychod = -zPEbezPodatPrzychod,
  zDRzPodatPrzychod = -zDRzPodatPrzychod,
  zDRzPodatKoszty = -zDRzPodatKoszty,
  zDRzPodatPodatek = -zDRzPodatPodatek,
  zDRbezPodatPrzychod = -zDRbezPodatPrzychod,
  zDRbezPodatZasMac = -zDRbezPodatZasMac,
  zSkladkiZUSnormalne = -zSkladkiZUSnormalne,
  zSkladkaZUSod26PEzPodatkiem = -zSkladkaZUSod26PEzPodatkiem,
  zSkladkaZUSodZwolnionych = -zSkladkaZUSodZwolnionych,
  zPodstPPDprzedZaokr = -zPodstPPDprzedZaokr,
  zPEbezPodatZasMac = -zPEbezPodatZasMac,
  KwotaDoLimitu26Narast = -KwotaDoLimitu26Narast,
  KwotaDoLimituDRNarast = -KwotaDoLimituDRNarast,
  KwotaDoLimituPENarast = -KwotaDoLimituPENarast,
  DodUbezpMedyczneZlec = -DodUbezpMedyczneZlec,
  PotrDodUbezpMedyczneZlec = -PotrDodUbezpMedyczneZlec,
  zZasMacNormPrzych = -zZasMacNormPrzych,
  zZasMacNormPodatek = -zZasMacNormPodatek,
  zZasMac26latPrzych = -zZasMac26latPrzych,
  zZasMac26latPodatek = -zZasMac26latPodatek,
  zZasMacPEPrzych = -zZasMacPEPrzych,
  zZasMacPEPodatek = -zZasMacPEPodatek,
  zZasilkiPrzych = -zZasilkiPrzych,
  zZasilkiPodatek = -zZasilkiPodatek,
  zSkladkaZUSodDRzPodatkiem = -zSkladkaZUSodDRzPodatkiem,
  zNormPrzychodOsPraw = -zNormPrzychodOsPraw,
  zNormKosztyOsPraw = -zNormKosztyOsPraw,
  zNormPodatekOsPraw = -zNormPodatekOsPraw,
  zNormPrzychodUmZlec = -zNormPrzychodUmZlec,
  zNormKosztyUmZlec = -zNormKosztyUmZlec,
  zNormPodatekUmZlec = -zNormPodatekUmZlec,
  zPrawAutPrzychod = -zPrawAutPrzychod,
  zPrawAutPrzychod50prc = -zPrawAutPrzychod50prc,
  zPrawAutKoszty = -zPrawAutKoszty,
  zPrawAutPodatek = -zPrawAutPodatek
		;
		
		update t_pz_poz_storno 	set 
		GUID_zapisu_placowego = @pl.kreuj.zlec.storno.GUID,
		GUID = CONCAT('ZL_STORNO_SKL_', idn),
		idn = 0,
		kwota = - kwota,
		NomKwota = - NomKwota,
		ZmniejszZwieksz = - ZmniejszZwieksz;

		
		-- wstawiamy zapis stornujace
		insert into prace_zlecone
		select * from t_pz_storno;
		
		insert into place_skladniki
		select * from t_pz_poz_storno;
		
		-- zamykamy orginalny zapis
		update prace_zlecone set
		ZamknietyZapis = 1		
		WHERE GUID  =  _Param_A;

		DROP TEMPORARY TABLE IF EXISTS t_pz_storno;
		DROP TEMPORARY TABLE IF EXISTS t_pz_poz_storno;
		
	END IF;	-- 'pl.kreuj.zlec.storno'  

	
/*	DECLARE _work_c CURSOR FOR	
	SELECT  
	  AreaGuid, WorkerGuid, orderGUID	
	FROM pracearea_order;  */
	
    /*  #43752 ZREMB */
	IF _MODE = 'create.from.existing' THEN
	  
	  SET @pl.newGUID = md5(concat(_Param_A, _Param_D));  -- GUID zapisu org. + idn wybranej listy plac
	  REPLACE INTO place 
		(GUID, rok, miesiac, nrlisty, datawyplaty, DataWyplDoDeklar, 
		 GUID_pracownika, nazwisko, Kategoria_Idn, wzordekr, 
		 KluczWzoruPK,  -- po przejsciu na {$DEFINE WZ_DEKR_SYMBOL} to pole nie bedzie potrzebne
		 katcol0, katcol1, katcol2, katcol3, katcol4, KodTytUbezp, KodTytUbzpMacWych, ProcentPodatku, 
		 ProcSkladkiKZP, ProcFemerytalnyPracow, ProcFrentowyPracow, ProcFchorobowyPracow, ProcFwypadkowyPracow, ProcKasaChorychPracowPobr, ProcKasaChorOdlicz,
		 ProcFemerytalnyPracod, ProcFrentowyPracod, ProcFchorobowyPracod, ProcFwypadkowyPracod, ProcKasaChorychPracod,
		 ProcFemerytalnyBudzet, ProcFrentowyBudzet, ProcFchorobowyBudzet, ProcFwypadkowyBudzet, ProcKasaChorychBudzet,
		 ProcFemerytalnyPFRON, ProcFrentowyPFRON, ProcFchorobowyPFRON, ProcFwypadkowyPFRON, ProcKasaChorychPFRON, ProcKasaChorychZUS
		)
	  SELECT 
		@pl.newGUID, _varINT(_Param_B), _varINT(_Param_C), _varINT(_Param_D), _Param_E, _Param_F AS DataWyplDoDeklar, 
		GUID_pracownika, nazwisko, Kategoria_Idn, wzordekr,
		-- po przejsciu na {$DEFINE WZ_DEKR_SYMBOL} ponizsza linia nie b?dzie juz potrzebna:
		(SELECT w.idn FROM wzordekr w WHERE w.rok = _varINT(_Param_B) AND w.symbol = (SELECT tmp.symbol FROM wzordekr tmp WHERE tmp.idn = p.kluczwzorupk) LIMIT 1) AS KluczWzoruPK,  
		katcol0, katcol1, katcol2, katcol3, katcol4, KodTytUbezp, KodTytUbzpMacWych, ProcentPodatku, 
		ProcSkladkiKZP, ProcFemerytalnyPracow, ProcFrentowyPracow, ProcFchorobowyPracow, ProcFwypadkowyPracow, ProcKasaChorychPracowPobr, ProcKasaChorOdlicz,
		ProcFemerytalnyPracod, ProcFrentowyPracod, ProcFchorobowyPracod, ProcFwypadkowyPracod, ProcKasaChorychPracod,
		ProcFemerytalnyBudzet, ProcFrentowyBudzet, ProcFchorobowyBudzet, ProcFwypadkowyBudzet, ProcKasaChorychBudzet,
		ProcFemerytalnyPFRON, ProcFrentowyPFRON, ProcFchorobowyPFRON, ProcFwypadkowyPFRON, ProcKasaChorychPFRON, ProcKasaChorychZUS
	  FROM 
		place p
	  WHERE  p.GUID = _Param_A AND deleted = 0;  -- _Param_A = GUID zapisu ?r?d?owego 
	  	  	  
	  -- wstawiamy skladniki systemowe...
	  REPLACE INTO place_skladniki
		(GUID, GUID_zapisu_placowego, GUID_definicja_skladnika_placy, RodzajSkladnika)
	  SELECT 
		uuid(), @pl.newGUID, GUID_definicja_skladnika_placy, RodzajSkladnika
	  FROM 
		place_skladniki
	  WHERE  GUID_zapisu_placowego = _Param_A AND RodzajSkladnika = 0;
	  
	  -- ...oraz wskazany sk?adnik w got?wce  (@pl.SklGUID = GUID podczepianego skladnika, zmienna globalna ustawiona przed wywolaniem procedury)
	  DELETE FROM place_skladniki WHERE GUID_zapisu_placowego = @pl.newGUID;
	  
	  REPLACE INTO place_skladniki
		(GUID, GUID_zapisu_placowego, GUID_definicja_skladnika_placy, RodzajSkladnika, kwota, NomKwota, ZmniejszZwieksz)
	  SELECT 
		uuid(), @pl.newGUID, @pl.SklGUID, RodzajSkladnika, SUM(kwota), SUM(NomKwota), SUM(ZmniejszZwieksz)
	  FROM 	place_skladniki
	  WHERE  GUID_zapisu_placowego = _Param_A AND RodzajSkladnika IN (2,5) 
	  GROUP BY GUID_zapisu_placowego; -- zalozenie jest takie, ?e do zapisu ?r?d?owego jest podpi?ty tylko jeden sk?adnik w got?wce i jeden sk?adnik typu "inne dodatki"
	  -- LIMIT 1;	
	  
	END IF;

/*-----------------------------------------------------------------------------------------------------
	'calc.one.order.mode.jarz.extra'
		Naliczenie  jednego zlecenia (reszta wynagrodzenia)  - Jarzebinscy
		Parametry
		_Param_A	GUID zlecenia - podawane chyba z programu?
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	data wyp?aty   -- GUID karty frekwencji za dany miesiac
		_Param_F   -- tryb: "auto" (naliczanie automat.) lub "manual" <- p?ki co zawsze "auto"

uwaga - guid zlecenia jest podawany z programu, jezeli podamy guid zlecenia istenijacego, to zostanie ono  przeliczone.
CALL pl_gratyfikacje_tools_arg7('create.work.tables', '', '', '', '', '', '');
CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.jarz.extra', 'extra_test', '2024', '11',  '{D91EEF43-F243-4C90-9C37-CE24B15E210A}', '2024-12-10', 'auto');

SELECT @jarz.extra.period, @startmc, @endmc, @PeriodGraniczny, @_SGp, @_SGz;

select @d01, @c01, @c02, @c03, @c04, @b01, @b02, @b03, @b04, @aKwotaNettoWstepnaTmp, @Zaliczka, @a01, @aZaliczkaHipotetyczna, @ZaliczkaHipotetycznaZapis

-- przyklad pani ceplin z bazy ula_az_bij
SELECT * FROM osoby WHERE nazwisko = 'ceplin';
SELECT StawkaGodzinowa2, StawkaGodzinowa, p.* FROM Pracownicy p WHERE guid ='{D91EEF43-F243-4C90-9C37-CE24B15E210A}';
SELECT * FROM prace_zlecone WHERE guid_pracownika ='{D91EEF43-F243-4C90-9C37-CE24B15E210A}';
SELECT zazlecenie, poletechniczne1, p.* FROM prace_zlecone p WHERE guid_pracownika  LIKE '{D91EEF43-F243-4C90-9C37-CE24B15E210A%' ORDER BY miesiac;
guid zlecenia = 'extra_e5ab7ffb8b851866793949ab6b833673';

-- DELETE FROM place_skladniki WHERE guid_zapisu_placowego = 'extra_test';
SELECT * FROM prace_zlecone WHERE guid = 'extra_test';
-- DELETE FROM prace_zlecone WHERE guid = 'extra_test';
--------------------------------------------------------------------------------------------------*/
	IF _MODE = 'calc.one.order.mode.jarz.extra' THEN  -- wolane w DPlace.NaliczWynagrJarzExecute
	
		SET _ZaZlecenie = 0; SET _DodNocny = 0;  SET _godz_total = 0; set _godzP =0; set _godz_niedorobka = 0;
		SET _ProcPremii = 0; SET _SG  = 0; SET _GratyfPodst = 0;	SET _SGdef = 0;	SET _godzW = 0;
		SET _RozliczajWg = 0;  SET _CzasZ = 0;   SET _godz100prac = 0; SET  _OCP = 0; SET _kwota_def = 0;
		SET _OCP_3mc = 0; SET _godz_3mc = 0;  SET _SGp = 0; SET _SGz = 0; SET _kwotaW = 0;
		
		SET @_DataWypl = _Param_E; 
		-- "stawka godzinowa 2" z karty pracownika
		SET @ZwolnienieOdPodatku26Lat = 0;
		SET @ZwolnienieOdPodatkuDR = 0;
		SET @ZwolnienieOdPodatkuPE = 0;
		SET @RezygnPrzesunZal = 0;
		SET @SUMZaliczkaOdroczona = 0;
		SET @SumaZaZlecenie = 0;
		SET @SumaWynagr_prokurent = 0;
		SET @SumaKwota_za_UW = 0;
		SET @SumZaliczkaOdroczonaMsc = 0;
		SET @SumaZaZlecenieMsc = 0;
		SET @SumaWynagr_prokurentMsc = 0;
		SET @SumaKwota_za_UWMsc = 0;
		SET @aPodstPodtk = 0;
		SET @aPodstPodtkHipotetyczna = 0;
		SET @KwotaWolnaOdPodatkuZlec = 0;
		SET @KwotaWolnaOdPodatkuZlecKartoteka = 0;
		SET @SumaKwotaWolnaOdPodatkuZlec = 0;

		SET @DodUbezpMedyczneZlecKartoteka = 0;
		SET @PotrDodUbezpMedyczneZlecKartoteka = 0;
		SET @SumaDodUbezpMedyczneZlec = 0;
		SET @SumaPotrDodUbezpMedyczneZlec = 0;


		SET @UwzglednijPrzesuniecieZal =
		(SELECT ValueB FROM IReg WHERE idkey = 'UwzglednijPrzesuniecieZal' AND rok = YEAR(_Param_E));
		SET @MaxRezygnPrzesunZalKwota = 
		(SELECT ValueN FROM IReg WHERE idkey = 'MaxRezygnPrzesunZalKwota' AND rok = YEAR(_Param_E));
		
		SELECT StawkaGodzinowa2, StawkaGodzinowa, IF(YEAR(_Param_E)>2019, ZwolnOdPodatku26LatPo2019, ZwolnienieOdPodatku26Lat),
		NaliczUlgeDlaDR, NaliczUlgeDlaPE, RezygnPrzesunZalZlec, KwotaWolnaOdPodatkuZlec,
		DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec, DataZatrudnieniaWzakl
		INTO _SG, _SGdef, @ZwolnienieOdPodatku26Lat, @ZwolnienieOdPodatkuDR, @ZwolnienieOdPodatkuPE, @RezygnPrzesunZal, @KwotaWolnaOdPodatkuZlecKartoteka, @DodUbezpMedyczneZlecKartoteka, @PotrDodUbezpMedyczneZlecKartoteka, @DataZatrudnieniaWzakl
		FROM Pracownicy
		WHERE GUID = _Param_D
		;
		
		IF @ZwolnienieOdPodatku26Lat = 1 THEN
   IF _Param_E > (select adddate(dataurodzenia, interval 26 year) from osoby where GUID = _Param_D) THEN
    SET @ZwolnienieOdPodatku26Lat = 0;
   END IF;
		END IF;

		-- cdsKwotyZlecZPoprzednichMSC - nowe dane - od początku roku do msc wypłaty
   SELECT
			IFNULL(SUM(pl.ZaliczkaOdroczona),0) as SumZaliczkaOdroczona, 
			IFNULL(SUM(pl.ZaZlecenie),0) as SumaZaZlecenie, 
			IFNULL(SUM(pl.wynagr_prokurent),0) as SumaWynagr_prokurent,
			IFNULL(SUM(pl.kwota_za_UW),0) as SumaKwota_za_UW
    INTO @SUMZaliczkaOdroczona, @SumaZaZlecenie, @SumaWynagr_prokurent, @SumaKwota_za_UW
    FROM prace_zlecone pl
    WHERE pl.GUID_pracownika = _Param_D 
    AND YEAR(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = YEAR(_Param_E) 
    AND MONTH(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) <= MONTH(_Param_E)
    AND pl.GUID <> _Param_A 
    and pl.deleted = 0
    ;	
		-- nowe dane dla msc wypłaty
		 SELECT
			IFNULL(SUM(pl.ZaliczkaOdroczona),0) as SumZaliczkaOdroczonaMsc, 
			IFNULL(SUM(pl.ZaZlecenie),0) as SumaZaZlecenieMsc, 
			IFNULL(SUM(pl.wynagr_prokurent),0) as SumaWynagr_prokurentMsc,
			IFNULL(SUM(pl.kwota_za_UW),0) as SumaKwota_za_UWMsc,
			IFNULL(SUM(pl.KwotaWolnaOdPodatkuZlec),0) as SumaKwotaWolnaOdPodatkuZlec
    INTO @SumZaliczkaOdroczonaMsc, @SumaZaZlecenieMsc, @SumaWynagr_prokurentMsc, @SumaKwota_za_UWMsc, @SumaKwotaWolnaOdPodatkuZlec
    FROM prace_zlecone pl
    WHERE pl.GUID_pracownika = _Param_D 
    AND YEAR(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = YEAR(_Param_E) 
    AND MONTH(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = MONTH(_Param_E)
    AND pl.GUID <> _Param_A 
    and pl.deleted = 0
    ;	

		-- nowe dane dla msc zlecenia!!!
	SELECT
		IFNULL(SUM(pl.DodUbezpMedyczneZlec),0),
		IFNULL(SUM(pl.PotrDodUbezpMedyczneZlec),0)
	INTO @SumaDodUbezpMedyczneZlec, @SumaPotrDodUbezpMedyczneZlec
	FROM prace_zlecone pl
	WHERE pl.GUID_pracownika = _Param_D
	-- AND pl.rok = YEAR(_Param_E)
	-- AND pl.miesiac = MONTH(_Param_E)
	AND pl.rok = _varINT(_Param_B)
 AND pl.miesiac = _varINT(_Param_C)
	AND pl.GUID <> _Param_A
	and pl.deleted = 0
	;

	-- 26Lat begin	
		SET @MaxDochodZwolnionyPodatek26lat = 0;
		SET @rok = YEAR(_Param_E);
		CALL _IReg_Get('Place2003\\ZwPodatkowe', 'MaxDochodZwolnionyPodatek26lat', @rok, 'DOUBLE', @MaxDochodZwolnionyPodatek26lat, 85528.00);

		SET @KwotaDoLimitu26Narast = 0;
		SELECT SUM(KwotaDoLimitu26Narast) INTO @KwotaDoLimitu26Narast
		FROM (
			( SELECT IFNULL(SUM(KwotaDoLimitu26),0) AS KwotaDoLimitu26Narast 
			  FROM prace_zlecone WHERE GUID_Pracownika = _Param_D AND  YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _Param_A AND deleted = 0 
			) UNION 
			( SELECT IFNULL(SUM(KwotaDoLimitu26),0) AS KwotaDoLimitu26Narast 
			  FROM place WHERE GUID_pracownika = _Param_D AND YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _Param_A AND deleted = 0 
			)
		) newTable;
				
	-- 26Lat end		
		
	-- zwolnienie DR begin	
		SET @MaxDochodZwolnionyPodatekDR = 0;
		SET @rok = YEAR(_Param_E);
		CALL _IReg_Get('Place2003\\ZwPodatkowe', 'MaxDochodZwolnionyPodatekDR', @rok, 'DOUBLE', @MaxDochodZwolnionyPodatekDR, 85528.00);

		SET @KwotaDoLimituDRNarast = 0;
		SELECT SUM(KwotaDoLimituDRNarast) INTO @KwotaDoLimituDRNarast
		FROM (
			( SELECT IFNULL(SUM(KwotaDoLimituDR),0) AS KwotaDoLimituDRNarast 
			  FROM prace_zlecone WHERE GUID_Pracownika = _Param_D AND  YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _Param_A AND deleted = 0 
			) UNION 
			( SELECT IFNULL(SUM(KwotaDoLimituDR),0) AS KwotaDoLimituDRNarast 
			  FROM place WHERE GUID_pracownika = _Param_D AND YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _Param_A AND deleted = 0 
			)
		) newTable;
				
	-- DR end		
		
		-- zwolnienie PE begin	
		SET @MaxDochodZwolnionyPodatekPE = 0;
		SET @rok = YEAR(_Param_E);
		CALL _IReg_Get('Place2003\\ZwPodatkowe', 'MaxDochodZwolnionyPodatekPE', @rok, 'DOUBLE', @MaxDochodZwolnionyPodatekPE, 85528.00);

		SET @KwotaDoLimituPENarast = 0;
		SELECT SUM(KwotaDoLimituPENarast) INTO @KwotaDoLimituPENarast
		FROM (
			( SELECT IFNULL(SUM(KwotaDoLimituPE),0) AS KwotaDoLimituPENarast 
			  FROM prace_zlecone WHERE GUID_Pracownika = _Param_D AND  YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _Param_A AND deleted = 0 
			) UNION 
			( SELECT IFNULL(SUM(KwotaDoLimituPE),0) AS KwotaDoLimituPENarast 
			  FROM place WHERE GUID_pracownika = _Param_D AND YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _Param_A AND deleted = 0 
			)
		) newTable;
				
	-- PE end		
		
		-- nadgodziny do rozliczenia
		SELECT 
			GUID, (godz100prac + godz_plus50prac + godz_plus50wolne + 
			  godz_plus100prac + godz_plus100wolne)/60 AS godz_przeprac,
			  (W_godz + G_godz)/60 as urlop_wypocz
			  INTO _CurrFrekwGUID, _godz_total, _godzW
		FROM 
			frekw 
		WHERE rok = _Param_B AND miesiac = _Param_C AND PracGUID = _Param_D	AND deleted = 0 
		;
		
		SELECT 
	        -- ponizej: je?li ma literk? P (wolne za SN?), ale ma godz. wej. to znaczy, ?e pracowal	
			-- OR (absencja = 'P' AND IFNULL(godz_wej, 0) > 0 )
			SUM(IF(absencja IN ('E', '', 'P') , kp_godziny, 0))/60  AS realCP,  -- rozmowa z p.Bozena: usuwamy st?d '-' tzn. liczymy godziny tylko za okres, w ktorym pracownik by? zatrudniony
			SUM(IF(absencja IN ('P'), kp_godziny, 0))/60 AS godzP,
			SUM(IF(absencja IN ('') AND kp_godziny > godziny, kp_godziny - godziny, 0))/60 AS godz_niedorobka
			INTO _OCP, _godzP, _godz_niedorobka
		FROM 
			frekw_po 
		WHERE FrekwGUID = _CurrFrekwGUID
		;
		
		SET @jarz.extra._godz_total = _godz_total;
		SET @jarz.extra._OCP = _OCP;
		SET @jarz.extra._CurrFrekwGUID =  _CurrFrekwGUID;
				
		IF _godz_total > _OCP THEN  -- jesli mamy nadgodziny (w skali miesi?ca, a nie poszczeg?lnych dni), to naliczamy zlecenie
		  
		   -- kwota1 = (godzP + godz_niedorobka) * StawkaGodzinowa   		 
		   SET _KwotaJarzExtra1 = (_godzP + _godz_niedorobka) * _SGdef;
		   
		 /* 2) godz2: suma wszystkich przeprac. godz. - nomina? (OCP)    // -  (godzP + godz_niedorobka)
             kwota2 = godz2 * StawkaGodzinowa2 */
		   SET _KwotaJarzExtra2 = GREATEST(_godz_total - _OCP, 0) * _SG;   --   - (_godzP + _godz_niedorobka)
		   -- SET _ZaZlecenie = _KwotaJarzExtra1 + _KwotaJarzExtra2; zmiana 22-11-2021 zgodnie z p. Ula
		   SET _ZaZlecenie = _KwotaJarzExtra2;
		   
		   set @a1=_KwotaJarzExtra1;
		   set @a2=_KwotaJarzExtra2;
		   
		ELSE
		  SET _ZaZlecenie = 0;  -- nie ma nadgodzin (w skali miesiaca), to nie naliczamy w og?le zlecenia
		END IF;
		
		SET @jarz.extra.ZaZlecenie  = _ZaZlecenie;
				
		IF _ZaZlecenie >= 0 THEN -- IF _ZaZlecenie > 0 THEN - zmiana 22-11-2021 tymczasowa proteza
		    -- SET  _ZaZlecenie = _Rnd(_ZaZlecenie, 2);											  
			--	SET  _ZaZlecenie = ROUND(_ZaZlecenie, 0);											  
			SET  _ZaZlecenie = CEIL(_ZaZlecenie);

			update frekw set
			  StawkaDlaKolek = _SG,
			  WynagrNadGodz = _ZaZlecenie
			WHERE rok = _Param_B AND miesiac = _Param_C AND PracGUID = _Param_D	AND deleted = 0;   
			
				
					 SET @jarz.extra.DataOd = ifnull(concat(_Param_B,'-',_Param_C,'-01'), current_date);			
					 SET @jarz.extra.DataDo = ifnull(last_day(concat(_Param_B,'-',_Param_C,'-01')), current_date);
					 SET @jarz.extra.DataWypl = _Param_E; -- ifnull(last_day(concat(_Param_B,'-',_Param_C,'-01')), current_date);
										
					SET _MZ_idn = 0;
					
					-- jesli jest juz rekord o takim GUIDzie, to kopiujemy jego idn i wstawiamy do tab.tymcz. (ma to pozniej znaczenie przy replace)
					set _I = 0;
					select idn into _I from prace_zlecone where guid = _Param_A;
					
					if _I  = 0 then
						select max(idn)+1 into _I from prace_zlecone;
					end if;	
					
					-- #032872 ew. wynagrodzenie za czas urlopu wypocz.
					IF _godzW > 0 THEN
					    SET @jarz.extra.godzW = _godzW;
					    SET _period = 100* _VarINT(_Param_B) + _VarINT(_Param_C); -- miesiac w ktorym byl urlop w notacji YYYYMM
						SET @jarz.extra.period = _period;

						SET @startmc = _period -3 -1; -- od tego miesiaca zbieramy dane, dodatkowe -1 bo przesuniecie daty wyplaty
						SET @endmc = _period -1 -1; -- do tego miesiaca zbieramy dane, dodatkowe -1 bo przesuniecie daty wyplaty
						
						SET @PeriodGraniczny = 100* YEAR(@DataZatrudnieniaWzakl) + month(@DataZatrudnieniaWzakl);

						IF @endmc >= @PeriodGraniczny then
       SET @startmc = greatest(@PeriodGraniczny, @startmc);
       SET @endmc = greatest(@PeriodGraniczny, @endmc);
						end if;

						-- SET _mc_od, SET _mc_do
					
						-- (1) suma skladnikow placowych z 3 miesiecy poprzedzajacych urlop
						SELECT SUM(ps.kwota + ps.ZmniejszZwieksz)
						INTO  _suma_place
						FROM place g, place_skladniki ps, definicja_skladnika_placy dsp
						WHERE ps.GUID_definicja_skladnika_placy = dsp.guid AND dsp.DoUrlopu = 1
							AND ps.GUID_zapisu_placowego = g.guid
							-- AND g.guid_pracownika = _Param_D AND g.rok = _Param_B AND (g.miesiac BETWEEN _VarINT(_Param_C) - 3-1 AND _VarINT(_Param_C) - 1-1) AND g.deleted = 0
							AND g.guid_pracownika = _Param_D AND g.deleted = 0 
							-- AND g.rok = 2013 AND (g.miesiac BETWEEN 9 AND 11)   -- rozwiazac na przelomie lat
							AND ( (100*g.rok + g.miesiac) BETWEEN PERIOD_ADD(_period, -3-1) AND PERIOD_ADD(_period, -1-1) )
							and (100*g.rok + g.miesiac) >= @PeriodGraniczny
						;
						set @_suma_place = _suma_place;

						-- (2) suma wynagr. z tytulu umowy-zlecenia z 3 m-cy poprz. urlop  (analogia do (1) )
						SELECT IFNULL(SUM(ZaZlecenie), 0)
						INTO  _suma_zlec
						FROM prace_zlecone  z
						WHERE 
						  z.guid_pracownika = _Param_D AND z.deleted=0 
						  -- AND z.rok = _Param_B AND (z.miesiac BETWEEN _VarINT(_Param_C) - 3-1 AND _VarINT(_Param_C) - 1-1) 
						  -- AND z.rok = 2013 AND (z.miesiac BETWEEN 9 AND 11)  -- rozwiazac na przelomie lat
						  AND ( (100*z.rok + z.miesiac) BETWEEN PERIOD_ADD(_period, -3-1) AND PERIOD_ADD(_period, -1-1) )
						  and (100*z.rok + z.miesiac) >= @PeriodGraniczny
						;
						SET @_suma_zlec = _suma_zlec;
					
						-- (3) czasy pracy z 3 m-cy poprzedzajacych urlop
						SELECT 						
						_Rnd(SUM(IF(absencja IN ('E', '', 'P') , kp_godziny, 0))/60, 0)  AS realCP_3mc,
						_Rnd(SUM(godziny)/60, 0) AS godz_3mc
						INTO _OCP_3mc, _godz_3mc
						FROM 
							frekw_po 
						WHERE 
							PracGUID = _Param_D 
							-- YEAR(rok_msc_dzien) = _Param_B AND (MONTH(rok_msc_dzien) BETWEEN _VarINT(_Param_C) - 3 -1 AND _VarINT(_Param_C) - 1 -1) 
							-- YEAR(rok_msc_dzien) = 2013 AND (MONTH(rok_msc_dzien) BETWEEN 9 AND 11) -- rozwiazac na przelomie lat
							AND ( (100*YEAR(rok_msc_dzien) + MONTH(rok_msc_dzien)) BETWEEN PERIOD_ADD(_period, -3-1) AND PERIOD_ADD(_period, -1-1) )
							and (100*YEAR(rok_msc_dzien) + MONTH(rok_msc_dzien)) >= @PeriodGraniczny
						;
						SET @_OCP_3mc = _OCP_3mc;
						SET @_godz_3mc = _godz_3mc;	
					
						-- (4) stawki godz. urlopu wypocz. w ramach umowy o prace i w ramach umowy-zlecenia
						-- jesli okres z ktorego zbieramy jest przed zatrudnieniem jako stawki bierzemy stawki z kartoteki pracownika
						IF @endmc >= @PeriodGraniczny then
       SET _SGp = _SGdef;
						 SET _SGz = _SG;
						ELSE
       SET _SGp = _Rnd(_suma_place / _OCP_3mc, 2);
						 SET _SGz = _Rnd((_suma_place + _suma_zlec)/ _godz_3mc, 2);
						END if;

						set @_SGp = _SGp;
						set @_SGz = _SGz;
						-- (5) wynagr. za urlop wypocz. z tytulu umowy o prace  (stawka * godz. urlopu)
						SET aPlaca =  _Rnd(_SGp * _godzW, 2);
						
						-- (6) wynagr. za urlop wypocz. z tytulu umowy-zlecenia  
						SET -- _kwotaW =  (_SGz * _godzW) -  aPlaca;
						   _kwotaW = _Rnd( (_SGz - _SGp) * _godzW ,0);
						IF _kwotaW < 0 THEN
							SET _kwotaW = 0;
						END IF;	
						SET @_kwotaW = _kwotaW;
					END IF;  -- naliczenia wynagrodzenia za czas urlopu wypoczynkowego
										
																					
					-- wstawienie do place_zlec i do place_skladniki
					REPLACE INTO tt_prace_zlecone 
					(idn, GUID, GUID_pracownika,  miesiac, rok, DataOd, DataDo, DataZawarcia, NrZlecenia, 
					  ZaZlecenie,  PoleTechniczne1, kwota_za_UW, RodzajRyczaltu,  -- slon add DataOd 
					  -- 2021-04-22 w uzgodnieniu z p. Ula - kwota za urlop dodawana do kwoty za zlecenie i pokazywana w polu technicznym tylko do podgladu
					  KosztyUzyskaniaWproc, ProcFemerytalnyZleceniob, ProcFrentowyZleceniob, ProcFchorobowyZleceniob,
					  ProcFwypadkowyZleceniob, ProcKasaChorychZleceniobPobr, ProcKasaChorychZleceniobOdlicz,
					  ProcFemerytalnyZleceniod, ProcFrentowyZleceniod, ProcFchorobowyZleceniod, ProcFwypadkowyZleceniod, -- ProcFwypadkowyZleceniod
					  ProcKasaChorychZleceniod, ProcFPracy, ProcFGSP, ProcKasaChorOdliczHipot, AreaGUID, DataWyplaty, MZ_Idn, ZwolnienieOdPodatku26Lat, 
					  NaliczUlgeDlaDR, NaliczUlgeDlaPE, RezygnPrzesunZal, rach_do_umowy,   -- , ZlecERP
					  DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec
					)   -- nazwisko,  @pl.gratyf.za_zlecenie
					VALUES(_I, _Param_A, _Param_D, _Param_C, _Param_B, @jarz.extra.DataOd, @jarz.extra.DataDo, @jarz.extra.DataOd, '', 
					  _ZaZlecenie+IFNULL(_kwotaW, 0), IFNULL(_kwotaW, 0), 0, 7,   
					  (SELECT ValueN FROM IReg WHERE idkey = 'Procent_kosztow_um_zlec' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecbiorcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecbiorcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecbiorcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_zlecbiorcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecbiorcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecdawcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecdawcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecdawcy' AND rok = YEAR(_Param_E)), 
					  -- , ProcFwypadkowyZleceniod = DBPlacesProc_wypadkowe.GetProcentWypadkowego(aDataWyplaty);
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_zlecdawcy' AND rok = YEAR(_Param_E)), 
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecdawcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FP_zlecdawcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FGSP_zlecdawcy' AND rok = YEAR(_Param_E)),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = 2021),
					  _Param_E, @jarz.extra.DataWypl, _MZ_idn, @ZwolnienieOdPodatku26Lat, @ZwolnienieOdPodatkuDR, @ZwolnienieOdPodatkuPE, @RezygnPrzesunZal, 1,
						GREATEST(@DodUbezpMedyczneZlecKartoteka - @SumaDodUbezpMedyczneZlec, 0),
						GREATEST(@PotrDodUbezpMedyczneZleckartoteka - @SumaPotrDodUbezpMedyczneZlec, 0)
					  -- , 1					  
					);  -- 20, (SELECT nazwisko from osoby WHERE GUID = _Param_C),
				
													
					-- Z_1-Z_5(rodz.skl = 0) 
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_1')), 'Z_1', _Param_A, _ZaZlecenie+IFNULL(_kwotaW, 0), _ZaZlecenie+IFNULL(_kwotaW, 0) , 0);  -- @pl.gratyf.za_zlecenie, @pl.gratyf.za_zlecenie, jednolicie z polem w zapisie!
					set @jmam='z1';
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_2')), 'Z_2', _Param_A, 0, 0, 0);
					set @jmam='z2';
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_3')), 'Z_3', _Param_A, 0, 0, 0);
					set @jmam='z3';
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_4')), 'Z_4', _Param_A, 0, 0, 0);
					set @jmam='z4';
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_5')), 'Z_5', _Param_A, 0, 0, 0);
					set @jmam='z5';
					-- Z_ZUS_1 - 9 (rodz.skl = 6)  _ZLEC_ZUS
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_1')), 'Z_ZUS_1', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_2')), 'Z_ZUS_2', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_3')), 'Z_ZUS_3', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(md5(concat(_Param_A, 'Z_ZUS_4')), 'Z_ZUS_4', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_5')), 'Z_ZUS_5', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_6')), 'Z_ZUS_6', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_7')), 'Z_ZUS_7', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_8')), 'Z_ZUS_8', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_9')), 'Z_ZUS_9', _Param_A, 0, 0, _ZLEC_ZUS);
					set @pl.gratyf.debug = 'zus9';
									
					CALL pl_gratyfikacje_tools_arg7('pl.przepisz.dane.pracownika.one.zlec', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, _Param_F);

					-- wszystkie sk?adki ZUS maj? by? naliczone:
					update tt_prace_zlecone z, Pracownicy k
					set 
						NaliczacZus = 1,PodlUbezpChorob = 1, PodlUbezpWypadk = 1, PodlUbezpZdrowot = 1, z.PracaStr = k.uwagi_dodatkowe
					where z.GUID = _Param_A and z.guid_pracownika = k.guid;
 					

					CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.skladki', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, _Param_F);
						
				-- dodac kwota_za_UW		
				SET _SQLText = 'SELECT
					(z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy) AS KwotaBrutto,
					_Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2) AS KosztyUzyskania
					INTO
						@one.zlec.KwotaBrutto, @one.zlec.KosztyUzyskania
					FROM tt_prace_zlecone z			
					WHERE	
						z.GUID = ''#_ZlecGUID#'' ;
				';
				
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
				SET @_SQLText_sel =  _SQLText;
				CALL _ExecuteCmd(_SQLText, @Error);	
				
				-- przeliczenie kwot innych potracen i innych dodatkow
				SET _SQLText = 'UPDATE tt_prace_zlecone z 
					SET
						z.InneDod = (select sum(kwota) from place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Dod#),	
						z.InnePotr = (select sum(kwota) from place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Potr#)	
					WHERE	
						z.GUID = ''#_ZlecGUID#'' ; 
				';
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
				SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Dod#', cInneDodatki);	
				SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Potr#', _ZLEC_Potr);	
				SET @_SQLText = _SQLText;		
				CALL _ExecuteCmd(_SQLText, @Error);	
															
				-- przeliczenie kwot na zleceniu
			-- TODO: trzeba IF 26lat THEN ... ELSE po staremu 			
				IF @ZwolnienieOdPodatku26Lat = 1 OR @ZwolnienieOdPodatkuDR = 1 OR @ZwolnienieOdPodatkuPE = 1 THEN           
					
					IF @ZwolnienieOdPodatku26Lat = 1 THEN -- wejscie tylko dla 26 lat
						SET @KwotaDoLimitu26 = 0;
						SELECT _Rnd2(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
							(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
							dieta_delegacje * ProcFrentowyZleceniob/100 + 
							dieta_delegacje * ProcFchorobowyZleceniob/100) +
							SkladkaPPE + PPKskladkaPracod + DodUbezpMedyczneZlec)
							INTO @KwotaDoLimitu26
						FROM tt_prace_zlecone 
						WHERE GUID = _Param_A 
						;
				
						IF @MaxDochodZwolnionyPodatek26lat >= (@KwotaDoLimitu26Narast+@KwotaDoLimitu26) THEN
							UPDATE tt_prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0, z.ZaliczkaPrzedSklUbezp = 0 WHERE GUID = _Param_A;
						ELSE --  tutaj wchodzimy gdy nastpilo przeekroczenie limitu ulgi albo na tym zapisie albo   wczesniej
                            IF @MaxDochodZwolnionyPodatek26lat > (@KwotaDoLimitu26Narast) THEN --  nie było wczesniej przekroczenia limitu czyli przekroczenie jest na tym zapisie

								UPDATE tt_prace_zlecone z
								SET z.RazemSklZleceniobiorcyDoOdlicz =
										_Rnd2(((@KwotaDoLimitu26Narast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatek26lat)
											/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
								WHERE GUID = _Param_A
								;

								-- 80.000 + 10.000 - 85528=4472

								UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
									_Rnd2(((@KwotaDoLimitu26Narast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatek26lat
									- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
								WHERE GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr =
								((@KwotaDoLimitu26Narast + @KwotaDoLimitu26)- @MaxDochodZwolnionyPodatek26lat)
								- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
								WHERE GUID = _Param_A;


								UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
								WHERE GUID = _Param_A
								;

								SET @KwotaDoLimitu26 = @KwotaDoLimitu26 - (@KwotaDoLimitu26Narast + @KwotaDoLimitu26 -@MaxDochodZwolnionyPodatek26lat);


							ELSE -- przekroczenie limitu nastapilo juz wczeniej
								 -- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
								SET @KwotaDoLimitu26 = 0;

								UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
									_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
								WHERE z.GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
								WHERE GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
								WHERE GUID = _Param_A
								;

							END IF;
						END IF;

						UPDATE tt_prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
							z.Dochod * z.ProcentPodatku / 100
						WHERE GUID = _Param_A
						;
					END IF; -- wejscie tylko dla 26 lat

					IF @ZwolnienieOdPodatkuDR = 1 THEN -- wejscie tylko dla DR
						SET @KwotaDoLimituDR = 0;
						SELECT _Rnd2(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
							(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
							dieta_delegacje * ProcFrentowyZleceniob/100 + 
							dieta_delegacje * ProcFchorobowyZleceniob/100)
							+ SkladkaPPE + PPKskladkaPracod + DodUbezpMedyczneZlec)
							INTO @KwotaDoLimituDR
						FROM tt_prace_zlecone 
						WHERE GUID = _Param_A 
						;
				
						IF @MaxDochodZwolnionyPodatekDR >= (@KwotaDoLimituDRNarast+@KwotaDoLimituDR) THEN
							UPDATE tt_prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0, z.ZaliczkaPrzedSklUbezp = 0 WHERE GUID = _Param_A;
						ELSE --  tutaj wchodzimy gdy nastpilo przeekroczenie limitu ulgi albo na tym zapisie albo   wczesniej
                            IF @MaxDochodZwolnionyPodatekDR > (@KwotaDoLimituDRNarast) THEN --  nie było wczesniej przekroczenia limitu czyli przekroczenie jest na tym zapisie

								UPDATE tt_prace_zlecone z
								SET z.RazemSklZleceniobiorcyDoOdlicz =
										_Rnd2(((@KwotaDoLimituDRNarast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatekDR)
											/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
								WHERE GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
									_Rnd2(((@KwotaDoLimituDRNarast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatekDR
									- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
								WHERE GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr =
								((@KwotaDoLimituDRNarast + @KwotaDoLimituDR)- @MaxDochodZwolnionyPodatekDR)
								- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
								WHERE GUID = _Param_A;


								UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
								WHERE GUID = _Param_A
								;

								SET @KwotaDoLimituDR = @KwotaDoLimituDR - (@KwotaDoLimituDRNarast + @KwotaDoLimituDR -@MaxDochodZwolnionyPodatekDR);


							ELSE -- przekroczenie limitu nastapilo juz wczeniej
								 -- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
								SET @KwotaDoLimituDR = 0;

								UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
									_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
								WHERE z.GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
								WHERE GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
								WHERE GUID = _Param_A
								;

							END IF;
						END IF;

						UPDATE tt_prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
							z.Dochod * z.ProcentPodatku / 100
						WHERE GUID = _Param_A
						;
					END IF; -- wejscie tylko dla DR

					
					IF @ZwolnienieOdPodatkuPE = 1 THEN -- wejscie tylko dla PE
						SET @KwotaDoLimituPE = 0;
						SELECT _Rnd2(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
							(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
							dieta_delegacje * ProcFrentowyZleceniob/100 + 
							dieta_delegacje * ProcFchorobowyZleceniob/100)
							+ SkladkaPPE + PPKskladkaPracod  + DodUbezpMedyczneZlec)
							INTO @KwotaDoLimituPE
						FROM tt_prace_zlecone 
						WHERE GUID = _Param_A 
						;
				
						IF @MaxDochodZwolnionyPodatekPE >= (@KwotaDoLimituPENarast+@KwotaDoLimituPE) THEN
							UPDATE tt_prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0, z.ZaliczkaPrzedSklUbezp = 0 WHERE GUID = _Param_A;
						ELSE --  tutaj wchodzimy gdy nastpilo przeekroczenie limitu ulgi albo na tym zapisie albo   wczesniej
                            IF @MaxDochodZwolnionyPodatekPE > (@KwotaDoLimituPENarast) THEN --  nie było wczesniej przekroczenia limitu czyli przekroczenie jest na tym zapisie

								UPDATE tt_prace_zlecone z
								SET z.RazemSklZleceniobiorcyDoOdlicz =
										_Rnd2(((@KwotaDoLimituPENarast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatekPE)
											/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
								WHERE GUID = _Param_A
								;

								-- 80.000 + 10.000 - 85528=4472

								UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
									_Rnd2(((@KwotaDoLimituPENarast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatekPE
									- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
								WHERE GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr =
								((@KwotaDoLimituPENarast + @KwotaDoLimituPE)- @MaxDochodZwolnionyPodatekPE)
								- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
								WHERE GUID = _Param_A;


								UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
								WHERE GUID = _Param_A
								;

								SET @KwotaDoLimituPE = @KwotaDoLimituPE - (@KwotaDoLimituPENarast + @KwotaDoLimituPE -@MaxDochodZwolnionyPodatekPE);


							ELSE -- przekroczenie limitu nastapilo juz wczeniej
								 -- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
								SET @KwotaDoLimituPE = 0;

								UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
									_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
								WHERE z.GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
								WHERE GUID = _Param_A
								;

								UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
								WHERE GUID = _Param_A
								;

							END IF;
						END IF;

						UPDATE tt_prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
							z.Dochod * z.ProcentPodatku / 100
						WHERE GUID = _Param_A
						;
					END IF; -- wejscie tylko dla PE
					

					UPDATE tt_prace_zlecone z
						SET z.KosztyUzyskaniaHipotetyczna = _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
						z.KwotaBrutto = z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz
						WHERE GUID = _Param_A;
					
					SET _SQLText = 'UPDATE tt_prace_zlecone z
						SET
						z.DochodHipotetyczna = _Rnd(
						(z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy)
						- KosztyUzyskaniaHipotetyczna 
						+ SkladkaPPE
						+ PPKskladkaPracod,
							0),  

						z.ZalPrzedSklUbezpHipotetyczna = _Rnd(z.KwotaBrutto - z.wynagr_prokurent + z.SkladkaPPE + z.PPKskladkaPracod
                            + z.RazemSklZleceniobiorcyDoOdlicz
							- z.RazemSkladkiZleceniobiorcy - z.KosztyUzyskaniaHipotetyczna
							, 0) * (z.ProcentPodatkuHipot/100),

						z.Zaliczka = _Rnd(
						 			GREATEST(0, _Rnd2(z.Dochod * (z.ProcentPodatku/100)) - z.SklKasaChorychZleceniobOdlicz)
								, 0),
						
						z.ZaliczkaHipotetyczna  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
									- z.RazemSkladkiZleceniobiorcy 
									+ z.PPKskladkaPracod	
									- _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatkuHipot/100) - z.SklKCZlecOdliczHipot), 0)
								
						WHERE	
							z.GUID = ''#_ZlecGUID#'' ; ';
								
					SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
					SET @_SQLTextUpdate = _SQLText;		
					CALL _ExecuteCmd(_SQLText, @Error);	

					-- sekcja skopiowana z przebiegu dla zwyklej umowy, bo jednak przy czesciowym przekroczeniu trzeba i kwote wolna uwzglednic
					IF @KwotaWolnaOdPodatkuZlecKartoteka > 0 AND (@SumaKwotaWolnaOdPodatkuZlec < @KwotaWolnaOdPodatkuZlecKartoteka) THEN

						SET @PozostaloKwotyWolnej = @KwotaWolnaOdPodatkuZlecKartoteka - @SumaKwotaWolnaOdPodatkuZlec;

						SELECT z.ZaliczkaPrzedSklUbezp INTO @zaliczkaZapis FROM tt_prace_zlecone z WHERE z.guid = _Param_A;

						SET @KwotaWolnaNaZapisie = LEAST(@zaliczkaZapis, @PozostaloKwotyWolnej);

						UPDATE tt_prace_zlecone z SET
							KwotaWolnaOdPodatkuZlec = @KwotaWolnaNaZapisie,
							z.zaliczka = _Rnd(z.Zaliczka - @KwotaWolnaNaZapisie,0),
							z.ZaliczkaPrzedSklUbezp = z.ZaliczkaPrzedSklUbezp - @KwotaWolnaNaZapisie
						WHERE z.GUID = _Param_A;

					END IF;

					-- obliczamy czy stosować rozporzadzenie o przesunieciu poboru zaliczki, czyli obliczania ZaliczkiOdroczonej
					-- ale nic wiecej nie robimy bo 26lat DR PE są zwolnieni z podatku a wiece podatek jest =0
					-- i nie mozna go juz bardziej zmniejszyc, ustawiamy tylko pole ZaliczkaOdroczona na 0
					
					SET @CzyStosowacRozporzadzKwota =
						(SELECT ZaZlecenie + wynagr_prokurent + kwota_za_UW + DodUbezpMedyczneZlec
							FROM tt_prace_zlecone WHERE GUID = _Param_A)
						+ @SumaZaZlecenieMsc + @SumaWynagr_prokurentMsc + @SumaKwota_za_UWMsc;
					
					UPDATE tt_prace_zlecone z
						SET z.KwotaNetto =
							if (z.RazemSkladkiZleceniobiorcy <> z.RazemSklZleceniobiorcyDoOdlicz,
								if (z.RazemSklZleceniobiorcyDoOdlicz = 0,
										z.KwotaBrutto - DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy - z.SklKasaChorychZleceniobPobr,

										z.ZaZlecenie + z.wynagr_prokurent + z.kwota_za_UW
										+ z.ZasChorRazem + z.ZasMacierz
										+ z.ZasRehab + z.ZasOpiekun - z.RazemSkladkiZleceniobiorcy - z.SklKasaChorychZleceniobPobr -
										z.zaliczka),

							z.KwotaBrutto - DodUbezpMedyczneZlec - z.SklKasaChorychZleceniobPobr - z.zaliczka),
							z.KwotaDoLimitu26 = @KwotaDoLimitu26,
							z.KwotaDoLimitu26Narast = @KwotaDoLimitu26Narast,
							z.KwotaDoLimituDR = @KwotaDoLimituDR,
							z.KwotaDoLimituDRNarast = @KwotaDoLimituDRNarast,
							z.KwotaDoLimituPE = @KwotaDoLimituPE,
							z.KwotaDoLimituPENarast = @KwotaDoLimituPENarast,
							z.ZaliczkaOdroczona = 0
					WHERE z.GUID = _Param_A
					;
				
					UPDATE tt_prace_zlecone z
						SET z.DoWyplaty = _Rnd(z.KwotaNetto - PotrDodUbezpMedyczneZlec - z.InnePotr + z.InneDod + z.InneZasilkZUS, 2) - z.PPKskladkaPracow
					WHERE z.GUID = _Param_A
					;				
				
				ELSE -- TODO: PPKskladkaPracod koniec sekcji 26, DR, PE

					UPDATE  tt_prace_zlecone z SET
						z.RazemSklZleceniobiorcyDoOdlicz = z.RazemSkladkiZleceniobiorcy
					WHERE z.GUID = _Param_A
					;

				UPDATE tt_prace_zlecone z
						SET z.KosztyUzyskaniaHipotetyczna = _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
						z.KwotaBrutto = z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz
					WHERE z.GUID = _Param_A
					;
					
					UPDATE  tt_prace_zlecone z SET
						z.KosztyUzyskania = z.KosztyUzyskaniaHipotetyczna
					WHERE z.GUID = _Param_A
     ;


					UPDATE tt_prace_zlecone z SET
						z.DochodHipotetyczna = _Rnd(
						(z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy)
						- KosztyUzyskaniaHipotetyczna 
						+ SkladkaPPE
						+ PPKskladkaPracod,
							0),  

                        z.ZalPrzedSklUbezpHipotetyczna = _Rnd(z.KwotaBrutto - z.wynagr_prokurent + z.SkladkaPPE + z.PPKskladkaPracod
                            + z.RazemSklZleceniobiorcyDoOdlicz
							- z.RazemSkladkiZleceniobiorcy - z.KosztyUzyskaniaHipotetyczna
							, 0) * (z.ProcentPodatkuHipot/100),
												
						z.zPodstPPDprzedZaokr = z.KwotaBrutto - z.KosztyUzyskania  + z.PPKskladkaPracod,
						z.Dochod = _Rnd(z.KwotaBrutto - z.KosztyUzyskania  + z.PPKskladkaPracod, 0),
						z.ZaliczkaPrzedSklUbezp = _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
												  - z.RazemSkladkiZleceniobiorcy 
												  + z.PPKskladkaPracod
												  - _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100),
						z.Zaliczka  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
									- z.RazemSkladkiZleceniobiorcy 
									+ z.PPKskladkaPracod	
									- _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0),

						z.ZaliczkaHipotetyczna  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
									- z.RazemSkladkiZleceniobiorcy 
									+ z.PPKskladkaPracod	
									- _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatkuHipot/100) - z.SklKCZlecOdliczHipot), 0)
					WHERE z.GUID = _Param_A
					;
					
					IF @KwotaWolnaOdPodatkuZlecKartoteka > 0 AND (@SumaKwotaWolnaOdPodatkuZlec < @KwotaWolnaOdPodatkuZlecKartoteka) THEN

						SET @PozostaloKwotyWolnej = @KwotaWolnaOdPodatkuZlecKartoteka - @SumaKwotaWolnaOdPodatkuZlec;

						SELECT z.ZaliczkaPrzedSklUbezp INTO @zaliczkaZapis FROM tt_prace_zlecone z WHERE z.guid = _Param_A;

						SET @KwotaWolnaNaZapisie = LEAST(@zaliczkaZapis, @PozostaloKwotyWolnej);

						UPDATE tt_prace_zlecone z SET
							KwotaWolnaOdPodatkuZlec = @KwotaWolnaNaZapisie,
							z.zaliczka = _Rnd(z.Zaliczka - @KwotaWolnaNaZapisie,0),
							z.ZaliczkaPrzedSklUbezp = z.ZaliczkaPrzedSklUbezp - @KwotaWolnaNaZapisie
						WHERE z.GUID = _Param_A;

					END IF;

					UPDATE tt_prace_zlecone z SET
						z.KwotaNetto = (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
									- z.RazemSkladkiZleceniobiorcy 
									- z.SklKasaChorychZleceniobPobr 
									- z.Zaliczka
					WHERE z.GUID = _Param_A
					;
					
					SET @CzyStosowacRozporzadzKwota =
						(SELECT ZaZlecenie + wynagr_prokurent + kwota_za_UW
							FROM tt_prace_zlecone WHERE GUID = _Param_A)
						+ @SumaZaZlecenieMsc + @SumaWynagr_prokurentMsc + @SumaKwota_za_UWMsc;
					
					
					SET @ZaliczkaOdroczona = 0;
					SET @aDoPrzerzucenia = 0;
					SET @aZaliczkaHipotetyczna = 0;
					SET @aKwotaNettoWstepnaTmp = 0;
					
					SELECT ZaliczkaHipotetyczna, Zaliczka
                    INTO @ZaliczkaHipotetycznaZapis, @Zaliczka
					FROM tt_prace_zlecone 
					WHERE GUID = _Param_A;

					if _Param_E > '2021-12-31' and @UwzglednijPrzesuniecieZal and @RezygnPrzesunZal = 0 then
					
						if @CzyStosowacRozporzadzKwota <= @MaxRezygnPrzesunZalKwota then

							IF (@ZwolnienieOdPodatku26Lat = 1) then
								SET @aZaliczkaHipotetyczna = 0;
							ELSE
								SET @aZaliczkaHipotetyczna = @ZaliczkaHipotetycznaZapis;
							END IF;
							
							if (@aZaliczkaHipotetyczna < @Zaliczka) then
								SET @ZaliczkaOdroczona = @Zaliczka - @aZaliczkaHipotetyczna;
								SET @Zaliczka = @aZaliczkaHipotetyczna;
							ELSEIF @aZaliczkaHipotetyczna > @Zaliczka then
								SET @aDoPrzerzucenia = LEAST(@aZaliczkaHipotetyczna - @Zaliczka, @SUMZaliczkaOdroczona);
								SET @Zaliczka = @Zaliczka + @aDoPrzerzucenia;
								SET @ZaliczkaOdroczona = -@aDoPrzerzucenia;
							END IF;
						else
						-- przekroczył kwotę w miesiącu i muszę skorygować czyli cofnąc odroczenie zalczki czyli zwiększyć zaliczkę na tym zapisie
							if @SUMZaliczkaOdroczona <> 0 then
								SET @ZaliczkaOdroczona = -@SUMZaliczkaOdroczona;
								SET @aPierwotnaZaliczkaTmp = @Zaliczka;
								SET @Zaliczka = @Zaliczka + @SUMZaliczkaOdroczona;
								      --  20         20   + 500
								if @Zaliczka > (@aKwotaNettoWstepnaTmp + @aPierwotnaZaliczkaTmp) then
								      --  520             100                      20   
									SET @aMogePrzerzucic = FLOOR(@aKwotaNettoWstepnaTmp);
									SET @Zaliczka = @aPierwotnaZaliczkaTmp + @aMogePrzerzucic;
									SET @ZaliczkaOdroczona = -@aMogePrzerzucic;
								end IF;
							end IF;
						end IF;
					end if;
					
					UPDATE tt_prace_zlecone z SET
						z.Zaliczka = @Zaliczka,
						z.ZaliczkaOdroczona = @ZaliczkaOdroczona
					WHERE	z.GUID = _Param_A
					; 
					
					
					SELECT (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
									- z.RazemSkladkiZleceniobiorcy
									- z.SklKasaChorychZleceniobPobr
									- z.Zaliczka
					INTO @aKwotaNettoWstepnaTmp
					FROM tt_prace_zlecone z
					WHERE z.GUID = _Param_A
					;
					
					if (@Zaliczka > @aKwotaNettoWstepnaTmp) and (@ZaliczkaOdroczona<0) then
						SET @aNadwyzkaZaliczki = @Zaliczka - floor(@aKwotaNettoWstepnaTmp);
						SET @Zaliczka = floor(@aKwotaNettoWstepnaTmp);
						SET @aKwotaNettoWstepnaTmp = 0;
						SET @ZaliczkaOdroczona = @ZaliczkaOdroczona + @aNadwyzkaZaliczki;
					-- else
						-- SET @aKwotaNettoWstepnaTmp = @aKwotaNettoWstepnaTmp - @Zaliczka;
					END IF;
					
					UPDATE tt_prace_zlecone z SET
						z.KwotaNetto = IF(@aKwotaNettoWstepnaTmp > 0, @aKwotaNettoWstepnaTmp, 0),
						z.Zaliczka = @Zaliczka,
						z.ZaliczkaOdroczona = @ZaliczkaOdroczona,
						z.DoWyplaty  = @aKwotaNettoWstepnaTmp
							- z.InnePotr + z.InneDod +z.InneZasilkZUS - z.PPKskladkaPracow - z.PotrDodUbezpMedyczneZlec
					WHERE	z.GUID = _Param_A
					; 
					-- przeniesione wyzej do oddzielnego zapytania: z.InnePotr = (select sum(kwota) from place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Potr#)				

				END IF;
				
				-- sposob wyplaty
				SET _SQLText = '
				update  tt_prace_zlecone z, Pracownicy k
				set
					z.wyplataprzelewem = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), z.dowyplaty, 0),
					z.wyplatagotowka   = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), 0, z.dowyplaty)					
				where z.guid = ''#_ZlecGUID#'' and z.guid_pracownika = k.GUID;
				';
				
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
				SET @_SQLText_wypl = _SQLText;		
				CALL _ExecuteCmd(_SQLText, @Error);	
				
			IF _Param_F = 'auto' THEN          -- naliczanie automatyczne, czyli z calla => wstawiamy wartosci do tabeli	
			  
			  -- sprawdzamy, czy jest juz zamkniete zlecenie o takim GUIDzie
			  SET _I = 0;
			  select COUNT(*) into _I from prace_zlecone where guid = _Param_A and ZamknietyZapis = 1;
			  
			  IF (_I = 0) THEN  -- jesli nie ma zaknietego zlecenia, to wstawiamy/nadpisujemy
				
				CALL sys_log_insert(5087, 2, _Param_A,'Stworzenie zapisu prace zlecone za miesiac z automatu.');

				REPLACE INTO 
					prace_zlecone 
				SELECT *				   
				FROM tt_prace_zlecone 
				WHERE  GUID = _Param_A;					
				
				REPLACE INTO 
					place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				SELECT 
					GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika
				FROM 
					tt_zlec_skladniki 
				WHERE  GUID_zapisu_placowego = _Param_A;					
				
			  END IF;	
					
			  
			-- koniec    naliczania automatycznego ( czyli z calla)
			ELSE  -- _Param_F = 'manual' tryb r?czny (wywolanie z aplikacji) - warto?ci trzeba przekaza? jako select
				-- select 	ZaZlecenie .....  <- w Delphi b?dzie aDS := ConnectSuport.GetNavQuery
				
				select 
					_SG AS StGodz, _GrafikCzasPracy AS PracaZ, _godzSNS AS godzSNS, _GodzNocne AS GodzNoc, _ProcPremii AS ProcPremii, _NCP AS NCP,
					ZaZlecenie, _DodNocny AS DodNocny, (ZaZlecenie - _DodNocny) AS Podst, DataWyplaty, DataOd, DataDo, _godzW, _kwotaW,
					aPlaca, aNadGodz150, aNadGodz200, aPremia, aPremiaMotyw, aPremiaUzn, aNoc, aNoc_yy					
					from tt_prace_zlecone where GUID_pracownika = _Param_D;
		
			END IF;	-- trybu r?cznego
		ELSE	 -- (gdy kwota ZaZlecenie = 0)  :
			select 
			  _SG AS StGodz, _GrafikCzasPracy AS PracaZ, _godzSNS AS godzSNS, _GodzNocne AS GodzNoc, _ProcPremii AS ProcPremii, _NCP AS NCP,
			  0 AS ZaZlecenie, _DodNocny AS DodNocny, 0 AS Podst, _varDateTime(@konkol_zoo.DataWypl) AS DataWyplaty, _godzW, _kwotaW,	
			  aPlaca, aNadGodz150, aNadGodz200, aPremia, aPremiaMotyw, aPremiaUzn, aNoc, aNoc_yy,					
			  _varDateTime(@konkol_zoo.DataOd) AS DataOd, _varDateTime(@konkol_zoo.Datado) AS DataDo;
		END IF;  -- IF @pl.gratyf.za_zlecenie > 0
	

	
	END IF;  -- IF _MODE = 'calc.one.order.mode.jarz.extra' THEN
	
/*---------------------------------------------------------------------------------------------------------
	'calc.auto.multi.order.mode.konkol_ht'
		Zalozenie tabel tymczasowych, wlasciwe naliczenie zlecenia, zwrocenie warto?ci jako SELECT
		Parametry
		_Param_A	GUID zlecenia
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	AreaGUID  = GUID sklepu (dla trybu "ht" nieu?ywane)
		_Param_F   -- tryb: zawsze "auto" (naliczanie automat.) (tryb "manual" wyst?puje dla "one.order.mode")
				
		CALL pl_gratyfikacje_tools_arg7('calc.auto.multi.order.mode.konkol_ht', '', '2012', '9', '', '', 'auto');
------------------------------------------------------------------------------------------------------------*/

	IF _MODE = 'calc.auto.multi.order.mode.konkol_ht' THEN
	    set @co = 'start';
		-- 1) zakladamy tabele tymcz. (kopie tabel prace_zlecone i place_skladniki)
		CALL pl_gratyfikacje_tools_arg7('create.work.tables', '', '', '', '', '', '');
		
		DROP TEMPORARY TABLE IF EXISTS `tt_hr_frekw`;
		CREATE TEMPORARY TABLE  `tt_hr_frekw` AS
		SELECT  DISTINCT k.guid AS hrGUID, f.guid AS FrekwGUID   --    s.symbol, s.nazwa,
		FROM Pracownicy k 
		JOIN osoby o ON o.guid = k.guid
		JOIN frekw f ON f.pracguid = k.guid AND f.rok = _Param_B and f.miesiac = _Param_C and f.deleted = 0
				WHERE -- d.osobaguid = _GUID   
					-- g.DayWork BETWEEN '2012-05-01' AND '2012-05-31'
					-- year(g.DayWork) = _Param_B and month(g.DayWork) = _Param_C
					-- AND g.areaguid NOT IN (SELECT z.areaguid FROM prace_zlecone z WHERE z.GUID_pracownika = d.osobaguid  
				-- AND z.rok = _Param_B AND z.miesiac = _Param_C and z.deleted = 0)
				-- and exists (select guid from frekw f where  f.rok = _Param_B and f.miesiac = _Param_C and f.pracguid = d.osobaguid AND f.deleted=0)
				o.ToZleceniobiorca = 1 AND o.ToPracownik = 0;    
		
		
		BEGIN
			DECLARE _frekw_c CURSOR FOR	
			SELECT  
				hrGUID, FrekwGUID	
			FROM tt_hr_frekw;
			
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;		
			
			SET _CurrFrekwGUID = ''; SET _CurrWorkerGUID = '';  SET _OrderGUID = '';
			
			SET _done = FALSE;			
			SET @IleZlec = 0;
			
			OPEN _frekw_c;
			loopF: LOOP
				FETCH _frekw_c INTO 
					_CurrWorkerGUID, _CurrFrekwGUID;  -- Prac.guid, frekw.guid
				IF _done THEN
						-- set @co = 'spadamy';
						LEAVE loopF;
				ELSE
				    -- spr. czy dla tej osoby nie ma juz recznie wprowadzonego zlecenia - jesli tak, to pomijamy
					SET _I = 0;
				    select 
						count(*) as ile 
						into _I
					from 
						prace_zlecone g
					where 
						g.rok = _Param_B and g.miesiac = _Param_C and g.deleted = 0 and g.GUID_pracownika = _CurrWorkerGUID
					;
					
					IF (_I = 0) THEN
						  SET @IleZlec = @IleZlec + 1;
						  SET _OrderGUID = md5(concat(_CurrFrekwGUID, _CurrWorkerGUID, _Param_B, _Param_C));	
						  -- set @_OrderGUID = concat(@_OrderGUID, ',', _OrderGUID);
						  -- 2) naliczamy
						  CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.konkol_ht', _OrderGUID, _Param_B, _Param_C, _CurrWorkerGUID, _CurrFrekwGUID, 'auto');				
					END IF;		
					
				END IF;	
			
			END LOOP;
			CLOSE _frekw_c;
			
			-- uzupelnienie tresci zlecenia we wszystkich wygenerowanych zleceniach
			SET _SymbZakr = ''; SET _RangeGUID = '';
			CALL _IReg_Get('Place2003\\Parametry_kartoteki_zlecen', 'Symbol_zakresu_prac_zlec', 0, 'STRING', _SymbZakr, '');
			-- (aRok, 'Proc_zdr_odliczone_zlecbiorcy', 0.00, 'Place2003\Parametry_kartoteki_zlecen', 1);
			
			select GUID into _RangeGUID from prace_zlec_opisy where symbol = trim(_SymbZakr);
			
		/*	update prace_zlecone z, tt_area_order s, prace_zlec_opisy o
			set z.PracaStr = o.opis
			where z.guid = s.orderGUID and o.guid = _RangeGUID;  */
			
		END; 	
		
	END IF;	

/*--------------------------------------------------------------------------------------------------------------
	'calc.auto.multi.order.mode.konkol_zoo'
		Zalozenie tabel tymczasowych, wlasciwe naliczenie zlecenia, zwrocenie warto?ci jako SELECT
		Parametry
		_Param_A	GUID zlecenia
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	AreaGUID  = GUID sklepu
		_Param_F   -- tryb: "auto" (naliczanie automat.) lub "manual" (r?czne - wolane z Delphi)
		
		CALL pl_gratyfikacje_tools_arg7('calc.auto.multi.order.mode.konkol_zoo', 'ZlecGUID', '2012', '5', 'Prac1', 'SklepGUID', 'manual');
-------------------------------------------------------------------------------------------------------------*/
	
	IF _MODE = 'calc.auto.multi.order.mode.konkol_zoo' THEN
	    set @co = 'start';
		-- 1) zakladamy tabele tymcz. (kopie tabel prace_zlecone i place_skladniki)
		CALL pl_gratyfikacje_tools_arg7('create.work.tables', '', '', '', '', '', '');
		
		DROP TEMPORARY TABLE IF EXISTS `tt_area_order`;
		CREATE TEMPORARY TABLE  `tt_area_order` AS
		SELECT  DISTINCT g.areaguid, k.guid AS WorkerGuid, md5(concat(g.areaguid, k.guid, _Param_B, _Param_C)) AS orderGUID   --    s.symbol, s.nazwa,
		FROM hr_team_ng g
		JOIN erp_area_nodes s ON g.areaGUID = s.guid AND s.deleted = 0
		JOIN hr_team_po d ON d.GUIDNg = g.guid
		JOIN Pracownicy k ON k.guid = d.osobaguid
		JOIN osoby o ON o.guid = d.osobaguid
				WHERE -- d.osobaguid = _GUID   
					-- g.DayWork BETWEEN '2012-05-01' AND '2012-05-31'
					year(g.DayWork) = _Param_B and month(g.DayWork) = _Param_C
					AND g.areaguid NOT IN (SELECT z.areaguid FROM prace_zlecone z WHERE z.GUID_pracownika = d.osobaguid  
				AND z.rok = _Param_B AND z.miesiac = _Param_C and z.deleted = 0)
				and exists (select guid from frekw f where  f.rok = _Param_B and f.miesiac = _Param_C and f.pracguid = d.osobaguid AND f.deleted=0)
				AND o.ToZleceniobiorca = 1 AND o.ToPracownik = 0;    
		
		BEGIN
			DECLARE _work_c CURSOR FOR	
			SELECT  
				AreaGuid, WorkerGuid, orderGUID	
			FROM tt_area_order;
			
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;					
			
			-- pobieramy dane (zestaw zleceniobiorca-sklep)
			SET _CurrAreaGUID = ''; SET _CurrWorkerGUID = ''; SET _OrderGUID = '';
			
			SET _done = FALSE;			
			SET @IleZlec = 0;
			set @_OrderGUID = '';
			
			OPEN _work_c;
			loopW: LOOP
				FETCH _work_c INTO 
						_CurrAreaGUID, _CurrWorkerGUID, _OrderGUID;
				IF _done THEN
						-- set @co = 'spadamy';
						LEAVE loopW;
				ELSE
				  SET @IleZlec = @IleZlec + 1;
				  -- SET _OrderGUID = md5(concat(_CurrAreaGUID, _CurrWorkerGUID, _Param_B, _Param_C));	
				  set @_OrderGUID = concat(@_OrderGUID, ',', _OrderGUID);
				  -- 2) naliczamy
				  CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.konkol_zoo', _OrderGUID, _Param_B, _Param_C, _CurrWorkerGUID, _CurrAreaGUID, 'auto');				
					
				END IF;	
			
			END LOOP;
			CLOSE _work_c;
			
			
			-- uzupelnienie tresci zlecenia we wszystkich wygenerowanych zleceniach
			SET _SymbZakr = ''; SET _RangeGUID = '';
			CALL _IReg_Get('Place2003\\Parametry_kartoteki_zlecen', 'Symbol_zakresu_prac_zlec', 0, 'STRING', _SymbZakr, '');
			-- (aRok, 'Proc_zdr_odliczone_zlecbiorcy', 0.00, 'Place2003\Parametry_kartoteki_zlecen', 1);
			
			select GUID into _RangeGUID from prace_zlec_opisy where symbol = trim(_SymbZakr);
			
			update prace_zlecone z, tt_area_order s, prace_zlec_opisy o
			set z.PracaStr = o.opis
			where z.guid = s.orderGUID and o.guid = _RangeGUID;
			
		END;
		
    	-- tymczasowo CALL pl_gratyfikacje_tools_arg7('drop.work.tables', '', '', '', '', '', ''); 
		
	END IF;	
	
	
/*---------------------------------------------------------------------------------------------
	'calc.manual.one.order.mode.konkol_zoo'
		Zalozenie tabel tymczasowych, wlasciwe naliczenie zlecenia, zwrocenie warto?ci jako SELECT
		Parametry
		_Param_A	GUID zlecenia
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	AreaGUID  = GUID sklepu
		_Param_F   -- tryb: "auto" (naliczanie automat.) lub "manual" (r?czne - wolane z Delphi)
		
		CALL pl_gratyfikacje_tools_arg7('calc.manual.one.order.mode.konkol_zoo', 'ZlecGUID', '2012', '5', 'Prac1', 'SklepGUID', 'manual');
---------------------------------------------------------------------------------------------------*/
	
	IF _MODE = 'calc.manual.one.order.mode.konkol_zoo' THEN
	
		-- 1) zakladamy tabele tymcz.
		CALL pl_gratyfikacje_tools_arg7('create.work.tables', '', '', '', '', '', '');
		
		-- 2) naliczamy
		CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.konkol_zoo', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, 'manual');
		
 	    -- 3) zwracamy wyliczone warto?ci
	    -- select ZaZlecenie from tt_prace_zlecone;
		
    	-- CALL pl_gratyfikacje_tools_arg7('drop.work.tables', '', '', '', '', '', ''); <- to wywola? z Delphi po naliczeniu
		
	END IF;	
	
/*-------------------------------------------------------------------------------------------------------------
	'create.work.tables'
		Za?o?enie tabel tymczasowych 
		Parametry
		_Param_A	GUID zlecenia
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	AreaGUID  = GUID sklepu
		_Param_F   -- tryb: "auto" (naliczanie automat.) lub "manual" (r?czne - wolane z Delphi)
		
		CALL pl_gratyfikacje_tools_arg7('create.work.tables', '', '', '', '', '', '');
-----------------------------------------------------------------------------------------------------------*/
	
	IF _MODE = 'create.work.tables' THEN
	
		DROP TEMPORARY TABLE IF EXISTS `tt_prace_zlecone`;
		CREATE TEMPORARY TABLE  `tt_prace_zlecone` LIKE `prace_zlecone`;

		DROP TEMPORARY TABLE IF EXISTS `tt_zlec_skladniki`;
		CREATE TEMPORARY TABLE  `tt_zlec_skladniki` LIKE `place_skladniki`;
		
	END IF;

/*----------------------------------------------------------------------------------------------------------------
	'drop.work.tables'
		Za?o?enie tabel tymczasowych 
		Parametry
		_Param_A	GUID zlecenia
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	AreaGUID  = GUID sklepu
		_Param_F   -- tryb: "auto" (naliczanie automat.) lub "manual" (r?czne - wolane z Delphi)
		
		CALL pl_gratyfikacje_tools_arg7('drop.work.tables', '', '', '', '', '', '');
------------------------------------------------------------------------------------------------------------*/
	
	IF _MODE = 'drop.work.tables' THEN
	
		DROP TEMPORARY TABLE IF EXISTS `tt_prace_zlecone`;
		-- CREATE TEMPORARY TABLE  `tt_prace_zlecone` LIKE `prace_zlecone`;

		DROP TEMPORARY TABLE IF EXISTS `tt_zlec_skladniki`;
		-- CREATE TEMPORARY TABLE  `tt_zlec_skladniki` LIKE `place_skladniki`;
		
		DROP TEMPORARY TABLE IF EXISTS `tt_area_order`;
		
	END IF;

	
/*------------------------------------------------------------------------------------------------------------
	'calc.one.order.mode.konkol_ht'
		Naliczenie  jednego zlecenia (metoda standardowa czyli "wg ht")
		Parametry
		_Param_A	GUID zlecenia
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	GUID karty frekwencji za dany miesiac
		_Param_F   -- tryb: "auto" (naliczanie automat.) lub "manual" (r?czne - wolane z Delphi)
		
		CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.konkol_ht', 'ZlecGUID', '2012', '5', 'Prac1', 'FrekwGUID', 'manual');
---------------------------------------------------------------------------------------------------*/
	
	IF _MODE = 'calc.one.order.mode.konkol_ht' THEN
		SET _ZaZlecenie = 0; SET _DodNocny = 0;  
		SET _ProcPremii = 0; SET _SG  = 0; SET _GratyfPodst = 0;		
		SET _RozliczajWg = 0;  SET _CzasZ = 0;
		-- zmienne skopiowane z Delphi (tryb "ht")
		SET aPlaca = 0; SET aNadGodz150 = 0; SET aNadGodz200 = 0;  SET aPremia = 0; SET aPremiaMotyw = 0; SET aPremiaUzn = 0;
		SET _godz_noc = 0; SET _godz_yy  = 0;
		
		SELECT 	k.stawkaGodzinowa, k.ZeSG
		INTO _SG, _RozliczajWg
		FROM  Pracownicy k 
		WHERE k.guid = _Param_D			
		;
		
		SET @Zlecb = _Param_D;
		
		IF _RozliczajWg = 0 THEN  -- wer. rozszerz.
		    SET _CzasZ = 0;  SET _godzSNS_nast = 0; SET _godzSNS = 0;
			
			SELECT n.godz100prac/60,  SUM(d.godziny150)/60, n.godz_plus100wolne/60, GREATEST(SUM(d.godziny_zz - d.godziny)/60, 0),  n.godzSNS/60,
				 _RndTIME('MIN', 60*SUM(d.noc), 30, '', ''), _RndTIME('MIN', 60*SUM(d.godziny_yy), 30, '', '') 
				 INTO _godz100prac,  _godziny150, _godz_plus100wolne, _godziny_premia, _godzSNS, _godz_noc, _godz_yy
			FROM frekw n, frekw_po d 
			WHERE d.FrekwGUID  = n.GUID AND	n.GUID  = _Param_E and n.deleted = 0
			;
			
			SELECT godzSNS_nast/60
			INTO _godzSNS_nast
			FROM frekw 
			WHERE (PracGUID  = _Param_D) AND ((12 * rok + miesiac) = (12 * _Param_B + _Param_C - 1))  and deleted = 0
			;
			
			SET aPlaca = _Rnd2(_godz100prac * _SG * 1.0); 
			
			SET aNadGodz150 = _Rnd2(_godziny150 * _SG * 1.5); 
			SET aNadGodz200 = _Rnd2(_godz_plus100wolne * _SG * 2.0);   
			SET aPremia = _Rnd2(_godziny_premia * _SG * 1.0); 
			SET aPremiaMotyw = _Rnd2( (_godzSNS + _godzSNS_nast)  * _SG * 0.5); 
			SET aPremiaUzn = _Rnd2((aPlaca + aPremia + aPremiaMotyw) * 0.3);  -- (0.3 = aProcUzn/100)
			
			
			-- shlEPlace.PobranieZDBPlacyZGodzinINadGodzinKonkol
	
			-- aNoc := shlEPlace.NaliczDodatekZaNocKonkol('noc')   dodatek za prac? w nocy
	
			-- aNoc_yy := shlEPlace.NaliczDodatekZaNocKonkol('godziny_yy')	   dodatek za prac? w nocy (YY).   
			-- SELECT _RndTIME('MIN', 60*46, 30, '', '');
			
			SET _NomCzasPracyREG = 0;
			/*
			IF _Param_C = 2 THEN
				SET _Def_NCP_REG = '160';
			ELSE
				SET _Def_NCP_REG = '168';
			END	IF; */
			SET _Def_NCP_REG = IF(_Param_C = 2, '160', '168');
			
			-- SET _NCP_REG_mc = REPLACE('NCP#mc#', '#mc#', _Param_C); -- REPLACE(_SQLText, '#PracGUID#', _PracGUID);
			
			
			CALL _IReg_Get('Place2003\\Parametry_ogolne', _NCP_REG_mc, _Param_B, 'FLOAT', _NomCzasPracyREG, _Def_NCP_REG);
			
			SET _MinWynagr = 0;
			CALL _IReg_Get('Place2003\\Progi_podatkowe_stawki_ZUS', 'Minimalne_wynagrodzenie', _Param_B, 'FLOAT', _MinWynagr, 0);
			SET aSGNoc = IF(_MinWynagr = 0.0, 0.0, _Rnd2((_MinWynagr/_NomCzasPracyREG)*0.2)   );
			
			-- _Rnd2(2*aSGNoc*aLGtmp); -- 20% za to ze siedzi po nocach
			
			SET aNoc = _Rnd2(2 * aSGNoc * _Rnd2(_godz_noc/60));
			SET aNoc_yy = _Rnd2(2 * aSGNoc * _Rnd2(_godz_yy/60));
			
			SET _ZaZlecenie = aPlaca + aNadGodz150 + aNadGodz200 + aPremia + aPremiaMotyw + aPremiaUzn + aNoc + aNoc_yy;
			
			-- F.w_godz/60 AS godzW  -- , SUM(D.godziny)/60 AS OCP 
			SET _dniW = 0; SET _godzW = 0;
			SELECT SUM(IF(D.absencja= 'W', 1, 0))  AS dniW, F.w_godz/60 AS godzW
			INTO _dniW, _godzW
			FROM frekw F, frekw_po D        
				   WHERE D.FrekwGUID = F.GUID AND F.PracGUID = _Param_D and F.rok = _Param_B and F.miesiac = _Param_C  and F.deleted = 0
			;		 -- , _OCP
				
			-- naliczenie urlopu wych.	
			SET _suma_mies = 0;
			SELECT IFNULL(SUM(ZaZlecenie), 0), COUNT(DISTINCT z.miesiac) AS suma_mies  
			INTO _SUM_12m, _suma_mies
			FROM prace_zlecone z
			WHERE GUID <> _Param_A	-- Ten warunek w sumie niepotrzebny bo siegamy do poprzednich m-cy
			AND GUID_pracownika = _Param_D AND z.deleted = 0 AND  
				(12 * z.rok + z.miesiac) BETWEEN (12 * _Param_B + _Param_C - 13) AND (12 * _Param_B + _Param_C - 1)
			;
			
			-- wynagr = (sum_12m/ocp)  * _godzW
			SET  _OCP = _suma_mies * 25.5;
			SET _kwotaW = (_SUM_12m / _OCP) * _dniW;
			
			IF _kwotaW > 0 THEN
				SET _ZaZlecenie = _ZaZlecenie + _kwotaW; -- _GratyfPodst = _GratyfPodst + _kwotaW;    -- _GratyfPodst ....
			END IF;
			-- koniec naliczenia urlopu
			
			
		ELSE  -- wer podst. (_RozliczajWg = 1)	
				    
			SELECT SUM(godziny_zz)/60
			INTO _CzasZ
			FROM frekw_po WHERE FrekwGUID  = _Param_E
			;
		
			SET _ZaZlecenie = _CzasZ * _SG;
		END IF;
	
		IF _ZaZlecenie > 0 THEN
		    SET  _ZaZlecenie = _Rnd(_ZaZlecenie, 2);
				
			
				   -- set @szambo = 'zazlecenie';
					-- SET @_ZlecGUID =  md5(concat(_Param_C, _Param_B, _Param_A));
				
					 SET @konkol_ht.DataOd = ifnull(concat(_Param_B,'-',_Param_C,'-01'), current_date);			
					 SET @konkol_ht.DataDo = ifnull(last_day(concat(_Param_B,'-',_Param_C,'-01')), current_date);
					 SET @konkol_ht.DataWypl = ifnull(last_day(concat(_Param_B,'-',_Param_C,'-01')), current_date);
					
					-- miejsce wykonywania pracy (za?o?enie o 3znakowej zgodno?ci symbolu)
					SET _MZ_idn = 0;
				--	SELECT m.idn FROM prace_zlec_miejsca m, erp_area_nodes e
				--	WHERE LOCATE(TRIM(e.symbol), m.symbol) > 0  AND m.uzywany = 1
				--	AND e.guid = _Param_E  AND e.symbol <> 'D' LIMIT 1
				--	INTO _MZ_idn;
					
					SET @_MZ_idn = _MZ_idn;

					-- wstawienie do place_zlec i do place_skladniki
					REPLACE INTO tt_prace_zlecone 
					(GUID, GUID_pracownika,  miesiac, rok, DataOd, DataDo, NrZlecenia, ZaZlecenie, RodzajRyczaltu,  -- slon add DataOd
					  KosztyUzyskaniaWproc, ProcFemerytalnyZleceniob, ProcFrentowyZleceniob, ProcFchorobowyZleceniob,
					  ProcFwypadkowyZleceniob, ProcKasaChorychZleceniobPobr, ProcKasaChorychZleceniobOdlicz,
					  ProcFemerytalnyZleceniod, ProcFrentowyZleceniod, ProcFchorobowyZleceniod, ProcFwypadkowyZleceniod, -- ProcFwypadkowyZleceniod
					  ProcKasaChorychZleceniod, ProcFPracy, ProcFGSP, AreaGUID, DataWyplaty, MZ_Idn,  -- , ZlecERP
					  DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec
					)   -- nazwisko,  @pl.gratyf.za_zlecenie
					VALUES(_Param_A, _Param_D, _Param_C, _Param_B, @konkol_ht.DataOd, @konkol_ht.DataDo, '', _ZaZlecenie, 7,   
					  (SELECT ValueN FROM IReg WHERE idkey = 'Procent_kosztow_um_zlec' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecbiorcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecbiorcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecbiorcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_zlecbiorcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecbiorcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecdawcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecdawcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecdawcy' AND rok = _Param_B),  -- , ProcFwypadkowyZleceniod = DBPlacesProc_wypadkowe.GetProcentWypadkowego(aDataWyplaty);
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_pracod' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecdawcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FP_zlecdawcy' AND rok = _Param_B),
					  (SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FGSP_zlecdawcy' AND rok = _Param_B), 
					  _Param_E, @konkol_ht.DataWypl, _MZ_idn,  -- , 1
						GREATEST(@DodUbezpMedyczneZlecKartoteka - @SumaDodUbezpMedyczneZlec, 0),
						GREATEST(@PotrDodUbezpMedyczneZleckartoteka - @SumaPotrDodUbezpMedyczneZlec, 0)
					);  -- 20, (SELECT nazwisko from osoby WHERE GUID = _Param_C),
				
													
					-- Z_1-Z_5(rodz.skl = 0) 
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_1')), 'Z_1', _Param_A, _ZaZlecenie, _ZaZlecenie , 0);  -- @pl.gratyf.za_zlecenie, @pl.gratyf.za_zlecenie
					set @jmam='z1';
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_2')), 'Z_2', _Param_A, 0, 0, 0);
					set @jmam='z2';
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_3')), 'Z_3', _Param_A, 0, 0, 0);
					set @jmam='z3';
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_4')), 'Z_4', _Param_A, 0, 0, 0);
					set @jmam='z4';
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_5')), 'Z_5', _Param_A, 0, 0, 0);
					set @jmam='z5';
					-- Z_ZUS_1 - 9 (rodz.skl = 6)  _ZLEC_ZUS
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_1')), 'Z_ZUS_1', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_2')), 'Z_ZUS_2', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_3')), 'Z_ZUS_3', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(md5(concat(_Param_A, 'Z_ZUS_4')), 'Z_ZUS_4', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_5')), 'Z_ZUS_5', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_6')), 'Z_ZUS_6', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_7')), 'Z_ZUS_7', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_8')), 'Z_ZUS_8', _Param_A, 0, 0, _ZLEC_ZUS);
				
					REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(md5(concat(_Param_A, 'Z_ZUS_9')), 'Z_ZUS_9', _Param_A, 0, 0, _ZLEC_ZUS);
					set @pl.gratyf.debug = 'zus9';
									
					CALL pl_gratyfikacje_tools_arg7('pl.przepisz.dane.pracownika.one.zlec', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, _Param_F);					
					
					CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.skladki', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, _Param_F);
																					
				SET _SQLText = 'SELECT
					(z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy) AS KwotaBrutto,
					_Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2) AS KosztyUzyskania
					INTO @one.zlec.KwotaBrutto, @one.zlec.KosztyUzyskania
					FROM prace_zlecone z			
					WHERE	
						z.GUID = ''#_ZlecGUID#'' ;
				';
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
				SET @_SQLText_sel =  _SQLText;
				CALL _ExecuteCmd(_SQLText, @Error);	
				
				-- przeliczenie kwot
				SET _SQLText = 'UPDATE tt_prace_zlecone z
					SET
						z.RazemSklZleceniobiorcyDoOdlicz = z.RazemSkladkiZleceniobiorcy,
						z.KwotaBrutto     = (z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy),
						z.KosztyUzyskania = _Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2), 
						z.Dochod          = _Rnd(
							(z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy) - _Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
										0),  -- regint.Zaokr_podstawy_zaliczki   dochod = KwotaBrutto - KosztyUzyskania
						z.ZaliczkaPrzedSklUbezp = _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - z.RazemSkladkiZleceniobiorcy - _Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100),
						z.Zaliczka  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - z.RazemSkladkiZleceniobiorcy - 
							_Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0),
						z.KwotaNetto = (z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - (z.RazemSkladkiZleceniobiorcy + z.SklKasaChorychZleceniobPobr)  -
							_Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - z.RazemSkladkiZleceniobiorcy - 
							_Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0),
						z.DoWyplaty  = _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - (z.RazemSkladkiZleceniobiorcy + z.SklKasaChorychZleceniobPobr)  -
							_Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - z.RazemSkladkiZleceniobiorcy - 
							_Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0) 
							- z.InnePotr + z.InneDod +z.InneZasilkZUS, 2),
						z.InnePotr = (select sum(kwota) from place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Potr#)	
					WHERE	
						z.GUID = ''#_ZlecGUID#'' ; ';
				
				-- SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', IF(TRUE, "zoo", "konkol_zoo"));	
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
				SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Potr#', _ZLEC_Potr);			
				SET @_SQLText = _SQLText;		
				CALL _ExecuteCmd(_SQLText, @Error);	
				
				-- sposob wyplaty
				SET _SQLText = '
				update  tt_prace_zlecone z, Pracownicy k
				set
					z.wyplataprzelewem = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), z.dowyplaty, 0),
					z.wyplatagotowka   = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), 0, z.dowyplaty)					
				where z.guid = ''#_ZlecGUID#'' and z.guid_pracownika = k.GUID;
				';
				
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
				SET @_SQLText_wypl = _SQLText;		
				CALL _ExecuteCmd(_SQLText, @Error);	
			IF _Param_F = 'auto' THEN          -- naliczanie automatyczne, czyli z calla => wstawiamy wartosci do tabeli	
				
				-- sprawdzamy, czy jest juz zamkniete zlecenie o takim GUIDzie
			  SET _I = 0;
			  select COUNT(*) into _I from prace_zlecone where guid = _Param_A and ZamknietyZapis = 1;

				IF (_I = 0) THEN  -- jesli nie ma zaknietego zlecenia, to wstawiamy/nadpisujemy
					REPLACE INTO prace_zlecone
					SELECT *
					FROM tt_prace_zlecone
					WHERE  GUID = _Param_A;

					REPLACE INTO place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					SELECT GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika
					FROM tt_zlec_skladniki
					WHERE  GUID_zapisu_placowego = _Param_A;
					
				END IF;
			  
			ELSE  -- _Param_F = 'manual' tryb r?czny (wywolanie z aplikacji) - warto?ci trzeba przekaza? jako select
				-- select 	ZaZlecenie .....  <- w Delphi b?dzie aDS := ConnectSuport.GetNavQuery
				
				select 
					_SG AS StGodz, _GrafikCzasPracy AS PracaZ, _godzSNS AS godzSNS, _GodzNocne AS GodzNoc, _ProcPremii AS ProcPremii, _NCP AS NCP,
					ZaZlecenie, _DodNocny AS DodNocny, (ZaZlecenie - _DodNocny) AS Podst, DataWyplaty, DataOd, DataDo, _godzW, _kwotaW,
					aPlaca, aNadGodz150, aNadGodz200, aPremia, aPremiaMotyw, aPremiaUzn, aNoc, aNoc_yy					
					from tt_prace_zlecone where GUID_pracownika = _Param_D;
		
			END IF;	-- trybu r?cznego
		ELSE	 -- (gdy kwota ZaZlecenie = 0)  :
			select 
			  _SG AS StGodz, _GrafikCzasPracy AS PracaZ, _godzSNS AS godzSNS, _GodzNocne AS GodzNoc, _ProcPremii AS ProcPremii, _NCP AS NCP,
			  0 AS ZaZlecenie, _DodNocny AS DodNocny, 0 AS Podst, _varDateTime(@konkol_zoo.DataWypl) AS DataWyplaty, _godzW, _kwotaW,	
			  aPlaca, aNadGodz150, aNadGodz200, aPremia, aPremiaMotyw, aPremiaUzn, aNoc, aNoc_yy,					
			  _varDateTime(@konkol_zoo.DataOd) AS DataOd, _varDateTime(@konkol_zoo.Datado) AS DataDo;
		END IF;  -- IF @pl.gratyf.za_zlecenie > 0
	

	
	END IF;  -- IF _MODE = 'calc.one.order.mode.konkol_ht' THEN
	
/*---------------------------------------------------------------------------------------------------------------
	'calc.one.order.mode.konkol_zoo'
		Naliczenie  jednego zlecenia (Nalicz_zlec_typu_konkol_zoo)
		Parametry
		_Param_A	GUID zlecenia
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	AreaGUID  = GUID sklepu;  gdy sklep = 'szkolenia' to niestandardowy algorytm naliczania (zadanie #43564)
		_Param_F   -- tryb: "auto" (naliczanie automat.) lub "manual" (r?czne - wolane z Delphi)
		
		CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.konkol_zoo', 'ZlecGUID', '2012', '5', 'Prac1', 'SklepGUID', 'manual');
-----------------------------------------------------------------------------------------------------------------*/
	
	IF _MODE = 'calc.one.order.mode.konkol_zoo' THEN  
		SET _GrafikCzasPracy = 0;  SET _godzW = 0;
		SET _ZaZlecenie = 0; SET _DodNocny = 0;  
		SET _ProcPremii = 0; SET _SG  = 0; SET _GratyfPodst = 0;	
		IF FALSE THEN
		--	Po staremu z grafików...
			SELECT  SUM(d.duration_min)/60 AS czas_pracy, MIN(g.DayWork), MAX(g.DayWork)    -- g.areaguid, g.daywork, s.symbol, s.nazwa, 
			INTO _GrafikCzasPracy, @konkol_zoo.DataOd, @konkol_zoo.Datado -- PracaZ - czas do przepracowania na danym sklepie, okreslony w grafiku
			FROM hr_team_ng g
			JOIN erp_area_nodes s ON g.areaGUID = s.guid
			JOIN hr_team_po d ON d.GUIDNg = g.guid
			WHERE d.osobaguid = _Param_D   
				AND g.areaguid = _Param_E
				AND YEAR(g.DayWork) = _Param_B  AND MONTH(g.DayWork) = _Param_C
			GROUP BY g.areaguid	
			;
		ELSE
		--	Po nowemu z eventów - hr_events...
			SELECT  
				SUM(g.duration_min)/60 AS czas_pracy, 
				MIN(g.StartTime), MAX(g.StartTime)    -- g.areaguid, g.daywork, s.symbol, s.nazwa, 
				INTO _GrafikCzasPracy, @konkol_zoo.DataOd, @konkol_zoo.Datado -- PracaZ - czas do przepracowania na danym sklepie, okreslony w grafiku
			FROM `hr_events` g
			WHERE 
				g.osobaguid = _Param_D   
				AND g.areaguid = _Param_E
				AND YEAR(g.StartTime) = _Param_B  AND MONTH(g.StartTime) = _Param_C
				AND g.Event_Type = 'WORK'
				AND g.Deleted = 0
			GROUP BY g.areaguid
			;
		END IF;

		
		SET @RCP = (SELECT param5 FROM erp_area_nodes WHERE guid=_Param_E);  -- RCP CZY GRAFIKI
		
		IF  @RCP=1    THEN
			-- SELECT  SUM(g.duration_min)/60 AS czas_pracy, MIN(g.StartTime_work), MAX(g.StartTime_work)    -- g.areaguid, g.daywork,  s.symbol, s.nazwa,
			SELECT  SUM(_RndTIME('MIN', 60*g.duration_min_work, 30, '', ''))/60 AS czas_pracy, MIN(g.StartTime_work), MAX(g.StartTime_work)
			INTO _GrafikCzasPracy, @konkol_zoo.DataOd, @konkol_zoo.Datado
			FROM hr_events g
			JOIN erp_area_nodes s ON g.areaGUID = s.guid
			WHERE g.osobaguid = _Param_D   
				AND g.areaguid = _Param_E
				AND YEAR(g.StartTime_work) = _Param_B  AND MONTH(g.StartTime_work) = _Param_C
				AND g.Event_Type = 'WORK'   -- DODAJEMY OGRANICZNIE bez grafikow
			GROUP BY g.areaguid ;
		ELSE
			SELECT  SUM(d.duration_min)/60 AS czas_pracy, MIN(g.DayWork), MAX(g.DayWork)    -- g.areaguid, g.daywork, s.symbol, s.nazwa, 
			INTO _GrafikCzasPracy, @konkol_zoo.DataOd, @konkol_zoo.Datado  -- PracaZ - czas do przepracowania na danym sklepie, okreslony w grafiku
			FROM hr_team_ng g
				JOIN erp_area_nodes s ON g.areaGUID = s.guid
			JOIN hr_team_po d ON d.GUIDNg = g.guid
			WHERE d.osobaguid = _Param_D   
				AND g.areaguid = _Param_E
				AND YEAR(g.DayWork) = _Param_B  AND MONTH(g.DayWork) = _Param_C
			GROUP BY g.areaguid ;
		END IF;		
				
		--  spr. czy _Param_E = db_globals.pl.AreaGUID.szkolenie, jesli tak, to oddzielne naliczenie kwoty 
		SELECT `value` AS szkolGUID INTO @szkolGUID FROM _db_globals WHERE `key` = 'pl.AreaGUID.szkolenie';
		IF _Param_E = @szkolGUID THEN
		  /* 
		    naliczenie wynagrodzenia dla sklepu 'szkolenia': 
		     wynagrodzenie_za_prace_na_sklepie_SZKOLENIE = liczba_godzin_pracy_w_tym_sklepie x stawka_godzinowa_szkolenia_z_konfiguracji
		  */
		  SET @pl.debug = 'szkolenie';   -- ponizej: _Param_B = rok; ostatni arg. = default val.		  		   
		  CALL _IReg_Get('Place2003\\Parametry_kartoteki_plac', 'szkolenia_stawka_godz', 0, 'FLOAT', _SG, 0);    -- Parametry_kartoteki_zlecen
		  
		  SET _ZaZlecenie  =  _Rnd(_GrafikCzasPracy * _SG, 2);
		  
		ELSE  -- obsluga standardowa (dotychczasowa)

			select ext.proc_premii/100 INTO _ProcPremii
			from erp_area_nodes ean, erp_area_nodes_ext ext
			where ext.areaGUID = ean.GUID AND ean.guid = _Param_E
			and ext.rok = _Param_B AND ext.miesiac = _Param_C limit 1
			;
/*
			IF _ProcPremii = 0 THEN
				SELECT h.premia/100
				INTO _ProcPremii
				FROM erp_area_nodes h
				WHERE h.guid = _Param_E
				;
			END IF;
*/
			SET _RozliczajWg = 0;
			SELECT 	k.stawkaGodzinowa, k.ZeSG  -- "Naliczanie wynagrodzenia za umow? - zlecenie" : 0 = Metoda rozszerzona, 1 = Metoda prosta
			INTO _SG, _RozliczajWg
			FROM  Pracownicy k
			WHERE k.guid = _Param_D			
			;
			
			SET _OCP = 0;  SET _kwotaW = 0; SET _godzW = 0;
		
			IF  @RCP=1   THEN
			SELECT 				
				SUM(IF(D.absencja= 'C', 1, 0)) AS dniC, SUM(IF(D.absencja= 'L', 1, 0)) AS dniL,
				SUM(D.kp_godziny)/60 AS NCPkal, SUM(IF(D.absencja IN (''), kp_godziny, 0))/60 AS NCPobl   --  NOT IN ('F', 'W')
				INTO @zlec.dniC,  @zlec.dniL, @zlec.kalNCP,  @zlec.oblNCP
			FROM 
				frekw F, frekw_po D 
			JOIN hr_events g			
			WHERE D.FrekwGUID = F.GUID AND F.PracGUID = _Param_D AND F.rok = _Param_B AND F.miesiac = _Param_C  AND F.deleted = 0
					  AND g.osobaguid = F.PracGUID AND g.areaguid = _Param_E
					  AND YEAR(g.StartTime_work) = F.rok  AND MONTH(g.StartTime_work) = F.miesiac AND D.rok_msc_dzien = DATE(g.StartTime_work)
			;
		
		ELSE
		
			SELECT 				
				SUM(IF(D.absencja= 'C', 1, 0)) AS dniC, SUM(IF(D.absencja= 'L', 1, 0)) AS dniL,
				SUM(D.kp_godziny)/60 AS NCPkal, SUM(IF(D.absencja IN (''), kp_godziny, 0))/60 AS NCPobl   --  NOT IN ('F', 'W')
				INTO @zlec.dniC,  @zlec.dniL, @zlec.kalNCP, @zlec.oblNCP
			FROM 
				frekw F, frekw_po D 
			JOIN hr_team_ng g
			JOIN hr_team_po p ON p.GUIDNg = g.guid			
			WHERE D.FrekwGUID = F.GUID AND F.PracGUID = _Param_D AND F.rok = _Param_B AND F.miesiac = _Param_C  AND F.deleted = 0
					  AND p.osobaguid = F.PracGUID AND g.areaguid = _Param_E
					  AND YEAR(g.DayWork) = F.rok  AND MONTH(g.DayWork) = F.miesiac AND D.rok_msc_dzien = g.DayWork
			;
				
		END IF;		
			SET	_NCP = @zlec.kalNCP;
		
							
			-- SET _GratyfPodst = _Rnd((_GrafikCzasPracy + _godzW) * _SG, 2);	   -- skladnik_A
			SET _GratyfPodst = _Rnd(_GrafikCzasPracy * _SG, 2);
		
			IF _RozliczajWg = 0 THEN  -- Metoda rozszerzona:
									
				IF  @RCP=1   THEN
					SELECT SUM(IF(D.absencja= 'W', kp_godziny, 0))/60 AS godzW, SUM(IF(D.absencja= 'W', 1, 0)) AS dniW		-- jeszcze okoliczn. (9 O) i op.zdr. dziecko (14 D)						 
					INTO _godzW, _dniW
					FROM frekw F, frekw_po D
					JOIN hr_events g			
					WHERE D.FrekwGUID = F.GUID AND F.PracGUID = _Param_D AND F.rok = _Param_B AND F.miesiac = _Param_C  AND F.deleted = 0
					  AND g.osobaguid = F.PracGUID AND g.areaguid = _Param_E
					  AND YEAR(g.StartTime_work) = F.rok  AND MONTH(g.StartTime_work) = F.miesiac AND D.rok_msc_dzien = DATE(g.StartTime_work)
					;
				
				ELSE				
					
					SELECT SUM(IF(D.absencja= 'W', kp_godziny, 0))/60 AS godzW, SUM(IF(D.absencja= 'W', 1, 0)) AS dniW		-- jeszcze okoliczn. (9 O) i op.zdr. dziecko (14 D)						 
					INTO _godzW, _dniW --  <- to zawiera urlop w dniach.  , _OCP
					FROM frekw F, frekw_po D 
					JOIN hr_team_ng g
					JOIN hr_team_po p ON p.GUIDNg = g.guid			
					WHERE D.FrekwGUID = F.GUID AND F.PracGUID = _Param_D AND F.rok = _Param_B AND F.miesiac = _Param_C  AND F.deleted = 0
					  AND p.osobaguid = F.PracGUID AND g.areaguid = _Param_E
					  AND YEAR(g.DayWork) = F.rok  AND MONTH(g.DayWork) = F.miesiac AND D.rok_msc_dzien = g.DayWork
					;
				END IF;					 --  <- to zawiera urlop w dniach.  , _OCP
											
				IF _dniW > 0 THEN	
					SET _suma_mies = 0;
					SELECT IFNULL(SUM(ZaZlecenie), 0), COUNT(DISTINCT z.miesiac) AS suma_mies  
					INTO _SUM_12m, _suma_mies
					FROM prace_zlecone z
					WHERE GUID <> _Param_A	-- Ten warunek w sumie niepotrzebny bo siegamy do poprzednich m-cy
					AND GUID_pracownika = _Param_D AND z.deleted = 0 AND  
						(12 * z.rok + z.miesiac) BETWEEN (12 * _Param_B + _Param_C - 13) AND (12 * _Param_B + _Param_C - 1)
					;
														
					SET _OCP = _suma_mies * 25.5;
					
					-- wynagr = (sum_12m/ocp)  * _godzW
					-- Rnd2((aSUM12 / aOCP) * aDniW);
					-- SET _kwotaW = (_SUM_12m / _OCP) * _godzW;
					SET _kwotaW = (_SUM_12m / _OCP) * _dniW;
					
					SET @_kwotaW = _kwotaW; 
					SET @_dniW =  _dniW;
					
				END IF;  -- IF _dniW > 0 THEN	
			
				IF _kwotaW > 0 THEN
					SET _GratyfPodst = _GratyfPodst + _kwotaW;
				END IF;
				

				SELECT 
					-- F.godzSNS/60 AS godzSNS, SUM(PO.kp_godziny)/60 as NCP, SUM(PO.noc + PO.godziny_yy)/60 as GodzNocne   
					IFNULL(SUM(a.godzSNS)/60, 0) AS godzSNS, IFNULL(SUM(a.GodzNocne)/60, 0) AS GodzNocne
					INTO _godzSNS,  _GodzNocne
				 FROM frekw F 
				 LEFT JOIN frekw_po_area a ON a.FrekwGUID = F.GUID AND a.AreaGUID = _Param_E
				   WHERE F.PracGUID = _Param_D and F.rok = _Param_B and F.miesiac = _Param_C  and F.deleted = 0
				;
				
				SET _GratyfPodst = 	_GratyfPodst + _Rnd(0.5 * _SG * _godzSNS, 2);  -- skladnik_A
				SET @ZaSNS = _Rnd(0.5 * _SG * _godzSNS, 2);
				
				SET _MinWynagr = 0;
				CALL _IReg_Get('Place2003\\Progi_podatkowe_stawki_ZUS', 'Minimalne_wynagrodzenie', _Param_B, 'FLOAT', _MinWynagr, 0);  -- _Param_B = rok
				
				SET _DodNocny = IFNULL(_GodzNocne * _Rnd(0.2 * ( _MinWynagr / _NCP), 2), 0);  SET @_DodNocny = _DodNocny;
				SET _ZaZlecenie  =  _ZaZlecenie + _DodNocny;
				
			END IF;	-- IF _RozliczajWg = 0 THEN  -- (tj. metoda rozszerzona)
		
			SET @_GratyfPodst = _GratyfPodst;
			SET @_GrafikCzasPracy = _GrafikCzasPracy;
			SET @_SG = _SG;
			
			SET @_ZlecbGUID = _Param_D;
				
			SET _ZaZlecenie  =  _ZaZlecenie + _GratyfPodst;
			SET @_ZaZlecenie_pre = _ZaZlecenie;
			IF (_RozliczajWg = 0) THEN
				CASE 
				  WHEN  (@zlec.dniC +  @zlec.dniL) > 5 THEN SET @zlec.premia = 0;
				  WHEN  (@zlec.dniC +  @zlec.dniL) BETWEEN 1 AND 5 THEN 
				  BEGIN
					 SET @zlec.premia = 
					  _Rnd2(@zlec.oblNCP * _SG * 0.5 * _ProcPremii) + 
					  _Rnd2(_godzSNS * _SG * 0.5 * _ProcPremii) +
					  _Rnd2((_GrafikCzasPracy - @zlec.oblNCP) * _SG * _ProcPremii);
					
				  END;
				  ELSE	SET @zlec.premia = _Rnd((_GratyfPodst - _kwotaW) * _ProcPremii, 2);			  
				END CASE;
						
				SET _ZaZlecenie  = _ZaZlecenie + @zlec.premia;    -- premia
			END IF;  -- IF (_RozliczajWg = 0) THEN
		
		END IF;  -- koniec IFa zamykajacego standardowe naliczanie (inne niz sklep `szkolenie`)
		
				
		SET @_ZaZlecenie = _ZaZlecenie;
		
		SET @konkol_zoo.DataWypl = ifnull(last_day(concat(_Param_B,'-',_Param_C,'-01')), current_date);
		
		SET @_DodNocny = _DodNocny;
		IF _ZaZlecenie > 0 THEN
		    SET  _ZaZlecenie = _Rnd(_ZaZlecenie, 2);

			-- miejsce wykonywania pracy (za?o?enie o 3znakowej zgodno?ci symbolu)
			SET _MZ_idn = 0;
			SELECT m.idn INTO _MZ_idn
			FROM prace_zlec_miejsca m, erp_area_nodes e
			WHERE LOCATE(TRIM(e.symbol), m.symbol) > 0  AND m.uzywany = 1
			AND e.guid = _Param_E  AND e.symbol <> 'D' LIMIT 1
			;
			
			SET @_MZ_idn = _MZ_idn;

												
			-- wstawienie do place_zlec i do place_skladniki
			REPLACE INTO tt_prace_zlecone 
			(GUID, GUID_pracownika,  miesiac, rok, DataOd, DataDo, NrZlecenia, ZaZlecenie, RodzajRyczaltu,  -- slon add DataOd
			  KosztyUzyskaniaWproc, ProcFemerytalnyZleceniob, ProcFrentowyZleceniob, ProcFchorobowyZleceniob,
			  ProcFwypadkowyZleceniob, ProcKasaChorychZleceniobPobr, ProcKasaChorychZleceniobOdlicz,
			  ProcFemerytalnyZleceniod, ProcFrentowyZleceniod, ProcFchorobowyZleceniod, ProcFwypadkowyZleceniod, -- ProcFwypadkowyZleceniod
			  ProcKasaChorychZleceniod, ProcFPracy, ProcFGSP, AreaGUID, DataWyplaty, MZ_Idn,  -- , ZlecERP
			  DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec
			)   -- nazwisko,  @pl.gratyf.za_zlecenie
			VALUES(_Param_A, _Param_D, _Param_C, _Param_B, @konkol_zoo.DataOd, @konkol_zoo.DataDo, '', _ZaZlecenie, 7,   
			  (SELECT ValueN FROM IReg WHERE idkey = 'Procent_kosztow_um_zlec' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecbiorcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecbiorcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecbiorcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_zlecbiorcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecbiorcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecdawcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecdawcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecdawcy' AND rok = _Param_B),  -- , ProcFwypadkowyZleceniod = DBPlacesProc_wypadkowe.GetProcentWypadkowego(aDataWyplaty);
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_pracod' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecdawcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FP_zlecdawcy' AND rok = _Param_B),
			  (SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FGSP_zlecdawcy' AND rok = _Param_B), 
			  _Param_E, @konkol_zoo.DataWypl, _MZ_idn,  -- , 1
			GREATEST(@DodUbezpMedyczneZlecKartoteka - @SumaDodUbezpMedyczneZlec, 0),
			GREATEST(@PotrDodUbezpMedyczneZleckartoteka - @SumaPotrDodUbezpMedyczneZlec, 0)
			);  -- 20, (SELECT nazwisko from osoby WHERE GUID = _Param_C),
				
													
			-- Z_1-Z_5(rodz.skl = 0) 
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_1')), 'Z_1', _Param_A, _ZaZlecenie, _ZaZlecenie , 0);  -- @pl.gratyf.za_zlecenie, @pl.gratyf.za_zlecenie
			set @jmam='z1';
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_2')), 'Z_2', _Param_A, 0, 0, 0);
			set @jmam='z2';
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_3')), 'Z_3', _Param_A, 0, 0, 0);
			set @jmam='z3';
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_4')), 'Z_4', _Param_A, 0, 0, 0);
			set @jmam='z4';
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_5')), 'Z_5', _Param_A, 0, 0, 0);
			set @jmam='z5';
			-- Z_ZUS_1 - 9 (rodz.skl = 6)  _ZLEC_ZUS
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_ZUS_1')), 'Z_ZUS_1', _Param_A, 0, 0, _ZLEC_ZUS);
		
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_ZUS_2')), 'Z_ZUS_2', _Param_A, 0, 0, _ZLEC_ZUS);
		
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_ZUS_3')), 'Z_ZUS_3', _Param_A, 0, 0, _ZLEC_ZUS);
		
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_Param_A, 'Z_ZUS_4')), 'Z_ZUS_4', _Param_A, 0, 0, _ZLEC_ZUS);
				
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_ZUS_5')), 'Z_ZUS_5', _Param_A, 0, 0, _ZLEC_ZUS);
		
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_ZUS_6')), 'Z_ZUS_6', _Param_A, 0, 0, _ZLEC_ZUS);
		
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_ZUS_7')), 'Z_ZUS_7', _Param_A, 0, 0, _ZLEC_ZUS);
		
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_ZUS_8')), 'Z_ZUS_8', _Param_A, 0, 0, _ZLEC_ZUS);
		
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(md5(concat(_Param_A, 'Z_ZUS_9')), 'Z_ZUS_9', _Param_A, 0, 0, _ZLEC_ZUS);
			set @pl.gratyf.debug = 'zus9';
							
			CALL pl_gratyfikacje_tools_arg7('pl.przepisz.dane.pracownika.one.zlec', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, _Param_F);					
			
			CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.skladki', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E, _Param_F);
																					
			SET _SQLText = 'SELECT
				(z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy) AS KwotaBrutto,
				_Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2) AS KosztyUzyskania
				INTO
					@one.zlec.KwotaBrutto, @one.zlec.KosztyUzyskania
				FROM prace_zlecone z			
				WHERE	
					z.GUID = ''#_ZlecGUID#'' ;
			';

			SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
			SET @_SQLText_sel =  _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);	
				
			-- przeliczenie kwot
			SET _SQLText = 'UPDATE tt_prace_zlecone z
				SET
					z.RazemSklZleceniobiorcyDoOdlicz = z.RazemSkladkiZleceniobiorcy,
					z.KwotaBrutto     = (z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy),
					z.KosztyUzyskania = _Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2), 
					z.Dochod          = _Rnd(
						(z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy) - _Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
									0),  -- regint.Zaokr_podstawy_zaliczki   dochod = KwotaBrutto - KosztyUzyskania
					z.ZaliczkaPrzedSklUbezp = _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - z.RazemSkladkiZleceniobiorcy - _Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100),
					z.Zaliczka  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - z.RazemSkladkiZleceniobiorcy - 
						_Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0),
					z.KwotaNetto = (z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - (z.RazemSkladkiZleceniobiorcy + z.SklKasaChorychZleceniobPobr)  -
						_Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - z.RazemSkladkiZleceniobiorcy - 
						_Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0),
					z.DoWyplaty  = _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - (z.RazemSkladkiZleceniobiorcy + z.SklKasaChorychZleceniobPobr)  -
						_Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) - z.RazemSkladkiZleceniobiorcy - 
						_Rnd((z.ZaZlecenie - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0) 
						- z.InnePotr + z.InneDod +z.InneZasilkZUS, 2),
					z.InnePotr = (select sum(kwota) from place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Potr#)	
				WHERE	
					z.GUID = ''#_ZlecGUID#'' ; ';
			
			-- SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', IF(TRUE, "zoo", "konkol_zoo"));	
			SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
			SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Potr#', _ZLEC_Potr);			
			SET @_SQLText = _SQLText;		
			CALL _ExecuteCmd(_SQLText, @Error);	
				
			-- sposob wyplaty
			SET _SQLText = '
			update  tt_prace_zlecone z, Pracownicy k
			set
				z.wyplataprzelewem = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), z.dowyplaty, 0),
				z.wyplatagotowka   = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), 0, z.dowyplaty)					
			where z.guid = ''#_ZlecGUID#'' and z.guid_pracownika = k.GUID;
			';
			
			SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _Param_A);			
			SET @_SQLText_wypl = _SQLText;		
			CALL _ExecuteCmd(_SQLText, @Error);	
				
			IF _Param_F = 'auto' THEN          -- naliczanie automatyczne, czyli z calla => wstawiamy wartosci do tabeli	
				
				-- sprawdzamy, czy jest juz zamkniete zlecenie o takim GUIDzie
			  SET _I = 0;
			  select COUNT(*) into _I from prace_zlecone where guid = _Param_A and ZamknietyZapis = 1;

				IF (_I = 0) THEN  -- jesli nie ma zaknietego zlecenia, to wstawiamy/nadpisujemy

					REPLACE INTO prace_zlecone
					SELECT *
					FROM tt_prace_zlecone
					WHERE  GUID = _Param_A;

					REPLACE INTO place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					SELECT GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika
					FROM tt_zlec_skladniki
					WHERE  GUID_zapisu_placowego = _Param_A;
					
			  END IF;
			  -- przepisac do prace_zlec
			ELSE  -- _Param_F = 'manual' tryb r?czny (wywolanie z aplikacji) - warto?ci  przekazujemy jako select
				-- select 	ZaZlecenie .....  <- w Delphi: aDS := ConnectSuport.GetNavQuery
				
				SET @StGodzSNS = (0.5 * _SG);
				
				REPLACE INTO prace_zlecone_detal 
				  (zlecGUID, StGodz, CzasPracy, 
				   GodzSNS, StGodzSNS, GodzNoc, StGodzNoc, 
				   ProcPremii, NCP, 
				   ZaZlecenie, DodNocny, Podst, DataWyplaty, DataOd, DataDo, GodzW, KwotaW,
				   ObliczNCP,  DniC, DniL,  Premia)
				SELECT 
					GUID, _SG AS StGodz, _GrafikCzasPracy AS PracaZ, 
					_godzSNS AS godzSNS, (0.5 * _SG) AS StGodzSNS, _GodzNocne AS GodzNoc, _Rnd(0.2 * ( _MinWynagr / _NCP) , 2) AS StGodzNoc,
					_ProcPremii AS ProcPremii, _NCP AS NCP,  --  AS kalNCP
					ZaZlecenie, _DodNocny AS DodNocny, (ZaZlecenie - _DodNocny) AS Podst, DataWyplaty, DataOd, DataDo, _godzW, /* _dniW,*/ _kwotaW, 	
					@zlec.oblNCP AS oblNCP, @zlec.dniC AS dniC, @zlec.dniL AS dniL, _Rnd2(@zlec.premia) AS premia		
				FROM tt_prace_zlecone;
				
				SELECT 
					StGodz, CzasPracy AS PracaZ, GodzSNS, GodzNoc, ProcPremii, NCP, 
					ZaZlecenie, DodNocny, Podst, DataWyplaty, DataOd, DataDo, GodzW AS _godzW, KwotaW AS _kwotaW,
				    ObliczNCP AS oblNCP,  DniC, DniL,  Premia
				FROM	
					prace_zlecone_detal
				WHERE 
				    zlecGUID = _Param_A;		
		
			END IF;	-- trybu r?cznego
		ELSE	 -- gdy kwota ZaZlecenie = 0
			REPLACE INTO prace_zlecone_detal 
				  (zlecGUID, StGodz, CzasPracy, GodzSNS, StGodzSNS, GodzNoc, StGodzNoc, 
				   ProcPremii, NCP, 
				   ZaZlecenie, DodNocny, Podst, DataWyplaty, DataOd, DataDo, GodzW, KwotaW,
				   ObliczNCP,  DniC, DniL,  Premia)
			SELECT 
			  _Param_A, _SG AS StGodz, _GrafikCzasPracy AS PracaZ, _godzSNS AS godzSNS, (0.5 * _SG) AS StGodzSNS, _GodzNocne AS GodzNoc, _Rnd(0.2 * ( _MinWynagr / _NCP) , 2) AS StGodzNoc,
			  _ProcPremii AS ProcPremii, _NCP AS NCP,
			  0 AS ZaZlecenie, _DodNocny AS DodNocny, 0 AS Podst, _varDateTime(@konkol_zoo.DataWypl) AS DataWyplaty, 
			  _varDateTime(@konkol_zoo.DataOd) AS DataOd, _varDateTime(@konkol_zoo.Datado) AS DataDo, 
			  _godzW, /*_dniW,*/ _kwotaW,	
			  @zlec.oblNCP AS oblNCP, @zlec.dniC AS dniC, @zlec.dniL AS dniL,  0 AS premia
			;
			
			SELECT 
				StGodz, CzasPracy AS PracaZ, GodzSNS, GodzNoc, ProcPremii, NCP, 
				ZaZlecenie, DodNocny, Podst, DataWyplaty, DataOd, DataDo, GodzW AS _godzW, KwotaW AS _kwotaW,
				ObliczNCP AS oblNCP,  DniC, DniL,  Premia
			FROM	
				prace_zlecone_detal  -- #43565  tabelka z danymi do wydruku
			WHERE 
				zlecGUID = _Param_A
			;		
		END IF;  -- IF @pl.gratyf.za_zlecenie > 0
	END IF;	--	IF _MODE = 'calc.one.order.mode.konkol_zoo'


/*-----------------------------------------------------------------------------------------------------------
	'calc.one.order.mode.skladki'
		Naliczenie skladek dla jednego zlecenia
		Parametry
		_Param_A	GUID zlecenia
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	data wyplaty
		_Param_F    nieuzywany
		
		CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.skladki', '2011', '', '', 'GUID_Zlec', '1');
----------------------------------------------------------------------------------------------------------*/
	IF _MODE = 'calc.one.order.mode.skladki' THEN    
      -- @pl.gratyf.za_zlecenie	
	BEGIN
		-- DECLARE _Podstawa  DOUBLE;
		-- DECLARE _Dekl  	   DOUBLE;
		DECLARE _PodstE DOUBLE;
		DECLARE _PodstR DOUBLE;
		DECLARE _PodstW DOUBLE;
		DECLARE _PodstC DOUBLE;
		DECLARE _PodstF DOUBLE;
		
		-- DECLARE _SumaZ DOUBLE;
		-- DECLARE _SumaP DOUBLE;
		-- DECLARE _KwotaPoprz DOUBLE;
		-- DECLARE _SumaPodstCW DOUBLE;
		-- DECLARE _NaliczacZUS INTEGER;
		DECLARE _PodlUbezpZdrowot INTEGER; -- to jest niezalezne od "NaliczacZUS"
		
		SET @ZwolnienieOdPodatku26Lat = IFNULL(@ZwolnienieOdPodatku26Lat,0); -- wewnętrzna funkcja jeśli będzie wołana skąś gdzie nie ma zmiennej to niech będzie 0
		SET @ZwolnienieOdPodatkuDR = IFNULL(@ZwolnienieOdPodatkuDR,0);
		SET @ZwolnienieOdPodatkuPE = IFNULL(@ZwolnienieOdPodatkuPE,0);
		
		CALL _IReg_Get('Place2003\\Progi_podatkowe_stawki_ZUS', 'Max_podstawa_ubezp_emeryt', _Param_B, 'FLOAT', @MaxPodstUbezpEm, 0);   -- Max_podstawa_ubezp_emeryt 0
							
		SET @pl.zlec.skladki_Podstawa = 0.0;
		SET @pl.zlec.skladki_PodstC = 0.0;
		SET @pl.zlec.skladki_PodstW = 0.0;
		SET @pl.zlec.skladki_PodstE = 0.0;
		SET @pl.zlec.skladki_PodstR = 0.0;
		
		SET @pl.zlec.skladki_NaliczacZUS = 0;
		SET @pl.zlec.skladki_PodlUbezpZdrowot = 0;
		SET @pl.zlec.skladki_Dekl = 0.0;
		
		
		
		-- dodanie + kwota_za_UW
		SET _SQLText = 
		'SELECT 
			IF(DeklarowanaPodstUbezpiecz>0, DeklarowanaPodstUbezpiecz, ZaZlecenie + kwota_za_UW) AS podst, 
			NaliczacZus, PodlUbezpZdrowot, DeklarowanaPodstUbezpiecz  
		INTO @pl.zlec.skladki_Podstawa, @pl.zlec.skladki_NaliczacZUS, @pl.zlec.skladki_PodlUbezpZdrowot, @pl.zlec.skladki_Dekl
		FROM tt_prace_zlecone 
		WHERE 
			GUID = ''#_Param_A#'' ;
  ';
		
		SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);			
		SET @_SQLText = _SQLText;		
		CALL _ExecuteCmd(_SQLText, @Error);
		
		
		
		IF (@pl.zlec.skladki_NaliczacZUS OR @pl.zlec.skladki_PodlUbezpZdrowot) THEN
		
			--	set @szambo = 'naliczamy ZUS';
			DROP TEMPORARY TABLE IF EXISTS `tt_skladki_place_do_zlec`;
			
			SET _SQLText =  
			'CREATE TEMPORARY TABLE `tt_skladki_place_do_zlec`
				SELECT ''#_Param_A#'' AS GUID,	
			  IFNULL(SUM(ZusFPprc), 0) as SUMZusFPprc, IFNULL(SUM(ZUSFEPPrc), 0) as ZUSFEPPrc, 
			  IFNULL(SUM(ZusFGprc), 0) as SUMZusFGprc, IFNULL(SUM(PodstFemerytalny), 0) as SUMPodstFemerytalny, 
			  IFNULL(SUM(PodstFrentowy), 0) as SUMPodstFrentowy,  
			  IFNULL(SUM(PodstFchorobowy), 0) as SUMPodstFchorobowy, 
			  IFNULL(SUM(PodstFwypadkowy), 0) as SUMPodstFwypadkowy, 
			  IFNULL(SUM(PodstKasaChorych), 0) as SUMPodstKasaChorych, 
			  IFNULL(SUM(SklFemerytalnyPracow), 0) as SUMSklFemerytalnyPracow, 
			  IFNULL(SUM(SklFrentowyPracow), 0) as SUMSklFrentowyPracow, 
			  IFNULL(SUM(SklFchorobowyPracow), 0) as SUMSklFchorobowyPracow, 
			  IFNULL(SUM(SklFwypadkowyPracow), 0) as SUMSklFwypadkowyPracow, 
			  IFNULL(SUM(SklKasaChorychPracowPobr), 0) as SUMSklKasaChorychPracowPobr, 
			  IFNULL(SUM(SklKasaChorOdlicz), 0) as SUMSklKasaChorOdlicz, 
			  IFNULL(SUM(SklFemerytalnyPracod), 0) as SUMSklFemerytalnyPracod, 
			  IFNULL(SUM(SklFrentowyPracod), 0) as SUMSklFrentowyPracod, 
			  IFNULL(SUM(SklFchorobowyPracod), 0) as SUMSklFchorobowyPracod, 
			  IFNULL(SUM(SklFwypadkowyPracod), 0) as SUMSklFwypadkowyPracod, 
			  IFNULL(SUM(SklKasaChorychPracod), 0) as SUMSklKasaChorychPracod, 
			  IFNULL(SUM(PodstDlaZUSFundPracy), 0) as SUMPodstDlaZUSFundPracy, 
			  IFNULL(SUM(PodstDlaZusFGSP), 0) as SUMPodstDlaZusFGSP, 
			  IFNULL(SUM(ZusFunduszPracy), 0) as SUMZusFunduszPracy, 
			  IFNULL(SUM(ZusFunduszGwarancyjny), 0) as SUMZusFunduszGwarancyjny, 
			  IFNULL(SUM(SkladkaFEP), 0) as SUMSkladkaFEP,
			  IFNULL(SUM(PPKskladkaPracow), 0) as SUMPPKskladkaPracow,
		    IFNULL(SUM(PPKskladkaPracod), 0) as SUMPPKskladkaPracod,
		    IFNULL(SUM(SklKasaChorOdliczHipot), 0) as SUMSklKasaChorOdliczHipot
			  FROM place 
		
			  WHERE GUID_pracownika = ''#_Param_D#''  AND deleted = 0
			    AND Year(ifnull(DataWyplDoDeklar, datawyplaty)) =  YEAR(''#_Param_E#'')
			    AND Month(ifnull(DataWyplDoDeklar, datawyplaty)) = MONTH(''#_Param_E#'')
			    AND KodTytUbezp = (SELECT KodTytUbezp FROM prace_zlecone WHERE GUID = ''#_Param_A#'') AND zapis_koryg_skl = 0
			;
			'
			;  -- qrPlaceSkladkiZaMiesiacDoZlecen
			
			SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
			SET _SQLText = REPLACE(_SQLText, '#_Param_B#', _Param_B);
			SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);			
			SET @_SQLText = _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);
			
			-- set @szambo_place = _SQLText;
			-- set @szambo_place_error = @Error;
			set @db.pdz_sql = @_SQLText;
			set @db.pdz_err = @Error;
			
			DROP TEMPORARY TABLE IF EXISTS `tt_skladki_zlec_do_zlec`;
			
			SET _SQLText =  
			'CREATE TEMPORARY TABLE `tt_skladki_zlec_do_zlec`
				SELECT ''#_Param_A#'' AS GUID,	
			  IFNULL(SUM(PodstFemerytalny), 0) AS SumaPodstEmeryt, 
			  IFNULL(SUM(PodstFrentowy), 0) AS SumaPodstRent, IFNULL(SUM(PodstFchorobowy), 0) AS SumaPodstChorob, 
			  IFNULL(SUM(PodstFwypadkowy), 0) AS SumaPodstWypadk, IFNULL(SUM(PodstKasaChorych), 0) AS SumaPodstKCh, 
			  
			  IFNULL(SUM(SklFemerytalnyZleceniob), 0) AS SumaSklEmerytZB, IFNULL(SUM(SklFrentowyZleceniob), 0) AS SumaSklRentZB, 
			  IFNULL(SUM(SklFchorobowyZleceniob), 0) AS SumaSklChorobZB, IFNULL(SUM(SklFwypadkowyZleceniob), 0) AS SumaSklWypadkZB, 
			  IFNULL(SUM(SklKasaChorychZleceniobPobr), 0) AS SumaSklKChPobrZB, IFNULL(SUM(SklKasaChorychZleceniobOdlicz), 0) AS SumaSklKChOdlZB, 
			  IFNULL(SUM(RazemSkladkiZleceniobiorcy), 0) AS SumaSklRazemZB, 
			  
			  IFNULL(SUM(SklFemerytalnyZleceniod), 0) AS SumaSklEmerytZD, IFNULL(SUM(SklFrentowyZleceniod), 0) AS SumaSklRentZD, 
			  IFNULL(SUM(SklFchorobowyZleceniod), 0) AS SumaSklChorobZD, IFNULL(SUM(SklFwypadkowyZleceniod), 0) AS SumaSklWypadkZD, 
			  IFNULL(SUM(SklKasaChorychZleceniod), 0) AS SumaSklKChZD, IFNULL(SUM(RazemSkladkiZleceniodawcy), 0) AS SumaSklRazemZD, 
			
			  IFNULL(SUM(SklFundPracy), 0) AS SumaSklFundPracy, IFNULL(SUM(SklFGSP), 0) AS SumaSklFGSP, 
			  IFNULL(SUM(PodstFpFGSP), 0) AS SumaPodstFpFGSP,
			  IFNULL(SUM(PodstFemerytBezOgr), 0) as SumaPodstFemerytBezOgr,		
			  IFNULL(SUM(PPKskladkaPracow), 0)  as SumaPPKskladkaPracow,
			  IFNULL(SUM(PPKskladkaPracod), 0)  as SumaPPKskladkaPracod,
			  IFNULL(SUM(SklKCZlecOdliczHipot), 0) as SumaSklKCZlecOdliczHipot
			  
			FROM prace_zlecone WHERE GUID_Pracownika = ''#_Param_D#'' AND datawyplaty >= @konkol_zoo.DataOd AND datawyplaty <= @konkol_zoo.DataDo 
			AND GUID <> ''#_Param_A#'' and KodTytUbezp =(SELECT KodTytUbezp FROM prace_zlecone WHERE GUID = ''#_Param_A#'') and deleted = 0  
			;
			'
			;
			
			SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
			SET _SQLText = REPLACE(_SQLText, '#_Param_B#', _Param_B);
			SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);		
			SET @_SQLText = _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);
			
			-- set @szambo_zlec = _SQLText;
			-- set @szambo_zlec_error = @Error;
			
			set @db.zdz_sql = @_SQLText;
			set @db.zdz_err = @Error;
		
		
			IF @pl.zlec.skladki_NaliczacZUS THEN
				
				SET @pl.zlec.skladki_SumaZ = 0.0;
				
				SET _SQLText = 
				'SELECT 
					IFNULL(SUM(PodstFemerytalny), 0) AS suma
					INTO @pl.zlec.skladki_SumaZ
				FROM prace_zlecone
				WHERE GUID_Pracownika = ''#_Param_D#'' AND GUID <> ''#_Param_A#'' and deleted = 0 
					AND datawyplaty >= ''#_Param_B#-01-01'' AND datawyplaty <= LAST_DAY(''#_Param_B#-#_Param_C#-01'')
				;		
				'
				;			

				SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
				SET _SQLText = REPLACE(_SQLText, '#_Param_B#', _Param_B);	
				SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);
				SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);	
				SET @_SQLText = _SQLText;
				CALL _ExecuteCmd(_SQLText, @Error);
				
				SET @pl.zlec.skladki_SumaP = 0.0;
				
				SET _SQLText = 
				'SELECT 
					IFNULL(SUM(PodstFemerytalny), 0) AS suma 				
				INTO @pl.zlec.skladki_SumaP
				FROM place
				WHERE GUID_Pracownika = ''#_Param_D#'' AND GUID <> ''#_Param_A#'' and deleted = 0 
					AND datawyplaty >= ''#_Param_B#-01-01'' AND datawyplaty <= LAST_DAY(''#_Param_B#-#_Param_C#-01'')
				;		
				'
				;			

				SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
				SET _SQLText = REPLACE(_SQLText, '#_Param_B#', _Param_B);	
				SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);
				SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);	
				SET @_SQLText = _SQLText;
				CALL _ExecuteCmd(_SQLText, @Error);
							
				IF @pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ + @pl.zlec.skladki_Podstawa > @MaxPodstUbezpEm  THEN
					SET @pl.zlec.skladki_PodstE = @MaxPodstUbezpEm - (@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ);
				ELSE
					SET @pl.zlec.skladki_PodstE = @pl.zlec.skladki_Podstawa;
				END IF; 
				
				SET @pl.zlec.skladki_PodstR = IF(@pl.zlec.skladki_Dekl > 0, @pl.zlec.skladki_Podstawa, @pl.zlec.skladki_PodstE);
				
				SET @pl.zlec.skladki_PodstW = _Rnd(@pl.zlec.skladki_Podstawa, 2);
				SET @pl.zlec.skladki_PodstC = _Rnd(@pl.zlec.skladki_Podstawa, 2);
				SET @pl.zlec.skladki_PodstF = _Rnd(@pl.zlec.skladki_Podstawa, 2);

				SET @pl.zlec.skladki_PodstE = _Rnd(@pl.zlec.skladki_PodstE, 2);
				SET @pl.zlec.skladki_PodstR = _Rnd(@pl.zlec.skladki_PodstR, 2);
			
				SET @pl.zlec.skladki_SumaPodstCW = 0;
				SELECT 
					(select ifnull(sum(z.podstfchorobowy), 0) from prace_zlecone z 
					where z.guid <> _Param_A and month(z.datawyplaty) = _Param_C and z.rok = _Param_B and z.deleted = 0 and z.guid_pracownika = _Param_D 
					) + 
					(select ifnull(sum(p.podstfchorobowy), 0) from place p 
					where p.rok = _Param_B and month(p.datawyplaty) = _Param_C and p.deleted = 0 and p.guid_pracownika = _Param_D
					) INTO @pl.zlec.skladki_SumaPodstCW; 
				
				SET @pl.zlec.skladki_KwotaPoprz = 0;
				select ifnull(KwotaDo3procZaktualnegoMsca, 0) INTO @pl.zlec.skladki_KwotaPoprz
				from Pracownicy where GUID = _Param_D;  -- bylo: KwotaZpoprzZaklDoSkl3proc
			
				CALL _IReg_Get('Place2003\\Progi_podatkowe_stawki_ZUS', 'Skladka_na_FP', _Param_B, 'FLOAT', @Zlec_Skladka_na_FP, 0);   -- Max_podstawa_ubezp_emeryt 0
			
				-- glowny update  (emeryt i rentowe naliczamy tylko gdy nie przekroczono max. podstawy ubezpieczenia)   SumaSklEmerytZB
				SET _SQLText =  
				'UPDATE tt_prace_zlecone Z
					SET
				
				Z.PodstUbSpolNarastAktualna = IF(NaliczacZus, @pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ, 0),
				Z.PodstFemerytalny 			= IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, @pl.zlec.skladki_PodstE, 0),
				Z.PodstFrentowy    			= IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, @pl.zlec.skladki_PodstR, 0)
				
				WHERE Z.GUID = 				''#_Param_A#''
				;'	;
											
				-- Z.PodstE_R					= IF(NaliczacZus, ZaZlecenie, 0),
				-- Z.PodstC_W					= IF(NaliczacZus, ZaZlecenie, 0),
				
				-- FieldByName('PodstUbSpolNarastAktualna').AsCurrency := aC; =>  PodstUbSpolNarastAktualna = _SumaP + _SumaZ
				
				SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
				SET @_SQLText = _SQLText;
				
				-- set @szambo = @_SQLText;
				
				CALL _ExecuteCmd(_SQLText, @Error);
				
				-- uwzgledniamy ustawienia w kartotece pracownikow
				SET @NieNaliczajSkladekER = false;
				SELECT (TypNaliczaniaSkladek <> 0) 
				INTO @NieNaliczajSkladekER
				FROM Pracownicy 
				WHERE GUID = _Param_D 
				;
				
				-- żeby w następnym zapytaniu móc używać PodstFemerytBezOgr
				UPDATE tt_prace_zlecone Z SET Z.PodstFemerytBezOgr = if(@NieNaliczajSkladekER,0 , _Rnd(@pl.zlec.skladki_Podstawa, 2))	WHERE Z.GUID = _Param_A;
				
				SET _SQLText =  								
				'UPDATE tt_prace_zlecone Z, tt_skladki_place_do_zlec tp, tt_skladki_zlec_do_zlec tz
					SET									
				Z.SklFemerytalnyZleceniob   = _Rnd(IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, 
				  (tp.SUMPodstFemerytalny  + tz.SumaPodstEmeryt + @pl.zlec.skladki_PodstE) *
				  Z.ProcFemerytalnyZleceniob/100 - (select tp.SUMSklFemerytalnyPracow  + tz.SumaSklEmerytZB), 	  0), 2),
				Z.SklFemerytalnyZleceniod	= _Rnd(IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, 
				 (tp.SUMPodstFemerytalny + tz.SumaPodstEmeryt + @pl.zlec.skladki_PodstE) *
				  Z.ProcFemerytalnyZleceniod/100 - (tp.SUMSklFemerytalnyPracod +  tz.SumaSklEmerytZD), 0), 2),
				Z.SklFrentowyZleceniob   	= _Rnd(IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, 
				  (tp.SUMPodstFrentowy + tz.SumaPodstRent + @pl.zlec.skladki_PodstR) *
				  Z.ProcFrentowyZleceniob/100 - (tp.SUMSklFrentowyPracow + tz.SumaSklRentZB),	  0), 2),
				Z.SklFrentowyZleceniod   	= _Rnd(IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, 
				  (tp.SUMPodstFrentowy + tz.SumaPodstRent + @pl.zlec.skladki_PodstR) *
				  Z.ProcFrentowyZleceniod/100 - (tp.SUMSklFrentowyPracod +  tz.SumaSklRentZD), 	  0), 2),
				Z.PodstFwypadkowy           = _Rnd(IF(Z.PodlUbezpWypadk, @pl.zlec.skladki_PodstW, 0), 2),   
				Z.SklFwypadkowyZleceniod	= _Rnd(IF(Z.PodlUbezpWypadk, (tp.SUMPodstFwypadkowy + tz.SumaPodstWypadk + @pl.zlec.skladki_PodstW) *
				  Z.ProcFwypadkowyZleceniod/100 - (tp.SUMSklFwypadkowyPracod + tz.SumaSklWypadkZD), 0), 2), 
				Z.PodstFchorobowy           = _Rnd(IF(Z.PodlUbezpChorob, @pl.zlec.skladki_PodstC, 0), 2),   
				Z.SklFchorobowyZleceniob	= _Rnd(IF(Z.PodlUbezpChorob, (tp.SUMPodstFchorobowy + tz.SumaPodstChorob + @pl.zlec.skladki_PodstC) *
				  Z.ProcFchorobowyZleceniob/100 - (tp.SUMSklFchorobowyPracow + tz.SumaSklChorobZB), 0), 2), 
				Z.PodstFpFGSP				= _Rnd(IF(Z.NaliczFGSP OR Z.NaliczFP, @pl.zlec.skladki_PodstF, 0), 2),
				Z.SklFundPracy		        = _Rnd(IF(Z.NaliczFP AND (Z.ZaZlecenie + @pl.zlec.skladki_SumaPodstCW + @pl.zlec.skladki_KwotaPoprz > @Zlec_Skladka_na_FP), 
				  _Rnd(@pl.zlec.skladki_PodstF * ProcFPracy/100, 2), 0), 2),
				Z.SklFGSP				    = _Rnd(IF(Z.NaliczFGSP, _Rnd(@pl.zlec.skladki_PodstF * ProcFGSP/100, 2), 0), 2),
										
				Z.PPKskladkaPracow 			= _Rnd((_Rnd((tp.SUMPodstFchorobowy + tz.SumaPodstFemerytBezOgr + Z.PodstFemerytBezOgr) * 
											  Z.PPKprocSkladkaPracow/100,2)) - (tp.SUMPPKskladkaPracow + tz.SumaPPKskladkaPracow), 2),
				Z.PPKskladkaPracod 			= _Rnd((_Rnd((tp.SUMPodstFchorobowy + tz.SumaPodstFemerytBezOgr + Z.PodstFemerytBezOgr) * 
											  Z.PPKprocSkladkaPracod/100, 2)) - (tp.SUMPPKskladkaPracod + tz.SumaPPKskladkaPracod), 2)				
				
				WHERE Z.GUID = 				''#_Param_A#''
				;';
							
				SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
				SET @_SQLText = _SQLText;
				
				-- set @szambo2 = @_SQLText;
				
				CALL _ExecuteCmd(_SQLText, @Error);
				
				-- set @szambo2error = @Error;
				
				-- zerowanie składek ze względu na ustawienie w kartotece pracownika TypNaliczaniaSkladek
				UPDATE tt_prace_zlecone Z
				SET
					Z.SklFemerytalnyZleceniob = 0,
					Z.SklFemerytalnyZleceniod = 0,
					Z.SklFrentowyZleceniob = 0,
					Z.SklFrentowyZleceniod = 0
				WHERE Z.GUID = _Param_A and @NieNaliczajSkladekER;
				
				
				
			END IF;		-- IF _NaliczacZUS THEN
			
			IF @pl.zlec.skladki_PodlUbezpZdrowot THEN   -- robimy jako oddzielne zapytanie, bo korzystamy tu z wyliczonych skladek na zapisie
			
				-- SELECT Z.ZaZlecenie - (Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob) FROM 	
				-- PodstKasaChorych ( = aPodstZdrowot) := ZaZlecenie - (SklFemerytalnyZleceniob + SklFrentowyZleceniob + SklFchorobowyZleceniob)
				-- oddzielnie skladka pobrana, odzielnie skladka odliczona - ta sama podstawa, inny procent
				SET _SQLText =  
				'UPDATE tt_prace_zlecone Z, tt_skladki_place_do_zlec tp, tt_skladki_zlec_do_zlec tz
					SET
				Z.PodstKasaChorych 				= Z.ZaZlecenie + Z.kwota_za_UW  - (Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob),
				Z.SklKasaChorychZleceniobPobr   = _Rnd( ((Z.ZaZlecenie + Z.kwota_za_UW  - (Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob))+ 
				  (tz.SumaPodstKCh + tp.SUMPodstKasaChorych)) * ProcKasaChorychZleceniobPobr/100 -
				  ( tp.SUMSklKasaChorychPracowPobr + tz.SumaSklKChPobrZB ), 2), 
				Z.SklKasaChorychZleceniobOdlicz = _Rnd( ((Z.ZaZlecenie + Z.kwota_za_UW  - (Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob))+ 
				  (tz.SumaPodstKCh + tp.SUMPodstKasaChorych)) * ProcKasaChorychZleceniobOdlicz/100 -
				  ( tp.SUMSklKasaChorOdlicz + tz.SumaSklKChOdlZB), 2),

				 Z.SklKCZlecOdliczHipot = _Rnd( ((Z.ZaZlecenie + Z.kwota_za_UW  - (Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob))+ 
				  (tz.SumaPodstKCh + tp.SUMPodstKasaChorych)) * ProcKasaChorOdliczHipot/100 -
				  ( tp.SUMSklKasaChorOdliczHipot + tz.SumaSklKCZlecOdliczHipot), 2) 			  
  
				  
				  
				WHERE Z.GUID = 				''#_Param_A#''  
				;
				'
				;
							
				SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
				SET @_SQLText = _SQLText;
				
				CALL _ExecuteCmd(_SQLText, @Error);
				
				set @db.zdr_sql = @_SQLText;
				set @db.zdr_err = @Error;
									
			END IF;		-- IF @pl.zlec.skladki_PodlUbezpZdrowot THEN
			
			--  zapamietujemy oryg.(nominalna) wartosc skladki oraz wyliczamy skladki lacznie (bez zdrowotnego)
			SET _SQLText =  
				'UPDATE tt_prace_zlecone Z
				 SET
					Z.SklKChZleceniobOdliczNomin = Z.SklKasaChorychZleceniobOdlicz,
					Z.SklKChZleceniobPobrNomin   = Z.SklKasaChorychZleceniobPobr,
					Z.RazemSkladkiZleceniobiorcy = Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob,
					Z.RazemSklZleceniobiorcyDoOdlicz = Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob,
					Z.RazemSkladkiZleceniodawcy  = Z.SklFemerytalnyZleceniod + Z.SklFrentowyZleceniod + Z.SklFwypadkowyZleceniod
				 WHERE Z.GUID = 	''#_Param_A#''  
				;
				'
				;		
			
			SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
			SET @_SQLText = _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);
			
			DROP TEMPORARY TABLE IF EXISTS `tt_skladki_place_do_zlec`;
			DROP TEMPORARY TABLE IF EXISTS `tt_skladki_zlec_do_zlec`;
		END IF; -- IF (@pl.zlec.skladki_NaliczacZUS OR @pl.zlec.skladki_PodlUbezpZdrowot) THEN
    END;	
	
	END IF;  --	IF _MODE = 'calc.one.order.mode.skladki'
	

/*-------------------------------------------------------------------------------------------------	
	'pl.przepisz.dane.pracownika.one.zlec'
		Przepisanie danych z karty pracownika do zlecenia  (dawne DBPlacesPlaceZlec.PrzepiszDanePrac)  <- wersja dla Security (obsluga 2 baz)
		Parametry
		_Param_A    GUID zlecenia
		_Param_B	Rok
		_Param_C	Miesiac
		_Param_D	GUID pracownika
		_Param_E    data wyplaty (dla Konkola nie wiadomo, dla security jest to _Param_F, ale security ma swoje wlasne przepisanie danych)
		
		CALL pl_gratyfikacje_tools_arg7('pl.przepisz.dane.pracownika.one.zlec', 'Prac1');
--------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl.przepisz.dane.pracownika.one.zlec' THEN
		
		SET @sel_zakres_DataOd = ifnull(concat(_Param_B, '-', _Param_C, '-01'), current_date);		
		SET @sel_zakres_DataDo = ifnull(last_day(concat(_Param_B, '-', _Param_C, '-01')), current_date);

		SELECT ValueN INTO @ProcentPodatkuHipot FROM IReg where idkey='Procent_podatku_od_umow_zlecen' and rok=2021;
		
			UPDATE tt_prace_zlecone g, Pracownicy p, pracownicy_ZUS z, osoby o
			SET 
				g.nazwisko         = o.nazwisko,
				g.KodTytUbezp      = p.KodUbezpUmZlecenie,
				g.ProcentPodatku   = p.ProcPodOdZlecen,
				g.ProcentPodatkuHipot = @ProcentPodatkuHipot,
				g.AnalitykaFK      = ifnull(p.AnalitykaFK, ''),
				g.Kategoria_Idn    = p.KategoriaPracownicza,
				g.naliczFGSP	   = p.naliczFGSP_zlec,
				g.naliczFP		   = p.naliczFP_zlec,	
				g.US_GUID		   = p.KluczUrzeduSkarbowego,
				g.calosc_przelewem = p.CzyCosPrzelewem,
				g.katcol0 		   = p.katcol0,
				g.katcol1 		   = p.katcol1,
				g.katcol2          = p.katcol2,
				g.NaliczacZus	   = IF(z.PodlEmerytalneUbzp OR z.Dobr_UbzpEmeryt OR z.PodlRentoweUbzp OR z.Dobr_UbzpRentowe, 1, 0) ,
				g.PodlUbezpChorob  = IF((z.PodlEmerytalneUbzp OR z.Dobr_UbzpEmeryt OR z.PodlRentoweUbzp OR z.Dobr_UbzpRentowe) AND z.PodlChorobUbzp, 1, 0),
				g.PodlUbezpWypadk  = IF((z.PodlEmerytalneUbzp OR z.Dobr_UbzpEmeryt OR z.PodlRentoweUbzp OR z.Dobr_UbzpRentowe) AND z.PodlWypadkUbzp, 1, 0),
				g.PodlUbezpZdrowot = IF((!ISNULL(z.DataPowstObowUbezpZdrow) OR z.Dobr_UbzpZdrowotne=1) AND z.ZgloszZUA_ZZA=1 AND ((z.KodKasyChorych <> '') AND !ISNULL(z.KodKasyChorych)), 1, 0),
				-- g.KluczWzoruPK     = ifnull(if((SELECT ValueB FROM IReg WHERE idkey = 'Inicjacja_wzoru_PK_zlecenia')=1, p.KluczWzoruPK_zlec, 0), 0) 			
				g.WzorDekr     = ifnull(if((SELECT ValueB FROM IReg WHERE idkey = 'Inicjacja_wzoru_PK_zlecenia')=1, p.wzordekr_zlec, 0), 0),
				g.GUID_division = p.GUID_division
				-- {$IFDEF KADRY_LISTA_UMOW_ZLECEN}  wl. dla Security - przepisz z akt. um.zlec
			WHERE g.GUID = _Param_A AND p.GUID = g.GUID_pracownika AND p.GUID = z.GUID_Pracownika AND o.GUID = p.GUID;
			
			SET @PPKprocSkladkaPracow = 0;
			SET @PPKprocSkladkaPracod = 0;		
			SET @PPKrownaSkladkaPracodawca = 0;		

			SELECT 
				IF(pppk.aktywnyPPK = 1, pppk.procSkladPodstPPKpracow+pppk.procSkladDodPPKpracow, 0) AS PPKprocSkladkaPracow, 
				IF(pppk.aktywnyPPK = 1, pppk.procSkladPodstPPKpracod+pppk.procSkladDodPPKpracod, 0) AS PPKprocSkladkaPracod 
				INTO @PPKprocSkladkaPracow, @PPKprocSkladkaPracod
			FROM pracownicy_ppk pppk, tt_prace_zlecone g 
			WHERE pppk.GUID_Pracownika = g.GUID_pracownika AND pppk.OdDnia <= @_DataWypl AND pppk.deleted = 0 AND g.GUID = _Param_A
			ORDER BY pppk.OdDnia DESC LIMIT 1;
			
			CALL _IReg_Get('Place2003\PPK', 'PPKrownaSkladkaPracodawca', YEAR(@_DataWypl), 'INTEGER', @PPKrownaSkladkaPracodawca, 0);
			IF ( @PPKrownaSkladkaPracodawca = 1 ) THEN						
				CALL _IReg_Get('Place2003\PPK', 'PPKskladPodstPracod', YEAR(@_DataWypl), 'DOUBLE', @PPKskladPodstPracod, 0);
				CALL _IReg_Get('Place2003\PPK', 'PPKskladDodatPracod', YEAR(@_DataWypl), 'DOUBLE', @PPKskladDodatPracod, 0);			
				SET @PPKprocSkladkaPracod = @PPKskladPodstPracod + @PPKskladDodatPracod ;	
			END IF;
			
			UPDATE tt_prace_zlecone g
			SET 
			 g.PPKprocSkladkaPracow = @PPKprocSkladkaPracow,
		     g.PPKprocSkladkaPracod = @PPKprocSkladkaPracod
			WHERE g.GUID = _Param_A;
			

			-- czesc dla PW nr 3
			IF _Param_E >= '2022-07-01' THEN
                UPDATE tt_prace_zlecone g SET
                    g.RezygnPrzesunZal = 1,
                    g.NaliczUlgeDlaKS = 0,
                    g.ProcentPodatku = IF(g.ProcentPodatku = 17, 12, g.ProcentPodatku)
                WHERE g.GUID = _Param_A;

                SET @RezygnPrzesunZal = 1;
                    -- NaliczUlgeDlaKS
			END IF;


			-- to dopisa? do powy?szego update
		/*		UPDATE sec.prace_zlecone g, sel_umowa_zlecenie t
				SET 
				g.MZ_Idn = t.MZ_Idn,
				g.RodzajRyczaltu = t.RodzajRyczaltu,
				g.NrZlecenia = t.NrZlecenia,
				g.PracaStr = t.PracaStr,
				g.DataZawarcia = t.DataZawarcia,
				g.NaliczacZus = t.NaliczacZus,
				g.PodlUbezpChorob = t.PodlUbezpChorob,
				g.PodlUbezpWypadk = t.PodlUbezpWypadk,
				g.PodlUbezpZdrowot = t.PodlUbezpZdrowot		
				WHERE  g.GUID_pracownika = _Param_C and t.GUID_pracownika = g.GUID_pracownika;				
			*/
		
		
		-- else
		/* 'IF(Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe, 1, 0) AS ZlecNaliczacZus, '+
			'IF((Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe) AND Z.PodlChorobUbzp, 1, 0) AS PodlChorobUbzp,  '+
		 'IF((Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe) AND Z.PodlWypadkUbzp, 1, 0) AS PodlWypadkUbzp, '+
		 'IF((!ISNULL(Z.DataPowstObowUbezpZdrow) OR Z.Dobr_UbzpZdrowotne=1) AND Z.ZgloszZUA_ZZA=1 AND ((Z.KodKasyChorych <> '''') AND !ISNULL(Z.KodKasyChorych)), 1, 0) AS PodlUbezpZdrowot '+
		
		FieldByName('NaliczacZus').AsInteger :=
          aDS.FieldByName('ZlecNaliczacZus').AsInteger;
        FieldByName('PodlUbezpChorob').AsInteger := aDS.FieldByName('PodlChorobUbzp').AsInteger;
        FieldByName('PodlUbezpWypadk').AsInteger :=  aDS.FieldByName('PodlWypadkUbzp').AsInteger;
        FieldByName('PodlUbezpZdrowot').AsInteger :=  aDS.FieldByName('PodlUbezpZdrowot').AsInteger;
		*/
		
		
		
	END IF;	--	IF _MODE = 'pl.przepisz.dane.pracownika.one.zlec' 

	
	
	IF (_MODE = 'pl.SprawdzRozniceNaRozliczeniaZasilkuIKwotaZasilku') THEN
	/*
	DROP TEMPORARY TABLE tmp_zestzbior;
	CREATE TEMPORARY TABLE tmp_zestzbior
	SELECT idn, guid FROM place WHERE miesiac=9 AND guid IN ('{BEBF482E-343F-4D7B-887D-7C4E610ADCCA}','{F0303508-ECD8-4D39-90DC-034975AF680C}') ;
	
	CALL pl_tools('pl.SprawdzRozniceNaRozliczeniaZasilkuIKwotaZasilku','','','','','','','','');  wolane w R_odcinekPlacowy
	
	*/	
		
		DROP TEMPORARY TABLE IF EXISTS t_pr_rozlicz_zas;
		
		CREATE TEMPORARY TABLE t_pr_rozlicz_zas 
			SELECT 
				GUID_Place, 
				SUM(IFNULL(rz.KwotaZUS+rz.kwotafirma+rz.ZasMacierz+rz.ZasOpiekun+rz.ZasRehab,0)) AS kwota
			FROM rozliczenie_zasilku rz 
			WHERE 
				rz.GUID_Place IN (SELECT DISTINCT guid FROM tmp_zestzbior)
			GROUP BY
				GUID_Place
		;
		
		
		DROP TEMPORARY TABLE IF EXISTS t_pr_rozlicz_zas_sklad;
		
		CREATE TEMPORARY TABLE t_pr_rozlicz_zas_sklad  
		SELECT 
			PS.GUID_zapisu_placowego, DSP.GUID, SUM(PS.kwota + PS.ZmniejszZwieksz) AS suma	
		FROM
			place_skladniki PS 
		LEFT JOIN definicja_skladnika_placy DSP ON PS.GUID_definicja_skladnika_placy = DSP.GUID AND DSP.deleted = 0 
		WHERE 
			PS.GUID_zapisu_placowego IN (SELECT DISTINCT guid FROM tmp_zestzbior) 
			AND DSP.GUID IN('C_9','C_10','C_11') 
		GROUP BY 
			PS.GUID_zapisu_placowego, DSP.GUID
		;
		
		
		SELECT 
			p.GUID,
			p.rok, 
			p.miesiac, 
			CONCAT(o.Nazwisko," ",o.Imiona) AS pracownik, 
			
			 IFNULL(SUM((SELECT SUM(kwota) FROM t_pr_rozlicz_zas WHERE GUID_Place=p.GUID)),0)
			 - (SUM(p.ChoroboweZUS + p.ChoroboweFirma) +
			 IFNULL(SUM((SELECT SUM(suma) FROM t_pr_rozlicz_zas_sklad WHERE GUID_zapisu_placowego=p.GUID)),0)
			 ) AS roznica 
   
   
		FROM place p  
		LEFT JOIN osoby o ON o.GUID= p.GUID_Pracownika
		WHERE 
			p.GUID IN (SELECT DISTINCT guid FROM tmp_zestzbior) 
		GROUP BY 
			p.GUID_Pracownika, -- pracownik
			p.miesiac 
		HAVING 
			ABS(roznica)>=0.01 
		ORDER BY 
			pracownik  
		;
	END IF;	--	IF _MODE = 'pl.SprawdzRozniceNaRozliczeniaZasilkuIKwotaZasilku'


/*----------------------------------------------------------------------------	
	'calc.one.order.mode.spoa.for.month'
		Naliczenie  jednego zlecenia z karty pracy
		Parametry
		_Param_A	
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D			
		_Param_E	data wyp?aty   
		_Param_F    nrListy
		
		CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.spoa.for.month', '', '2018', '9', '', '2018-09-20', -1);
-----------------------------------------------------------------------------*/	
	
	IF _MODE = 'calc.one.order.mode.spoa.for.month' THEN  -- wolane w Karty pracy
		BEGIN
		DECLARE _done BOOL DEFAULT FALSE;	

			DECLARE _zlec_prac_c CURSOR FOR	
				SELECT zp.GUID_zlecenia, zp.GUID
				FROM karty_pracy kp 
				LEFT JOIN zlec_prac zp ON zp.GUID_karty_pracy = kp.GUID
				WHERE kp.deleted = 0 AND kp.rok = _Param_B AND kp.miesiac = _Param_C AND if(ifnull(_Param_A,'') = '', true, kp.GUID = _Param_A);    
           
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;		

			OPEN _zlec_prac_c;
			loopF: LOOP
				FETCH _zlec_prac_c INTO 
					_GUIDPracownika, _GUIDZlecPrac;  -- Prac.guid, zlec_prac.guid					
				IF _done THEN
-- 						set @co = concat(@co, ' spadamy ');
--						select 'Nic do zrobienia.' as msg;
						LEAVE loopF;
				ELSE
					CALL pl_gratyfikacje_tools_arg7('create.work.tables', '', '', '', '', '', '');
					CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.spoa', _GUIDZlecPrac, _Param_B, _Param_C, _GUIDPracownika, _Param_E, _Param_F);
				END IF;	
			
			END LOOP;
			CLOSE _zlec_prac_c;
--			CALL pl_gratyfikacje_tools_arg7('drop.work.tables', '', '', '', '', '', '');			
			select 'OK' as msg;
		END;			
	
	END IF;	--	IF _MODE = 'calc.one.order.mode.spoa.for.month'
	
/*-------------------------------------------------------------------------------------------	
	'calc.one.order.mode.spoa'
		Naliczenie  jednego zlecenia z karty pracy
		Parametry
		_Param_A	GUID GUID_zlec_prac
		_Param_B	rok
		_Param_C	miesiac		
		_Param_D	GUID pracownika		
		_Param_E	data wyplaty   
		_Param_F    nrListy
		
CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.spoa', 'ZlecGUID', '2012', '5', 'Prac1', '2012-12-01', '1');
CALL pl_gratyfikacje_tools_arg7('create.work.tables', '', '', '', '', '', '');
CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.spoa', '{4DE6CA56-5905-4F90-97AB-C03F448A7AAD}', '2022', '2', '{6F85CB9E-4E36-4007-A73D-2D722F2222D5}', '2022-02-16', '809');
-------------------------------------------------------------------------------------------*/	
	
	IF _MODE = 'calc.one.order.mode.spoa' THEN  -- wolane w Karty pracy
		
		SET _CurrWorkerGUID = MD5(concat(_Param_A, _Param_D, _Param_B, _Param_C));
		SET _ZaZlecenie = 0; SET _DodNocny = 0;  
		SET _godz100 = 0; 
		SET _godz150 = 0;
		SET _godz200 = 0;
		set _godzP =0; set _godz_niedorobka = 0;
		SET _ProcPremii = 0; SET _SG  = 0; SET _GratyfPodst = 0;	SET _SGdef = 0;	
		SET _RozliczajWg = 0;  SET _CzasZ = 0;   SET _godz100prac = 0; SET  _OCP = 0; SET _kwota_def = 0;
		SET _OCP_3mc = 0; SET _godz_3mc = 0;  SET _SGp = 0; SET _SGz = 0; SET _kwotaW = 0;
	
		SET @ZwolnienieOdPodatku26Lat = 0;
		SET @ZwolnienieOdPodatkuDR = 0;
		SET @ZwolnienieOdPodatkuPE = 0;
		SET @RezygnPrzesunZal = 0;
		SET @SUMZaliczkaOdroczona = 0;
		SET @SumaZaZlecenie = 0;
		SET @SumaWynagr_prokurent = 0;
		SET @SumaKwota_za_UW = 0;
		SET @SumZaliczkaOdroczonaMsc = 0;
		SET @SumaZaZlecenieMsc = 0;
		SET @SumaWynagr_prokurentMsc = 0;
		SET @SumaKwota_za_UWMsc = 0;
		SET @aPodstPodtk = 0;
		SET @aPodstPodtkHipotetyczna = 0;
		SET @KwotaWolnaOdPodatkuZlec = 0;
		SET @KwotaWolnaOdPodatkuZlecKartoteka = 0;
		SET @SumaKwotaWolnaOdPodatkuZlec = 0;

		SET @DodUbezpMedyczneZlecKartoteka = 0;
		SET @PotrDodUbezpMedyczneZlecKartoteka = 0;
		SET @SumaDodUbezpMedyczneZlec = 0;
		SET @SumaPotrDodUbezpMedyczneZlec = 0;


		SET @UwzglednijPrzesuniecieZal =
		(SELECT ValueB FROM IReg WHERE idkey = 'UwzglednijPrzesuniecieZal' AND rok = YEAR(_Param_E));
		SET @MaxRezygnPrzesunZalKwota = 
		(SELECT ValueN FROM IReg WHERE idkey = 'MaxRezygnPrzesunZalKwota' AND rok = YEAR(_Param_E));
		
		SELECT IF(YEAR(_Param_E)>2019, ZwolnOdPodatku26LatPo2019, ZwolnienieOdPodatku26Lat), NaliczUlgeDlaDR, NaliczUlgeDlaPE, RezygnPrzesunZalZlec, KwotaWolnaOdPodatkuZlec,
		DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec
		INTO @ZwolnienieOdPodatku26Lat, @ZwolnienieOdPodatkuDR, @ZwolnienieOdPodatkuPE, @RezygnPrzesunZal, @KwotaWolnaOdPodatkuZlecKartoteka, @DodUbezpMedyczneZlecKartoteka, @PotrDodUbezpMedyczneZlecKartoteka
		FROM Pracownicy
		WHERE  GUID = _Param_D
		;

		IF @ZwolnienieOdPodatku26Lat = 1 THEN
   IF _Param_E > (select adddate(dataurodzenia, interval 26 year) from osoby where GUID = _Param_D) THEN
    SET @ZwolnienieOdPodatku26Lat = 0;
   END IF;
		END IF;

		
		-- cdsKwotyZlecZPoprzednichMSC - nowe dane - od początku roku do msc wypłaty
    SELECT
			IFNULL(SUM(pl.ZaliczkaOdroczona),0) as SumZaliczkaOdroczona, 
			IFNULL(SUM(pl.ZaZlecenie),0) as SumaZaZlecenie, 
			IFNULL(SUM(pl.wynagr_prokurent),0) as SumaWynagr_prokurent,
			IFNULL(SUM(pl.kwota_za_UW),0) as SumaKwota_za_UW
    INTO @SUMZaliczkaOdroczona, @SumaZaZlecenie, @SumaWynagr_prokurent, @SumaKwota_za_UW
    FROM prace_zlecone pl
    WHERE pl.GUID_pracownika = _Param_D 
    AND YEAR(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = YEAR(_Param_E) 
    AND MONTH(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) <= MONTH(_Param_E)
    AND pl.GUID <> _CurrWorkerGUID 
    and pl.deleted = 0
    ;	
		-- nowe dane dla msc wypłaty
		SELECT
			IFNULL(SUM(pl.ZaliczkaOdroczona),0) as SumZaliczkaOdroczonaMsc, 
			IFNULL(SUM(pl.ZaZlecenie),0) as SumaZaZlecenieMsc, 
			IFNULL(SUM(pl.wynagr_prokurent),0) as SumaWynagr_prokurentMsc,
			IFNULL(SUM(pl.kwota_za_UW),0) as SumaKwota_za_UWMsc,
			IFNULL(SUM(pl.KwotaWolnaOdPodatkuZlec),0) as SumaKwotaWolnaOdPodatkuZlec
    INTO @SumZaliczkaOdroczonaMsc, @SumaZaZlecenieMsc, @SumaWynagr_prokurentMsc, @SumaKwota_za_UWMsc, @SumaKwotaWolnaOdPodatkuZlec
    FROM prace_zlecone pl
    WHERE pl.GUID_pracownika = _Param_D 
    AND YEAR(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = YEAR(_Param_E) 
    AND MONTH(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = MONTH(_Param_E)
    AND pl.GUID <> _CurrWorkerGUID 
    and pl.deleted = 0
    ;	

		-- nowe dane dla msc zlecenia!!!
	SELECT
		IFNULL(SUM(pl.DodUbezpMedyczneZlec),0),
		IFNULL(SUM(pl.PotrDodUbezpMedyczneZlec),0)
	INTO @SumaDodUbezpMedyczneZlec, @SumaPotrDodUbezpMedyczneZlec
	FROM prace_zlecone pl
	WHERE pl.GUID_pracownika = _Param_D
	-- AND pl.rok = YEAR(_Param_E)
	-- AND pl.miesiac = MONTH(_Param_E)
	AND pl.rok = _varINT(_Param_B)
 AND pl.miesiac = _varINT(_Param_C)
	AND pl.GUID <> _CurrWorkerGUID
	and pl.deleted = 0
	;


	-- 26Lat begin
		SET @rok = YEAR(_Param_E);
		SET @MaxDochodZwolnionyPodatek26lat = 0;
		CALL _IReg_Get('Place2003\\ZwPodatkowe', 'MaxDochodZwolnionyPodatek26lat', @rok, 'DOUBLE', @MaxDochodZwolnionyPodatek26lat, 85528.00);

		SET @KwotaDoLimitu26Narast = 0;
		SELECT SUM(KwotaDoLimitu26Narast) INTO @KwotaDoLimitu26Narast
		FROM (
			( SELECT IFNULL(SUM(KwotaDoLimitu26),0) AS KwotaDoLimitu26Narast 
			  FROM prace_zlecone WHERE GUID_Pracownika = _Param_D AND  YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _CurrWorkerGUID AND deleted = 0 
			) UNION 
			( SELECT IFNULL(SUM(KwotaDoLimitu26),0) AS KwotaDoLimitu26Narast 
			  FROM place WHERE GUID_pracownika = _Param_D AND YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _CurrWorkerGUID AND deleted = 0 
			)
		) newTable;
		
		-- zwolnienie DR begin	
		SET @MaxDochodZwolnionyPodatekDR = 0;
		SET @rok = YEAR(_Param_E);
		CALL _IReg_Get('Place2003\\ZwPodatkowe', 'MaxDochodZwolnionyPodatekDR', @rok, 'DOUBLE', @MaxDochodZwolnionyPodatekDR, 85528.00);

		SET @KwotaDoLimituDRNarast = 0;
		SELECT SUM(KwotaDoLimituDRNarast) INTO @KwotaDoLimituDRNarast
		FROM (
			( SELECT IFNULL(SUM(KwotaDoLimituDR),0) AS KwotaDoLimituDRNarast 
			  FROM prace_zlecone WHERE GUID_Pracownika = _Param_D AND  YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _CurrWorkerGUID AND deleted = 0 
			) UNION 
			( SELECT IFNULL(SUM(KwotaDoLimituDR),0) AS KwotaDoLimituDRNarast 
			  FROM place WHERE GUID_pracownika = _Param_D AND YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _CurrWorkerGUID AND deleted = 0 
			)
		) newTable;
	-- DR end
		
		-- zwolnienie PE begin	_Param_A
		SET @MaxDochodZwolnionyPodatekPE = 0;
		SET @rok = YEAR(_Param_E);
		CALL _IReg_Get('Place2003\\ZwPodatkowe', 'MaxDochodZwolnionyPodatekPE', @rok, 'DOUBLE', @MaxDochodZwolnionyPodatekPE, 85528.00);

		SET @KwotaDoLimituPENarast = 0;
		SELECT SUM(KwotaDoLimituPENarast) INTO @KwotaDoLimituPENarast
		FROM (
			( SELECT IFNULL(SUM(KwotaDoLimituPE),0) AS KwotaDoLimituPENarast 
			  FROM prace_zlecone WHERE GUID_Pracownika = _Param_D AND  YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _CurrWorkerGUID AND deleted = 0 
			) UNION 
			( SELECT IFNULL(SUM(KwotaDoLimituPE),0) AS KwotaDoLimituPENarast 
			  FROM place WHERE GUID_pracownika = _Param_D AND YEAR(datawyplaty) = YEAR(_Param_E) AND GUID <> _CurrWorkerGUID AND deleted = 0 
			)
		) newTable;
	-- PE end		
	-- 26Lat end

	-- set MZ_Idn z tworzeniem wpisu je?li nie istnieje 
		SELECT z.nr_zlecenia INTO @nr_zlecenia
		FROM zlec z
		LEFT join karty_pracy kp ON z.GUID = kp.GUID_pracownika
		LEFT JOIN zlec_prac zp ON zp.GUID_karty_pracy = kp.GUID 
		WHERE zp.GUID = _Param_A limit 1
		;
	
		set @idn_prace_zlec_miejsca = -1;
		SELECT idn INTO @idn_prace_zlec_miejsca
		FROM prace_zlec_miejsca WHERE nazwa = @nr_zlecenia limit 1
		;
		
		set @idn_prace_zlec_miejsca = ifnull(@idn_prace_zlec_miejsca, 0);
		
		IF @idn_prace_zlec_miejsca <1 THEN
			SET _SQLText = concat('INSERT INTO `prace_zlec_miejsca` (`symbol`, `nazwa`, `uzywany`) VALUE ("',ifnull(@nr_zlecenia,'') ,'", "',ifnull(@nr_zlecenia,''),'", 1);'); -- z.nr_zlecenia 
			set @test = _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);	
			SELECT idn INTO @idn_prace_zlec_miejsca FROM prace_zlec_miejsca WHERE nazwa = @nr_zlecenia limit 1;
		END IF;
	
		-- "stawka godzinowa 2" z karty pracownika
--		SELECT StawkaGodzinowa2, StawkaGodzinowa
--		FROM Pracownicy
--		WHERE GUID = _Param_D
--		INTO _SG, _SGdef;

--		set @co = concat(@co, ' - ', _Param_D,' - ',_SG, ' - ', _SGdef);
		
		-- godziny ze zlec_prac] do rozliczenia
		SET @NrZlecenia = '';
		SELECT zp.godz100/60 , zp.godz150/60, zp.godz200/60, zp.stawka_godz, ifnull(zp.nr_umowy_zlecenia,'') 
		INTO _godz100, _godz150, _godz200, _SGdef, @NrZlecenia
		FROM zlec_prac zp 
		WHERE zp.GUID = _Param_A		
		;
		
		-- wyliczenie kwoty	kwotaXXX = godzXXX * StawkaGodzinowa   		 
		SET _Kwota100 = (_godz100) * _SGdef;
--		SET _Kwota150 = (_godz150) * _SGdef + (_SGdef * _godz150 * 0.5);
--		SET _Kwota200 = (_godz200) * _SGdef + (_SGdef * _godz200 * 1.0);
			
--		SET _ZaZlecenie = _Kwota100 + _Kwota150 + _Kwota200;
		SET _ZaZlecenie = _Kwota100;
		
		IF _ZaZlecenie > 0 THEN
			SET  _ZaZlecenie = CEIL(_ZaZlecenie);
		
			SET @_DataOd = ifnull(concat(_Param_B,'-',_Param_C,'-01'), current_date);			
			SET @_DataDo = ifnull(last_day(concat(_Param_B,'-',_Param_C,'-01')), current_date);
			SET @_DataWypl = _Param_E; 
		set @jmam='j1';
				
			SET _MZ_idn = @idn_prace_zlec_miejsca; -- 0;				
			-- jesli jest juz rekord o takim GUIDzie, to kopiujemy jego idn i wstawiamy do tab.tymcz. (ma to pozniej znaczenie przy replace)
			set _I = 0;
			select idn into _I from prace_zlecone where guid = _CurrWorkerGUID;
			if _I  = 0 then
				select max(idn)+1 into _I from prace_zlecone;
			end if;	
		set @jmam='j2';
			
			-- wstawienie do place_zlec i do place_skladniki
			REPLACE INTO tt_prace_zlecone 
				(idn, GUID, GUID_pracownika,  miesiac, rok, DataOd, DataDo, DataZawarcia, NrZlecenia, 
				ZaZlecenie, RodzajRyczaltu,  
				KosztyUzyskaniaWproc, ProcFemerytalnyZleceniob, ProcFrentowyZleceniob, ProcFchorobowyZleceniob,
				ProcFwypadkowyZleceniob, ProcKasaChorychZleceniobPobr, ProcKasaChorychZleceniobOdlicz,
				ProcFemerytalnyZleceniod, ProcFrentowyZleceniod, ProcFchorobowyZleceniod, ProcFwypadkowyZleceniod,
				ProcKasaChorychZleceniod, ProcFPracy, ProcFGSP, ProcKasaChorOdliczHipot, AreaGUID, DataWyplaty, MZ_Idn, nrlisty, ZwolnienieOdPodatku26Lat, NaliczUlgeDlaDR, NaliczUlgeDlaPE, RezygnPrzesunZal,
				DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec
				)   
			VALUES (_I, _CurrWorkerGUID, _Param_D, _Param_C, _Param_B, @_DataOd, @_DataDo, @_DataOd, @NrZlecenia, 
				IFNULL(_ZaZlecenie, 0), 7,   
				(SELECT ValueN FROM IReg WHERE idkey = 'Procent_kosztow_um_zlec' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecbiorcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecbiorcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecbiorcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_zlecbiorcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecbiorcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecdawcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecdawcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecdawcy' AND rok = YEAR(_Param_E)), 
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_zlecdawcy' AND rok = YEAR(_Param_E)), 
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecdawcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FP_zlecdawcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FGSP_zlecdawcy' AND rok = YEAR(_Param_E)),
				(SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = 2021),
				_Param_E, 
				@_DataWypl, 
				_MZ_idn,
				_Param_F,
				@ZwolnienieOdPodatku26Lat, @ZwolnienieOdPodatkuDR, @ZwolnienieOdPodatkuPE, @RezygnPrzesunZal,
				GREATEST(@DodUbezpMedyczneZlecKartoteka - @SumaDodUbezpMedyczneZlec, 0),
				GREATEST(@PotrDodUbezpMedyczneZleckartoteka - @SumaPotrDodUbezpMedyczneZlec, 0)
			);  
		set @jmam='j3';

			-- Z_1-Z_5(rodz.skl = 0) 
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_1')), 'Z_1', _CurrWorkerGUID, _ZaZlecenie, _ZaZlecenie , 0);  -- @pl.gratyf.za_zlecenie, @pl.gratyf.za_zlecenie
			set @jmam='z1';
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_2')), 'Z_2', _CurrWorkerGUID, 0, 0, 0);
			set @jmam='z2';
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_3')), 'Z_3', _CurrWorkerGUID, 0, 0, 0);
			set @jmam='z3';
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_4')), 'Z_4', _CurrWorkerGUID, 0, 0, 0);
			set @jmam='z4';
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_5')), 'Z_5', _CurrWorkerGUID, 0, 0, 0);
			set @jmam='z5';

			-- Z_ZUS_1 - 9 (rodz.skl = 6)  _ZLEC_ZUS
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_ZUS_1')), 'Z_ZUS_1', _CurrWorkerGUID, 0, 0, _ZLEC_ZUS);
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_ZUS_2')), 'Z_ZUS_2', _CurrWorkerGUID, 0, 0, _ZLEC_ZUS);			
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_ZUS_3')), 'Z_ZUS_3', _CurrWorkerGUID, 0, 0, _ZLEC_ZUS);			
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_ZUS_4')), 'Z_ZUS_4', _CurrWorkerGUID, 0, 0, _ZLEC_ZUS);
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_ZUS_5')), 'Z_ZUS_5', _CurrWorkerGUID, 0, 0, _ZLEC_ZUS);				
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_ZUS_6')), 'Z_ZUS_6', _CurrWorkerGUID, 0, 0, _ZLEC_ZUS);				
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_ZUS_7')), 'Z_ZUS_7', _CurrWorkerGUID, 0, 0, _ZLEC_ZUS);				
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_ZUS_8')), 'Z_ZUS_8', _CurrWorkerGUID, 0, 0, _ZLEC_ZUS);			
			REPLACE INTO tt_zlec_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
			VALUES(md5(concat(_CurrWorkerGUID, 'Z_ZUS_9')), 'Z_ZUS_9', _CurrWorkerGUID, 0, 0, _ZLEC_ZUS);
			set @pl.gratyf.debug = 'zus9';
			
			
			-- stale potracenia	z karty pracownika		 
				-- do testów ! czy działa prawidłowo
			REPLACE INTO place_skladniki (RodzajSkladnika, GUID_definicja_skladnika_placy, guid_zapisu_placowego, kwota, nomkwota, ZmniejszZwieksz)
				SELECT  
					_ZLEC_Potr, GUID_def_skl_placy, _CurrWorkerGUID, kwota, kwota, 0 
				FROM prac_stale_skladniki p 
				JOIN definicja_skladnika_placy d ON p.GUID_def_skl_placy = d.GUID AND d.typ_gratyfikacji = 1 AND d.deleted = 0 
				WHERE p.GUID_pracownika = _Param_D AND p.typ_skladnika = 0 
					AND ((p.rok_do > _Param_B) OR (p.rok_do = _Param_B AND p.msc_do > _Param_C)) ;	
								
			CALL pl_gratyfikacje_tools_arg7('pl.przepisz.dane.pracownika.one.zlec', _CurrWorkerGUID, _Param_B, _Param_C, _Param_D, _Param_E, 'auto'); -- TODO: trzeba przepiscać znacznik 26lat

			-- wszystkie sk?adki ZUS maj? by? naliczone: // ?ask AS
			
			
			SELECT
				IF(Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe, 1, 0) AS NaliczacZus,
				IF((Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe) AND (Z.PodlChorobUbzp OR (Z.Dobr_UbzpChorobowe=1 AND Z.Dobr_UchorobOd <= @_DataWypl)), 1, 0) AS PodlChorobUbzp, 
				IF((Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe) AND Z.PodlWypadkUbzp, 1, 0) AS PodlWypadkUbzp, 
				IF((!ISNULL(Z.DataPowstObowUbezpZdrow) OR Z.Dobr_UbzpZdrowotne=1) AND Z.ZgloszZUA_ZZA IN (1,5) AND ((Z.KodKasyChorych <> '') AND !ISNULL(Z.KodKasyChorych)), 1, 0) AS PodlUbezpZdrowot 
				INTO @_NaliczacZus, @_PodlChorobUbzp, @_PodlWypadkUbzp, @_PodlUbezpZdrowot
			FROM pracownicy_ZUS Z 
			WHERE Z.GUID_Pracownika = _Param_D	
			;
			
			update tt_prace_zlecone z, Pracownicy k
			set 
				NaliczacZus = @_NaliczacZus, PodlUbezpChorob = @_PodlChorobUbzp, PodlUbezpWypadk = @_PodlWypadkUbzp, PodlUbezpZdrowot = @_PodlUbezpZdrowot, z.PracaStr = k.uwagi_dodatkowe
			where z.GUID = _CurrWorkerGUID and z.guid_pracownika = k.guid;
					
			CALL pl_gratyfikacje_tools_arg7('calc.one.order.mode.skladki', _CurrWorkerGUID, _Param_B, _Param_C, _Param_D, _Param_E, 'auto');
						
				
			-- przeliczenie kwot innych potracen i innych dodatkow
			SET _SQLText = 'UPDATE tt_prace_zlecone z 
				SET
					z.InneDod = ifnull((select sum(kwota) from place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Dod#),0),	
					z.InnePotr = ifnull((select sum(kwota) from place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Potr#),0)	
				WHERE	
					z.GUID = ''#_ZlecGUID#'' ; 
				';
			SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _CurrWorkerGUID);			
			SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Dod#', cInneDodatki);	
			SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Potr#', _ZLEC_Potr);	
			SET @_SQLText = _SQLText;		
			CALL _ExecuteCmd(_SQLText, @Error);	
				
			-- przeliczenie kwot na zleceniu
			-- TODO: trzeba IF 26lat THEN ... ELSE po staremu 			
			IF @ZwolnienieOdPodatku26Lat = 1 OR @ZwolnienieOdPodatkuDR = 1 OR @ZwolnienieOdPodatkuPE = 1 THEN 
				
				IF @ZwolnienieOdPodatku26Lat = 1 THEN -- wejscie tylko dla 26 lat
					SET @KwotaDoLimitu26 = 0;
					SELECT _Rnd2(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
						(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
							dieta_delegacje * ProcFrentowyZleceniob/100 + 
							dieta_delegacje * ProcFchorobowyZleceniob/100)
							+ SkladkaPPE + PPKskladkaPracod + DodUbezpMedyczneZlec)
					INTO @KwotaDoLimitu26
					FROM tt_prace_zlecone
					WHERE GUID = _CurrWorkerGUID 
					;
				
					IF @MaxDochodZwolnionyPodatek26lat >= (@KwotaDoLimitu26Narast+@KwotaDoLimitu26) THEN
							UPDATE tt_prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0,
							z.KosztyUzyskania = 0, z.ZaliczkaPrzedSklUbezp = 0
							WHERE GUID = _CurrWorkerGUID;
						ELSE --  tutaj wchodzimy gdy nastpilo przeekroczenie limitu ulgi albo na tym zapisie albo   wczesniej
                            IF @MaxDochodZwolnionyPodatek26lat > (@KwotaDoLimitu26Narast) THEN --  nie było wczesniej przekroczenia limitu czyli przekroczenie jest na tym zapisie

								UPDATE tt_prace_zlecone z
								SET z.RazemSklZleceniobiorcyDoOdlicz =
										_Rnd2(((@KwotaDoLimitu26Narast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatek26lat)
											/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
								WHERE GUID = _CurrWorkerGUID
								;

								-- 80.000 + 10.000 - 85528=4472

								UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
									_Rnd2(((@KwotaDoLimitu26Narast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatek26lat
									- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
								WHERE GUID = _CurrWorkerGUID
								;

								UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr =
								((@KwotaDoLimitu26Narast + @KwotaDoLimitu26)- @MaxDochodZwolnionyPodatek26lat)
								- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
								WHERE GUID = _CurrWorkerGUID;


								UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
								WHERE GUID = _CurrWorkerGUID
								;

								SET @KwotaDoLimitu26 = @KwotaDoLimitu26 - (@KwotaDoLimitu26Narast + @KwotaDoLimitu26 -@MaxDochodZwolnionyPodatek26lat);


							ELSE -- przekroczenie limitu nastapilo juz wczeniej
								 -- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
								SET @KwotaDoLimitu26 = 0;

								UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
									_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
								WHERE z.GUID = _CurrWorkerGUID
								;

								UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
								WHERE GUID = _CurrWorkerGUID
								;

								UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
								WHERE GUID = _CurrWorkerGUID
								;

							END IF;
						END IF;

						UPDATE tt_prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
							z.Dochod * z.ProcentPodatku / 100
						WHERE GUID = _CurrWorkerGUID
						;

				END IF; -- wejscie tylko dla 26 lat								
			
				IF @ZwolnienieOdPodatkuDR = 1 THEN -- wejscie tylko dla DR
					SET @KwotaDoLimituDR = 0;
					SELECT _Rnd2(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
						(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
						dieta_delegacje * ProcFrentowyZleceniob/100 + 
						dieta_delegacje * ProcFchorobowyZleceniob/100)
						+ SkladkaPPE + PPKskladkaPracod + DodUbezpMedyczneZlec)
					INTO @KwotaDoLimituDR
					FROM tt_prace_zlecone
					WHERE GUID = _CurrWorkerGUID
					;
			
					IF @MaxDochodZwolnionyPodatekDR >= (@KwotaDoLimituDRNarast+@KwotaDoLimituDR) THEN
						UPDATE tt_prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0,
						z.KosztyUzyskania = 0, z.ZaliczkaPrzedSklUbezp = 0
						WHERE GUID = _CurrWorkerGUID;
					ELSE --  tutaj wchodzimy gdy nastpilo przeekroczenie limitu ulgi albo na tym zapisie albo   wczesniej
						IF @MaxDochodZwolnionyPodatekDR > (@KwotaDoLimituDRNarast) THEN --  nie było wczesniej przekroczenia limitu czyli przekroczenie jest na tym zapisie
						-- SET @KwotaDoLimitu26 = _Rnd2(@MaxDochodZwolnionyPodatek26lat - @KwotaDoLimitu26Narast);

							UPDATE tt_prace_zlecone z
							SET z.RazemSklZleceniobiorcyDoOdlicz =
									_Rnd2(((@KwotaDoLimituDRNarast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatekDR)
										/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
							WHERE GUID = _CurrWorkerGUID
							;

							-- 80.000 + 10.000 - 85528=4472

							UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
								_Rnd2(((@KwotaDoLimituDRNarast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatekDR
								- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
							WHERE GUID = _CurrWorkerGUID
							;

							UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr =
							((@KwotaDoLimituDRNarast + @KwotaDoLimituDR)- @MaxDochodZwolnionyPodatekDR)
							- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
							WHERE GUID = _CurrWorkerGUID;


							UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
							WHERE GUID = _CurrWorkerGUID
							;

							SET @KwotaDoLimituDR = @KwotaDoLimituDR - (@KwotaDoLimituDRNarast + @KwotaDoLimituDR -@MaxDochodZwolnionyPodatekDR);


						ELSE -- przekroczenie limitu nastapilo juz wczeniej
								-- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
							SET @KwotaDoLimituDR = 0;

							UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
								_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
							WHERE z.GUID = _CurrWorkerGUID
							;

							UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
							WHERE GUID = _CurrWorkerGUID
							;

							UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
							WHERE GUID = _CurrWorkerGUID
							;

						END IF;
					END IF;

					UPDATE tt_prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
						z.Dochod * z.ProcentPodatku / 100
					WHERE GUID = _CurrWorkerGUID
					;

				END IF; -- wejscie tylko dla DR

				
				IF @ZwolnienieOdPodatkuPE = 1 THEN -- wejscie tylko dla PE
					SET @KwotaDoLimituPE = 0;
					SELECT _Rnd2(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
						(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
						dieta_delegacje * ProcFrentowyZleceniob/100 + 
						dieta_delegacje * ProcFchorobowyZleceniob/100)
						- KosztyUzyskania + SkladkaPPE + PPKskladkaPracod + DodUbezpMedyczneZlec)
					INTO @KwotaDoLimituPE
					FROM tt_prace_zlecone
					WHERE GUID = _CurrWorkerGUID 
					;
			
					IF @MaxDochodZwolnionyPodatekPE >= (@KwotaDoLimituPENarast+@KwotaDoLimituPE) THEN
						UPDATE tt_prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0,
						z.KosztyUzyskania = 0, z.ZaliczkaPrzedSklUbezp = 0
						WHERE GUID = _CurrWorkerGUID;
					ELSE --  tutaj wchodzimy gdy nastpilo przeekroczenie limitu ulgi albo na tym zapisie albo   wczesniej
						IF @MaxDochodZwolnionyPodatekPE > (@KwotaDoLimituPENarast) THEN --  nie było wczesniej przekroczenia limitu czyli przekroczenie jest na tym zapisie

							UPDATE tt_prace_zlecone z
							SET z.RazemSklZleceniobiorcyDoOdlicz =
									_Rnd2(((@KwotaDoLimituPENarast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatekPE)
										/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
							WHERE GUID = _CurrWorkerGUID
							;

							-- 80.000 + 10.000 - 85528=4472

							UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
								_Rnd2(((@KwotaDoLimituPENarast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatekPE
								- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
							WHERE GUID = _CurrWorkerGUID
							;

							UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr =
							((@KwotaDoLimituPENarast + @KwotaDoLimituPE)- @MaxDochodZwolnionyPodatekPE)
							- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
							WHERE GUID = _CurrWorkerGUID;


							UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
							WHERE GUID = _CurrWorkerGUID
							;

							SET @KwotaDoLimituPE = @KwotaDoLimituPE - (@KwotaDoLimituPENarast + @KwotaDoLimituPE -@MaxDochodZwolnionyPodatekPE);


						ELSE -- przekroczenie limitu nastapilo juz wczeniej
								-- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
							SET @KwotaDoLimituPE = 0;

							UPDATE tt_prace_zlecone z SET z.KosztyUzyskania =
								_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
							WHERE z.GUID = _CurrWorkerGUID
							;

							UPDATE tt_prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
							WHERE GUID = _CurrWorkerGUID
							;

							UPDATE tt_prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
							WHERE GUID = _CurrWorkerGUID
							;

						END IF;
					END IF;

					UPDATE tt_prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
						z.Dochod * z.ProcentPodatku / 100
					WHERE GUID = _CurrWorkerGUID
					;
				END IF; -- wejscie tylko dla PE


						UPDATE tt_prace_zlecone z
						SET z.KosztyUzyskaniaHipotetyczna = _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
						z.KwotaBrutto = z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz
                    WHERE GUID = _CurrWorkerGUID;

				SET _SQLText = 'UPDATE tt_prace_zlecone z
					SET
					z.DochodHipotetyczna = _Rnd(
					(z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy)
					- KosztyUzyskaniaHipotetyczna 
					+ SkladkaPPE
					+ PPKskladkaPracod,
						0),  
					z.ZalPrzedSklUbezpHipotetyczna = _Rnd(z.KwotaBrutto - z.wynagr_prokurent + z.SkladkaPPE + z.PPKskladkaPracod
                            + z.RazemSklZleceniobiorcyDoOdlicz
							- z.RazemSkladkiZleceniobiorcy - z.KosztyUzyskaniaHipotetyczna
							, 0) * (z.ProcentPodatkuHipot/100),
					z.Zaliczka = _Rnd(
						 			GREATEST(0, _Rnd2(z.Dochod * (z.ProcentPodatku/100)) - z.SklKasaChorychZleceniobOdlicz)
								, 0),
					
					z.ZaliczkaHipotetyczna  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) 
								- z.RazemSkladkiZleceniobiorcy 
								+ z.PPKskladkaPracod	
								- _Rnd((z.ZaZlecenie + kwota_za_UW - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatkuHipot/100) - z.SklKCZlecOdliczHipot), 0)
					WHERE	
						z.GUID = ''#_ZlecGUID#'' ; ';
					-- przeniesione wyzej do oddzielnego zapytania: z.InnePotr = (select sum(kwota) from place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Potr#)		
								
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _CurrWorkerGUID);			
				SET @_SQLTextUpdate = _SQLText;		
				CALL _ExecuteCmd(_SQLText, @Error);	

				-- sekcja skopiowana z przebiegu dla zwyklej umowy, bo jednak przy czesciowym przekroczeniu trzeba i kwote wolna uwzglednic
				IF @KwotaWolnaOdPodatkuZlecKartoteka > 0 AND (@SumaKwotaWolnaOdPodatkuZlec < @KwotaWolnaOdPodatkuZlecKartoteka) THEN

					SET @PozostaloKwotyWolnej = @KwotaWolnaOdPodatkuZlecKartoteka - @SumaKwotaWolnaOdPodatkuZlec;

					SELECT z.ZaliczkaPrzedSklUbezp INTO @zaliczkaZapis FROM tt_prace_zlecone z WHERE z.guid = _CurrWorkerGUID;

					SET @KwotaWolnaNaZapisie = LEAST(@zaliczkaZapis, @PozostaloKwotyWolnej);

					UPDATE tt_prace_zlecone z SET
						KwotaWolnaOdPodatkuZlec = @KwotaWolnaNaZapisie,
						z.zaliczka = _Rnd(z.Zaliczka - @KwotaWolnaNaZapisie,0),
						z.ZaliczkaPrzedSklUbezp = z.ZaliczkaPrzedSklUbezp - @KwotaWolnaNaZapisie
					WHERE z.GUID = _CurrWorkerGUID;

				END IF;

				-- obliczamy czy stosować rozporzadzenie o przesunieciu poboru zaliczki, czyli obliczania ZaliczkiOdroczonej
					-- ale nic wiecej nie robimy bo 26lat DR PE są zwolnieni z podatku a wiece podatek jest =0
					-- i nie mozna go juz bardziej zmniejszyc, ustawiamy tylko pole ZaliczkaOdroczona na 0
				SET @CzyStosowacRozporzadzKwota =
						(SELECT ZaZlecenie + wynagr_prokurent + kwota_za_UW + DodUbezpMedyczneZlec
							FROM tt_prace_zlecone WHERE GUID = _CurrWorkerGUID)
						+ @SumaZaZlecenieMsc + @SumaWynagr_prokurentMsc + @SumaKwota_za_UWMsc;
				
				SET @test10 = 'jakis tekst';
				
				UPDATE tt_prace_zlecone z
					SET z.KwotaNetto =
						if (z.RazemSkladkiZleceniobiorcy <> z.RazemSklZleceniobiorcyDoOdlicz,
							if (z.RazemSklZleceniobiorcyDoOdlicz = 0,
									z.KwotaBrutto - DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy - z.SklKasaChorychZleceniobPobr,

									z.ZaZlecenie + z.wynagr_prokurent + z.kwota_za_UW
									+ z.ZasChorRazem + z.ZasMacierz
									+ z.ZasRehab + z.ZasOpiekun - z.RazemSkladkiZleceniobiorcy - z.SklKasaChorychZleceniobPobr -
									z.zaliczka),

						z.KwotaBrutto - DodUbezpMedyczneZlec - z.SklKasaChorychZleceniobPobr - z.zaliczka),
						z.KwotaDoLimitu26 = @KwotaDoLimitu26,
						z.KwotaDoLimitu26Narast = @KwotaDoLimitu26Narast,
						z.KwotaDoLimituDR = @KwotaDoLimituDR,
						z.KwotaDoLimituDRNarast = @KwotaDoLimituDRNarast,
						z.KwotaDoLimituPE = @KwotaDoLimituPE,
						z.KwotaDoLimituPENarast = @KwotaDoLimituPENarast,
						z.ZaliczkaOdroczona = 0
				WHERE z.GUID = _CurrWorkerGUID
				;
				
				UPDATE tt_prace_zlecone z
					SET z.DoWyplaty = _Rnd(z.KwotaNetto - PotrDodUbezpMedyczneZlec - z.InnePotr + z.InneDod + z.InneZasilkZUS, 2) - z.PPKskladkaPracow
				WHERE z.GUID = _CurrWorkerGUID
				;
				
--				UPDATE tt_prace_zlecone z SET
--					z.SklKasaChorychZleceniobOdlicz = if(z.ZalPrzedSklUbezpHipotetyczna < z.SklKasaChorychZleceniobOdlicz,
--						z.ZalPrzedSklUbezpHipotetyczna, z.SklKasaChorychZleceniobOdlicz),
--					z.SklKasaChorychZleceniobPobr = if(z.ZalPrzedSklUbezpHipotetyczna < z.SklKasaChorychZleceniobPobr,
--						z.ZalPrzedSklUbezpHipotetyczna, z.SklKasaChorychZleceniobPobr)
--				WHERE GUID = _CurrWorkerGUID
--				;			  
			
			ELSE -- TODO: PPKskladkaPracod koniec sekcji 26, DR, PE

				UPDATE  tt_prace_zlecone z SET
					z.RazemSklZleceniobiorcyDoOdlicz = z.RazemSkladkiZleceniobiorcy
				WHERE z.GUID = _CurrWorkerGUID
				;

			UPDATE tt_prace_zlecone z
					SET z.KosztyUzyskaniaHipotetyczna = _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
					z.KwotaBrutto = z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz
				WHERE z.GUID = _CurrWorkerGUID
				;

			UPDATE  tt_prace_zlecone z SET
					z.KosztyUzyskania = z.KosztyUzyskaniaHipotetyczna
			WHERE z.GUID = _CurrWorkerGUID
			;


				UPDATE tt_prace_zlecone z SET
					z.DochodHipotetyczna = _Rnd(
					(z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy)
					- KosztyUzyskaniaHipotetyczna 
					+ SkladkaPPE
					+ PPKskladkaPracod,
						0),  
					z.ZalPrzedSklUbezpHipotetyczna = _Rnd(z.KwotaBrutto - z.wynagr_prokurent + z.SkladkaPPE + z.PPKskladkaPracod
                            + z.RazemSklZleceniobiorcyDoOdlicz
							- z.RazemSkladkiZleceniobiorcy - z.KosztyUzyskaniaHipotetyczna
							, 0) * (z.ProcentPodatkuHipot/100),

					z.zPodstPPDprzedZaokr = z.KwotaBrutto - z.KosztyUzyskania  + z.PPKskladkaPracod,
					z.Dochod = _Rnd(z.KwotaBrutto - z.KosztyUzyskania  + z.PPKskladkaPracod, 0),
					z.ZaliczkaPrzedSklUbezp = _Rnd((z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) 
												- z.RazemSkladkiZleceniobiorcy 
												+ z.PPKskladkaPracod
												- _Rnd((z.ZaZlecenie + kwota_za_UW - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100),
					z.Zaliczka  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) 
								- z.RazemSkladkiZleceniobiorcy 
								+ z.PPKskladkaPracod	
								- _Rnd((z.ZaZlecenie + kwota_za_UW - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0),

					z.ZaliczkaHipotetyczna  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) 
								- z.RazemSkladkiZleceniobiorcy 
								+ z.PPKskladkaPracod	
								- _Rnd((z.ZaZlecenie + kwota_za_UW - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatkuHipot/100) - z.SklKCZlecOdliczHipot), 0)
				WHERE z.GUID = _CurrWorkerGUID
				;
				
				IF @KwotaWolnaOdPodatkuZlecKartoteka > 0 AND (@SumaKwotaWolnaOdPodatkuZlec < @KwotaWolnaOdPodatkuZlecKartoteka) THEN

					SET @PozostaloKwotyWolnej = @KwotaWolnaOdPodatkuZlecKartoteka - @SumaKwotaWolnaOdPodatkuZlec;

					SELECT z.ZaliczkaPrzedSklUbezp INTO @zaliczkaZapis FROM tt_prace_zlecone z WHERE z.guid = _CurrWorkerGUID;

					SET @KwotaWolnaNaZapisie = LEAST(@zaliczkaZapis, @PozostaloKwotyWolnej);

					UPDATE tt_prace_zlecone z SET
						KwotaWolnaOdPodatkuZlec = @KwotaWolnaNaZapisie,
						z.zaliczka = _Rnd(z.Zaliczka - @KwotaWolnaNaZapisie,0),
						z.ZaliczkaPrzedSklUbezp = z.ZaliczkaPrzedSklUbezp - @KwotaWolnaNaZapisie
					WHERE z.GUID = _CurrWorkerGUID;

				END IF;

				UPDATE tt_prace_zlecone z SET
					z.KwotaNetto = (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
								- z.RazemSkladkiZleceniobiorcy 
								- z.SklKasaChorychZleceniobPobr 
								- z.Zaliczka
				WHERE z.GUID = _CurrWorkerGUID
				;
				
				SET @CzyStosowacRozporzadzKwota =
					(SELECT ZaZlecenie + wynagr_prokurent + kwota_za_UW
						FROM tt_prace_zlecone WHERE GUID = _CurrWorkerGUID)
					+ @SumaZaZlecenieMsc + @SumaWynagr_prokurentMsc + @SumaKwota_za_UWMsc;
				
				SET @test20 = 'wejscie za else';
				
				SET @ZaliczkaOdroczona = 0;
				SET @aDoPrzerzucenia = 0;
				SET @aZaliczkaHipotetyczna = 0;
				SET @aKwotaNettoWstepnaTmp = 0;
				
				SELECT ZaliczkaHipotetyczna, Zaliczka
                INTO @ZaliczkaHipotetycznaZapis, @Zaliczka
				FROM tt_prace_zlecone 
				WHERE GUID = _CurrWorkerGUID;
				
				SET @a01 = @aKwotaNettoWstepnaTmp;
				SET @a02 = @Zaliczka;
				SET @a10 = @RezygnPrzesunZal;
				
				-- SET @a03 = @aKwotaNettoWstepnaTmp;
				

				if _Param_E > '2021-12-31' and @UwzglednijPrzesuniecieZal and @RezygnPrzesunZal = 0 then
				
					if @CzyStosowacRozporzadzKwota <= @MaxRezygnPrzesunZalKwota then
						SET @test30= 'CzyStosowacRozporzadzKwota';
						
						IF (@ZwolnienieOdPodatku26Lat = 1) then
							SET @aZaliczkaHipotetyczna = 0;
						ELSE
							SET @aZaliczkaHipotetyczna = @ZaliczkaHipotetycznaZapis;
						END IF;
						
						if (@aZaliczkaHipotetyczna < @Zaliczka) then
							SET @ZaliczkaOdroczona = @Zaliczka - @aZaliczkaHipotetyczna;
							SET @Zaliczka = @aZaliczkaHipotetyczna;
						ELSEIF @aZaliczkaHipotetyczna > @Zaliczka then
							SET @aDoPrzerzucenia = LEAST(@aZaliczkaHipotetyczna - @Zaliczka, @SUMZaliczkaOdroczona);
							SET @Zaliczka = @Zaliczka + @aDoPrzerzucenia;
							SET @ZaliczkaOdroczona = -@aDoPrzerzucenia;
						END IF;
					else
					-- przekroczył kwotę w miesiącu i muszę skorygować czyli cofnąc odroczenie zalczki czyli zwiększyć zaliczkę na tym zapisie
						if @SUMZaliczkaOdroczona <> 0 then
							SET @ZaliczkaOdroczona = -@SUMZaliczkaOdroczona;
							SET @aPierwotnaZaliczkaTmp = @Zaliczka;
							SET @Zaliczka = @Zaliczka + @SUMZaliczkaOdroczona;
										--  20         20   + 500
							if @Zaliczka > (@aKwotaNettoWstepnaTmp + @aPierwotnaZaliczkaTmp) then
										--  520             100                      20   
								SET @aMogePrzerzucic = FLOOR(@aKwotaNettoWstepnaTmp);
								SET @Zaliczka = @aPierwotnaZaliczkaTmp + @aMogePrzerzucic;
								SET @ZaliczkaOdroczona = -@aMogePrzerzucic;
							end IF;
						end IF;
					end IF;
				end if;
				
				UPDATE tt_prace_zlecone z SET
					z.Zaliczka = @Zaliczka,
					z.ZaliczkaOdroczona = @ZaliczkaOdroczona
				WHERE	z.GUID = _CurrWorkerGUID
				; 
				
				SELECT (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
								- z.RazemSkladkiZleceniobiorcy
								- z.SklKasaChorychZleceniobPobr
								- z.Zaliczka
				INTO @aKwotaNettoWstepnaTmp
				FROM tt_prace_zlecone z
				WHERE z.GUID = _CurrWorkerGUID
				;
				
				set @d01 = @aKwotaNettoWstepnaTmp;
				
				if (@Zaliczka > @aKwotaNettoWstepnaTmp) and (@ZaliczkaOdroczona<0) then
					SET @aNadwyzkaZaliczki = @Zaliczka - floor(@aKwotaNettoWstepnaTmp);
					SET @Zaliczka = floor(@aKwotaNettoWstepnaTmp);
					SET @aKwotaNettoWstepnaTmp = 0;
					SET @ZaliczkaOdroczona = @ZaliczkaOdroczona + @aNadwyzkaZaliczki;
				-- else
					-- SET @aKwotaNettoWstepnaTmp = @aKwotaNettoWstepnaTmp - @Zaliczka;
				END IF;
				
				UPDATE tt_prace_zlecone z SET
					z.KwotaNetto = IF(@aKwotaNettoWstepnaTmp > 0, @aKwotaNettoWstepnaTmp, 0),
					z.Zaliczka = @Zaliczka,
					z.ZaliczkaOdroczona = @ZaliczkaOdroczona,
					z.DoWyplaty  = @aKwotaNettoWstepnaTmp
						- z.InnePotr + z.InneDod +z.InneZasilkZUS - z.PPKskladkaPracow
				WHERE	z.GUID = _CurrWorkerGUID
				; 
			END IF;
				
		set @jmam='przeliczenie kwot na zleceniu';
			
			-- sposob wyplaty
			SET _SQLText = '
				update  tt_prace_zlecone z, Pracownicy k
				set
					z.wyplataprzelewem = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), z.dowyplaty, 0),
					z.wyplatagotowka   = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), 0, z.dowyplaty)					
				where z.guid = ''#_ZlecGUID#'' and z.guid_pracownika = k.GUID;
				';
				
			SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', _CurrWorkerGUID);			
			SET @_SQLText_wypl = _SQLText;		
			CALL _ExecuteCmd(_SQLText, @Error);	
				
			-- sprawdzamy, czy jest juz zamkniete zlecenie o takim GUIDzie
			SET _I = 0;
			select COUNT(*) into _I from prace_zlecone where guid = _CurrWorkerGUID and ZamknietyZapis = 1;
			IF (_I = 0) THEN  -- jesli nie ma zaknietego zlecenia, to wstawiamy/nadpisujemy
				REPLACE INTO 
					prace_zlecone 
				SELECT *				   
				FROM tt_prace_zlecone 
				WHERE  GUID = _CurrWorkerGUID;					
				
				REPLACE INTO 
					place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				SELECT 
					GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika
				FROM 
					tt_zlec_skladniki 
				WHERE  GUID_zapisu_placowego = _CurrWorkerGUID;					
				
				CALL sys_log_insert(5087, 2,_CurrWorkerGUID,'Stworzenie zapisu prace zlecone za miesiac z automatu.');
				
			END IF;								 
			-- koniec    naliczania automatycznego ( czyli z calla)			
		ELSE	 -- (gdy kwota ZaZlecenie = 0)  :
			set @jmam='ZaZlecenie=0';
			select 0 AS ZaZlecenie, _varDateTime(@_DataOd) AS DataOd, _varDateTime(@_Datado) AS DataDo, _godz100, _godz150, _godz200;
		END IF;  -- IF @pl.gratyf.za_zlecenie > 0	
	
	END IF;  -- IF _MODE = 'calc.one.order.mode.spoa' THEN
	
/*------------------------------------------------------------------------------------------------------------------------------------
	'pl.nalicz.z.kart.obiektow.2019'
		Tworzenie zapis?w prac zleconych dla zanaczonych kart obiekt?w
		Parametry
		_Mode
		_Param_A	wszystkie parametry do _FechParams  ustawiamy tutaj - nie bawimy si? w podawanie pojedynczych parametrow &nazwa=wartosc&
		_Param_B	
		_Param_C	
		_Param_D			
		_Param_E	
		_Param_F    

sprawdzenie przeliczen - najpierw identyfikowac karty obiektow i dla nich utworzyc tabelę tb_...
status karty obiektu w tabeli pl_karty_obiektu_ng ustawić na 1 !!!

SELECT CONCAT('KO-',MD5(CONCAT('b023078e-8473-11ef-a642-b8ac6f88778e*', '{9C993197-2944-41F9-B67C-807751D63790}', 11, 2024)))
SELECT CONCAT('KO-',MD5(CONCAT('0c3782d7-8472-11ef-a642-b8ac6f88778e*', '{46669EC3-2270-4C98-80AD-84C658A3F613}', 11, 2024)));
CONCAT('KO-',MD5(CONCAT(_Param_D, _Param_C, _Param_B, _Param_A)));

SELECT n.status, n.*
FROM pl_karty_obiektu_ng n
INNER JOIN pl_karty_obiektu_po p ON n.guid = p.guidng
WHERE n.rok=2024 AND n.miesiac=11 AND p.pracguid = '{ADF25818-AEB9-4087-B6FF-64DA1924C72F}';

CREATE TEMPORARY TABLE `tb_karty_obiektow` (lp INT(11) NOT NULL AUTO_INCREMENT,GUID VARCHAR(38) ,  PRIMARY KEY (`lp`),  UNIQUE GUID (GUID)  );
INSERT IGNORE INTO `tb_karty_obiektow` (GUID)  VALUES  ('b9577f6a-a32a-11ef-ae2b-b8ac6f88778e*') ;

update pl_karty_obiektu_ng n, tb_karty_obiektow t set n.status = 1 where n.guid = t.guid and n.status = 2;


teraz mozna robic wywolanie, ale uwaga, przeliczony zostanie cały obiekt, czyli wszystkie zlecenia osob z obiektu - chyba ze wykorzystamy wywołanie z sekcji dla jeden mode, niżej, ale trzeba przygotować wtedy tabele ręcznie
;

CALL pl_gratyfikacje_tools_arg7('pl.nalicz.z.kart.obiektow.2019', '2024-12-07', '', '', '', '', '');

select -- @test4868, @test5369, @test5376, @test5377,
-- @test5477, @test5482, @test5483, @test5484, @test5485, @test5486,
@test5476, @test5477, @test5478, @test4900, @test5486;
-------------------------------------------------------------------------------------------------------------------------------------*/
	
	IF _MODE = 'pl.nalicz.z.kart.obiektow.2019' THEN  

			SET _Datawyplaty = IFNULL(LEFT(_Param_A,10), CURRENT_DATE);	
			DROP TEMPORARY TABLE IF EXISTS `te_pl_wynagr_z_obiektow`;
			CREATE TEMPORARY TABLE `te_pl_wynagr_z_obiektow`
				SELECT
				    MIN(c.miesiac) AS miesiac,   MIN(c.rok) AS rok,
					o.GUID, k.ZeSG, k.PlacaZasadnicza, k.RozliczajWg, 
					(SELECT IFNULL(SUM(z.ZaZlecenie), 0) FROM prace_zlecone z WHERE z.miesiac = c.miesiac AND z.rok = c.rok AND z.GUID_pracownika = o.GUID) AS zeZlecen,
					SUM(p.czas_P) AS godziny_etat, -- A
					SUM(p.czas_Z) AS godziny_zlec, -- B
					SUM(p.czas_Z2) AS godziny_zlec2, -- B2
					MAX(p.stawka_P) AS stawka_etat, -- C
					MAX(p.stawka_Z) AS stawka_zlec, -- D
					MAX(p.stawka_Z2) AS stawka_zlec2, -- D2
					SUM(p.Absencja_CLZ) AS godziny_chorob, -- E
					SUM(p.Absencja_WOD) AS godziny_wypocz, -- F
					SUM(p.Extra_Wynagr) AS extra_wynagr,  -- G
					MAX(p.NettoBrutto) AS netto_brutto,
					p.guid AS guidKop,
					p.GUIDNg AS guidKO,
					MAX(c.Usluga) as usluga
				FROM `pl_karty_obiektu_ng` c
				JOIN  `pl_karty_obiektu_po` p ON c.guid = p.guidng
				JOIN osoby o ON o.GUID = p.PracGUID
				JOIN Pracownicy k ON k.GUID = p.PracGUID
				WHERE 
					c.status = 1 AND 
					c.guid IN (SELECT GUID FROM tb_karty_obiektow) 
				GROUP BY 
					p.PracGUID, guidKop
				ORDER BY 
					o.nazwisko, o.imiona;
			ALTER TABLE `te_pl_wynagr_z_obiektow` ADD PRIMARY KEY GUID (GUID, guidKop);			
			
			
		--	CALL _IReg_Get('Place2003', 'Gratyfikacje_AvgMscNCP', @rok, 'INTEGER', @AvgMscNCP, 168);
		--	CALL _IReg_Get('Place2003', 'Zlecenie_Podstawowe_Kwota', @rok, 'INTEGER', @Kwota_201, 201);			
		BEGIN		
			DECLARE _done BOOL DEFAULT FALSE;
			DECLARE _c_procObiekty CURSOR FOR
				SELECT 
					GUID, ZeSG, RozliczajWg, rok, miesiac, guidKO
				FROM `te_pl_wynagr_z_obiektow`;
				
		    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;
			OPEN _c_procObiekty;
				loopO: LOOP
					FETCH _c_procObiekty INTO
						_OsobaGUID, _Tryb, _RozliczajWg, _Rok, _Miesiac, _GuidKO;
					IF _done THEN
						LEAVE loopO;
					ELSE
						CALL pl_gratyfikacje_tools_arg7('pl.nalicz.z.kart.obiektow.one.zlec', _Rok, _Miesiac, _OsobaGUID, _GuidKO, _RozliczajWg, _DataWyplaty);						  	
					END IF;
				END LOOP;
			CLOSE _c_procObiekty;		
			-- zamknij wysztkie karty z tb_karty_obiektow !!!
			
			update pl_karty_obiektu_ng n, tb_karty_obiektow t set n.status = 2 where n.guid = t.guid and n.status = 1;
			select 'OK' as msg;
		END;			
	
	END IF;	--	IF _MODE = 'pl.nalicz.z.kart.obiektow.2019'
	
/*------------------------------------------------------------------------------------	
		ta sekcja nie dziala bez tabeli tb_karty_obiektow, i wywolania /naliczenia tabeli te_pl_wynagr_z_obiektow a to jest wyzej!!!

	'pl.nalicz.z.kart.obiektow.one.zlec'
		Naliczanie z kart obiekt?w (Security) jednego zlecenia
		Parametry
		_Param_A	Rok
		_Param_B	Miesiac
		_Param_C	GUID pracownika
		_Param_D	GUIDKartyObiektu
		_Param_E	rozliczenie wg: 
					0) Sec?etat+MS?zlec 
						1) Sec?zlec?201?+MS?zlec 
						2) MS?zlec?201?+Sec?zlec
					3) MS?etat+Sec?zlec
						4) Sec?zlec
						5) MS?zlec
		_Param_F	DataWyplaty
SELECT * FROM pl_karty_obiektu_ng WHERE guid = 'b71869a0-7aaf-11ec-9ade-b8ac6f88778e*';

DROP TABLE tb_karty_obiektow;
CREATE TEMPORARY TABLE `tb_karty_obiektow` (GUID VARCHAR(38));
INSERT IGNORE INTO `tb_karty_obiektow` (GUID)  VALUES  ('b71869a0-7aaf-11ec-9ade-b8ac6f88778e*') ;

CALL pl_gratyfikacje_tools_arg7('pl.nalicz.z.kart.obiektow.one.zlec', '2024', '10', '{46669EC3-2270-4C98-80AD-84C658A3F613}', '0c3782d7-8472-11ef-a642-b8ac6f88778e*', '0', '2024-11-07');
-------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl.nalicz.z.kart.obiektow.one.zlec' THEN
		  SET _ZaZlecenie = 0;
			SET _ZaZlecenie2 = 0;
			SET _Godziny = 0;
			SET _Godziny2 = 0;
			SET _extra_wynagr = 0;
			SET _Usluga = 0;
			SET _netto_brutto = 0;
			
			SELECT 
				SUM(godziny_zlec * stawka_zlec),  
				SUM(godziny_zlec2 * stawka_zlec2),
				SUM(godziny_zlec),
				SUM(godziny_zlec2),		
				SUM(extra_wynagr),
				MAX(usluga),
				MAX(netto_brutto)
				INTO _ZaZlecenie, _ZaZlecenie2, _Godziny, _Godziny2, _extra_wynagr, _Usluga, _netto_brutto
 			FROM `te_pl_wynagr_z_obiektow`
			-- roliczmay jedna karte obietku dla jednego pracownika
			WHERE GUID = _Param_C and guidKO = _Param_D
			;
			-- set @szambo = concat('_ZaZlecenie: ', _ZaZlecenie, ' _ZaZlecenie2: ', _ZaZlecenie2);	
						
			SET @_extra_wynagr = _extra_wynagr;					
				
			SET @_ProporcjaNB = 0;
			SET @_ZaZlecenieLast = 0; -- je?li to by?a ostatnia p?tla to chc? dok?adnie t? warto?? a nie powi?kszon?
			
			-- set @szambo = concat('zazlecenie: ', _ZaZlecenie);
			-- IF @pl.gratyf.za_zlecenie > 0 THEN
			SET @_ZlecGUID =  concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A)));			
			
			
			SET @_DataWypl = _varDATE(_Param_F); -- ppk
			SET @DataOd = ifnull(concat(YEAR(_Param_F),'-',LPAD(MONTH(_Param_F),2,0),'-01'), current_date);			
			SET @DataDo = ifnull(last_day(concat(YEAR(_Param_F),'-',LPAD(MONTH(_Param_F),2,0),'-01')), current_date);
			 
 			SET @DataOdZlec = ifnull(concat(_Param_A,'-',_Param_B,'-01'), current_date);			
			SET @DataDoZlec = ifnull(last_day(concat(_Param_A,'-',_Param_B,'-01')), current_date);

			 
-- DO BAZY MS			

			IF (_Param_E in ('0','2','5') && _ZaZlecenie >0) || (_Param_E in ('1') &&_ZaZlecenie2 >0) || (_Param_E in ('0','5') && _Usluga = 1 && _extra_wynagr >0) THEN -- UWAGA WSZYSTKIE ZMIANY WPROWADZAC SYMETRYCZNIE DLA OBU IF-OW 
				-- wstawienie do place_zlec i do place_skladniki
				IF (_Usluga = 0) THEN
				
				-- UWAGA tu zeruj? _extra_wynagr - tylko na jednym zleceniu !
					IF (_Param_E in ('2')) THEN				
						SET @_extra_wynagr = 0;
					END IF;
				
					SET @_ZaZlecenie = _ZaZlecenie;
					SET @_Godziny = _Godziny;
					IF (_Param_E in ('1') && _ZaZlecenie2 >0) THEN
						SET @_ZaZlecenie = _ZaZlecenie2;	
						SET @_Godziny = _Godziny2;
					END IF;
					IF (_netto_brutto = 1 && @_extra_wynagr != 0 && @_ZaZlecenie != 0) THEN								
						SET @_ProporcjaNB = @_ZaZlecenie/(@_ZaZlecenie + @_extra_wynagr);
						SET @_ZaZlecenie = @_ZaZlecenie + @_extra_wynagr;
						SET @_extra_wynagr = 0;
					END IF;					
				ELSE
					SET @_ZaZlecenie = _extra_wynagr;
					SET @_Godziny = 0;
					SET @_extra_wynagr = 0;				
				END IF;
				
				SET @_ZaZlecenie = _Rnd(@_ZaZlecenie, 2);

				SET @ZwolnienieOdPodatku26Lat = 0;
				SET @ZwolnienieOdPodatkuDR = 0;
				SET @ZwolnienieOdPodatkuPE = 0;
				SET @RezygnPrzesunZal = 0;
				SET @SUMZaliczkaOdroczona = 0;
				SET @SumaZaZlecenie = 0;
				SET @SumaWynagr_prokurent = 0;
				SET @SumaKwota_za_UW = 0;
				SET @SumZaliczkaOdroczonaMsc = 0;
				SET @SumaZaZlecenieMsc = 0;
				SET @SumaWynagr_prokurentMsc = 0;
				SET @SumaKwota_za_UWMsc = 0;
				SET @aPodstPodtk = 0;
    SET @aPodstPodtkHipotetyczna = 0;
				SET @KwotaWolnaOdPodatkuZlec = 0;
				SET @KwotaWolnaOdPodatkuZlecKartoteka = 0;
				SET @SumaKwotaWolnaOdPodatkuZlec = 0;

				SET @DodUbezpMedyczneZlecKartoteka = 0;
				SET @PotrDodUbezpMedyczneZlecKartoteka = 0;
				SET @SumaDodUbezpMedyczneZlec = 0;
				SET @SumaPotrDodUbezpMedyczneZlec = 0;

	
				SET @UwzglednijPrzesuniecieZal =
				(SELECT ValueB FROM ms.IReg WHERE idkey = 'UwzglednijPrzesuniecieZal' AND rok = YEAR(_Param_F));
				SET @MaxRezygnPrzesunZalKwota = 
				(SELECT ValueN FROM ms.IReg WHERE idkey = 'MaxRezygnPrzesunZalKwota' AND rok = YEAR(_Param_F));
				
				
				SELECT IF(YEAR(_Param_F)>2019, ZwolnOdPodatku26LatPo2019, ZwolnienieOdPodatku26Lat),
				NaliczUlgeDlaDR, NaliczUlgeDlaPE, RezygnPrzesunZalZlec, KwotaWolnaOdPodatkuZlec,
				DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec
				INTO @ZwolnienieOdPodatku26Lat, @ZwolnienieOdPodatkuDR, @ZwolnienieOdPodatkuPE, @RezygnPrzesunZal, @KwotaWolnaOdPodatkuZlecKartoteka, @DodUbezpMedyczneZlecKartoteka, @PotrDodUbezpMedyczneZlecKartoteka
				FROM ms.Pracownicy
				WHERE  GUID = _Param_C
				;

    IF @ZwolnienieOdPodatku26Lat = 1 THEN
     IF _Param_F > (select adddate(dataurodzenia, interval 26 year) from osoby where GUID = _Param_C) THEN
      SET @ZwolnienieOdPodatku26Lat = 0;
     END IF;
    END IF;

				-- cdsKwotyZlecZPoprzednichMSC - nowe dane - od początku roku do msc wypłaty
				SELECT
					IFNULL(SUM(pl.ZaliczkaOdroczona),0) as SumZaliczkaOdroczona, 
					IFNULL(SUM(pl.ZaZlecenie),0) as SumaZaZlecenie, 
					IFNULL(SUM(pl.wynagr_prokurent),0) as SumaWynagr_prokurent,
					IFNULL(SUM(pl.kwota_za_UW),0) as SumaKwota_za_UW
				INTO @SUMZaliczkaOdroczona, @SumaZaZlecenie, @SumaWynagr_prokurent, @SumaKwota_za_UW
				FROM ms.prace_zlecone pl
				WHERE pl.GUID_pracownika = _Param_C 
				AND YEAR(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = YEAR(_Param_F) 
				AND MONTH(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) <= MONTH(_Param_F)
				AND pl.GUID <> @_ZlecGUID
				and pl.deleted = 0
				;	
				-- nowe dane dla msc wypłaty
				SELECT
					IFNULL(SUM(pl.ZaliczkaOdroczona),0) as SumZaliczkaOdroczonaMsc, 
					IFNULL(SUM(pl.ZaZlecenie),0) as SumaZaZlecenieMsc, 
					IFNULL(SUM(pl.wynagr_prokurent),0) as SumaWynagr_prokurentMsc,
					IFNULL(SUM(pl.kwota_za_UW),0) as SumaKwota_za_UWMsc,
					IFNULL(SUM(pl.KwotaWolnaOdPodatkuZlec),0) as SumaKwotaWolnaOdPodatkuZlec
				INTO @SumZaliczkaOdroczonaMsc, @SumaZaZlecenieMsc, @SumaWynagr_prokurentMsc, @SumaKwota_za_UWMsc, @SumaKwotaWolnaOdPodatkuZlec
				FROM ms.prace_zlecone pl
				WHERE pl.GUID_pracownika = _Param_C 
				AND YEAR(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = YEAR(_Param_F) 
				AND MONTH(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = MONTH(_Param_F)
				AND pl.GUID <> @_ZlecGUID
				and pl.deleted = 0
				;	
				
					-- nowe dane dla msc zlecenia!!!
				SELECT
					IFNULL(SUM(pl.DodUbezpMedyczneZlec),0),
					IFNULL(SUM(pl.PotrDodUbezpMedyczneZlec),0)
				INTO @SumaDodUbezpMedyczneZlec, @SumaPotrDodUbezpMedyczneZlec
				FROM ms.prace_zlecone pl
				WHERE pl.GUID_pracownika = _Param_C
				-- AND pl.rok = YEAR(_Param_F)
				-- AND pl.miesiac = MONTH(_Param_F)
				AND pl.rok = _varINT(_Param_A)
    AND pl.miesiac = _varINT(_Param_B)
				AND pl.GUID <> @_ZlecGUID
				and pl.deleted = 0
				;


	-- 26Lat begin	
				SET @MaxDochodZwolnionyPodatek26lat = 0;
				-- CALL _IReg_Get('Place2003\ZwPodatkowe', 'MaxDochodZwolnionyPodatek26lat', @rok, 'DOUBLE', @MaxDochodZwolnionyPodatek26lat, 35636.67);
				SELECT ValueN
				INTO @MaxDochodZwolnionyPodatek26lat
				FROM ms.IReg
				WHERE idkey = 'MaxDochodZwolnionyPodatek26lat' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\ZwPodatkowe' AND rok = YEAR(@_DataWypl)
				;
				
				SET @KwotaDoLimitu26Narast = 0; -- zmiana _Param_E na _Param_F by TK, wszedzie gdzie jest YEAR(_Param_F) 28.12.2021!!!
				SELECT SUM(KwotaDoLimitu26Narast) INTO @KwotaDoLimitu26Narast
				FROM (
					( SELECT IFNULL(SUM(KwotaDoLimitu26),0) AS KwotaDoLimitu26Narast 
						FROM ms.prace_zlecone WHERE GUID_Pracownika = _Param_C AND  YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					) UNION 
					( SELECT IFNULL(SUM(KwotaDoLimitu26),0) AS KwotaDoLimitu26Narast 
						FROM ms.place WHERE GUID_pracownika = _Param_C AND YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					)
				) newTable;
	-- 26Lat end
				
	-- DR begin	
				SET @MaxDochodZwolnionyPodatekDR = 0;
				SELECT ValueN INTO @MaxDochodZwolnionyPodatekDR FROM ms.IReg
				WHERE idkey = 'MaxDochodZwolnionyPodatekDR' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\ZwPodatkowe' AND rok = YEAR(@_DataWypl)
				;
				
				SET @KwotaDoLimituDRNarast = 0;
				SELECT SUM(KwotaDoLimituDRNarast) INTO @KwotaDoLimituDRNarast
				FROM (
					( SELECT IFNULL(SUM(KwotaDoLimituDR),0) AS KwotaDoLimituDRNarast 
						FROM ms.prace_zlecone WHERE GUID_Pracownika = _Param_C AND  YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					) UNION 
					( SELECT IFNULL(SUM(KwotaDoLimituDR),0) AS KwotaDoLimituDRNarast 
						FROM ms.place WHERE GUID_pracownika = _Param_C AND YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					)
				) newTable;
	-- DR end				
				
	-- PE begin	
				SET @MaxDochodZwolnionyPodatekPE = 0;
				SELECT ValueN INTO @MaxDochodZwolnionyPodatekPE FROM ms.IReg
				WHERE idkey = 'MaxDochodZwolnionyPodatekPE' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\ZwPodatkowe' AND rok = YEAR(@_DataWypl)
				;
				
				SET @KwotaDoLimituPENarast = 0;
				SELECT SUM(KwotaDoLimituPENarast) INTO @KwotaDoLimituPENarast
				FROM (
					( SELECT IFNULL(SUM(KwotaDoLimituPE),0) AS KwotaDoLimituPENarast 
						FROM ms.prace_zlecone WHERE GUID_Pracownika = _Param_C AND  YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					) UNION 
					( SELECT IFNULL(SUM(KwotaDoLimituPE),0) AS KwotaDoLimituPENarast 
						FROM ms.place WHERE GUID_pracownika = _Param_C AND YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					)
				) newTable;
	-- PE end
				
				SET @MZ_Idn = NULL, @miejsceZlecenia = ' n/n';				
				SELECT IFNULL(CONCAT(IFNULL(k.Symbol, ''), ' - ' , IFNULL(an.Nazwa,'')), ' n/n') AS miejsceZlecenia
				INTO @miejsceZlecenia
				FROM sec.erp_area_nodes an, sec.kontrah k, sec.pl_karty_obiektu_ng p 
				WHERE k.GUID = an.KontrGUID AND an.KontrGUID = p.KontrGUID AND an.GUID = p.AreaGUID AND p.GUID = _Param_D
				; -- UWAGA tu jest dobrze spr na innej bazie bo tam s? jedynie dane!
				
				SELECT idn INTO @MZ_Idn FROM ms.prace_zlec_miejsca WHERE nazwa = @miejsceZlecenia
				;

				IF (IFNULL(@MZ_Idn, 0) = 0) THEN
				INSERT INTO ms.prace_zlec_miejsca (symbol, nazwa) VALUES (@miejsceZlecenia, @miejsceZlecenia);
					-- SELECT LAST_INSERT_ID()  
					SELECT idn INTO @MZ_Idn from ms.prace_zlec_miejsca where nazwa = @miejsceZlecenia;
				END IF;
				
				SET @MZ_Idn = IFNULL(@MZ_Idn, 0), _SklPZU=0, _SklHestia=0;

				SELECT SkladkaPZU AS SklPZU, SkladkaUbezp2 AS SklHestia
				INTO _SklPZU, _SklHestia
				FROM ms.Pracownicy WHERE guid = _Param_C
					AND (SELECT COUNT(*) FROM ms.prace_zlecone WHERE deleted= 0 AND Rok = _Param_A AND miesiac = _Param_B AND GUID_pracownika = _Param_C)<1 
				;

				-- UWAGA tu zeruj? _extra_wynagr - tylko na jednym zleceniu !
				-- przeniesione do gory
				-- IF (_Usluga = 0) && (_Param_E in ('2','3','4')) THEN				
				--	SET @_extra_wynagr = 0;
				-- END IF;
				
				
				REPLACE INTO ms.prace_zlecone 
				(GUID, GUID_pracownika,  miesiac, rok, DataOd, DataDo, DataWyplaty, NrZlecenia, ZaZlecenie, RodzajRyczaltu, MZ_Idn,
				  KosztyUzyskaniaWproc, ProcFemerytalnyZleceniob, ProcFrentowyZleceniob, ProcFchorobowyZleceniob,
				  ProcFwypadkowyZleceniob, ProcKasaChorychZleceniobPobr, ProcKasaChorychZleceniobOdlicz,
				  ProcFemerytalnyZleceniod, ProcFrentowyZleceniod, ProcFchorobowyZleceniod, ProcFwypadkowyZleceniod,
				  ProcKasaChorychZleceniod, ProcFPracy, ProcFGSP, ProcKasaChorOdliczHipot, rach_do_umowy, ZlecERP, godziny, kwota_za_UW, ZwolnienieOdPodatku26Lat, NaliczUlgeDlaDR, NaliczUlgeDlaPE, RezygnPrzesunZal,
				  DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec
				)   -- nazwisko,  @pl.gratyf.za_zlecenie
				VALUES(@_ZlecGUID, _Param_C, _Param_B, _Param_A, @DataOdZlec, @DataDoZlec, _Param_F, '', @_ZaZlecenie, 7, @MZ_Idn,  
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Procent_kosztow_um_zlec' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_emeryt_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_rent_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_chorob_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_wypadk_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_zdr_pobrane_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_emeryt_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_rent_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_chorob_zlecdawcy' AND rok = YEAR(_Param_F)),  -- , ProcFwypadkowyZleceniod = DBPlacesProc_wypadkowe.GetProcentWypadkowego(aDataWyplaty);
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_wypadk_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_zdr_pobrane_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'ZUS_FP_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'ZUS_FGSP_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM ms.IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = 2021),
				  1,1,
				  @_Godziny, @_extra_wynagr, @ZwolnienieOdPodatku26Lat, @ZwolnienieOdPodatkuDR, @ZwolnienieOdPodatkuPE, @RezygnPrzesunZal,
				GREATEST(@DodUbezpMedyczneZlecKartoteka - @SumaDodUbezpMedyczneZlec, 0),
				GREATEST(@PotrDodUbezpMedyczneZleckartoteka - @SumaPotrDodUbezpMedyczneZlec, 0)
				);  -- 20, (SELECT nazwisko from osoby WHERE GUID = _Param_C),

				-- zapis do logu o powstaniu kolejnego wpisu
				CALL ms.sys_log_insert(5087, 2, @_ZlecGUID,'Stworzenie zapisu prace zlecone za miesiac z automatu.');

								
				-- Z_1-Z_5(rodz.skl = 0) 
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_1'))), 'Z_1', @_ZlecGUID, @_ZaZlecenie, @_ZaZlecenie , 0);  -- @pl.gratyf.za_zlecenie, @pl.gratyf.za_zlecenie
				set @jmam='z1';
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_2'))), 'Z_2', @_ZlecGUID, 0, 0, 0);
				set @jmam='z2';
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_3'))), 'Z_3', @_ZlecGUID, 0, 0, 0);
				set @jmam='z3';
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_4'))), 'Z_4', @_ZlecGUID, 0, 0, 0);
				set @jmam='z4';
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_5'))), 'Z_5', @_ZlecGUID, 0, 0, 0);
				set @jmam='z5';
				-- Z_ZUS_1 - 9 (rodz.skl = 6)  _ZLEC_ZUS
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_1'))), 'Z_ZUS_1', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_2'))), 'Z_ZUS_2', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_3'))), 'Z_ZUS_3', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_4'))), 'Z_ZUS_4', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_5'))), 'Z_ZUS_5', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_6'))), 'Z_ZUS_6', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_7'))), 'Z_ZUS_7', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_8'))), 'Z_ZUS_8', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_9'))), 'Z_ZUS_9', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
					
				IF (ifnull(_SklPZU, 0)!=0) THEN
					REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, '{31D8C1D2-0BCC-4F2A-B649-428C962FFB24}'))), '{31D8C1D2-0BCC-4F2A-B649-428C962FFB24}', @_ZlecGUID, _SklPZU, _SklPZU, _ZLEC_Potr);
				END IF;	
				
				IF (ifnull(_SklHestia, 0)!=0) THEN
					REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, '{577E9341-06E4-4A42-A8DF-336577A1A710}'))), '{577E9341-06E4-4A42-A8DF-336577A1A710}', @_ZlecGUID, _SklHestia, _SklHestia, _ZLEC_Potr);
				END IF;	
					
					
				CALL pl_gratyfikacje_tools_arg7('pl.kart.obiektow.przepisz.dane.pracownika.one.zlec', _Param_A, _Param_B, _Param_C, @_ZlecGUID, 'ms', _Param_F);
				-- stale potracenia z karty pracownika

	-- w tym miejscu musz? zacz?? p?tle naliczaj?c? od brutto do netto 	
			
			SET @_netto_brutto_kwota = @_ZaZlecenie;
			SET @countU = 0;
			set @info = '';
				-- przeliczenie kwot innych potracen i innych dodatkow
				SET _SQLText = 'UPDATE ms.prace_zlecone z 
					SET
						z.InneDod = ifnull((select sum(kwota) from ms.place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Dod#),0),	
						z.InnePotr = ifnull((select sum(kwota) from ms.place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Potr#),0)	
					WHERE	
						z.GUID = ''#_ZlecGUID#'' ; 
					';
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', @_ZlecGUID);			
				SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Dod#', cInneDodatki);	
				SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Potr#', _ZLEC_Potr);	
				SET @_SQLText = _SQLText;		
				CALL _ExecuteCmd(_SQLText, @Error);					
			
				REPEAT
					UPDATE ms.prace_zlecone SET ZaZlecenie = @_ZaZlecenie WHERE GUID = @_ZlecGUID; 

					REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_1'))), 'Z_1', @_ZlecGUID, @_ZaZlecenie, @_ZaZlecenie , 0); 
				
					-- SKLADKI ZUS												 
					CALL pl_gratyfikacje_tools_arg7('pl.nalicz.z.kart.obiektow.one.zlec.skladki', _Param_A, _Param_B, _Param_C, @_ZlecGUID, 'ms', _Param_F);				
							
					-- przeliczenie kwot
					IF @ZwolnienieOdPodatku26Lat = 1 OR @ZwolnienieOdPodatkuDR = 1 OR @ZwolnienieOdPodatkuPE = 1 THEN           
					
						IF @ZwolnienieOdPodatku26Lat = 1 THEN -- wejscie tylko dla 26 lat
							SET @KwotaDoLimitu26 = 0;
							SELECT _Rnd(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
									(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
									dieta_delegacje * ProcFrentowyZleceniob/100 + 
									dieta_delegacje * ProcFchorobowyZleceniob/100)
									 + SkladkaPPE + PPKskladkaPracod, 2)
							INTO @KwotaDoLimitu26
							FROM ms.prace_zlecone 
							WHERE GUID = @_ZlecGUID 
							;
				
							IF @MaxDochodZwolnionyPodatek26lat >= (@KwotaDoLimitu26Narast+@KwotaDoLimitu26) THEN
								UPDATE ms.prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0, z.ZaliczkaPrzedSklUbezp = 0 WHERE GUID = @_ZlecGUID;
							ELSE

								IF @MaxDochodZwolnionyPodatek26lat > (@KwotaDoLimitu26Narast) THEN
									UPDATE ms.prace_zlecone z
									SET z.RazemSklZleceniobiorcyDoOdlicz =
										_Rnd2(((@KwotaDoLimitu26Narast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatek26lat)
											/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
									WHERE GUID = @_ZlecGUID
									;
									UPDATE ms.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2(((@KwotaDoLimitu26Narast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatek26lat
										- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
									WHERE GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.zPodstPPDprzedZaokr =
									((@KwotaDoLimitu26Narast + @KwotaDoLimitu26)- @MaxDochodZwolnionyPodatek26lat)
									- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
									WHERE GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

									SET @KwotaDoLimitu26 = @KwotaDoLimitu26 - (@KwotaDoLimitu26Narast + @KwotaDoLimitu26 -@MaxDochodZwolnionyPodatek26lat);
								ELSE -- przekroczenie limitu nastapilo juz wczeniej
								 -- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
									SET @KwotaDoLimitu26 = 0;

									UPDATE ms.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
									WHERE z.GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
									WHERE GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;
								END IF;
							END IF;

							UPDATE ms.prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
								z.Dochod * z.ProcentPodatku / 100
							WHERE GUID = @_ZlecGUID
							;

						END IF; -- wejscie tylko dla 26 lat

						IF @ZwolnienieOdPodatkuDR = 1 THEN -- wejscie tylko dla DR
							SET @KwotaDoLimituDR = 0;
							SELECT _Rnd(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
									(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
									dieta_delegacje * ProcFrentowyZleceniob/100 + 
									dieta_delegacje * ProcFchorobowyZleceniob/100)
									 + SkladkaPPE + PPKskladkaPracod, 2)
							INTO @KwotaDoLimituDR
							FROM ms.prace_zlecone 
							WHERE GUID = @_ZlecGUID 
							;
				
							IF @MaxDochodZwolnionyPodatekDR >= (@KwotaDoLimituDRNarast+@KwotaDoLimituDR) THEN
								UPDATE ms.prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0, z.ZaliczkaPrzedSklUbezp = 0 WHERE GUID = @_ZlecGUID;
							ELSE
								IF @MaxDochodZwolnionyPodatekDR > (@KwotaDoLimituDRNarast) THEN
									UPDATE ms.prace_zlecone z
									SET z.RazemSklZleceniobiorcyDoOdlicz =
											_Rnd2(((@KwotaDoLimituDRNarast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatekDR)
												/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
									WHERE GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2(((@KwotaDoLimituDRNarast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatekDR
										- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
									WHERE GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.zPodstPPDprzedZaokr =
									((@KwotaDoLimituDRNarast + @KwotaDoLimituDR)- @MaxDochodZwolnionyPodatekDR)
									- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
									WHERE GUID = @_ZlecGUID;


									UPDATE ms.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

									SET @KwotaDoLimituDR = @KwotaDoLimituDR - (@KwotaDoLimituDRNarast + @KwotaDoLimituDR -@MaxDochodZwolnionyPodatekDR);


								ELSE -- przekroczenie limitu nastapilo juz wczeniej
									-- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
									SET @KwotaDoLimituDR = 0;

									UPDATE ms.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
									WHERE z.GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
									WHERE GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

								END IF;
							END IF;

							UPDATE ms.prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
								z.Dochod * z.ProcentPodatku / 100
							WHERE GUID = @_ZlecGUID
							;
						END IF; -- wejscie tylko dla DR

						IF @ZwolnienieOdPodatkuPE = 1 THEN -- wejscie tylko dla PE
							SET @KwotaDoLimituPE = 0;
							SELECT _Rnd(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
									(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
									dieta_delegacje * ProcFrentowyZleceniob/100 + 
									dieta_delegacje * ProcFchorobowyZleceniob/100)
									 + SkladkaPPE + PPKskladkaPracod, 2)
							INTO @KwotaDoLimituPE
							FROM ms.prace_zlecone 
							WHERE GUID = @_ZlecGUID 
							;
				
							IF @MaxDochodZwolnionyPodatekPE >= (@KwotaDoLimituPENarast+@KwotaDoLimituPE) THEN
								UPDATE ms.prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0,
								z.KosztyUzyskania = 0, z.ZaliczkaPrzedSklUbezp = 0
								WHERE GUID = @_ZlecGUID;
							ELSE --  tutaj wchodzimy gdy nastpilo przeekroczenie limitu ulgi albo na tym zapisie albo   wczesniej
								IF @MaxDochodZwolnionyPodatekPE > (@KwotaDoLimituPENarast) THEN --  nie było wczesniej przekroczenia limitu czyli przekroczenie jest na tym zapisie

									UPDATE ms.prace_zlecone z
									SET z.RazemSklZleceniobiorcyDoOdlicz =
											_Rnd2(((@KwotaDoLimituPENarast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatekPE)
												/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
									WHERE GUID = @_ZlecGUID
									;

									-- 80.000 + 10.000 - 85528=4472

									UPDATE ms.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2(((@KwotaDoLimituPENarast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatekPE
										- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
									WHERE GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.zPodstPPDprzedZaokr =
									((@KwotaDoLimituPENarast + @KwotaDoLimituPE)- @MaxDochodZwolnionyPodatekPE)
									- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
									WHERE GUID = @_ZlecGUID;


									UPDATE ms.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

									SET @KwotaDoLimituPE = @KwotaDoLimituPE - (@KwotaDoLimituPENarast + @KwotaDoLimituPE -@MaxDochodZwolnionyPodatekPE);

								ELSE -- przekroczenie limitu nastapilo juz wczeniej
								 -- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
									SET @KwotaDoLimituPE = 0;

									UPDATE ms.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
									WHERE z.GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
									WHERE GUID = @_ZlecGUID
									;

									UPDATE ms.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

								END IF;
							END IF;

							UPDATE ms.prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
								z.Dochod * z.ProcentPodatku / 100
							WHERE GUID = @_ZlecGUID
							;

						END IF; -- wejscie tylko dla DR
						
						
						UPDATE ms.prace_zlecone z
                            SET z.KosztyUzyskaniaHipotetyczna = _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
                            z.KwotaBrutto = z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz
                        WHERE GUID = @_ZlecGUID;

						SET _SQLText = 'UPDATE ms.prace_zlecone z
							SET
							z.DochodHipotetyczna = _Rnd(
							(z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy)
							- KosztyUzyskaniaHipotetyczna 
							+ SkladkaPPE
							+ PPKskladkaPracod,
							0),  								
							z.ZalPrzedSklUbezpHipotetyczna = _Rnd(z.KwotaBrutto - z.wynagr_prokurent + z.SkladkaPPE + z.PPKskladkaPracod
                            + z.RazemSklZleceniobiorcyDoOdlicz
							- z.RazemSkladkiZleceniobiorcy - z.KosztyUzyskaniaHipotetyczna
							, 0) * (z.ProcentPodatkuHipot/100),
							z.Zaliczka = _Rnd(
						 			GREATEST(0, _Rnd2(z.Dochod * (z.ProcentPodatku/100)) - z.SklKasaChorychZleceniobOdlicz)
								, 0),
							z.ZaliczkaHipotetyczna  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
									- z.RazemSkladkiZleceniobiorcy 
									+ z.PPKskladkaPracod	
									- _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatkuHipot/100) - z.SklKCZlecOdliczHipot), 0)
							WHERE	
								z.GUID = ''#_ZlecGUID#'' ; '
						;
								
						SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', @_ZlecGUID);			
						SET @_SQLTextUpdate = _SQLText;		
						CALL _ExecuteCmd(_SQLText, @Error);	


						-- sekcja skopiowana z przebiegu dla zwyklej umowy, bo jednak przy czesciowym przekroczeniu trzeba i kwote wolna uwzglednic
						IF @KwotaWolnaOdPodatkuZlecKartoteka > 0 AND (@SumaKwotaWolnaOdPodatkuZlec < @KwotaWolnaOdPodatkuZlecKartoteka) THEN

							SET @PozostaloKwotyWolnej = @KwotaWolnaOdPodatkuZlecKartoteka - @SumaKwotaWolnaOdPodatkuZlec;

							SELECT z.ZaliczkaPrzedSklUbezp INTO @zaliczkaZapis FROM ms.prace_zlecone z WHERE z.guid = @_ZlecGUID;

							SET @KwotaWolnaNaZapisie = LEAST(@zaliczkaZapis, @PozostaloKwotyWolnej);

							UPDATE ms.prace_zlecone z SET
								KwotaWolnaOdPodatkuZlec = @KwotaWolnaNaZapisie,
								z.zaliczka = _Rnd(z.Zaliczka - @KwotaWolnaNaZapisie,0),
								z.ZaliczkaPrzedSklUbezp = z.ZaliczkaPrzedSklUbezp - @KwotaWolnaNaZapisie
							WHERE z.GUID = @_ZlecGUID;

						END IF;

						-- obliczamy czy stosować rozporzadzenie o przesunieciu poboru zaliczki, czyli obliczania ZaliczkiOdroczonej
					-- ale nic wiecej nie robimy bo 26lat DR PE są zwolnieni z podatku a wiece podatek jest =0
					-- i nie mozna go juz bardziej zmniejszyc, ustawiamy tylko pole ZaliczkaOdroczona na 0
					
						SET @CzyStosowacRozporzadzKwota =
						(SELECT ZaZlecenie + wynagr_prokurent + kwota_za_UW
							FROM ms.prace_zlecone WHERE GUID = @_ZlecGUID)
						+ @SumaZaZlecenieMsc + @SumaWynagr_prokurentMsc + @SumaKwota_za_UWMsc;
						
						UPDATE ms.prace_zlecone z
							SET z.KwotaNetto =
								if (z.RazemSkladkiZleceniobiorcy <> z.RazemSklZleceniobiorcyDoOdlicz,
								if (z.RazemSklZleceniobiorcyDoOdlicz = 0, 
										z.KwotaBrutto - DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy - z.SklKasaChorychZleceniobPobr,

										z.ZaZlecenie + z.wynagr_prokurent + z.kwota_za_UW
										+ z.ZasChorRazem + z.ZasMacierz
										+ z.ZasRehab + z.ZasOpiekun - z.RazemSkladkiZleceniobiorcy - z.SklKasaChorychZleceniobPobr - z.zaliczka),

								z.KwotaBrutto - DodUbezpMedyczneZlec - z.SklKasaChorychZleceniobPobr - z.zaliczka),

								z.KwotaDoLimitu26 = @KwotaDoLimitu26,
								z.KwotaDoLimitu26Narast = @KwotaDoLimitu26Narast,
								z.KwotaDoLimituDR = @KwotaDoLimituDR,
								z.KwotaDoLimituDRNarast = @KwotaDoLimituDRNarast,
								z.KwotaDoLimituPE = @KwotaDoLimituPE,
								z.KwotaDoLimituPENarast = @KwotaDoLimituPENarast,
								z.ZaliczkaOdroczona = 0
						WHERE z.GUID = @_ZlecGUID
						;
				
						UPDATE ms.prace_zlecone z
							SET z.DoWyplaty = _Rnd(z.KwotaNetto - PotrDodUbezpMedyczneZlec - z.InnePotr + z.InneDod + z.InneZasilkZUS, 2) - z.PPKskladkaPracow
						WHERE z.GUID = @_ZlecGUID
						;											
-- 26Lat END					koniec sekcji 26lat, DR, PE, od teraz jest normalne przeliczenie
					ELSE 

						UPDATE  ms.prace_zlecone z SET
							z.RazemSklZleceniobiorcyDoOdlicz = z.RazemSkladkiZleceniobiorcy
						WHERE z.GUID = @_ZlecGUID
						;

						UPDATE ms.prace_zlecone z
							SET z.KosztyUzyskaniaHipotetyczna = _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
							z.KwotaBrutto = z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz
						WHERE	
							z.GUID = @_ZlecGUID;

						UPDATE  ms.prace_zlecone z SET
							z.KosztyUzyskania = z.KosztyUzyskaniaHipotetyczna
						WHERE z.GUID = @_ZlecGUID
						;

						UPDATE  ms.prace_zlecone z
						SET
							z.DochodHipotetyczna = _Rnd(
							(z.ZaZlecenie + kwota_za_UW  + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy)
							- KosztyUzyskaniaHipotetyczna 
							+ SkladkaPPE
							+ PPKskladkaPracod,
								0),  
							z.ZalPrzedSklUbezpHipotetyczna = _Rnd(z.KwotaBrutto - z.wynagr_prokurent + z.SkladkaPPE + z.PPKskladkaPracod
                            + z.RazemSklZleceniobiorcyDoOdlicz
							- z.RazemSkladkiZleceniobiorcy - z.KosztyUzyskaniaHipotetyczna
							, 0) * (z.ProcentPodatkuHipot/100),

							z.zPodstPPDprzedZaokr = z.KwotaBrutto - z.KosztyUzyskania  + z.PPKskladkaPracod,
                            z.Dochod = _Rnd(z.KwotaBrutto - z.KosztyUzyskania  + z.PPKskladkaPracod, 0),
							z.ZaliczkaPrzedSklUbezp = _Rnd((z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) 
														- z.RazemSkladkiZleceniobiorcy 
														+ z.PPKskladkaPracod
														- _Rnd((z.ZaZlecenie + kwota_za_UW - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100),
							z.Zaliczka  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
										- z.RazemSkladkiZleceniobiorcy 
										+ z.PPKskladkaPracod	
										- _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0),

							z.ZaliczkaHipotetyczna  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
										- z.RazemSkladkiZleceniobiorcy 
										+ z.PPKskladkaPracod	
										- _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatkuHipot/100) - z.SklKCZlecOdliczHipot), 0)
						WHERE	
							z.GUID = @_ZlecGUID;

						IF @KwotaWolnaOdPodatkuZlecKartoteka > 0 AND (@SumaKwotaWolnaOdPodatkuZlec < @KwotaWolnaOdPodatkuZlecKartoteka) THEN

							SET @PozostaloKwotyWolnej = @KwotaWolnaOdPodatkuZlecKartoteka - @SumaKwotaWolnaOdPodatkuZlec;

							SELECT z.ZaliczkaPrzedSklUbezp INTO @zaliczkaZapis FROM ms.prace_zlecone z WHERE z.guid = @_ZlecGUID;

							SET @KwotaWolnaNaZapisie = LEAST(@zaliczkaZapis, @PozostaloKwotyWolnej);

							UPDATE ms.prace_zlecone z SET
								KwotaWolnaOdPodatkuZlec = @KwotaWolnaNaZapisie,
								z.zaliczka = _Rnd(z.Zaliczka - @KwotaWolnaNaZapisie,0),
								z.ZaliczkaPrzedSklUbezp = z.ZaliczkaPrzedSklUbezp - @KwotaWolnaNaZapisie
							WHERE z.GUID = @_ZlecGUID;

						END IF;

						UPDATE ms.prace_zlecone z SET
							z.KwotaNetto = (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
									- z.RazemSkladkiZleceniobiorcy 
									- z.SklKasaChorychZleceniobPobr 
									- z.Zaliczka
						WHERE z.GUID = @_ZlecGUID;
					
						SET @CzyStosowacRozporzadzKwota =
						(SELECT ZaZlecenie + wynagr_prokurent + kwota_za_UW
							FROM ms.prace_zlecone WHERE GUID = @_ZlecGUID)
						+ @SumaZaZlecenieMsc + @SumaWynagr_prokurentMsc + @SumaKwota_za_UWMsc;
					
						SET @ZaliczkaOdroczona = 0;
						SET @aDoPrzerzucenia = 0;
						SET @aZaliczkaHipotetyczna = 0;
						SET @aKwotaNettoWstepnaTmp = 0;
						
						SELECT ZaliczkaHipotetyczna, Zaliczka
						INTO @ZaliczkaHipotetycznaZapis, @Zaliczka
						FROM ms.prace_zlecone 
						WHERE GUID = @_ZlecGUID;
						
						SET @d01 = @aKwotaNettoWstepnaTmp;
						SET @d02 = @Zaliczka;
						SET @d03 = @aZaliczkaHipotetyczna;
						-- SET @a03 = @aKwotaNettoWstepnaTmp;
						
						if _Param_F > '2021-12-31' and @UwzglednijPrzesuniecieZal and @RezygnPrzesunZal = 0 then
						
							if @CzyStosowacRozporzadzKwota <= @MaxRezygnPrzesunZalKwota then
											-- 2150												12800
								IF (@ZwolnienieOdPodatku26Lat = 1) then
									SET @aZaliczkaHipotetyczna = 0;
								ELSE
									SET @aZaliczkaHipotetyczna = @ZaliczkaHipotetycznaZapis;
								END IF;
											-- 292										292
								if (@aZaliczkaHipotetyczna < @Zaliczka) then
								
									SET @ZaliczkaOdroczona = @Zaliczka - @aZaliczkaHipotetyczna;
									SET @Zaliczka = @aZaliczkaHipotetyczna;
								ELSEIF @aZaliczkaHipotetyczna > @Zaliczka then
									SET @aDoPrzerzucenia = LEAST(@aZaliczkaHipotetyczna - @Zaliczka, @SUMZaliczkaOdroczona);
									SET @Zaliczka = @Zaliczka + @aDoPrzerzucenia;
									SET @ZaliczkaOdroczona = -@aDoPrzerzucenia;
								END IF;
							else
							-- przekroczył kwotę w miesiącu i muszę skorygować czyli cofnąc odroczenie zalczki czyli zwiększyć zaliczkę na tym zapisie
								if @SUMZaliczkaOdroczona <> 0 then
									SET @ZaliczkaOdroczona = -@SUMZaliczkaOdroczona;
									SET @aPierwotnaZaliczkaTmp = @Zaliczka;
									SET @Zaliczka = @Zaliczka + @SUMZaliczkaOdroczona;
												--  20         20   + 500
									if @Zaliczka > (@aKwotaNettoWstepnaTmp + @aPierwotnaZaliczkaTmp) then
												--  520             100                      20   
										SET @aMogePrzerzucic = FLOOR(@aKwotaNettoWstepnaTmp);
										SET @Zaliczka = @aPierwotnaZaliczkaTmp + @aMogePrzerzucic;
										SET @ZaliczkaOdroczona = -@aMogePrzerzucic;
									end IF;
								end IF;
							end IF;
						end if;
						
						UPDATE ms.prace_zlecone z SET
							z.Zaliczka = @Zaliczka,
							z.ZaliczkaOdroczona = @ZaliczkaOdroczona
						WHERE	z.GUID = @_ZlecGUID
						; 
						
						SELECT (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
										- z.RazemSkladkiZleceniobiorcy
										- z.SklKasaChorychZleceniobPobr
										- z.Zaliczka
						INTO @aKwotaNettoWstepnaTmp
						FROM ms.prace_zlecone z
						WHERE z.GUID = @_ZlecGUID
						;
						
						set @d01 = @aKwotaNettoWstepnaTmp;
						
						
						SELECT (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab),
										z.RazemSkladkiZleceniobiorcy,
										z.SklKasaChorychZleceniobPobr,
										z.Zaliczka
						INTO @c01, @c02, @c03, @c04
						FROM ms.prace_zlecone z
						WHERE z.GUID = @_ZlecGUID
						;
						
						if (@Zaliczka > @aKwotaNettoWstepnaTmp) and (@ZaliczkaOdroczona<0) then
							SET @aNadwyzkaZaliczki = @Zaliczka - floor(@aKwotaNettoWstepnaTmp);
							SET @Zaliczka = floor(@aKwotaNettoWstepnaTmp);
							SET @aKwotaNettoWstepnaTmp = 0;
							SET @ZaliczkaOdroczona = @ZaliczkaOdroczona + @aNadwyzkaZaliczki;
						-- else
							-- SET @aKwotaNettoWstepnaTmp = @aKwotaNettoWstepnaTmp - @Zaliczka;
						END IF;
						
						UPDATE ms.prace_zlecone z SET
							z.KwotaNetto = IF(@aKwotaNettoWstepnaTmp > 0, @aKwotaNettoWstepnaTmp, 0),
							z.Zaliczka = @Zaliczka,
							z.ZaliczkaOdroczona = @ZaliczkaOdroczona,
							z.DoWyplaty  = @aKwotaNettoWstepnaTmp
								- z.InnePotr + z.InneDod +z.InneZasilkZUS - z.PPKskladkaPracow - z.PotrDodUbezpMedyczneZlec
						WHERE	z.GUID = @_ZlecGUID
						; 
					
					END IF;
					
					SELECT KwotaNetto INTO @_KwotaNetto FROM ms.prace_zlecone WHERE GUID = @_ZlecGUID;
					
					
					SET @_ZaZlecenieLast = @_ZaZlecenie; -- je?li to by?a ostatnia p?tla to chc? dok?adnie t? warto?? a nie powi?kszon?
					IF (@_netto_brutto_kwota <> @_KwotaNetto) THEN
					  SET @_ZaZlecenie = _Rnd(@_ZaZlecenie + (@_netto_brutto_kwota-@_KwotaNetto),2);				
					END IF;
					set @info = concat(ifnull(@info, ''), ' nbk: ',@_netto_brutto_kwota, 'KN: ',@_KwotaNetto, 'zz: ',@_ZaZlecenie, '<BR>' );
					SET @countU = @countU +1;
				UNTIL @_KwotaNetto >= @_netto_brutto_kwota || _netto_brutto = 0 || @countU = 500 END REPEAT;
		

				IF (_netto_brutto = 1 && @_ProporcjaNB != 0) THEN
					SET @_ZaZlecenie = _Rnd(@_ZaZlecenieLast*@_ProporcjaNB, 2);
					SET @_extra_wynagr = @_ZaZlecenieLast - @_ZaZlecenie;
					UPDATE ms.prace_zlecone SET ZaZlecenie = @_ZaZlecenie, kwota_za_UW = @_extra_wynagr WHERE GUID = @_ZlecGUID; 									
					REPLACE INTO ms.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_1'))), 'Z_1', @_ZlecGUID, @_ZaZlecenie, @_ZaZlecenie , 0); 					
				END IF;
		
		-- brutto do netto end;
						
				-- sposob wyplaty
				SET _SQLText = '
					update ms.prace_zlecone z, ms.Pracownicy k
					set
						z.wyplataprzelewem = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), z.dowyplaty, 0),
						z.wyplatagotowka   = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), 0, z.dowyplaty)					
					where z.guid = ''#_ZlecGUID#'' and z.guid_pracownika = k.GUID;
					';
				
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', @_ZlecGUID);			
				SET @_SQLText_wypl = _SQLText;		
				CALL _ExecuteCmd(_SQLText, @Error);					
				
				
			END IF;  
-- DO BAZY SEC			
			IF (_Param_E in ('1','3','4') && _ZaZlecenie >0) || (_Param_E in ('2') &&_ZaZlecenie2 >0) || (_Param_E IN ('3','4') && _Usluga = 1 && _extra_wynagr >0) THEN -- UWAGA WSZYSTKIE ZMIANY WPROWADZAC SYMETRYCZNIE DLA OBU IF-OW 

				SET @_ProporcjaNB = 0;
				SET @_ZaZlecenieLast = 0; -- je?li to by?a ostatnia p?tla to chc? dok?adnie t? warto?? a nie powi?kszon?
			
				IF (_Usluga = 0) THEN
					-- UWAGA tu zeruj? _extra_wynagr - tylko na jednym zleceniu !				
					IF (_Param_E in ('1')) THEN				
						SET @_extra_wynagr = 0;
					END IF;								
					SET @_ZaZlecenie = _ZaZlecenie;
					SET @_Godziny = _Godziny;
					IF (_Param_E in ('2') &&_ZaZlecenie2 >0) THEN
						SET @_ZaZlecenie = _ZaZlecenie2;				
						SET @_Godziny = _Godziny2;
						SET @_extra_wynagr = _extra_wynagr;
					END IF;
					IF (_netto_brutto = 1 && @_extra_wynagr != 0 && @_ZaZlecenie != 0) THEN								
						SET @_ProporcjaNB = @_ZaZlecenie/(@_ZaZlecenie + @_extra_wynagr);
						SET @_ZaZlecenie = @_ZaZlecenie + @_extra_wynagr;
						SET @_extra_wynagr = 0;
					END IF;										
				ELSE
					SET @_ZaZlecenie = _extra_wynagr;
					SET @_Godziny = 0;
					SET @_extra_wynagr = 0;				
				END IF;
				
				SET @_ZaZlecenie = _Rnd(@_ZaZlecenie, 2);

				SET @ZwolnienieOdPodatku26Lat = 0;
				SET @ZwolnienieOdPodatkuDR = 0;
				SET @ZwolnienieOdPodatkuPE = 0;
				SET @RezygnPrzesunZal = 0;
				SET @SUMZaliczkaOdroczona = 0;
				SET @SumaZaZlecenie = 0;
				SET @SumaWynagr_prokurent = 0;
				SET @SumaKwota_za_UW = 0;
				SET @SumZaliczkaOdroczonaMsc = 0;
				SET @SumaZaZlecenieMsc = 0;
				SET @SumaWynagr_prokurentMsc = 0;
				SET @SumaKwota_za_UWMsc = 0;
				SET @aPodstPodtk = 0;
				SET @aPodstPodtkHipotetyczna = 0;
				SET @KwotaWolnaOdPodatkuZlec = 0;
				SET @KwotaWolnaOdPodatkuZlecKartoteka = 0;
				SET @SumaKwotaWolnaOdPodatkuZlec = 0;

				SET @DodUbezpMedyczneZlecKartoteka = 0;
				SET @PotrDodUbezpMedyczneZlecKartoteka = 0;
				SET @SumaDodUbezpMedyczneZlec = 0;
				SET @SumaPotrDodUbezpMedyczneZlec = 0;

				
				SET @UwzglednijPrzesuniecieZal =
				(SELECT ValueB FROM sec.IReg WHERE idkey = 'UwzglednijPrzesuniecieZal' AND rok = YEAR(_Param_F));
				SET @MaxRezygnPrzesunZalKwota = 
				(SELECT ValueN FROM sec.IReg WHERE idkey = 'MaxRezygnPrzesunZalKwota' AND rok = YEAR(_Param_F));
				
				SELECT IF(YEAR(_Param_F)>2019, ZwolnOdPodatku26LatPo2019, ZwolnienieOdPodatku26Lat),
				NaliczUlgeDlaDR, NaliczUlgeDlaPE, RezygnPrzesunZalZlec, KwotaWolnaOdPodatkuZlec,
				DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec
				INTO @ZwolnienieOdPodatku26Lat, @ZwolnienieOdPodatkuDR, @ZwolnienieOdPodatkuPE, @RezygnPrzesunZal, @KwotaWolnaOdPodatkuZlecKartoteka, @DodUbezpMedyczneZlecKartoteka, @PotrDodUbezpMedyczneZlecKartoteka
				FROM sec.Pracownicy
				WHERE  GUID = _Param_C
				;
				
				IF @ZwolnienieOdPodatku26Lat = 1 THEN
     IF _Param_F > (select adddate(dataurodzenia, interval 26 year) from osoby where GUID = _Param_C) THEN
      SET @ZwolnienieOdPodatku26Lat = 0;
     END IF;
    END IF;

				SET @test4374 = @RezygnPrzesunZal;

				-- cdsKwotyZlecZPoprzednichMSC - nowe dane - od początku roku do msc wypłaty
				SELECT
					IFNULL(SUM(pl.ZaliczkaOdroczona),0) as SumZaliczkaOdroczona, 
					IFNULL(SUM(pl.ZaZlecenie),0) as SumaZaZlecenie, 
					IFNULL(SUM(pl.wynagr_prokurent),0) as SumaWynagr_prokurent,
					IFNULL(SUM(pl.kwota_za_UW),0) as SumaKwota_za_UW
				INTO @SUMZaliczkaOdroczona, @SumaZaZlecenie, @SumaWynagr_prokurent, @SumaKwota_za_UW
				FROM sec.prace_zlecone pl
				WHERE pl.GUID_pracownika = _Param_C 
				AND YEAR(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = YEAR(_Param_F) 
				AND MONTH(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) <= MONTH(_Param_F)
				AND pl.GUID <> @_ZlecGUID
				and pl.deleted = 0
				;	
				-- nowe dane dla msc wypłaty
				SELECT
					IFNULL(SUM(pl.ZaliczkaOdroczona),0) as SumZaliczkaOdroczonaMsc, 
					IFNULL(SUM(pl.ZaZlecenie),0) as SumaZaZlecenieMsc, 
					IFNULL(SUM(pl.wynagr_prokurent),0) as SumaWynagr_prokurentMsc,
					IFNULL(SUM(pl.kwota_za_UW),0) as SumaKwota_za_UWMsc,
					IFNULL(SUM(pl.KwotaWolnaOdPodatkuZlec),0) as SumaKwotaWolnaOdPodatkuZlec
				INTO @SumZaliczkaOdroczonaMsc, @SumaZaZlecenieMsc, @SumaWynagr_prokurentMsc, @SumaKwota_za_UWMsc, @SumaKwotaWolnaOdPodatkuZlec
				FROM sec.prace_zlecone pl
				WHERE pl.GUID_pracownika = _Param_C 
				AND YEAR(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = YEAR(_Param_F) 
				AND MONTH(ifnull(pl.DataWyplDoDeklar, pl.datawyplaty)) = MONTH(_Param_F)
				AND pl.GUID <> @_ZlecGUID
				and pl.deleted = 0
				;	
				
					-- nowe dane dla msc zlecenia!!!
				SELECT
					IFNULL(SUM(pl.DodUbezpMedyczneZlec),0),
					IFNULL(SUM(pl.PotrDodUbezpMedyczneZlec),0)
				INTO @SumaDodUbezpMedyczneZlec, @SumaPotrDodUbezpMedyczneZlec
				FROM sec.prace_zlecone pl
				WHERE pl.GUID_pracownika = _Param_C
				-- AND pl.rok = YEAR(_Param_F)
				-- AND pl.miesiac = MONTH(_Param_F)
    AND pl.rok = _varINT(_Param_A)
    AND pl.miesiac = _varINT(_Param_B)
				AND pl.GUID <> @_ZlecGUID
				and pl.deleted = 0
				;



	-- 26Lat begin	
				SET @MaxDochodZwolnionyPodatek26lat = 0;
				-- CALL _IReg_Get('Place2003\ZwPodatkowe', 'MaxDochodZwolnionyPodatek26lat', @rok, 'DOUBLE', @MaxDochodZwolnionyPodatek26lat, 35636.67);
				SELECT ValueN INTO @MaxDochodZwolnionyPodatek26lat FROM sec.IReg
				WHERE idkey = 'MaxDochodZwolnionyPodatek26lat' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\ZwPodatkowe' AND rok = YEAR(@_DataWypl)
				;
				
				SET @KwotaDoLimitu26Narast = 0;
				SELECT SUM(KwotaDoLimitu26Narast) INTO @KwotaDoLimitu26Narast
				FROM (
					( SELECT IFNULL(SUM(KwotaDoLimitu26),0) AS KwotaDoLimitu26Narast 
						FROM sec.prace_zlecone WHERE GUID_Pracownika = _Param_C AND  YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					) UNION 
					( SELECT IFNULL(SUM(KwotaDoLimitu26),0) AS KwotaDoLimitu26Narast 
						FROM sec.place WHERE GUID_pracownika = _Param_C AND YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					)
				) newTable;
	-- 26Lat end

	-- DR begin	
				SET @MaxDochodZwolnionyPodatekDR = 0;
				SELECT ValueN INTO @MaxDochodZwolnionyPodatekDR FROM sec.IReg
				WHERE idkey = 'MaxDochodZwolnionyPodatekDR' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\ZwPodatkowe' AND rok = YEAR(@_DataWypl)
				;
				
				SET @KwotaDoLimituDRNarast = 0;
				SELECT SUM(KwotaDoLimituDRNarast) INTO @KwotaDoLimituDRNarast
				FROM (
					( SELECT IFNULL(SUM(KwotaDoLimituDR),0) AS KwotaDoLimituDRNarast 
						FROM sec.prace_zlecone WHERE GUID_Pracownika = _Param_C AND  YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					) UNION 
					( SELECT IFNULL(SUM(KwotaDoLimituDR),0) AS KwotaDoLimituDRNarast 
						FROM sec.place WHERE GUID_pracownika = _Param_C AND YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					)
				) newTable;
	-- DR end
	
	-- PE begin	
				SET @MaxDochodZwolnionyPodatekPE = 0;
				SELECT ValueN INTO @MaxDochodZwolnionyPodatekPE FROM sec.IReg
				WHERE idkey = 'MaxDochodZwolnionyPodatekPE' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\ZwPodatkowe' AND rok = YEAR(@_DataWypl)
				;
				
				SET @KwotaDoLimituPENarast = 0;
				SELECT SUM(KwotaDoLimituPENarast) INTO @KwotaDoLimituPENarast
				FROM (
					( SELECT IFNULL(SUM(KwotaDoLimituPE),0) AS KwotaDoLimituPENarast 
						FROM sec.prace_zlecone WHERE GUID_Pracownika = _Param_C AND  YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					) UNION 
					( SELECT IFNULL(SUM(KwotaDoLimituPE),0) AS KwotaDoLimituPENarast 
						FROM sec.place WHERE GUID_pracownika = _Param_C AND YEAR(datawyplaty) = YEAR(_Param_F) AND GUID <> @_ZlecGUID AND deleted = 0 
					)
				) newTable;
	-- PE end
				
				SET @MZ_Idn = NULL, @miejsceZlecenia = ' n/n';
				SELECT IFNULL(CONCAT(IFNULL(k.Symbol, ''), ' - ' , IFNULL(an.Nazwa,'')), ' n/n') AS miejsceZlecenia
				INTO @miejsceZlecenia
				FROM sec.erp_area_nodes an, sec.kontrah k, sec.pl_karty_obiektu_ng p 
				WHERE k.GUID = an.KontrGUID AND an.KontrGUID = p.KontrGUID AND an.GUID = p.AreaGUID AND p.GUID = _Param_D
				;

				SELECT idn INTO @MZ_Idn FROM sec.prace_zlec_miejsca WHERE nazwa = @miejsceZlecenia
				;
				
				IF (IFNULL(@MZ_Idn, 0) = 0) THEN
					INSERT INTO sec.prace_zlec_miejsca (symbol, nazwa) VALUES (@miejsceZlecenia, @miejsceZlecenia); -- TODO: prace_zlec_miejsca ma si? znale?? guid
					SELECT idn INTO @MZ_Idn from sec.prace_zlec_miejsca where nazwa = @miejsceZlecenia;
				END IF;
				
				SET @MZ_Idn = IFNULL(@MZ_Idn, 0), _SklPZU=0, _SklHestia=0;

				SELECT SkladkaPZU AS SklPZU, SkladkaUbezp2 AS SklHestia INTO _SklPZU, _SklHestia
				FROM sec.Pracownicy WHERE guid = _Param_C
					AND (SELECT COUNT(*) FROM sec.prace_zlecone WHERE deleted= 0 AND Rok = _Param_A AND miesiac = _Param_B AND GUID_pracownika = _Param_C)<1 
				;

				-- UWAGA tu zeruj? _extra_wynagr - tylko na jednym zleceniu !
				-- przeniesione do gory
				-- IF (_Usluga = 0) && (_Param_E in ('0','1','5')) THEN				
				-- 	SET @_extra_wynagr = 0;
				-- END IF;				
				
				-- wstawienie do place_zlec i do place_skladniki
				REPLACE INTO sec.prace_zlecone 
				(GUID, GUID_pracownika,  miesiac, rok, DataOd, DataDo, DataWyplaty, NrZlecenia, ZaZlecenie, RodzajRyczaltu, MZ_Idn, 
				  KosztyUzyskaniaWproc, ProcFemerytalnyZleceniob, ProcFrentowyZleceniob, ProcFchorobowyZleceniob,
				  ProcFwypadkowyZleceniob, ProcKasaChorychZleceniobPobr, ProcKasaChorychZleceniobOdlicz,
				  ProcFemerytalnyZleceniod, ProcFrentowyZleceniod, ProcFchorobowyZleceniod, ProcFwypadkowyZleceniod,
				  ProcKasaChorychZleceniod, ProcFPracy, ProcFGSP, ProcKasaChorOdliczHipot, rach_do_umowy, ZlecERP, godziny, kwota_za_UW, ZwolnienieOdPodatku26Lat, NaliczUlgeDlaDR, NaliczUlgeDlaPE, RezygnPrzesunZal,
				  DodUbezpMedyczneZlec, PotrDodUbezpMedyczneZlec
				)   -- nazwisko,  @pl.gratyf.za_zlecenie
				VALUES(@_ZlecGUID, _Param_C, _Param_B, _Param_A, @DataOdZlec, @DataDoZlec, _varDATE(_Param_F), '', @_ZaZlecenie, 7, @MZ_Idn,  
				  (SELECT ValueN FROM IReg WHERE idkey = 'Procent_kosztow_um_zlec' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_emeryt_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_rent_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_chorob_zlecdawcy' AND rok = YEAR(_Param_F)),  -- , ProcFwypadkowyZleceniod = DBPlacesProc_wypadkowe.GetProcentWypadkowego(aDataWyplaty);
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_wypadk_zlecdawcy' AND rok = YEAR(_Param_F)),				  		
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_pobrane_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FP_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'ZUS_FGSP_zlecdawcy' AND rok = YEAR(_Param_F)),
				  (SELECT ValueN FROM IReg WHERE idkey = 'Proc_zdr_odliczone_zlecbiorcy' AND rok = 2021),
				  1, 1,
				  @_Godziny, @_extra_wynagr, @ZwolnienieOdPodatku26Lat, @ZwolnienieOdPodatkuDR, @ZwolnienieOdPodatkuPE, @RezygnPrzesunZal,
				GREATEST(@DodUbezpMedyczneZlecKartoteka - @SumaDodUbezpMedyczneZlec, 0),
				GREATEST(@PotrDodUbezpMedyczneZleckartoteka - @SumaPotrDodUbezpMedyczneZlec, 0)
				);  -- 20, (SELECT nazwisko from osoby WHERE GUID = _Param_C),
				
				-- wpis do logu o wprowadzeniu nowego rekordu
				CALL sec.sys_log_insert(5087, 2, @_ZlecGUID,'Stworzenie zapisu prace zlecone za miesiac z automatu.');
				
				-- Z_1-Z_5(rodz.skl = 0) 
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_1'))), 'Z_1', @_ZlecGUID, @_ZaZlecenie, @_ZaZlecenie , 0);  -- @pl.gratyf.za_zlecenie, @pl.gratyf.za_zlecenie
				set @jmam='z1';
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_2'))), 'Z_2', @_ZlecGUID, 0, 0, 0);
				set @jmam='z2';
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_3'))), 'Z_3', @_ZlecGUID, 0, 0, 0);
				set @jmam='z3';
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_4'))), 'Z_4', @_ZlecGUID, 0, 0, 0);
				set @jmam='z4';
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_5'))), 'Z_5', @_ZlecGUID, 0, 0, 0);
				set @jmam='z5';
				-- Z_ZUS_1 - 9 (rodz.skl = 6)  _ZLEC_ZUS
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_1'))), 'Z_ZUS_1', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_2'))), 'Z_ZUS_2', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_3'))), 'Z_ZUS_3', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
				VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_4'))), 'Z_ZUS_4', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_5'))), 'Z_ZUS_5', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_6'))), 'Z_ZUS_6', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_7'))), 'Z_ZUS_7', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_8'))), 'Z_ZUS_8', @_ZlecGUID, 0, 0, _ZLEC_ZUS);
			
				REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_ZUS_9'))), 'Z_ZUS_9', @_ZlecGUID, 0, 0, _ZLEC_ZUS);

				IF (ifnull(_SklPZU, 0)!=0) THEN
					REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, '{C50959B6-A7AA-4836-AA68-1546E7FB6E02}'))), '{C50959B6-A7AA-4836-AA68-1546E7FB6E02}', @_ZlecGUID, _SklPZU, _SklPZU, _ZLEC_Potr);
				END IF;	
				
				IF (ifnull(_SklHestia, 0)!=0) THEN
					REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
						VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, '{371577DA-2ADC-434D-899A-4E27CA665A1E}'))), '{371577DA-2ADC-434D-899A-4E27CA665A1E}', @_ZlecGUID, _SklHestia, _SklHestia, _ZLEC_Potr);					   
				END IF;						
					
				CALL pl_gratyfikacje_tools_arg7('pl.kart.obiektow.przepisz.dane.pracownika.one.zlec', _Param_A, _Param_B, _Param_C, @_ZlecGUID, 'sec', _Param_F);

				SET @test4571 = @RezygnPrzesunZal;


	-- w tym miejscu musz? zacz?? p?tle naliczaj?c? od brutto do netto 	
			
			SET @_netto_brutto_kwotaSec = @_ZaZlecenie;
			SET @countSecU = 0;
			set @infoSec = '';
			
				-- przeliczenie kwot innych potracen i innych dodatkow
				SET _SQLText = 'UPDATE sec.prace_zlecone z 
					SET
						z.InneDod = ifnull((select sum(kwota) from sec.place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Dod#),0),	
						z.InnePotr = ifnull((select sum(kwota) from sec.place_skladniki s where s.guid_zapisu_placowego = ''#_ZlecGUID#'' and s.RodzajSkladnika = #_ZLEC_Potr#),0)	
					WHERE	
						z.GUID = ''#_ZlecGUID#'' ; 
					';
				SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', @_ZlecGUID);			
				SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Dod#', cInneDodatki);	
				SET _SQLText = REPLACE(_SQLText, '#_ZLEC_Potr#', _ZLEC_Potr);
				SET @_SQLText = _SQLText;		
				CALL _ExecuteCmd(_SQLText, @Error);										
			
				REPEAT
					UPDATE sec.prace_zlecone SET ZaZlecenie = @_ZaZlecenie WHERE GUID = @_ZlecGUID; 

					REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_1'))), 'Z_1', @_ZlecGUID, @_ZaZlecenie, @_ZaZlecenie , 0); 

				
				-- SKLADKI ZUS
				--	set @szambo = 'wywolanie wewn. 2 skladki';
											
					CALL pl_gratyfikacje_tools_arg7('pl.nalicz.z.kart.obiektow.one.zlec.skladki', _Param_A, _Param_B, _Param_C, @_ZlecGUID, 'sec', _Param_F);
																		
					-- przeliczenie kwot
					IF @ZwolnienieOdPodatku26Lat = 1 OR @ZwolnienieOdPodatkuDR = 1 OR @ZwolnienieOdPodatkuPE = 1 THEN           
-- 26Lat BEGIN
						IF @ZwolnienieOdPodatku26Lat = 1 THEN -- wejscie tylko dla 26 lat
							SET @KwotaDoLimitu26 = 0;
							SELECT _Rnd(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
									(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
									dieta_delegacje * ProcFrentowyZleceniob/100 + 
									dieta_delegacje * ProcFchorobowyZleceniob/100)
									 + SkladkaPPE + PPKskladkaPracod, 2)
							INTO @KwotaDoLimitu26
							FROM sec.prace_zlecone 
							WHERE GUID = @_ZlecGUID 
							;
				
							IF @MaxDochodZwolnionyPodatek26lat >= (@KwotaDoLimitu26Narast+@KwotaDoLimitu26) THEN
								UPDATE sec.prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0, z.ZaliczkaPrzedSklUbezp = 0 WHERE GUID = @_ZlecGUID;
							ELSE

								IF @MaxDochodZwolnionyPodatek26lat > (@KwotaDoLimitu26Narast) THEN
									UPDATE sec.prace_zlecone z
									SET z.RazemSklZleceniobiorcyDoOdlicz =
										_Rnd2(((@KwotaDoLimitu26Narast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatek26lat)
											/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
									WHERE GUID = @_ZlecGUID
									;
									UPDATE sec.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2(((@KwotaDoLimitu26Narast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatek26lat
										- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
									WHERE GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.zPodstPPDprzedZaokr =
									((@KwotaDoLimitu26Narast + @KwotaDoLimitu26)- @MaxDochodZwolnionyPodatek26lat)
									- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
									WHERE GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

									SET @KwotaDoLimitu26 = @KwotaDoLimitu26 - (@KwotaDoLimitu26Narast + @KwotaDoLimitu26 -@MaxDochodZwolnionyPodatek26lat);
								ELSE -- przekroczenie limitu nastapilo juz wczeniej
								 -- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
									SET @KwotaDoLimitu26 = 0;

									UPDATE sec.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
									WHERE z.GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
									WHERE GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;
								END IF;
							END IF;

							UPDATE sec.prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
								z.Dochod * z.ProcentPodatku / 100
							WHERE GUID = @_ZlecGUID
							;

						END IF; -- wejscie tylko dla 26 lat
						
						IF @ZwolnienieOdPodatkuDR = 1 THEN -- wejscie tylko dla DR
							SET @KwotaDoLimituDR = 0;
							SELECT _Rnd(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
									(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
									dieta_delegacje * ProcFrentowyZleceniob/100 + 
									dieta_delegacje * ProcFchorobowyZleceniob/100)
									 + SkladkaPPE + PPKskladkaPracod, 2)
							INTO @KwotaDoLimituDR
							FROM sec.prace_zlecone 
							WHERE GUID = @_ZlecGUID 
							;
				
							IF @MaxDochodZwolnionyPodatekDR >= (@KwotaDoLimituDRNarast+@KwotaDoLimituDR) THEN
								UPDATE sec.prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0, z.ZaliczkaPrzedSklUbezp = 0 WHERE GUID = @_ZlecGUID;
							ELSE
								IF @MaxDochodZwolnionyPodatekDR > (@KwotaDoLimituDRNarast) THEN
									UPDATE sec.prace_zlecone z
									SET z.RazemSklZleceniobiorcyDoOdlicz =
											_Rnd2(((@KwotaDoLimituDRNarast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatekDR)
												/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
									WHERE GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2(((@KwotaDoLimituDRNarast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatekDR
										- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
									WHERE GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.zPodstPPDprzedZaokr =
									((@KwotaDoLimituDRNarast + @KwotaDoLimituDR)- @MaxDochodZwolnionyPodatekDR)
									- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
									WHERE GUID = @_ZlecGUID;


									UPDATE sec.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

									SET @KwotaDoLimituDR = @KwotaDoLimituDR - (@KwotaDoLimituDRNarast + @KwotaDoLimituDR -@MaxDochodZwolnionyPodatekDR);


								ELSE -- przekroczenie limitu nastapilo juz wczeniej
									-- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
									SET @KwotaDoLimituDR = 0;

									UPDATE sec.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
									WHERE z.GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
									WHERE GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

								END IF;
							END IF;

							UPDATE sec.prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
								z.Dochod * z.ProcentPodatku / 100
							WHERE GUID = @_ZlecGUID
							;

						END IF; -- wejscie tylko dla DR
						
						IF @ZwolnienieOdPodatkuPE = 1 THEN -- wejscie tylko dla PE
							SET @KwotaDoLimituPE = 0;
							SELECT _Rnd(ZaZlecenie + wynagr_prokurent + kwota_za_UW +
									(dieta_delegacje * ProcFemerytalnyZleceniob/100 + 
									dieta_delegacje * ProcFrentowyZleceniob/100 + 
									dieta_delegacje * ProcFchorobowyZleceniob/100)
									 + SkladkaPPE + PPKskladkaPracod, 2)
							INTO @KwotaDoLimituPE
							FROM sec.prace_zlecone 
							WHERE GUID = @_ZlecGUID 
							;
				
							IF @MaxDochodZwolnionyPodatekPE >= (@KwotaDoLimituPENarast+@KwotaDoLimituPE) THEN
								UPDATE sec.prace_zlecone z SET z.RazemSklZleceniobiorcyDoOdlicz = 0, z.zPodstPPDprzedZaokr = 0, z.Dochod = 0,
								z.KosztyUzyskania = 0, z.ZaliczkaPrzedSklUbezp = 0
								WHERE GUID = @_ZlecGUID;
							ELSE --  tutaj wchodzimy gdy nastpilo przeekroczenie limitu ulgi albo na tym zapisie albo   wczesniej
								IF @MaxDochodZwolnionyPodatekPE > (@KwotaDoLimituPENarast) THEN --  nie było wczesniej przekroczenia limitu czyli przekroczenie jest na tym zapisie

									UPDATE sec.prace_zlecone z
									SET z.RazemSklZleceniobiorcyDoOdlicz =
											_Rnd2(((@KwotaDoLimituPENarast + ZaZlecenie + DodUbezpMedyczneZlec  - @MaxDochodZwolnionyPodatekPE)
												/ (ZaZlecenie + DodUbezpMedyczneZlec)) * z.RazemSkladkiZleceniobiorcy)
									WHERE GUID = @_ZlecGUID
									;

									-- 80.000 + 10.000 - 85528=4472

									UPDATE sec.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2(((@KwotaDoLimituPENarast + ZaZlecenie + DodUbezpMedyczneZlec) -@MaxDochodZwolnionyPodatekPE
										- z.RazemSklZleceniobiorcyDoOdlicz) * z.KosztyUzyskaniaWproc / 100)
									WHERE GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.zPodstPPDprzedZaokr =
									((@KwotaDoLimituPENarast + @KwotaDoLimituPE)- @MaxDochodZwolnionyPodatekPE)
									- z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania
									WHERE GUID = @_ZlecGUID;


									UPDATE sec.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

									SET @KwotaDoLimituPE = @KwotaDoLimituPE - (@KwotaDoLimituPENarast + @KwotaDoLimituPE -@MaxDochodZwolnionyPodatekPE);

								ELSE  -- przekroczenie limitu nastapilo juz wczeniej
								 -- wszystko jest opodatkowane - licze koszty tak jak przy normalnym zleceniu
									SET @KwotaDoLimituPE = 0;

									UPDATE sec.prace_zlecone z SET z.KosztyUzyskania =
										_Rnd2((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * KosztyUzyskaniaWproc / 100)
									WHERE z.GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.zPodstPPDprzedZaokr = z.ZaZlecenie + z.kwota_za_UW + z.DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz - z.KosztyUzyskania  + z.PPKskladkaPracod
									WHERE GUID = @_ZlecGUID
									;

									UPDATE sec.prace_zlecone z SET z.Dochod = _Rnd(zPodstPPDprzedZaokr, 0)
									WHERE GUID = @_ZlecGUID
									;

								END IF;
							END IF;

							UPDATE sec.prace_zlecone z SET z.ZaliczkaPrzedSklUbezp =
								z.Dochod * z.ProcentPodatku / 100
							WHERE GUID = @_ZlecGUID
							;

						END IF; -- wejscie tylko dla PE
						
						UPDATE sec.prace_zlecone z SET
                            z.KosztyUzyskaniaHipotetyczna = _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
                            z.KwotaBrutto = z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz
						WHERE GUID = @_ZlecGUID
						;

						SET _SQLText = 'UPDATE sec.prace_zlecone z
							SET
							z.DochodHipotetyczna = _Rnd(
							(z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy)
							- KosztyUzyskaniaHipotetyczna 
							+ SkladkaPPE
							+ PPKskladkaPracod,
							0),  								
							z.ZalPrzedSklUbezpHipotetyczna = _Rnd(z.KwotaBrutto - z.wynagr_prokurent + z.SkladkaPPE + z.PPKskladkaPracod
                            + z.RazemSklZleceniobiorcyDoOdlicz
							- z.RazemSkladkiZleceniobiorcy - z.KosztyUzyskaniaHipotetyczna
							, 0) * (z.ProcentPodatkuHipot/100),
							z.Zaliczka = _Rnd(
						 			GREATEST(0, _Rnd2(z.Dochod * (z.ProcentPodatku/100)) - z.SklKasaChorychZleceniobOdlicz)
								, 0),
							z.ZaliczkaHipotetyczna  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
									- z.RazemSkladkiZleceniobiorcy 
									+ z.PPKskladkaPracod	
									- _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatkuHipot/100) - z.SklKCZlecOdliczHipot), 0)
							WHERE	
								z.GUID = ''#_ZlecGUID#'' ; '
						;
								
						SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', @_ZlecGUID);			
						SET @_SQLTextUpdate = _SQLText;		
						CALL _ExecuteCmd(_SQLText, @Error);	

						-- sekcja skopiowana z przebiegu dla zwyklej umowy, bo jednak przy czesciowym przekroczeniu trzeba i kwote wolna uwzglednic
						IF @KwotaWolnaOdPodatkuZlecKartoteka > 0 AND (@SumaKwotaWolnaOdPodatkuZlec < @KwotaWolnaOdPodatkuZlecKartoteka) THEN

							SET @PozostaloKwotyWolnej = @KwotaWolnaOdPodatkuZlecKartoteka - @SumaKwotaWolnaOdPodatkuZlec;

							SELECT z.ZaliczkaPrzedSklUbezp INTO @zaliczkaZapis FROM sec.prace_zlecone z WHERE z.guid = @_ZlecGUID;

							SET @KwotaWolnaNaZapisie = LEAST(@zaliczkaZapis, @PozostaloKwotyWolnej);

							UPDATE sec.prace_zlecone z SET
								KwotaWolnaOdPodatkuZlec = @KwotaWolnaNaZapisie,
								z.zaliczka = _Rnd(z.Zaliczka - @KwotaWolnaNaZapisie,0),
								z.ZaliczkaPrzedSklUbezp = z.ZaliczkaPrzedSklUbezp - @KwotaWolnaNaZapisie
							WHERE z.GUID = @_ZlecGUID;

						END IF;



						-- obliczamy czy stosować rozporzadzenie o przesunieciu poboru zaliczki, czyli obliczania ZaliczkiOdroczonej
					-- ale nic wiecej nie robimy bo 26lat DR PE są zwolnieni z podatku a wiece podatek jest =0
					-- i nie mozna go juz bardziej zmniejszyc, ustawiamy tylko pole ZaliczkaOdroczona na 0
					
						SET @CzyStosowacRozporzadzKwota =
						(SELECT ZaZlecenie + wynagr_prokurent + kwota_za_UW + DodUbezpMedyczneZlec
							FROM ms.prace_zlecone WHERE GUID = @_ZlecGUID)
						+ @SumaZaZlecenieMsc + @SumaWynagr_prokurentMsc + @SumaKwota_za_UWMsc;
						
						
						UPDATE sec.prace_zlecone z
							SET z.KwotaNetto =
								if (z.RazemSkladkiZleceniobiorcy <> z.RazemSklZleceniobiorcyDoOdlicz,
								if (z.RazemSklZleceniobiorcyDoOdlicz = 0, 
										z.KwotaBrutto - DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy - z.SklKasaChorychZleceniobPobr,

										z.ZaZlecenie + z.wynagr_prokurent + z.kwota_za_UW
										+ z.ZasChorRazem + z.ZasMacierz
										+ z.ZasRehab + z.ZasOpiekun - z.RazemSkladkiZleceniobiorcy - z.SklKasaChorychZleceniobPobr - z.zaliczka),
								z.KwotaBrutto - DodUbezpMedyczneZlec - z.SklKasaChorychZleceniobPobr - z.zaliczka),
								z.KwotaDoLimitu26 = @KwotaDoLimitu26,
								z.KwotaDoLimitu26Narast = @KwotaDoLimitu26Narast,
								z.KwotaDoLimituDR = @KwotaDoLimituDR,
								z.KwotaDoLimituDRNarast = @KwotaDoLimituDRNarast,
								z.KwotaDoLimituPE = @KwotaDoLimituPE,
								z.KwotaDoLimituPENarast = @KwotaDoLimituPENarast,
								z.ZaliczkaOdroczona = 0
						WHERE z.GUID = @_ZlecGUID
						;
				
						UPDATE sec.prace_zlecone z
							SET z.DoWyplaty = _Rnd(z.KwotaNetto - PotrDodUbezpMedyczneZlec - z.InnePotr + z.InneDod + z.InneZasilkZUS, 2) - z.PPKskladkaPracow
						WHERE z.GUID = @_ZlecGUID
						;																
-- 26Lat END					 koniec sekcji 26, DR, PE dla bazy sec
					ELSE

						UPDATE  sec.prace_zlecone z SET
							z.RazemSklZleceniobiorcyDoOdlicz = z.RazemSkladkiZleceniobiorcy
						WHERE z.GUID = @_ZlecGUID
						;

						UPDATE sec.prace_zlecone z
							SET z.KosztyUzyskaniaHipotetyczna = _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2),
							z.KwotaBrutto = z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSklZleceniobiorcyDoOdlicz
						WHERE	
							z.GUID = @_ZlecGUID;

						UPDATE  sec.prace_zlecone z SET
							z.KosztyUzyskania = z.KosztyUzyskaniaHipotetyczna
						WHERE z.GUID = @_ZlecGUID
						;

						UPDATE sec.prace_zlecone z
						SET
							z.DochodHipotetyczna = _Rnd(
							(z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab - z.RazemSkladkiZleceniobiorcy)
							- KosztyUzyskaniaHipotetyczna 
							+ SkladkaPPE
							+ PPKskladkaPracod,
								0),  
							z.ZalPrzedSklUbezpHipotetyczna = _Rnd(z.KwotaBrutto - z.wynagr_prokurent + z.SkladkaPPE + z.PPKskladkaPracod
                            + z.RazemSklZleceniobiorcyDoOdlicz
							- z.RazemSkladkiZleceniobiorcy - z.KosztyUzyskaniaHipotetyczna
							, 0) * (z.ProcentPodatkuHipot/100),

							 z.zPodstPPDprzedZaokr = z.KwotaBrutto - z.KosztyUzyskania  + z.PPKskladkaPracod,
                            z.Dochod = _Rnd(z.KwotaBrutto - z.KosztyUzyskania  + z.PPKskladkaPracod, 0),
							z.ZaliczkaPrzedSklUbezp = _Rnd((z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab) 
														- z.RazemSkladkiZleceniobiorcy 
														+ z.PPKskladkaPracod
														- _Rnd((z.ZaZlecenie + kwota_za_UW - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100),
							z.Zaliczka  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec +  z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
										- z.RazemSkladkiZleceniobiorcy 
										+ z.PPKskladkaPracod	
										- _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatku/100) - z.SklKasaChorychZleceniobOdlicz), 0),

							z.ZaliczkaHipotetyczna  = _Rnd(GREATEST(0, _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
										- z.RazemSkladkiZleceniobiorcy 
										+ z.PPKskladkaPracod	
										- _Rnd((z.ZaZlecenie + kwota_za_UW + DodUbezpMedyczneZlec - z.RazemSkladkiZleceniobiorcy) * (KosztyUzyskaniaWproc / 100), 2)  , 0) * (z.ProcentPodatkuHipot/100) - z.SklKCZlecOdliczHipot), 0)
						WHERE	
							z.GUID = @_ZlecGUID;

						IF @KwotaWolnaOdPodatkuZlecKartoteka > 0 AND (@SumaKwotaWolnaOdPodatkuZlec < @KwotaWolnaOdPodatkuZlecKartoteka) THEN

							SET @PozostaloKwotyWolnej = @KwotaWolnaOdPodatkuZlecKartoteka - @SumaKwotaWolnaOdPodatkuZlec;

							SELECT z.ZaliczkaPrzedSklUbezp INTO @zaliczkaZapis FROM sec.prace_zlecone z WHERE z.guid = @_ZlecGUID;

							SET @KwotaWolnaNaZapisie = LEAST(@zaliczkaZapis, @PozostaloKwotyWolnej);

							UPDATE sec.prace_zlecone z SET
								KwotaWolnaOdPodatkuZlec = @KwotaWolnaNaZapisie,
								z.zaliczka = _Rnd(z.Zaliczka - @KwotaWolnaNaZapisie,0),
								z.ZaliczkaPrzedSklUbezp = z.ZaliczkaPrzedSklUbezp - @KwotaWolnaNaZapisie
							WHERE z.GUID = @_ZlecGUID;

						END IF;


						UPDATE sec.prace_zlecone z SET
							z.KwotaNetto = (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
									- z.RazemSkladkiZleceniobiorcy 
									- z.SklKasaChorychZleceniobPobr 
									- z.Zaliczka
						WHERE z.GUID = @_ZlecGUID;
					
						SET @CzyStosowacRozporzadzKwota =
						(SELECT ZaZlecenie + wynagr_prokurent + kwota_za_UW
							FROM sec.prace_zlecone WHERE GUID = @_ZlecGUID)
						+ @SumaZaZlecenieMsc + @SumaWynagr_prokurentMsc + @SumaKwota_za_UWMsc;
					
						SET @ZaliczkaOdroczona = 0;
						SET @aDoPrzerzucenia = 0;
						SET @aZaliczkaHipotetyczna = 0;
						SET @aKwotaNettoWstepnaTmp = 0;
						
						SELECT ZaliczkaHipotetyczna, Zaliczka
						INTO @ZaliczkaHipotetycznaZapis, @Zaliczka
						FROM sec.prace_zlecone 
						WHERE GUID = @_ZlecGUID;
						
						SET @a01 = @aKwotaNettoWstepnaTmp;
						SET @a02 = @Zaliczka;
						-- SET @a03 = @aKwotaNettoWstepnaTmp;
						
						if _Param_F > '2021-12-31' and @UwzglednijPrzesuniecieZal and @RezygnPrzesunZal = 0 then
						
							if @CzyStosowacRozporzadzKwota <= @MaxRezygnPrzesunZalKwota then

								IF (@ZwolnienieOdPodatku26Lat = 1) then
									SET @aZaliczkaHipotetyczna = 0;
								ELSE
									SET @aZaliczkaHipotetyczna = @ZaliczkaHipotetycznaZapis;
								END IF;
								
								if (@aZaliczkaHipotetyczna < @Zaliczka) then
									SET @ZaliczkaOdroczona = @Zaliczka - @aZaliczkaHipotetyczna;
									SET @Zaliczka = @aZaliczkaHipotetyczna;
								ELSEIF @aZaliczkaHipotetyczna > @Zaliczka then
									SET @aDoPrzerzucenia = LEAST(@aZaliczkaHipotetyczna - @Zaliczka, @SUMZaliczkaOdroczona);
									SET @Zaliczka = @Zaliczka + @aDoPrzerzucenia;
									SET @ZaliczkaOdroczona = -@aDoPrzerzucenia;
								END IF;
							else
							-- przekroczył kwotę w miesiącu i muszę skorygować czyli cofnąc odroczenie zalczki czyli zwiększyć zaliczkę na tym zapisie
								if @SUMZaliczkaOdroczona <> 0 then
									SET @ZaliczkaOdroczona = -@SUMZaliczkaOdroczona;
									SET @aPierwotnaZaliczkaTmp = @Zaliczka;
									SET @Zaliczka = @Zaliczka + @SUMZaliczkaOdroczona;
												--  20         20   + 500
									if @Zaliczka > (@aKwotaNettoWstepnaTmp + @aPierwotnaZaliczkaTmp) then
												--  520             100                      20   
										SET @aMogePrzerzucic = FLOOR(@aKwotaNettoWstepnaTmp);
										SET @Zaliczka = @aPierwotnaZaliczkaTmp + @aMogePrzerzucic;
										SET @ZaliczkaOdroczona = -@aMogePrzerzucic;
									end IF;
								end IF;
							end IF;
						end if;
						
						UPDATE sec.prace_zlecone z SET
							z.Zaliczka = @Zaliczka,
							z.ZaliczkaOdroczona = @ZaliczkaOdroczona
						WHERE	z.GUID = @_ZlecGUID
						; 
						
						SELECT (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab)
										- z.RazemSkladkiZleceniobiorcy
										- z.SklKasaChorychZleceniobPobr
										- z.Zaliczka
						INTO @aKwotaNettoWstepnaTmp
						FROM sec.prace_zlecone z
						WHERE z.GUID = @_ZlecGUID
						;
						
						set @d01 = @aKwotaNettoWstepnaTmp;
						
						/*
						SELECT (z.ZaZlecenie + kwota_za_UW + z.ZasChorRazem + z.ZasMacierz + z.ZasRehab),
										z.RazemSkladkiZleceniobiorcy,
										z.SklKasaChorychZleceniobPobr,
										z.Zaliczka
						INTO @c01, @c02, @c03, @c04
						FROM sec.prace_zlecone z
						WHERE z.GUID = @_ZlecGUID
						;
						*/
						
						if (@Zaliczka > @aKwotaNettoWstepnaTmp) and (@ZaliczkaOdroczona<0) then
							SET @aNadwyzkaZaliczki = @Zaliczka - floor(@aKwotaNettoWstepnaTmp);
							SET @Zaliczka = floor(@aKwotaNettoWstepnaTmp);
							SET @aKwotaNettoWstepnaTmp = 0;
							SET @ZaliczkaOdroczona = @ZaliczkaOdroczona + @aNadwyzkaZaliczki;
						-- else
							-- SET @aKwotaNettoWstepnaTmp = @aKwotaNettoWstepnaTmp - @Zaliczka;
						END IF;
						
						UPDATE sec.prace_zlecone z SET
							z.KwotaNetto = IF(@aKwotaNettoWstepnaTmp > 0, @aKwotaNettoWstepnaTmp, 0),
							z.Zaliczka = @Zaliczka,
							z.ZaliczkaOdroczona = @ZaliczkaOdroczona,
							z.DoWyplaty  = @aKwotaNettoWstepnaTmp
								- z.InnePotr + z.InneDod +z.InneZasilkZUS - z.PPKskladkaPracow - z.PotrDodUbezpMedyczneZlec
						WHERE	z.GUID = @_ZlecGUID
						; 
							
					END IF;
					
					SELECT KwotaNetto INTO @_KwotaNettoSec FROM sec.prace_zlecone WHERE GUID = @_ZlecGUID;
					SET @_ZaZlecenieLast = @_ZaZlecenie; -- je?li to by?a ostatnia p?tla to chc? dok?adnie t? warto?? a nie powi?kszon?
					
					IF (@_netto_brutto_kwotaSec <> @_KwotaNettoSec) THEN
					  SET @_ZaZlecenie =  _Rnd(@_ZaZlecenie + (@_netto_brutto_kwotaSec-@_KwotaNettoSec),2);				
					END IF;
					set @infoSec = concat(ifnull(@infoSec, ''), ' nbk: ',@_netto_brutto_kwotaSec, 'KN: ',@_KwotaNettoSec, 'zz: ',@_ZaZlecenie, '<BR>' );
					SET @countSecU = @countSecU +1;
				UNTIL @_KwotaNettoSec >= @_netto_brutto_kwotaSec || _netto_brutto = 0 || @countSecU = 500 END REPEAT;

				IF (_netto_brutto = 1 && @_ProporcjaNB != 0) THEN
					SET @_ZaZlecenie = _Rnd(@_ZaZlecenieLast*@_ProporcjaNB, 2);
					SET @_extra_wynagr = @_ZaZlecenieLast - @_ZaZlecenie;
					UPDATE sec.prace_zlecone SET ZaZlecenie = @_ZaZlecenie, kwota_za_UW = @_extra_wynagr WHERE GUID = @_ZlecGUID; 									
					REPLACE INTO sec.place_skladniki (GUID, GUID_definicja_skladnika_placy, GUID_zapisu_placowego, kwota, nomkwota, RodzajSkladnika)
					VALUES(concat('KO-',md5(concat(_Param_D, _Param_C, _Param_B, _Param_A, 'Z_1'))), 'Z_1', @_ZlecGUID, @_ZaZlecenie, @_ZaZlecenie , 0); 					
				END IF;
		
		-- brutto do netto end;				
				
				
					-- sposob wyplaty
					SET _SQLText = '
						update sec.prace_zlecone z, sec.Pracownicy k
						set	
							z.wyplataprzelewem = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), z.dowyplaty, 0),
							z.wyplatagotowka   = if ((k.czycosprzelewem=1 and length(k.nrrachunku) > 0), 0, z.dowyplaty)					
						where z.guid = ''#_ZlecGUID#'' and z.guid_pracownika = k.GUID;
						';
				
					SET _SQLText = REPLACE(_SQLText, '#_ZlecGUID#', @_ZlecGUID);			
					SET @_SQLText_wypl = _SQLText;		
					CALL _ExecuteCmd(_SQLText, @Error);						
				END IF;  
		
	END IF;	--	IF _MODE = 'pl.nalicz.z.kart.obiektow.one.zlec'		
	
/*--------------------------------------------------------------------------------------------------------------
	'pl.nalicz.z.kart.obiektow.one.zlec.skladki'
		Naliczenie skladek dla jednego zlecenia
		Parametry
		_Param_A	Rok
		_Param_B	Miesiac
		_Param_C	GUID pracownika
		_Param_D    GUID zlecenia
		_Param_E VARCHAR(50)	  -- rozliczenie wg
		_Param_F
		
		CALL pl_gratyfikacje_tools_arg7('pl.nalicz.z.kart.obiektow.one.zlec.skladki', '2011', '', '', 'GUID_Zlec', '1','');
--------------------------------------------------------------------------------------------------------------*/
	IF _MODE = 'pl.nalicz.z.kart.obiektow.one.zlec.skladki' THEN
      -- @pl.gratyf.za_zlecenie	
	BEGIN
		-- DECLARE _Podstawa  DOUBLE;
		-- DECLARE _Dekl  	   DOUBLE;
		DECLARE _PodstE DOUBLE;
		DECLARE _PodstR DOUBLE;
		DECLARE _PodstW DOUBLE;
		DECLARE _PodstC DOUBLE;
		DECLARE _PodstF DOUBLE;
		
		-- DECLARE _SumaZ DOUBLE;
		-- DECLARE _SumaP DOUBLE;
		-- DECLARE _KwotaPoprz DOUBLE;
		-- DECLARE _SumaPodstCW DOUBLE;
		-- DECLARE _NaliczacZUS INTEGER;
		DECLARE _PodlUbezpZdrowot INTEGER; -- to jest niezalezne od "NaliczacZUS"
		
		SET @ZwolnienieOdPodatku26Lat = IFNULL(@ZwolnienieOdPodatku26Lat,0); -- wewnętrzna funkcja jeśli będzie wołana skąś gdzie nie ma zmiennej to niech będzie 0
		SET @ZwolnienieOdPodatkuDR = IFNULL(@ZwolnienieOdPodatkuDR,0);
		SET @ZwolnienieOdPodatkuPE = IFNULL(@ZwolnienieOdPodatkuPE,0);
		
		CALL _IReg_Get('Place2003\\Progi_podatkowe_stawki_ZUS', 'Max_podstawa_ubezp_emeryt', _Param_A, 'FLOAT', @MaxPodstUbezpEm, 0);   -- Max_podstawa_ubezp_emeryt 0
							
		SET @pl.zlec.skladki_Podstawa = 0.0;
		SET @pl.zlec.skladki_PodstC = 0.0;
		SET @pl.zlec.skladki_PodstW = 0.0;
		SET @pl.zlec.skladki_PodstE = 0.0;
		SET @pl.zlec.skladki_PodstR = 0.0;
		
		SET @pl.zlec.skladki_NaliczacZUS = 0;
		SET @pl.zlec.skladki_PodlUbezpZdrowot = 0;
		SET @_PodlChorobUbzp = 0;
		SET @_PodlWypadkUbzp = 0;
		SET @pl.zlec.skladki_Dekl = 0.0;
		
		SET _SQLText = 
		'SELECT 
			IF(DeklarowanaPodstUbezpiecz>0, DeklarowanaPodstUbezpiecz, ZaZlecenie+kwota_za_UW) AS podst, 
			 DeklarowanaPodstUbezpiecz  
			 INTO @pl.zlec.skladki_Podstawa, @pl.zlec.skladki_Dekl
		FROM #DB_ZLEC#.prace_zlecone 
		WHERE 
			GUID = ''#_Param_D#''
		;		
		'
		;

		SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);	
		SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);			
		SET @_SQLText = _SQLText;		
		CALL _ExecuteCmd(_SQLText, @Error);

		SET _SQLText = 			
		'SELECT
				IF(Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe, 1, 0) AS NaliczacZus,
				IF((Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe) AND (Z.PodlChorobUbzp OR (Z.Dobr_UbzpChorobowe=1 AND Z.Dobr_UchorobOd <= ''#DataWypl#'')), 1, 0) AS PodlChorobUbzp, 
				IF((Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe) AND Z.PodlWypadkUbzp, 1, 0) AS PodlWypadkUbzp, 
				IF((!ISNULL(Z.DataPowstObowUbezpZdrow) OR Z.Dobr_UbzpZdrowotne=1) AND Z.ZgloszZUA_ZZA IN (1,5) AND ((Z.KodKasyChorych <> "") AND !ISNULL(Z.KodKasyChorych)), 1, 0) AS PodlUbezpZdrowot 
				INTO @pl.zlec.skladki_NaliczacZUS, @_PodlChorobUbzp, @_PodlWypadkUbzp, @pl.zlec.skladki_PodlUbezpZdrowot
			FROM #DB_ZLEC#.pracownicy_ZUS Z 
			WHERE Z.GUID_Pracownika = ''#_Param_C#''	
		;		
		'
		;	
			
		
		SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);	
		SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);	
		SET _SQLText = REPLACE(_SQLText, '#DataWypl#', _varDATE(_Param_F));		
		
		SET @_SQLText = _SQLText;		
		CALL _ExecuteCmd(_SQLText, @Error);
		
		SET _SQLText = 
		'	update #DB_ZLEC#.prace_zlecone z, #DB_ZLEC#.Pracownicy k
			set 
				NaliczacZus = @pl.zlec.skladki_NaliczacZUS, PodlUbezpChorob = @_PodlChorobUbzp, PodlUbezpWypadk = @_PodlWypadkUbzp, PodlUbezpZdrowot = @pl.zlec.skladki_PodlUbezpZdrowot
			where z.GUID = ''#_Param_D#'' and z.guid_pracownika = k.guid;
		';
		SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);	
		SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);			
		SET @_SQLText = _SQLText;		
		CALL _ExecuteCmd(_SQLText, @Error);
				
		-- przeniose ni?ej dla tego ?e kto? mo?e mie? naliczane same zdrowotne ! IF @pl.zlec.skladki_NaliczacZUS THEN
		
		--	set @szambo = 'naliczamy ZUS';
		    DROP TEMPORARY TABLE IF EXISTS `tt_skladki_place_do_zlec`;
			
			SET _SQLText =  
			'CREATE TEMPORARY TABLE `tt_skladki_place_do_zlec`
				SELECT ''#_Param_D#'' AS GUID,	
			  IFNULL(SUM(ZusFPprc), 0) as SUMZusFPprc, IFNULL(SUM(ZUSFEPPrc), 0) as ZUSFEPPrc, 
			  IFNULL(SUM(ZusFGprc), 0) as SUMZusFGprc, IFNULL(SUM(PodstFemerytalny), 0) as SUMPodstFemerytalny, 
			  IFNULL(SUM(PodstFrentowy), 0) as SUMPodstFrentowy,  
			  IFNULL(SUM(PodstFchorobowy), 0) as SUMPodstFchorobowy, 
			  IFNULL(SUM(PodstFwypadkowy), 0) as SUMPodstFwypadkowy, 
			  IFNULL(SUM(PodstKasaChorych), 0) as SUMPodstKasaChorych, 
			  IFNULL(SUM(SklFemerytalnyPracow), 0) as SUMSklFemerytalnyPracow, 
			  IFNULL(SUM(SklFrentowyPracow), 0) as SUMSklFrentowyPracow, 
			  IFNULL(SUM(SklFchorobowyPracow), 0) as SUMSklFchorobowyPracow, 
			  IFNULL(SUM(SklFwypadkowyPracow), 0) as SUMSklFwypadkowyPracow, 
			  IFNULL(SUM(SklKasaChorychPracowPobr), 0) as SUMSklKasaChorychPracowPobr, 
			  IFNULL(SUM(SklKasaChorOdlicz), 0) as SUMSklKasaChorOdlicz, 
			  IFNULL(SUM(SklFemerytalnyPracod), 0) as SUMSklFemerytalnyPracod, 
			  IFNULL(SUM(SklFrentowyPracod), 0) as SUMSklFrentowyPracod, 
			  IFNULL(SUM(SklFchorobowyPracod), 0) as SUMSklFchorobowyPracod, 
			  IFNULL(SUM(SklFwypadkowyPracod), 0) as SUMSklFwypadkowyPracod, 
			  IFNULL(SUM(SklKasaChorychPracod), 0) as SUMSklKasaChorychPracod, 
			  IFNULL(SUM(PodstDlaZUSFundPracy), 0) as SUMPodstDlaZUSFundPracy, 
			  IFNULL(SUM(PodstDlaZusFGSP), 0) as SUMPodstDlaZusFGSP, 
			  IFNULL(SUM(ZusFunduszPracy), 0) as SUMZusFunduszPracy, 
			  IFNULL(SUM(ZusFunduszGwarancyjny), 0) as SUMZusFunduszGwarancyjny, 
			  IFNULL(SUM(SkladkaFEP), 0) as SUMSkladkaFEP,  
			  IFNULL(SUM(PPKskladkaPracow), 0) as SUMPPKskladkaPracow,
		    IFNULL(SUM(PPKskladkaPracod), 0) as SUMPPKskladkaPracod,
		    IFNULL(SUM(SklKasaChorOdliczHipot), 0) as SUMSklKasaChorOdliczHipot
			  
			  FROM #DB_ZLEC#.place 
		
			  WHERE GUID_pracownika = ''#_Param_C#'' and Month(ifnull(DataWyplDoDeklar, datawyplaty)) = #_Param_B# 
			  AND deleted = 0 AND Year(ifnull(DataWyplDoDeklar, datawyplaty)) = #_Param_A#
			  AND KodTytUbezp = (SELECT KodTytUbezp FROM #DB_ZLEC#.prace_zlecone WHERE GUID = ''#_Param_D#'') AND zapis_koryg_skl = 0
			;
			'
			;  -- qrPlaceSkladkiZaMiesiacDoZlecen
			
			SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
			SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
			SET _SQLText = REPLACE(_SQLText, '#_Param_B#', _Param_B);
			SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);			
			SET @_SQLText = _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);
			
			-- set @szambo_place = _SQLText;
			-- set @szambo_place_error = @Error;
			
			DROP TEMPORARY TABLE IF EXISTS `tt_skladki_zlec_do_zlec`;
			
			SET _SQLText =  
			'CREATE TEMPORARY TABLE `tt_skladki_zlec_do_zlec`
				SELECT ''#_Param_D#'' AS GUID,	
			  IFNULL(SUM(PodstFemerytalny), 0) AS SumaPodstEmeryt, 
			  IFNULL(SUM(PodstFrentowy), 0) AS SumaPodstRent, IFNULL(SUM(PodstFchorobowy), 0) AS SumaPodstChorob, 
			  IFNULL(SUM(PodstFwypadkowy), 0) AS SumaPodstWypadk, IFNULL(SUM(PodstKasaChorych), 0) AS SumaPodstKCh, 
			  
			  IFNULL(SUM(SklFemerytalnyZleceniob), 0) AS SumaSklEmerytZB, IFNULL(SUM(SklFrentowyZleceniob), 0) AS SumaSklRentZB, 
			  IFNULL(SUM(SklFchorobowyZleceniob), 0) AS SumaSklChorobZB, IFNULL(SUM(SklFwypadkowyZleceniob), 0) AS SumaSklWypadkZB, 
			  IFNULL(SUM(SklKasaChorychZleceniobPobr), 0) AS SumaSklKChPobrZB, IFNULL(SUM(SklKasaChorychZleceniobOdlicz), 0) AS SumaSklKChOdlZB, 
			  IFNULL(SUM(RazemSkladkiZleceniobiorcy), 0) AS SumaSklRazemZB, 
			  
			  IFNULL(SUM(SklFemerytalnyZleceniod), 0) AS SumaSklEmerytZD, IFNULL(SUM(SklFrentowyZleceniod), 0) AS SumaSklRentZD, 
			  IFNULL(SUM(SklFchorobowyZleceniod), 0) AS SumaSklChorobZD, IFNULL(SUM(SklFwypadkowyZleceniod), 0) AS SumaSklWypadkZD, 
			  IFNULL(SUM(SklKasaChorychZleceniod), 0) AS SumaSklKChZD, IFNULL(SUM(RazemSkladkiZleceniodawcy), 0) AS SumaSklRazemZD, 
			
			  IFNULL(SUM(SklFundPracy), 0) AS SumaSklFundPracy, IFNULL(SUM(SklFGSP), 0) AS SumaSklFGSP, 
			  IFNULL(SUM(PodstFpFGSP), 0) AS SumaPodstFpFGSP, 
			  IFNULL(SUM(PodstFemerytBezOgr), 0) as SumaPodstFemerytBezOgr,		
			  IFNULL(SUM(PPKskladkaPracow), 0)  as SumaPPKskladkaPracow,
			  IFNULL(SUM(PPKskladkaPracod), 0)  as SumaPPKskladkaPracod,
			  IFNULL(SUM(SklKCZlecOdliczHipot), 0) as SumaSklKCZlecOdliczHipot
			  
		    FROM #DB_ZLEC#.prace_zlecone WHERE GUID_Pracownika = ''#_Param_C#'' AND datawyplaty >= @DataOd AND datawyplaty <= @DataDo 
            AND GUID <> ''#_Param_D#'' and KodTytUbezp =(SELECT KodTytUbezp FROM #DB_ZLEC#.prace_zlecone WHERE GUID = ''#_Param_D#'') and deleted = 0  
			;
			'
			;
			
			SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
			SET _SQLText = REPLACE(_SQLText, '#_Param_B#', _Param_B);
			SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);		
			SET @_SQLText = _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);
			
			-- set @szambo_zlec = _SQLText;
			-- set @szambo_zlec_error = @Error;
			
		IF @pl.zlec.skladki_NaliczacZUS THEN
			SET @pl.zlec.skladki_SumaZ = 0.0;
		
			SET _SQLText = 
			'SELECT 
				IFNULL(SUM(PodstFemerytalny), 0) AS suma 				
				INTO @pl.zlec.skladki_SumaZ
			FROM #DB_ZLEC#.prace_zlecone 
			WHERE GUID_Pracownika = ''#_Param_C#'' AND GUID <> ''#_Param_D#'' and deleted = 0 
				AND datawyplaty >= ''#_Param_A#-01-01'' AND datawyplaty <= LAST_DAY(''#_Param_A#-#_Param_B#-01'')
			;		
			'
			;			

			SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
			SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
			SET _SQLText = REPLACE(_SQLText, '#_Param_B#', _Param_B);	
			SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);	
			SET @_SQLText = _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);
			
			SET @pl.zlec.skladki_SumaP = 0.0;
			
			SET _SQLText = 
			'SELECT 
				IFNULL(SUM(PodstFemerytalny), 0) AS suma
				INTO @pl.zlec.skladki_SumaP
			FROM #DB_ZLEC#.place
			WHERE GUID_Pracownika = ''#_Param_C#'' AND GUID <> ''#_Param_D#'' and deleted = 0 
				AND datawyplaty >= ''#_Param_A#-01-01'' AND datawyplaty <= LAST_DAY(''#_Param_A#-#_Param_B#-01'')
			;		
			'
			;			
			SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
			SET _SQLText = REPLACE(_SQLText, '#_Param_A#', _Param_A);
			SET _SQLText = REPLACE(_SQLText, '#_Param_B#', _Param_B);	
			SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);	
			SET @_SQLText = _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);
						
			IF @pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ + @pl.zlec.skladki_Podstawa > @MaxPodstUbezpEm  THEN
			    SET @pl.zlec.skladki_PodstE = @MaxPodstUbezpEm - (@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ);
			ELSE
       SET @pl.zlec.skladki_PodstE = @pl.zlec.skladki_Podstawa;
			END IF; 
			
			SET @pl.zlec.skladki_PodstR = IF(@pl.zlec.skladki_Dekl > 0, @pl.zlec.skladki_Podstawa, @pl.zlec.skladki_PodstE);
			
			SET @pl.zlec.skladki_PodstW = _Rnd(@pl.zlec.skladki_Podstawa, 2);
			SET @pl.zlec.skladki_PodstC = _Rnd(@pl.zlec.skladki_Podstawa, 2);
			SET @pl.zlec.skladki_PodstF = _Rnd(@pl.zlec.skladki_Podstawa, 2);
		
			SET @pl.zlec.skladki_SumaPodstCW = 0;
			SELECT 
				(select ifnull(sum(z.podstfchorobowy), 0) from prace_zlecone z 
				where z.guid <> _Param_D and month(z.datawyplaty) = _Param_B and z.rok = _Param_A and z.deleted = 0 and z.guid_pracownika = _Param_C 
				) + 
				(select ifnull(sum(p.podstfchorobowy), 0) from place p 
				where p.rok = _Param_A and month(p.datawyplaty) = _Param_B and p.deleted = 0 and p.guid_pracownika = _Param_C
				) INTO @pl.zlec.skladki_SumaPodstCW; 
			
			SET @pl.zlec.skladki_KwotaPoprz = 0;
			select ifnull(KwotaZpoprzZaklDoSkl3proc, 0) INTO @pl.zlec.skladki_KwotaPoprz from Pracownicy where GUID = _Param_C;
		
			CALL _IReg_Get('Place2003\\Progi_podatkowe_stawki_ZUS', 'Skladka_na_FP', _Param_A, 'FLOAT', @Zlec_Skladka_na_FP, 0);   -- Max_podstawa_ubezp_emeryt 0
		
            -- glowny update  (emeryt i rentowe naliczamy tylko gdy nie przekroczono max. podstawy ubezpieczenia)   SumaSklEmerytZB
			SET _SQLText =  
			'UPDATE #DB_ZLEC#.prace_zlecone Z
				SET
			
			Z.PodstUbSpolNarastAktualna = IF(NaliczacZus, @pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ, 0),
			Z.PodstFemerytalny 			= IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, @pl.zlec.skladki_PodstE, 0),
			Z.PodstFrentowy    			= IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, @pl.zlec.skladki_PodstR, 0)
			
			WHERE Z.GUID = 				''#_Param_D#''
			;'	;
								
			SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);
			SET @_SQLText = _SQLText;		
			CALL _ExecuteCmd(_SQLText, @Error);
			
		-- uwzgledniamy ustawienia w kartotece pracownikow
			SET @NieNaliczajSkladekER = false;
			SET _SQLText =  			
				'SELECT (TypNaliczaniaSkladek <> 0) INTO @NieNaliczajSkladekER FROM #DB_ZLEC#.Pracownicy WHERE GUID = ''#_Param_C#'' ;' ;
			SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
			SET _SQLText = REPLACE(_SQLText, '#_Param_C#', _Param_C);
			SET @_SQLText = _SQLText;		
			CALL _ExecuteCmd(_SQLText, @Error);
				
			-- żeby w następnym zapytaniu móc używać PodstFemerytBezOgr
			SET _SQLText =  		
				' UPDATE #DB_ZLEC#.prace_zlecone Z SET Z.PodstFemerytBezOgr = if(@NieNaliczajSkladekER,0 , _Rnd(@pl.zlec.skladki_Podstawa, 2)) WHERE Z.GUID = ''#_Param_D#''; ';
			SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);
			SET @_SQLText = _SQLText;		
			CALL _ExecuteCmd(_SQLText, @Error);									
			
			
			SET _SQLText =  			
			'UPDATE #DB_ZLEC#.prace_zlecone Z, tt_skladki_place_do_zlec tp, tt_skladki_zlec_do_zlec tz
				SET						
			Z.SklFemerytalnyZleceniob   = IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, 
			  _Rnd((tp.SUMPodstFemerytalny  + tz.SumaPodstEmeryt + @pl.zlec.skladki_PodstE) *
			  Z.ProcFemerytalnyZleceniob/100, 2) - (select tp.SUMSklFemerytalnyPracow  + tz.SumaSklEmerytZB), 	  0),
			Z.SklFemerytalnyZleceniod	= IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, 
			 _Rnd((tp.SUMPodstFemerytalny + tz.SumaPodstEmeryt + @pl.zlec.skladki_PodstE) *
			  Z.ProcFemerytalnyZleceniod/100, 2) - (tp.SUMSklFemerytalnyPracod +  tz.SumaSklEmerytZD), 0),
			Z.SklFrentowyZleceniob   	= IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, 
			  _Rnd((tp.SUMPodstFrentowy + tz.SumaPodstRent + @pl.zlec.skladki_PodstR) *
			  Z.ProcFrentowyZleceniob/100, 2) - (tp.SUMSklFrentowyPracow + tz.SumaSklRentZB),	  0),
			Z.SklFrentowyZleceniod   	= IF(@pl.zlec.skladki_SumaP + @pl.zlec.skladki_SumaZ < @MaxPodstUbezpEm, 
			  _Rnd2((tp.SUMPodstFrentowy + tz.SumaPodstRent + @pl.zlec.skladki_PodstR) *
			  Z.ProcFrentowyZleceniod/100) - (tp.SUMSklFrentowyPracod +  tz.SumaSklRentZD), 	  0),
			Z.PodstFwypadkowy           = IF(Z.PodlUbezpWypadk, @pl.zlec.skladki_PodstW, 0),   
			Z.SklFwypadkowyZleceniod	= IF(Z.PodlUbezpWypadk, _Rnd((tp.SUMPodstFwypadkowy + tz.SumaPodstWypadk + @pl.zlec.skladki_PodstW) *
			  Z.ProcFwypadkowyZleceniod/100, 2) - (tp.SUMSklFwypadkowyPracod + tz.SumaSklWypadkZD), 0), 
			Z.PodstFchorobowy           = IF(Z.PodlUbezpChorob, @pl.zlec.skladki_PodstC, 0),   
			Z.SklFchorobowyZleceniob	= IF(Z.PodlUbezpChorob, _Rnd((tp.SUMPodstFchorobowy + tz.SumaPodstChorob + @pl.zlec.skladki_PodstC) *
			  Z.ProcFchorobowyZleceniob/100, 2) - (tp.SUMSklFchorobowyPracow + tz.SumaSklChorobZB), 0), 
			Z.PodstFpFGSP				= IF(Z.NaliczFGSP OR Z.NaliczFP, @pl.zlec.skladki_PodstF, 0),
			Z.SklFundPracy		        = IF(Z.NaliczFP AND (Z.ZaZlecenie + @pl.zlec.skladki_SumaPodstCW + @pl.zlec.skladki_KwotaPoprz > @Zlec_Skladka_na_FP), 
			  _Rnd(@pl.zlec.skladki_PodstF * ProcFPracy/100, 2), 0),
			Z.SklFGSP				    = IF(Z.NaliczFGSP, _Rnd(@pl.zlec.skladki_PodstF * ProcFGSP/100, 2), 0),
			Z.PPKskladkaPracow 			= _Rnd((_Rnd((tp.SUMPodstFchorobowy + tz.SumaPodstFemerytBezOgr + Z.PodstFemerytBezOgr) * 
											  Z.PPKprocSkladkaPracow/100,2)) - (tp.SUMPPKskladkaPracow + tz.SumaPPKskladkaPracow), 2),
			Z.PPKskladkaPracod 			= _Rnd((_Rnd((tp.SUMPodstFchorobowy + tz.SumaPodstFemerytBezOgr + Z.PodstFemerytBezOgr) * 
											  Z.PPKprocSkladkaPracod/100, 2)) - (tp.SUMPPKskladkaPracod + tz.SumaPPKskladkaPracod), 2)				
			WHERE Z.GUID = 				''#_Param_D#''
			;';
			
			SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);
			SET @_SQLText = _SQLText;
			
			 -- set @szambo2 = @_SQLText;
			
			CALL _ExecuteCmd(_SQLText, @Error);
			
			-- set @szambo2error = @Error;
			
		END IF;		-- IF _NaliczacZUS THEN

		IF @pl.zlec.skladki_PodlUbezpZdrowot THEN   -- robimy jako oddzielne zapytanie, bo korzystamy tu z wyliczonych skladek na zapisie
			SET _SQLText =  
			'UPDATE #DB_ZLEC#.prace_zlecone Z, tt_skladki_place_do_zlec tp, tt_skladki_zlec_do_zlec tz
				SET
			Z.PodstKasaChorych 				= Z.ZaZlecenie + Z.kwota_za_UW - (Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob),			
			Z.SklKasaChorychZleceniobPobr   = _Rnd( ((Z.ZaZlecenie + Z.kwota_za_UW - (Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob))+ 
			  (tz.SumaPodstKCh + tp.SUMPodstKasaChorych)) * ProcKasaChorychZleceniobPobr/100 -
			  ( tp.SUMSklKasaChorychPracowPobr + tz.SumaSklKChPobrZB ), 2), 
			Z.SklKasaChorychZleceniobOdlicz = _Rnd( ((Z.ZaZlecenie + Z.kwota_za_UW - (Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob))+ 
			  (tz.SumaPodstKCh + tp.SUMPodstKasaChorych)) * ProcKasaChorychZleceniobOdlicz/100 -
			  ( tp.SUMSklKasaChorOdlicz + tz.SumaSklKChOdlZB), 2),

			  Z.SklKCZlecOdliczHipot = _Rnd( ((Z.ZaZlecenie + Z.kwota_za_UW  - (Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob))+ 
				  (tz.SumaPodstKCh + tp.SUMPodstKasaChorych)) * ProcKasaChorOdliczHipot/100 -
				  ( tp.SUMSklKasaChorOdliczHipot + tz.SumaSklKCZlecOdliczHipot), 2) 			  
			  
			WHERE Z.GUID = 				''#_Param_D#''  
			;
			'
			;
											
			SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
			SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);
			SET @_SQLText = _SQLText;
			
			CALL _ExecuteCmd(_SQLText, @Error);
								
		END IF;		
		
		--  zapamietujemy oryg.(nominalna) wartosc skladki oraz wyliczamy skladki lacznie (bez zdrowotnego)
		SET _SQLText =  
			'UPDATE #DB_ZLEC#.prace_zlecone Z
			 SET
				Z.SklKChZleceniobOdliczNomin = Z.SklKasaChorychZleceniobOdlicz,
				Z.SklKChZleceniobPobrNomin   = Z.SklKasaChorychZleceniobPobr,
				Z.RazemSkladkiZleceniobiorcy = Z.SklFemerytalnyZleceniob + Z.SklFrentowyZleceniob + Z.SklFchorobowyZleceniob,
				Z.RazemSkladkiZleceniodawcy  = Z.SklFemerytalnyZleceniod + Z.SklFrentowyZleceniod + Z.SklFwypadkowyZleceniod
			 WHERE Z.GUID = 	''#_Param_D#''  
			;
			'
			;		
		
		SET _SQLText = REPLACE(_SQLText, '#DB_ZLEC#', _Param_E);
		SET _SQLText = REPLACE(_SQLText, '#_Param_D#', _Param_D);
		SET @_SQLText = _SQLText;
		CALL _ExecuteCmd(_SQLText, @Error);
		
		DROP TEMPORARY TABLE IF EXISTS `tt_skladki_place_do_zlec`;
		DROP TEMPORARY TABLE IF EXISTS `tt_skladki_zlec_do_zlec`;
		
    END;	
	
	END IF;  --	IF _MODE = 'pl.nalicz.z.kart.obiektow.one.zlec.skladki'	
	
/*------------------------------------------------------------------------------------	
	'pl.kart.obiektow.przepisz.dane.pracownika.one.zlec'
		Przepisanie danych z karty pracownika do zlecenia  (dawne DBPlacesPlaceZlec.PrzepiszDanePrac)
		Parametry
		_Param_A	Rok
		_Param_B	Miesiac
		_Param_C	GUID pracownika
		_Param_D    GUID zlecenia
		
		CALL pl_gratyfikacje_tools_arg7('pl.kart.obiektow.przepisz.dane.pracownika.one.zlec', 'Prac1');
-------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl.kart.obiektow.przepisz.dane.pracownika.one.zlec' THEN
		
		SELECT ValueN INTO @ProcentPodatkuHipot FROM IReg where idkey='Procent_podatku_od_umow_zlecen' and rok=2021;

		IF (_Param_E = 'ms') THEN
			UPDATE ms.prace_zlecone g, ms.Pracownicy p, ms.pracownicy_ZUS z, ms.osoby o
			SET 
				g.nazwisko         = o.nazwisko,
				g.KodTytUbezp      = p.KodUbezpUmZlecenie,
				g.ProcentPodatku   = p.ProcPodOdZlecen,
				g.ProcentPodatkuHipot = @ProcentPodatkuHipot,
				g.AnalitykaFK      = ifnull(p.AnalitykaFK, ''),
				g.Kategoria_Idn    = p.KategoriaPracownicza,
				g.naliczFGSP	   = p.naliczFGSP_zlec,
				g.naliczFP		   = p.naliczFP_zlec,
				g.US_GUID		   = p.KluczUrzeduSkarbowego,
				g.calosc_przelewem = p.CzyCosPrzelewem,
				-- define tego si? ju? nie stosuje g.KluczWzoruPK     = if((SELECT ValueB FROM IReg WHERE idkey = 'Inicjacja_wzoru_PK_zlecenia')=1, p.KluczWzoruPK_zlec, '') 	
				g.wzordekr		   = p.wzordekr_zlec,
				g.GUID_division = p.GUID_division
				-- {$IFDEF KADRY_LISTA_UMOW_ZLECEN}  wl. dla Security - przepisz z akt. um.zlec
			WHERE g.GUID = _Param_D AND p.GUID = g.GUID_pracownika AND p.GUID = z.GUID_Pracownika AND o.GUID = p.GUID;
			
			-- {$IFDEF KADRY_LISTA_UMOW_ZLECEN}
			DROP TEMPORARY TABLE IF EXISTS `sel_umowa_zlecenie`;
			
			CREATE TEMPORARY TABLE `sel_umowa_zlecenie`  AS
			SELECT * FROM ms.umowa_zlecenie  
			WHERE GUID_Pracownika = _Param_C AND CzyUmowaAkt order by DataDo desc limit 1;
	
			SELECT count(*) INTO _I FROM sel_umowa_zlecenie;
			
			IF _I = 1 THEN 
			
				UPDATE ms.prace_zlecone g, sel_umowa_zlecenie t
				SET 
				-- g.MZ_Idn = t.MZ_Idn, -- wy??czam ma by? ustawiane na podstaie karty obiektu
				g.RodzajRyczaltu = t.RodzajRyczaltu,
				g.NrZlecenia = t.NrZlecenia,
				g.PracaStr = t.PracaStr,
				g.DataZawarcia = t.DataZawarcia 
				-- ,
				-- g.NaliczacZus = t.NaliczacZus,
				-- g.PodlUbezpChorob = t.PodlUbezpChorob,
				-- g.PodlUbezpWypadk = t.PodlUbezpWypadk,
				-- g.PodlUbezpZdrowot = t.PodlUbezpZdrowot
				WHERE  g.GUID_pracownika = _Param_C and t.GUID_pracownika = g.GUID_pracownika and g.GUID = _Param_D;				
			ELSE	
				UPDATE ms.prace_zlecone g
				SET g.NrZlecenia = '###########',
					g.DataOd     = concat(_Param_A,'-',LPAD(_Param_B,2,0),'-01')
				WHERE g.GUID_pracownika = _Param_C and g.GUID = _Param_D;
			END IF;
			
-- PPK BEGIN ms
			SET @PPKprocSkladkaPracow = 0;
			SET @PPKprocSkladkaPracod = 0;		
			SET @PPKrownaSkladkaPracodawca = 0;		

			SELECT 
				IF(pppk.aktywnyPPK = 1, pppk.procSkladPodstPPKpracow+pppk.procSkladDodPPKpracow, 0) AS PPKprocSkladkaPracow, 
				IF(pppk.aktywnyPPK = 1, pppk.procSkladPodstPPKpracod+pppk.procSkladDodPPKpracod, 0) AS PPKprocSkladkaPracod 
			INTO @PPKprocSkladkaPracow, @PPKprocSkladkaPracod
			FROM ms.pracownicy_ppk pppk, ms.prace_zlecone g 
			WHERE pppk.GUID_Pracownika = g.GUID_pracownika AND pppk.OdDnia <= @_DataWypl AND pppk.deleted = 0 AND g.GUID = _Param_D
			ORDER BY pppk.OdDnia DESC LIMIT 1;
			
			-- CALL _IReg_Get('Place2003\PPK', 'PPKrownaSkladkaPracodawca', YEAR(@_DataWypl), 'INTEGER', @PPKrownaSkladkaPracodawca, 0);
			SELECT ValueI INTO @PPKrownaSkladkaPracodawca FROM ms.IReg WHERE idkey = 'PPKrownaSkladkaPracodawca' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\PPK' AND rok = YEAR(@_DataWypl)
			;
			
			IF ( @PPKrownaSkladkaPracodawca = 1 ) THEN						
			--	CALL _IReg_Get('Place2003\PPK', 'PPKskladPodstPracod', YEAR(@_DataWypl), 'DOUBLE', @PPKskladPodstPracod, 0);
			--	CALL _IReg_Get('Place2003\PPK', 'PPKskladDodatPracod', YEAR(@_DataWypl), 'DOUBLE', @PPKskladDodatPracod, 0);			
				SELECT ValueN INTO @PPKskladPodstPracod FROM ms.IReg WHERE idkey = 'PPKskladPodstPracod' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\PPK' AND rok = YEAR(@_DataWypl)
					;
				SELECT ValueN INTO @PPKskladDodatPracod FROM ms.IReg WHERE idkey = 'PPKskladDodatPracod' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\PPK' AND rok = YEAR(@_DataWypl)
				;
				SET @PPKprocSkladkaPracod = @PPKskladPodstPracod + @PPKskladDodatPracod ;	
			END IF;
			
			UPDATE ms.prace_zlecone g
			SET 
				g.PPKprocSkladkaPracow = @PPKprocSkladkaPracow,
				g.PPKprocSkladkaPracod = @PPKprocSkladkaPracod
			WHERE g.GUID = _Param_D;
-- PPK END			

            -- czesc dla PW nr 3
			IF _Param_F >= '2022-07-01' THEN
                UPDATE ms.prace_zlecone g SET
                    g.RezygnPrzesunZal = 1,
                    g.NaliczUlgeDlaKS = 0,
                    g.ProcentPodatku = IF(g.ProcentPodatku = 17, 12, g.ProcentPodatku)
                WHERE g.GUID = _Param_D;

                SET @RezygnPrzesunZal = 1;
                    -- NaliczUlgeDlaKS
			END IF;


		ELSE  -- _Param_E = sec
			UPDATE sec.prace_zlecone g, sec.Pracownicy p, sec.pracownicy_ZUS z, sec.osoby o
			SET 
				g.nazwisko         = o.nazwisko,
				g.KodTytUbezp      = p.KodUbezpUmZlecenie,
				g.ProcentPodatku   = p.ProcPodOdZlecen,
				g.ProcentPodatkuHipot = @ProcentPodatkuHipot,
				g.AnalitykaFK      = ifnull(p.AnalitykaFK, ''),
				g.Kategoria_Idn    = p.KategoriaPracownicza,
				g.naliczFGSP	   = p.naliczFGSP_zlec,
				g.naliczFP		   = p.naliczFP_zlec,
				g.US_GUID		   = p.KluczUrzeduSkarbowego,
				g.calosc_przelewem = p.CzyCosPrzelewem,
				g.wzordekr		   = p.wzordekr_zlec		
--				g.KluczWzoruPK     = if((SELECT ValueB FROM IReg WHERE idkey = 'Inicjacja_wzoru_PK_zlecenia')=1, p.KluczWzoruPK_zlec, '') 			
				-- {$IFDEF KADRY_LISTA_UMOW_ZLECEN}  wl. dla Security - przepisz z akt. um.zlec
			WHERE g.GUID = _Param_D AND p.GUID = g.GUID_pracownika AND p.GUID = z.GUID_Pracownika AND o.GUID = p.GUID;

			DROP TEMPORARY TABLE IF EXISTS `sel_umowa_zlecenie`;
			
			CREATE TEMPORARY TABLE `sel_umowa_zlecenie`  AS
			SELECT * FROM sec.umowa_zlecenie  
			WHERE GUID_Pracownika = _Param_C AND CzyUmowaAkt order by DataDo desc limit 1;
	
			SELECT count(*) INTO _I FROM sel_umowa_zlecenie;
			
			IF _I = 1 THEN 
			
				UPDATE sec.prace_zlecone g, sel_umowa_zlecenie t
				SET 
				-- g.MZ_Idn = t.MZ_Idn, -- wy?aczam ma by? ustawiane na podstawie karty obiektu
				g.RodzajRyczaltu = t.RodzajRyczaltu,
				g.NrZlecenia = t.NrZlecenia,
				g.PracaStr = t.PracaStr,
				g.DataZawarcia = t.DataZawarcia 
				-- ,
				-- g.NaliczacZus = t.NaliczacZus  ,
				-- g.PodlUbezpChorob = t.PodlUbezpChorob,
				-- g.PodlUbezpWypadk = t.PodlUbezpWypadk,
				-- g.PodlUbezpZdrowot = t.PodlUbezpZdrowot		
				WHERE  g.GUID_pracownika = _Param_C and t.GUID_pracownika = g.GUID_pracownika and g.GUID = _Param_D;				
			ELSE	
				UPDATE sec.prace_zlecone g
				SET g.NrZlecenia = '###########',
					g.DataOd     = concat(_Param_A,'-',LPAD(_Param_B,2,0),'-01')
				WHERE g.GUID_pracownika = _Param_C and g.GUID = _Param_D;
			END IF;
			
-- PPK BEGIN sec
			SET @PPKprocSkladkaPracow = 0;
			SET @PPKprocSkladkaPracod = 0;		
			SET @PPKrownaSkladkaPracodawca = 0;		

			SELECT 
				IF(pppk.aktywnyPPK = 1, pppk.procSkladPodstPPKpracow+pppk.procSkladDodPPKpracow, 0) AS PPKprocSkladkaPracow, 
				IF(pppk.aktywnyPPK = 1, pppk.procSkladPodstPPKpracod+pppk.procSkladDodPPKpracod, 0) AS PPKprocSkladkaPracod 
				INTO @PPKprocSkladkaPracow, @PPKprocSkladkaPracod
			FROM sec.pracownicy_ppk pppk, sec.prace_zlecone g 
			WHERE pppk.GUID_Pracownika = g.GUID_pracownika AND pppk.OdDnia <= @_DataWypl AND pppk.deleted = 0 AND g.GUID = _Param_D
			ORDER BY pppk.OdDnia DESC LIMIT 1;
			
			-- CALL _IReg_Get('Place2003\PPK', 'PPKrownaSkladkaPracodawca', YEAR(@_DataWypl), 'INTEGER', @PPKrownaSkladkaPracodawca, 0);
			SELECT ValueI INTO @PPKrownaSkladkaPracodawca FROM sec.IReg WHERE idkey = 'PPKrownaSkladkaPracodawca' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\PPK' AND rok = YEAR(@_DataWypl)
			;
			
			IF ( @PPKrownaSkladkaPracodawca = 1 ) THEN						
			--	CALL _IReg_Get('Place2003\PPK', 'PPKskladPodstPracod', YEAR(@_DataWypl), 'DOUBLE', @PPKskladPodstPracod, 0);
			--	CALL _IReg_Get('Place2003\PPK', 'PPKskladDodatPracod', YEAR(@_DataWypl), 'DOUBLE', @PPKskladDodatPracod, 0);			
				SELECT ValueN INTO @PPKskladPodstPracod FROM sec.IReg WHERE idkey = 'PPKskladPodstPracod' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\PPK' AND rok = YEAR(@_DataWypl)
					;
				SELECT ValueN INTO @PPKskladDodatPracod FROM sec.IReg WHERE idkey = 'PPKskladDodatPracod' AND IdPath = 'INT\\SYSTEM\\MOTLAWA\\Place2003\\PPK' AND rok = YEAR(@_DataWypl)
					;
				SET @PPKprocSkladkaPracod = @PPKskladPodstPracod + @PPKskladDodatPracod ;	
			END IF;
			
			UPDATE sec.prace_zlecone g
			SET 
				g.PPKprocSkladkaPracow = @PPKprocSkladkaPracow,
				g.PPKprocSkladkaPracod = @PPKprocSkladkaPracod
			WHERE g.GUID = _Param_D;
-- PPK END			
			
			SET @test5544 = concat(@RezygnPrzesunZal, ' data wyplaty:', _Param_F);

			IF _Param_F >= '2022-07-01' THEN
                UPDATE sec.prace_zlecone g SET
                    g.RezygnPrzesunZal = 1,
                    g.NaliczUlgeDlaKS = 0,
                    g.ProcentPodatku = IF(g.ProcentPodatku = 17, 12, g.ProcentPodatku)
                WHERE g.GUID = _Param_D;

                SET @RezygnPrzesunZal = 1;
                    -- NaliczUlgeDlaKS
			END IF;


		END IF; -- _Param_E 			
	END IF;	--	IF _MODE = 'pl.kart.obiektow.przepisz.dane.pracownika.one.zlec' 
	
	
END$$

DELIMITER ;

/*
=================================================================================================
	NOTATNIK
=================================================================================================
procedure TDBPlacesPlaceZlec.PrzepiszDanePrac(aPracGUID: String; var aZaZlecenie: Currency);
const
  cSQL = 'SELECT O.Nazwisko, CONCAT(O.Imie1,'' '',O.Imie2) AS Imie, '+
    'O.DataUrodzenia, O.NrPesel, Z.ZgloszZUA_ZZA, P.CzyCosPrzelewem, '+
    'P.ProcPodOdZlecen, P.GUID, P.KodUbezpUmZlecenie, P.KluczWzoruPK, P.AnalitykaFK, '+
    'P.KategoriaPracownicza, P.KluczUrzeduSkarbowego, P.KluczWzoruPK_zlec, '+
    'P.naliczFGSP, P.naliczFP, P.NrZlecenia, '+  //IF((P.TypNaliczaniaSkladek = 0) AND (P.KodUbezpUmZlecenie <> ''''), 1, 0) AS ZlecNaliczacZus ' +
    'IF(Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe, 1, 0) AS ZlecNaliczacZus, '+
    'IF((Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe) AND Z.PodlChorobUbzp, 1, 0) AS PodlChorobUbzp,  '+
    'IF((Z.PodlEmerytalneUbzp OR Z.Dobr_UbzpEmeryt OR Z.PodlRentoweUbzp OR Z.Dobr_UbzpRentowe) AND Z.PodlWypadkUbzp, 1, 0) AS PodlWypadkUbzp, '+
    'IF((!ISNULL(Z.DataPowstObowUbezpZdrow) OR Z.Dobr_UbzpZdrowotne=1) AND Z.ZgloszZUA_ZZA=1 AND ((Z.KodKasyChorych <> '''') AND !ISNULL(Z.KodKasyChorych)), 1, 0) AS PodlUbezpZdrowot '+
    'FROM Pracownicy P '+
    'LEFT JOIN osoby O ON P.GUID = O.GUID '+
    'LEFT JOIN pracownicy_ZUS Z ON P.GUID = Z.GUID_Pracownika '+
    'WHERE P.GUID = ''%s'' ';
	
	stale potracenia z karty pracownika:
	
	cStalePotrSQL = 'SELECT p.* FROM prac_stale_skladniki p '+
    'JOIN definicja_skladnika_placy d '+
    'ON p.GUID_def_skl_placy = d.GUID AND d.typ_gratyfikacji = %d and d.deleted = 0 '+
    'WHERE p.GUID_pracownika = ''%s'' AND p.typ_skladnika = %d AND '+
    '((p.rok_do > %d) OR (p.rok_do = %d AND p.msc_do > %d)) ';
	
RozliczajWg 		Sec		   MS
   0			    Etat      Zlec
   1			   Zlec201    Zlec 
   2                Zlec     Zlec201
   3				Zlec	  Etat
   4				Zlec       X
   5				 X        Zlec

*/ 
