-- nowe urlopy
-- SQL-ki do wykonania po kolei i spradzamy wyniki czy nie wywali błedów.

# dodanie brakującego pola do baz w których nie ma tego pola (pliszka to miała inni nie mają polam, cirst ...)
ALTER TABLE definicja_skladnika_placy ADD COLUMN ZFRON INT(11) DEFAULT 0 AFTER `uzywany`;


# usunięcie autoinkrementacji z idn - nie chcemy żeby idny były nadawane kolejno tylko przez nas ręcznie 
# użytkownik nie ma możliwości wprowadzania ręcznie pozycji dla tego jesteśmy w stanie nad tym zapanowac
# a musieliśmy się odcią od autoinkrementcji dlatego że klienci mieli rózną ilosc absencji 
ALTER TABLE `absencje_dict` CHANGE `idn` `idn` INT(11) NOT NULL;

# dodanie nowych typów absencji
INSERT IGNORE INTO `absencje_dict` (`idn`, `lp`, `symbol`, `definicja`, `okres_typ`, `Kod_ABS`) VALUES ('40', '40', 'WD', 'urlop działania siły wyższej', 'D+H1D', 'URL.DZIAL.SIL.WYZ');
INSERT IGNORE INTO `absencje_dict` (`idn`, `lp`, `symbol`, `definicja`, `okres_typ`, `Kod_ABS`) VALUES ('41', '41', 'KB', 'urlop opiekuńczy - bez prawa do wynagrodzenia', 'D+H1D', 'URL.OPIEK.BEZ');
INSERT IGNORE INTO `absencje_dict` (`idn`, `lp`, `symbol`, `definicja`, `okres_typ`, `Kod_ABS`, `pseudo_abs`, `Licz_NCP_abs`, `zlec`) VALUES ('42', '42', 'EO', 'praca zdalna - okazjonalna', 'D', 'PRACA.ZDAL.OKAZ', '1', '1', '1');
INSERT IGNORE INTO `absencje_dict` (`idn`, `lp`, `symbol`, `definicja`, `okres_typ`, `Kod_ABS`, `pseudo_abs`, `Licz_NCP_abs`, `zlec`) VALUES ('43', '43', 'EZ', 'praca zdalna - normalna', 'D', 'PRACA.ZDAL.NORM', '1', '1', '1');
INSERT IGNORE INTO `absencje_dict` (`idn`, `lp`, `symbol`, `definicja`, `okres_typ`, `Kod_ABS`, `KazdyDzien`, `obow_w_wolne_dni`) VALUES ('44', '44', 'MO', 'urlop ojcowski', 'D', 'URL.OJCOW', '1', '1');
INSERT IGNORE INTO `absencje_dict` (`idn`, `lp`, `symbol`, `definicja`, `okres_typ`, `Kod_ABS`, `KazdyDzien`, `obow_w_wolne_dni`) VALUES ('45', '45', 'MR', 'urlop rodzicielski', 'D', 'URL.RODZIC', '1', '1');
INSERT IGNORE INTO `absencje_dict` (`idn`, `lp`, `symbol`, `definicja`, `okres_typ`, `Kod_ABS`, `KazdyDzien`, `obow_w_wolne_dni`) VALUES ('46', '46', 'MT', 'urlop tacierzyński', 'D', 'URL.TACIE', '1', '1');

SELECT * FROM absencje_dict;

# dodanie nowych pól do urlopow
ALTER TABLE `urlopy`
ADD COLUMN `PracaZdalnaOkazjonalnaDni` DOUBLE(12,6) DEFAULT 0.0000 NULL ,
ADD COLUMN `PracaZdalnaOkazjonalnaGodz` DOUBLE(16,4) DEFAULT 0.0000 NULL AFTER `PracaZdalnaOkazjonalnaDni`,
ADD COLUMN `UrlopOpiekaBezWynagrDni` DOUBLE(12,6) DEFAULT 0.0000 NULL AFTER `PracaZdalnaOkazjonalnaGodz`,
ADD COLUMN `UrlopOpiekaBezWynagrGodz` DOUBLE(16,4) DEFAULT 0.0000 NULL AFTER `UrlopOpiekaBezWynagrDni`,
ADD COLUMN `ZwolnienieSilaWyzszaDni` DOUBLE(12,6) DEFAULT 0.0000 NULL AFTER `UrlopOpiekaBezWynagrGodz`,
ADD COLUMN `ZwolnienieSilaWyzszaGodz` DOUBLE(16,4) DEFAULT 0.0000 NULL AFTER `ZwolnienieSilaWyzszaDni`;

# dodanie nowych pól do frekwencji
ALTER TABLE frekw
ADD COLUMN `PozPracaZdalnaOkazDni` DOUBLE(12,6) DEFAULT 0.0000 NULL,
ADD COLUMN `PozPracaZdalnaOkazGodz` DOUBLE(16,4) DEFAULT 0.0000 NULL,
ADD COLUMN `PozUrlopOpiekaBezWynagrDni` DOUBLE(12,6) DEFAULT 0.0000 NULL,
ADD COLUMN `PozUrlopOpiekaBezWynagrGodz` DOUBLE(16,4) DEFAULT 0.0000 NULL,
ADD COLUMN `PozZwolnienieSilaWyzszaDni` DOUBLE(12,6) DEFAULT 0.0000 NULL,
ADD COLUMN `PozZwolnienieSilaWyzszaGodz` DOUBLE(16,4) DEFAULT 0.0000 NULL,
ADD COLUMN `DostPracaZdalnaOkazDni` DOUBLE(12,6) DEFAULT 0.0000 NULL,
ADD COLUMN `DostPracaZdalnaOkazGodz` DOUBLE(16,4) DEFAULT 0.0000 NULL,
ADD COLUMN `DostUrlopOpiekaBezWynagrDni` DOUBLE(12,6) DEFAULT 0.0000 NULL,
ADD COLUMN `DostUrlopOpiekaBezWynagrGodz` DOUBLE(16,4) DEFAULT 0.0000 NULL,
ADD COLUMN `DostZwolnienieSilaWyzszaDni` DOUBLE(12,6) DEFAULT 0.0000 NULL,
ADD COLUMN `DostZwolnienieSilaWyzszaGodz` DOUBLE(16,4) DEFAULT 0.0000 NULL;

# dodanie nowych pól do plac
ALTER TABLE `place`
ADD COLUMN `DniUrlopSilaWyz` INT(11) DEFAULT 0 NULL AFTER `KwotaDoLimituPENarast`,
ADD COLUMN `DniUrlopSilaWyzZdysc` INT(11) DEFAULT 0 NULL AFTER `DniUrlopSilaWyz`,
ADD COLUMN `Kwota_Za_Urlop_SilaWyz_st` DOUBLE(16,4) DEFAULT 0.0000 NULL AFTER `DniUrlopSilaWyzZdysc`,
ADD COLUMN `Kwota_Za_Urlop_SilaWyz_zm` DOUBLE(16,4) DEFAULT 0.0000 NULL AFTER `Kwota_Za_Urlop_SilaWyz_st`;

# dodanie kolejnej definicji składnika plac - siła wyższa (rozliczany tak jak urlop wyp)
INSERT IGNORE INTO `definicja_skladnika_placy` (`idn`, `GUID`, `symbol`, `nazwa`, `default_visible`, `RodzajSkladnika`, `Potracenie`, `DoPodatku`, `DoChorobowego`, `UzupelniacDoChorobowego`, `DoUrlopu`, `DoPlacyMin`, `DoWyslugiLat`, `DoPodstKosztUPT`, `DoPodstSklEmerytRent`, `DoPodstSklChorobWypadk`, `DoPodstSklKasaChorych`, `KodSkladnika`, `SkladnikZaMiesiac`, `DataOd`, `DataDo`, `SkladnikUbruttowiony`, `DoKosztowZlecen`, `DoKosztowZlecenBezKartPracy`, `DoObciazeniaZlecenTylkoZUS`, `DoKosztowZlecenProporcjonalnie`, `ObciazaKosztyOgolne`, `ZnaczenieSkladnika`, `InterpretacjaModulSzkola`, `UwzglednicGUSZ03`, `UwzglednicGUSZ06`, `UwzglednicGUSZ12`, `Interpretacja_GUS`, `Interpretacja_RP7`, `ToWyrowDoMinWynagr`, `ToNadwyzkaLimitZFSS`, `typ_gratyfikacji`, `typ_przeznaczenia`, `ToWynagrNadgodziny`, `ToDodatekNadgodziny`, `DodacDoZ03`, `DodacDoZ06`, `DodacDoZ12`, `Trzynastka`, `WyplataZFSS`, `WyplataUdzialWzyskach`, `Honorarium`, `NadodzinyDoGUS`, `WynagrAgencProw`, `PremiaLubNagroda`, `InnySkladnikWyn`, `SymbolWyplaty`, `DoSkladkiZUS`, `SkladnikZaOkres`, `skladnik_OFP`, `skl_do_uropu_wypocz`, `uzywany`, `ZFRON`, `WyroznikDekr`, `WymusDopel`, `nie_uwzgl_w_dekr`, `do_dofinans_PFRON`, `DopelniajPrzyNaliczEkwiwZaUrlop`, `localtime`, `deleted`, `keywords`, `zwrotKosztowZakwaterowania`, `dodaj_do_zaswiadczen`) VALUES (NULL, 'C_40', '', 'Urlop siław wyższa', '1', '0', '0', '1', '1', '0', '0', '0', '0', '0', '1', '1', '1', '', '1', '2003-08-28', '2003-08-28', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '5', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', NULL, '0', '0', '0', '1', '1', '1', 'WYN_BR', '1', '0', '0', '1', '2014-07-10 01:25:46', '0', NULL, '0', '1');


# dodanie brakujących wpisów urlopów dla pracowników w roku 2023 na podstawie istniejących frekwencji w roku 2023
# jeżeli będzie bład po wykonaniu dwóch poniższych SQL-ek, to wykonujemy ta trzecią, jeszcze poniżej i sprawdzamy czy tabela urlopyTmp jest pusta
# DROP TEMPORARY TABLE urlopyTmp;
CREATE TEMPORARY TABLE urlopyTmp 
SELECT f.PracGUID, (SELECT u.idn FROM urlopy u WHERE u.rok = 2023 AND u.GUIDPr = f.PracGUID)  AS err, p.* FROM frekw f JOIN Pracownicy p ON p.guid = f.PracGUID WHERE f.rok = 2023 GROUP BY PracGUID HAVING err IS NULL;

# spr czy są braki w tabeli urlopy dla pracowników na 2023 - jeśli jest pusta czytaj poniżej 
SELECT * FROM urlopyTmp;  

-- jeśli tabela urlopyTmp jest pusta, to nie wykonujemy tego inserta
INSERT IGNORE INTO urlopy 
(rok,guidPr,WymiarUrlopuGodz,WymiarUrlopuDni,IleDniZaleglegoUrlopuGodz,IleDniZaleglegoUrlopuDni,UrlopZaliczkowyGodz,UrlopZaliczkowyDni,UrlopZPGodz,UrlopZPDni,DniOpiekiZdroweDziecko,GodzOpiekiZdroweDziecko,IleLatDoUrlopu,PelenWymiarUrlopu,typniepelnospr,etat_m,etat_l,WymiarUrlopuExtraGodz,WymiarUrlopuExtraDni,DodGodzUrlop,avg_min_per_day,GUID)
SELECT 2023,p.PracGUID,p.WymiarUrlopuGodz,p.WymiarUrlopuDni,p.IleDniZaleglegoUrlopuGodz,p.IleDniZaleglegoUrlopuDni,p.UrlopZaliczkowyGodz,p.UrlopZaliczkowyDni,p.UrlopZPGodz,p.UrlopZPDni,p.DniOpiekiZdroweDziecko,p.GodzOpiekiZdroweDziecko,p.IleLatDoUrlopu,p.PelenWymiarUrlopu,p.typniepelnospr,p.etat_m,p.etat_l,p.WymiarUrlopuExtraGodz,p.WymiarUrlopuExtraDni,p.DodGodzUrlop,p.avg_min_per_day,MD5(p.GUID) FROM urlopyTmp p;


-- jesli wyjdzie bład braku pola z powyższego inserta to odpalamy odpowiednią sql poniżej. 
-- Jeśli jednak nie ma takiego pola w poniższych SQL-kach, to trzeba dopisa kolejną sql-kę -> tel. do Grzesia lub Tomka K.
## ALTER TABLE `urlopy` ADD COLUMN DniOpiekiZdroweDziecko  INT(11) DEFAULT 0 NULL;
# ALTER TABLE `urlopy` ADD COLUMN GodzOpiekiZdroweDziecko  DOUBLE(16,4) DEFAULT 0.0000 NULL;
# ALTER TABLE `urlopy` ADD COLUMN WymiarUrlopuExtraGodz DOUBLE(16,4) DEFAULT 0.0000 NULL;
# ALTER TABLE `urlopy` ADD COLUMN DodGodzUrlop VARCHAR(300) NULL;
# ALTER TABLE `urlopy` ADD COLUMN `WymiarUrlopuDni` DOUBLE(12,6) DEFAULT 0.0000 NULL;
# ALTER TABLE `urlopy` ADD COLUMN `IleDniZaleglegoUrlopuDni` DOUBLE(12,6) DEFAULT 0.0000 NULL;
# ALTER TABLE `urlopy` ADD COLUMN `UrlopZaliczkowyDni` DOUBLE(12,6) DEFAULT 0.0000 NULL;
# ALTER TABLE `urlopy` ADD COLUMN `UrlopZPDni` DOUBLE(12,6) DEFAULT 0.0000 NULL;

-- SQL-ki AS
-- ALTER TABLE `urlopy` MODIFY COLUMN `IleDniZaleglegoUrlopu` DOUBLE(12,6) DEFAULT 0.0000 NULL;
-- ALTER TABLE `urlopy` MODIFY COLUMN `UrlopZaliczkowy` DOUBLE(12,6) DEFAULT 0.0000 NULL;


-- ALTER TABLE `urlopy` ADD COLUMN `etat_L` INT(11) DEFAULT 0.0000;
-- ALTER TABLE `urlopy` ADD COLUMN `etat_M` INT(11) DEFAULT 0.0000;

-- DESC urlopy '%zalicz%';






# przepisanie danych z pracownika do tabeli urlopów na rok 2023
UPDATE urlopy u, Pracownicy p SET
u.WymiarUrlopuGodz = p.WymiarUrlopuGodz,
u.WymiarUrlopuDni = p.WymiarUrlopuDni,
u.IleDniZaleglegoUrlopuGodz = p.IleDniZaleglegoUrlopuGodz,
u.IleDniZaleglegoUrlopuDni = p.IleDniZaleglegoUrlopuDni,
u.UrlopZaliczkowyGodz = p.UrlopZaliczkowyGodz,
u.UrlopZaliczkowyDni = p.UrlopZaliczkowyDni,
u.UrlopZPGodz = p.UrlopZPGodz,
u.UrlopZPDni = p.UrlopZPDni,
u.DniOpiekiZdroweDziecko = p.DniOpiekiZdroweDziecko,
u.GodzOpiekiZdroweDziecko = p.GodzOpiekiZdroweDziecko,
u.IleLatDoUrlopu = p.IleLatDoUrlopu,
u.PelenWymiarUrlopu = p.PelenWymiarUrlopu,
u.typniepelnospr = p.typniepelnospr,
u.etat_m = p.etat_m,
u.etat_l = p.etat_l,
u.WymiarUrlopuExtraGodz = p.WymiarUrlopuExtraGodz,
u.WymiarUrlopuExtraDni = p.WymiarUrlopuExtraDni,
u.DodGodzUrlop = p.DodGodzUrlop,
u.avg_min_per_day = p.avg_min_per_day
WHERE u.guidPr = p.Guid AND u.rok=2023;

# ustawienie domyślych dni i godzin dla nowych urlopów w tabeli urlopy
UPDATE urlopy u
SET
u.`PracaZdalnaOkazjonalnaDni`  = 24,
u.`PracaZdalnaOkazjonalnaGodz` = 24*60*8*(IFNULL(u.etat_l, 1)/IFNULL(u.etat_m, 1)),
u.`UrlopOpiekaBezWynagrDni` = 5,
u.`UrlopOpiekaBezWynagrGodz` = 5*60*8*(IFNULL(u.etat_l, 1)/IFNULL(u.etat_m, 1)),
u.`ZwolnienieSilaWyzszaDni` = 2,
u.`ZwolnienieSilaWyzszaGodz` = 2*60*8*(IFNULL(u.etat_l, 1)/IFNULL(u.etat_m, 1))
WHERE u.rok = 2023;


# UPDATE urlopy u
# SET
# u.`PracaZdalnaOkazjonalnaDni`  = 24,
# u.`PracaZdalnaOkazjonalnaGodz` = 24*avg_min_per_day,
# u.`UrlopOpiekaBezWynagrDni` = 5,
# u.`UrlopOpiekaBezWynagrGodz` = 5*avg_min_per_day,
# u.`ZwolnienieSilaWyzszaDni` = 2,
# u.`ZwolnienieSilaWyzszaGodz` = 2*avg_min_per_day
# WHERE u.rok = 2023;


# przepisujemy informację z tabeli urlopy do wszystkich frekwencji 
UPDATE frekw f, urlopy u SET
f.`PozPracaZdalnaOkazDni` = u.`PracaZdalnaOkazjonalnaDni`, 
f.`PozPracaZdalnaOkazGodz` = u.`PracaZdalnaOkazjonalnaGodz`,
f.`DostPracaZdalnaOkazDni` = u.`PracaZdalnaOkazjonalnaDni`,
f.`DostPracaZdalnaOkazGodz` = u.`PracaZdalnaOkazjonalnaGodz`,

f.`PozUrlopOpiekaBezWynagrDni` = u.`UrlopOpiekaBezWynagrDni`,
f.`PozUrlopOpiekaBezWynagrGodz` = u.`UrlopOpiekaBezWynagrGodz`,
f.`DostUrlopOpiekaBezWynagrDni` = u.`UrlopOpiekaBezWynagrDni`, 
f.`DostUrlopOpiekaBezWynagrGodz` = u.`UrlopOpiekaBezWynagrGodz`,

f.`PozZwolnienieSilaWyzszaDni` = u.`ZwolnienieSilaWyzszaDni`,
f.`PozZwolnienieSilaWyzszaGodz` = u.`ZwolnienieSilaWyzszaGodz`,	
f.`DostZwolnienieSilaWyzszaDni`  = u.`ZwolnienieSilaWyzszaDni`,
f.`DostZwolnienieSilaWyzszaGodz` = u.`ZwolnienieSilaWyzszaGodz`
WHERE u.rok = 2023 AND f.rok = 2023 AND u.rok = f.rok AND u.GUIDPr = f.PracGUID; 



