# Entwicklertreffen Nürnberg (drittes Geschlecht)
(Zugriff: uschule.de CODE: **ASV**)
Aktuelle API: 27.10.2023
## offene Punkte
- ~~Essens- und Pausenzeiten~~
- ~~WLAN Zugangsdaten~~
- ~~IP Adresse DSS zum Veröffentlichen~~
- ~~TU4 zum Veröffentlichen~~
## Organisatorisches
### Zeiten
- 7:00 - 8:30 Uhr Frühstück
- 8:30 Uhr Beginn
- 10-11:00 Uhr Kaffee
- 13:00 Uhr Mittagessen
- 15:15-16:15 Uhr Kaffee
- 17:30 Uhr Abendessen
- Schließzeit 21:00 Uhr (kann verlängert werden -> Schließdienst)
- Freitag Brotzeit um 12:00 Uhr (Abfrage wer bleibt da?)
### Ansprechpartner
- Ansprechpartner vor Ort: Fr. Reichmann +49 911 99343-43
- Haustechniker: Hr. Frühbeißer Telefon +49 911 99343-45
## Allgemeines
- Montag 10 Uhr START
- bis 11 Uhr Einführung Problematik und Gender Helper
- Klärung Problematik Vorname/Rufname
- Aufruf Beispiel und Anpassung eines Berichts
- Berichtsbeschreibung mit Datenbereichskürzel SD, ST, KL, ... + Nummer aus Verzeichnis
- keine BERS oder schulartspezifischen Ergänzungen
- Unklare Tickets zurück an Vroni Diez, um dies nachzubearbeiten
- Fachliche Klärung bei Vroni Diez
- einen oder zwei Berichte gemeinsam im Team bearbeiten
- am ersten Tag nach 1, 2 Stunden Besprechung und Rückmeldungen der Teams
## Ablauf
- Bericht aus Sprint nehmen und auf "in Bearbeitung" setzen
- Nach Umbau Ergebnis committen mit AWD-Bezug (z.B.: Bericht ans dritte Geschlecht angepasst. AWD-...)
- Bericht mit aktueller Beschreibung auf Testumgebung TU-7/4 veröffentlichen
- Bericht auf "QS" setzen und Bearbeiter entfernen
- Tester holt Bericht und setzt sich auf Bearbeiter
## Material
- [Cloud zum Austausch (Excel mit Aufrufen GenderFactory, APIs)](https://bdb.alp.dillingen.de/index.php/s/MEFenHJ5KeSaLBK)
- [AWD-1110](https://kmjira.bayern.de/browse/AWD-1110)
- [Sprint im JIRA - Backlog](https://kmjira.bayern.de/secure/RapidBoard.jspa?rapidView=129&projectKey=AWD&view=planning&issueLimit=100)

### Veröffentlichung: Datenbereiche in Beschreibung hinzufügen
z.B.: **"Lorem ipsum... (ST013 Stand: 01.01.2023)"**
- ST - Schüler
- SD - Schulen
- LS - Lehrkräfte
- KL - Klassen
- ...
### Streams in JasperReports mit GenderBeanFactory
```java
$F{self}.getKlassengruppeListe().get(0).getSchuelerSchuljahrListe().stream().map {s ->
$P{GenderFactory}.get("_Namen").resolve(s.getSchuelerStamm())}.collect(java.util.stream.Collectors.toList())
```
### Konsistenzcheck deaktivieren
In der Server-Config folgende Zeile ergänzen
```
app.server.enable.installation.consistency=false
```
### Wertelisteneinträge aktivieren
```sql
update svp_wl_wert set gueltig_bis = null where werteliste_id = '1215' OR werteliste_id = 'MERKER3148' OR werteliste_id = '1099'
```
## Teams
### Entwickler
1. Jäger, Baier, Rausch, Gold
2. Wegertseder, Gumbmann, Schedel
3. Scheglmann, Knahn, Vötterle
4. Schaffer, Zerman, Bordfeldt
5. Kolmeder, Karl, Konz
### Tester
Aufgaben zu Beginn der Woche:
- Berichte aus ASV_Berichte_20231012.xlsx mit Wichtigkeit "- - -" nochmals prüfen und priorisieren
- Start mit den amtlichen Berichten -> **035_Verweis** fehlt zum Beispiel!
- Dokumentation der Berichte prüfen und Screenshots hinzufügen
1. Ritter, Stegner, Wilhelm,
2. Dohles, Schmid, Putz,
3. Ebnet, Krautwasser, Langenecker
4. Keim, Sedlmeier
## Orga
1. Diez
2. Birkelbach
## Helper Klasse
[Helper Klasse](https://kmjira.bayern.de/browse/AWD-1059)
**Beispielbericht:** /Berichte/Lehrkräfte/000_Gender_Test
```java
// Aufruf im Parameter oder im onLoad eines Serienbriefes
new bayern.asv.api.tools.gender.GenderBeanFactory()
// 1. Vordefinierte Werte werden anhand des Geschlechts zurückgegeben. Z.B.:
$P{GenderFactory}.get("Schüler").resolve($F{self}.getLehrerStamm().getWlGeschlecht())
// 2. Namen des Schülers, Lehrers, NUPs werden im Format "Familienname, Vornamen" zurückgegeben. Z.B.:
$P{GenderFactory}.get("_Namen").resolve($F{self}.getLehrerStamm())
$P{GenderFactory}.get("_NamenAmtlich").resolve($F{self}.getLehrerStamm())
// Alternativ kann ein eigenes Format (V=Vornamen, R=Rufname, F=Familienname, NV=NamensbestandteilVorne, NH=NamensbestandteilHinten, T=Titel, -=Trenner) mit übergeben werden:
$P{GenderFactory}.get("_Namen").resolve($F{self}.getLehrerStamm(), "R- | -F")
// 3. Amtsbezeichnung, Funktion, Ausbildungsberuf werden anhand des Geschlechts zurückgegeben. Z.B.:
$P{GenderFactory}.get("_WlWertLangform").resolve($F{self}.getLehrerStamm().getAmtsbezeichnung(),$F{self}.getLehrerStamm().getWlGeschlecht())
// Option 4: gibt in Merkern gespeichertes Geschlecht zurück, wenn vorhanden
$P{GenderFactory}.get("_Geschlecht").resolve($F{self}.getSchuelerStamm())
$P{GenderFactory}.get("_Geschlecht").resolveWlWert($F{self}.getSchuelerStamm())
$P{GenderFactory}.get("_GeschlechtAmtlich").resolve($F{self}.getSchuelerStamm())
$P{GenderFactory}.get("_GeschlechtAmtlich").resolveWlWert($F{self}.getSchuelerStamm())
// Option 5: gibt HashMap mit Geschlechtsverteilung zurück (M,W,D,oA)
$P{GenderFactory}.get("_SchülerSortiert").resolve(ArrayList<SchuelerSchuljahr> schuelerSchuljahrListe)
$P{GenderFactory}.get("_SchülerSortiert").resolveMap(ArrayList<SchuelerSchuljahr> schuelerSchuljahrListe).get("M")
// Option 6: gibt Zeugnisunterzeichner zurück Klassenleitung/Schulleitung
$P{GenderFactory}.get("_UnterzeichnerKlassenleitung").resolveLehrer(Klassengruppe klassengruppe, "01")
$P{GenderFactory}.get("_UnterzeichnerKlassenleitung").resolveKlassenleitungHelper(Klassengruppe klassengruppe, "01")
//Zeugnisschlüssel
$P{GenderFactory}.get("_UnterzeichnerSchulleitung").resolveLehrer(Klassengruppe klassengruppe, "01")
```
## Codeschnipsel
### Klassenleiter/in zu Klassse
Code:
**$F{self} = klasse** !
```java
$P{GenderFactory}.get("Klassenleitung").resolve($F{self}.getKlassenleitung().getLehrerSchuljahrSchule().getLehrerStamm().getWlGeschlecht())+": "+ $P{GenderFactory}.get("_Namen").resolve($F{self}.getKlassenleitung().getLehrerSchuljahrSchule().getLehrerStamm(), bayern.asv.api.tools.gender.NamenGenderBean.KLASSENLEITUNG_NAME)
```
### Klassenleiter/in zu Schüler/in
Code:
**$F{self} = schuelerStamm** !
```java
$P{GenderFactory}.get("Klassenleitung").resolve($F{self}.getLsKlassenleitung().getWlGeschlecht())+": "+ $P{GenderFactory}.get("_Namen").resolve($F{self}.getLsKlassenleitung(), bayern.asv.api.tools.gender.NamenGenderBean.KLASSENLEITUNG_NAME)
```
Zu erwartende Ausgabe:

### Vergleich des vorliegend Geschlechts mit einem Schlüssel ("M", "W", "D" oder "oA")
Code:
```java
$P{GenderFactory}.get("_Geschlecht").resolve($F{self}.getSchuelerStamm()).equals("M")
$P{GenderFactory}.get("_GeschlechtAmtlich").resolve($F{self}.getSchuelerStamm()).equals("M")
```
### Ausbildungsberuf zu Schüler/in
Code:
```java
$P{GenderFactory}.get("_Geschlecht").resolve($F{schuelerStamm}).equals ("M") ? $F{schuelerStamm}.getAusbBerufLang() :
$F{schuelerStamm}.getAusbBerufWeiblichLang()
$P{GenderFactory}.get("_GeschlechtAmtlich").resolve($F{schuelerStamm}).equals ("M") ? $F{schuelerStamm}.getAusbBerufLang() :
$F{schuelerStamm}.getAusbBerufWeiblichLang()
```
## Umsetzung in der Office-Schablone
In **Vorbereitung** der Office-Schablone einfügen
```java
context["GenderFactory"] = new bayern.asv.api.tools.gender.GenderBeanFactory()
```
## Umsetzung im Serienbrief
Im **RUN_ONCE_EVENT** des Serienbriefs
```java
contextGlobal["GenderFactory"] = new bayern.asv.api.tools.gender.GenderBeanFactory()
```
Zugriff entweder innerhalb ON_LOAD_EVENT des Serienbriefs oder innerhalb eines Textfeldes des Serienbriefs
Datenbereich Schüler (obj)
```java
// Befüllt das Textfeld mit dem Namen amtlich Familienname, Vornamen
item.value = contextGlobal["GenderFactory"].get("_NamenAmtlich").resolve(obj.schuelerStamm)
// Befüllt das Textfeld mit dem Namen Familienname, Rufname
item.value = contextGlobal["GenderFactory"].get("_Namen").resolve(obj.schuelerStamm)
//Befüllt das Feld mit der Kurzform des Geschlechts
item.value = contextGlobal["GenderFactory"].get("_GeschlechtAmtlich").resolve(obj.schuelerStamm)
//Befüllt das Feld mit der Langform des Geschlechts
item.value = contextGlobal["GenderFactory"].get("_GeschlechtAmtlich").resolveWlWert(obj.schuelerStamm).langform
//Schülerin/Schüler/...
item.value = contextGlobal["GenderFactory"].get("Schüler").resolve(obj.schuelerStamm.wlGeschlecht)
//Der/Die/...
item.value = contextGlobal["GenderFactory"].get("Schüler").resolve(obj.schuelerStamm.wlGeschlecht)
// Klassenleitung
item.value = contextGlobal["GenderFactory"].get("_NamenAmtlich").resolve(obj.getKlassengruppe().getKlasse().getKlassenleitung().getLehrerSchuljahrSchule().getLehrerStamm(), bayern.asv.api.tools.gender.NamenGenderBean.KLASSENLEITUNG_NAME)
```
Datenbereich Lehrkraft (obj)
```java
item.value = contextGlobal["GenderFactory"].get("_Namen").resolve(obj.getLehrerStamm(),"F")
item.value = contextGlobal["GenderFactory"].get("_WlWertLangform").resolve(obj.getLehrerStamm().getAmtsbezeichnung(),obj.getLehrerStamm().getWlGeschlecht())
//Amtsbezeichnung
item.value=contextGlobal["GenderFactory"].get("_WlWertKurzform").resolve(lssj.getLehrerStamm().getAmtsbezeichnung(),lssj.getLehrerStamm().getWlGeschlecht());
```
Ermitteln des Schulleiters für Unterschriften im Datenbereich Lehrkräfte
```java
def schuleUnterzeichner = null
for (su in obj.schuleSchuljahr.getSchuleZeugnisunterzeichnrList()) {
if (su.getArt().equalsIgnoreCase("S")) {
schuleUnterzeichner = su
break;
}
}
if (schuleUnterzeichner != null) {
ausgabe = schuleUnterzeichner.getLehrerStammZeugnisname1()
def name = contextGlobal["GenderFactory"].get("_NamenAmtlich").resolve(schuleUnterzeichner.lehrerSchuljahrSchule.getLehrerStamm(), "V- -F")
def amtsbezeichnung = contextGlobal["GenderFactory"].get("_WlWertKurzform").resolve(schuleUnterzeichner.lehrerSchuljahrSchule.getLehrerStamm().getAmtsbezeichnung(), schuleUnterzeichner.lehrerSchuljahrSchule.getLehrerStamm().getWlGeschlecht())
item.value = name + ", " + amtsbezeichnung;
} else {
item.value = "Unterschrift Schulleitung"
}
```
Klassenleitung- Schulleitungshelper
```java
//im onLoad, um ein LehrerStamm Obj des Klassenleiters/Schulleiters zu bekommen
context["klassenleitungHelperLehrer"] = contextGlobal["GenderFactory"].get("_UnterzeichnerKlassenleitung").resolveLehrer(obj.klassengruppe, "01")
context["schulleitungHelperLehrer"] = contextGlobal["GenderFactory"].get("_UnterzeichnerSchulleitung").resolveLehrer(obj.klassengruppe, "01")
// Klassenleitung: Vorname Familienname, Amtsbezeichnung kurz
if(context["klassenleitungHelperLehrer"] != null){
def name = contextGlobal["GenderFactory"].get("_NamenAmtlich").resolve(context["klassenleitungHelperLehrer"], "V- -F");
def amtsbezeichnung = contextGlobal["GenderFactory"].get("_WlWertKurzform").resolve(context["klassenleitungHelperLehrer"].getAmtsbezeichnung(), context["klassenleitungHelperLehrer"].getWlGeschlecht())
item.value = name + ", " + amtsbezeichnung;
}else{
item.value = ""
}
// Schulleitung: Vorname Familienname, Amtsbezeichnung kurz
if(context["schulleitungHelperLehrer"] != null){
def name = contextGlobal["GenderFactory"].get("_NamenAmtlich").resolve(context["schulleitungHelperLehrer"], "V- -F");
def amtsbezeichnung = contextGlobal["GenderFactory"].get("_WlWertKurzform").resolve(context["schulleitungHelperLehrer"].getAmtsbezeichnung(), context["schulleitungHelperLehrer"].getWlGeschlecht())
item.value = name + ", " + amtsbezeichnung;
}else{
item.value = ""
}
```
## Tickets
[Berichte drittes Geschlecht](https://kmjira.bayern.de/browse/ASVBY-35166)
## Links
- [Bildungszentrum Nürnberg](https://www.bauindustrie-bayern.de/bildung/bildungszentren/nuernberg-wetzendorf)