Skocz do zawartości

[Sfera] Dodanie urlopu wypoczynkowego

Polecane posty

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

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;

 

  • Lubię to 1
Link to postu
  • 2 tygodnie później...

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 przez Marek K
Link to postu

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
×
×
  • Dodaj nową pozycję...