1. CalculateWorkTime

    Article: AN0001602Updated:

    Objekt poskytuje funkce pro výpočet pracovní doby.

    Pomocí funkce CalculateEndDate lze k počátečnímu času připočíst určitý pracovní pracovní čas. Funkce zohlední pracovní dobu v různých dnech, svátky a případnou změněnou pracovní dobu v konkrétní dny.

    Název Popis
    TimeSpan Elapsed Čas od spuštění časovače.
    void AddDay(DayOfWeek day, TimeSpan fromTime, TimeSpan toTime) Metoda přidá do kalendáře pracovní dobu pro konkrétní den v týdnu.
    void AddDay(DayOfWeek day, DateTime fromTime, DateTime toTime) Metoda přidá do kalendáře pracovní dobu pro konkrétní den v týdnu.
    void AddDay(DayOfWeek day, int fromMinute, int toMinute) Metoda přidá do kalendáře pracovní dobu pro konkrétní den v týdnu.
    void AddSpecialDay(DateTime date, TimeSpan fromTime, TimeSpan toTime) Metoda přidá do kalendáře pracovní dobu pro konkrétní den.
    void AddSpecialDay(DateTime date, DateTime fromTime, DateTime toTime) Metoda přidá do kalendáře pracovní dobu pro konkrétní den.
    void AddSpecialDay(DateTime date, int fromMinute, int toMinute) Metoda přidá do kalendáře pracovní dobu pro konkrétní den.
    void AddSpecialDay(DateTime date, FromToIntervalList ft) Metoda přidá do kalendáře pracovní dobu pro konkrétní den.
    void AddWeek(int fromMinute, int toMinute) Metoda přidá do kalendáře pracovní dobu pro dny pondělí až pátek.
    void AddWeekEnd(int fromMinute, int toMinute) Metoda přidá do kalendáře pracovní dobu pro sobotu a neděli.
    DateTime CalculateEndDate(DateTime dateFrom, int addMinutes) Funkce vrátí konečný datum s ohledem na pracovní dobu definovanou v kalendáři.
    string CalendarCode Kód kalendáře.
    void ClearCache() Metoda vymaže nastavení dnů, speciálních dnů a konfiguraci.
    void ClearDay(DayOfWeek day) Metoda vymaže nastavení dnů.
    void ClearAllDay() Metoda vymaže nastavení speciálních dnů.
    WorkTimeConfiguration Configuration Konfigurace kalendáře.
    int DaysCount Počet definic pro dny v týdnu.
    string GetCalendarUrl() Funkce vrátí URL adresu pro zobrazení kalendáře.
    void Initialize() Provede inicializaci kalendáře.
    void Initialize(WorkTimeConfiguration configuration) Provede inicializaci kalendáře se zadanou konfigurací.
    int SpecialDaysCount Počet definic pro speciální dny.

    Názvem DAY jsou ve funkcích označeny dny v týdnu (pondělí - neděle), které tvoří pravidelný čas. Pro každý den je možné zadat více intervalů, kdy se pracuje. Intervaly se můžou překrývat (interně jsou sloučeny). Je tak možné nastavit pracovní dobu např. 8:30-12:00 a 13:00-17:30.

    Název SPECIALDAY  je ve funkcích použit pro konkrétní den (např. 24.12., 31.12. ...), který představuje výjimkou. Pro tento den můžete zadat jinou pracovní dobu (žádnou, zkrácenou, prodlouženou...). Při výpočtu koncového času funkcí CalculateEndDate mají tyto dny přednost před DAY. Tj. pokud je pro konkrétní den definován speciální den, pak je použit. Jinak je použita definice z DAY.

    Inicializace

    Před výpočtem je třeba provést inicializaci objektu kalendáře. To lze provést dvojím způsobem:

    • naplnit běžné a speciální dny přímo do objektu kalendáře
    • nastavit konfiguraci pro čtení dat ze tříd určených pro kalendář

    V prvním případě je třeba vše nastavit pomocí skriptů. Ve druhém případě lze nastavení jednoduše naklikat přes uživatelské rozhraní.

    Výpočet koncového času

    Pro výpočet koncového času se používá funkce CalculateEndDate. V parametru dateFrom se zadá počáteční čas (např. vznik incidentu) a v parametru addMinutes pracovní čas, který se má připočítat. Funkce spočítá konečný datum a čas a vrátí jej. Pro výpočet platí několik pravidel:

    • Pokud není pro vypočítávaný den definice v DAY ani ve SPECIALDAY, pak se den bere bez pracovní doby a přeskakuje se.
    • Přednostně se používají definice SPECIALDAY před DAY.
    • Nejmenší používanou jednotkou pro zadání a výpočty je minuta.
    • Pokud je počáteční datum mimo pracovní dobu, pak se posune na počátek nejbližšího pracovního času v budoucnu. Tj. pokud např. incident vznikne v neděli, která není nastavena jako pracovní den, a čas na řešení je 2h, pak koncový čas bude v pondělí 2h po začátku pracovní doby, za předpokladu, že pondělí je nastaveno jako pracovní den.

    Příklad

    //nacist standartni SLA kalendar

    var cwt = OG.Utils.GetSLACalculateWorkTime();

    var d = cwt.CalculateEndDate(OG.DateTime.Now, 480);     //pripocist 8 hodin

    //konverze datumu na text

    var s = d.ToString('dd.MM.yyyy HH:mm:ss');

×