Skocz do zawartości

Stan urlopów - skrypt sql

Polecane posty

Nie ma możliwości automatycznego generowania raportu do pliku, ale można to zrobić ręcznie poprzez wydruk listy lub eksport do excela.

Niestety raport ten jest na tyle skomplikowany, że nie ma też możliwości uzyskania skryptu SQL, który by go generował. Można natomiast napisać aplikację sferyczną, która wyliczy dane widoczne w tym raporcie. W publicznym API mamy dedykowany do tego interfejs IMenadzerWymiaruUrlopuPracownika. Wyliczone dane można zapisać do pliku w określonym przez siebie formacie (np. plik CSV).

Link to postu
  • 2 miesiące temu...

Dzień dobry,

 

Chciałbym ponownie poruszyć temat, który zaczął mój poprzednik Artur.

W dokumentacji SDK jest przykład RaportySferyczne.RezerwaUrlopowa.RezerwaUrlopowaRaport . 

W ramach tego raportu jest użyty interfejs IMenadzerWymiaruUrlopuPracownika lecz sam przykład wymaga konsultacji.

Czy mogę prosić o naprowadzenie jak policzyć stan  urlopów z poziomu C# na podobieństwo raportu "RP STAN URLOPÓW" ?

 

 

Link to postu
2 godziny temu, Jacek Goszczyński napisał:

Czy mogę prosić o naprowadzenie jak policzyć stan  urlopów z poziomu C# na podobieństwo raportu "RP STAN URLOPÓW" ?

Czy ma Pan problem z czymś konkretnym? Chce Pan stworzyć aplikację Sferyczną czy plugin?

Jeśli chodzi o samo wyliczenie stanu urlopu, to metoda

IMenadzerWymiaruUrlopuPracownika.Pobierz(PracownikGr pracownik, int rok, bool zatrudnienieDodatkowe, RodzajUrlopuWypoczynkowego rodzajUrlopu)

zwraca wszystkie potrzebne dane.
 

Link to postu

 

 

public RezerwaUrlopowaRaport(
            IDataSystemowa dataSystemowa,
            IMenadzerWymiaruUrlopuPracownika menadzerWymiaruUrlopuPracownika,
            IWyplaty menadzerWyplat,
            IUmowyPracownicze menadzerUmow,
            ISumaryczneECP menadzerSumarycznychECP,
            IParametry menadzerParametrow)
        {
            _dataSystemowa = dataSystemowa;
            _menadzerWymiaruUrlopuPracownika = menadzerWymiaruUrlopuPracownika;
            _menadzerWyplat = menadzerWyplat;
            _menadzerUmow = menadzerUmow;
            _menadzerSumarycznychECP = menadzerSumarycznychECP;
            _menadzerParametrow = menadzerParametrow;
        }

 

Chodzi mi o obiekt menadzerWymiaruUrlopuPracownika.

W jaki sposób go stworzyć. (Gdzie jest konstruktor?) aby potem przypisać go do Interfejsu IMenadzerWymiaruUrlopuPracownika?

Link to postu
39 minut temu, Jacek Goszczyński napisał:

Chodzi mi o obiekt menadzerWymiaruUrlopuPracownika.

W jaki sposób go stworzyć. (Gdzie jest konstruktor?) aby potem przypisać go do Interfejsu IMenadzerWymiaruUrlopuPracownika?

"PrzykladyKsef" zawiera przykład aplikacji sferycznej. W aplikacjach tego typu dostęp do wszystkich menadżerów zapewniony jest przez uchwyt sferyczny (typ Uchwyt). Najpierw trzeba stworzyć uchwyt, a następnie można pobrać IMenadzerWymiaruUrlopuPracownika w ten sposób:

var menadzerWymiaruUrlopuPracownika = uchwyt.PodajObiektTypu<IMenadzerWymiaruUrlopuPracownika>();

albo jeszcze prościej:

var menadzerWymiaruUrlopupracownika = uchwyt.MenadzerWymiaruUrlopuPracownika()

Jeśli jeszcze Pan tego nie zrobił, to oprócz analizy przykładów zachęcam do zapoznania się z dokumentacją Sfery (InsERT.nexo.Sfera.chm).

Edytowane przez Łukasz G.
Link to postu

Bardzo dziękuję za szybką odpowiedz.

 

W miarę postępu pojawiły się nowe pytania

Jak mam wygenerować obiekt dla interfejsu IBudowniczyParametrowRaportu ?

 

var fabrykaParametrowRaportu = sfera.??    //PodajObiektTypu<IBudowniczyParametrowRaportu>();
 rur.DefiniujParametryRaportu(fabrykaParametrowRaportu);

 

Oraz: interfejsu  IParametryDanychRaportu
                    var parametryDanychRaportu = sfera.??;    //.PodajObiektTypu<IParametryDanychRaportu>();
                    var result = rur.PodajDaneRaportu(parametryDanychRaportu);

 

Gdzie rur jest obiektem klasy  RezerwaUrlopowaRaport.

 

Pozdrawiam

Jacek

Link to postu

Chyba trochę błądzimy we mgle...

Interfejsy IBudowniczyParametrowRaportu oraz IParametryDanychRaportu to interfejsy używane podczas tworzenia rozszerzenia do nexo zawierającego raport sferyczny. Więcej na ten temat można przeczytać w dokumentacji SDK (Rozszerzanie -> Punkty rozszerzania ->  Dane do raportu sferycznego). Jak to wygląda od strony programu można zobaczyć na dedykowanym filmiku.

Z tego co zrozumiałem z poprzednich wiadomości, Pan nie tworzy rozszerzenia do nexo, tylko osobną aplikację, której zadaniem będzie wyciągnięcie z nexo danych urlopowych i wyeksportowanie ich do pliku, czy dobrze rozumiem? W związku z tym te interfejsy nie są Panu do niczego potrzebne.

Najprostsza wersja takiego rozwiązania może wyglądać jakoś tak:

        public void Wykonaj(Uchwyt sfera)
        {
            var menadzerWymiaruUrlopu = sfera.MenadzerWymiaruUrlopuPracownika();
            var pracownicyGr = sfera.Podmioty().Dane.WszyscyPracownicy().Select(x => x.Osoba.Pracownik.PracownikGr).ToList();

            using (var sw = new StreamWriter(@"StanUrlopu.csv"))
            {
                sw.WriteLine("Pracownik;Wymiar;Korekta;Zaległy;Razem;Wykorzystany;Pozostało");
                foreach (var pracownikGr in pracownicyGr)
                {
                    var wymiarUrlopu = menadzerWymiaruUrlopu.Pobierz(pracownikGr, 2023);

                    var wiersz = new List<string>();
                    wiersz.Add(pracownikGr.Pracownik.Osoba.ImieNazwisko());
                    wiersz.Add(ToDaysString(wymiarUrlopu.Nalezny));
                    wiersz.Add(ToDaysString(wymiarUrlopu.Korekta));
                    wiersz.Add(ToDaysString(wymiarUrlopu.Zalegly));
                    var razem = wymiarUrlopu.Nalezny + wymiarUrlopu.Korekta + wymiarUrlopu.Zalegly;
                    wiersz.Add(ToDaysString(razem));
                    wiersz.Add(ToDaysString(wymiarUrlopu.WykorzystanyNaDzien));
                    var pozostalo = razem - wymiarUrlopu.WykorzystanyNaDzien;
                    wiersz.Add(ToDaysString(pozostalo));
                    sw.WriteLine(String.Join(";", wiersz));
                }
            }
        }

        private string ToDaysString(int minutes)
        {
            return Math.Round(((decimal)minutes / 480), 2, MidpointRounding.AwayFromZero).ToString("0.##");
        }

Ta metoda pobiera stan urlopu dla wszystkich pracowników i eksportuje te dane to pliku "StanUrlopu.csv".

Link to postu
×
×
  • Dodaj nową pozycję...