Module: sdw/templates/widgets/calendarController

Dieses Modul definiert die Klasse calendarController.

delegate spezialisiert containerView und stellt einen Kalender innerhalb des ViewContainers dar, der die Module der einzelnen Events optisch differenziert nach Eventtyp anzeigt und zur Bearbeitung anbietet.

  1. Die Module können verschoben werden und damit Anfangs- und Endezeiten geändert werden
  2. Die Module können in Bezug auf ihre Länge (Dauer) gezogen oder gestaucht werden
  3. Neue Module können durch cmd/ctrl-Klick eingefügt werden. Details werden über das Modul module:xpm/pm/zeiterfassung/kalenderDialog erfragt.
  4. Ein Klick auf ein Modul zeigt eine Summary seine Events an
  5. Ein Doppelklick auf ein Modul öffnet diese in einem neuen ContainerView, einem module:statt/buchung/event/eventView
Author:
  • sdw.systems
Source:

Extends

Requires

  • module:dojox/calendar/Calendar
  • module:dojo/store/Observable
  • module:dojo/store/Memory
  • module:dojox/calendar/Calendar
  • module:sdw/Command
  • module:sdw/util
  • module:sdw/const

Members

calendarDataBis

Properties:
Name Type Description
calendarDataBis Date

Datum in der Zukunft, bis zu dem die API Kalenderitems liefern soll

Source:

calendarDataVon

Properties:
Name Type Description
calendarDataVon Date

Datum in der Vergangenheit, ab dem die API die Kalenderitems liefern soll

Source:

calendarMetadata

Properties:
Name Type Description
calendarMetadata Object

Struktur mit Metadaten des Kalenders, wird vom Server im XHR opcFetchCalendarData geliefert

Source:

calStore

Properties:
Name Type Description
calStore dojo/store/Memory

Memorystore der Kalender

Properties
Name Type Description
item.cssclass String

css-Klasse und damit ID des Kalenders

item.name String

Name des Kalenders

item.klasse String

Name der fachlichen Klasse

item.oid OID

OID des fachlichen Objektes das dieses Kalenderitem repräsentiert

item.visible boolean

Defaultwert der Sichtbarkeit für diese Kalenderart, aknn im GUI per Checkbox geändert werden.

Source:

canvas

Properties:
Name Type Description
ContenPane Object

in dem der Kalender dargestellt werden soll

Source:

datepicker

Properties:
Name Type Description
datepicker Object

Zeiger auf ein optionales DatePicker-Objekt

Source:

dialogClass

Properties:
Name Type Description
dialogClass Object

Zeiger auf die Dialogklasse, wird in setProperties auf Basis des Moduls moduleNameDialog geladen

Source:

domNode

Properties:
Name Type Description
domNode Object

DOM-Objekt, div, in dem der Kalender dargestellt werden soll

Source:

hasContextMenue

Properties:
Name Type Description
hasContextMenue Boolean

Kontextmenü soll verwendet werden

Source:

hasDefaultContextMenue

Properties:
Name Type Description
hasDefaultContextMenue Boolean

Kontextmenü soll nur mit bestimmten MenüItems verwendet werden. Deshalb muss createContextMenue explizit aufgerufen werden, siehe Konstruktor

Source:

hasSubColumns

Properties:
Name Type Description
hasSubColumns Boolean

Steuert, ob für jeden Kalender eine separate Spalte angezeigt werden soll

Source:

hasTooltips

Properties:
Name Type Description
hasTooltips Boolean

Steuert, ob für die KalenderItems Tooltips angezeigt werden soll oder nicht

Source:

itemStore

Properties:
Name Type Description
calStore dojo/store/Memory

Memorystore der KalenderItems

Source:

metaKeyForNewItem

Properties:
Name Type Default Description
metaKeyForNewItem Boolean true

Steuert ob die cmd/ctrl-Taste gedürckt gehalten werden muss wenn auf den Kalender geklickt wird um ein neues Item einzufügen.

Source:

moduleName

Properties:
Name Type Description
moduleName String

Name des Moduls aus lokaler Konstante

Source:

moduleNameDialog

Properties:
Name Type Description
moduleNameDialog String

Name des Moduls des Dialogs, muss von den abgeleiteten Klassen überschrieben werden

Source:

opcFetchCalendarData

Properties:
Name Type Description
opcFetchCalendarData, OPCODE

muss von den abgeleiteten Klassen überschrieben werden

Source:

opcGetCalendar

Properties:
Name Type Description
opcGetCalendar OPCODE

Muss von den abgeleiteten Klassen überschrieben werden

Source:

opcStoreCalendarItem

Properties:
Name Type Description
opcStoreCalendarItem, OPCODE

muss von den abgeleiteten Klassen überschrieben werden

Source:

(inner) columnViewProps

Properties:
Name Type Description
columnViewProps Object

Propertie-Objekt für den Column-View

  1. minHours Die erste Stunde des Tages, die auf dem Hauptblatt angezeigt wird
  2. maxHours Die erste Stunde des Tages, die auf dem Hauptblatt nicht mehr angezeigt wird
  3. hourSize Die Höhe einer Stunde in Pixel
  4. timeSlotDuration Die Dauer eines Zeitfensters in Minuten, muss durch 60 teilbar sein
Source:

(inner) createItemFunc

Properties:
Name Type Default Description
createItemFunc function lang.hitch(this,

this.createItem) Verweist auf die Methode, die neue Kalenderobjekte anlegt

Source:

(inner) createOnGridClick

Properties:
Name Type Default Description
createOnGridClick Boolean true

Klickevents auf dem Grid werden akzeotiert, das ist die Basis dafür dass KalenderItems per Mausklick angelegt werden können

Source:

(inner) date

Properties:
Name Type Default Description
date Object new

Date() Basisdatum des Kalenders, hier das aktulle Datum

Source:

(inner) dateInterval

Properties:
Name Type Default Description
dateInterval String SDWConst.attrWeek

Initial verwendetes Intervall, hier Woche, möglich sind "day", "week", "month"

Source:

(inner) dateIntervalSteps

Properties:
Name Type Default Description
dateIntervalSteps Number 1

Initial verwendete Anzahl Intervalle, hier 1, also eine Woche

Source:

(inner) debug

Properties:
Name Type Description
debug-Flag Boolean
Source:

(inner) delegate

Properties:
Name Type Description
delegate sdw/templates/widgets/calendarController

Zeiger auf das delegate Objekt

Source:

(inner) endTimeAttr

Properties:
Name Type Description
endTimeAttr String

Attributname, der den Default überschreiben soll, hier SDWConst.jsonBis

Source:

(inner) languagePack

Properties:
Name Type Description
languagePack Object
Source:

(inner) selectionMode

Properties:
Name Type Description
selectionMode String

Attributname, der den selectionMode überschreibt, Domäne ist none, single, multiple

Source:

(inner) startTimeAttr

Properties:
Name Type Description
startTimeAttr String

Attributname, der den Default überschreiben soll, hier SDWConst.jsonVon

Source:

(inner) style

Properties:
Name Type Description
style String

CSS-Angaben zur Positionierung und zur Größe Muss mit relative oder absolute angegeben werden gem. Doku

Source:

(inner) summaryAttr

Properties:
Name Type Description
summaryAttr String

Attributname, der den Default summaryAttr überschreiben soll, hier SDWConst.jsonLabel

Source:

Methods

constructor(args)

Der Konstruktor stellt alle Argumente innerhalb der Klasse unter this.argument zur Verfügung.

Parameters:
Name Type Description
args Object

Argumentobjekt

Source:

createGUI()

Kalenderwidget bauen Hier wird erstmal nur das GUI ohne Inhalt (also ohne Kalenderitems) gebaut. Der Kalender hat erstmal keinen Store zugewiesen. Diese Zuweisung erfolgt durch die Mmethode fetchCalendarData, die aber erst dann von der KalenderPerspektive aufgerufen wird, wenn die Liste der Kalenderarten geladen und der Datepicker initialisiert ist.

Source:

createItem(view, d, e, subColumn) → {Object}

Erzeugt ein neuen Kalenderitem. Wird vom Kalender aufgerufen, baut das neue Item zusammen und gibt es zurück. Die Methode ist synchron, falls nicht null zurückgegeben wird wird also immer sofort ein neuer Item in den Kalender eingehängt. Da die Erfassung er Attribute aber über einen Dialog erfolgt müssen

  1. die nachträglich erfassten Attribute im OK-Fall in das dann schon existierende KalenderItem gemixt werden
  2. Im Abbrechen-Fall muss das neue Item wieder gelöscht werden.
Parameters:
Name Type Description
view Object

Der View in den geklickt wurde um das neue Item anzulegen

d Object

Zeitstempel, Beginn des neuen Ereignisses

e Object

Eventobjekt des Klicks

subColumn Object

Nicht verwendet

Source:
Returns:

Das neue KalenderItem

Type
Object

createTooltip(item) → {String}

Wird von der Callback-Methode this.calendar.on("ItemRollOver",...) aufgerufen und erzeugt den (Markup)-String für den Tolltip der für dieses Item im Kalender angezeigt wird. Sollte von den abgeleiteten Klassen überschrieben werden. Diese Implementierung gibt lediglich den Tooltip zurück falls er existiert, ansonsten wird ein redimentärere Tooltip aus den Attributen zusammengebaut die in jedem Item vorhanden sind.

Parameters:
Name Type Description
item Object

Das KalenderItem für das der Tooltiptext erzeugt werden soll

Source:
Returns:

Der Tooltip für das KalenderItem

Type
String

dispose()

Löscht den Kalender und ruft dann die Implementierung der Basisklasse auf.

Source:

fetchCalendarData(von, bis)

Die Kalenderitems können erst dann von der API geladen werden, wenn das GUI fertig ist und die Liste der verfügbaren Kalenderarten von der API geladen wurde, denn die Liste enthält zu jeder Kalenderart auch die CSS-Einstellungen um die Items im Kalender als zu ihrer Art gehörig anzuzeigen. Deshalb wird diese Methode von der Instanz von buchungAppCalendarPerspective in dem Callback onRenderingComplete() aufgerufen.

Parameters:
Name Type Description
von Date

Das Datum, ab dem die Kalendereinträge geladen werden sollen

bis Date

Das Datum, bis zu dem die Kalendereinträge geladen werden sollen

Source:

getCalendarByName(name) → {Object}

Holt den Calendar mit gegebenem Namen per Query aus dem calStore. Wir gehen davon aus, dass der Name eineindeutig ist, also wird das erste Vorkommen im Resultset zurückgegeben, kein Array.

Parameters:
Name Type Description
name String

Name des Calendars der geucht wird

Source:
Returns:

gefundenes calendar-Object oder null falls die Suche erfolglos war

Type
Object

getFetchCalendarDataAdditionalArgs()

Kann von den abgeleiteten Klassen überschrieben werden um dem API-Call der die KalenderDataItems holt mit weiteren Arguemntparametern zu versehen. Diese Implementierung ergänzt die OIDs des Angestellten und der Organisation

Source:

getMenueItemLabel()

Gibt den Objektnamen zur Benennung des Menueitems des Kontextmenü zurück. Das ist der Label des Objektes, auf das mit der rechten Maustaste geklickt wurde. Hier im TreeController also der Label des rechtgeklickten TreeItems.

Source:

insertItem(item)

Fügt ein neues Item in den Kalender ein. Das Item wird dabei in den Store eingefügt, der Kalender reagiert darauf weil des Store als Observable dem Kalender zugeordnet ist.

Issue: Nach dem Einfügen und Aktivieren des Kalendertab Fehlermeldung in Matrixview Zeile 680 Behoben durch Tausch der Indizes.

Parameters:
Name Type Description
item Object

Das neue kalenderitem

Properties
Name Type Description
bis Timestamp

Ende im ISO-Format

calendar String

Die Kalenderart zu der das Item gehört. Steuert die Sichtbarkeit falls nur bestimmte Kalender angezeigt werden sollen.

id UUID

UUID als eindeutige ID dieses Kalenderobjektes

label String

Anzuzeigender Label im Kalender

oid OID

OID des EventModuls

tooltip String

Obsolet

von Timestamp

Beginn im ISO-Format

Source:

isItemEditable(item, rendererKind) → {Boolean}

Wird vom Renderer aufgerufen und entscheidet, ob ein Kalenderitem verändert werden kann, also verschoben oder in der Größe (Zeit) geändert werden kann. Das soll nicht erlaubt sein, wenn:

  • Der aktuelle View SubColumns hat, weil Items auch auf SubColumns anderer Kalender gezogen werden können
  • Das Item in einem separaten Tab geöffnet ist, da sonst die betroffenen Eigenschaften von und bis in dem anderen TreeStore nachgezogen werden müssten. Dazu wird this.delegate.calendarMetadata.itemContainerKlasse ausgewertet.
Parameters:
Name Type Description
item Objekt

Das Kalenderitem

rendererKind Objekt

Der zuständige Renderer. Wird hier nicht benötigt.

Source:
Returns:

Entscheidung, ob das Item geöndert werden darf oder nicht.

Type
Boolean

onClickContextmenue(calendarItem, domId)

Kann von den abgeleiteten Klassen überschrieben werden um auf den Event zu reagieren oder alternativ vom delegate implementiert werden, die Implementierung des Delegates geht dann von. Diese Implementierg macht nichts.

Parameters:
Name Type Description
calendarItem Object

Das einzige selektierte Item des Calendarobjektes

domId String

Die DomId des Menüitems auf das geklickt wurde

Source:

onClickContextmenueWithEvent(evt, domId)

Calendarcontrollerspezifischer Handler für den Klick-Event auf ein Kontextmenüitem. Falls der delegate eine onClickContextmenue-Methode hat wird diese aufgerufen, ansonsten die eigene, die dann hoffentlich von einer abgeleiteten Klasse überschrieben wurde.

Parameters:
Name Type Description
evt Object

Das Event-Objekt

domId Integer

ID des Menüitems auf das geklickt wurde.

Source:

onOpenContextMenue(calendarItem)

Kann von den abgeleiteten Klassen überschrieben werden um auf den Event zu reagieren oder alternativ vom delegate implementiert werden, die Implementierung des Delegates geht dann von. Diese Implementierg setzt

  1. Open immer auf true
  2. Insert immer auf false
  3. Duplicate auf true, falls editaböe
  4. Delete auf true falls editable
  5. Close auf false falls editable
Parameters:
Name Type Description
calendarItem Object

Das item auf das rechts geklickt wurde

Source:

onOpenContextMenueWithEvent(evt)

Calendarcontrollerspezifischer Handler für den Rechtsklick-Event der das Kontextmenü öffnet. Als erstes wird der selectedItems-Array des calendar-Objektes einelementig auf nur das angeklickte Item gesetzt, denn das kann mehrwertig sein. Falls der delegate eine onOpenContextMenue-Methode hat wird diese aufgerufen, ansonsten die eigene, die dann hoffentlich von einer abgeleiteten Klasse überschrieben wurde.

Parameters:
Name Type Description
evt Object

Das Event-Objekt

Source:

removeItemsByOID(oids)

Löscht das angegebene Item aus dem Store und damit aus dem Kalender

Parameters:
Name Type Description
oids Array.<OID>

Array of OIDs der zu löschenden Items

Source:

setBaseDate(date)

Setzt das Basisdatum des Kalenders. Falls nichts übergeben wird ist das das heutige Datum

Parameters:
Name Type Description
date Date

Das Basisdatum auf den der Kalender gesetzt wird. Das ist der Tag, der in dem aktuellen View liegt.

Source:

setCalendarRange(von, bis)

Setzt den Range des Kalenders auf die übergebenen Grenzen. Falls diese nicht übergeben werden wird standardmäßig 1 Jahr in die Vergangenheit und Zukunft gesetzt. Das entspricht auch der Defaulteinstellung in den Optionen der Perspektive.

Parameters:
Name Type Description
von Date

Das Datum, ab dem die Kalendereinträge geladen werden sollen

bis Date

Das Datum, bis zu dem die Kalendereinträge geladen werden sollen

Source:

setCalStore(calStore)

Setzt die Eigenschaft "calStore" auf das mitgegebene Objekt.

Parameters:
Name Type Description
calStore

Memory Data Store in dem die Kalenderliste, also die Liste der verschiedenen Kalenderarten, verwaltet werden.

Source:

setDatePicker(datepicker)

Setzt den Zeiger auf das Datepicker-Widget.

Parameters:
Name Type Description
datepicker Object

Zeiger auf das Datepicker-Widget

Source:

setMetaKeyForNewItem()

Setzt das MetaKey-Flag. Steuert, ob für das Einfügen eines neuen KalenderItems alt/meta-Key gedückt werden müssen wenn mit das Maus auf den Kalender geklickt wird oder nicht.

Source:

setProperties()

Kann von den abgeleiteten Klassen überschrieben werden um weitere Eigenschaften zu setzen. Diese Implementierg gibt nur einen Hinweis aus das sie nicht überschrieben wurde.

Source:

setSelectedByQuery(query)

Highlighted Items des Kalenders. Selektiert werden solche Items, die durch die übergebene Filterquery gefunden werden.

Parameters:
Name Type Description
query Object

Kriterien, nach denen die Selektion der Query auf dem itemStore ausgeführt wird

Source:

setSize(width, height)

Passt die Größ des Kalenders an die geänderte Canvas-Größe an.

Parameters:
Name Type Description
width Integer

Die neue Breite

height Integer

Die neue Höhe

Source:

setSubColumns(subColumns)

Setzt die Eigenschaft "showSubColumns" des Kalenderobjektes auf true oder falset. Läuft im Adressraum des Kalenders

Parameters:
Name Type Description
subColumns Boolean
Source:

setTooltips()

Setzt das Tooltip-Flag

Source:

setVisibility(oid, visibility)

Setzt das visibility-Attribut des kalenders mit der übergebenen OID. Falls es SubColumns hat werden diese aus- und wieder eingeschaltet da ja die Anzahl Spalten die dargestellt werden müssen sich ändert. Danach wird mit this.calendar.currentView.invalidateLayout() ein Neurendern des Kalenders erzwungen.

Parameters:
Name Type Description
oid OID

Die OID des kalenders, dessen visibility gesetzt werden soll

visibility Boolean

treu oder false um die Items des Kalenders anzuzeigen oder nicht.

Source:

updateDatePicker(startTime, endTime)

Wird vom TimeIntervallChange-Event aufgerufen und sorgt dafür, dass sich die im Datepicker angezeigte Sicht mit der Sicht im Kalender synchronisiert. Natürlich nur, wenn es einen Datepicker gibt.

  1. Der sichtbare Kalenderausschnitt wird angepasst.
  2. Innerhalb des Kalenderausschnitts werden die Tage, die im Kalender sichtbar sind, eingefärbt.
Parameters:
Name Type Description
startTime Timestamp

als ISO String

endTime Timestamp

als ISO String

Source:

updateItemByOID(Die, Der, Entweder)

Ändert Attribute des Kalenderitems die sich sofort an der Oberfläche zeigen

Es werden allgemein nur 4 Attribute des Kalenderitems als änderbar betrachtet:

  1. von {Timestamp}
  2. bis {Timestamp}
  3. label {String}
  4. tooltip {String}

Darüber hinaus können spezifische Attribute geändert werden.

Issue: Update der Beschriftung des Items (label-Attribut) wird nicht dargestellt, nur die Größen- und Lagenänderung, Beim nächsten Invalidate wird dann auch die geänderte Beschriftung angezeigt. Behoben: this.currentView.invalidateLayout(); nach dem Update des Stores aufrufen

Parameters:
Name Type Description
Die OID

OID des Moduls das geändert werden soll. Dienst als Paramter für die Query des Stores

Der String

Name des Attributes das geändert werden soll.

Entweder Timestamp/Object

ein Timestamp im ISO-Format oder ein Objekt vom Typ StattConst.classProdukt

Source:

(inner) cssClassFunc()

Properties:
Name Type Default Description
cssClassFunc function function(item){return

item.calendar;} MethodenImplementierung die für ein item seine zugehörige css-Klasse angibt. Hier entspricht die Kalenderart der CSS-Klasse

Source:

(inner) decodeDate()

Properties:
Name Type Description
decodeDate function

MethodenImplementierung die zwischen dem internen Date-Objekt und dem externen ISO-String Format übersetzt

Source:

(inner) encodeDate()

Properties:
Name Type Description
decodeDate function

MethodenImplementierung die zwischen dem internen Date-Objekt und dem externen ISO-String Format übersetzt

Source:

(inner) isItemEditable(item, rendererKind) → {Boolean}

Wird vom Renderer aufgerufen und entscheidet, ob ein Kalenderitem verändert werden kann, also verschoben oder in der Größe (Zeit) geändert werden kann. Das muss der delegate entscheiden, diese implementierung ruft dessen gleichnamige Methode auf, ebenfalls gleiche Signatur.

Parameters:
Name Type Description
item Objekt

Das Kalenderitem

rendererKind Objekt

Der zuständige Renderer. Wird hier nicht benötigt.

Source:
Returns:

Entscheidung, ob das Item geöndert werden darf oder nicht.

Type
Boolean

(inner) itemToRendererKindFunc(item)

Diese Methode weist einem Kalenderitem einen Renderer zu. Ist hier so überschrieben, dass ein Item angezeigt wird, falls sein cssClass-Attribut (z.B. "calendar01") im calStore-Array visible==true zugewiesen hat, in dem für solche items der Aufruf an den Customrenderer weitergeleitet wird. Falls dem nicht so ist wird null zurückgegeben, das Item kann ohne Renderer nicht angezeigt werden.

Falls es überhaupt keinen Eintrag im Visibility-Array gibt wird auch an den Customrenderer weitergeleitet weil

  1. Debugging und 2, Insert-Fall falls Zuweisung des neuen items zu einem Kalender erst im Insert-Dialog erfolgt itemToRendererKindFunc läuft im Scope des View-Objektes, deshalb muss der calStore mit this.cal.delegate angespreochen werden. Das this.cal-Attribute wird für alle Views in der Methode setCustomItemRenderer gesetzt.
Parameters:
Name Type Description
item Object

Das Item, für den ein renderer gesucht wird.

Source:

(inner) setCustomItemRenderer()

Setzt bei allen Views ein Attribut "cal" das auf das Kalenderobjekt zeigt um den itemToRendererKindFunc-Methoden den Zugriff auf den delegate des Kalenders zu geben, dort steht im calStore die visible-Information. Danach werden für alle Views die itemToRendererKindFunc-Methoden mit this.itemToRendererKindFunc überschrieben, die zuerst die Sichtbarkeit des Items prüft und bei true dann an die Standardimplementierung weiterreicht.

Source:

(inner) setSubColumnLabelFunc()

Setzt den Funktionszeiger des columnView subColumnLabelFunc Läuft im Adressraum des ColumnsViews

Source: