Marek K 15 Napisano 13 Grudnia 2023 Udostępnij Napisano 13 Grudnia 2023 w [Sfera] Dodanie urlopu wypoczynkowego Próbuję zrobić aplikację konsolową z szablonu - dodanie urlopu wypoczynkowego z SDK: var zapisyWECP = sfera.ZapisyWECP(); var podmioty = sfera.Podmioty(); var typyAbsencji = sfera.TypyAbsencji(); using (var zapisWECP = zapisyWECP.Utworz()) { zapisWECP.Dane.Typ = (byte)TypZapisuWECP.Absencja; var absencja = zapisWECP.Dane.Absencja; absencja.Typ = typyAbsencji.Dane.Pierwszy(x => x.Nazwa == "Urlop wypoczynkowy"); var podmiotPracownika = podmioty.Dane.WszyscyPracownicy().FirstOrDefault(x => x.Osoba.Nazwisko == "ADAMCZUK"); if (podmiotPracownika != null) { zapisWECP.DlaPracownika = podmiotPracownika.Osoba.Pracownik; Console.WriteLine("DlaPracownika - ten WriteLine pojawia się w konsoli"); } zapisWECP.DlaOkresu(new OkresWymagany() { DataPoczatkowa = new DateTime(2023, 12, 13), DataKoncowa = new DateTime(2023, 12, 15) }); Console.WriteLine("DlaOkresu - ten WriteLine pojawia się w konsoli"); } Pracownik ADAMCZUK istnieje w bazie. Wszytko się wyświetla w konsoli po kolei wg poniższego kodu. Jednak urlop w absencjach nie pojawia się. Co robię źle? Proszę o wskazówki. Dziękuję. Cały kod: using InsERT.Moria.Kadry.Duze; using InsERT.Moria.ModelDanych; using InsERT.Moria.Sfera; using InsERT.Mox.Product; using System; using System.Linq; namespace DodanieUrlopuConsole { public class Program { private static void Main(string[] args) { try { Console.WriteLine("Sferyczna aplikacja konsolowa"); DaneDoUruchomieniaSfery daneDoUruchomienia; // pobieranie danych z konsoli: //var pobieranie = new PobieranieDanychDoUruchomieniaSfery(); //daneDoUruchomienia = pobieranie.Pobierz(); // pobieranie danych z InsLauncher: var danePolaczenia = OdbierzDanePolaczeniaZInsLauncher(); if (danePolaczenia != null) { daneDoUruchomienia = PodajDaneDoUruchomienia(danePolaczenia); } else { // domyślne dane zaszyte w programie: daneDoUruchomienia = PodajDomyslneDaneDoUruchomienia(); } Console.WriteLine("Trwa uruchamianie Sfery w wersji {0}{1}...", DanePolaczenia.WersjaSfery, !string.IsNullOrEmpty(daneDoUruchomienia.Baza) ? $" na bazie {daneDoUruchomienia.Baza}" : string.Empty); using (var sfera = Uchwyty.UtworzNowy(daneDoUruchomienia, new PostepLadowaniaSfery())) { Console.WriteLine("Sfera została uruchomiona!"); var zapisyWECP = sfera.ZapisyWECP(); var podmioty = sfera.Podmioty(); var typyAbsencji = sfera.TypyAbsencji(); using (var zapisWECP = zapisyWECP.Utworz()) { zapisWECP.Dane.Typ = (byte)TypZapisuWECP.Absencja; var absencja = zapisWECP.Dane.Absencja; absencja.Typ = typyAbsencji.Dane.Pierwszy(x => x.Nazwa == "Urlop wypoczynkowy"); var podmiotPracownika = podmioty.Dane.WszyscyPracownicy().FirstOrDefault(x => x.Osoba.Nazwisko == "ADAMCZUK"); if (podmiotPracownika != null) { zapisWECP.DlaPracownika = podmiotPracownika.Osoba.Pracownik; Console.WriteLine("DlaPracownika - ten WriteLine pojawia się w konsoli"); } zapisWECP.DlaOkresu(new OkresWymagany() { DataPoczatkowa = new DateTime(2023, 12, 13), DataKoncowa = new DateTime(2023, 12, 15) }); Console.WriteLine("DlaOkresu - ten WriteLine pojawia się w konsoli"); } } } catch (Exception ex) { Console.WriteLine(Helpers.GetExceptionMessage(ex)); } Console.WriteLine("Aby zakończyć, wciśnij Enter"); _ = Console.ReadLine(); } private static DanePolaczenia OdbierzDanePolaczeniaZInsLauncher() { var commandLineArguments = Environment.GetCommandLineArgs(); if (commandLineArguments != null && commandLineArguments.Contains(@"/UruchomionePrzezInsLauncher")) { //pobieramy parametry podane przez Launcher return DanePolaczenia.Odbierz(); } return null; } private static DaneDoUruchomieniaSfery PodajDaneDoUruchomienia(DanePolaczenia danePolaczenia) { var dane = new DaneDoUruchomieniaSfery() { DanePolaczenia = danePolaczenia, Produkt = ProductId.Gratyfikant, LoginNexo = "Szef", HasloNexo = "robocze" }; return dane; } private static DaneDoUruchomieniaSfery PodajDomyslneDaneDoUruchomienia() { var dane = new DaneDoUruchomieniaSfery() { Serwer = "DES-moja-nazwa-MAT\\INSERTNEXO", Baza = "Demo_1", Produkt = ProductId.Gratyfikant, LoginNexo = "Szef", HasloNexo = "robocze" }; return dane; } } } Link to postu
Radomił Ząbik 310 Napisano 13 Grudnia 2023 Udostępnij Napisano 13 Grudnia 2023 w [Sfera] Dodanie urlopu wypoczynkowego No uzupełnia Pan wszystko, ale nie zapisuje Brakuje: zapisWECP.Zapisz(); Oczywiście, proszę jeszcze sprawdzić kwestię zwracania błędów podczas zapisu, jest w dokumentacji 2 Link to postu
Marek K 15 Napisano 14 Grudnia 2023 Autor Udostępnij Napisano 14 Grudnia 2023 w [Sfera] Dodanie urlopu wypoczynkowego (edytowane) Działa, dziękuję. Jak dodać urlop na część dnia? Np. 13.12.2023, 11:30-14:00 (2h 30min) lub pomijając godziny: 13.12.2023 (2h 30min) Edytowane 14 Grudnia 2023 przez Marek K Link to postu
Radomił Ząbik 310 Napisano 14 Grudnia 2023 Udostępnij Napisano 14 Grudnia 2023 w [Sfera] Dodanie urlopu wypoczynkowego Wprowadzając zmianę w godzinach przepracowanych, tutaj opis w teorii oraz informacje jakich elementów użyć: A w Sferze, to już w zależności od potrzeb, np. dzienne wprowadza się tak: zapisWECP.Dane.Typ = (byte)TypZapisuWECP.Godziny; var dzienne = new DzienSzczegoly(); zapisWECP.Dane.Godziny.DzienSzczegoly.Add(dzienne); dzienne.Poczatek = TimeSpan.Parse("11:30:00").Ticks; dzienne.Koniec = TimeSpan.Parse("14:00:00").Ticks; dzienne.TypOkresu = (byte)TypOkresuGodzinSzczegolowych.PierwszyDzien; dzienne.TypGodzin = 0; 1 Link to postu
Marek K 15 Napisano 14 Grudnia 2023 Autor Udostępnij Napisano 14 Grudnia 2023 w [Sfera] Dodanie urlopu wypoczynkowego Jeśli dobrze zrozumiałem to podał Pan przykład wprowadzenia godzin pracy. Mi chodziło o wprowadzenie poprzez Sferę urlopu na część dnia, np. 2h 30min, tak jak w programie: Link to postu
Radomił Ząbik 310 Napisano 14 Grudnia 2023 Udostępnij Napisano 14 Grudnia 2023 w [Sfera] Dodanie urlopu wypoczynkowego Aaa, ok, zakręciłem się, to pewnie chodzi o to: 1 Link to postu
Marek K 15 Napisano 27 Grudnia 2023 Autor Udostępnij Napisano 27 Grudnia 2023 w [Sfera] Dodanie urlopu wypoczynkowego (edytowane) Chcę uniknąć braku zapisu urlopu w przypadku gdy jakiś dzień z zakresu jest już wpisany jako urlop, np: w systemie jest już urlop w dniu 20.12.2023, ja dodaję urlop od 18.12.2023 do 22.12.2023. Jednak poniższy kod w taki przypadku dodaje tylko ostatni dzień tj. 22.12.2023. Jak to rozwiązać? Jeśli jest jakiś lepszy sposób to proszę o podpowiedź. if (zapisWECP.Zapisz()) { Console.WriteLine("zapisany"); } else { Console.WriteLine("nie zapisany"); var daty = new List<DateTime>(); DateTime dataAktualna = new DateTime(2023, 12, 18); while (dataAktualna <= new DateTime(2023, 12, 22)) { daty.Add(dataAktualna); Console.WriteLine(dataAktualna.ToString()); dataAktualna = dataAktualna.AddDays(1); } foreach (var data in daty) { zapisWECP.DlaOkresu(new OkresWymagany() { DataPoczatkowa = data, DataKoncowa = data }); if (zapisWECP.Zapisz()) // zapisuje tylko ostatnią datę (w tym przypadku 22.12.2023) { Console.WriteLine("Zapisano wszystkie daty"); } else { Console.WriteLine("Błąd podczas zapisywania"); // wyświetla jeśli urlop w dany dzień jest już dodany } } } EDIT: Znalazłem takie rozwiązanie, jednak czy jest poprawne? foreach (var data in daty) { var nowyZapisWECP = zapisyWECP.Utworz(); nowyZapisWECP.Dane.Typ = (byte)TypZapisuWECP.Absencja; var nowaAbsencja = nowyZapisWECP.Dane.Absencja; nowaAbsencja.Typ = typyAbsencji.Dane.Pierwszy(x => x.Nazwa == "Urlop wypoczynkowy"); var nowyPodmiotPracownika = podmioty.Dane.WszyscyPracownicy().FirstOrDefault(x => x.Osoba.Nazwisko == "ADAMCZUK" && x.Osoba.Imie == "Karol"); if (nowyPodmiotPracownika != null) { nowyZapisWECP.DlaPracownika = nowyPodmiotPracownika.Osoba.Pracownik; } nowyZapisWECP.DlaOkresu(new OkresWymagany() { DataPoczatkowa = data, DataKoncowa = data }); if (nowyZapisWECP.Zapisz()) { Console.WriteLine("Zapisano wszystkie daty"); } else { Console.WriteLine("Błąd podczas zapisywania"); // wyświetla jeśli urlop w dany dzień jest już dodany } } Edytowane 27 Grudnia 2023 przez Marek K Link to postu
Krzysztof Wesoły 4 Napisano 4 Stycznia Udostępnij Napisano 4 Stycznia w [Sfera] Dodanie urlopu wypoczynkowego Ogólnie zadziała, ale.... Przyjął Pan bardzo duże uproszczenie. Zapis absencji może NIE POWIEŚĆ się z wielu powodów - tu nie wie Pan dlaczego. Mógłby Pan odczytywać błędy po zapisie (patrz dokumentacja) i na ich podstawie odpowiednio zareagować. Przy takim zapisie dzień po dniu otrzyma Pan n zapisów urlopów a nie 1 zapis. (ale być może to nie problem) Zwracam również uwagę na potencjalne wycieki pamięci. Sugeruję użyć składnię zastosowaną wyżej w przykładzie pana Marka using (var zapisWECP = zapisyWECP.Utworz()) Link to postu
Polecane posty