Skocz do zawartości

Zmiany w planie pracy ze Sfery

Polecane posty

Chciałbym kształtować  plan pracy indywidualnie dla każdego pracownika. Obecnie bardzo wygodnie robi się to z GUI Gratyfikanta. Chciałbym jednak poprzez Sferę robić to zbiorczo, tak, jak robię dla Ewidencji Czasu Pracy z rejestratora. Czy istnieje domyślny konstruktor takiego zapisu, podobnie jak dla ZapisWECP?

Link to postu

Zakładam że wykorzystuje Pan metodę UstawGodziny() dla ustawienia 'zmian w godzinach przepracowanych' i pyta czy istnieje podobna metoda do ustawienia 'zmiany w planie pracy'.
Metody takiej nie ma. Liczbę godzin do przepracowania ustawia się bezpośrednio w obiekcie.
Przykład metody dodającej zmianę w planie pracy poniżej:

public void DodanieZmianyWPlaniePracy()
        {
            using ( var sfera = UruchomSfere() )
            {
                IZapisyWECP zapisyWECP = sfera.PodajObiektTypu<IZapisyWECP>();
                IPodmioty podmioty = sfera.PodajObiektTypu<IPodmioty>();

                using ( var zapisWECP = zapisyWECP.Utworz() )
                {
                    zapisWECP.Dane.Typ = (byte)TypZapisuWECP.Wyjatek;
                    var podmiotPracownika = podmioty.Dane.WszyscyPracownicy().FirstOrDefault(x => x.Osoba.Nazwisko == "Skoliworczyński");
                    if ( podmiotPracownika != null )
                        zapisWECP.DlaPracownika = podmiotPracownika.Osoba.Pracownik;
                    var dzien = new DateTime(2016, 9, 29);
                    zapisWECP.DlaOkresu(new OkresWymagany() { DataPoczatkowa = dzien, DataKoncowa = dzien });

                    zapisWECP.Dane.Wyjatek.DoPrzepracowania.Ticks = TimeSpan.FromHours(10).Ticks;

                    if ( !zapisWECP.Zapisz() )
                        zapisWECP.WypiszBledy();
                }
            }
        }

 

Link to postu
  • 4 tygodnie później...

Dziękuję. Tak, zmianę godzin do przepracowania wstawiam z pliku w podany powyżej sposób. Chciałbym jeszcze ustawiać w danym dniu plan pracy od godziny do godziny.

ZapisWECP.Dane.Wyjatek nie posiada metody do zapisu w DzienSzczegoly.

W GUI widzę, że możliwość zapisu planowanego początku i zakończenia pracy pojawia się dopiero po wpisaniu pracownika (z aktualnym planem/kalendarzem). Po zapisie wyjątku (Zmiany w planie pracy) widzę w Bazie, że pojawił się rekord planu pracy w DniSzczegoly powiązany z DniemKalendarza. Ten z kolei poprzez zapis w Dni_Kalendarza_WyjatekECP powiązany jest z ZapisemWECP od którego wszystko się zaczyna. Niestety nie potrafię wszystkiego razem w Sferze razem powiązać. Proszę o pomoc

Link to postu

Faktycznie,  ZapisWECP.Dane.Wyjatek nie ma właściwości DzienSzczegoly.
Ma jednak Szczegoly :)  => ZapisWECP.Dane.Wyjatek.Szczegoly  która jest kolekcją elementów typu DzienSzczegoly. 
Szczegóły w zmianie planu pracy można dodać w następujący sposób:

//W kodzie z wcześniejszego przykładu:
//Zamiast:
zapisWECP.Dane.Wyjatek.DoPrzepracowania.Ticks = TimeSpan.FromHours(10).Ticks;

//Wpisać
var dzienSzczegoly = new DzienSzczegoly();
dzienSzczegoly.Poczatek = TimeSpan.FromHours(16).Ticks;
dzienSzczegoly.Koniec = TimeSpan.FromHours(4).Ticks;
dzienSzczegoly.TypOkresu = (byte)TypOkresuGodzinSzczegolowych.DwaDni;
zapisWECP.Dane.Wyjatek.Szczegoly.Add(dzienSzczegoly);

Należy mieć na uwadze, że dodanie każdego dzienSzczegoly do kolekcji Szczegoly przeliczy godziny rozpoczęcia i zakończenia pracy, oraz łączną liczbę godzin do przepracowania. Jeżeli istnieje potrzeba "rozjechania" tych wartości to  zapisWECP.Dane.Wyjatek.DoPrzepracowania.Ticks należy ustawić po dodaniu ostatniego dzienSzczegoly :)

Link to postu

Serdecznie dziękuję za błyskawiczną reakcję. Niestety próba zapisu:

using (var zapisWECP = zapisyWECP.Utworz())
                            {
                                zapisWECP.Dane.Typ = (byte)TypZapisuWECP.Wyjatek;
                                zapisWECP.DlaPracownika = pracownik.Osoba.Pracownik;
                                var dzien = new DateTime(2019, 8, 22);
                                zapisWECP.DlaOkresu(new OkresWymagany() { DataPoczatkowa = dzien, DataKoncowa = dzien });
                                var dzienSzczegoly = new DzienSzczegoly();
                                dzienSzczegoly.Poczatek = TimeSpan.FromHours(7).Ticks;
                                dzienSzczegoly.Koniec = TimeSpan.FromHours(15).Ticks;
                                dzienSzczegoly.TypOkresu = (byte)TypOkresuGodzinSzczegolowych.PierwszyDzien;
                                zapisWECP.Dane.Wyjatek.Szczegoly.Add(dzienSzczegoly);


                                if (!zapisWECP.Zapisz())
                                {
                                    Console.WriteLine("Wystapiły błędy");
                                    zapisWECP.WypiszBledy();
                                }
                               
                            }

 

daje błąd:

653232390_Adnotacja2019-08-28123329.png.305c2caa040dfb2640cbf6676f1a964c.png

Link to postu

Ten błąd mówi że wprowadzono już godziny szczegółowe, które pokrywają się z tymi nowymi (mogą częściowo)
Pewnie dla pracownika w danym dniu prowadzony jest kalendarz ze szczegółowym planem i po podstawieniu daty domyślnie do wyjątku dodają się te godziny szczegóły z planu pracy.
Przed dodaniem pierwszego szczegółu trzeba by usunąć istniejące.

Link to postu

Przeprowadziłem szerokie badania dla wielu kombinacji dni, godzin i pracowników. Wszystkie próby robione były w czasie przyszłym, gdzie nie mogło być żadnych zapisów. Okazało się, że podany powyżej błąd występuje dla pracowników, których plan pracy rozliczany jest szczegółowo. Dla rozliczanych zbiorczo zapis odbywa się bez przeszkód. W celu upewnienia się, zamieniłem w programie kolejność wierszy z :

zapisWECP.DlaPracownika = pracownik.Osoba.Pracownik;

zapisWECP.Dane.Wyjatek.Szczegoly.Add(dzienSzczegoly);

na

zapisWECP.Dane.Wyjatek.Szczegoly.Add(dzienSzczegoly);

zapisWECP.DlaPracownika = pracownik.Osoba.Pracownik;

Zapis zmiany planu pracy pojawił się bez błędu ale godziny planowanego początku i końca pracy nie zostały zmienione, tzn pozostały takie, jak w ramowym planie/kalendarzu.

Jak można z tego wybrnąć?

 

 

Link to postu

Jak pisałem wcześniej:) 

Cytat

Przed dodaniem pierwszego szczegółu trzeba by usunąć istniejące.

czyli:

zapisWECP.DlaPracownika = pracownik.Osoba.Pracownik;
zapisWECP.Dane.Wyjatek.Szczegoly.Clear();
zapisWECP.Dane.Wyjatek.Szczegoly.Add(dzienSzczegoly);

Pracownika należy ustawić na początku.
Przy jego ustawianiu pobierane są wartości/parametry planu pracy na dany dzień i wpisywane jako domyślne dla zmiany w planie pracy.
No i później te dane można edytować.
Ustawienie wpierw wartości a później pracownika nic nie da bo ustawienie pracownika przywróci właśnie te wartości domyślne.
 

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