Files
adminandClaude Opus 5 e2124220e5 Initialer Commit: Kundenverwaltung (PHP/Smarty)
Bestehende Codebasis als Ausgangsstand aufgenommen.

- .gitignore: Kundendaten (uploads_*), Smarty-Compile-Cache
  (templates_c), Laufzeit-Temp und Datenbank-Dumps ausgeschlossen;
  Verzeichnisstruktur ueber .gitkeep erhalten
- .gitattributes: Zeilenenden normalisiert (LF im Repo),
  Binaerformate markiert
- db-backup.php: MySQL-Zugangsdaten kommen jetzt wie im Rest der
  Anwendung aus der externen Konfiguration statt hartkodiert aus der
  Datei; Passwort wird ueber eine temporaere Optionsdatei statt per
  Kommandozeile uebergeben, Fehler von mysqldump/gzip werden gemeldet,
  Aufraeumen aelterer Backups berechnet Jahr und Monat konsistent

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 16:41:18 +02:00

88 lines
3.4 KiB
Smarty

{*<a href='?action=termin'><span class='cal' title="Terminkalender anzeigen" style='margin-left: 50%;'></span></a><br />*}
<div id="tabs">
{* ANZEIGE PANE *}
<div class='widthlimiter'>
<ul>
{foreach $users as $user}
<li><a href="#tabs-{$user.id}" class='noloading' onclick='ajax_searchzeit(0,{$user.id})'>{$user.vname} {$user.nname|substr:0:1}.</a></li>
{/foreach}
</ul>
{* PANES *}
{$tabnr = 0}
{foreach $users as $user}
<div id="tabs-{$user.id}">
<h3>{$user.vname} {$user.nname}</h3>
<div class='fifty'>
<table><tr><td>
Überstunden (Dieser Monat):</td><td>{if $user.Mueberstd < 0}<font color="#AA0000">{else}<font color="#00AA00">{/if}{$user.Mueberstd|intval}h, {(($user.Mueberstd*60)%60)|abs}min </font></td></tr>
<tr><td>
Überstunden (Gesamt):</td><td> {if $user.ueberstd < 0}<font color="#AA0000">{else}<font color="#00AA00">{/if}{$user.ueberstd|intval}h, {(($user.ueberstd*60)%60)|abs}min</font></td></tr>
<tr><td>
Ungeplante Urlaubstage:</td><td> {$user.urlaub}</td></tr>
</table>
</div>
<div class='fifty'>
<table><tr><td>
Stunden (Mo.-Fr.):</td><td> {$user.weekhours|intval}h, {(($user.weekhours*60)%60)|abs}min</td></tr>
<tr><td>
Stunden Samstag:</td><td>{$user.sahours|intval}h, {(($user.sahours*60)%60)|abs}min</td></tr>
<tr><td>
Urlaubstage:</td><td> {$user.vacation} + {$user.oldvacation}</td></tr>
</table>
</div>
<div class='centersmallsrc'>
<input type = 'hidden' name='zeit_src-{$user.id}' id='zeit_src-{$user.id}' value='' class='searchform' onKeyUp='ajax_searchzeit(0,{$user.id})' title='Geben Sie hier das Suchmuster ein - % ist ein Platzhalter für eine beliebige Anzahl Zeichen<br />_ ist der Platzhalter für ein einziges Zeichen.' />
{*<br />*}
<form action="?action=zeiten&do=save&user={$user.id}&formsent=1&tabs={$tabnr}" method='POST' enctype="multipart/form-data">
<label class='artlabel'>Farbe:</label>{html_options name={$user.colorname} id={$user.colorname} options=$colors selected=$user.color class='searchform' title='Bitte wählen Sie die Farbe, in der der Mitarbeiter in der Terminliste geführt wird.' onchange='#'}
<br />
<label class='artlabel'>RFID: {$user.rfid}</label>
<br />
<input type="submit" value="Speichern" />
</form>
<span class='printcenter' title='Drucken' onClick='askmonth("",{$user.id})'></span><br />
</div>
<div id='termcontainer-{$user.id}'>
</div>
<br />
</div>
{$tabnr = $tabnr + 1}
{/foreach}
</div>
</div>
<div id="question">
Welchen Monat möchten Sie drucken?<br />
<div id="print_month"></div>
<input type="hidden" id="printmonth" name="printmonth" />
<input type="hidden" id="printuser" name="printuser" />
</div>
<script>
$(function() {
$( "#tabs" ).tabs();
{if $tabs}
$( "#tabs" ).tabs( "option", "selected", {$tabs} );
{/if}
});
$('#print_month').datepicker({
changeMonth: true,
changeYear: true,
showButtonPanel: true,
dateFormat: 'mm.yy',
onClose: function(dateText, inst) {
},
onSelect: function (selectedDate){
var date = $(this).datepicker('getDate');
window.location= "?action=zeitenprint&user=" + document.getElementById("printuser").value + "&month="+(date.getMonth()+1) + "&year="+date.getYear();
}
});
</script>
{if $tabs}
<script language='javascript'>ajax_searchzeit(0,{$users[{$tabs}].id});</script>
{else}
<script language='javascript'>ajax_searchzeit(0,{$users[0].id});</script>
{/if}
<br />