Skocz do zawartości

[Sfera] Absencja na godziny

Polecane posty

Czy dobrze rozumuję, że jeśli chciałbym Sferycznie wprowadzić absencję, w ilości dwóch godzin, wybranego dnia, to wystarczy, że w poniższym kodzie zrobię 08:00:00,000 do 10:00:00,000? Czy Sfera/NEXO waliduje użycie danego dnia godzin w tym samym zakresie - tu pytanie, czy muszę pilnować dokładnie godzin, czy mogę po prostu wprowadzać je codziennie od 8, nawet po kilka razy?

// okres
  string okresod = results.from+" 07:00:00,000"; string okresdo = results.to+" 07:00:00,000";
  DateTime dataOkresuOd = DateTime.ParseExact(okresod,"yyyy-MM-dd HH:mm:ss,fff",System.Globalization.CultureInfo.InvariantCulture);
  DateTime dataOkresuDo = DateTime.ParseExact(okresdo,"yyyy-MM-dd HH:mm:ss,fff",System.Globalization.CultureInfo.InvariantCulture);
  urlop.DlaOkresu(new OkresWymagany(){DataPoczatkowa = dataOkresuOd,DataKoncowa = dataOkresuDo});

 

Link to postu

Absencje na część dnia dodaje się trochę inaczej. Tak jak przy zwykłej absencji, w pierwszej kolejności należy ustawić dane pracownika, typ oraz okres absencji (w tym przypadku jeden dzień). Przy ustawianiu okresu nie ustawiamy części godzinowej. Dla programu nie ma ona znaczenia i zostanie ucięta. Następnie można oznaczyć absencję jako "na część dnia" w poniższy sposób:

var naCzescDnia = new NaCzescDnia();
zapisWECP.Dane.Absencja.NaCzesciDnia.Add(naCzescDnia);
naCzescDnia.Umowa = zapisWECP.Dane.Umowy.FirstOrDefault();
naCzescDnia.GodzinAbsencji.Ticks = TimeSpan.FromHours(2).Ticks;
// W przypadku godzin nocnych dodatkowo:
// naCzescDnia.GodzinAbsencjiNocne.Ticks = TimeSpan.FromHours(2).Ticks;

Jeśli absencja powiązana jest z kilkoma umowami równoległymi, to do kolekcji NaCzesciDnia należy dodać osobną pozycję dla każdej z tych umów.

 

2 godziny temu, Radomił Ząbik napisał:

Czy Sfera/NEXO waliduje użycie danego dnia godzin w tym samym zakresie - tu pytanie, czy muszę pilnować dokładnie godzin, czy mogę po prostu wprowadzać je codziennie od 8, nawet po kilka razy?

Nie da się wprowadzić dwóch absencji powiązanych z tą samą umową tego samego dnia nawet jeśli zostaną one oznaczone jako "na część dnia".

  • Dziękuję 1
Link to postu

No dobra, niestety nie poszło tak łatwo :(

Niestety, nie udało mi się dodać urlopu, otrzymuję taki błąd:

Cytat

Błąd podczas wprowadzania wniosku o urlop: Absencję na część dnia można ustawić tylko dla absencji urlopowej. na polach: Absencja.NaCzesciDnia
Nie ustawiono powiązanego obiektu. na polach: NaCzescDnia.Umowa

Rodzaj absencji, to Opieka nad zdrowym dzieckiem, a absencja jest dodawana z niepotwierdzonym statusem - potem Sferycznie, jak już przełożony zatwierdzi, zmieniamy status. Podejrzewałbym ten status, ale w razie czego, wrzucam cały kod odpowiedzialny u nas za absencje:

IZapisyWECP zapisyWECP = sfera.PodajObiektTypu<IZapisyWECP>();
IPodmioty podmioty = sfera.PodajObiektTypu<IPodmioty>();
ITypyAbsencji typyAbsencji = sfera.PodajObiektTypu<ITypyAbsencji>();
using (var urlop = zapisyWECP.Utworz())
  {
  // typ absencji
  int typabsencji; typabsencji = results.type;
  urlop.Dane.Typ = (byte)TypZapisuWECP.Absencja;
  var absencja = urlop.Dane.Absencja;
  absencja.Typ = typyAbsencji.Dane.Wszystkie().FirstOrDefault(x => x.Id == typabsencji);
  urlop.Dane.Absencja.Status = 0; // ustawienie statusu absencji
  // pracownik
  int osoba; osoba = results.person;
  var pracownik = podmioty.Dane.WszyscyPracownicy().FirstOrDefault(x => x.Osoba.Id == osoba);
  if(pracownik!=null) urlop.DlaPracownika = pracownik.Osoba.Pracownik;
  Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Tworzenie wniosku urlopowego: "+pracownik.Osoba.Imie+" "+pracownik.Osoba.Nazwisko);
  // okres
  string okresod = results.from+" 07:00:00,000"; string okresdo = results.to+" 07:00:00,000";
  DateTime dataOkresuOd = DateTime.ParseExact(okresod,"yyyy-MM-dd HH:mm:ss,fff",System.Globalization.CultureInfo.InvariantCulture);
  DateTime dataOkresuDo = DateTime.ParseExact(okresdo,"yyyy-MM-dd HH:mm:ss,fff",System.Globalization.CultureInfo.InvariantCulture);
  urlop.DlaOkresu(new OkresWymagany(){DataPoczatkowa = dataOkresuOd,DataKoncowa = dataOkresuDo});
  Console.WriteLine("Okres: "+okresod+" - "+okresdo);
  // na godziny
  if(results.hours!=null)
    {
  	int godziny = results.hours;
    var naCzescDnia = new NaCzescDnia();
    urlop.Dane.Absencja.NaCzesciDnia.Add(naCzescDnia);
    naCzescDnia.Umowa = urlop.Dane.Umowy.FirstOrDefault();
    naCzescDnia.GodzinAbsencji.Ticks = TimeSpan.FromHours(godziny).Ticks;	
    Console.WriteLine("Godzinowa: "+godziny);
    }
  // opis
  urlop.Dane.Opis = results.comment;
  // zapisanie 
  if(urlop.Zapisz())  { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Wprowadzono wniosek: "+urlop.Dane.Pracownik.Osoba.Imie+" "+urlop.Dane.Pracownik.Osoba.Nazwisko);  response = "{ \"id\":\""+urlop.Dane.Id+"\" }"; }
  else { Globals.errors = ""; urlop.WypiszBledy(); Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd H:mm:ss")+" - Błąd podczas wprowadzania wniosku o urlop: "+Globals.errors); response = "{ \"error\":\""+Globals.errors+"\" }"; }

  }

 

Link to postu
13 minut temu, Radomił Ząbik napisał:

Rodzaj absencji, to Opieka nad zdrowym dzieckiem, a absencja jest dodawana z niepotwierdzonym statusem - potem Sferycznie, jak już przełożony zatwierdzi, zmieniamy status. Podejrzewałbym ten status, ale w razie czego, wrzucam cały kod odpowiedzialny u nas za absencje:

Ma Pan rację, problemem jest status. Absencję na część dnia można ustawić tylko na zatwierdzonych absencjach urlopowych.

Skoro status również zmieniany jest sferycznie, to może można by dopiero przy zatwierdzaniu wypełniać kolekcję NaCzesciDnia, a w przypadku niezatwierdzonych absencji trzymać tę liczbę godzin np. w polu własnym?

Link to postu

No generalnie całość dodawania godzin, miała służyć temu, aby uniknąć właśnie błędów w przypisywaniu tych godzin, które do tej pory były wpisywane w uwagach. 90% urlopów jest potwierdzanych z poziomu kierownika, przez nasz system i tam rzeczywiście będę musiał się oprzeć o pole własne. Niestety, te ręcznie zatwierdzane przez Kadry w Gratyfikancie, tego nie obsłużą, więc tam będę musiał coś wymyśleć - ale wersja a pole własnym, załatwi wstępnie i to, bo mam wtedy kolumnę, którą mogę użyć do formatowania, aby kadrowa widziała to w jakimś innym kolorze.

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