# Receptury kodu — typowe konstrukcje w algorytmach C# Gotowe fragmenty kodu C# do użycia w edytorze algorytmu. Każda receptura rozwiązuje konkretny problem obliczeniowy. ## Spis treści 1. [Iterowanie po elementach wypłaty](#1-iterowanie-po-elementach-wypłaty) 2. [Wynagrodzenie zasadnicze](#2-wynagrodzenie-zasadnicze) 3. [Nieobecności](#3-nieobecności) 4. [Wymiar etatu](#4-wymiar-etatu) 5. [Czas pracy i kalendarz](#5-czas-pracy-i-kalendarz) 6. [Okresy i daty](#6-okresy-i-daty) 7. [Staż pracy](#7-staż-pracy) 8. [Cechy pracownika (Features)](#8-cechy-pracownika-features) 9. [Wskaźniki](#9-wskaźniki) 10. [Parametry dodatku pracownika (DodHistoria)](#10-parametry-dodatku-pracownika-dodhistoria) 11. [Zaokrąglenia](#11-zaokrąglenia) 12. [Dzielenie z zachowaniem waluty](#12-dzielenie-z-zachowaniem-waluty) 13. [Mnożenie procentu](#13-mnożenie-procentu) 14. [Podatki — mnożnik kosztów i ulgi](#14-podatki) 15. [Przeliczenie Netto → Brutto](#15-przeliczenie-netto-brutto) 16. [Naliczanie urlopów i ekwiwalentów](#16-naliczanie-urlopów-i-ekwiwalentów) 17. [Porównywanie wartości (Max, Min)](#17-porównywanie-wartości) 18. [Porównywanie fragmentu nazwy](#18-porównywanie-fragmentu-nazwy) 19. [Suma czasu pracy w wydziale](#19-suma-czasu-pracy-w-wydziale) 20. [Stawka za km (moduł samochodówki)](#20-stawka-za-km) 21. [Pomniejszenie akordowe](#21-pomniejszenie-akordowe) 22. [Debugowanie i logowanie](#22-debugowanie-i-logowanie) 23. [Sprawdzenie czy pracownik ma akord](#23-sprawdzenie-akordu) 24. [Zaliczka a spłata zaliczki — wydział](#24-zaliczka-wydział) --- ## 1. Iterowanie po elementach wypłaty ### Odczytanie wartości z innego elementu (wg nazwy) ```csharp Składnik.Procent = Percent.Zero; foreach (WypElement e in Element.Elementy[Element.Okres]) if (e.SkładnikGłówny != null) if (e.Definicja.Nazwa == "Premia procentowa") Składnik.Procent = e.SkładnikGłówny.Procent; ``` ### Odczytanie wartości z innego elementu (wg Guid definicji) ```csharp foreach (WypElement e in Element.Elementy[Element.Okres]) if (e.Definicja.Guid == new Guid("xxxx-xxxxxx-xxxxxx-xxxx")) // operacja na elemencie ``` ### Suma elementów o wskazanej nazwie ```csharp decimal Funkcyjny = 0m; foreach (WypElement e in Element.Elementy[Element.Okres]) if (e.Definicja.Nazwa == "Dodatek funkcyjny") Funkcyjny += e.Wartosc; ``` ### Suma elementów wchodzących do podstawy urlopu ```csharp decimal Suma = 0m; foreach (WypElement e in Element.Elementy[Element.Okres]) if (e.Definicja.Nieobecnosci.Urlop.Typ != 0) Suma += e.Wartosc; ``` ### Suma elementów o określonym źródle (RodzajŹródłaWypłaty) ```csharp decimal akt = 0m; foreach (WypElement e in Element.Elementy[Składnik.Okres]) if (e.RodzajZrodla == RodzajŹródłaWypłaty.Umowa) akt += e.Wartosc; ``` ### Suma elementów stanowiących podstawę składek ZUS ```csharp decimal podstawa = 0m; foreach (WypElement e in Element.Elementy[Element.Okres]) if (e.Definicja.Deklaracje.Spoleczne.Typ != TypUbezpieczeniaSpolecznego.NieNaliczać) podstawa += e.Wartosc; ``` ### Suma elementów wg daty wypłaty (np. do 13-tki) ```csharp FromTo okres = new Okres(Element.Okres).Rok(0); Soneta.Business.SubTable st = Płace.WypElementy.WgDaty[Pracownik]; st = new Soneta.Business.SubTable(st, okres); foreach (WypElement e in st) if (e is WypElementEtat) Składnik.Podstawa1 += e.Wartosc; else if (e.Definicja.Features.GetBool("Podstawa13")) Składnik.Podstawa2 += e.Wartosc; ``` ### Suma wynagrodzeń akordowych ```csharp decimal WynagrAkordowe = 0m; foreach (WypElement e in Element.Elementy[Składnik.Okres]) if (e is WypElementAkord) WynagrAkordowe += e.Wartosc; ``` ### Konstrukcja switch/case po nazwach elementów ```csharp decimal Suma = 0m; foreach (WypElement e in Element.Elementy[Element.Okres]) switch (e.Definicja.Nazwa) { case "Dodatek funkcyjny": Suma += e.Podatki.ZalFIS; break; case "Premia": case "Dodatek stażowy": Suma += e.Wartosc; // Suma += e.Podatki.KosztyZUS; // Suma += e.Netto; // Suma += e.DoWypłaty; break; } ``` --- ## 2. Wynagrodzenie zasadnicze ### Wynagrodzenie zasadnicze nominalne (cięte okresami aktualizacji) ```csharp Time NormaOkres = Czasy.Norma(Składnik.Okres).Czas; Time NormaMies = Czasy.Norma(Składnik.Okres.FullMonth).Czas; DoubleCy Podstawa = ZasadniczeNominalne(Element.Okres.To); Składnik.Podstawa1 = Podstawa * NormaOkres / NormaMies; ``` ### Suma elementów zasadniczych (dwie metody) ```csharp // Metoda 1: SumaElementow Składnik.Podstawa1 = SumaElementow(Element, Składnik.Okres, WypElement.Zasadnicze); // Metoda 2: ZasadniczeNominalne Składnik.Podstawa1 = ZasadniczeNominalne(Element.Okres.To); ``` ### Zależność od rodzaju stawki zaszeregowania ```csharp if (Element.PracHistoria.Etat.Zaszeregowanie.RodzajStawki == RodzajStawkiZaszeregowania.Miesieczna) { Składnik.Podstawa1 = Element.DodHistoria.Podstawa; } else { Składnik.Podstawa1 = SumaElementow(Element, Składnik.Okres, WypElement.Zasadnicze); Składnik.Procent = Element.DodHistoria.Procent; } ``` --- ## 3. Nieobecności ### Liczba dni nieobecności o wskazanej nazwie ```csharp int DniNie = 0; foreach (OkresNieobecności n in Pracownik.Czasy.Nieobecnosci(Element.Okres, true)) if (n.Definicja.Nazwa == "Urlop opiekuńczy (art 188 kp)") DniNie += n.Norma().Dni; // Kalendarzowa liczba dni nieobecności: // DniNie += n.Okres.Days; ``` ### Liczba dni nieobecności wg typu ```csharp Składnik.Dni = 0; foreach (OkresNieobecności n in Pracownik.Czasy.Nieobecnosci(Element.Okres, true)) if (n.Definicja.Typ != TypNieobecnosci.UsprawiedliwionaPłatna) Składnik.Dni += n.Norma().Dni; ``` ### Odwołanie do nieobecności z elementu wynagrodzenia ```csharp foreach (WypElement e in Pracownik.Elementy[Element.Okres]) { var en = e as WypElementNieobecność; Nieobecnosc n = en == null ? null : en.Nieobecność; if (e.Definicja.Nazwa == "Wynagr.urlop wypoczynkowy") Msg(e.Okres + " / " + e.SkładnikGłówny.Podstawa1 + " / " + n.Okres); } ``` ### Pomniejszenie wynagrodzenia zasadniczego o daną nieobecność ```csharp decimal Pomniejszenia = 0; foreach (WypElement element in Element.Elementy[Składnik.Okres.FullMonth, WypElement.Zasadnicze]) foreach (WypSkladnik składnik in element.Skladniki) { WypSkladnikPomniejszenie pomniejszenie = składnik as WypSkladnikPomniejszenie; Nieobecnosc nieobecność = pomniejszenie == null ? null : pomniejszenie.Nieobecnosc; if (nieobecność == Element.Nieobecność) Pomniejszenia += składnik.Wartosc; } Składnik.Podstawa1 = -Pomniejszenia; ``` ### Pomniejszenia za nieobecności płatne (z elementu zasadniczego) ```csharp decimal pomniejszenia = 0; foreach (WypElement element in Element.Elementy[Składnik.Okres, WypElement.Zasadnicze]) foreach (WypSkladnik składnik in element.Skladniki) { WypSkladnikPomniejszenie pomniejszenie = składnik as WypSkladnikPomniejszenie; Nieobecnosc nieobecność = pomniejszenie == null ? null : pomniejszenie.Nieobecnosc; if (nieobecność != null && nieobecność.Definicja.Typ == TypNieobecnosci.UsprawiedliwionaPłatna) pomniejszenia += składnik.Wartosc; } Składnik.Podstawa1 = pomniejszenia; ``` ### Sumowanie pomniejszeń z konkretnego elementu wg typu nieobecności ```csharp decimal podstawa = 0; foreach (WypElement e in Element.Elementy[Element.Okres]) if (e.Definicja.Nazwa == "Dodatek stażowy") foreach (WypSkladnik skl in e.Skladniki) { Nieobecnosc n = skl.Nieobecnosc; if (n != null && n.Definicja.Typ == TypNieobecnosci.NieobecnośćZUS) podstawa -= skl.Wartosc; } Składnik.Podstawa1 = podstawa; ``` --- ## 4. Wymiar etatu ### Przeliczenie przez wymiar etatu (Num/Den) ```csharp Składnik.Podstawa1 = ZasadniczeNominalne(Element.Okres.To); // Dzielenie: pełny etat → niepełny (np. 1/2 etatu: Den=2, Num=1) Składnik.Podstawa1 *= Element.PracHistoria.Etat.Wymiar.Den; Składnik.Podstawa1 /= Element.PracHistoria.Etat.Wymiar.Num; ``` ### Mnożenie przez wymiar etatu (jako ułamek) ```csharp Składnik.Ulamek = Element.PracHistoria.Etat.Wymiar; Składnik.Podstawa1 *= Składnik.Ulamek; ``` ### Odczytanie historycznego wymiaru etatu ```csharp int Mianownik = Element.Pracownik[Element.Data].Etat.Wymiar.Den; int Licznik = Element.Pracownik[Element.Data].Etat.Wymiar.Num; ``` --- ## 5. Czas pracy i kalendarz ### Norma czasu pracy w niedziele ```csharp KalkulatorPlanu Kalk = Czasy.KalkPlanu; Kalk.LoadOkres(Składnik.Okres); Time Norma = Time.Zero; foreach (Date Data in Składnik.Okres) if (Data.DayOfWeek == DayOfWeek.Sunday) { Dzien DzieńPlanu = Kalk[Data]; Norma += DzieńPlanu.Czas; } ``` ### Czas pracy w soboty, święta i w nocy ```csharp // Czas w święta lub dni wolne CzasDni cd = Element.Pracownik.Czasy.KalkPracy.Praca(Składnik.Okres, Dzien.Świąteczny); CzasDni cd = Element.Pracownik.Czasy.KalkPracy.Praca(Składnik.Okres, Dzien.Wolny); Składnik.Czas = cd.Czas; Składnik.Dni = cd.Dni; // Czas pracy w soboty z nocnymi Time CzasPraca = Time.Zero; Time CzasPracaNoc = Time.Zero; KalkulatorPracy Kalk = Czasy.KalkPracy; Kalk.LoadOkres(Składnik.Okres); foreach (Date Data in Składnik.Okres) if (Data.DayOfWeek == DayOfWeek.Saturday) { Dzien DzieńPracy = Kalk[Data]; CzasPraca += DzieńPracy.Czas; FromTo Okres = new FromTo(Data, Data); CzasPracaNoc = Element.Pracownik.Czasy.Nocne(Okres); } ``` ### Odwołanie do strefy czasu pracy ```csharp DefinicjaStrefy defStrefy = Kalend.DefinicjeStref.WgNazwy["Badania lekarskie"]; CzasDni cd = Pracownik.Czasy.KalkPracy.Praca(Element.Okres, defStrefy); Time CzasBadania = cd.Czas; int DniBadania = cd.Dni; ``` ### Odwołanie do standardowego kalendarza ```csharp // Standardowy kalendarz Kalendarz Std = Kalend.Kalendarze.Standard; KalkulatorKalendarza KK = new KalkulatorKalendarza(Std); Time CzasNorma = KK.Norma(Składnik.Okres, null).Czas; // Kalendarz wg nazwy Kalendarz Std = (Kalendarz)Kalend.Kalendarze.WgNazwy[TypKalendarza.Kalendarz, "Standard"]; // Kalendarz pracownika Kalendarz Std = Element.PracHistoria.Etat.Kalendarz; ``` ### Odchyłki czasu pracy ```csharp Odchylka odchylka = Element.Pracownik.Czasy.KalkPracy.Odchylki(Składnik.Okres); Składnik.Czas = odchylka.Plus - odchylka.Minus; // lub tylko akordy: Składnik.Czas = odchylka.Akordy; ``` ### Dzielenie przez czas ```csharp Time CzasPraca = Pracownik.Czasy.Praca(Element.Okres).Czas; double Norma = 168.0; Percent Prct = new Percent((decimal)(-(1 - CzasPraca.TotalHours / Norma))); ``` --- ## 6. Okresy i daty ### Tworzenie dat i okresów ```csharp int Rok = Element.Okres.To.Year; Date Data = new Date(Rok, 01, 02); // Okres ręczny FromTo Okres = new FromTo(new Date(Rok, 1, 1), new Date(Rok, 1, 31)); // Okres od początku roku do miesiąca poprzedzającego int Miesiac = Element.Okres.From.Month; if (Miesiac > 1) Okres = new FromTo(new Date(Rok, 1, 1), new Date(Rok, Miesiac, 1) - 1); ``` ### Operacje na YearMonth ```csharp YearMonth Aktualny = Składnik.Okres.ToYearMonth(); // Okres 3 miesięcy wstecz FromTo Okres3Mies = new FromTo(Aktualny.AddMonths(-3).FirstDay, Aktualny.AddMonths(-1).LastDay); ``` ### Liczba dni kalendarzowych ```csharp int dniKalendarzowe = new YearMonth(Element.Okres.To).Days; // lub: int dniKalendarzowe = Element.Okres.FullMonth.Days; // Dni zatrudnienia w okresie int DniZatrKalend = (Element.Okres * Element.PracHistoria.Etat.OkresZatrudnienia).Days; ``` ### Pętla po miesiącach (dodatki okresowe) ```csharp int LiczMies = 0; DoubleCy Suma = 0.0m; Periods ps = Periods.New(Element.Okres).BreakByMonth(); foreach (FromTo OkresMsc in ps) { if (Czasy.Praca(OkresMsc).Dni > 0) { Suma += WartośćWskaźnika("Ekwiwalent za pranie", OkresMsc.To); ++LiczMies; } } Składnik.Podstawa1 = Suma; Składnik.Dni = LiczMies; ``` ### Liczba miesięcy w okresie ```csharp Periods ps = Periods.New(Element.Okres).BreakByMonth(); Składnik.Ilosc = ps.Count; ``` ### Okres ograniczony okresem przyznania dodatku ```csharp Time CzasNormaOkres = Czasy.Norma(Element.DodHistoria.Okres * Element.Okres).Czas; ``` ### Pełny miesiąc kalendarzowy z daty ```csharp Date dataStażu = Element.Okres.FullMonth.To; ``` --- ## 7. Staż pracy ### Staż wg różnych podstaw ```csharp Date DataStażu = Element.Okres.From; // Staż razem (wg zdefiniowanej podstawy) DefPodstawyStazu podstawaStażu = KadryModule.GetInstance(Element).DefPodstawStazu.WgNazwy["Zatrudnienie poza firmą"]; int StażRazem = Element.Pracownik.StażPracy(DataStażu, podstawaStażu).Lata; // Staż w firmie int StażFirma = Pracownik.StażPracy(DataStażu).Lata; // Staż poza firmą (zatrudnienie) int StażPoza = Pracownik.StażPracy(Kadry.DefPodstawStazu.Zatrudnienie).Lata; ``` ### Wyliczanie stażu z dowolnego okresu ```csharp StazPracy Staz = new StazPracy(Okres); int LataStaz = Staz.Normalizuj().Lata; ``` --- ## 8. Cechy pracownika (Features) ### Odczyt cechy historycznej ```csharp Date Data = Element.Okres.From; Time CzasNoc = (Time)Element.Pracownik.Features["Czas pracy w nocy", Data]; Decimal Skladnik = (Decimal)Element.Pracownik.Features["Składnik", Data]; ``` ### Odczyt cechy niehistorycznej (typowanej) ```csharp Składnik.Procent = Element.Pracownik.Features.GetPercent("Procent dodatku za noce"); Składnik.Czas = Element.Pracownik.Features.GetTime("Czas pracy w nocy"); ``` ### Sumowanie wartości cechy historycznej w okresie ```csharp Currency Suma = 0; Soneta.Business.HistoryFeature Premie = (Soneta.Business.HistoryFeature)Pracownik.Features["Premia"]; foreach (Date Data in Premie.Dates) if (Okres.Contains(Data)) { Currency Premia = Premie.GetCurrency(Data); // lub: Decimal Premia = Premie.GetDecimal(Data); Suma += Premia; } ``` --- ## 9. Wskaźniki ### Odczytanie wartości wskaźnika ```csharp DoubleCy wartość = WartośćWskaźnika("Ekwiwalent za pranie", Element.Okres.To); ``` ### Odczytanie wskaźnika jako obiektu (do dzielenia, castowania) ```csharp Składnik.Ilosc = (double)WartośćWskaźnikaObj("Współczynnik nagrody", Składnik.Okres.To); ``` ### Sklejanie nazwy wskaźnika z danymi pracownika ```csharp DoubleCy Obrót = WartośćWskaźnika("Obrót " + Wydział.Nazwa, Element.Okres.To); // lub ze stanowiskiem: DoubleCy Podstawa = WartośćWskaźnika( "Narzędzia /" + Element.Pracownik[OkresMsc.To].Etat.Stanowisko.ToLower(), OkresMsc.To); ``` --- ## 10. Parametry dodatku pracownika (DodHistoria) ### Odczytanie kwoty i procentu z dodatku ```csharp Składnik.Podstawa1 = Element.DodHistoria.Podstawa; Składnik.Procent = Element.DodHistoria.Procent; ``` ### Iterowanie po historii dodatku ```csharp // Wariant 1: po dodatkach pracownika Składnik.Podstawa1 = 0.0m; foreach (Dodatek d in Pracownik.Dodatki) { DodHistoria dh = d[Element.Okres.From]; if (dh.Element.Nazwa == "Premia") { Składnik.Podstawa1 = dh.Podstawa; break; } } // Wariant 2: po historii jednego dodatku (sumowanie w okresie) YearMonth Aktualny = Składnik.Okres.ToYearMonth(); FromTo okres = new FromTo(Aktualny.AddMonths(-2).FirstDay, Aktualny.AddMonths(0).LastDay); Currency suma = 0; foreach (DodHistoria dh in Element.Dodatek.Historia) if (okres.Contains(dh.Aktualnosc.From)) suma += dh.Podstawa; ``` --- ## 11. Zaokrąglenia ```csharp // Zaokrąglenie DoubleCy do 1 miejsca po przecinku DoubleCy TmpCy = Składnik.Podstawa1; Składnik.Podstawa1 = new DoubleCy(Soneta.Tools.Math.Round(TmpCy.Value, 1), TmpCy.Symbol); // Zaokrąglenie wyniku (Currency) do pełnych złotych return Składnik.Podstawa1.Round(0); // Zaokrąglenie w górę return Składnik.Podstawa1.Ceiling(1); ``` --- ## 12. Dzielenie z zachowaniem waluty ```csharp Składnik.Ilosc = (double)WartośćWskaźnikaObj("Współczynnik nagrody", Składnik.Okres.To); DoubleCy w = Składnik.Podstawa1 * Składnik.Dni * Składnik.Procent; return new DoubleCy(w.Value / Składnik.Ilosc, w.Symbol); ``` --- ## 13. Mnożenie procentu ```csharp Percent p = (Percent)WartośćWskaźnikaObj("Pomniejszenie premii", okres.To); p = new Percent(((decimal)p) * Składnik.Dni); ``` --- ## 14. Podatki ```csharp Decimal KosztyMnoznik = Element.Pracownik[Element.Data].Podatki.KosztyMnoznik; Decimal UlgaMnoznik = Element.Pracownik[Element.Data].Podatki.UlgaMnoznik; ``` --- ## 15. Przeliczenie Netto → Brutto ```csharp Składnik.Podstawa1 = Element.DodHistoria.Podstawa; Składnik.Podstawa2 = NettoBrutto(Element, Składnik.Podstawa1); // lub z wartości decimal: decimal netto = (decimal)Składnik.Podstawa1.Value; decimal brutto = NettoBrutto(Element, netto).Value; ``` --- ## 16. Naliczanie urlopów i ekwiwalentów ### Urlop wypoczynkowy i okolicznościowy ```csharp new NaliczanieWypoczynkowy(Element, Składnik).NaliczPodstawy(); // lub: new NaliczanieOkolicznosciowy(Element, Składnik).NaliczPodstawy(); return (Currency)(Składnik.Podstawa1 * Składnik.Czas) + (Currency)(Składnik.Podstawa2 * Składnik.Dni); ``` ### Ekwiwalent z parametrami niestandardowymi ```csharp NaliczanieEkwiwalent Naliczanie = new NaliczanieEkwiwalent(Element, Składnik); Naliczanie.ŚredniaNormaMiesięczna = 21.0; Naliczanie.OkresPodstawy = 3; Naliczanie.WgWymiaruEtatu = false; Naliczanie.NaliczPodstawy(); return (Currency)(Składnik.Podstawa1 * Składnik.Czas) + (Currency)(Składnik.Podstawa2 * Składnik.Dni); ``` --- ## 17. Porównywanie wartości ```csharp Składnik.Podstawa1 = Currency.Max(Składnik.Podstawa1, Składnik.Podstawa2); Składnik.Podstawa1 = Currency.Min(Składnik.Podstawa1, Składnik.Podstawa2); ``` --- ## 18. Porównywanie fragmentu nazwy ```csharp DoubleCy Podstawa = WartośćWskaźnika("Bony podarunkowe", Element.Okres.To); if (Element.PracHistoria.Etat.Stanowisko.Length >= 9 && Element.PracHistoria.Etat.Stanowisko.Substring(0, 9) == "Kierownik") Podstawa = WartośćWskaźnika("Bony podarunkowe kier", Element.Okres.To); ``` --- ## 19. Suma czasu pracy w wydziale ```csharp Wydzial Wydział = Element.PracHistoria.Etat.Wydzial; Time CzasPracaWydz = Time.Zero; foreach (Pracownik p in Kadry.Pracownicy) { Periods ps = Periods.Empty; foreach (PracHistoria ph in p.Historia.GetIntersectedRows(Składnik.Okres)) if (ph.Etat.Wydzial == Wydział) ps += ph.Etat.EfektywnyOkres; ps = ps.ToFlat() * Składnik.Okres; CzasPracaWydz += p.Czasy.KalkPracy.Praca(ps).Czas; } Składnik.Czas = CzasPracaWydz; ``` --- ## 20. Stawka za km ```csharp Soneta.Samochodowka.SamochodowkaModule sm = Soneta.Samochodowka.SamochodowkaModule.GetInstance(Element); double v = sm.Config.StawkiZaKm.SamochodPonad900[Element.Okres.From]; return new DoubleCy(v); ``` --- ## 21. Pomniejszenie akordowe ```csharp Składnik.Podstawa1 = 0.0m; foreach (WypElement e in Element.Elementy[Element.Okres]) if (e.RodzajZrodla == RodzajŹródłaWypłaty.Etat) foreach (WypSkladnik s in e.Skladniki) if (s is WypSkladnikOdchyłka.AkordMinus) Składnik.Podstawa1 -= s.Wartosc; ``` --- ## 22. Debugowanie i logowanie ### Komunikaty Msg (widoczne w obliczeniach elementu) ```csharp Msg("Premia za 1 sztukę: " + PdstPremii); Msg("Liczba sztuk: " + LiczbaSztuk); ``` ### Zapis obliczeń (widoczny w formularzu elementu) ```csharp Składnik.Podstawa1 = 150; Element.ZapisObliczen = "Podstawa: " + Składnik.Podstawa1; ``` ### Logi systemowe ```csharp Soneta.Business.Log log = new Soneta.Business.Log("Log do premii"); log.WriteLine("Naliczanie premii uznaniowej dla: " + Pracownik); log.WriteLine(e.Nazwa + ": " + e.Wartosc); ``` --- ## 23. Sprawdzenie akordu ```csharp var jestAkord = !Pracownik.Akordy.IsEmpty; ``` --- ## 24. Zaliczka wydział ```csharp var wydzialZaliczka = Element.Zaliczka.Realizacja.Wydzial; var wydzialSplata = Element.Wydzial; if (wydzialSplata == wydzialZaliczka) Składnik.Podstawa1 = SpłataZaliczkiNieopodatkowanej(Element, Składnik); ```