Ich habe gestern vergessen zu pushen
Dieser Commit ist enthalten in:
@ -63,6 +63,11 @@ export default function EmployeeCard({ employee, onClick }: EmployeeCardProps) {
|
||||
<p className="text-body text-secondary">
|
||||
<span className="font-medium">Position:</span> {employee.position}
|
||||
</p>
|
||||
{employee.officialTitle && (
|
||||
<p className="text-body text-secondary">
|
||||
<span className="font-medium">Amtsbezeichnung:</span> {employee.officialTitle}
|
||||
</p>
|
||||
)}
|
||||
<p className="text-body text-secondary">
|
||||
<span className="font-medium">Dienststelle:</span> {employee.department}
|
||||
</p>
|
||||
|
||||
@ -168,6 +168,12 @@ export default function EmployeeDetail() {
|
||||
<span className="text-tertiary">Position:</span>
|
||||
<p className="text-secondary font-medium">{employee.position}</p>
|
||||
</div>
|
||||
{employee.officialTitle && (
|
||||
<div>
|
||||
<span className="text-tertiary">Amtsbezeichnung:</span>
|
||||
<p className="text-secondary font-medium">{employee.officialTitle}</p>
|
||||
</div>
|
||||
)}
|
||||
<div>
|
||||
<span className="text-tertiary">Dienststelle:</span>
|
||||
<p className="text-secondary font-medium">{employee.department}</p>
|
||||
|
||||
@ -17,6 +17,7 @@ export default function EmployeeForm() {
|
||||
lastName: '',
|
||||
employeeNumber: '',
|
||||
position: '',
|
||||
officialTitle: '',
|
||||
department: '',
|
||||
email: '',
|
||||
phone: '',
|
||||
@ -219,6 +220,7 @@ export default function EmployeeForm() {
|
||||
validUntil: new Date(new Date().setFullYear(new Date().getFullYear() + 5)),
|
||||
issuedDate: new Date()
|
||||
} : undefined,
|
||||
officialTitle: formData.officialTitle || undefined,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
createdBy: 'admin'
|
||||
@ -394,6 +396,20 @@ export default function EmployeeForm() {
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label className="block text-sm font-medium text-secondary mb-2">
|
||||
Amtsbezeichnung
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
name="officialTitle"
|
||||
value={formData.officialTitle}
|
||||
onChange={handleChange}
|
||||
className="input-field"
|
||||
placeholder="z. B. KOK, KHK, EKHK"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label className="block text-sm font-medium text-secondary mb-2">
|
||||
Abteilung *
|
||||
|
||||
@ -16,12 +16,23 @@ export default function MyProfile() {
|
||||
const [error, setError] = useState('')
|
||||
const [success, setSuccess] = useState('')
|
||||
|
||||
const [form, setForm] = useState<any | null>(null)
|
||||
const [catalog, setCatalog] = useState<{ id: string; name: string; subcategories: { id: string; name: string; skills: { id: string; name: string }[] }[] }[]>([])
|
||||
const [skills, setSkills] = useState<SkillSelection[]>([])
|
||||
const [activeTab, setActiveTab] = useState<'profile' | 'deputies'>('profile')
|
||||
const [currentUnitId, setCurrentUnitId] = useState<string | null>(null)
|
||||
const [myUnits, setMyUnits] = useState<any[]>([])
|
||||
const [form, setForm] = useState<any | null>(null)
|
||||
const [catalog, setCatalog] = useState<{ id: string; name: string; subcategories: { id: string; name: string; skills: { id: string; name: string }[] }[] }[]>([])
|
||||
const [skills, setSkills] = useState<SkillSelection[]>([])
|
||||
const [activeTab, setActiveTab] = useState<'profile' | 'deputies'>('profile')
|
||||
const [currentUnitId, setCurrentUnitId] = useState<string | null>(null)
|
||||
const [myUnits, setMyUnits] = useState<any[]>([])
|
||||
const AVAILABILITY_OPTIONS = [
|
||||
{ value: 'available', label: 'Verfügbar' },
|
||||
{ value: 'busy', label: 'Beschäftigt' },
|
||||
{ value: 'away', label: 'Abwesend' },
|
||||
{ value: 'vacation', label: 'Urlaub' },
|
||||
{ value: 'sick', label: 'Erkrankt' },
|
||||
{ value: 'training', label: 'Fortbildung' },
|
||||
{ value: 'operation', label: 'Im Einsatz' },
|
||||
{ value: 'parttime', label: 'Teilzeit' },
|
||||
{ value: 'unavailable', label: 'Nicht verfügbar' }
|
||||
]
|
||||
|
||||
useEffect(() => {
|
||||
if (!employeeId) {
|
||||
@ -143,6 +154,7 @@ export default function MyProfile() {
|
||||
firstName: form.firstName,
|
||||
lastName: form.lastName,
|
||||
position: form.position || 'Teammitglied',
|
||||
officialTitle: form.officialTitle || null,
|
||||
department: form.department || '',
|
||||
employeeNumber: form.employeeNumber || undefined,
|
||||
email: user?.email || form.email,
|
||||
@ -241,8 +253,23 @@ export default function MyProfile() {
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-body font-medium text-secondary mb-2">Position</label>
|
||||
<input className="input-field w-full" value={form.position || ''} onChange={(e) => setForm((p: any) => ({ ...p, position: e.target.value }))} placeholder="z. B. Sachbearbeiter; Führungskraft g. D.; Führungskraft h. D." />
|
||||
<p className="text-small text-tertiary mt-1">Beispiele: Sachbearbeiter, Führungskraft g. D., Führungskraft h. D.</p>
|
||||
<input
|
||||
className="input-field w-full"
|
||||
value={form.position || ''}
|
||||
onChange={(e) => setForm((p: any) => ({ ...p, position: e.target.value }))}
|
||||
placeholder="z. B. Sachbearbeitung, Teamleitung"
|
||||
/>
|
||||
<p className="text-small text-tertiary mt-1">Beispiele: Sachbearbeitung, Teamleitung, Stabsstelle.</p>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-body font-medium text-secondary mb-2">Amtsbezeichnung</label>
|
||||
<input
|
||||
className="input-field w-full"
|
||||
value={form.officialTitle || ''}
|
||||
onChange={(e) => setForm((p: any) => ({ ...p, officialTitle: e.target.value }))}
|
||||
placeholder="z. B. KOK, KHK, EKHK"
|
||||
/>
|
||||
<p className="text-small text-tertiary mt-1">Freifeld für Amts- bzw. Dienstbezeichnungen (z. B. KOK, RBe, EKHK).</p>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-body font-medium text-secondary mb-2">NW-Kennung</label>
|
||||
@ -273,6 +300,19 @@ export default function MyProfile() {
|
||||
<input className="input-field w-full" value={form.office || ''} onChange={(e) => setForm((p: any) => ({ ...p, office: e.target.value }))} placeholder="z. B. Gebäude A, 3.OG, Raum 3.12" />
|
||||
<p className="text-small text-tertiary mt-1">Angabe zum Standort, z. B. Gebäude, Etage und Raum.</p>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-body font-medium text-secondary mb-2">Verfügbarkeit</label>
|
||||
<select
|
||||
className="input-field w-full"
|
||||
value={form.availability || 'available'}
|
||||
onChange={(e) => setForm((p: any) => ({ ...p, availability: e.target.value }))}
|
||||
>
|
||||
{AVAILABILITY_OPTIONS.map(option => (
|
||||
<option key={option.value} value={option.value}>{option.label}</option>
|
||||
))}
|
||||
</select>
|
||||
<p className="text-small text-tertiary mt-1">Dieser Status wird in der Mitarbeitendenübersicht und Teamplanung angezeigt.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -567,6 +567,7 @@ export default function SkillSearch() {
|
||||
</div>
|
||||
<div className="text-xs text-tertiary">
|
||||
{employee.position}
|
||||
{employee.officialTitle ? ` • ${employee.officialTitle}` : ''}
|
||||
</div>
|
||||
</div>
|
||||
{selectedSkills.size > 0 && (
|
||||
|
||||
@ -688,7 +688,9 @@ export default function TeamZusammenstellung() {
|
||||
{employee.firstName} {employee.lastName}
|
||||
</div>
|
||||
<div className="text-sm text-tertiary">
|
||||
{employee.position} • {employee.department}
|
||||
{employee.position}
|
||||
{employee.officialTitle ? ` • ${employee.officialTitle}` : ''}
|
||||
{` • ${employee.department}`}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren