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>
This commit is contained in:
2026-08-28 16:41:18 +02:00
co-authored by Claude Opus 5
commit e6eb55bc4b
2225 changed files with 1070301 additions and 0 deletions
+178
View File
@@ -0,0 +1,178 @@
<div class="centersidebyside">
<div class="fifty">
{$type = $rechnung.typ_id}
{$headstr = 'per E-Mail versenden'}
{if $type==1}
{$typename="Rechnung"}
{elseif $type == 2}
{$typename="Gutschrift"}
{elseif $type == 3}
{$typename="Angebot"}
{elseif $type == 4}
{$typename="Auftragsbestätigung"}
{elseif $type == 5}
{$typename="Brief"}
{/if}
<h2>{$typename} {$headstr}:</h2>
<form action="?action=rechnungadd&mailformsent=1&mail=1&id={$smarty.get.id}" name="mainform" id='rechnform' method='POST'>
<fieldset class='nolim'>
<legend>{$typename} an <a href="?action=kundenshow&id={$adresse.partner_id}">Kunde {$adresse.partner_id}</a></legend>
<p>
<br />
<label>Senden an:</label>
<select name='tomail'>
{html_options values=$mails output=$mails}
</select><br />
<label>Betreff:</label>
<input value='{$smarty.session.firma}: anbei das von Ihnen gewünschte Dokument' id='sub' maxlength='150' name='sub' /><br />
<label>Anrede:</label>
{if $anrs.{$adresse.anrede_id} == "Herrn" || $anrs.{$adresse.anrede_id} == "Herr"}
{strip}
<input value='
{if $rechnung.anr1}
$rechnung.anr1
{else}
Sehr geehrter Herr{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{/if}
{$adresse.nname},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Herrn" || $anrs.{$adresse.anrede_id} == "Herr"}
{strip}
<input value='
{if $rechnung.anr1}
$rechnung.anr1
{else}
Sehr geehrter Herr{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{/if}
{$adresse.nname2},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede_id} == "Frau"}
{strip}
<input value='
{if $rechnung.anr1}
$rechnung.anr1
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{/if}
{$adresse.nname},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Frau"}
{strip}
<input value='
{if $rechnung.anr1}
$rechnung.anr1
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{/if}
{$adresse.nname2},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{else}
<input value='' id='anr1' maxlength='150' name='anr1' /><br />
{/if}
<label>Zweite Anrede:</label>
{if $anrs.{$adresse.anrede_id} == "Frau" && $anrs.{$adresse.anrede2_id} == "Herr" && $anrs.{$adresse.anrede2_id} == "Herrn"}
{strip}
<input value='
{if $rechnung.anr2}
$rechnung.anr2
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{/if}
{$adresse.nname},
{/if}
' id='anr2' maxlength='150' name='anr2' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Frau"}
{strip}
<input value='
{if $rechnung.anr2}
$rechnung.anr2
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{/if}
{$adresse.nname2},
{/if}
' id='anr2' maxlength='150' name='anr2' /><br />
{/strip}
{else}
<input value='' id='anr2' maxlength='150' name='anr2' /><br />
{/if}
<label class='artlabel'>E-Mail Text:</label><br />
<center><textarea name='intro' id='intro' {if $type == 5}class='tinymce'{else}class='bigtextarea'{/if}>
Anbei senden wir Ihnen {if $typename == "Angebot"}das{elseif $typename == "Brief"}den{else}die{/if} geforderte{if $typename == "Brief"}n{/if} {$typename}.
Mit freundlichen Grüßen
{$smarty.session.vname} {$smarty.session.nname}
{$smarty.session.firma}
---
Das Dokument ist als PDF-Datei im Anhang hinterlegt.
Zum Lesen, Drucken und/oder Speichern von PDF-Dateien benötigen
Sie das Programm Acrobat Reader von Adobe. Sollte der Acrobat Reader
noch nicht auf Ihrem Computer installiert sein, können Sie ihn hier kostenlos
herunterladen:
http://www.adobe.de/products/acrobat/readstep2.html
</textarea></center>
</p>
<button type="button" class='spell' onclick="$('textarea:not(#personalnotes,#globalnotes),input:not([type=radio])').spellCheckInDialog()">Rechtschreibung prüfen</button>
<button type="button" class='preview' onclick="ajax_loadpreview();">Vorschau aktualisieren</button><br />
</fieldset>
<input type='submit' value='Senden' />
</form>
</div>
<div class="fifty">
<br />
<h2>Anhang:</h2>
<div id="pdfpreview">
<iframe src='{$pdffile}' width='100%' height='600px'></iframe>
</div>
</div>
</div>
<div id="question">
</div>