Compare commits

..
8 Commits
Author SHA1 Message Date
adminandClaude Opus 5 5b7704ff03 Testumgebung neben dem Repo dokumentiert
Die Umgebung zum Umbau (portable MariaDB, Testdaten, Vergleich von altem
und neuem Code) liegt jetzt dauerhaft in ../kundentest statt in einem
sitzungsgebundenen Temp-Verzeichnis.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 16:19:36 +02:00
adminandClaude Opus 5 2779f505df Termine: mehrtaegige Termine behalten beim Aendern ihre id
Bisher wurde eine mehrtaegige Terminreihe beim Speichern komplett geloescht
und neu angelegt, der Termin bekam also jedes Mal eine neue id. Jetzt bleibt
der Hauptsatz stehen und wird aktualisiert; nur die Folgetage werden neu
angelegt. Damit bleiben Verweise auf die id gueltig (Drucken, Links,
Aenderungsprotokoll), und Anlegen und Aendern laufen ueber denselben Weg.

terminHauptsatz() loest jede Zeilen-id auf ihre Reihe auf, so dass auch der
Einstieg ueber eine Nebenzeile oder ueber Altdaten ohne main_id funktioniert;
loescheTerminreihe() und setzeTerminErledigt() nutzen das ebenfalls.

templates/calendar_month.tpl entfernt: kein Code band die Monatsansicht ein,
und unter PHP 8 lief sie in einen Fehler.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 08:05:27 +02:00
adminandClaude Opus 5 490c4f12a4 Termine auf Prepared Statements umgebaut
Kalender, Terminliste, Terminformular und Terminzettel laufen ueber
db_abfrage() mit Platzhaltern; das Anlegen einer mehrtaegigen Terminreihe
liegt in einer Transaktion. Die Logik steckt jetzt in incs/termin.php,
sites/termin*.php rufen sie nur noch auf.

Dabei behoben:
- SQL-Injektion ueber die Suchbegriffe der Terminliste, ueber die
  Mehrfachauswahl (Ankreuzfelder del<N>/erl<N> gingen roh in DELETE bzw.
  UPDATE), ueber die Wiedervorlage-Tage (INTERVAL $folgedays DAY) und ueber
  ?action=terminshow&id=... in maketerminarray(), maketerminadresse(),
  maketelnrn() und makegooglestring()
- gespeichertes XSS: Beschreibung, Notiz, Termintyp, Ort, Kundenname und
  Mitarbeiterfarbe im Kalender, in der Terminliste und im Formular
- "or $err=error(...)" stand innerhalb des Abfrage-Strings, dadurch wurden
  die Nebenzeilen einer Terminreihe beim Loeschen nie entfernt
- die Abfrage zum Folgetermin las eine Spalte typ_id, die es in termin nicht
  gibt; Typ und Wiedervorlage fehlten deshalb beim Bearbeiten
- ein Folgetermin wurde mit termtime='' und termdauer='' angelegt, ein
  Termin ohne Folgetermin mit followed_by='' - im strikten Modus Fehler
- ein Termin ohne Datum landete auf dem 01.01.1970 und gab dabei
  "NICHTTERMINIERT!!" mitten in die Seite aus
- die Ueberschneidungspruefung verglich ab dem zweiten Tag gegen das Ende
  des ersten Tages
- eine unbekannte Registerkarte der Terminliste ergab ein leeres WHERE und
  damit einen SQL-Fehler; jetzt gilt die Standardansicht
- terminshow.php pruefte den Typ mit = statt ==
- der Kalender haengt nicht mehr an der Locale de_DE (strftime)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 00:04:38 +02:00
adminandClaude Opus 5 3dfbf1c9c7 Kunden und Adressen auf Prepared Statements umgebaut
incs/saveNchange.php neu geschrieben: Adressen, Telefonnummern, Kontakte,
Notizen und Konten laufen ueber db_abfrage() mit Platzhaltern, mehrschrittiges
Speichern in einer Transaktion. Weil sich die Speicherfunktionen gegenseitig
aufrufen, klammern beginneSpeichern()/beendeSpeichern() die Verschachtelung;
incs/rechnung.php nutzt sie ebenfalls.

Kunden- und Lieferantenseiten waren zwei fast gleiche Kopien und teilen sich
jetzt partnerAddSeite(), partnerChangeSeite() und partnerShowDaten().

Dabei behoben:
- SQL-Injektion ueber die Suchbegriffe der Kunden-, Lieferanten-, Adress-,
  Kommissions- und Projektsuche sowie ueber die Artikel-Autovervollstaendigung
- gespeichertes XSS: Notizen (nl2br escapt nicht), Bankname, Dokumenttyp,
  Namen und Adressen in allen Trefferlisten
- sites/liefershow.php war unter PHP 8 ein Fatal ($kdnres.id)
- "Telefonnummer loeschen" im Kundenbereich lief in einen Fatal, die Nummern
  einer geloeschten Adresse blieben stehen (Spalte hiess adress_id statt
  adresse_id, mysql_fetch_assoc gibt es nicht mehr)
- Geburtstag ohne Jahr wurde im Formular verschluckt, die IBAN kam beim
  Bearbeiten aus $_GET statt aus dem Konto
- die Versionskette eines Kunden brach nach einem Schritt ab
- Kommissionsadressen speicherten die Ortsangabe der Adresse statt der des
  Telefonformulars und einen Adresstyp als Telefontyp
- Blaettern in den Trefferlisten: ohne ORDER BY konnte dieselbe Zeile zweimal
  oder gar nicht erscheinen; ajax_searchadress() bekam die Seite nicht
- Hauptadresse laesst sich nicht mehr loeschen, Kundendaten nicht mehr ueber
  die Lieferantenseite (und umgekehrt)
- ajax/auto/* baute JSON von Hand zusammen, ein Anfuehrungszeichen im Ort
  machte die Liste unbrauchbar

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 19:47:01 +02:00
adminandClaude Opus 5 3f7d070d7f PDF: Unicode-Schriften und temporaere Dateien 20 Minuten statt Sekunden
- makepdf.php nutzt FreeSerif/FreeSans (bei TCPDF dabei) statt der
  eingebauten PDF-Schriften Times/Helvetica. Die kennen nur westeuropaeische
  Zeichen, Namen wie Dvorak mit Hacek oder Lukasz mit L-Strich wurden zu
  "?". Die Breiten weichen um hoechstens 0,8 % (Serif) bzw. 3 % (Sans) ab.
  Die Schriften stehen als Konstanten PDF_SCHRIFT_SERIF/-_SANS an einer
  Stelle. Die PDFs werden durch die eingebetteten Zeichen etwa 130 KB
  groesser.
- savePDF() und makeImageFromPDF() raeumten Dateien auf, die aelter als
  20 Sekunden waren; laut Kommentar waren Minuten gemeint. Oeffneten zwei
  Personen kurz nacheinander Dokumente, konnte das PDF der ersten weg sein,
  bevor ihr Browser es geladen hatte. Jetzt PDF_TEMP_MAX_ALTER = 20 Minuten.

Getestet: Rechnungs-PDF fuer alle drei Briefkoepfe mit Namen/Firma in
tschechischen und polnischen Zeichen, im Browser gerendert; Aufraeumen
mit 5, 19 und 25 Minuten alten Dateien.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 11:33:54 +02:00
adminandClaude Opus 5 8fe43d6802 Rechnungen: Anrede beim Bearbeiten, lokale Testumgebung, BOMs
Beim Test der Oberflaeche im Browser gefunden:

- addrechnung.tpl fragte die gespeicherte Anrede als $rechnung.anr1 ab
  (die Daten heissen anrede1) und gab sie ohne Klammern aus. Beim
  Bearbeiten von Angeboten/Briefen erschien deshalb immer die
  Standard-Anrede, eine geaenderte ging beim erneuten Speichern verloren.
- |escape innerhalb von {if}-Bedingungen wieder entfernt (dort ohne
  Wirkung, gehoert nicht dorthin).
- UTF-8-BOM aus sechs Dateien entfernt; makepdf.php gab es auf jeder
  Rechnungsseite vor dem HTML aus.
- makeImageFromPDF() loeschte bei der Aufraeumrunde auch .gitkeep;
  Pfade fuer convert per escapeshellarg().
- constants.php: Instanzname auch unter Windows (getcwd() mit
  Backslashes) korrekt; KV_CONFIG_PATH als Config-Pfad fuer lokale Tests.

Im Browser getestet (lokaler PHP-Webserver, migrierte Testdatenbank):
Login mit Sonderzeichen-Passwort, Entwurf automatisch speichern und
laden, Rechnung mit Umlauten/Anfuehrungszeichen/HTML im Artikelnamen und
Komma-Betraegen speichern, Anzeige als PDF (Original und Kopie),
Kundensuche nach Dokumenten mit Umlaut, Artikelnamen escaped, Storno,
Kopie auf andere Adresse, Umschlag, Angebot mit eigener Anrede anlegen und
wieder bearbeiten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 11:27:27 +02:00
adminandClaude Opus 5 b76d883fbe Rechnungen: Betraege mit Tausenderpunkt, XSS in Templates und Suche
- formularZahl(): steht ein Komma im Betrag, sind Punkte Tausendertrenner
  ("1.234,50" -> 1234.50, vorher 1.23); ohne Komma bleibt der Punkt
  Dezimaltrenner wie bei der Artikel-Autovervollstaendigung ("12.50").
- Rechnungs-Templates (addrechnung, mailrechnung, changeadr, copyrech,
  umschlagshow, rechshow) geben alle Daten mit |escape aus; Werte aus der
  URL (id, type, newtype) als int.
- Rechnungssuche: Artikelnamen werden escaped statt als HTML ausgegeben
  (Trennung per Zeilenumbruch in SQL, artikelListeHtml() in PHP).
- Suchbegriffe kommen per encodeURIComponent als UTF-8, utf8_encode()
  entfaellt; vorher gingen Zeichen ausserhalb von Latin-1 verloren.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 11:18:29 +02:00
adminandClaude Opus 5 d8fff4aeb6 Rechnungsmodul auf Prepared Statements umgebaut
- incs/rechnung.php: alle Abfragen mit Platzhaltern. saveRechnung() setzte
  $_POST ungeprueft in SQL (Injection; ein Apostroph im Text brach das
  Speichern ab). Speichern, Kopieren und Loeschen laufen in Transaktionen,
  bei Fehlern bleibt nichts Halbes zurueck. Formularwerte ueber
  formularText/-Zahl/-Ganzzahl (strikter Modus).
- copyRech() trug die Rechnungsnummer ohne typ_id ein (Fehler im strikten
  Modus) und zaehlte typuebergreifend; jetzt wie beim Anlegen pro Typ
  (neueRechnungsnummer()). Artikel und Eigenschaften per INSERT ... SELECT.
- Adressblock-Formatierung aus makeadressblock() und
  makeadressblockUmschlag() in formatiereAdressblock() zusammengefuehrt.
- ajax/autosave.php und ajax/preview.php teilen sich saveTmpRechnung();
  ueberzaehlige Entwuerfe werden samt Artikeln entfernt (vorher FK-Fehler).
- sites/rechnungadd.php: Storno ohne SQL-Injection ueber $_GET["id"],
  Auswahllisten ueber db_zuordnung(), tote Kommissions-Abfrage entfernt.
- Rechnungssuche (createRechQry/createKdnRechQry) liefert SQL und Parameter
  getrennt; Suchbegriffe waren ungeprueft im SQL.
- saveLog() mit Platzhaltern, Protokolltext ueber db_sql_text().
- db.php: db_zuordnung(), db_sql_text(); Helfer liefern Strings wie
  mysqli_query(), damit alter Code sich gleich verhaelt.

Getestet: alter und neuer Code lesen dieselbe migrierte Datenbank, 150 von
155 Pruefungen (10.936 Werte) identisch, die uebrigen 5 sind der
Injection-Suchbegriff (alt: SQL-Fehler). Schreibtests fuer Entwurf,
Anlegen, Nummernkreise, Aendern, Rollback, Kopieren, Adresse, Storno und
Loeschen im strikten Modus.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 10:41:43 +02:00
62 changed files with 3617 additions and 4870 deletions
+29
View File
@@ -16,6 +16,10 @@ for f in $(git ls-files "*.php" | grep -vE "^(incs/(tcpdf|pChart|PHPMailer|WebAu
Zum Ausführen braucht es einen Webserver mit PHP, eine MariaDB/MySQL-Instanz und die externe Konfigurationsdatei (siehe unten). Ohne die Konfiguration springt `index.php` in den Setup-Modus (`update/firststart.php`). **Nur** dann: Das Setup läuft ohne Login, schreibt die Config und kann die Datenbank leeren. Deshalb wird `action=setup` bei gültiger Config verworfen, und `firststart.php` und `rebuild-settings.php` brechen selbst ab. Werte, die in die Config geschrieben werden, immer über `var_export()` maskieren – die Config ist ausführbarer PHP-Code.
**Lokal testen** (auch unter Windows): Die Umgebungsvariable `KV_CONFIG_PATH` ersetzt `CONFIG_PATH`. Die Config-Datei heißt nach dem Verzeichnisnamen des Checkouts, also z.B. `Kundenverwaltung_settings.conf`; `$lokale_netze` muss `127.0.0.1`/`::1` enthalten, sonst gibt es kein Passwortfeld. Start im Repo-Verzeichnis mit `php -S 127.0.0.1:8765`. Die PDF-Vorschau als Bild (`makeImageFromPDF()`) braucht ImageMagick unter `/opt/bin/convert` und funktioniert lokal nicht.
Die Testumgebung zum Umbau liegt **neben** dem Repo in `../kundentest` (portable MariaDB auf Port 3307, Testdatengenerator, Vergleich von altem und neuem Code, Schreib- und Template-Tests). `../kundentest/LIESMICH.md` erklärt sie; alles auf einmal läuft mit `sh alles.sh neu` in dem Verzeichnis.
## Die zwei zentralen Mechanismen
### 1. Das Verzeichnis bestimmt die Instanz
@@ -86,14 +90,37 @@ Eine Schemaänderung besteht also aus: neuer Eintrag **vorn** in `update/version
**Umbau läuft (Branch `db-umbau`):** Verbindungen entstehen nur noch über `db_verbinden()` aus `incs/db.php`. Die Funktion setzt `utf8mb4`, den strikten `sql_mode` und schaltet die mysqli-Exceptions ab. Neue und umgebaute Abfragen nutzen `db_abfrage()`, `db_zeilen()`, `db_zeile()` und `db_wert()` mit `?`-Platzhaltern statt String-Verkettung. Ziel-Schema ist das der Instanz `kunden` in `utf8mb4`; die Altdaten sind teils doppelt kodiert und werden per Migration repariert. Dieser Stand darf nur zusammen mit der migrierten Datenbank live gehen.
Regeln für den Umbau:
- **Ergebnisse sind Strings** wie früher bei `mysqli_query()`: `db_zeilen()`, `db_zeile()`, `db_wert()` und `db_zuordnung()` wandeln die nativen int/float-Werte der Prepared Statements um. Wer `db_abfrage()` selbst ausliest, bekommt native Typen.
- **Formularwerte** über `formularText()`, `formularZahl()` (Komma als Dezimaltrenner, leer wird 0) und `formularGanzzahl()` aus `incs/saveNchange.php` holen – der strikte Modus lehnt `''` in Zahlenspalten ab.
- **Änderungsprotokoll:** `saveLog()` bekommt den Text aus `db_sql_text()`. Die Tabelle `log` ist reine Dokumentation, nichts daraus wird ausgeführt.
- **Mehrschrittiges Speichern** in eine Transaktion, damit bei Fehlern keine halben Datensätze bleiben — aber über `beginneSpeichern()` / `beendeSpeichern()` aus `incs/saveNchange.php`, nicht über `mysqli_begin_transaction()` direkt. Die Speicherfunktionen rufen sich gegenseitig auf (`savePart()` → `saveAdress()` → `updateKunde()` → `saveAdress()`, `loeschePartner()` → `delRechnung()`), MariaDB kennt aber keine geschachtelten Transaktionen; ein Zähler sorgt dafür, dass nur der äußerste Aufruf öffnet und schließt.
- **Tabellen- und Spaltennamen** lassen sich nicht binden; nur feste Werte aus dem Code einsetzen, `LIMIT` als `(int)`.
- **Suchabfragen** (`create*Qry()` in `incs/listfuncs.php`) liefern `array("all", "limited", "params")`. Aufrufer nutzen `db_abfrage($dbconn, $q["limited"], $q["params"])` und `zaehleTreffer()`. Die Suchbegriffe sind Platzhalterwerte, `%` und `_` darin bleiben absichtlich Jokerzeichen — so ist die Suche dokumentiert. In der Autovervollständigung (`ajax/auto/`) werden sie dagegen über `db_like_praefix()` entwertet.
- **Werte aus der Datenbank sind kein HTML.** `GROUP_CONCAT` trennt mit einem Zeilenumbruch; zusammengebaut und escaped wird erst in `zeilenHtml()` bzw. `makenameline()`/`makeadressline()`/`maketelline()`.
Umgebaut: Login/Passkeys, Benutzereinstellungen, Änderungsprotokoll, Rechnungsmodul (`incs/rechnung.php`, `sites/rechnungadd.php`, `sites/umschlagshow.php`, `ajax/autosave.php`, `ajax/preview.php`, Rechnungssuche), Kunden und Lieferanten (`incs/saveNchange.php` samt `sites/kunden*.php`, `sites/liefer*.php`, Kunden-, Lieferanten-, Adress- und Kommissionssuche, `ajax/auto/`), Termine (`incs/termin.php` samt `sites/termin*.php`, Terminliste, Terminzettel). Offen: Projekte, Zeiten, Benutzerverwaltung, der Rest von `incs/makepdf.php`, `update/`.
Prozedurales `mysqli`. `$dbconn` wird zusätzlich in `$_SESSION["dbconn"]` abgelegt, damit `incs/mysql_ecape_wrapper.php` eine globale Funktion `mysql_escape_string()` als Shim über diese Verbindung bereitstellen kann — ein Überbleibsel der `mysql_*`-Ära, das in altem Code noch aufgerufen wird.
SQL wird durchgehend per String-Verkettung gebaut. Escaping ist Handarbeit über `mysqli_real_escape_string($dbconn, …)` und muss bei jeder Änderung mitgedacht werden.
## Termine
Ein Termin über mehrere Tage ist eine **Reihe einzelner Zeilen** in `termin`, die alle dieselbe `main_id` tragen — die id der ersten Zeile (des „Hauptsatzes“). Der Kalender zeigt die Zeilen einzeln, die Terminliste fasst sie über `main_id` zusammen.
Beim Speichern bleibt der Hauptsatz immer stehen und wird aktualisiert; nur die Folgetage werden gelöscht und neu angelegt. Der Termin behält dadurch seine id, egal ob aus einem Tag mehrere werden oder umgekehrt — Verweise auf die id (Drucken, Links, Protokoll) bleiben gültig. `terminHauptsatz()` löst dafür jede Zeilen-id auf ihre Reihe auf, damit auch der Einstieg über eine Nebenzeile funktioniert.
Urlaub und Krankheit sind Termine ohne Kundenadresse. Ihre Typ-ids sind fest verdrahtet — `TERMTYP_URLAUB` = 0 und `TERMTYP_KRANKHEIT` = 5 in `incs/termin.php`; `incs/users.php` rechnet den Urlaubsanspruch über `typ = 0` aus und `templates/addtermin.tpl` blendet danach die Felder um. `termtyp` muss also eine Zeile mit der id 0 enthalten; beim Kopieren einer Datenbank braucht es dafür `NO_AUTO_VALUE_ON_ZERO`, sonst macht MariaDB eine 1 daraus.
Ganztägige Termine haben die Dauer `24:00:00` — die Terminliste unterscheidet die Registerkarten daran.
## Fallstricke
- **`smarty/` enthält Smarty 4.5.6** — der schlichte Verzeichnisname sagt nichts über die Version.
- **PHPMailer liegt in zwei Versionen parallel und beide sind aktiv:** `index.php` lädt `incs/PHPMailer_v6` für den Rechnungsversand, `sites/projectadd.php` dagegen `incs/PHPMailer_v5.1`. Keine der beiden ist entfernbar, ohne den jeweiligen Aufrufer umzustellen.
- **PDF-Schriften nur über `PDF_SCHRIFT_SERIF` / `PDF_SCHRIFT_SANS`** (oben in `incs/makepdf.php`, FreeSerif/FreeSans). Die eingebauten PDF-Schriften Times/Helvetica können nur westeuropäische Zeichen; aus ř, ł, č würde ein „?“.
- **`incs/font/` gehört zu pChart, nicht zu TCPDF.** Die TTFs dort werden von `stats.php` für die Diagramme geladen; TCPDF bringt seine Schriften in `incs/tcpdf/fonts/` selbst mit.
- **`index.php` setzt `error_reporting(E_ERROR | E_PARSE)`.** Warnungen und Notices sind unterdrückt, und der Code verlässt sich darauf — nicht ohne Not hochdrehen, sonst überflutet es die Ausgabe.
- **`templates_c/`, `ajax/templates_c/` und `temp/` müssen für den Webserver schreibbar sein.** Sie sind git-ignoriert und nur über `.gitkeep` im Repo vorhanden.
@@ -111,4 +138,6 @@ Klassischer Login plus WebAuthn/FIDO2. Server-Seite: `authServer.php` mit `incs/
Am 2026-08-28 wurden tote Pfade entfernt: `smarty3/` (ungenutztes Smarty 3.1.6), `incs/tcpdf_old/`, `incs/fpdf.php` samt FPDF-Schriftmetriken und `incs/font/makefont/`, `sites/makepdf_OLD.php`, `incs/users_old.php` und `oldindex.php`. Auf keines davon verwies noch Code.
Am 2026-09-22 kam `templates/calendar_month.tpl` dazu (Monatsansicht des Kalenders): kein Code band es ein, und unter PHP 8 lief es in einen Fehler.
Das Repository wurde am 2026-08-28 neu initialisiert. Die mitgelieferte Historie von 2014 war irreparabel beschädigt und wurde verworfen — der erste Commit ist der Ausgangsstand, nicht der Projektbeginn.
+40 -44
View File
@@ -1,50 +1,46 @@
<?php
<?php
require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err)
/*
* Artikel-Autovervollständigung für das Rechnungsformular: je Bezeichnung
* der zuletzt angelegte Artikel, dazu Preis und Eigenschaften aus seiner
* letzten Verwendung.
*/
if(!$err && autoBegriff() !== "")
{
if($_GET["term"])
{
$qry = mysqli_query($dbconn,"SELECT MAX(artikel.id) AS id FROM artikel
JOIN artikeltyp ON typ_id = artikeltyp.id
WHERE artikel.bezeichn LIKE '".$_GET["term"]."%' AND dropdown = 1 AND YEAR(artikel.datetime) >= YEAR(NOW())-1 GROUP BY artikel.bezeichn") or die(mysqli_error($dbconn));
if($tmpres=mysqli_fetch_array($qry))
{
$innerqry = mysqli_query($dbconn,"SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id, artikel_rechn.preis, artikel_rechn.rech_id, artikel_rechn.posnr FROM artikel
JOIN artikeltyp ON typ_id = artikeltyp.id
JOIN artikel_rechn ON artikel.id = art_id
WHERE artikel.id = ".$tmpres["id"]." ORDER BY artikel_rechn.art_id DESC LIMIT 1") or die(mysqli_error($dbconn));
$res = mysqli_fetch_array($innerqry);
echo "[ ";
echo '{"value": "'.$res[0].'","typ": "'.$res[1].'","einh": "'.$res[2].'","preis": "'.number_format($res[4],2,",","").'","eig":[';
$qry2 = mysqli_query($dbconn,"SELECT bezeichn, wert, einheit_id FROM eigensch
JOIN artikel_eigensch ON eig_id = eigensch.id
WHERE art_id='".$res[3]."' AND rech_id='".$res[5]."' AND artposnr = '".$res[6]."' ORDER BY posnr ASC");
if($res2 = mysqli_fetch_array($qry2))
echo '{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}';
while($res2=mysqli_fetch_array($qry2))
echo ',{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}';
echo ']}';
while($tmpres=mysqli_fetch_array($qry))
{
$innerqry = mysqli_query($dbconn,"SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id, artikel_rechn.preis, artikel_rechn.rech_id, artikel_rechn.posnr FROM artikel
$treffer = db_zeilen($dbconn, "SELECT MAX(artikel.id) AS id FROM artikel
JOIN artikeltyp ON typ_id = artikeltyp.id
JOIN artikel_rechn ON artikel.id = art_id
WHERE artikel.id = ".$tmpres["id"]." ORDER BY artikel_rechn.art_id DESC LIMIT 1") or die(mysqli_error($dbconn));
$res = mysqli_fetch_array($innerqry);
echo ',{"value": "'.$res[0].'","typ": "'.$res[1].'","einh": "'.$res[2].'","preis": "'.number_format($res[4],2,",","").'","eig":[';
$qry2 = mysqli_query($dbconn,"SELECT bezeichn, wert, einheit_id FROM eigensch
JOIN artikel_eigensch ON eig_id = eigensch.id
WHERE art_id='".$res[0]."' AND rech_id='".$res[5]."' AND artposnr = '".$res[6]."' ORDER BY posnr ASC");
if($res2 = mysqli_fetch_array($qry2))
echo '{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}';
while($res2=mysqli_fetch_array($qry2))
echo ',{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}';
echo ']}';
}
echo "]";
}
WHERE artikel.bezeichn LIKE ? AND dropdown = 1
AND YEAR(artikel.datetime) >= YEAR(NOW())-1
GROUP BY artikel.bezeichn LIMIT 25",
array(db_like_praefix(autoBegriff())));
$liste = array();
foreach((array)$treffer as $t)
{
$art = db_zeile($dbconn, "SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id,
artikel_rechn.preis, artikel_rechn.rech_id, artikel_rechn.posnr
FROM artikel
JOIN artikeltyp ON artikel.typ_id = artikeltyp.id
JOIN artikel_rechn ON artikel.id = art_id
WHERE artikel.id = ? ORDER BY artikel_rechn.art_id DESC LIMIT 1",
array($t["id"]));
if(!$art)
continue;
$eigensch = db_zeilen($dbconn, "SELECT bezeichn AS des, wert AS val, einheit_id AS einh
FROM eigensch
JOIN artikel_eigensch ON eig_id = eigensch.id
WHERE art_id = ? AND rech_id = ? AND artposnr = ? ORDER BY posnr ASC",
array($art["id"], $art["rech_id"], $art["posnr"]));
$liste[] = array(
"value" => $art["bezeichn"],
"typ" => $art["typ_id"],
"einh" => $art["einheit_id"],
"preis" => number_format((float)$art["preis"], 2, ",", ""),
"eig" => $eigensch ? $eigensch : array(),
);
}
header("Content-Type: application/json; charset=utf-8");
echo json_encode($liste, JSON_UNESCAPED_UNICODE);
}
?>
+28
View File
@@ -0,0 +1,28 @@
<?php
/*
* Gemeinsames für die Autovervollständigung der Formulare.
*
* Die Endpunkte liefern eine JSON-Liste, die jQuery UI direkt als
* Vorschlagsliste verwendet: "value" ist der Vorschlag selbst, die übrigen
* Schlüssel füllen weitere Felder desselben Formulars (siehe die
* focus-Handler in den Templates).
*/
/* Suchbegriff aus der Anfrage, "" wenn keiner da ist */
function autoBegriff()
{
return isset($_GET["term"]) && is_string($_GET["term"]) ? trim($_GET["term"]) : "";
}
/*
* Führt die Abfrage aus und gibt das Ergebnis als JSON aus. Die Spalten
* heißen bereits so, wie das Formular sie erwartet. json_encode() kümmert
* sich ums Maskieren - früher war die Liste von Hand zusammengesetzt und
* ein Anführungszeichen im Ortsnamen machte sie unbrauchbar.
*/
function autoAusgabe($dbconn, $sql, $params)
{
$zeilen = db_zeilen($dbconn, $sql, $params);
header("Content-Type: application/json; charset=utf-8");
echo json_encode($zeilen ? $zeilen : array(), JSON_UNESCAPED_UNICODE);
}
+6 -20
View File
@@ -1,22 +1,8 @@
<?php
<?php
require_once("./connectmysql.php");
if(!$err)
{
require_once("./autofuncs.php");
if($_GET["term"])
{
$qry = mysqli_query($dbconn,"SELECT bank,blz FROM bank WHERE bank LIKE '".mysql_escape_string($_GET["term"])."%' GROUP BY bank ORDER BY bank ASC") or die(mysqli_error($dbconn));
if($res=mysqli_fetch_array($qry))
{
echo "[ ";
echo '{"value": "'.$res[0].'","blz":"'.$res[1].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value":"'.$res[0].'","blz":"'.$res[1].'"}';
}
echo "]";
}
}
}
?>
if(!$err && autoBegriff() !== "")
autoAusgabe($dbconn, "SELECT bank AS value, blz FROM bank
WHERE bank LIKE ? GROUP BY bank ORDER BY bank ASC LIMIT 25",
array(db_like_praefix(autoBegriff())));
+7 -19
View File
@@ -1,20 +1,8 @@
<?php
<?php
require_once("./connectmysql.php");
if(!$err)
{
if($_GET["term"])
{
$qry = mysqli_query($dbconn,"SELECT blz,bank FROM bank WHERE blz LIKE '".mysql_escape_string($_GET["term"])."%' GROUP BY blz ORDER BY blz ASC") or die(mysqli_error($dbconn));
if($res=mysqli_fetch_array($qry))
{
echo "[ ";
echo '{"value": "'.$res[0].'","bank":"'.$res[1].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value":"'.$res[0].'","bank":"'.$res[1].'"}';
}
echo "]";
}
}
}
?>
require_once("./autofuncs.php");
if(!$err && autoBegriff() !== "")
autoAusgabe($dbconn, "SELECT blz AS value, bank FROM bank
WHERE blz LIKE ? GROUP BY blz ORDER BY blz ASC LIMIT 25",
array(db_like_praefix(autoBegriff())));
+6 -20
View File
@@ -1,22 +1,8 @@
<?php
<?php
require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err)
{
if($_GET["term"])
{
$qry = mysqli_query($dbconn,"SELECT land FROM land WHERE land LIKE '".mysql_escape_string($_GET["term"])."%' ORDER BY land ASC") or die(mysqli_error($dbconn));
if($res=mysqli_fetch_array($qry))
{
echo "[ ";
echo '{"value": "'.$res[0].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value":"'.$res[0].'"}';
}
echo "]";
}
}
}
?>
if(!$err && autoBegriff() !== "")
autoAusgabe($dbconn, "SELECT land AS value FROM land
WHERE land LIKE ? ORDER BY land ASC LIMIT 25",
array(db_like_praefix(autoBegriff())));
+7 -20
View File
@@ -1,22 +1,9 @@
<?php
<?php
require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err)
{
if($_GET["term"])
{
$qry = mysqli_query($dbconn,"SELECT ort, plz, land, vwahl FROM ort JOIN land ON land.id = ort.land_id WHERE ort LIKE '".mysql_escape_string($_GET["term"])."%' GROUP BY ort ORDER BY ort ASC") or die(mysqli_error($dbconn));
if($res=mysqli_fetch_array($qry))
{
echo "[ ";
echo '{"value": "'.$res[0].'","plz":"'.$res[1].'","lnd":"'.$res[2].'","vwl":"'.$res[3].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value":"'.$res[0].'","plz":"'.$res[1].'","lnd":"'.$res[2].'","vwl":"'.$res[3].'"}';
}
echo "]";
}
}
}
?>
if(!$err && autoBegriff() !== "")
autoAusgabe($dbconn, "SELECT ort AS value, plz, land AS lnd, vwahl AS vwl
FROM ort JOIN land ON land.id = ort.land_id
WHERE ort LIKE ? GROUP BY ort ORDER BY ort ASC LIMIT 25",
array(db_like_praefix(autoBegriff())));
+7 -21
View File
@@ -1,23 +1,9 @@
<?php
<?php
require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err)
{
if($_GET["term"])
{
$qry = mysqli_query($dbconn,"SELECT ortsteil, plz, ort, land, vwahl FROM ort JOIN land ON land.id = ort.land_id WHERE ortsteil LIKE '".mysql_escape_string($_GET["term"])."%' GROUP BY ortsteil ORDER BY ort ASC") or die(mysqli_error($dbconn));
if($res=mysqli_fetch_array($qry))
{
echo "[ ";
echo '{"value": "'.$res[0].'","plz":"'.$res[1].'","ort":"'.$res[2].',"lnd":"'.$res[3].'","vwl":"'.$res[3].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value":"'.$res[0].'","plz":"'.$res[1].'","ort":"'.$res[2].',"lnd":"'.$res[3].'","vwl":"'.$res[3].'"}';
}
echo "]";
}
}
}
?>
if(!$err && autoBegriff() !== "")
autoAusgabe($dbconn, "SELECT ortsteil AS value, plz, ort, land AS lnd, vwahl AS vwl
FROM ort JOIN land ON land.id = ort.land_id
WHERE ortsteil LIKE ? GROUP BY ortsteil ORDER BY ort ASC LIMIT 25",
array(db_like_praefix(autoBegriff())));
+7 -21
View File
@@ -1,23 +1,9 @@
<?php
<?php
require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err)
{
if($_GET["term"])
{
$qry = mysqli_query($dbconn,"SELECT plz, ort, land FROM ort JOIN land ON land.id = ort.land_id WHERE plz LIKE '".mysql_escape_string($_GET["term"])."%' GROUP BY plz ORDER BY plz ASC") or die(mysqli_error($dbconn));
if($res=mysqli_fetch_array($qry))
{
echo "[ ";
echo '{"value": "'.$res[0].'","ort":"'.$res[1].'","lnd":"'.$res[2].'","vwl":"'.$res[3].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value":"'.$res[0].'","ort":"'.$res[1].'","lnd":"'.$res[2].'","vwl":"'.$res[3].'"}';
}
echo "]";
}
}
}
?>
if(!$err && autoBegriff() !== "")
autoAusgabe($dbconn, "SELECT plz AS value, ort, land AS lnd, vwahl AS vwl
FROM ort JOIN land ON land.id = ort.land_id
WHERE plz LIKE ? GROUP BY plz ORDER BY plz ASC LIMIT 25",
array(db_like_praefix(autoBegriff())));
+9 -21
View File
@@ -1,23 +1,11 @@
<?php
<?php
require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err)
{
if($_GET["term"])
{
$qry = mysqli_query($dbconn,"SELECT str, plz, ort, land FROM strasse JOIN ort ON ort.id = strasse.ort_id JOIN land ON land.id = ort.land_id WHERE str LIKE '".mysql_escape_string($_GET["term"])."%' GROUP BY str ORDER BY str ASC") or die(mysqli_error($dbconn));
if($res=mysqli_fetch_array($qry))
{
echo "[ ";
echo '{"value": "'.$res[0].'","plz":"'.$res[1].'","ort":"'.$res[2].'","lnd":"'.$res[3].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value": "'.$res[0].'","plz":"'.$res[1].'","ort":"'.$res[2].'","lnd":"'.$res[3].'"}';
}
echo "]";
}
}
}
?>
if(!$err && autoBegriff() !== "")
autoAusgabe($dbconn, "SELECT str AS value, plz, ort, ortsteil AS otl, land AS lnd
FROM strasse
JOIN ort ON ort.id = strasse.ort_id
JOIN land ON land.id = ort.land_id
WHERE str LIKE ? GROUP BY str ORDER BY str ASC LIMIT 25",
array(db_like_praefix(autoBegriff())));
+7 -20
View File
@@ -1,22 +1,9 @@
<?php
<?php
require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err)
{
if($_GET["term"])
{
$qry = mysqli_query($dbconn,"SELECT vwahl, plz, ort, ortsteil, land FROM ort JOIN land ON land.id = ort.land_id WHERE vwahl LIKE '".mysql_escape_string($_GET["term"])."%' GROUP BY vwahl ORDER BY vwahl ASC") or die(mysqli_error($dbconn));
if($res=mysqli_fetch_array($qry))
{
echo "[ ";
echo '{"value": "'.$res[0].'","plz":"'.$res[1].'","ort":"'.$res[2].'","otl":"'.$res[3].'","lnd":"'.$res[4].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value": "'.$res[0].'","plz":"'.$res[1].'","ort":"'.$res[2].'","otl":"'.$res[3].'","lnd":"'.$res[4].'"}';
}
echo "]";
}
}
}
?>
if(!$err && autoBegriff() !== "")
autoAusgabe($dbconn, "SELECT vwahl AS value, plz, ort, ortsteil AS otl, land AS lnd
FROM ort JOIN land ON land.id = ort.land_id
WHERE vwahl LIKE ? GROUP BY vwahl ORDER BY vwahl ASC LIMIT 25",
array(db_like_praefix(autoBegriff())));
+11 -183
View File
@@ -1,4 +1,4 @@
<?php
<?php
require_once("../incs/connectmysql.php");
require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php");
@@ -9,202 +9,30 @@ require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty;
if(!isset($err))
{
$show = "";
if(isset($_POST["show_firmaanr"]))
$show .= str_pad($_POST["show_firmaanr"],1,"0");
// Entwurf speichern, alle Artikel (auch deaktivierte)
list($progressid, $fehler) = saveTmpRechnung($dbconn, false);
if($fehler)
$err = $fehler;
else
$show .= "0";
if(isset($_POST["show_firma"]))
$show .= str_pad($_POST["show_firma"],1,"0");
else
$show .= "0";
if(isset($_POST["show_anr"]))
$show .= str_pad($_POST["show_anr"],1,"0");
else
$show .= "0";
if( isset($_POST["show_titel"]))
$show .= str_pad($_POST["show_titel"],1,"0");
else
$show .= "0";
if(isset($_POST["show_name"]))
$show .= str_pad($_POST["show_name"],1,"0");
else
$show .= "0";
if(isset($_POST["show_anr2"]))
$show .= str_pad($_POST["show_anr2"],1,"0");
else
$show .= "0";
if(isset($_POST["show_titel2"]))
$show .= str_pad($_POST["show_titel2"],1,"0");
else
$show .= "0";
if(isset($_POST["show_name2"]))
$show .= str_pad($_POST["show_name2"],1,"0");
else
$show .= "0";
if(isset($_POST["show_str"]))
$show .= str_pad($_POST["show_str"],1,"0");
else
$show .= "0";
if(isset($_POST["show_ort"]))
$show .= str_pad($_POST["show_ort"],1,"0");
else
$show .= "0";
if(isset($_POST["show_land"]))
$show .= str_pad($_POST["show_land"],1,"0");
else
$show .= "0";
if(isset($_POST["show_zusatz"]))
$show .= str_pad($_POST["show_zusatz"],1,"0");
else
$show .= "0";
if(isset($_POST["anr1"]))
$anr1 = trim($_POST["anr1"]);
else
$anr1 = "";
if(isset($_POST["anr2"]))
$anr2 = trim($_POST["anr2"]);
else
$anr2 = "";
if(isset($_POST["intro"]))
$intro = trim($_POST["intro"]);
else
$intro = "";
$adrerw = trim($_POST["adresserweiterung"]);
$outro = trim($_POST["outro"]);
$type = $_POST["type"];
$adressid = $_POST["adressid"];
$partnerid = $_POST["partnerid"];
$mwst = $_POST["mwst"];
$zahlziel = $_POST["zahlziel"];
$wahrung = $_POST["wahrung"];
if(isset($_POST["sub_mwst"]))
$sub_mwst = $_POST["sub_mwst"];
else
$sub_mwst = "";
$rabatt = $_POST["rabatt"];
$rabattdesc = $_POST["rabattdesc"];
$lieferdatum = $_POST["lieferdatum"];
$buchKto = $_POST["buchKto"];
$qry = mysqli_query($dbconn, "SELECT id FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type'") or $err=error("Fehler beim ermitteln der Rechnung <br />".mysqli_error($dbconn));
$progressid = mysqli_fetch_array($qry);
$progressid = $progressid[0];
if(!$progressid)
{
$qry = mysqli_query($dbconn, "INSERT INTO tmp_rechnung SET
user_id = '".$_SESSION["user"]."',
adressfields='$show',
anrede1='$anr1',
anrede2='$anr2',
intro='$intro',
outro='$outro',
typ_id = '$type',
adresse_id='$adressid',
partner_id='$partnerid',
mwst_id = '$mwst',
zahlziel_id = '$zahlziel',
wahrung_id='$wahrung',
sub_mwst='$sub_mwst',
rabatt='$rabatt',
rabattdesc='$rabattdesc',
adresserweiterung='$adrerw',
lieferdatum='$lieferdatum',
buchungsKto_id = '$buchKto',
datetime=NOW()") or $err=error("[autosave.js] Fehler beim erstellen der Rechnung <br />".mysqli_error($dbconn));
$progressid = mysqli_insert_id($dbconn);
}
else
{
$qry = mysqli_query($dbconn, "UPDATE tmp_rechnung SET
user_id = '".$_SESSION["user"]."',
adressfields='$show',
anrede1='$anr1',
anrede2='$anr2',
intro='$intro',
outro='$outro',
typ_id = '$type',
adresse_id='$adressid',
partner_id='$partnerid',
mwst_id = '$mwst',
zahlziel_id = '$zahlziel',
wahrung_id='$wahrung',
sub_mwst='$sub_mwst',
rabatt='$rabatt',
rabattdesc='$rabattdesc',
lieferdatum='$lieferdatum',
adresserweiterung='$adrerw',
buchungsKto_id = '$buchKto',
datetime=NOW() WHERE id='$progressid'") or $err=error("Fehler beim aktualisieren der Rechnung <br />".mysqli_error($dbconn));
$qry = mysqli_query($dbconn, "DELETE FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type' AND id != '$progressid' LIMIT 1") or $err=error("Fehler beim löschen alter tmp Rechnungen <br />".mysqli_error($dbconn));
}
$qry= mysqli_query($dbconn, "SELECT id FROM tmp_artikel WHERE rech_id = '".$progressid."'");
while($res=mysqli_fetch_assoc($qry))
{
mysqli_query($dbconn, "DELETE FROM tmp_eigensch WHERE art_id = '".$res["id"]."'") or $err=error("Fehler beim löschen der eigenschaften <br />".mysqli_error($dbconn));
}
$qry = mysqli_query($dbconn, "DELETE FROM tmp_artikel WHERE rech_id = '".$progressid."'") or $err=error("Fehler beim löschen der Artikel <br />".mysqli_error($dbconn));
if(!isset($err))
{
$i = 1;
while($_POST["arthead".$i] && !isset($err))
{
$angtyp = trim($_POST["angtyp".$i]);
$arttyp = trim($_POST["arttyp".$i]);
$arthead = trim($_POST["arthead".$i]);
$artpr = str_replace(",",".",trim($_POST["artpr".$i]));
$artmen = str_replace(",",".",trim($_POST["artmen".$i]));
$artrab = trim($_POST["artrab".$i]);
if(!isset($_POST["artrabtyp".$i]))
$_POST["artrabtyp".$i] = "";
$artrabtyp = trim($_POST["artrabtyp".$i]);
$artmeneinh = trim($_POST["artmeneinh".$i]);
$artwa = trim($_POST["artwa".$i]);
$artmwst = trim($_POST["artmwst".$i]);
$pagebreak = trim($_POST["pagebreak".$i]);
$qry = mysqli_query($dbconn, "INSERT INTO tmp_artikel SET bezeichn='$arthead', preis='$artpr', mwst_id='$artmwst', pagebreak='$pagebreak', einheit_id='$artmeneinh', typ_id='$arttyp', datetime=NOW(), wanr='$artwa', rech_id='$progressid',posnr='$i',rabatt='$artrab',rabatttyp='$artrabtyp',menge='$artmen',angtyp='$angtyp'") or $err=error("Fehler beim anlegen der Artikel <br />".mysqli_error($dbconn));
$artid=mysqli_insert_id($dbconn);
$ii = 1;
while($_POST["arteig".$i."_".$ii] && !isset($err))
{
$arteig = trim($_POST["arteig".$i."_".$ii]);
$artval = trim($_POST["artval".$i."_".$ii]);
$arteinh = trim($_POST["arteinh".$i."_".$ii]);
$qry = mysqli_query($dbconn, "INSERT INTO tmp_eigensch SET bezeichn='$arteig', wert='$artval', einheit_id='$arteinh', datetime=NOW(), posnr='$ii', art_id='$artid'") or $err=error("Fehler beim anlegen der Eigenschaften <br />".mysqli_error($dbconn));
$eigid=mysqli_insert_id($dbconn);
$ii++;
}
$i++;
}
}
if(!isset($err))
{
$type = formularGanzzahl("type");
$adresse = makeadressblock($dbconn,$progressid,1);
$rechnung = makerechnungsarray($dbconn,$progressid,1);
$artikel = makeartikelarray($dbconn,$progressid,1);
if($adresse["lines"]>6)
error("Die Adresse hat zu viele Zeilen!<br />Bitte wählen Sie einige Elemente ab.");
if(!$_POST["show_ort"] || !$_POST["show_str"])
error("Die Adresse erscheint nicht vollständig auf der Rechnung!<br />Falls die Rechnung über den Postweg zugestellt werden soll muss die Adresse vervollständigt werden!");
if(!formularText("show_ort") || !formularText("show_str"))
error("Die Adresse erscheint nicht vollständig auf der Rechnung!<br />Falls die Rechnung über den Postweg zugestellt werden soll muss die Adresse vervollständigt werden!");
if($rechnung["rabatt"] && !$rechnung["rabattdesc"])
warning("Ein Rabatt wird von der Gesamtsumme abgezogen, jedoch ist die Rabattbeschreibung leer!<br />Bitte geben Sie eine Rabattbeschreibung ein (z.B.: Sonderrabatt, Winterrabatt, etc.).");
if(!$artikel[0] && $type != 5)
if(empty($artikel) && $type != 5)
warning("Es sind noch keine Artikel vorhanden. Bitte Fügen Sie Artikel durch eintragen einer Artikelbeschreibung ein.");
if(!is_file("../".UPLOADS_PATH."signs/".$_SESSION["user"].".png"))
error("Für Ihren Benutzer wurde noch keine Unterschrift hinterlegt. Bitte vergessen Sie nicht zu unterschreiben.<br />("."./".UPLOADS_PATH."signs/".$_SESSION["user"].".png");
ok("<img src='' id='saveimg' class='saveimg' /><br />Dokument wurde um ".date("H:i:s")." Uhr gespeichert!");
}
}
?>
?>
+11 -193
View File
@@ -1,4 +1,4 @@
<?php
<?php
require_once("../incs/connectmysql.php");
require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php");
@@ -10,213 +10,31 @@ require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty;
if(!isset($err))
{
$show = "";
if(isset($_POST["show_firmaanr"]))
$show .= str_pad($_POST["show_firmaanr"],1,"0");
// Entwurf speichern, nur aktive Artikel, und daraus die Vorschau erzeugen
list($progressid, $fehler) = saveTmpRechnung($dbconn, true);
if($fehler)
$err = $fehler;
else
$show .= "0";
if(isset($_POST["show_firma"]))
$show .= str_pad($_POST["show_firma"],1,"0");
else
$show .= "0";
if(isset($_POST["show_anr"]))
$show .= str_pad($_POST["show_anr"],1,"0");
else
$show .= "0";
if( isset($_POST["show_titel"]))
$show .= str_pad($_POST["show_titel"],1,"0");
else
$show .= "0";
if(isset($_POST["show_name"]))
$show .= str_pad($_POST["show_name"],1,"0");
else
$show .= "0";
if(isset($_POST["show_anr2"]))
$show .= str_pad($_POST["show_anr2"],1,"0");
else
$show .= "0";
if(isset($_POST["show_titel2"]))
$show .= str_pad($_POST["show_titel2"],1,"0");
else
$show .= "0";
if(isset($_POST["show_name2"]))
$show .= str_pad($_POST["show_name2"],1,"0");
else
$show .= "0";
if(isset($_POST["show_str"]))
$show .= str_pad($_POST["show_str"],1,"0");
else
$show .= "0";
if(isset($_POST["show_ort"]))
$show .= str_pad($_POST["show_ort"],1,"0");
else
$show .= "0";
if(isset($_POST["show_land"]))
$show .= str_pad($_POST["show_land"],1,"0");
else
$show .= "0";
if(isset($_POST["show_zusatz"]))
$show .= str_pad($_POST["show_zusatz"],1,"0");
else
$show .= "0";
if(isset($_POST["anr1"]))
$anr1 = trim($_POST["anr1"]);
else
$anr1 = "";
if(isset($_POST["anr2"]))
$anr2 = trim($_POST["anr2"]);
else
$anr2 = "";
if(isset($_POST["intro"]))
$intro = trim($_POST["intro"]);
else
$intro = "";
$adrerw = trim($_POST["adresserweiterung"]);
$outro = trim($_POST["outro"]);
$type = $_POST["type"];
$adressid = $_POST["adressid"];
$partnerid = $_POST["partnerid"];
$mwst = $_POST["mwst"];
$zahlziel = $_POST["zahlziel"];
$wahrung = $_POST["wahrung"];
if(!isset($_POST["sub_mwst"]))
$_POST["sub_mwst"] = "";
$sub_mwst = $_POST["sub_mwst"];
$rabatt = $_POST["rabatt"];
$rabattdesc = $_POST["rabattdesc"];
$buchKto = $_POST["buchKto"];
$lieferdatum = $_POST["lieferdatum"];
$qry = mysqli_query($dbconn, "SELECT id FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type' LIMIT 1") or $err=error("Fehler beim ermitteln der Rechnung <br />".mysqli_error($dbconn));
$progressid = mysqli_fetch_array($qry);
$progressid = $progressid[0];
if(!$progressid)
{
$qry = mysqli_query($dbconn, "INSERT INTO tmp_rechnung SET
user_id = '".$_SESSION["user"]."',
adressfields='$show',
anrede1='$anr1',
anrede2='$anr2',
intro='$intro',
outro='$outro',
typ_id = '$type',
adresse_id='$adressid',
partner_id='$partnerid',
mwst_id = '$mwst',
zahlziel_id = '$zahlziel',
wahrung_id='$wahrung',
sub_mwst='$sub_mwst',
rabatt='$rabatt',
adresserweiterung='$adrerw',
rabattdesc='$rabattdesc',
buchungsKto_id = '$buchKto',
lieferdatum='$lieferdatum',
datetime=NOW()") or $err=error("Fehler beim erstellen der Rechnung <br />".mysqli_error($dbconn));
$progressid = mysqli_insert_id($dbconn);
}
else
{
$qry = mysqli_query($dbconn, "UPDATE tmp_rechnung SET
user_id = '".$_SESSION["user"]."',
adressfields='$show',
anrede1='$anr1',
anrede2='$anr2',
intro='$intro',
outro='$outro',
typ_id = '$type',
adresse_id='$adressid',
partner_id='$partnerid',
mwst_id = '$mwst',
zahlziel_id = '$zahlziel',
wahrung_id='$wahrung',
sub_mwst='$sub_mwst',
rabatt='$rabatt',
adresserweiterung='$adrerw',
rabattdesc='$rabattdesc',
buchungsKto_id = '$buchKto',
lieferdatum='$lieferdatum',
datetime=NOW() WHERE id='$progressid'") or $err=error("Fehler beim aktualisieren der Rechnung <br />".mysqli_error($dbconn));
$qry = mysqli_query($dbconn, "DELETE FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type' AND id != '$progressid' LIMIT 1") or $err=error("Fehler beim löschen alter tmp Rechnungen <br />".mysqli_error($dbconn));
}
$qry= mysqli_query($dbconn, "SELECT id FROM tmp_artikel WHERE rech_id = '".$progressid."'");
while($res=mysqli_fetch_assoc($qry))
{
mysqli_query($dbconn, "DELETE FROM tmp_eigensch WHERE art_id = '".$res["id"]."'") or $err=error("Fehler beim löschen der eigenschaften <br />".mysqli_error($dbconn));
}
$qry = mysqli_query($dbconn, "DELETE FROM tmp_artikel WHERE rech_id = '".$progressid."'") or $err=error("Fehler beim löschen der Artikel <br />".mysqli_error($dbconn));
if(!isset($err))
{
$i = 1;
while($_POST["arthead".$i] && !isset($err))
{
if($_POST["artact".$i])
{
$angtyp = trim($_POST["angtyp".$i]);
$arttyp = trim($_POST["arttyp".$i]);
$arthead = trim($_POST["arthead".$i]);
$artpr = str_replace(",",".",trim($_POST["artpr".$i]));
$artmen = str_replace(",",".",trim($_POST["artmen".$i]));
$artrab = trim($_POST["artrab".$i]);
if(!isset($_POST["artrabtyp".$i]))
$_POST["artrabtyp".$i] = "";
$artrabtyp = trim($_POST["artrabtyp".$i]);
$artmeneinh = trim($_POST["artmeneinh".$i]);
$artwa = trim($_POST["artwa".$i]);
$artmwst = trim($_POST["artmwst".$i]);
$pagebreak = trim($_POST["pagebreak".$i]);
$qry = mysqli_query($dbconn, "INSERT INTO tmp_artikel SET bezeichn='$arthead', preis='$artpr', mwst_id='$artmwst', pagebreak='$pagebreak', einheit_id='$artmeneinh', typ_id='$arttyp', datetime=NOW(), wanr='$artwa', rech_id='$progressid',posnr='$i',rabatt='$artrab',rabatttyp='$artrabtyp',menge='$artmen',angtyp='$angtyp'") or $err=error("Fehler beim anlegen der Artikel <br />".mysqli_error($dbconn));
$artid=mysqli_insert_id($dbconn);
$ii = 1;
while($_POST["arteig".$i."_".$ii] && !isset($err))
{
$arteig = trim($_POST["arteig".$i."_".$ii]);
$artval = trim($_POST["artval".$i."_".$ii]);
$arteinh = trim($_POST["arteinh".$i."_".$ii]);
$qry = mysqli_query($dbconn, "INSERT INTO tmp_eigensch SET bezeichn='$arteig', wert='$artval', einheit_id='$arteinh', datetime=NOW(), posnr='$ii', art_id='$artid'") or $err=error("Fehler beim anlegen der Eigenschaften <br />".mysqli_error($dbconn));
$eigid=mysqli_insert_id($dbconn);
$ii++;
}
}
$i++;
}
}
if(!isset($err))
{
$adresse = makeadressblock($dbconn,$progressid,1);
$rechnung = makerechnungsarray($dbconn,$progressid,1);
$artikel = makeartikelarray($dbconn,$progressid,1);
/*
if($adresse["lines"]>6)
error("Die Adresse hat zu viele Zeilen!<br />Bitte wählen Sie einige Elemente ab.");
if(!$_POST["show_ort"] || !$_POST["show_str"])
error("Die Adresse erscheint nicht vollständig auf der Rechnung!<br />Falls die Rechnung über den Postweg zugestellt werden soll muss die Adresse vervollständigt werden!");
if($rechnung["rabatt"] && !$rechnung["rabattdesc"])
warning("Ein Rabatt wird von der Gesamtsumme abgezogen, jedoch ist die Rabattbeschreibung leer!<br />Bitte geben Sie eine Rabattbeschreibung ein (z.B.: Sonderrabatt, Winterrabatt, etc.).");
if(!$artikel[0] && $type != 5)
warning("Es sind noch keine Artikel vorhanden. Bitte Fügen Sie Artikel durch eintragen einer Artikelbeschreibung ein.");
if(!is_file("../pics/users/".$_SESSION["user"].".png"))
error("Für Ihren Benutzer wurde noch keine Unterschrift hinterlegt. Bitte vergessen Sie nicht zu unterschreiben.");
*/
$pdf = makerawPDF(1);
makefirstpage($pdf,$adresse["adresse"],$rechnung,1);
$gesamtpreis = 0;
if(count($artikel))
{
$gesamtpreis = maketable($pdf,$artikel,$rechnung,1);
$gesamtpreis = maketable($pdf,$artikel,$rechnung,1);
}
makeEndPage($pdf,$rechnung,$gesamtpreis,1);
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
savePDF($pdf,"../temp/pdfpreview/$tmppdfname.pdf");
echo makeImageFromPDF("../temp/pdfpreview/$tmppdfname.pdf");
}
}
?>
?>
+34 -38
View File
@@ -1,56 +1,52 @@
<?php
<?php
require_once("../incs/connectmysql.php");
require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty;
$pagesize = 50;
if(!isset($err))
$err = "";
if(!$err)
{
$speciallines=array();
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ",$fulltag);
$combiner = mysql_escape_string($_GET["link"]);
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$queries = createAdressQry($page,$pagesize,$src,$combiner,$_GET["field"],0,1);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
// kommt per encodeURIComponent bereits als UTF-8
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
$link = isset($_GET["link"]) && is_string($_GET["link"]) ? $_GET["link"] : "";
$field = isset($_GET["field"]) && is_string($_GET["field"]) ? $_GET["field"] : "";
$page = isset($_GET["page"]) ? (int)$_GET["page"] : 0;
$rechid = isset($_GET["rechid"]) ? (int)$_GET["rechid"] : 0;
// steuert, wofür die gewählte Adresse verwendet wird
$subact = (isset($_GET["subact"]) && $_GET["subact"] == "copy") ? "copy" : "changeadr";
$speciallines = array();
$listlines = array();
$src = explode(" ", $fulltag);
$combiner = $link == "OR" ? "OR" : "AND";
$queries = createAdressQry($page,$pagesize,$src,$combiner,$field,0,1);
$numres = zaehleTreffer($dbconn, $queries);
if(!$numres)
{
$queries = createAdressQry($page,$pagesize,$src,$combiner,$_GET["field"],1,1);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
$queries = createAdressQry($page,$pagesize,$src,$combiner,$field,1,1);
$numres = zaehleTreffer($dbconn, $queries);
message("veraltete Datensätze wurden in die Suche einbezogen");
}
if($numres)
{
$qry = mysqli_query($dbconn,$queries["limited"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
while($res=mysqli_fetch_assoc($qry))
{
$name = $res["vname"]." ".$res["nname"];
if($res["firma"])
$name .= " <i><u>".$res["firma"]."</u></i>";
if($res["vwahl"])
$res["tel"] = $res["vwahl"]."/".$res["tel"];
if(!$res["updated_by"])
$listlines[] = array("<a href='?action=rechnungadd&id=".$_GET["rechid"]."&".$_GET["subact"]."=1&adrid=".$res["adrid"]."'><span class='check' title='Diese Adresse verwenden'></span></a> &nbsp;&nbsp;".$res["kdnr"]."",$name,$res["plz"]." ".$res["ort"], $res["str"]." ".$res["hnr"], $res["tel"]);
$adresse = makeadressline($res);
$waehlen = "<a href='?action=rechnungadd&id=".$rechid."&".$subact."=1&adrid=".(int)$res["adrid"]."'><span class='check' title='Diese Adresse verwenden'></span></a>";
$zeile = array($waehlen." &nbsp;&nbsp;".(int)$res["kdnr"], makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res));
if(empty($res["updated_by"]))
$listlines[] = $zeile;
else
$speciallines[] = array("<a href='?action=rechnungadd&id=".$_GET["rechid"]."&".$_GET["subact"]."=1&adrid=".$res["adrid"]."'><span class='check' title='Diese Adresse verwenden'></span></a> &nbsp;&nbsp;".$res["kdnr"]."",$name,$res["plz"]." ".$res["ort"], $res["str"]." ".$res["hnr"], $res["tel"]);
$speciallines[] = $zeile;
}
$headings = array("Kd.Nr.","Name/<i><u>Firma</u></i>","Ort","Straße","Telefon");
$lastdisplay = ($page+1)*$pagesize;
@@ -60,12 +56,12 @@ if(!$err)
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
else
ok($numres." Adressen sind insgesamt gespeichert.");
displayPages($pagesize,$page,$numres,"ajax_searchadress");
displayPages($pagesize,$page,$numres,"ajax_searchadress",",".$rechid.",'".$subact."'");
displayList($headings,$listlines,$speciallines);
displayPages($pagesize,$page,$numres,"ajax_searchadress");
displayPages($pagesize,$page,$numres,"ajax_searchadress",",".$rechid.",'".$subact."'");
}
else
else
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
}
?>
?>
+31 -76
View File
@@ -1,89 +1,45 @@
<?php
<?php
require_once("../incs/connectmysql.php");
require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty;
$pagesize = 20;
if(!isset($err))
$err = "";
if(!$err)
{
// kommt per encodeURIComponent bereits als UTF-8
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
$link = isset($_GET["link"]) && is_string($_GET["link"]) ? $_GET["link"] : "";
$page = isset($_GET["page"]) ? (int)$_GET["page"] : 0;
$id = isset($_GET["kdnid"]) ? (int)$_GET["kdnid"] : 0;
$src = explode(" ", $fulltag);
$combiner = $link == "OR" ? "OR" : "AND";
$listlines = array();
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ",$fulltag);
$combiner = mysql_escape_string($_GET["link"]);
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$skspage = $_GET["skspage"];
$typ = $_GET["typ"];
$id = $_GET["kdnid"];
$queries = createKdnProjectQry($page,$pagesize,$src,$combiner,$id);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
/*
if(!$numres)
{
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen");
}
*/
$numres = zaehleTreffer($dbconn, $queries);
if($numres)
{
$listlines=array();
$qry = mysqli_query($dbconn,$queries["limited"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
while($res=mysqli_fetch_assoc($qry))
{
$actions = "<span class='del' title='löschen' onClick='askdel(\"Möchten Sie das Projekt ".$res["name"]."<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=projectadd&id=".$res["id"]."&del=1\")'></span>";
$actions .= "<a href='?action=projectadd&id=".$res["id"]."'><span class='edit' title='Projekt ändern'></span></a>";
//$actions .= "<a href='?action=projectadd&id=".$res["id"]."&copy=1'><span class='copy' title='Projekt kopieren'></span></a>";
//$tmpqry = mysqli_query($dbconn,"SELECT id FROM kontakt WHERE partner_id = '$id' AND typ_id = 1");
//if(mysqli_fetch_array($tmpqry))
// $actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&mail=1'><span class='mail' title='Dokument per E-Mail versenden'></span></a>";
/*
$res["drechnr"] = substr($res["rechnr"],0,4)."-".substr($res["rechnr"],4,2)."-".substr($res["rechnr"],6,2).".".substr($res["rechnr"],8,2);
switch($res["typ_id"])
{
case 1:
$res["drechnr"] = "R".$res["drechnr"];
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&newtype=2'><span class='gutschradd' title='Gutschrift aus dieser Rechnung erstellen'></span></a>";
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&newtype=6'><span class='mahnadd' title='Mahnung aus dieser Rechnung erstellen'></span></a>";
break;
case 2:
$res["drechnr"] = "G".$res["drechnr"];
break;
case 3:
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&newtype=1'><span class='rechnadd' title='Rechnung aus diesem Angebot erstellen'></span></a>";
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&newtype=4'><span class='bestadd' title='Auftragsbestätigung aus diesem Angebot erstellen'></span></a>";
$res["drechnr"] = "A".$res["drechnr"];
break;
case 4:
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&newtype=1'><span class='rechnadd' title='Rechnung aus dieser Auftragsbestätigung erstellen'></span></a>";
$res["drechnr"] = "B".$res["drechnr"];
break;
}
if(!$res["drechnr"])
$res["drechnr"] = $res["drechnr"];
*/
$listlines[] = array("<a href='?action=projectshow&id=".$res["id"]."'>".$res["name"]."</a>",
$res["date"],
$res["work"],
$actions
);
$projektid = (int)$res["id"];
$name = htmlspecialchars((string)$res["name"]);
$actions = "<span class='del' title='löschen' onClick='askdel(\"Möchten Sie das Projekt ".$name."<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=projectadd&id=".$projektid."&del=1\")'></span>";
$actions .= "<a href='?action=projectadd&id=".$projektid."'><span class='edit' title='Projekt ändern'></span></a>";
$listlines[] = array("<a href='?action=projectshow&id=".$projektid."'>".$name."</a>",
htmlspecialchars((string)$res["date"]),
htmlspecialchars((string)$res["work"]),
$actions);
}
$headings = array("Name","Datum","Unberechnete<br />Stunden","Aktionen");
$lastdisplay = ($page+1)*$pagesize;
if($numres < $lastdisplay)
@@ -92,18 +48,17 @@ if(!$err)
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
else
ok($numres." Projekte sind insgesamt gespeichert.");
displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkdnprojects",",$typ,$id");
displayList($headings,$listlines,$speciallines);
displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkdnprojects",",$typ,$id");
displayPages($pagesize,$page,$numres,"ajax_searchkdnprojects",",".$id);
displayList($headings,$listlines,array());
displayPages($pagesize,$page,$numres,"ajax_searchkdnprojects",",".$id);
}
else
else
{
if($fulltag)
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
else
else
ok("Keine Einträge.");
}
}
?>
?>
+18 -17
View File
@@ -16,26 +16,28 @@ if(!isset($err))
if(!isset($_GET["link"])){
$_GET["link"] ="";
}
$fulltag = utf8_encode($_GET["search"]);
// kommt per encodeURIComponent bereits als UTF-8
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
$src = explode(" ",$fulltag);
$combiner = mysql_escape_string($_GET["link"]);
$combiner = $_GET["link"];
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$skspage = $_GET["skspage"];
$typ = $_GET["typ"];
$id = $_GET["kdnid"];
$page = (int)$_GET["page"];
$skspage = (int)$_GET["skspage"];
// landen auch in JavaScript-Aufrufen der Seitennavigation
$typ = (int)$_GET["typ"];
$id = (int)$_GET["kdnid"];
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,0);
$qry = mysqli_query($dbconn,$queries["all"])
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
/*
if(!$numres)
{
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
$qry = mysqli_query($dbconn,$queries["all"])
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen");
@@ -44,7 +46,7 @@ if(!isset($err))
if($numres)
{
$listlines=array();
$qry = mysqli_query($dbconn,$queries["limited"])
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
@@ -53,8 +55,7 @@ if(!isset($err))
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."'><span class='edit' title='Dokument ändern'></span></a>";
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&changeadr=1'><span class='changeadr' title='Adresse ändern'></span></a>";
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&copy=1'><span class='copy' title='Dokument kopieren'></span></a>";
$tmpqry = mysqli_query($dbconn,"SELECT id FROM kontakt WHERE partner_id = '$id' AND typ_id = 1");
if(mysqli_fetch_array($tmpqry))
if(db_wert($dbconn, "SELECT id FROM kontakt WHERE partner_id = ? AND typ_id = 1 LIMIT 1", array($id)))
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&mail=1'><span class='mail' title='Dokument per E-Mail versenden'></span></a>";
switch($res["typ_id"])
@@ -87,14 +88,14 @@ if(!isset($err))
if($res["storno"] == 1){
$listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'><font color='#FF0000'>".$res["drechnr"]."</font></a>",
$res["date"],
$res["artikel"],
zeilenHtml($res["artikel"]),
$actions
);
}
else{
$listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["drechnr"]."</a>",
$res["date"],
$res["artikel"],
zeilenHtml($res["artikel"]),
$actions
);
}
@@ -128,14 +129,14 @@ if(!isset($err))
echo "<h3>SKS Dokumente:</h3><div class='line'></div>";
$queries="";
$queries = createKdnRechQry($skspage,$pagesize,$src,$combiner,$id,$typ,1);
$qry = mysqli_query($dbconn,$queries["all"])
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
/*
if(!$numres)
{
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
$qry = mysqli_query($dbconn,$queries["all"])
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen");
@@ -145,13 +146,13 @@ if(!isset($err))
{
$speciallines[]=array();
$listlines[]=array();
$qry = mysqli_query($dbconn,$queries["limited"])
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$speciallines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["rechnr"]."</a>",
$res["date"],
$res["artikel"],
zeilenHtml($res["artikel"]),
"<span class='del' title='löschen' onClick='askdel(\"Möchten Sie das Dokument ".$res["rechnr"]."<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=rechadd&rechid=".$res["id"]."&del=1\")'></span>");
}
$headings = array("Nummer","Datum","Artikel","Aktion");
+36 -55
View File
@@ -1,66 +1,47 @@
<?php
<?php
require_once("../incs/connectmysql.php");
require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty;
$pagesize = 50;
if(!isset($err))
$err = "";
if(!$err)
{
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ",$fulltag);
$combiner = mysql_escape_string($_GET["link"]);
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$id = $_GET["kdnid"];
$queries = createKommQry($page,$pagesize,$src,$combiner,$id,$typ,0);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
/*
if(!$numres)
{
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen");
}
*/
// kommt per encodeURIComponent bereits als UTF-8
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
$link = isset($_GET["link"]) && is_string($_GET["link"]) ? $_GET["link"] : "";
$page = isset($_GET["page"]) ? (int)$_GET["page"] : 0;
$id = isset($_GET["kdnid"]) ? (int)$_GET["kdnid"] : 0;
$src = explode(" ", $fulltag);
$combiner = $link == "OR" ? "OR" : "AND";
$listlines = array();
$queries = createKommQry($page,$pagesize,$src,$combiner,$id);
$numres = zaehleTreffer($dbconn, $queries);
if($numres)
{
$listlines=array();
$qry = mysqli_query($dbconn,$queries["limited"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
while($res=mysqli_fetch_assoc($qry))
{
$actions = " <a href='?action=kundenchange&do=adress&adressid=".$res["id"]."&kunde=$id'><span class='edit' title='Adresse ändern'></span></a>";
$actions .= " <span class='del' title='Adresse löschen' onClick='askdel(\"Möchten Sie diese Adresse<br /><b>UND ALLE ZUGEHÖRIGEN RECHNUNGEN</b><br />wirklich unwiederruflich löschen?\",\"?action=kundenchange&do=adress&adressid=".$res["id"]."&del=1\")'></span>";
$actions .= " <a href='http://maps.google.com?q=".$res["plz"]."+".$res["ort"]."+".$res["str"]."+".$res["hnr"]."' class='noloading' target='_blank'><span class='map' title='Auf Karte zeigen'></span></a>";
$actions .= " <a href='?action=terminadd&adressid=".$res["id"]."'><span class='termadd' title='Termin anlegen'></span></a><br />";
$actions .= " <a href='?action=rechnungadd&type=1&adressid=".$res["id"]."'><span class='rechnadd' title='Rechnung anlegen'></span></a>";
$actions .= " <a href='?action=rechnungadd&type=1&adressid=".$res["id"]."'><span class='gutschradd' title='Gutschrift anlegen'></span></a>";
$actions .= " <a href='?action=rechnungadd&type=3&adressid=".$res["id"]."'><span class='angadd' title='Angebot anlegen'></span></a>";
$actions .= " <a href='?action=rechnungadd&type=5&adressid=".$res["id"]."'><span class='letteradd' title='Brief anlegen'></span></a><br />";
$tmpqry = mysqli_query($dbconn,"SELECT id FROM kontakt WHERE partner_id = '$id' AND typ_id = 1");
if(mysqli_fetch_array($tmpqry))
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&mail=1'><span class='mail' title='Dokument per E-Mail versenden'></span></a>";
$name=makenameline($res);
$adresse=makeadressline($res);
$listlines[] = array($name,
$adresse["ort"], $adresse["str"],
maketelline($res),
$actions
);
$adrid = (int)$res["id"];
$karte = rawurlencode($res["plz"]." ".$res["ort"]." ".$res["str"]." ".$res["hnr"]);
$actions = " <a href='?action=kundenchange&do=adress&adressid=".$adrid."&kunde=".$id."'><span class='edit' title='Adresse ändern'></span></a>";
$actions .= " <span class='del' title='Adresse löschen' onClick='askdel(\"Möchten Sie diese Adresse<br /><b>UND ALLE ZUGEHÖRIGEN RECHNUNGEN</b><br />wirklich unwiederruflich löschen?\",\"?action=kundenchange&do=adress&adressid=".$adrid."&del=1\")'></span>";
$actions .= " <a href='https://maps.google.com/?q=".$karte."' class='noloading' target='_blank' rel='noopener'><span class='map' title='Auf Karte zeigen'></span></a>";
$actions .= " <a href='?action=terminadd&adressid=".$adrid."'><span class='termadd' title='Termin anlegen'></span></a><br />";
$actions .= " <a href='?action=rechnungadd&type=1&adressid=".$adrid."'><span class='rechnadd' title='Rechnung anlegen'></span></a>";
$actions .= " <a href='?action=rechnungadd&type=2&adressid=".$adrid."'><span class='gutschradd' title='Gutschrift anlegen'></span></a>";
$actions .= " <a href='?action=rechnungadd&type=3&adressid=".$adrid."'><span class='angadd' title='Angebot anlegen'></span></a>";
$actions .= " <a href='?action=rechnungadd&type=5&adressid=".$adrid."'><span class='letteradd' title='Brief anlegen'></span></a><br />";
$adresse = makeadressline($res);
$listlines[] = array(makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $actions);
}
$headings = array("Name","Ort","Straße","Tel","Aktionen");
$lastdisplay = ($page+1)*$pagesize;
@@ -70,17 +51,17 @@ if(!$err)
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
else
ok($numres." Kommissionen sind insgesamt gespeichert.");
displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkomm",",$id");
displayList($headings,$listlines,$speciallines);
displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkomm",",$id");
displayPages($pagesize,$page,$numres,"ajax_searchkomm",",".$id);
displayList($headings,$listlines,array());
displayPages($pagesize,$page,$numres,"ajax_searchkomm",",".$id);
}
else
else
{
if($fulltag)
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
else
else
ok("Keine Einträge.");
}
}
?>
?>
+36 -50
View File
@@ -1,85 +1,71 @@
<?php
<?php
require_once("../incs/connectmysql.php");
require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty;
$pagesize = 50;
if(!isset($err)){
$err="";
}
if(!isset($err))
$err = "";
if(!$err)
{
if(!isset($_GET["link"])){
$_GET["link"] = "";
}
if(!isset($_GET["field"])){
$_GET["field"] = "";
}
// kommt per encodeURIComponent bereits als UTF-8
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
$link = isset($_GET["link"]) && is_string($_GET["link"]) ? $_GET["link"] : "";
$field = isset($_GET["field"]) && is_string($_GET["field"]) ? $_GET["field"] : "";
$page = isset($_GET["page"]) ? (int)$_GET["page"] : 0;
$_SESSION["search"] = $_GET["search"];
$_SESSION["link"] = $_GET["link"];
$_SESSION["field"] = $_GET["field"];
$_SESSION["page"] = $_GET["page"];
$speciallines=array();
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ",$fulltag);
$combiner = mysql_escape_string($_GET["link"]);
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],0,1);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
$_SESSION["search"] = $fulltag;
$_SESSION["link"] = $link;
$_SESSION["field"] = $field;
$_SESSION["page"] = $page;
$speciallines = array();
$listlines = array();
$src = explode(" ", $fulltag);
$combiner = $link == "OR" ? "OR" : "AND";
$queries = createPartQry($page,$pagesize,$src,$combiner,$field,0,1);
$numres = zaehleTreffer($dbconn, $queries);
if(!$numres)
{
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],1,1);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
$queries = createPartQry($page,$pagesize,$src,$combiner,$field,1,1);
$numres = zaehleTreffer($dbconn, $queries);
message("veraltete Datensätze wurden in die Suche einbezogen");
}
if($numres)
{
$qry = mysqli_query($dbconn,$queries["limited"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
while($res=mysqli_fetch_assoc($qry))
{
$name = $res["vname"]." ".$res["nname"];
if(isset($res["firma"]))
$name .= " <i><u>".$res["firma"]."</u></i>";
if(isset($res["vwahl"]))
$res["tel"] = $res["vwahl"]."/".$res["tel"];
$adresse=makeadressline($res);
if(!isset($res["updated_by"]))
$listlines[] = array("<a href='?action=kundenshow&id=".$res["kdnr"]."'>".$res["kdnr"]."</a>",makenameline($res),$adresse["ort"], $adresse["str"], maketelline($res),"<span class='del' title='Kunde löschen' onClick='askdel(\"Möchten Sie den Kunden ".$res["kdnr"]." und<br />ALLE ZUGEHÖRIGEN DATEN<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=kundenadd&kundeid=".$res["kdnr"]."&del=1\")'></span><a href='?action=projectlist&kundeid=".$res["kdnr"]."'><span class='projects' title='Projekte dieses Kunden auflisten'></span></a>");
$adresse = makeadressline($res);
$kdnr = (int)$res["kdnr"];
$aktionen = "<span class='del' title='Kunde löschen' onClick='askdel(\"Möchten Sie den Kunden ".$kdnr." und<br />ALLE ZUGEHÖRIGEN DATEN<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=kundenadd&kundeid=".$kdnr."&del=1\")'></span>"
."<a href='?action=projectlist&kundeid=".$kdnr."'><span class='projects' title='Projekte dieses Kunden auflisten'></span></a>";
$zeile = array("<a href='?action=kundenshow&id=".$kdnr."'>".$kdnr."</a>", makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $aktionen);
if(empty($res["updated_by"]))
$listlines[] = $zeile;
else
$speciallines[] = array("<a href='?action=kundenshow&id=".$res["kdnr"]."'>".$res["kdnr"]."</a>",makenameline($res),$adresse["ort"], $adresse["str"], maketelline($res),"<span class='del' title='Kunde löschen' onClick='askdel(\"Möchten Sie den Kunden ".$res["kdnr"]." und<br />ALLE ZUGEHÖRIGEN DATEN<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=kundenadd&kundeid=".$res["kdnr"]."&del=1\")'></span><a href='?action=projectlist&kundeid=".$res["kdnr"]."'><span class='projects' title='Projekte dieses Kunden auflisten'></span></a>");
$speciallines[] = $zeile;
}
$headings = array("Kd.Nr.","Name/<i><u>Firma</u></i>","Ort","Straße","Telefon","Löschen");
$lastdisplay = (intval($page)+1)*$pagesize;
$lastdisplay = ($page+1)*$pagesize;
if($numres < $lastdisplay)
$lastdisplay = $numres;
if($fulltag)
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
else
ok($numres." Kunden sind insgesamt gespeichert.");
displayPages($pagesize,$page,$numres,"ajax_searchkunden");
displayList($headings,$listlines,$speciallines);
displayPages($pagesize,$page,$numres,"ajax_searchkunden");
}
else
else
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
}
?>
?>
+29 -44
View File
@@ -1,61 +1,47 @@
<?php
<?php
require_once("../incs/connectmysql.php");
require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty;
$pagesize = 50;
if(!isset($err))
$err = "";
if(!$err)
{
// kommt per encodeURIComponent bereits als UTF-8
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
$link = isset($_GET["link"]) && is_string($_GET["link"]) ? $_GET["link"] : "";
$field = isset($_GET["field"]) && is_string($_GET["field"]) ? $_GET["field"] : "";
$page = isset($_GET["page"]) ? (int)$_GET["page"] : 0;
if(!isset($_GET["link"])){
$_GET["link"]="";
}
$listlines = array();
$src = explode(" ", $fulltag);
$combiner = $link == "OR" ? "OR" : "AND";
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ",$fulltag);
$combiner = mysql_escape_string($_GET["link"]);
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],0,2);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
$queries = createPartQry($page,$pagesize,$src,$combiner,$field,0,2);
$numres = zaehleTreffer($dbconn, $queries);
if(!$numres)
{
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],1,2);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
$queries = createPartQry($page,$pagesize,$src,$combiner,$field,1,2);
$numres = zaehleTreffer($dbconn, $queries);
message("veraltete Datensätze wurden in die Suche einbezogen");
}
if($numres)
{
$qry = mysqli_query($dbconn,$queries["limited"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
while($res=mysqli_fetch_assoc($qry))
{
if(!isset($res["nname"]))
$name = $res["firma"];
else
$name = $res["vname"]." ".$res["nname"];
if(isset($res["vwahl"]))
$res["tel"] = $res["vwahl"]."/".$res["tel"];
if(!isset($res["updated_by"]))
$listlines[] = array("<a href='?action=liefershow&id=".$res["kdnr"]."'>".$res["kdnr"]."</a>",$name,$res["plz"]." ".$res["ort"], $res["str"]." ".$res["hnr"], $res["tel"],"<span class='del' title='Kunde löschen' onClick='askdel(\"Möchten Sie den Kunden ".$res["kdnr"]." und<br />ALLE ZUGEHÖRIGEN DATEN<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=kundenadd&kundeid=".$res["kdnr"]."&del=1\")'></span>");
else
$speciallines[] = array("<a href='?action=liefershow&id=".$res["kdnr"]."'>".$res["kdnr"]."</a>",$name,$res["plz"]." ".$res["ort"], $res["str"]." ".$res["hnr"], $res["tel"],"<span class='del' title='Kunde löschen' onClick='askdel(\"Möchten Sie den Kunden ".$res["kdnr"]." und<br />ALLE ZUGEHÖRIGEN DATEN<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=kundenadd&kundeid=".$res["kdnr"]."&del=1\")'></span>");
$adresse = makeadressline($res);
$kdnr = (int)$res["kdnr"];
$aktionen = "<span class='del' title='Lieferant löschen' onClick='askdel(\"Möchten Sie den Lieferanten ".$kdnr." und<br />ALLE ZUGEHÖRIGEN DATEN<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=lieferadd&kundeid=".$kdnr."&del=1\")'></span>";
$listlines[] = array("<a href='?action=liefershow&id=".$kdnr."'>".$kdnr."</a>", makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $aktionen);
}
$headings = array("Kd.Nr.","Name/Firma","Ort","Straße","Telefon","Löschen");
$headings = array("Kd.Nr.","Name/<i><u>Firma</u></i>","Ort","Straße","Telefon","Löschen");
$lastdisplay = ($page+1)*$pagesize;
if($numres < $lastdisplay)
$lastdisplay = $numres;
@@ -63,13 +49,12 @@ if(!isset($err))
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
else
ok($numres." Lieferanten sind insgesamt gespeichert.");
$speciallines = Array();
displayPages($pagesize,$page,$numres,"ajax_searchkunden");
displayList($headings,$listlines,$speciallines);
displayPages($pagesize,$page,$numres,"ajax_searchkunden");
displayPages($pagesize,$page,$numres,"ajax_searchliefer");
displayList($headings,$listlines,array());
displayPages($pagesize,$page,$numres,"ajax_searchliefer");
}
else
else
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
}
?>
?>
+14 -13
View File
@@ -22,26 +22,27 @@ if(!isset($err))
if(!isset($_GET["kdnid"])){
$_GET["kdnid"]="";
}
$fulltag = utf8_encode($_GET["search"]);
// kommt per encodeURIComponent bereits als UTF-8
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
$src = explode(" ",$fulltag);
$combiner = mysql_escape_string($_GET["link"]);
$combiner = $_GET["link"];
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$skspage = $_GET["skspage"];
$page = (int)$_GET["page"];
$skspage = (int)$_GET["skspage"];
$typ = $_GET["typ"];
$id = $_GET["kdnid"];
$queries = createRechQry($page,$pagesize,$src,$combiner,0);
$qry = mysqli_query($dbconn,$queries["all"])
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
/*
if(!$numres)
{
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
$qry = mysqli_query($dbconn,$queries["all"])
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen");
@@ -49,7 +50,7 @@ if(!isset($err))
*/
if($numres)
{
$qry = mysqli_query($dbconn,$queries["limited"])
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
@@ -82,14 +83,14 @@ if(!isset($err))
if($res["storno"] == 1){
$listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'><font color='#FF0000'>".$res["drechnr"]."</font></a>",
$res["date"],
$res["artikel"],
zeilenHtml($res["artikel"]),
$actions
);
}
else{
$listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["drechnr"]."</a>",
$res["date"],
$res["artikel"],
zeilenHtml($res["artikel"]),
$actions
);
}
@@ -122,14 +123,14 @@ if(!isset($err))
{
echo "<h3>SKS Dokumente:</h3><div class='line'></div>";
$queries = createRechQry($skspage,$pagesize,$src,$combiner,1);
$qry = mysqli_query($dbconn,$queries["all"])
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
/*
if(!$numres)
{
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
$qry = mysqli_query($dbconn,$queries["all"])
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen");
@@ -137,12 +138,12 @@ if(!isset($err))
*/
if($numres)
{
$qry = mysqli_query($dbconn,$queries["limited"]);
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"]);
while($res=mysqli_fetch_assoc($qry))
{
$speciallines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["rechnr"]."</a>",
$res["date"],
$res["artikel"],
zeilenHtml($res["artikel"]),
"<span class='del' title='löschen' onClick='askdel(\"Möchten Sie das Dokument ".$res["rechnr"]."<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=rechadd&rechid=".$res["id"]."&del=1\")'></span>");
}
$headings = array("Nummer","Datum","Artikel","Aktion");
+120 -158
View File
@@ -1,166 +1,132 @@
<?php
<?php
require_once("../incs/connectmysql.php");
require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty;
$pagesize = 25;
if(!isset($err))
$err = "";
/*
* Datum und Dauer eines Termins für die Liste. Ab 24 Stunden zählt der
* Termin in Tagen, sonst in Stunden und Minuten.
*/
function terminZeitraum($termtime, $termdauer)
{
$usercolors = array("#f00","#0c0","#ff0","#90c","#0bb","#066","#09f","#f60","#00f","#f09");
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ",$fulltag);
if(isset($_GET["link"])){
$combiner = mysql_escape_string($_GET["link"]);
}else{
$combiner = "";
}
if($combiner != "AND" && $combiner != "OR")
$stunden = (int)strtok((string)$termdauer, ":");
$minuten = (int)substr((string)$termdauer, 3, 2);
if($termtime == "0000-00-00 00:00:00")
$zeitpunkt = "N/A";
elseif($stunden > 23)
{
$combiner = "AND";
$zeitpunkt = date("d.m.Y", strtotime($termtime));
if($stunden / 24 > 1)
$zeitpunkt .= " - ".date("d.m", strtotime("+".(($stunden / 24) - 1)." day", strtotime($termtime)));
}
$page = $_GET["page"];
$termtyp = $_GET["termtyp"];
else
$zeitpunkt = date("d.m.Y H:i ", strtotime($termtime))."Uhr";
$dauer = "";
if($stunden > 23)
$dauer = ($stunden / 24)." Tag".($stunden / 24 > 1 ? "e" : "");
elseif($stunden > 0)
$dauer = $stunden." Std";
if($stunden <= 23 && $stunden > 0 && $minuten > 0)
$dauer .= " - ";
if($stunden <= 23 && $minuten > 0)
$dauer .= $minuten." Min";
return array($zeitpunkt, $dauer);
}
if(!$err)
{
// kommt per encodeURIComponent bereits als UTF-8
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
$link = isset($_GET["link"]) && is_string($_GET["link"]) ? $_GET["link"] : "";
$page = isset($_GET["page"]) ? (int)$_GET["page"] : 0;
$termtyp = isset($_GET["termtyp"]) ? (int)$_GET["termtyp"] : 1;
$_SESSION["termtyp"] = $termtyp;
$src = explode(" ", $fulltag);
$combiner = $link == "OR" ? "OR" : "AND";
$listlines = array();
$colors = array();
$queries = createTermQry($page,$pagesize,$src,$combiner,$termtyp);
$qry = mysqli_query($dbconn,$queries["all"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
$numres = zaehleTreffer($dbconn, $queries);
if($numres)
{
$qry = mysqli_query($dbconn,$queries["limited"])
or die("Datenbank fehler: ".mysqli_error($dbconn));
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
$counter = 0;
while($res=mysqli_fetch_assoc($qry))
{
$counter = $counter+1;
$termdauer = "";
$termtime ="";
$telqry = mysqli_query($dbconn,"SELECT GROUP_CONCAT(nr SEPARATOR ', ') AS nr from tel WHERE partner_id = '".$res["partner_id"]."' AND RIGHT(nr,1) <> '-' GROUP BY partner_id")or $err=error("Fehler beim Listen der Termine <br />".mysqli_error($dbconn));
$telres=mysqli_fetch_assoc($telqry);
//Normale Termine anzeigen
if($res)
$counter++;
$id = (int)$res["id"];
$kopf = htmlspecialchars((string)$res["head"]);
$actions = "<span class='del' title='löschen' onClick='askdel(\"Möchten Sie den Termin ".$kopf."<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=terminadd&id=".$id."&del=1\")'></span>";
$actions .= "<a href='?action=terminadd&id=".$id."&adressid=".(int)$res["adresse_id"]."'><span class='edit' title='Termin ändern'></span></a>";
$actions .= "<a href='?action=kundenshow&id=".(int)$res["partner_id"]."'><span class='partner' title='Kunden anzeigen'></span></a>";
$actions .= "<a href='?action=terminshow&id=".$id."'><span class='print' title='Termin drucken'></span></a>";
if(!$res["done"])
$actions .= "<span class='check' title='Termin als erledigt markieren' onClick='askbranch(\"Möchten Sie einen Folgetermin vormerken?\",\"?action=terminadd&id=".$id."\",\"?action=terminadd&id=".$id."&done=yes\")'></span>";
else
$actions .= "<a href='?action=terminadd&id=".$id."&done=no'><span class='cross' title='Termin als nicht erledigt markieren'></span></a>";
list($termtime, $termdauer) = terminZeitraum($res["termtime"], $res["termdauer"]);
$adresse = "<b>".htmlspecialchars($res["plz"]." ".$res["ort"]);
if($res["ortsteil"])
$adresse .= "-".htmlspecialchars((string)$res["ortsteil"]);
$adresse .= "</b><br />".htmlspecialchars($res["str"]." ".$res["hnr"]);
// Nummern ohne Durchwahl-Bindestrich am Ende
$nummern = db_wert($dbconn, "SELECT GROUP_CONCAT(nr ORDER BY id SEPARATOR ', ') FROM tel
WHERE partner_id = ? AND RIGHT(nr,1) != '-'", array($res["partner_id"]));
if($nummern)
{
$actions = "<span class='del' title='löschen' onClick='askdel(\"Möchten Sie den Termiiin ".htmlspecialchars($res["head"],ENT_QUOTES)."<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=terminadd&id=".$res["id"]."&del=1\")'></span>";
$actions .= "<a href='?action=terminadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."'><span class='edit' title='Termin ändern'></span></a>";
$actions .= "<a href='?action=kundenshow&id=".$res["partner_id"]."'><span class='partner' title='Kunden anzeigen'></span></a>";
$actions .= "<a href='?action=terminshow&id=".$res["id"]."'><span class='print' title='Termin drucken'></span></a>";
if(!$res["done"])
$actions .= "<span class='check' title='Termin als erledigt markieren' onClick='askbranch(\"Möchten Sie einen Folgetermin vormerken?\",\"?action=terminadd&id=".$res["id"]."\",\"?action=terminadd&id=".$res["id"]."&done=yes\")'></span>";
else
$actions .= "<a href='?action=terminadd&id=".$res["id"]."&done=no'><span class='cross' title='Termin als nicht erledigt markieren'></span></a>";
$split_termdauer = explode(":",$res["termdauer"]);
if($res["termtime"] == "0000-00-00 00:00:00")
$termtime = "N/A";
else if($split_termdauer[0] > 23)
{
if($split_termdauer[0]/24 > 1)
{
$termtime = date("d.m.Y - ",strtotime($res["termtime"]));
$termtime .= date("d.m",strtotime("+".(($split_termdauer[0]/24)-1)." day",strtotime($res["termtime"])));
}
else
{
$termtime = date("d.m.Y",strtotime($res["termtime"]));
}
}
else
$termtime = date("d.m.Y H:i ",strtotime($res["termtime"]))."Uhr";
if($split_termdauer[0] > 23)
{
if($split_termdauer[0]/24 > 1)
$termdauer = ($split_termdauer[0]/24)." Tage";
else
$termdauer = ($split_termdauer[0]/24)." Tag";
}
else if($split_termdauer[0] > 0)
$termdauer = ltrim(substr($res["termdauer"],0,2),"0")." Std";
if($split_termdauer[0] > 0 && $split_termdauer[1] > 0)
$termdauer .= " - ";
if($split_termdauer[1] > 0)
$termdauer .= ltrim(substr($res["termdauer"],3,2),"0")." Min";
$adresse = "<b>".$res["plz"]." ".$res["ort"];
if($res["ortsteil"])
$adresse .= "-".$res["ortsteil"];
$adresse .= "</b><br />".$res["str"]." ".$res["hnr"];
if(isset($telres)){
if($res["vname"])
$adresse .= "<br />Tel: ".$telres["nr"]."<br />(".$res["vname"]." ".$res["nname"].")";
else if($res["nname"])
$adresse .= "<br />Tel: ".$telres["nr"]."<br />(".$res["nname"].")";
else if($res["firma"])
$adresse .= "<br />Tel: ".$telres["nr"]."<br />(".$res["firma"].")";
else
$adresse .= "<br />Tel: ".$telres["nr"];
}
$namelist = $res["uservname"]." ".substr($res["usernname"],0,1);
if($res["user2"])
$namelist .= ", ".$res["uservname2"]." ".substr($res["usernname2"],0,1);
if($res["user3"])
$namelist .= ", ".$res["uservname3"]." ".substr($res["usernname3"],0,1);
if($res["user4"])
$namelist .= ", ".$res["uservname4"]." ".substr($res["usernname4"],0,1);
if($termtyp == 1){
$checkbox = "<input type='checkbox' value='".$res["id"]."' id='erl".$counter."' name='erl".$counter."'></input>";
$listlines[] = array("<a href='?action=terminshow&id=".$res["id"]."'><b>".$res["typ"]."</b></a><br />".$namelist,
"<a href='?action=terminshow&id=".$res["id"]."'>".$res["head"]."</a>",
$termtime,
$termdauer,
$adresse,
$actions,
$checkbox
);
}
else if($termtyp == 3){
$checkbox = "<input type='checkbox' value='".$res["id"]."' id='del".$counter."' name='del".$counter."'></input>";
$listlines[] = array("<a href='?action=terminshow&id=".$res["id"]."'><b>".$res["typ"]."</b></a><br />".$namelist,
"<a href='?action=terminshow&id=".$res["id"]."'>".$res["head"]."</a>",
$termtime,
$termdauer,
$adresse,
$actions,
$checkbox
);
}
else{
$listlines[] = array("<a href='?action=terminshow&id=".$res["id"]."'><b>".$res["typ"]."</b></a><br />".$namelist,
"<a href='?action=terminshow&id=".$res["id"]."'>".$res["head"]."</a>",
$termtime,
$termdauer,
$adresse,
$actions
);
}
if($res["user2"] || $res["user3"] || $res["user4"])
$colors[] = "#fff";
else if($res["color"])
$colors[] = $res["color"];
else
$colors[] = "#fff";
$adresse .= "<br />Tel: ".htmlspecialchars($nummern);
if($res["vname"] || $res["nname"])
$adresse .= "<br />(".htmlspecialchars(trim($res["vname"]." ".$res["nname"])).")";
elseif($res["firma"])
$adresse .= "<br />(".htmlspecialchars((string)$res["firma"]).")";
}
$namelist = htmlspecialchars($res["uservname"]." ".substr((string)$res["usernname"], 0, 1));
foreach(array(2, 3, 4) as $n)
if($res["user".$n])
$namelist .= ", ".htmlspecialchars($res["uservname".$n]." ".substr((string)$res["usernname".$n], 0, 1));
$zeile = array("<a href='?action=terminshow&id=".$id."'><b>".htmlspecialchars((string)$res["typ"])."</b></a><br />".$namelist,
"<a href='?action=terminshow&id=".$id."'>".$kopf."</a>",
$termtime,
$termdauer,
$adresse,
$actions);
// Registerkarte 1 hakt ab, Registerkarte 3 löscht - beides mehrfach
if($termtyp == 1 || $termtyp == 3)
{
$feld = $termtyp == 1 ? "erl" : "del";
$zeile[] = "<input type='checkbox' value='".$id."' id='".$feld.$counter."' name='".$feld.$counter."' />";
}
$listlines[] = $zeile;
if($res["user2"] || $res["user3"] || $res["user4"] || !$res["color"])
$colors[] = "#fff";
else
$colors[] = $res["color"];
}
if($termtyp == 1){
$headings = array("Typ","Beschreibung","Datum","Dauer","Ort","Aktionen","&nbsp;&nbsp;Erledigt&nbsp;");
}
else if($termtyp == 3){
$headings = array("Typ","Beschreibung","Datum","Dauer","Ort","Aktionen","&nbsp;&nbsp;Löschen&nbsp;");
}
else{
$headings = array("Typ","Beschreibung","Datum","Dauer","Ort","Aktionen");
}
$headings = array("Typ","Beschreibung","Datum","Dauer","Ort","Aktionen");
if($termtyp == 1)
$headings[] = "&nbsp;&nbsp;Erledigt&nbsp;";
elseif($termtyp == 3)
$headings[] = "&nbsp;&nbsp;Löschen&nbsp;";
$lastdisplay = ($page+1)*$pagesize;
if($numres < $lastdisplay)
$lastdisplay = $numres;
@@ -168,27 +134,23 @@ if(!isset($err))
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
else
ok($numres." Termine sind insgesamt gespeichert.");
displayPages($pagesize,$page,$numres,"ajax_searchterm",",$termtyp");
if($termtyp == 1){
echo "<form action='?action=terminadd&id=multi&done=yes' method='post'><input type='hidden' name='pagesize' value='".$pagesize."'></input>";
}
else if($termtyp == 3){
echo "<form action='?action=terminadd&id=multi&del=1' method='post'><input type='hidden' name='pagesize' value='".$pagesize."'></input>";
}
displayList($headings,$listlines,Array(),$colors);
if($termtyp == 1 || $termtyp == 3){
echo "<input type='submit' value='Mehrfachänderung ausführen'></input></form><br />";
}
displayPages($pagesize,$page,$numres,"ajax_searchterm",",$termtyp");
displayPages($pagesize,$page,$numres,"ajax_searchterm",",".$termtyp);
if($termtyp == 1)
echo "<form action='?action=terminadd&id=multi&done=yes' method='post'><input type='hidden' name='pagesize' value='".$pagesize."' />";
elseif($termtyp == 3)
echo "<form action='?action=terminadd&id=multi&del=1' method='post'><input type='hidden' name='pagesize' value='".$pagesize."' />";
displayList($headings,$listlines,array(),$colors);
if($termtyp == 1 || $termtyp == 3)
echo "<input type='submit' value='Mehrfachänderung ausführen' /></form><br />";
displayPages($pagesize,$page,$numres,"ajax_searchterm",",".$termtyp);
}
else
else
{
if($fulltag)
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
else
else
ok("Keine Einträge.");
}
}
?>
?>
+8 -4
View File
@@ -1,15 +1,19 @@
<?php
$dirs = explode("/",getcwd());
// Unter Windows liefert getcwd() Backslashes
$dirs = preg_split('#[/\\\\]#', getcwd());
$dir = $dirs[count($dirs)-1];
if($dir == "ajax")
$dir = $dirs[count($dirs)-2];
else if($dir == "auto")
$dir = $dirs[count($dirs)-3];
if(DIRECTORY_SEPARATOR == "/")
// KV_CONFIG_PATH erlaubt einen anderen Ort, etwa für eine lokale Testumgebung
if(getenv("KV_CONFIG_PATH"))
define("CONFIG_PATH", rtrim(getenv("KV_CONFIG_PATH"), "/\\")."/");
elseif(DIRECTORY_SEPARATOR == "/")
define("CONFIG_PATH", "/volume1/homes/wagner/kundenconfig/");
else
else
define("CONFIG_PATH", "c:/kundenverwaltung/config/");
define("CONFIG_FILE", $dir."_settings.conf");
+63 -3
View File
@@ -44,19 +44,36 @@ function db_verbinden($server, $user, $pw, $db)
/*
* Führt eine Abfrage mit ?-Platzhaltern aus. Gibt bei SELECT ein
* mysqli_result zurück, sonst true, bei Fehlern false.
*
* Achtung: Prepared Statements liefern Zahlen als int/float, mysqli_query()
* lieferte Strings. db_zeilen(), db_zeile(), db_wert() und db_zuordnung()
* wandeln deshalb in Strings um, damit sich alter Code (=== "0", "1" etc.)
* gleich verhält. Wer das Ergebnis von db_abfrage() selbst ausliest, bekommt
* die nativen Typen.
*/
function db_abfrage($dbconn, $sql, $params = array())
{
return mysqli_execute_query($dbconn, $sql, array_values($params));
}
/* Werte einer Zeile als Strings wie bei mysqli_query(), NULL bleibt NULL */
function db_als_text($zeile)
{
if(!is_array($zeile))
return $zeile;
foreach($zeile as $spalte => $wert)
if($wert !== null && !is_string($wert))
$zeile[$spalte] = (string)$wert;
return $zeile;
}
/* Alle Zeilen als Liste assoziativer Arrays, bei Fehlern false. */
function db_zeilen($dbconn, $sql, $params = array())
{
$res = db_abfrage($dbconn, $sql, $params);
if(!$res)
return false;
return mysqli_fetch_all($res, MYSQLI_ASSOC);
return array_map("db_als_text", mysqli_fetch_all($res, MYSQLI_ASSOC));
}
/* Erste Zeile als assoziatives Array, null ohne Treffer, bei Fehlern false. */
@@ -65,7 +82,50 @@ function db_zeile($dbconn, $sql, $params = array())
$res = db_abfrage($dbconn, $sql, $params);
if(!$res)
return false;
return mysqli_fetch_assoc($res);
return db_als_text(mysqli_fetch_assoc($res));
}
/*
* Zwei Spalten als Zuordnung erste => zweite, etwa für Auswahllisten
* (SELECT id, anrede FROM anrede). Bei Fehlern false.
*/
function db_zuordnung($dbconn, $sql, $params = array())
{
$res = db_abfrage($dbconn, $sql, $params);
if(!$res)
return false;
$zuordnung = array();
while($zeile = mysqli_fetch_row($res))
$zuordnung[$zeile[0]] = $zeile[1] === null ? null : (string)$zeile[1];
return $zuordnung;
}
/*
* Die Abfrage mit eingesetzten Werten als lesbarer Text - ausschließlich für
* das Änderungsprotokoll (Tabelle log). Nie ausführen.
*/
function db_sql_text($dbconn, $sql, $params = array())
{
$teile = explode("?", $sql);
$text = array_shift($teile);
foreach(array_values($params) as $i => $wert)
{
if($wert === null)
$text .= "NULL";
else
$text .= "'".mysqli_real_escape_string($dbconn, (string)$wert)."'";
$text .= isset($teile[$i]) ? $teile[$i] : "";
}
return $text;
}
/*
* Text als Praefix-Suchmuster fuer LIKE. % und _ waeren darin sonst
* Platzhalter; das Fluchtzeichen ist der Backslash.
*/
function db_like_praefix($text)
{
return str_replace(array("\\", "%", "_"), array("\\\\", "\%", "\_"), (string)$text)."%";
}
/* Erste Spalte der ersten Zeile, null ohne Treffer, bei Fehlern false. */
@@ -75,5 +135,5 @@ function db_wert($dbconn, $sql, $params = array())
if(!$res)
return false;
$zeile = mysqli_fetch_row($res);
return $zeile === null ? null : $zeile[0];
return $zeile === null || $zeile[0] === null ? null : (string)$zeile[0];
}
+7
View File
@@ -36,6 +36,9 @@ function rrmdir($dir) {
function del_files($path, $pattern) {
$matches = Array();
$entries = Array();
// Fehlt das Verzeichnis, gibt es auch nichts zu loeschen
if(!is_dir($path))
return;
$dir = dir($path);
while ($entry = $dir->read())
{
@@ -51,6 +54,10 @@ function del_files($path, $pattern) {
function search_file($path, $pattern) {
$matches = Array();
$entries = Array();
$ret = "";
// Fehlt das Verzeichnis, gibt es auch nichts zu finden
if(!is_dir($path))
return $ret;
$dir = dir($path);
while ($entry = $dir->read())
{
+257 -264
View File
@@ -1,197 +1,119 @@
<?php
/*
* Die Suchbedingung der Kunden-, Lieferanten- und Adresssuche. $fields
* waehlt aus, worin gesucht wird, $src sind die einzelnen Suchbegriffe.
* Die Werte kommen als Platzhalter dazu, die Spaltennamen stehen fest.
*/
function partnerSuchbedingung($src, $combiner, $fields, &$params)
{
$spalten = array(
"all" => array("vname", "nname", "vname2", "nname2", "firma", "ort", "str", "plz", "partner.id"),
"kdnr" => array("partner.id"),
"name" => array("vname", "nname", "vname2", "nname2", "firma"),
"str" => array("str"),
"plz" => array("plz"),
"ort" => array("ort"),
"tel" => array("tel.nr"),
"kont" => array("kontakt"),
);
if(!isset($spalten[$fields]))
return "";
$combiner = $combiner == "OR" ? "OR" : "AND";
$bedingung = "";
foreach($src AS $tag)
{
$teile = array();
foreach($spalten[$fields] as $spalte)
{
$teile[] = "$spalte LIKE ?";
$params[] = "%".$tag."%";
}
$bedingung .= " $combiner (".implode(" OR ", $teile).")";
}
return $bedingung;
}
/*
* Kunden- bzw. Lieferantensuche, eine Zeile je Partner. $typ ist 1 fuer
* Kunden, 2 fuer Lieferanten. Mit $full kommen auch veraltete Versionen
* dazu; ihre Namen, Adressen und Telefonnummern stehen dann untereinander
* in einer Zelle (siehe zeilenHtml()).
* Rueckgabe: array("all" => sql, "limited" => sql mit LIMIT, "params" => Werte).
*/
function createPartQry($page,$pagesize,$src,$combiner,$fields,$full=0,$typ=1)
{
$joins = "FROM partner
LEFT JOIN adresse ON adresse.partner_id = partner.id
LEFT JOIN strasse ON strasse.id = str_id
LEFT JOIN ort ON ort.id = ort_id
LEFT JOIN tel ON tel.partner_id = partner.id
LEFT JOIN kontakt ON kontakt.partner_id = partner.id";
if(!$full)
{
$query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr, tel.nr AS tel FROM partner
LEFT JOIN adresse ON adresse.partner_id = partner.id
LEFT JOIN strasse ON strasse.id = str_id
LEFT JOIN ort ON ort.id = ort_id
LEFT JOIN tel ON tel.partner_id = partner.id
LEFT JOIN kontakt ON kontakt.partner_id = partner.id
WHERE updated_by = 0 and adresse.typ_id = 1 AND partner.typ_id = $typ";
}
$query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr, tel.nr AS tel
$joins
WHERE updated_by = 0 AND adresse.typ_id = 1 AND partner.typ_id = ?";
else
{
$query = "SELECT partner.id AS kdnr,firma,GROUP_CONCAT(CONCAT(vname,' ',nname) SEPARATOR '<br />') AS nname, '' AS vname,GROUP_CONCAT(CONCAT(vname2,' ',nname2) SEPARATOR '<br />') AS nname2,'' AS vname2,'' AS ort,GROUP_CONCAT(CONCAT(plz,' ',ort) SEPARATOR '<br />') AS plz,GROUP_CONCAT(CONCAT(str,' ',hnr) SEPARATOR '<br />') AS str,'' AS hnr, GROUP_CONCAT(tel.nr SEPARATOR '<br />') AS tel FROM partner
LEFT JOIN adresse ON adresse.partner_id = partner.id
LEFT JOIN strasse ON strasse.id = str_id
LEFT JOIN ort ON ort.id = ort_id
LEFT JOIN tel ON tel.partner_id = partner.id
LEFT JOIN kontakt ON kontakt.partner_id = partner.id
WHERE partner.typ_id = $typ";
}
switch($fields)
{
case "all":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag' OR ort LIKE '$tag' OR str LIKE '$tag' OR plz LIKE '$tag' OR partner.id LIKE '$tag')";
}
break;
case "kdnr":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (partner.id LIKE '$tag')";
}
break;
case "name":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag')";
}
break;
case "str":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (str LIKE '$tag')";
}
break;
case "plz":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (plz LIKE '$tag')";
}
break;
case "ort":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (ort LIKE '$tag')";
}
break;
case "tel":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (tel.nr LIKE '$tag')";
}
break;
case "kont":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (kontakt LIKE '$tag')";
}
break;
}
$query .= " GROUP BY partner.id";
$query = "SELECT partner.id AS kdnr,firma,
GROUP_CONCAT(CONCAT(vname,' ',nname) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS nname, '' AS vname,
GROUP_CONCAT(CONCAT(vname2,' ',nname2) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS nname2,'' AS vname2,'' AS ort,
GROUP_CONCAT(CONCAT(plz,' ',ort) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS plz,
GROUP_CONCAT(CONCAT(str,' ',hnr) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS str,'' AS hnr,
GROUP_CONCAT(tel.nr ORDER BY adresse.id, tel.id SEPARATOR '\n') AS tel
$joins
WHERE partner.typ_id = ?";
$params = array((int)$typ);
$query .= partnerSuchbedingung($src, $combiner, $fields, $params);
// Ohne feste Reihenfolge kann dieselbe Zeile beim Blaettern zweimal
// oder gar nicht auftauchen
$query .= " GROUP BY partner.id ORDER BY partner.id";
$ret["all"] = $query;
$query .= " LIMIT ".(intval($page)*$pagesize).", $pagesize";
$ret["limited"] = $query;
$ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["params"] = $params;
return $ret;
}
/*
* Adresssuche: wie createPartQry(), aber eine Zeile je Adresse statt je
* Partner. Damit laesst sich fuer ein Dokument eine Nebenadresse auswaehlen.
*/
function createAdressQry($page,$pagesize,$src,$combiner,$fields,$full=0,$typ=1)
{
if(!$full)
{
$query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr,adresse.id AS adrid, tel.nr AS tel
FROM partner
LEFT JOIN adresse ON adresse.partner_id = partner.id
LEFT JOIN strasse ON strasse.id = str_id
LEFT JOIN ort ON ort.id = ort_id
LEFT JOIN tel ON tel.partner_id = partner.id
LEFT JOIN kontakt ON kontakt.partner_id = partner.id
WHERE updated_by = 0 AND partner.typ_id = $typ";
}
else
{
$query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr,adresse.id AS adrid, tel.nr AS tel
FROM partner
LEFT JOIN adresse ON adresse.partner_id = partner.id
LEFT JOIN strasse ON strasse.id = str_id
LEFT JOIN ort ON ort.id = ort_id
LEFT JOIN tel ON tel.partner_id = partner.id
LEFT JOIN kontakt ON kontakt.partner_id = partner.id
WHERE partner.typ_id = $typ";
}
switch($fields)
{
case "all":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag' OR ort LIKE '$tag' OR str LIKE '$tag' OR plz LIKE '$tag' OR partner.id LIKE '$tag')";
}
break;
case "kdnr":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (partner.id LIKE '$tag')";
}
break;
case "name":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag')";
}
break;
case "str":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (str LIKE '$tag')";
}
break;
case "plz":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (plz LIKE '$tag')";
}
break;
case "ort":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (ort LIKE '$tag')";
}
break;
case "tel":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (tel.nr LIKE '$tag')";
}
break;
case "kont":
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (kontakt LIKE '$tag')";
}
break;
}
$query .= " GROUP BY adresse.id";
$query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr,adresse.id AS adrid, tel.nr AS tel
FROM partner
LEFT JOIN adresse ON adresse.partner_id = partner.id
LEFT JOIN strasse ON strasse.id = str_id
LEFT JOIN ort ON ort.id = ort_id
LEFT JOIN tel ON tel.partner_id = partner.id
LEFT JOIN kontakt ON kontakt.partner_id = partner.id
WHERE ".($full ? "" : "updated_by = 0 AND ")."partner.typ_id = ?";
$params = array((int)$typ);
$query .= partnerSuchbedingung($src, $combiner, $fields, $params);
$query .= " GROUP BY adresse.id ORDER BY adresse.id";
$ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize";
$ret["limited"] = $query;
$ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["params"] = $params;
return $ret;
}
/*
* Suche in den Dokumenten eines Kunden. Liefert array("all" => sql,
* "limited" => sql mit LIMIT, "params" => Platzhalterwerte für beide).
* $combiner muss "AND" oder "OR" sein.
*/
function createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,$sks=0)
{
if($typ == 1)
$docnr = "rechnr";
else
$docnr = "rechnr";
$docnr = "rechnr";
$combiner = $combiner == "OR" ? "OR" : "AND";
$params = array($id, $typ);
if(!$sks)
{
$query = "SELECT rechnung.$docnr AS rechnr,
rechnung.id,
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') AS date,
GROUP_CONCAT(CONCAT(artikel.bezeichn, ' (', artikel_rechn.wanr, ')') SEPARATOR '<br />') AS artikel,
GROUP_CONCAT(CONCAT(artikel.bezeichn, ' (', artikel_rechn.wanr, ')') SEPARATOR '\n') AS artikel,
adresse_id,
storno,
rechnung.typ_id
@@ -199,11 +121,12 @@ function createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,$sks=0)
LEFT JOIN rechtyp ON rechnung.typ_id = rechtyp.id
LEFT JOIN artikel_rechn ON rechnung.id = artikel_rechn.rech_id
LEFT JOIN artikel ON artikel_rechn.art_id = artikel.id
WHERE partner_id='".$id."' AND rechtyp.id = '".$typ."' AND rechnung.sks = 0 ";
WHERE partner_id = ? AND rechtyp.id = ? AND rechnung.sks = 0 ";
foreach($src AS $tag)
{
$tag .= "%";
$query .= " $combiner (artikel.bezeichn LIKE '$tag' OR rechnung.rechnr LIKE '$tag' OR DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')";
$query .= " $combiner (artikel.bezeichn LIKE ? OR rechnung.rechnr LIKE ? OR DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE ?)";
array_push($params, $tag, $tag, $tag);
}
}
else
@@ -211,88 +134,104 @@ function createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,$sks=0)
$query = "SELECT rechnung.$docnr AS rechnr,
rechnung.id,
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') AS date,
GROUP_CONCAT(CONCAT(artikelsks.bezeichn1, ' ', artikelsks.bezeichn2) SEPARATOR '<br />') AS artikel,
GROUP_CONCAT(CONCAT(artikelsks.bezeichn1, ' ', artikelsks.bezeichn2) SEPARATOR '\n') AS artikel,
adresse_id,
rechnung.typ_id
FROM rechnung
LEFT JOIN rechtyp ON rechnung.typ_id = rechtyp.id
RIGHT JOIN artikelsks ON rechnung.rechnr = artikelsks.rechnr
WHERE partner_id='".$id."' AND rechtyp.id = '".$typ."' AND rechnung.sks = 1 ";
WHERE partner_id = ? AND rechtyp.id = ? AND rechnung.sks = 1 ";
foreach($src AS $tag)
{
$tag .= "%";
$query .= " $combiner (artikelsks.bezeichn1 LIKE '$tag' OR artikelsks.bezeichn2 LIKE '$tag' OR rechnung.rechnr LIKE '$tag' OR DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')";
$query .= " $combiner (artikelsks.bezeichn1 LIKE ? OR artikelsks.bezeichn2 LIKE ? OR rechnung.rechnr LIKE ? OR DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE ?)";
array_push($params, $tag, $tag, $tag, $tag);
}
}
$query .= " GROUP BY rechnung.rechnr ORDER BY rechnung.datetime DESC ";
$ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize";
$query .= " LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["limited"] = $query;
$ret["params"] = $params;
return $ret;
}
/* Projekte eines Kunden, Rueckgabe wie createKdnRechQry(). */
function createKdnProjectQry($page,$pagesize,$src,$combiner,$id)
{
$query = "SELECT project.id, project.name,
$combiner = $combiner == "OR" ? "OR" : "AND";
$params = array($id);
$query = "SELECT project.id, project.name,
DATE_FORMAT(project.datetime, '%d.%m.%Y') AS date,
SUM(CASE WHEN rechn = 0 THEN work.std ELSE 0 END) AS work
FROM project
FROM project
JOIN work ON project.id = work.project_id
AND partner_id='".$id."'";
AND partner_id = ?";
foreach($src AS $tag)
{
$tag .= "%";
$query .= " $combiner (work.bezeichn LIKE '$tag' OR project.name LIKE '$tag' OR DATE_FORMAT(project.datetime, '%d.%m.%Y') LIKE '$tag')";
$query .= " $combiner (work.bezeichn LIKE ? OR project.name LIKE ? OR DATE_FORMAT(project.datetime, '%d.%m.%Y') LIKE ?)";
array_push($params, $tag, $tag, $tag);
}
$query .= " GROUP BY project.id ORDER BY project.datetime DESC ";
$ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize";
$ret["limited"] = $query;
$ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["params"] = $params;
return $ret;
}
/* Kommissionsadressen (adresstyp 5) eines Kunden, Rueckgabe wie createKdnRechQry(). */
function createKommQry($page,$pagesize,$src,$combiner,$id)
{
$query = "SELECT adresse.id, adresse.partner_id, firma, vname, nname, vname2, nname2, titel_id, titel2_id, anrede_id, anrede2_id, str, hnr, ort, ortsteil,plz,ort,nr AS tel,vwahl
$combiner = $combiner == "OR" ? "OR" : "AND";
$params = array($id);
$query = "SELECT adresse.id, adresse.partner_id, firma, vname, nname, vname2, nname2, titel_id, titel2_id, anrede_id, anrede2_id, str, hnr, ort, ortsteil,plz,ort,nr AS tel,vwahl
FROM adresse
LEFT JOIN strasse ON adresse.str_id = strasse.id
LEFT JOIN ort ON ort_id = ort.id
LEFT JOIN strasse ON adresse.str_id = strasse.id
LEFT JOIN ort ON ort_id = ort.id
LEFT JOIN tel ON adresse.id = tel.adresse_id
WHERE adresse.partner_id='".$id."' AND adresse.typ_id = '5' ";
WHERE adresse.partner_id = ? AND adresse.typ_id = 5 ";
foreach($src AS $tag)
{
$tag .= "%";
$query .= " $combiner (ort LIKE '$tag'
OR str LIKE '$tag'
OR nr LIKE '$tag'
OR vname LIKE '$tag'
OR nname LIKE '$tag'
OR vname2 LIKE '$tag'
OR nname2 LIKE '$tag'
OR firma LIKE '$tag')";
$query .= " $combiner (ort LIKE ?
OR str LIKE ?
OR nr LIKE ?
OR vname LIKE ?
OR nname LIKE ?
OR vname2 LIKE ?
OR nname2 LIKE ?
OR firma LIKE ?)";
for($i = 0; $i < 8; $i++)
$params[] = $tag;
}
$query .= " GROUP BY adresse.id ORDER BY adresse.id DESC ";
$ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize";
$ret["limited"] = $query;
$ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["params"] = $params;
return $ret;
}
/*
* Suche über alle Dokumente, Rückgabe wie createKdnRechQry().
*/
function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
{
$docnr = "rechnr";
$combiner = $combiner == "OR" ? "OR" : "AND";
$params = array();
if(!$sks)
{
$query = "SELECT CONCAT(ELT(rechnung.typ_id,'R','G','A','B','L','M'),MID(rechnung.$docnr,1,4),'-',MID(rechnung.$docnr,5,2),'-',MID(rechnung.$docnr,7,2),'.',MID(rechnung.$docnr,9,2)) AS drechnr,
rechnung.$docnr AS rechnr,
rechnung.id,
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') AS date,
GROUP_CONCAT(CONCAT(artikel.bezeichn, ' (', artikel_rechn.wanr, ')') SEPARATOR '<br />') AS artikel,
GROUP_CONCAT(CONCAT(artikel.bezeichn, ' (', artikel_rechn.wanr, ')') SEPARATOR '\n') AS artikel,
adresse_id,
storno,
rechnung.typ_id
@@ -304,9 +243,10 @@ function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (artikel.bezeichn LIKE '$tag' OR
CONCAT(ELT(rechnung.typ_id,'R','G','A','B','L','M'),MID(rechnung.$docnr,1,4),'-',MID(rechnung.$docnr,5,2),'-',MID(rechnung.$docnr,7,2),'.',MID(rechnung.$docnr,9,2)) LIKE '$tag' OR
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')";
$query .= " $combiner (artikel.bezeichn LIKE ? OR
CONCAT(ELT(rechnung.typ_id,'R','G','A','B','L','M'),MID(rechnung.$docnr,1,4),'-',MID(rechnung.$docnr,5,2),'-',MID(rechnung.$docnr,7,2),'.',MID(rechnung.$docnr,9,2)) LIKE ? OR
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE ?)";
array_push($params, $tag, $tag, $tag);
}
}
else
@@ -315,7 +255,7 @@ function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
rechnung.$docnr AS rechnr,
rechnung.id,
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') AS date,
GROUP_CONCAT(CONCAT(artikelsks.bezeichn1, ' ', artikelsks.bezeichn2) SEPARATOR '<br />') AS artikel,
GROUP_CONCAT(CONCAT(artikelsks.bezeichn1, ' ', artikelsks.bezeichn2) SEPARATOR '\n') AS artikel,
adresse_id,
storno = 0,
rechnung.typ_id
@@ -326,77 +266,99 @@ function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (artikelsks.bezeichn1 LIKE '$tag' OR
artikelsks.bezeichn2 LIKE '$tag' OR
rechnung.rechnr LIKE '$tag' OR
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')";
$query .= " $combiner (artikelsks.bezeichn1 LIKE ? OR
artikelsks.bezeichn2 LIKE ? OR
rechnung.rechnr LIKE ? OR
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE ?)";
array_push($params, $tag, $tag, $tag, $tag);
}
}
$query .= " GROUP BY rechnung.rechnr ORDER BY rechnung.datetime DESC ";
$ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize";
$query .= " LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["limited"] = $query;
$ret["params"] = $params;
return $ret;
}
/*
* Terminliste. $termtyp waehlt die Registerkarte:
* 1 offene mit Datum, 2 offene ohne Datum, 3 erledigte,
* 4 vorgemerkte (Wiedervorlage in der Zukunft), 5 ganztaegige.
* Rueckgabe wie createKdnRechQry().
*/
function createTermQry($page,$pagesize,$src,$combiner,$termtyp)
{
$query = "SELECT termin.id,termtyp.typ, termin.head, MIN(termtime) AS termtime, SEC_TO_TIME(SUM(TIME_TO_SEC(termdauer))) AS termdauer, user, user2, user3, user4, done, partner_id, adresse_id, termin.id, str, ort, ortsteil, plz, hnr, adresse.vname as vname, adresse.nname as nname,
adresse.firma as firma,
user.vname as uservname, user.nname as usernname, user.color as color,
user2.vname as uservname2, user2.nname as usernname2,
user3.vname as uservname3, user3.nname as usernname3,
user4.vname as uservname4, user4.nname as usernname4,
firma, vname2, nname2
FROM termin
LEFT JOIN termtyp ON termin.typ = termtyp.id
LEFT JOIN adresse ON termin.adresse_id = adresse.id
LEFT JOIN partner ON adresse.partner_id = partner.id
LEFT JOIN strasse ON adresse.str_id = strasse.id
LEFT JOIN ort ON strasse.ort_id = ort.id
LEFT JOIN user ON termin.user = user.id
LEFT JOIN user AS user2 ON termin.user2 = user2.id
LEFT JOIN user AS user3 ON termin.user3 = user3.id
LEFT JOIN user AS user4 ON termin.user4 = user4.id
WHERE ";
if($termtyp == 1)
$query .= "termdauer != '24:00:00' AND termtime != '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()";
elseif($termtyp == 2)
$query .= "termdauer != '24:00:00' AND termtime = '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()";
elseif($termtyp == 3)
$query .= "termdauer != '24:00:00' AND done = 1 AND act_date < NOW()";
elseif($termtyp == 4)
$query .= "termdauer != '24:00:00' AND act_date > NOW()";
elseif($termtyp == 5)
$query .= "termdauer = '24:00:00'";
$combiner = $combiner == "OR" ? "OR" : "AND";
$params = array();
$query = "SELECT termin.id, termtyp.typ, termin.head, MIN(termtime) AS termtime,
SEC_TO_TIME(SUM(TIME_TO_SEC(termdauer))) AS termdauer,
user, user2, user3, user4, done, partner_id, adresse_id, main_id,
str, ort, ortsteil, plz, hnr, adresse.vname AS vname, adresse.nname AS nname,
user.vname AS uservname, user.nname AS usernname, user.color AS color,
user2.vname AS uservname2, user2.nname AS usernname2,
user3.vname AS uservname3, user3.nname AS usernname3,
user4.vname AS uservname4, user4.nname AS usernname4,
firma, vname2, nname2
FROM termin
LEFT JOIN termtyp ON termin.typ = termtyp.id
LEFT JOIN adresse ON termin.adresse_id = adresse.id
LEFT JOIN partner ON adresse.partner_id = partner.id
LEFT JOIN strasse ON adresse.str_id = strasse.id
LEFT JOIN ort ON strasse.ort_id = ort.id
LEFT JOIN user ON termin.user = user.id
LEFT JOIN user AS user2 ON termin.user2 = user2.id
LEFT JOIN user AS user3 ON termin.user3 = user3.id
LEFT JOIN user AS user4 ON termin.user4 = user4.id
WHERE ";
switch((int)$termtyp)
{
case 2:
$query .= "termdauer != '24:00:00' AND termtime = '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()";
break;
case 3:
$query .= "termdauer != '24:00:00' AND done = 1 AND act_date < NOW()";
break;
case 4:
$query .= "termdauer != '24:00:00' AND act_date > NOW()";
break;
case 5:
$query .= "termdauer = '24:00:00'";
break;
// 1 ist die uebliche Ansicht und faengt zugleich unbekannte Werte ab
default:
$query .= "termdauer != '24:00:00' AND termtime != '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()";
break;
}
foreach($src AS $tag)
{
$tag = "%".$tag."%";
$query .= " $combiner (termin.head LIKE '$tag' OR
termin.text LIKE '$tag' OR
adresse.firma LIKE '$tag' OR
adresse.vname LIKE '$tag' OR
adresse.nname LIKE '$tag' OR
ort LIKE '$tag' OR
plz LIKE '$tag' OR
str LIKE '$tag' OR
DATE_FORMAT(termtime, '%d.%m.%Y %H:%i') LIKE '$tag')";
$query .= " $combiner (termin.head LIKE ? OR
termin.text LIKE ? OR
adresse.firma LIKE ? OR
adresse.vname LIKE ? OR
adresse.nname LIKE ? OR
ort LIKE ? OR
plz LIKE ? OR
str LIKE ? OR
DATE_FORMAT(termtime, '%d.%m.%Y %H:%i') LIKE ?)";
for($i = 0; $i < 9; $i++)
$params[] = $tag;
}
if($termtyp == 2)
if((int)$termtyp == 2)
$query .= " GROUP BY main_id ORDER BY ort ASC, termtime DESC";
elseif($termtyp != 5 && $termtyp != 3)
elseif((int)$termtyp != 5 && (int)$termtyp != 3)
$query .= " GROUP BY main_id ORDER BY termtime ASC";
else
$query .= " GROUP BY main_id ORDER BY termtime DESC";
$ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize";
$ret["limited"] = $query;
$ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["params"] = $params;
return $ret;
}
@@ -446,6 +408,31 @@ function createMsgQry($page,$pagesize,$src,$combiner,$user)
return $ret;
}
/*
* Zahl der Treffer einer Suche. Die Abfragen aus create*Qry() gruppieren,
* deshalb wird die ungekuerzte Abfrage ausgefuehrt und gezaehlt, statt mit
* COUNT(*) zu arbeiten.
*/
function zaehleTreffer($dbconn, $queries)
{
$res = isset($queries["params"])
? db_abfrage($dbconn, $queries["all"], $queries["params"])
: mysqli_query($dbconn, $queries["all"]);
if(!$res)
die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
return mysqli_num_rows($res);
}
/*
* Mit \n verbundene Werte aus GROUP_CONCAT als escaptes HTML, eine Zeile
* je Wert. Zusammengebaut wird erst hier, damit Daten aus der Datenbank
* nicht als HTML durchschlagen.
*/
function zeilenHtml($text)
{
return implode("<br />", array_map("htmlspecialchars", explode("\n", (string)$text)));
}
function displayPages($pagesize,$currpage,$numentries,$refreshfunc,$ad_params = "")
{
echo "Seite: ";
@@ -535,7 +522,8 @@ function displayList($header,$entries,$speciallines=array(),$colors=array())
echo "<tr style='background-color: #e2e2e2;'>";
if(isset($colors[$i]))
echo "<td bgcolor='".$colors[$i]."' style='box-shadow: inset 0 0 0.7em #000; border: 1px solid black; border-top-left-radius: 0.5em; border-bottom-left-radius: 0.5em;'></td>";
// die Farbe kommt aus der Benutzerverwaltung, nicht aus dem Code
echo "<td bgcolor='".htmlspecialchars((string)$colors[$i])."' style='box-shadow: inset 0 0 0.7em #000; border: 1px solid black; border-top-left-radius: 0.5em; border-bottom-left-radius: 0.5em;'></td>";
foreach($entry AS $element)
{
@@ -564,25 +552,30 @@ function displayList($header,$entries,$speciallines=array(),$colors=array())
echo "</table>";
}
/*
* Bausteine fuer die Trefferlisten. Sie liefern fertiges HTML und escapen
* die Werte aus der Datenbank deshalb selbst.
*/
function makenameline($adresse)
{
$ret = $adresse["vname"]." ".$adresse["nname"];
if($adresse["firma"])
$ret .= "<br /><i><u>".$adresse["firma"]."</u></i>";
$ret = zeilenHtml(trim($adresse["vname"]." ".$adresse["nname"]));
if(!empty($adresse["firma"]))
$ret .= "<br /><i><u>".zeilenHtml($adresse["firma"])."</u></i>";
return $ret;
}
function makeadressline($adresse)
{
$ret["ort"] = $adresse["plz"]." ".$adresse["ort"];
$ret["str"] = $adresse["str"]." ".$adresse["hnr"];
$ret["ort"] = zeilenHtml(trim($adresse["plz"]." ".$adresse["ort"]));
$ret["str"] = zeilenHtml(trim($adresse["str"]." ".$adresse["hnr"]));
return $ret;
}
function maketelline($tel)
{
$ret="";
if(isset($tel["vwahl"]) && !stristr($tel["tel"], "-") && !stristr($tel["tel"], "/"))
$ret = $tel["vwahl"]."-";
$ret .= $tel["tel"];
$nr = isset($tel["tel"]) ? (string)$tel["tel"] : "";
$ret = "";
if(!empty($tel["vwahl"]) && !str_contains($nr, "-") && !str_contains($nr, "/"))
$ret = zeilenHtml($tel["vwahl"])."-";
$ret .= zeilenHtml($nr);
return $ret;
}
+160 -178
View File
@@ -1,6 +1,19 @@
<?php
<?php
require_once(__DIR__."/db.php");
require_once('tcpdf/tcpdf.php');
// Unicode-Schriften statt der eingebauten PDF-Schriften Times/Helvetica: Die kennen
// nur westeuropäische Zeichen, aus ř, ł, č usw. würde ein "?". FreeSerif und
// FreeSans (bei TCPDF dabei) sind im Schriftbild und in der Breite nahezu gleich.
define("PDF_SCHRIFT_SERIF", "freeserif");
define("PDF_SCHRIFT_SANS", "freesans");
// Temporäre PDFs und Vorschaubilder in temp/ werden beim Erzeugen neuer Dateien
// aufgeräumt, wenn sie älter sind als dies (Sekunden). Früher stand hier 20 -
// gemeint waren Minuten: Bei 20 Sekunden konnte ein PDF verschwinden, bevor der
// Browser es geladen hatte, sobald jemand anderes eins erzeugte.
define("PDF_TEMP_MAX_ALTER", 20 * 60);
function makerawPDF($ajax)
{
@@ -45,13 +58,13 @@ function makerawPDF($ajax)
$this->SetY(-16.5);
$linepos=$this->GetY();
$this->setX(30);
$this->SetFont('Times','',9);
$this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(20,47,119);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-16.3);
$this->setX(15);
//Arial fett 6
$this->SetFont('helvetica','B',7);
$this->SetFont(PDF_SCHRIFT_SANS,'B',7);
//Seitenzahl
$this->SetDrawColor(20,47,119);
@@ -100,12 +113,12 @@ function makerawPDF($ajax)
//Position 1,5 cm von unten
$this->SetY(-23);
$this->setX(30);
$this->SetFont('Times','',9);
$this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(0,0,0);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-19);
//Arial fett 6
$this->SetFont('helvetica','B',8);
$this->SetFont(PDF_SCHRIFT_SANS,'B',8);
$this->SetTextColor(124,124,138);
//Seitenzahl
$this->setX(15);
@@ -164,13 +177,13 @@ function makerawPDF($ajax)
//Position 1,5 cm von unten
$this->SetY(-17);
$this->setX(30);
$this->SetFont('Times','',9);
$this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(0,0,0);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-10);
$this->setX(15);
//Arial fett 6
$this->SetFont('helvetica','B',6);
$this->SetFont(PDF_SCHRIFT_SANS,'B',6);
$this->SetTextColor(124,124,138);
//Seitenzahl
@@ -214,7 +227,7 @@ function makeumschlagAddress($ajax, $address){
$pdf->SetAutoPageBreak(true,5);
$pdf->AddPage("L",$pagelayout);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setY(55);
$pdf->setX(140);
$pdf->MultiCell(75,50,str_replace("<br />","\n",$address["adresse"]),0,"L",0);
@@ -261,7 +274,7 @@ function makerawPDFcopy($ajax)
{
$this->SetY(-17);
$this->setX(30);
$this->SetFont('Times','',9);
$this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(0,0,0);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-10);
@@ -303,7 +316,7 @@ function makerawPDFanfahrt($ajax)
{
$this->SetY(-17);
$this->setX(30);
$this->SetFont('Times','',9);
$this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(0,0,0);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-10);
@@ -329,13 +342,13 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
//$pdf->SetDrawColor(0,0,0);
if($_SESSION["firma"] == "Wagner Markisen")
{
$pdf->SetFont('helvetica','B',10);
$pdf->SetFont(PDF_SCHRIFT_SANS,'B',10);
$pdf->setY(52);
$pdf->setX(165);
$pdf->cell(40,5,"Öffnungszeiten:",0,0);
$pdf->ln(5);
$pdf->setX(165);
$pdf->SetFont('helvetica','',9);
$pdf->SetFont(PDF_SCHRIFT_SANS,'',9);
$pdf->cell(12,4,"Mo.:");
$pdf->cell(20,4," 8:00 bis 12:00",0,0);
$pdf->ln(3.8);
@@ -361,7 +374,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
}
//STORNO!!!
if($rechnung["storno"] == 1){
$pdf->SetFont('helvetica','B',75);
$pdf->SetFont(PDF_SCHRIFT_SANS,'B',75);
$pdf->setY(135);
$pdf->setX(70);
$pdf->SetTextColor(200,0,0);
@@ -372,7 +385,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
}
//ADRESSE!!!!
$pdf->SetFont('helvetica','B',6);
$pdf->SetFont(PDF_SCHRIFT_SANS,'B',6);
$pdf->setY(35);
$pdf->setX(25);
@@ -392,7 +405,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
$pdf->Cell(0,3,'LSG OBERALLGÄU e.V. PHILIPP WAGNER IM ENGELFELD 13 87509 IMMENSTADT TEL.: 0176/21938558',0,0,'L');
}
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setY(40);
$pdf->setX(25);
$pdf->MultiCell(75,45,str_replace("<br />","\n",$adresse),0,"L",0);
@@ -402,7 +415,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
$datum=strftime("%d.%m.%Y",strtotime($rechnung["datetime"]));
$pdf->Cell(0,5,$datum,0,0,'L');
//typ
$pdf->SetFont('Times','B',18);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',18);
$pdf->sety(80);
$pdf->setX(20);
if($rechnung["typ"] != "Brief")
@@ -412,19 +425,19 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
if($rechnung["typ"] != "Brief")
{
$pdf->SetFont('Times','B',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',12);
$pdf->sety(95);
$pdf->setX(20);
$pdf->Cell(0,5,$rechnung["typ"].": ",0,0,'L');
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety(95);
$pdf->setX(60);
$pdf->Cell(0,5,$rechnung["drechnr"],0,0,'L');
if($_SESSION["firma"] == "LSG Oberallgäu")
{
$pdf->SetFont('Times','B',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',12);
$pdf->Cell(0,5,"Bitte bei der Überweisung angeben!!",0,0,'L');
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
}
$currY = 100;
}
@@ -436,11 +449,11 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
if($_SESSION["firma"] == "Wagner Markisen")
{
$pdf->SetFont('Times','B',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',12);
$pdf->sety(100);
$pdf->setX(20);
$pdf->Cell(0,5,"Kundennummer: ",0,0,'L');
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety(100);
$pdf->setX(60);
$pdf->Cell(0,5,$rechnung["partner_id"],0,0,'L');
@@ -454,7 +467,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
//Begrüßung
$pdf->SetFont('Times','B',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',12);
$pdf->setY($currY);
$pdf->setX(20);
$pdf->Cell(0,5,$rechnung["anrede1"],0,0,'L');
@@ -470,7 +483,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
if ($rechnung["typ"] == "Rechnung")
{
// $currY += 5;
// $pdf->SetFont('Times','',12);
// $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
// $pdf->sety($currY);
// $pdf->setX(20);
// $pdf->Cell(0,5,"Wir bedanken uns für Ihr Vertrauen.",0,0,'L');
@@ -478,7 +491,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
elseif ($rechnung["typ"] == "Auftragsbestätigung")
{
$currY += 5;
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety($currY);
$pdf->setX(20);
if($_SESSION["firma"] == "Ingenieurbüro Wagner")
@@ -489,7 +502,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
elseif ($rechnung["typ"] == "Angebot")
{
$currY += 5;
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety($currY);
$pdf->setX(20);
if($rechnung["anrede1"] || $rechnung["anrede2"])
@@ -509,7 +522,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
if (rtrim($rechnung["intro"])!="" )
{
$currY += 5;
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety($currY);
$pdf->setX(20);
if($rechnung["typ"] == "Brief")
@@ -553,7 +566,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->setX(20);
$newcurrY=3;
$newpdf->setY($newcurrY);
$newpdf->SetFont('Times','',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->setX(20);
$newpdf->MultiCell(100-$mixedmwst*15,5,$artikel[0]["art"]["bezeichn"],0,'L',0,1);
$newpdf->setX(120-$mixedmwst*15);
@@ -568,7 +581,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->Cell(15,5,$artikel[0]["art"]["artmwst"]."%",0,0,'R');
}
$newpdf->setY($newcurrY+2);
$newpdf->SetFont('Times','',12);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
foreach($artikel[0]["eig"] as $eig)
{
$newpdf->Cell(100, 3, $eig["bezeichn"], 0, 1, "L", 0);
@@ -582,7 +595,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
}
//Table-HEAD
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->sety($pdf->GetY()+5);
$pdf->setX(20);
$pdf->Cell(100-$mixedmwst*15,5,'Bezeichnung',0,0,'L');
@@ -619,7 +632,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY = $newpdf->GetY();
if (($currY+$artheight > 255 && $artheight < 219) || ($art["art"]["pagebreak"] && !$wholetablebreak))
{
$newpdf->SetFont('Times','B',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$newpdf->Line(18 , $currY+4.3, 200, $currY+4.3);
$newpdf->setY($currY+7);
$newpdf->setX(130-$mixedmwst*15);
@@ -632,7 +645,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->AddPage("P");
//Table-re-HEAD
$currY = $pdf->GetY();
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20);
$pdf->Cell(100-$mixedmwst*15,5,'Bezeichnung',0,0,'L');
$pdf->setX(120-$mixedmwst*15);
@@ -651,7 +664,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY = $pdf->GetY();
$newpdf->SetFont('Times','',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
}
$currY = $newpdf->GetY();
}
@@ -671,7 +684,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY= $newpdf->GetY()+5;
$newpdf->setY($currY);
$newpdf->SetFont('Times','',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->setX(120-$mixedmwst*15);
$newpdf->Cell(15,5,number_significant($art["art"]["menge"], 3)." ".$art["art"]["einheit"],0,0,'C');
$newpdf->setX(135-$mixedmwst*15);
@@ -689,7 +702,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
}
if($art["art"]["rabatt"])
{
$newpdf->SetFont('Times','I',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'I',14);
$newpdf->setX(110-$mixedmwst*15);
if(!$art["art"]["rabatttyp"])
$newpdf->Cell(100,5,"Abzüglich ".$art["art"]["rabatt"]."% Rabatt",0,0,'L');
@@ -707,10 +720,10 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->setY($currY);
$newpdf->setX(20);
$newpdf->SetFont('Times','B',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$newpdf->MultiCell(90-$mixedmwst*15,5,$art["art"]["bezeichn"],0,'L',0,1);
$currY = $newpdf->GetY();
$newpdf->SetFont('Times','',12);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
foreach($art["eig"] as $eig)
{
if($eig["einheit"] == "keine")
@@ -728,7 +741,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY= $newpdf->GetY()+3;
$newpdf->setY($currY);
$newpdf->SetFont('Times','',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->setX(120-$mixedmwst*15);
$newpdf->Cell(15,5,number_significant($art["art"]["menge"], 3)." ".$art["art"]["einheit"],0,0,'C');
$newpdf->setX(135-$mixedmwst*15);
@@ -743,7 +756,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->Ln();
if($art["art"]["rabatt"])
{
$newpdf->SetFont('Times','I',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'I',14);
$newpdf->setX(110-$mixedmwst*15);
if(!$art["art"]["rabatttyp"])
$newpdf->Cell(100,5,"Abzüglich ".$art["art"]["rabatt"]."% Rabatt",0,0,'L');
@@ -761,10 +774,10 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->setY($currY);
$newpdf->setX(25);
$newpdf->SetFont('Times','',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->MultiCell(85-$mixedmwst*15,5,"(Optional: " .$art["art"]["bezeichn"].")",0,'L',0,1);
$currY = $newpdf->GetY();
$newpdf->SetFont('Times','',12);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
foreach($art["eig"] as $eig)
{
if($eig["einheit"] == "keine")
@@ -780,7 +793,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY= $newpdf->GetY()+3;
$newpdf->setY($currY);
$newpdf->SetFont('Times','',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->setX(120-$mixedmwst*15);
$newpdf->Cell(15,5,number_significant($art["art"]["menge"], 3)." ".$art["art"]["einheit"],0,0,'C');
$newpdf->setX(135-$mixedmwst*15);
@@ -796,7 +809,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
if($art["art"]["rabatt"])
{
$newpdf->SetFont('Times','I',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'I',14);
$newpdf->setX(110-$mixedmwst*15);
if(!$art["art"]["rabatttyp"])
$newpdf->Cell(100,5,"Abzüglich ".$art["art"]["rabatt"]."% Rabatt",0,0,'L');
@@ -814,10 +827,10 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->setY($currY);
$newpdf->setX(25);
$newpdf->SetFont('Times','',14);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->MultiCell(85-$mixedmwst*15,5,"(Alternativ: " .$art["art"]["bezeichn"].")",0,'L',0,1);
$currY = $newpdf->GetY();
$newpdf->SetFont('Times','',12);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
foreach($art["eig"] as $eig)
{
if($eig["einheit"] == "keine")
@@ -837,7 +850,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
{
$currY = $pdf->GetY();
//Endbetrag
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->Line(18 , $currY+2, 200, $currY+2);
$pdf->setY($currY+2);
@@ -874,7 +887,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$pdf->Cell(30,6,number_format($ubertr_all,2,",",".")." ".$wahrung,0,1,'R');
$currY=$pdf->GetY()+10;
$pdf->setY($currY);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setX(20);
$currY=$currY;
}
@@ -883,7 +896,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
{
$currY = $pdf->GetY();
//Endbetrag
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->Line(18 , $currY+2, 200, $currY+2);
$pdf->setY($currY+2);
$pdf->setX(130-$mixedmwst*15);
@@ -936,7 +949,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$pdf->Cell(30,6,number_format($ubertr_all,2,",",".")." ".$wahrung,0,1,'R');
$currY=$pdf->GetY()+10;
$pdf->setY($currY);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setX(20);
$currY=$currY;
}
@@ -978,7 +991,7 @@ function makeEndPage($pdf,$rechnung,$gesamtpreis,$ajax)
}
if (rtrim($rechnung["outro"]) != "")
{
$newpdf->SetFont('Times','',12);
$newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$newpdf->setX(20);
$newpdf->MultiCell(0,5,rtrim($rechnung["outro"]),0,'L',0);
//ENDE!!
@@ -1121,9 +1134,9 @@ function savePDF($pdf,$PDFpath)
if (preg_match("=^\.=", $file))
continue; # ., .. und versteckte Dateien (.gitkeep) ignorieren
elseif(is_file($PDFpathpart.$file))
{ #Dateien prüfen, und löschen, wenn älter als $delFile - Minuten
{ #Dateien löschen, wenn älter als PDF_TEMP_MAX_ALTER
$lastTime = ceil((time() - filemtime($PDFpathpart.$file)));
if($lastTime > 20){
if($lastTime > PDF_TEMP_MAX_ALTER){
unlink($PDFpathpart.$file);
}
}
@@ -1144,27 +1157,27 @@ function makeImageFromPDF($PDFpath)
$handle=opendir($PDFpathpart);
while ($file = readdir($handle))
{
if (preg_match("=^\.{1,2}$=", $file))
continue; # . und .. Dateien ignorieren
if (preg_match("=^\.=", $file))
continue; # ., .. und versteckte Dateien (.gitkeep) ignorieren
if (is_dir($PDFpathpart.$file))
{
$lastTime = ceil((time() - filemtime($PDFpathpart.$file)));
if($lastTime > 20){
if($lastTime > PDF_TEMP_MAX_ALTER){
rrmdir($PDFpathpart.$file."/");
}
}
else
{ #Dateien prüfen, und löschen, wenn älter als $delFile - Minuten
{ #Dateien löschen, wenn älter als PDF_TEMP_MAX_ALTER
$lastTime = ceil((time() - filemtime($PDFpathpart.$file)));
if($lastTime > 20){
if($lastTime > PDF_TEMP_MAX_ALTER){
unlink($PDFpathpart.$file);
}
}
}
mkdir(dirname($PDFpath)."/".basename($PDFpath,".pdf")."/");
//exec('');
exec("export PATH=\"/opt/bin\";/opt/bin/convert $PDFpath ".dirname($PDFpath)."/".basename($PDFpath,".pdf")."/".basename($PDFpath,".pdf").".png");
exec("export PATH=\"/opt/bin\";/opt/bin/convert ".escapeshellarg($PDFpath)." ".escapeshellarg(dirname($PDFpath)."/".basename($PDFpath,".pdf")."/".basename($PDFpath,".pdf").".png"));
$i="0";
$ret = "";
if(is_file(dirname($PDFpath)."/".basename($PDFpath,".pdf")."/".basename($PDFpath,".pdf").".png"))
@@ -1202,24 +1215,24 @@ function makezettel($pdf,$termine,$anfahrt,$googleadressen='')
}
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Times','',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$pdf->setY(20);
$pdf->setX(25);
$pdf->MultiCell(85,0,str_replace("<br />","\n",$adresse["adresse"]),0,"L",0);
$pdf->Ln(10);
$pdf->SetFont('Times','BU',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'BU',14);
$pdf->Cell(0,5,strtoupper($termin["typ"])." - ".$termin["head"],0,1,"C",0);
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
//$pdf->Line(35,$pdf->GetY(),180,$pdf->GetY());
$notespos = $pdf->GetY();
$pdf->setY(20);
$pdf->Cell(0,5,date("d.m.Y, H:i",strtotime($termin["termtime"]))." Uhr",0,1,"R",0);
$pdf->Cell(0,5,"(".$dauer." geplant)",0,1,"R",0);
$pdf->SetY($notespos);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->MultiCell(0,0,$termin["text"],0,"C",0);
$pdf->Ln();
$pdf->SetFont('Times','B',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',16);
$pdf->Cell(0,5,"Notizen:",0,1,"C",0);
$pdf->Ln(12);
$pdf->SetDrawColor(100,100,100);
@@ -1261,17 +1274,17 @@ function makesingleterminpage($pdf,$termin,$adresse,$telnrn,$anfahrt,$googleadre
$mitarbeiter .= ", ".$termin["uservname4"]." ".$termin["usernname4"];
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Times','',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$pdf->setY(20);
$pdf->setX(25);
$pdf->MultiCell(85,0,str_replace("<br />","\n",$adresse["adresse"]),0,"L",0);
$pdf->SetFont('Times','B',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',12);
$pdf->ln(5);
$pdf->MultiCell(0,0,$telnrn,0,"L",0);
$pdf->Ln(10);
$pdf->SetFont('Times','BU',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'BU',16);
$pdf->Cell(0,5,strtoupper($termin["typ"])." - ".$termin["head"],0,1,"C",0);
$pdf->SetFont('Times','B',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',16);
//$pdf->Line(35,$pdf->GetY(),180,$pdf->GetY());
$notespos = $pdf->GetY();
$pdf->setY(10);
@@ -1279,10 +1292,10 @@ function makesingleterminpage($pdf,$termin,$adresse,$telnrn,$anfahrt,$googleadre
$pdf->Cell(0,5,"(".$dauer." geplant)",0,1,"R",0);
$pdf->MultiCell(0,0,"(".$mitarbeiter.")",0,"R",0);
$pdf->SetY($notespos);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->MultiCell(0,0,$termin["text"],0,"C",0);
$pdf->Ln();
$pdf->SetFont('Times','B',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',16);
$pdf->Cell(0,5,"Notizen:",0,1,"C",0);
$pdf->Ln(12);
$pdf->SetDrawColor(100,100,100);
@@ -1293,7 +1306,7 @@ function makesingleterminpage($pdf,$termin,$adresse,$telnrn,$anfahrt,$googleadre
$pdf->line(10,$pdf->GetY(),200,$pdf->GetY());
$pdf->Ln(12);
}
$pdf->SetFont('Times','',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',16);
$pdf->Cell(0,5,"Ankunft:______________________ Abfahrt:_____________________",0,1,"L",0);
$pdf->Ln(12);
$pdf->Cell(0,5,"Unterschrift Kunde:_____________________",0,1,"C",0);
@@ -1312,7 +1325,7 @@ function makesingleterminpage($pdf,$termin,$adresse,$telnrn,$anfahrt,$googleadre
$pdf->line(120,$pdf->GetY(),200,$pdf->GetY());
$pdf->Ln(12);
}
$pdf->SetFont('Times','',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',16);
$pdf->Cell(0,5,"Ankunft:______________________ Abfahrt:_____________________",0,1,"L",0);
$pdf->Ln(10);
$pdf->Cell(0,5,"Unterschrift Kunde:_____________________",0,1,"C",0);
@@ -1320,9 +1333,10 @@ function makesingleterminpage($pdf,$termin,$adresse,$telnrn,$anfahrt,$googleadre
}
}
/* Die Daten eines Termins fuer den Terminzettel */
function maketerminarray($dbconn,$id)
{
$qry = mysqli_query($dbconn,"SELECT head, user, text, termin.id, termtime, termtyp.typ AS typ, termdauer, str, ort, hnr, plz, partner_id, land,
$res = db_zeile($dbconn,"SELECT head, user, text, termin.id, termtime, termtyp.typ AS typ, termdauer, str, ort, hnr, plz, partner_id, land,
adresse.vname AS vname, adresse.nname AS nname, titel_id, titel2_id, anrede_id, anrede2_id, vname2, nname2, zusatz,
user.vname as uservname, user.nname as usernname,
user2.vname as uservname2, user2.nname as usernname2,
@@ -1338,72 +1352,38 @@ function maketerminarray($dbconn,$id)
LEFT JOIN user AS user2 ON termin.user2 = user2.id
LEFT JOIN user AS user3 ON termin.user3 = user3.id
LEFT JOIN user AS user4 ON termin.user4 = user4.id
WHERE termin.id = $id") or $err = error("Fehler beim ermitteln der Termindaten<br />".mysqli_error($dbconn));
$res = mysqli_fetch_assoc($qry);
$qry = mysqli_query($dbconn,"SELECT anrede
FROM anrede
WHERE id = '".$res["anrede_id"]."'") or $err = error("Fehler beim ermitteln der Anrede<br />".mysqli_error($dbconn));
$res2 = mysqli_fetch_assoc($qry);
$res["anrede"] = $res2["anrede"];
$qry = mysqli_query($dbconn,"SELECT anrede
FROM anrede
WHERE id = '".$res["anrede2_id"]."'") or $err = error("Fehler beim ermitteln der Anrede2<br />".mysqli_error($dbconn));
$res2 = mysqli_fetch_assoc($qry);
$res["anrede2"] = $res2["anrede"];
$qry = mysqli_query($dbconn,"SELECT titel
FROM titel
WHERE id = '".$res["titel_id"]."'") or $err = error("Fehler beim ermitteln des Titels<br />".mysqli_error($dbconn));
$res2 = mysqli_fetch_assoc($qry);
$res["titel"] = $res2["titel"];
$qry = mysqli_query($dbconn,"SELECT titel
FROM titel
WHERE id = '".$res["titel2_id"]."'") or $err = error("Fehler beim ermitteln des Titel2<br />".mysqli_error($dbconn));
$res2 = mysqli_fetch_assoc($qry);
$res["titel2"] = $res2["titel"];
WHERE termin.id = ?", array($id));
if(!$res)
{
error("Fehler beim ermitteln der Termindaten<br />".mysqli_error($dbconn));
return array();
}
$anrs = db_zuordnung($dbconn, "SELECT id, anrede FROM anrede") ?: array();
$titels = db_zuordnung($dbconn, "SELECT id, titel FROM titel") ?: array();
$res["anrede"] = $anrs[$res["anrede_id"]] ?? "";
$res["anrede2"] = $anrs[$res["anrede2_id"]] ?? "";
$res["titel"] = $titels[$res["titel_id"]] ?? "";
$res["titel2"] = $titels[$res["titel2_id"]] ?? "";
return $res;
}
function maketerminadresse($dbconn,$termid)
{
$qry=mysqli_query($dbconn,"SELECT nname, titel_id, titel2_id, vname, nname2, vname2, str, ort, plz, hnr, land, firma, anrede_id, anrede2_id, partner_id, adresse_id
FROM termin
JOIN adresse ON termin.adresse_id = adresse.id
JOIN strasse ON strasse.id = str_id
$adresse = db_zeile($dbconn,"SELECT nname, titel_id, titel2_id, vname, nname2, vname2, str, ort, plz, hnr, land, firma, anrede_id, anrede2_id, partner_id, adresse_id
FROM termin
JOIN adresse ON termin.adresse_id = adresse.id
JOIN strasse ON strasse.id = str_id
JOIN ort ON ort.id = ort_id JOIN land ON land.id = land_id
WHERE termin.id = $termid") or $err= error("Fehler beim ermitteln der Adressdaten<br />".mysqli_error($dbconn));
$adresse = mysqli_fetch_assoc($qry);
$qry = mysqli_query($dbconn,"SELECT * FROM anrede");
while($res=mysqli_fetch_assoc($qry))
WHERE termin.id = ?", array($termid));
if(!$adresse)
{
$anrs[$res["id"]] = $res["anrede"];
error("Fehler beim ermitteln der Adressdaten<br />".mysqli_error($dbconn));
$adresse = array();
}
$qry = mysqli_query($dbconn,"SELECT * FROM titel");
while($res=mysqli_fetch_assoc($qry))
{
$titels[$res["id"]] = $res["titel"];
}
define("ADRFIELD_FIRMAANR", 0);
define("ADRFIELD_FIRMA", 1);
define("ADRFIELD_ANR1", 2);
define("ADRFIELD_TITEL1", 3);
define("ADRFIELD_NAME1", 4);
define("ADRFIELD_ANR2", 5);
define("ADRFIELD_TITEL2", 6);
define("ADRFIELD_NAME2", 7);
define("ADRFIELD_STR", 8);
define("ADRFIELD_ORT", 9);
define("ADRFIELD_LAND", 10);
// ADRFIELD_* stehen in incs/constants.php
$anrs = db_zuordnung($dbconn, "SELECT id, anrede FROM anrede") ?: array();
$titels = db_zuordnung($dbconn, "SELECT id, titel FROM titel") ?: array();
$adressfields = "";
if($adresse["firma"])
@@ -1788,50 +1768,52 @@ define("ADRFIELD_LAND", 10);
function maketelnrn($dbconn,$termid)
{
$qry=mysqli_query($dbconn,"SELECT partner_id, adresse_id
FROM termin
$telstr = "";
$adresse = db_zeile($dbconn,"SELECT partner_id, adresse_id
FROM termin
JOIN adresse ON termin.adresse_id = adresse.id
WHERE termin.id = $termid") or $err= error("Fehler beim ermitteln der Adressdaten<br />".mysqli_error($dbconn));
if($adresse = mysqli_fetch_assoc($qry))
WHERE termin.id = ?", array($termid));
if($adresse)
{
$qry = mysqli_query($dbconn,"SELECT name,typ,tel.id,nr,ort,ortsteil,plz,vwahl FROM tel LEFT JOIN teltyp ON typ_id = teltyp.id LEFT JOIN ort ON ort_id = ort.id WHERE partner_id='".$adresse["partner_id"]."' AND (tel.adresse_id = 0 OR tel.adresse_id = '".$adresse["adresse_id"]."') ORDER BY typ_id ASC");
while($res=mysqli_fetch_assoc($qry))
{
$telstr .= trim($res["typ"]).": "." (".$res["vwahl"].") ".$res["nr"]." in ".$res["ort"]."(".$res["name"].")\n";
}
$qry = mysqli_query($dbconn,"SELECT kontakt,typ FROM kontakt LEFT JOIN kontakttyp ON typ_id = kontakttyp.id WHERE partner_id='".$adresse["partner_id"]."' ORDER BY typ_id ASC");
while($res=mysqli_fetch_assoc($qry))
{
$telstr .= trim($res["typ"]).": ".$res["kontakt"]."\n";
}
$zeilen = db_zeilen($dbconn,"SELECT name, typ, tel.id, nr, ort, ortsteil, plz, vwahl FROM tel
LEFT JOIN teltyp ON tel.typ_id = teltyp.id
LEFT JOIN ort ON tel.ort_id = ort.id
WHERE partner_id = ? AND (tel.adresse_id = 0 OR tel.adresse_id = ?)
ORDER BY tel.typ_id ASC", array($adresse["partner_id"], $adresse["adresse_id"]));
foreach((array)$zeilen as $res)
$telstr .= trim($res["typ"]).": "." (".$res["vwahl"].") ".$res["nr"]." in ".$res["ort"]."(".$res["name"].")\\n";
$zeilen = db_zeilen($dbconn,"SELECT kontakt, typ FROM kontakt
LEFT JOIN kontakttyp ON kontakt.typ_id = kontakttyp.id
WHERE partner_id = ? ORDER BY kontakt.typ_id ASC", array($adresse["partner_id"]));
foreach((array)$zeilen as $res)
$telstr .= trim($res["typ"]).": ".$res["kontakt"]."\\n";
}
return $telstr;
}
function makeadrtelnrn($dbconn,$partnerid)
{
$qry = mysqli_query($dbconn,"SELECT name,typ,tel.id,nr,ort,ortsteil,plz,vwahl FROM tel LEFT JOIN teltyp ON typ_id = teltyp.id LEFT JOIN ort ON ort_id = ort.id WHERE partner_id='".$partnerid."' ORDER BY typ_id ASC");
while($res=mysqli_fetch_assoc($qry))
{
$telstr .= trim($res["typ"]).": "."(".$res["vwahl"].")".$res["nr"].",".$res["ort"]."(".$res["name"].")\n";
}
$telstr = "";
$zeilen = db_zeilen($dbconn,"SELECT name, typ, tel.id, nr, ort, ortsteil, plz, vwahl FROM tel
LEFT JOIN teltyp ON tel.typ_id = teltyp.id
LEFT JOIN ort ON tel.ort_id = ort.id
WHERE partner_id = ? ORDER BY tel.typ_id ASC", array($partnerid));
foreach((array)$zeilen as $res)
$telstr .= trim($res["typ"]).": "."(".$res["vwahl"].")".$res["nr"].",".$res["ort"]."(".$res["name"].")\\n";
return $telstr;
}
function makegooglestring($dbconn,$termid)
{
$qry=mysqli_query($dbconn,"SELECT nname, titel_id, titel2_id, vname, nname2, vname2, str, ort, plz, hnr, land, firma, anrede_id, anrede2_id
FROM termin
JOIN adresse ON termin.adresse_id = adresse.id
JOIN strasse ON strasse.id = str_id
$googlestr = "";
$adresse = db_zeile($dbconn,"SELECT nname, titel_id, titel2_id, vname, nname2, vname2, str, ort, plz, hnr, land, firma, anrede_id, anrede2_id
FROM termin
JOIN adresse ON termin.adresse_id = adresse.id
JOIN strasse ON strasse.id = str_id
JOIN ort ON ort.id = ort_id JOIN land ON land.id = land_id
WHERE termin.id = $termid") or $err= error("Fehler beim ermitteln der Adressdaten<br />".mysqli_error($dbconn));
if($adresse = mysqli_fetch_assoc($qry))
WHERE termin.id = ?", array($termid));
if($adresse)
{
$googlestr = "http://maps.googleapis.com/maps/api/staticmap";
$googlestr .= "?markers=color:blue|label:A|";
@@ -1852,7 +1834,7 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
else
$picpath = "./pics/";
$pdf->SetFont('helvetica','B',6);
$pdf->SetFont(PDF_SCHRIFT_SANS,'B',6);
$pdf->setY(35);
$pdf->setX(25);
@@ -1872,11 +1854,11 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
$pdf->Cell(0,3,'LSG OBERALLGÄU e.V. PHILIPP WAGNER IM ENGELFELD 13 87509 IMMENSTADT TEL.: 0176/21938558',0,0,'L');
}
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setY(40);
$pdf->setX(25);
$pdf->MultiCell(85,0,str_replace("<br />","\n",$adresse["adresse"]),0,"L",0);
$pdf->SetFont('Times','B',10);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',10);
$tmpY = $pdf->getY();
$pdf->setY(40);
$pdf->setX(110);
@@ -1885,13 +1867,13 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
$tmpY = $pdf->getY();
$pdf->setY($tmpY);
$pdf->Ln(5);
$pdf->SetFont('Times','BU',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'BU',16);
$pdf->Cell(0,5,$project["name"],0,1,"C",0);
$pdf->SetFont('Times','B',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',16);
$pdf->Ln(12);
//Table-re-HEAD
$currY = $pdf->GetY();
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20);
$pdf->Cell(135,5,'Arbeit',0,0,'C');
$pdf->setX(155);
@@ -1906,7 +1888,7 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
$currY = $pdf->GetY();
$pdf->SetDrawColor(100,100,100);
//while($pdf->GetY() < 260)
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$gesstd = 0;
foreach($work as $workline)
{
@@ -1928,7 +1910,7 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
$pdf->AddPage("P");
//Table-re-HEAD
$currY = $pdf->GetY();
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20);
$pdf->Cell(135,5,'Arbeit',0,0,'C');
$pdf->setX(155);
@@ -1939,13 +1921,13 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
$pdf->Line(18 , $pdf->GetY(), 200, $pdf->GetY());
$pdf->Line(180 , $pdf->GetY()-5, 180, 270);
$pdf->Line(155 , $pdf->GetY()-5, 155, 270);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
}
}
$pdf->Line(18 , $pdf->GetY()+1, 200, $pdf->GetY());
$pdf->Line(18 , $pdf->GetY()+2, 200, $pdf->GetY()+1);
$pdf->SetY($pdf->GetY()+3);
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20);
$pdf->Cell(135,5,'Arbeitsstunden Summe:',0,0,'C');
$pdf->setX(155);
@@ -1961,7 +1943,7 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
else
$picpath = "./pics/";
$pdf->SetFont('helvetica','B',6);
$pdf->SetFont(PDF_SCHRIFT_SANS,'B',6);
$pdf->setY(35);
$pdf->setX(25);
@@ -1981,11 +1963,11 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
$pdf->Cell(0,3,'LSG OBERALLGÄU e.V. PHILIPP WAGNER IM ENGELFELD 13 87509 IMMENSTADT TEL.: 0176/21938558',0,0,'L');
}
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setY(40);
$pdf->setX(25);
$pdf->MultiCell(85,0,str_replace("<br />","\n",$name),0,"L",0);
$pdf->SetFont('Times','B',10);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',10);
$tmpY = $pdf->getY();
$pdf->setY(40);
$pdf->setX(110);
@@ -1994,13 +1976,13 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
$tmpY = $pdf->getY();
$pdf->setY($tmpY);
$pdf->Ln(5);
$pdf->SetFont('Times','BU',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'BU',16);
$pdf->Cell(0,5,$project["name"],0,1,"C",0);
$pdf->SetFont('Times','B',16);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',16);
$pdf->Ln(12);
//Table-re-HEAD
$currY = $pdf->GetY();
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20);
$pdf->Cell(35,5,'Kommen',0,0,'C');
$pdf->setX(55);
@@ -2017,7 +1999,7 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
$currY = $pdf->GetY();
$pdf->SetDrawColor(100,100,100);
//while($pdf->GetY() < 260)
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$gesstd = 0;
foreach($zeiten as $zeit)
{
@@ -2040,7 +2022,7 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
$pdf->AddPage("P");
//Table-re-HEAD
$currY = $pdf->GetY();
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20);
$pdf->Cell(35,5,'Kommen',0,0,'C');
$pdf->setX(55);
@@ -2053,13 +2035,13 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
$pdf->Line(18 , $pdf->GetY(), 200, $pdf->GetY());
$pdf->Line(180 , $pdf->GetY()-5, 180, 270);
$pdf->Line(155 , $pdf->GetY()-5, 155, 270);
$pdf->SetFont('Times','',12);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
}
}
$pdf->Line(18 , $pdf->GetY()+1, 200, $pdf->GetY());
$pdf->Line(18 , $pdf->GetY()+2, 200, $pdf->GetY()+1);
$pdf->SetY($pdf->GetY()+3);
$pdf->SetFont('Times','B',14);
$pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20);
$pdf->Cell(35,5,'Arbeitsstunden Summe:',0,0,'C');
$pdf->setX(55);
+437 -667
View File
File diff suppressed because it is too large Load Diff
+1149 -685
View File
File diff suppressed because it is too large Load Diff
+569
View File
@@ -0,0 +1,569 @@
<?php
/*
* Termine: Kalenderansicht, Terminliste, Anlegen, Ändern und Löschen.
*
* Ein Termin über mehrere Tage wird als Reihe einzelner Zeilen gespeichert,
* die alle dasselbe `main_id` tragen - die id der ersten Zeile. Der Kalender
* zeigt die Zeilen einzeln, die Liste fasst sie über `main_id` zusammen.
*
* Urlaub und Krankheit sind Termine ohne Kunden. Ihre Typ-ids stehen seit
* jeher fest im Code (auch in `incs/users.php` bei der Urlaubsberechnung und
* in `templates/addtermin.tpl`).
*/
require_once(__DIR__."/db.php");
require_once(__DIR__."/saveNchange.php");
define("TERMTYP_URLAUB", 0);
define("TERMTYP_KRANKHEIT", 5);
/* Ganztägige Termine bekommen diese Dauer; die Terminliste filtert darauf */
define("TERMIN_GANZTAG", "24:00:00");
/* Leerwerte der NOT-NULL-Spalten - der strikte Modus lehnt '' dort ab */
define("TERMIN_KEIN_DATUM", "0000-00-00 00:00:00");
define("TERMIN_KEINE_DAUER", "00:00:00");
/* Urlaub und Krankheit laufen immer über ganze Tage */
function terminIstGanztaegig($typ)
{
return $typ == TERMTYP_URLAUB || $typ == TERMTYP_KRANKHEIT;
}
/* ---------------------------------------------------------------------
* Formularwerte
* ------------------------------------------------------------------ */
/*
* Die Felder aus addtermin.tpl. `datetime_start` und `datetime_end` kommen
* in deutscher Schreibweise ("24.12.2026 um 09:30") und werden hier schon
* in das Datenbankformat gebracht.
*/
function terminFormularwerte()
{
return array(
"head" => formularText("head"),
"text" => formularText("text"),
"typ" => formularGanzzahl("typ"),
"done" => formularGanzzahl("done") ? 1 : 0,
"user" => formularGanzzahl("user"),
"user2" => formularGanzzahl("user2"),
"user3" => formularGanzzahl("user3"),
"user4" => formularGanzzahl("user4"),
"folge" => formularGanzzahl("folge") ? 1 : 0,
"folgetyp" => formularGanzzahl("folgetyp"),
"folgedays" => formularGanzzahl("folgedays"),
"start" => dispdate_to_mysql_date(formularText("datetime_start"), 0),
"ende" => dispdate_to_mysql_date(formularText("datetime_end"), 1),
);
}
/*
* Verteilt einen Termin auf Tage. Länger als zwölf Stunden oder Urlaub und
* Krankheit werden zu ganzen Tagen: Rückgabe ist
* array(erster Tag, Dauer je Tag, Anzahl Tage).
*/
function terminTageUndDauer($werte)
{
$start = $werte["start"];
$dauer = mysql_dauer($start, $werte["ende"]);
$stunden = (int)strtok($dauer, ":");
if($stunden <= 12 && !terminIstGanztaegig($werte["typ"]))
return array($start, $dauer, 1);
// ceil() rechnet mit der Stundenzahl, nicht mit dem ganzen Zeitstring
$tage = max(1, (int)ceil($stunden / 24));
if($start != TERMIN_KEIN_DATUM)
$start = substr($start, 0, 11)."00:00:00";
return array($start, TERMIN_GANZTAG, $tage);
}
/* Der $i-te Tag einer Terminreihe, ohne Datum bleibt es ohne Datum */
function terminTag($start, $i)
{
if($start == TERMIN_KEIN_DATUM)
return TERMIN_KEIN_DATUM;
return date("Y-m-d H:i:s", strtotime("+".$i." day", strtotime($start)));
}
/* ---------------------------------------------------------------------
* Überschneidungen
* ------------------------------------------------------------------ */
/*
* Sucht einen Termin, bei dem $benutzer schon zwischen $start und $ende
* eingetragen ist. $ausserMain schließt die gerade bearbeitete Reihe aus.
* Gibt die id des kollidierenden Termins zurück, sonst null (false bei
* Fehlern).
*/
function terminUeberschneidung($dbconn, $benutzer, $start, $ende, $ausserMain)
{
if(!$benutzer || $start == TERMIN_KEIN_DATUM)
return null;
$params = array(TERMIN_KEIN_DATUM, $benutzer, $benutzer, $benutzer, $benutzer);
// eine main_id von 0 gibt es nur bei Altdaten, dann darf nichts ausgenommen werden
$eigene = "";
if($ausserMain > 0)
{
$eigene = " AND main_id != ?";
$params[] = (int)$ausserMain;
}
array_push($params, $start, $start, $ende, $ende, $start, $ende);
$sql = "SELECT id FROM
(SELECT id, main_id, user, user2, user3, user4, termtime,
DATE_ADD(termtime, INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE) AS termend
FROM termin WHERE termtime != ? AND done = 0) AS belegt
WHERE (user = ? OR user2 = ? OR user3 = ? OR user4 = ?)$eigene
AND ((? >= termtime AND ? < termend)
OR (? > termtime AND ? <= termend)
OR (? <= termtime AND ? >= termend))
LIMIT 1";
return db_wert($dbconn, $sql, $params);
}
/*
* Prüft alle vier Mitarbeiter eines Termins für jeden Tag der Reihe.
* Rückgabe 0, wenn nichts kollidiert, sonst die Fehlermeldung.
*/
function pruefeUeberschneidungen($dbconn, $werte, $start, $dauer, $tage, $ausserMain)
{
foreach(range(0, $tage - 1) as $i)
{
$tagStart = terminTag($start, $i);
$tagEnde = dauer_to_date($tagStart, $dauer);
foreach(array("user", "user2", "user3", "user4") as $feld)
{
$treffer = terminUeberschneidung($dbconn, $werte[$feld], $tagStart, $tagEnde, $ausserMain);
if($treffer === false)
return error("Fehler beim überprüfen von Überlappungen:<br />".mysqli_error($dbconn));
if($treffer !== null)
return error("Dieser Mitarbeiter hat zu der Zeit bereits einen Termin, er kann nicht an zwei Orten gleichzeitig sein.");
}
}
return 0;
}
/* ---------------------------------------------------------------------
* Speichern
* ------------------------------------------------------------------ */
/*
* Der Hauptsatz der Reihe, zu der die Zeile $id gehoert. Altdaten ohne
* main_id bestehen nur aus sich selbst. null, wenn es die Zeile nicht gibt,
* false bei Fehlern.
*/
function terminHauptsatz($dbconn, $id)
{
$mainId = db_wert($dbconn, "SELECT main_id FROM termin WHERE id = ?", array($id));
if($mainId === false || $mainId === null)
return $mainId;
return (int)$mainId > 0 ? (int)$mainId : (int)$id;
}
/*
* Legt einen Folgetermin an: gleicher Kopf und dieselben Mitarbeiter, aber
* ohne Datum und mit einem Wiedervorlagedatum in $tage Tagen. Gibt dessen
* id zurück oder false.
*/
function legeFolgeterminAn($dbconn, $werte, $adressid)
{
$sql = "INSERT INTO termin SET head = ?, text = '', adresse_id = ?, typ = ?,
changetime = NOW(), datetime = NOW(), done = 0,
termtime = ?, termdauer = ?, followed_by = 0,
user = ?, user2 = ?, user3 = ?, user4 = ?, changeuser = ?,
act_date = DATE_ADD(CURDATE(), INTERVAL ? DAY)";
$params = array($werte["head"], $adressid, $werte["folgetyp"],
TERMIN_KEIN_DATUM, TERMIN_KEINE_DAUER,
$werte["user"], $werte["user2"], $werte["user3"], $werte["user4"],
$_SESSION["user"], $werte["folgedays"]);
if(!db_abfrage($dbconn, $sql, $params))
{
error("Fehler beim anlegen des Folgetermins:<br />".mysqli_error($dbconn));
return false;
}
$id = mysqli_insert_id($dbconn);
// Ein Termin ohne eigene Reihe ist sein eigener Hauptsatz
db_abfrage($dbconn, "UPDATE termin SET main_id = ? WHERE id = ?", array($id, $id));
if(saveLog($dbconn, db_sql_text($dbconn, $sql, $params)." [folgetermin, hat ID $id]",
"DELETE FROM termin WHERE id = $id", "anlegen"))
return false;
return $id;
}
/*
* Legt einen Termin an oder ändert ihn. $terminid ist die id der Reihe
* (0 = neu), $adressid die Kundenadresse (0 bei Urlaub und Krankheit).
*
* Wird aus einem eintägigen Termin ein mehrtägiger, wird die alte Reihe
* verworfen und neu angelegt - anders lässt sich die Reihe nicht umbauen.
*/
function speichereTermin($dbconn, $terminid, $adressid)
{
$werte = terminFormularwerte();
list($start, $dauer, $tage) = terminTageUndDauer($werte);
beginneSpeichern($dbconn);
$mainId = 0;
$alt = null;
if($terminid)
{
$mainId = terminHauptsatz($dbconn, $terminid);
if($mainId === false)
return beendeSpeichern($dbconn, error("Fehler beim ermitteln des Termins:<br />".mysqli_error($dbconn)));
if($mainId === null)
return beendeSpeichern($dbconn, error("Dieser Termin existiert nicht!"));
$alt = db_zeile($dbconn, "SELECT * FROM termin WHERE id = ?", array($mainId));
if($alt === false || !$alt)
return beendeSpeichern($dbconn, error("Dieser Termin existiert nicht!"));
/*
* Die Folgetage werden neu angelegt, der Hauptsatz bleibt stehen -
* so behaelt der Termin seine id, auch wenn aus einem Tag mehrere
* werden oder umgekehrt.
*/
db_abfrage($dbconn, "DELETE FROM termin WHERE main_id = ? AND id != ?", array($mainId, $mainId))
or $err = error("Konnte Nebentermine nicht löschen:<br />".mysqli_error($dbconn));
if(!empty($err))
return beendeSpeichern($dbconn, $err);
}
if(!$werte["done"])
{
$err = pruefeUeberschneidungen($dbconn, $werte, $start, $dauer, $tage, $mainId);
if($err)
return beendeSpeichern($dbconn, $err);
}
// Folgetermin nur einmal und nur, wenn der Termin gerade erledigt wird
$folgeId = $alt ? (int)$alt["followed_by"] : 0;
if($werte["done"] && $werte["folge"] && !$folgeId)
{
$folgeId = legeFolgeterminAn($dbconn, $werte, $adressid);
if($folgeId === false)
return beendeSpeichern($dbconn, 1);
}
$felder = array(
"head" => $werte["head"],
"text" => $werte["text"],
"adresse_id" => $adressid,
"typ" => $werte["typ"],
"done" => $werte["done"],
"termdauer" => $dauer,
"changeuser" => $_SESSION["user"],
"user" => $werte["user"],
"user2" => $werte["user2"],
"user3" => $werte["user3"],
"user4" => $werte["user4"],
"followed_by" => $folgeId,
);
$zuweisung = array();
foreach(array_keys($felder) as $spalte)
$zuweisung[] = "`$spalte` = ?";
$set = implode(", ", $zuweisung);
$err = 0;
// Tag 0 ist der Hauptsatz: beim Aendern bleibt er stehen, sonst entsteht er hier
if($mainId)
{
$sql = "UPDATE termin SET $set, termtime = ?, changetime = NOW() WHERE id = ?";
$params = array_merge(array_values($felder), array(terminTag($start, 0), $mainId));
if(!db_abfrage($dbconn, $sql, $params))
return beendeSpeichern($dbconn, error("Fehler beim ändern des Termins:<br />".mysqli_error($dbconn)));
$altWerte = array();
foreach(array_keys($felder) as $spalte)
$altWerte[] = $alt[$spalte];
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $params)." [termin change]",
db_sql_text($dbconn, $sql, array_merge($altWerte, array($alt["termtime"], $mainId))), "ändern");
}
else
{
$sql = "INSERT INTO termin SET $set, termtime = ?, changetime = NOW(), datetime = NOW()";
$params = array_merge(array_values($felder), array(terminTag($start, 0)));
if(!db_abfrage($dbconn, $sql, $params))
return beendeSpeichern($dbconn, error("Fehler beim anlegen des Termins:<br />".mysqli_error($dbconn)));
$mainId = mysqli_insert_id($dbconn);
db_abfrage($dbconn, "UPDATE termin SET main_id = ? WHERE id = ?", array($mainId, $mainId))
or $err = error("Fehler beim verknüpfen der Terminreihe:<br />".mysqli_error($dbconn));
if(!$err)
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $params)." [termin add, hat ID $mainId]",
"DELETE FROM termin WHERE id = $mainId", "anlegen");
}
// die weiteren Tage haengen als eigene Zeilen am Hauptsatz
// (range(1, 0) liefe rueckwaerts, deshalb eine normale Schleife)
for($i = 1; $i < $tage; $i++)
{
if($err)
break;
$sql = "INSERT INTO termin SET $set, termtime = ?, main_id = ?, changetime = NOW(), datetime = NOW()";
$params = array_merge(array_values($felder), array(terminTag($start, $i), $mainId));
if(!db_abfrage($dbconn, $sql, $params))
{
$err = error("Fehler beim anlegen des Termins:<br />".mysqli_error($dbconn));
break;
}
$id = mysqli_insert_id($dbconn);
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $params)." [termin add, hat ID $id]",
"DELETE FROM termin WHERE id = $id", "anlegen");
}
return beendeSpeichern($dbconn, $err);
}
/* Löscht eine Terminreihe samt Nebenzeilen */
function loescheTerminreihe($dbconn, $id)
{
beginneSpeichern($dbconn);
$err = 0;
$id = terminHauptsatz($dbconn, $id);
if($id === false)
return beendeSpeichern($dbconn, error("Fehler beim ermitteln des Termins:<br />".mysqli_error($dbconn)));
if($id === null)
return beendeSpeichern($dbconn, error("Dieser Termin existiert nicht!"));
$beschreibung = db_wert($dbconn, "SELECT head FROM termin WHERE id = ?", array($id));
// erst die Nebenzeilen, dann der Hauptsatz - sonst verliert main_id den Bezug
$sql = "DELETE FROM termin WHERE main_id = ? AND id != ?";
db_abfrage($dbconn, $sql, array($id, $id))
or $err = error("Konnte Nebentermine nicht löschen:<br />".mysqli_error($dbconn));
if(!$err)
{
$sql = "DELETE FROM termin WHERE id = ?";
db_abfrage($dbconn, $sql, array($id))
or $err = error("Konnte Haupttermin nicht löschen:<br />".mysqli_error($dbconn));
}
if(!$err)
$err = saveLog($dbconn, db_sql_text($dbconn, "DELETE FROM termin WHERE main_id = ?", array($id))." [$beschreibung]", "", "löschen");
return beendeSpeichern($dbconn, $err);
}
/* Markiert eine Terminreihe als erledigt ($erledigt = 1) oder offen (0) */
function setzeTerminErledigt($dbconn, $id, $erledigt)
{
$erledigt = $erledigt ? 1 : 0;
$id = terminHauptsatz($dbconn, $id);
if($id === false)
return error("Fehler beim ermitteln des Termins:<br />".mysqli_error($dbconn));
if($id === null)
return error("Dieser Termin existiert nicht!");
beginneSpeichern($dbconn);
$err = 0;
$sql = "UPDATE termin SET done = ?, changetime = NOW(), changeuser = ? WHERE main_id = ? OR id = ?";
$params = array($erledigt, $_SESSION["user"], $id, $id);
db_abfrage($dbconn, $sql, $params)
or $err = error("Konnte den Termin nicht umstellen:<br />".mysqli_error($dbconn));
if(!$err)
$err = saveLog($dbconn, db_sql_text($dbconn, $sql, $params)." [termin erledigt]", "", "ändern");
return beendeSpeichern($dbconn, $err);
}
/* ---------------------------------------------------------------------
* Lesen
* ------------------------------------------------------------------ */
/*
* Der Termin für das Formular: die Reihe zu einer Hauptsatz-id wird zu
* einem Eintrag zusammengefasst, Anfang und Gesamtdauer eingeschlossen.
*/
function terminZumBearbeiten($dbconn, $id)
{
$res = db_zeile($dbconn, "SELECT MIN(termtime) AS termtime,
SEC_TO_TIME(SUM(TIME_TO_SEC(termdauer))) AS termdauer,
head, followed_by, MIN(id) AS id, main_id, typ, adresse_id,
done, user, user2, user3, user4, changeuser, act_date, text
FROM termin WHERE main_id = ? OR (id = ? AND main_id = 0)
GROUP BY main_id", array($id, $id));
if($res === false)
{
error("Fehler beim ermitteln des Termins:<br />".mysqli_error($dbconn));
return null;
}
if(!$res)
return null;
if($res["followed_by"] > 0)
{
$folge = db_zeile($dbconn, "SELECT DATE_FORMAT(act_date,'%Y-%m-%d') AS act_date, typ FROM termin WHERE id = ?",
array($res["followed_by"]));
if($folge)
{
$res["folgetyp"] = $folge["typ"];
$tage = (strtotime($folge["act_date"]) - strtotime(date("Y-m-d"))) / 86400;
if($tage > 0)
{
$res["folge"] = 1;
$res["folgedays"] = (int)$tage;
}
}
}
$res["termend"] = dauer_to_date($res["termtime"], $res["termdauer"]);
if(str_contains($res["termend"], "00:00:00"))
$res["termend"] = date("Y-m-d H:i:s", strtotime("-1 minutes", strtotime($res["termend"])));
return $res;
}
/* Die Auswahllisten des Terminformulars */
function terminAuswahllisten($dbconn, $smarty)
{
list($typids, $typs) = auswahlliste($dbconn, "SELECT id, typ FROM termtyp WHERE id > 0");
$smarty->assign("typids", $typids);
$smarty->assign("typs", $typs);
$benutzer = db_zeilen($dbconn, "SELECT id, vname, nname FROM user WHERE blocked = 0 AND id > 0 ORDER BY nname, vname");
$ids = array();
$namen = array();
foreach((array)$benutzer as $b)
{
$ids[] = $b["id"];
$namen[] = trim($b["vname"]." ".$b["nname"]);
}
$smarty->assign("userids", $ids);
$smarty->assign("users", $namen);
$ids[] = 0;
$namen[] = "Keiner";
$smarty->assign("optuserids", $ids);
$smarty->assign("optusers", $namen);
$smarty->assign("days", range(0, 40));
list($urlaubIds, $urlaubNamen) = auswahlliste($dbconn, "SELECT id, typ FROM termtyp WHERE typ = 'Urlaub' OR typ = 'Krankheit'");
$smarty->assign("vac_types_id", $urlaubIds);
$smarty->assign("vac_types_name", $urlaubNamen);
}
/* Die Adresse, an der ein Termin stattfindet - leer, wenn es keine gibt */
function terminAdresse($dbconn, $adressid)
{
$res = db_zeile($dbconn, "SELECT plz, ortsteil, ort, str, hnr, vname, partner_id, nname, vname2, nname2,
firma, adresse.id, land, anrede_id, titel_id, anrede2_id, titel2_id
FROM adresse
LEFT JOIN strasse ON str_id = strasse.id
LEFT JOIN ort ON ort_id = ort.id
LEFT JOIN land ON land_id = land.id
WHERE adresse.id = ?", array($adressid));
if($res === false)
{
error("Fehler beim abrufen der Daten:<br />".mysqli_error($dbconn));
return array();
}
return $res ? $res : array();
}
/* ---------------------------------------------------------------------
* Kalender
* ------------------------------------------------------------------ */
/* Deutsche Wochentagsnamen - unabhängig davon, ob die Locale vorhanden ist */
function wochentag($zeitpunkt)
{
$namen = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
return $namen[(int)date("w", $zeitpunkt)];
}
/*
* Die Termine eines Tages. $ganztags trennt die ganztägigen (Dauer über
* zwölf Stunden) von den übrigen.
*/
function kalenderTermine($dbconn, $tag, $ganztags)
{
$vergleich = $ganztags ? ">" : "<";
$sql = "SELECT termin.id, termtyp.typ, termin.head, termtime, termdauer,
user, user2, user3, user4, done, partner_id, main_id,
str, ort, ortsteil, plz, hnr, adresse.vname AS vname, adresse.nname AS nname,
user.vname AS uservname, user.nname AS usernname,
user2.vname AS uservname2, user2.nname AS usernname2,
user3.vname AS uservname3, user3.nname AS usernname3,
user4.vname AS uservname4, user4.nname AS usernname4,
firma, vname2, nname2
FROM termin
LEFT JOIN termtyp ON termin.typ = termtyp.id
LEFT JOIN adresse ON termin.adresse_id = adresse.id
LEFT JOIN partner ON adresse.partner_id = partner.id
LEFT JOIN strasse ON adresse.str_id = strasse.id
LEFT JOIN ort ON strasse.ort_id = ort.id
LEFT JOIN user ON termin.user = user.id
LEFT JOIN user AS user2 ON termin.user2 = user2.id
LEFT JOIN user AS user3 ON termin.user3 = user3.id
LEFT JOIN user AS user4 ON termin.user4 = user4.id
WHERE DATE(termtime) = ? AND termdauer $vergleich '12:00:00'
ORDER BY termtime ASC";
return db_zeilen($dbconn, $sql, array($tag)) ?: array();
}
/* Die an einem Tag gebuchten Arbeiten aus der Projektverwaltung */
function kalenderArbeiten($dbconn, $tag)
{
$sql = "SELECT work.id, project.id AS projectid, work.bezeichn AS head, work.rechn AS done,
project.name AS projectname, work.datetime AS termtime, work.std AS termdauer,
project.changeuser AS user, project.partner_id,
adresse.vname AS vname, adresse.nname AS nname, adresse.firma AS firma
FROM work
LEFT JOIN project ON work.project_id = project.id
LEFT JOIN partner ON project.partner_id = partner.id
LEFT JOIN adresse ON adresse.partner_id = partner.id
LEFT JOIN user ON work.changeuser = user.id
WHERE adresse.typ_id = 1 AND DATE(work.datetime) = ?
ORDER BY work.datetime ASC";
return db_zeilen($dbconn, $sql, array($tag)) ?: array();
}
/* Wer an einem Tag gestempelt hat und ob der Tag abgeschlossen ist */
function kalenderAnwesenheit($dbconn, $tag)
{
$sql = "SELECT user.vname, user.nname, user.color,
CASE MAX(zeiten.gehen) WHEN MAX(zeiten.kommen) THEN 0 ELSE 1 END AS complete
FROM user
LEFT JOIN zeiten ON user.id = zeiten.ma_id
WHERE DATE(kommen) = ?
GROUP BY user.id ORDER BY user.nname ASC";
return db_zeilen($dbconn, $sql, array($tag)) ?: array();
}
/*
* Die acht Tage einer Kalenderseite, beginnend einen Tag vor dem
* Seitenanfang (so ist der Vortag immer sichtbar).
*/
function kalenderTage($dbconn, $seite)
{
$heute = strtotime("today");
$tage = array();
for($i = $seite * 8 - 1; $i < $seite * 8 + 7; $i++)
{
$zeitpunkt = strtotime("+".$i." day", $heute);
$datum = date("Y-m-d", $zeitpunkt);
$feiertag = feiertag_bayern((int)date("d", $zeitpunkt), (int)date("m", $zeitpunkt), (int)date("Y", $zeitpunkt));
$termine = array();
if(($_SESSION["firma"] ?? "") == "Ingenieurbüro Wagner")
$termine = kalenderArbeiten($dbconn, $datum);
$termine = array_merge($termine, kalenderTermine($dbconn, $datum, false));
$tage[] = array(
// am Feiertag steht der Name des Feiertags statt des Wochentags
"weekday" => ($feiertag ? date("d.m.Y", $zeitpunkt)."<br/>" : wochentag($zeitpunkt)."<br/>".date("d.m.Y", $zeitpunkt)),
"date" => date("Ymd", $zeitpunkt),
"termine" => $termine,
"fulldaytermine" => kalenderTermine($dbconn, $datum, true),
"numfulldaytermine" => 0,
"ma_check" => kalenderAnwesenheit($dbconn, $datum),
"feiertag" => $feiertag ? $feiertag : "",
);
}
return $tage;
}
/* Die Mitarbeiter der Kalenderspalte samt Resturlaub */
function kalenderBenutzer($dbconn)
{
$users = array();
$zeilen = db_zeilen($dbconn, "SELECT id, vname, nname, color FROM user WHERE blocked = 0 AND nick != 'ALL'");
foreach((array)$zeilen as $res)
{
$res["openvacation"] = urlaub_remaining($dbconn, $res["id"]);
$users[$res["id"]] = $res;
}
return $users;
}
?>
+1 -1
View File
@@ -1,4 +1,4 @@
<?php
<?php
function generateSalt() {
+17 -15
View File
@@ -7,8 +7,8 @@ function ajax_searchkunden(page)
search_in_progress = 1;
document.getElementById("kdnsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true;
field = escape(document.getElementById("kdnsrc_field").value);
search = escape(document.getElementById("kdnsrc_src").value);
field = encodeURIComponent(document.getElementById("kdnsrc_field").value);
search = encodeURIComponent(document.getElementById("kdnsrc_src").value);
var url = "ajax/searchkunden.php?field=" + field + "&page=" + page + "&search=" + search;
reqkdnsrc = new XMLHttpRequest();
@@ -35,7 +35,7 @@ function ajax_searchzeit(page,user)
search_in_progress = 1;
document.getElementById("termcontainer-"+user).innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true;
search = escape(document.getElementById("zeit_src-"+user).value);
search = encodeURIComponent(document.getElementById("zeit_src-"+user).value);
var url = "ajax/searchzeit.php?page=" + page + "&user=" + user + "&search=" + search;
reqkdnsrc = new XMLHttpRequest();
@@ -55,15 +55,17 @@ function ajax_searchzeit(page,user)
}
}
function ajax_searchadress(rechid,subact,page)
// page zuerst, damit die Seitenschaltung (displayPages) die Nummer
// als erstes Argument uebergeben kann - wie bei den anderen Suchen
function ajax_searchadress(page,rechid,subact)
{
if(!search_in_progress)
{
search_in_progress = 1;
document.getElementById("adrsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true;
field = escape(document.getElementById("adrsrc_field").value);
search = escape(document.getElementById("adrsrc_src").value);
field = encodeURIComponent(document.getElementById("adrsrc_field").value);
search = encodeURIComponent(document.getElementById("adrsrc_src").value);
var url = "ajax/searchadress.php?field=" + field + "&page=" + page + "&search=" + search + "&rechid=" + rechid + "&subact=" + subact;
reqadrsrc = new XMLHttpRequest();
@@ -90,8 +92,8 @@ function ajax_searchliefer(page)
search_in_progress = 1;
document.getElementById("kdnsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true;
field = escape(document.getElementById("kdnsrc_field").value);
search = escape(document.getElementById("kdnsrc_src").value);
field = encodeURIComponent(document.getElementById("kdnsrc_field").value);
search = encodeURIComponent(document.getElementById("kdnsrc_src").value);
var url = "ajax/searchliefer.php?field=" + field + "&page=" + page + "&search=" + search;
reqkdnsrc = new XMLHttpRequest();
@@ -118,7 +120,7 @@ function ajax_searchkdnprojects(page,kdnid)
search_in_progress = 1;
document.getElementById("projectlist").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true;
search = escape(document.getElementById("src_project").value);
search = encodeURIComponent(document.getElementById("src_project").value);
var url = "ajax/searchkdnprojects.php?page=" + page + "&search=" + search+"&kdnid=" + kdnid;
@@ -146,7 +148,7 @@ function ajax_searchkdnrech(page,skspage,typ,kdnid)
search_in_progress = 1;
document.getElementById("rechlist-"+typ).innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true;
search = escape(document.getElementById("src_rech-"+typ).value);
search = encodeURIComponent(document.getElementById("src_rech-"+typ).value);
var url = "ajax/searchkdnrech.php?page=" + page + "&skspage=" + skspage + "&search=" + search+"&typ=" + typ + "&kdnid=" + kdnid;
@@ -173,7 +175,7 @@ function ajax_searchkomm(page,kdnid)
search_in_progress = 1;
document.getElementById("kommsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true;
search = escape(document.getElementById("kommsrc_src").value);
search = encodeURIComponent(document.getElementById("kommsrc_src").value);
var url = "ajax/searchkomm.php?page=" + page + "&search=" + search+"&kdnid=" + kdnid;
@@ -181,7 +183,7 @@ function ajax_searchkomm(page,kdnid)
reqkommsrc.open("GET", url, true);
reqkommsrc.onreadystatechange = function()
{
if(reqkdnsrc.readyState == 4)
if(reqkommsrc.readyState == 4)
{
// Get the data from the server's response
document.getElementById("kommsrc_list").innerHTML = reqkommsrc.responseText;
@@ -200,7 +202,7 @@ function ajax_searchrech(page,skspage)
search_in_progress = 1;
document.getElementById("rechlist").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true;
search = escape(document.getElementById("src_rech").value);
search = encodeURIComponent(document.getElementById("src_rech").value);
var url = "ajax/searchrech.php?page=" + page + "&skspage=" + skspage + "&search=" + search;
@@ -226,7 +228,7 @@ function ajax_searchterm(page, termtyp)
{
search_in_progress = 1;
document.getElementById("termcontainer-"+termtyp).innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
search = escape(document.getElementById("term_src-"+termtyp).value);
search = encodeURIComponent(document.getElementById("term_src-"+termtyp).value);
var url = "ajax/searchterm.php?page=" + page + "&search=" + search + "&termtyp=" + termtyp;
@@ -276,7 +278,7 @@ function ajax_displaymsgs(page,user)
}
function sendmsg(touser)
{
msg = escape(document.getElementById("message-"+touser).value);
msg = encodeURIComponent(document.getElementById("message-"+touser).value);
var url = "ajax/sendmsg.php?touser="+touser+"&msg="+msg;
reqsndmsgs = new XMLHttpRequest();
reqsndmsgs.open("GET", url, true);
+4 -56
View File
@@ -1,59 +1,7 @@
<?php
<?php
require_once "incs/saveNchange.php";
// loeschePartner() räumt die Dokumente des Kunden über delRechnung() mit ab
require_once "incs/rechnung.php";
if($_GET["del"] == 1)
{
$kundeid=mysql_escape_string($_GET["kundeid"]);
$qry=mysqli_query($dbconn,"SELECT partner.id, vname, nname, firma FROM partner JOIN adresse ON adresse.partner_id = partner.id WHERE partner_id = '$kundeid' AND adresse.typ_id = 1 AND partner.typ_id = 1") or $err=error("Fehler beim ermitteln der Kundendaten für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($qry);
$kundeid=$res[0];
$vname=$res[1];
$nname=$res[2];
$firma=$res[3];
$qry=mysqli_query($dbconn,"SELECT id, rechnr FROM rechnung WHERE partner_id = '$kundeid'") or $err=error("Fehler beim ermitteln verknüpfter Rechnungen:<br />".mysqli_error($dbconn));
while($res = mysqli_fetch_array($qry))
{
$qry2=mysqli_query($dbconn,"DELETE FROM artikel_rechn WHERE rech_id = '$res[0]'") or $err=error("Fehler beim löschen verknüpfter Artikel:<br />".mysqli_error($dbconn));
$qry2=mysqli_query($dbconn,"DELETE FROM artikelsks WHERE rechnr = '$res[1]'") or $err=error("Fehler beim löschen verknüpfter SKS Artikel:<br />".mysqli_error($dbconn));
}
$qry=mysqli_query($dbconn,"SELECT id FROM rechnung WHERE partner_id = '$kundeid'") or $err=error("Fehler beim ermitteln verknüpfter Rechnungen:<br />".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$err = delRechnung($dbconn,$res["id"]);
}
$qry=mysqli_query($dbconn,"DELETE FROM adresse WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Adressen:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM tel WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Telefonnummern:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM kontakt WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Kontaktadressen:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM notiz WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Notizen:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM konto WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Konten:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM partner WHERE id = '$kundeid'") or $err=error("Fehler beim löschen des Kunden:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM partner WHERE id = $kundeid [$vname $nname - $firma]",
"",
"löschen");
if(!$err)
{
$qry=mysqli_query($dbconn,"UPDATE partner SET updated_by = 0 WHERE updated_by = '$kundeid'") or $err=error("Fehler beim unlinken einer eventuellen aktualisierung:<br />".mysqli_error($dbconn));
}
if(!$err)
{
doneNreturn("Erfolgreich gelöscht!");
}
}
}
elseif($_GET["formsent"] == 1)
{
$ret = savePart($dbconn,1);
$_SESSION["camefrom"] = "kundenshow&id=".$ret[1];
if(!$ret[0])
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispPartForm($dbconn,$smarty);
}
?>
$err = partnerAddSeite($dbconn, $smarty, 1);
?>
+6 -206
View File
@@ -1,207 +1,7 @@
<?php
<?php
require_once "incs/saveNchange.php";
if($_GET["do"] == "adress")
{
if($_GET["del"] == 1)
{
$adressid=mysql_escape_string($_GET["adressid"]);
$qry=mysqli_query($dbconn,"SELECT vname, nname, firma, typ, partner.id FROM adresse
JOIN adresstyp ON adresstyp.id = adresse.typ_id
JOIN partner ON partner.id = adresse.partner_id
WHERE adresse.id = '$adressid' AND partner.typ_id = 1") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($qry);
$vname = $res[0];
$nname = $res[1];
$firma = $res[2];
$typ = $res[3];
$kdnr = $res[4];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM adresse WHERE id = '$adressid'") or $err=error("Fehler beim löschen der Adresse:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM adresse WHERE id = $adressid [$typ von Kunde $kdnr ($vname $nname - $firma)]","","löschen");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
if(!$err)
{
$qry=mysqli_query($dbconn,"SELECT * FROM tel WHERE adresse_id = '$adressid'");
while($res = mysqli_fetch_assoc($dbconn,$qry))
{
mysqli_query($dbconn,"DELETE FROM tel WHERE id='".$res["id"]."'") or $err = error("Fehler beim löschen der zugehörigen Telefonnummern<br />".mysqli_error($dbconn));#
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM tel WHERE id = ".$res["$id"]." [$typ von Kunde $kdnr ($vname $nname - $firma)]","","löschen");
}
}
}
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
else
{
$err = error("Ungültiger Kunde!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveAdress($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispAdressForm($dbconn,$smarty,1);
}
}
elseif($_GET["do"] == "tel")
{
if($_GET["del"] == 1)
{
$telid=mysql_escape_string($_GET["telid"]);
$qry=mysqli_query($dbconn,"SELECT typ, partner.id FROM tel
JOIN teltyp ON teltyp.id = tel.typ_id
JOIN partner ON partner.id = tel.partner_id
WHERE adresse.id = '$adressid' AND partner.typ_id = 1") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($dbconn,$qry);
$typ = $res[0];
$kdnr = $res[1];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM tel WHERE id = '$telid'") or $err=error("Fehler beim löschen der Telefonnummer:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM tel WHERE id = $telid [$typ von Kunde $kdnr]","","löschen");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
}
else
{
$err = error("Ungültiger Kunde!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveTel($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispTelForm($dbconn,$smarty,1);
}
}
elseif($_GET["do"] == "kontakt")
{
if($_GET["del"] == 1)
{
$kontaktid=mysql_escape_string($_GET["kontaktid"]);
$qry=mysqli_query($dbconn,"SELECT typ, partner.id FROM kontakt
JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id
JOIN partner ON partner.id = kontakt.partner_id
WHERE kontakt.id = '$kontaktid'") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($qry);
$typ = $res[0];
$kdnr = $res[1];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM kontakt WHERE id = '$kontaktid'") or $err=error("Fehler beim löschen der Kontaktinformation:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM kontakt WHERE id = $kontaktid [$typ von Kunde $kdnr]","","löschen");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
}
else
{
$err = error("Ungültiger Kunde!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveKontakt($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispKontaktForm($dbconn,$smarty,1);
}
}
elseif($_GET["do"] == "notiz")
{
if($_GET["del"] == 1)
{
$notizid=mysql_escape_string($_GET["notizid"]);
$qry=mysqli_query($dbconn,"SELECT partner_id FROM notiz
JOIN partner ON partner.id = notiz.partner_id
WHERE notiz.id = '$notizid' AND partner.typ_id = 1") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($qry);
$kdnr = $res[0];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM notiz WHERE id = '$notizid'") or $err=error("Fehler beim löschen der Notiz:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM notiz WHERE id = $notizid [von Kunde $kdnr]","","löschen");
del_files("./".UPLOADS_PATH."notes/","!^".$notizid."\.(.)+$!");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
}
else
{
$err = error("Ungültiger Kunde!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveNotiz($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispNotizForm($dbconn,$smarty,1);
}
}
elseif($_GET["do"] == "konto")
{
if($_GET["del"] == 1)
{
$kontoid = mysql_escape_string($_GET["kontoid"]);
$qry = mysqli_query($dbconn,"SELECT konto.partner_id FROM konto
JOIN partner ON partner.id = konto.partner_id
WHERE konto.id = '$kontoid' AND partner.typ_id = 1") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res = mysqli_fetch_array($qry);
$kdnr = $res[0];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM konto WHERE id = '$kontoid'") or $err=error("Fehler beim löschen des Kontos:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM konto WHERE id = $kontoid [von Kunde $kdnr]","","löschen");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
}
else
{
$err = error("Ungültiger Kunde!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveKonto($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispKontoForm($dbconn,$smarty,2);
}
}
?>
// Beim Löschen einer Adresse verschwinden auch ihre Dokumente (delRechnung)
require_once "incs/rechnung.php";
$err = partnerChangeSeite($dbconn, $smarty, 1);
?>
+6 -120
View File
@@ -1,121 +1,7 @@
<?php
if($_GET["id"])
{
$qry = mysqli_query($dbconn,"SELECT * FROM partner WHERE id='".mysql_escape_string($_GET["id"])."' AND typ_id = 1");
$kdnres=mysqli_fetch_assoc($qry);
$smarty->assign("kunde",$kdnres);
if($kdnres["id"])
{
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$kdnres["id"]."'");
while($res=mysqli_fetch_assoc($qry))
{
$oldrecords[] = $res;
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$res["id"]."'");
}
$smarty->assign("oldrecords",$oldrecords);
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$kdnres["updated_by"]."'");
while($res=mysqli_fetch_assoc($qry))
{
$newrecords[] = $res;
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$res["updated_by"]."'");
}
$smarty->assign("newrecords",$newrecords);
$tmp = array();
$qry = mysqli_query($dbconn,"SELECT * FROM anrede");
while($res=mysqli_fetch_assoc($qry))
{
$tmp[$res["id"]] = $res["anrede"];
}
$smarty->assign("anr",$tmp);
$tmp = array();
$qry = mysqli_query($dbconn,"SELECT * FROM titel");
while($res=mysqli_fetch_assoc($qry))
{
$tmp[$res["id"]] = $res["titel"];
}
$smarty->assign("titel",$tmp);
$qry = mysqli_query($dbconn,"SELECT name,typ,tel.id,nr,ort,ortsteil,plz,vwahl, ort.id AS ort_id FROM tel LEFT JOIN teltyp ON typ_id = teltyp.id LEFT JOIN ort ON ort_id = ort.id WHERE partner_id='".mysql_escape_string($_GET["id"])."' AND tel.adresse_id = 0 ORDER BY typ_id ASC");
while($res=mysqli_fetch_assoc($qry))
{
$tels[] = $res;
}
$smarty->assign("telnrn",$tels);
$qry = mysqli_query($dbconn,"SELECT kontakt.id, kontakt, partner_id, typ FROM kontakt LEFT JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id WHERE partner_id='".mysql_escape_string($_GET["id"])."' ORDER BY typ_id ASC");
while($res=mysqli_fetch_assoc($qry))
{
$contacts[] = $res;
}
$smarty->assign("contacts",$contacts);
$tmp = array();
$qry = mysqli_query($dbconn,"SELECT ktonr,iban,swift,blz,bank,partner_id,konto.id,inhaber
FROM konto JOIN bank ON konto.bank_id = bank.id WHERE partner_id='".mysql_escape_string($_GET["id"])."'")
or $err=error("Fehler beim auslesen der Konten:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$tmp[] = $res;
}
$smarty->assign("kontos",$tmp);
$qry = mysqli_query($dbconn,"SELECT * FROM notiz WHERE partner_id='".mysql_escape_string($_GET["id"])."'");
while($res=mysqli_fetch_assoc($qry))
{
$res["file"] = search_file("./".UPLOADS_PATH."notes/","!^".$res["id"]."\.(.)+$!");
$notes[] = $res;
}
$qry = mysqli_query($dbconn,"SELECT COUNT(rechnr) AS nr_mahn, NOW() AS datetime FROM rechnung WHERE typ_id = 6 AND partner_id = '".mysql_escape_string($_GET["id"])."'") or $err=error("Fehler beim Auslesen der Daten:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_assoc($qry);
if($res["nr_mahn"] > 0)
{
$mahn["notiz"] = "ACHTUNG! Es sind bereits ".$res["nr_mahn"]." Mahnungen für diesen Kunden vorhanden!!";
$mahn["color"] = "#f76";
$mahn["datetime"] = $res["datetime"];
$notes[] = $mahn;
}
$smarty->assign("notes",$notes);
$qry = mysqli_query($dbconn,"SELECT plz, ortsteil, tel.nr, ort.vwahl, ort, str, DATE_FORMAT(gebdat,'%d.%m.%Y') AS gebdat, DATE_FORMAT(gebdat2,'%d.%m.%Y') AS gebdat2, hnr, vname, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, anrede2_id, titel2_id, adresstyp.typ, adresse.typ_id
FROM adresse JOIN
adresstyp ON adresstyp.id = adresse.typ_id
LEFT JOIN strasse ON str_id = strasse.id
LEFT JOIN ort ON ort_id = ort.id
LEFT JOIN land ON land_id = land.id
LEFT JOIN tel ON tel.adresse_id = adresse.id
WHERE adresse.partner_id='".mysql_escape_string($_GET["id"])."' AND adresse.typ_id != 5
ORDER BY typ_id ASC")or $err=error("Mysql-Fehler:<br />".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$adressen[] = $res;
}
$smarty->assign("adressen",$adressen);
$qry = mysqli_query($dbconn,"SELECT id
FROM adresse WHERE adresse.partner_id='".mysql_escape_string($_GET["id"])."' AND adresse.typ_id = 5
ORDER BY typ_id ASC")or $err=error("Mysql-Fehler:<br />".mysqli_error($dbconn));
if(mysqli_fetch_array($qry))
$smarty->assign("kommadressen",1);
$tmp=array();
$qry = mysqli_query($dbconn,"SELECT typ, id FROM rechtyp");
while($res=mysqli_fetch_assoc($qry))
{
$tmp[] = $res;
}
$smarty->assign("rechtypen",$tmp);
}
}
$_SESSION["camefrom"] ="kundenshow&id=".$_GET["id"];
<?php
require_once "incs/saveNchange.php";
partnerShowDaten($dbconn, $smarty, parameterGanzzahl("id"), 1);
$_SESSION["camefrom"] = "kundenshow&id=".parameterGanzzahl("id");
$smarty->display("kundenshow.tpl");
?>
?>
+5 -55
View File
@@ -1,57 +1,7 @@
<?php
<?php
require_once "incs/saveNchange.php";
// loeschePartner() räumt die Dokumente des Lieferanten über delRechnung() mit ab
require_once "incs/rechnung.php";
if($_GET["del"] == 1)
{
$kundeid=mysql_escape_string($_GET["kundeid"]);
$qry=mysqli_query($dbconn,"SELECT partner.id, vname, nname, firma FROM partner JOIN adresse ON adresse.partner_id = partner.id WHERE partner_id = '$kundeid' AND adresse.typ_id = 1 AND partner.typ_id = 2") or $err=error("Fehler beim ermitteln der Kundendaten für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($qry);
$kundeid=$res[0];
$vname=$res[1];
$nname=$res[2];
$firma=$res[3];
if($kundeid)
{
$qry=mysqli_query($dbconn,"SELECT id, rechnr FROM rechnung WHERE partner_id = '$kundeid'") or $err=error("Fehler beim ermitteln verknüpfter Rechnungen:<br />".mysqli_error($dbconn));
while($res = mysqli_fetch_array($qry))
{
$qry2=mysqli_query($dbconn,"DELETE FROM artikel_rechn WHERE rech_id = '$res[0]'") or $err=error("Fehler beim löschen verknüpfter Artikel:<br />".mysqli_error($dbconn));
$qry2=mysqli_query($dbconn,"DELETE FROM artikelsks WHERE rechnr = '$res[1]'") or $err=error("Fehler beim löschen verknüpfter SKS Artikel:<br />".mysqli_error($dbconn));
}
$qry=mysqli_query($dbconn,"DELETE FROM rechnung WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Rechnungen:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM adresse WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Adressen:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM tel WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Telefonnummern:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM kontakt WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Kontaktadressen:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM notiz WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Notizen:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM konto WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Konten:<br />".mysqli_error($dbconn));
$qry=mysqli_query($dbconn,"DELETE FROM partner WHERE id = '$kundeid'") or $err=error("Fehler beim löschen des Kunden:<br />".mysqli_error($dbconn));
}
else
{
$err = error("Ungültiger Lieferant!");
}
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM partner WHERE id = $kundeid [$vname $nname - $firma]",
"",
"löschen");
echo "sadlk";
if(!$err)
{
doneNreturn("Erfolgreich gelöscht!");
}
}
}
elseif($_GET["formsent"] == 1)
{
$ret = savePart($dbconn,2);
$_SESSION["camefrom"] = "liefershow&id=".$ret[1];
if(!$ret[0])
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispPartForm($dbconn,$smarty,2);
}
?>
$err = partnerAddSeite($dbconn, $smarty, 2);
?>
+6 -190
View File
@@ -1,191 +1,7 @@
<?php
<?php
require_once "incs/saveNchange.php";
if($_GET["do"] == "adress")
{
if($_GET["del"] == 1)
{
$adressid=mysql_escape_string($_GET["adressid"]);
$qry=mysqli_query($dbconn,"SELECT vname, nname, firma, typ, partner.id FROM adresse
JOIN adresstyp ON adresstyp.id = adresse.typ_id
JOIN partner ON partner.id = adresse.partner_id
WHERE adresse.id = '$adressid' AND partner.typ_id = 2") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($qry);
$vname = $res[0];
$nname = $res[1];
$firma = $res[2];
$typ = $res[3];
$kdnr = $res[4];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM adresse WHERE id = '$adressid'") or $err=error("Fehler beim löschen der Adresse:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM adresse WHERE id = $adressid [$typ von Kunde $kdnr ($vname $nname - $firma)]","","löschen");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
}
else
{
$err = error("Ungültiger Lieferant!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveAdress($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispAdressForm($dbconn,$smarty,2);
}
}
elseif($_GET["do"] == "tel")
{
if($_GET["del"] == 1)
{
$telid=mysql_escape_string($_GET["telid"]);
$qry=mysqli_query($dbconn,"SELECT typ, partner.id FROM tel
JOIN teltyp ON teltyp.id = tel.typ_id
JOIN partner ON partner.id = tel.partner_id
WHERE adresse.id = '$adressid' AND partner.typ_id = 2") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($qry);
$typ = $res[0];
$kdnr = $res[1];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM tel WHERE id = '$telid'") or $err=error("Fehler beim löschen der Telefonnummer:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM tel WHERE id = $telid [$typ von Kunde $kdnr]","","löschen");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
}
else
{
$err = error("Ungültiger Lieferant!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveTel($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispTelForm($dbconn,$smarty,2);
}
}
elseif($_GET["do"] == "kontakt")
{
if($_GET["del"] == 1)
{
$kontaktid=mysql_escape_string($_GET["kontaktid"]);
$qry=mysqli_query($dbconn,"SELECT konatkttyp.typ, partner.id FROM kontakt
JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id
JOIN partner ON partner.id = kontakt.partner_id WHERE kontakt.id = '$kontaktid' partner.typ_id = 2") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($qry);
$typ = $res[0];
$kdnr = $res[1];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM kontakt WHERE id = '$kontaktid'") or $err=error("Fehler beim löschen der Kontaktinformation:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM kontakt WHERE id = $kontaktid [$typ von Kunde $kdnr]","","löschen");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
}
else
{
$err = error("Ungültiger Lieferant!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveKontakt($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispKontaktForm($dbconn,$smarty,2);
}
}
elseif($_GET["do"] == "notiz")
{
if($_GET["del"] == 1)
{
$notizid=mysql_escape_string($_GET["notizid"]);
$qry=mysqli_query($dbconn,"SELECT partner_id FROM notiz
JOIN partner ON partner.id = notiz.partner_id
WHERE notiz.id = '$notizid' AND partner.typ_id = 2") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res=mysqli_fetch_array($qry);
$kdnr = $res[0];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM notiz WHERE id = '$notizid'") or $err=error("Fehler beim löschen der Notiz:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM notiz WHERE id = $notizid [von Kunde $kdnr]","","löschen");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
}
else
{
$err = error("Ungültiger Lieferant!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveNotiz($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispNotizForm($dbconn,$smarty,2);
}
}
elseif($_GET["do"] == "konto")
{
if($_GET["del"] == 1)
{
$kontoid = mysql_escape_string($_GET["kontoid"]);
$qry = mysqli_query($dbconn,"SELECT konto.partner_id FROM konto
JOIN partner ON partner.id = konto.partner_id
WHERE konto.id = '$kontoid' AND partner.typ_id = 2") or $err=error("Fehler beim abrufen der Informationen für die LOG:<br />".mysqli_error($dbconn));
$res = mysqli_fetch_array($qry);
$kdnr = $res[0];
if($kdnr)
{
$qry=mysqli_query($dbconn,"DELETE FROM konto WHERE id = '$kontoid'") or $err=error("Fehler beim löschen des Kontos:<br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM konto WHERE id = $kontoid [von Kunde $kdnr]","","löschen");
if(!$err)
doneNreturn("Erfolgreich gelöscht!");
}
}
else
{
$err = error("Ungültiger Lieferant!");
}
}
elseif($_GET["formsent"] == 1)
{
$err = saveKonto($dbconn);
if(!$err)
doneNreturn("Erfolgreich erledigt!");
}
else
{
dispKontoForm($dbconn,$smarty,2);
}
}
?>
// Beim Löschen einer Adresse verschwinden auch ihre Dokumente (delRechnung)
require_once "incs/rechnung.php";
$err = partnerChangeSeite($dbconn, $smarty, 2);
?>
+5 -118
View File
@@ -1,120 +1,7 @@
<?php
if($_GET["id"])
{
$qry = mysqli_query($dbconn,"SELECT * FROM partner WHERE id='".mysql_escape_string($_GET["id"])."' AND typ_id = 2")
or $err=error("Fehler beim auslesen des Zulieferers:<br />". mysqli_error($dbconn));
$kdnres=mysqli_fetch_assoc($qry);
$smarty->assign("kunde",$kdnres);
if($kdnres.id)
{
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$kdnres["id"]."'")
or $err=error("Fehler beim auslesen der neueren Versionen:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$oldrecords[] = $res;
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$res["id"]."'")
or $err=error("Fehler beim auslesen der neueren Versionen:<br />". mysqli_error($dbconn));
}
$smarty->assign("oldrecords",$oldrecords);
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$kdnres["updated_by"]."'")
or $err=error("Fehler beim auslesen der älteren Versionen:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$newrecords[] = $res;
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$res["updated_by"]."'")
or $err=error("Fehler beim auslesen der älteren Versionen:<br />". mysqli_error($dbconn));
}
$smarty->assign("newrecords",$newrecords);
$tmp = array();
$qry = mysqli_query($dbconn,"SELECT * FROM anrede")
or $err=error("Fehler beim auslesen der Anreden:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$tmp[$res["id"]] = $res["anrede"];
}
$smarty->assign("anr",$tmp);
$tmp = array();
$qry = mysqli_query($dbconn,"SELECT * FROM titel")
or $err=error("Fehler beim auslesen der Titel:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$tmp[$res["id"]] = $res["titel"];
}
$smarty->assign("titel",$tmp);
$tmp = array();
$qry = mysqli_query($dbconn,"SELECT name,typ,tel.id,nr,ort,ortsteil,plz,vwahl
FROM tel LEFT JOIN teltyp ON typ_id = teltyp.id LEFT JOIN ort ON ort_id = ort.id
WHERE partner_id='".mysql_escape_string($_GET["id"])."' ORDER BY typ_id ASC")
or $err=error("Fehler beim auslesen der Telefonnummern:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$tmp[] = $res;
}
$smarty->assign("telnrn",$tmp);
$tmp = array();
$qry = mysqli_query($dbconn,"SELECT kontakt.id, kontakt, partner_id, typ
FROM kontakt LEFT JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id
WHERE partner_id='".mysql_escape_string($_GET["id"])."' ORDER BY typ_id ASC")
or $err=error("Fehler beim auslesen der Kontakte:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$tmp[] = $res;
}
$smarty->assign("contacts",$tmp);
$tmp = array();
$qry = mysqli_query($dbconn,"SELECT * FROM notiz WHERE partner_id='".mysql_escape_string($_GET["id"])."'")
or $err=error("Fehler beim auslesen der Notizen:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$tmp[] = $res;
}
$smarty->assign("notes",$tmp);
$tmp = array();
$qry = mysqli_query($dbconn,"SELECT ktonr,iban,swift,blz,bank,partner_id,konto.id,inhaber
FROM konto JOIN bank ON konto.bank_id = bank.id WHERE partner_id='".mysql_escape_string($_GET["id"])."'")
or $err=error("Fehler beim auslesen der Konten:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$tmp[] = $res;
}
$smarty->assign("kontos",$tmp);
$qry = mysqli_query($dbconn,"SELECT plz, ortsteil, ort, str, hnr, vname, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, adresstyp.typ, adresse.typ_id
FROM adresse JOIN
adresstyp ON adresstyp.id = adresse.typ_id
LEFT JOIN strasse ON str_id = strasse.id
LEFT JOIN ort ON ort_id = ort.id
LEFT JOIN land ON land_id = land.id
WHERE partner_id='".mysql_escape_string($_GET["id"])."'
ORDER BY typ_id ASC") or $err=error("Fehler beim auslesen der Adressen:<br />". mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$adressen[] = $res;
}
$smarty->assign("adressen",$adressen);
$tmp=array();
$qry = mysqli_query($dbconn,"SELECT typ, id FROM rechtyp");
while($res=mysqli_fetch_assoc($qry))
{
$tmp[] = $res;
}
$smarty->assign("rechtypen",$tmp);
$_SESSION["camefrom"] ="liefershow&id=".$_GET["id"];
}
}
<?php
require_once "incs/saveNchange.php";
partnerShowDaten($dbconn, $smarty, parameterGanzzahl("id"), 2);
$_SESSION["camefrom"] = "liefershow&id=".parameterGanzzahl("id");
$smarty->display("liefershow.tpl");
?>
?>
+49 -138
View File
@@ -17,7 +17,7 @@ elseif($_GET["changeadr"] == 1 && $_GET["id"])
if(!$_GET["adrid"])
{
$smarty->assign("felder",array("all"=>"Name, Adresse, Kd.Nr.","kdnr"=>"Kundennummer","name"=>"Name und Firma","str"=>"Straße","plz"=>"PLZ","ort"=>"Ort","tel"=>"Tel","kont"=>"Kontakt"));
$smarty->assign("rechid",$_GET["id"]);
$smarty->assign("rechid",(int)$_GET["id"]);
$smarty->display("changeadr.tpl");
}
else
@@ -32,7 +32,7 @@ elseif($_GET["copy"] == 1 && $_GET["id"])
if(!$_GET["adrid"])
{
$smarty->assign("felder",array("all"=>"Name, Adresse, Kd.Nr.","kdnr"=>"Kundennummer","name"=>"Name und Firma","str"=>"Straße","plz"=>"PLZ","ort"=>"Ort","tel"=>"Tel","kont"=>"Kontakt"));
$smarty->assign("rechid",$_GET["id"]);
$smarty->assign("rechid",(int)$_GET["id"]);
$smarty->display("copyrech.tpl");
}
else
@@ -42,58 +42,25 @@ elseif($_GET["copy"] == 1 && $_GET["id"])
doneNreturn("Erfolgreich geändert");
}
}
elseif($_GET["storno"] == "YES" && $_GET["id"]){
$querystr = "UPDATE rechnung SET
storno = 1, stornodate = NOW() WHERE id = '".$_GET["id"]."'";
mysqli_query($dbconn,$querystr) or $err=error("Fehler beim aktualisieren der Rechnung<br />".mysqli_error($dbconn));
doneNreturn("Erfolgreich geändert");
}
elseif($_GET["storno"] == "NO" && $_GET["id"]){
$querystr = "UPDATE rechnung SET
storno = 0 WHERE id = '".$_GET["id"]."'";
mysqli_query($dbconn,$querystr) or $err=error("Fehler beim aktualisieren der Rechnung<br />".mysqli_error($dbconn));
doneNreturn("Erfolgreich geändert");
elseif(($_GET["storno"] == "YES" || $_GET["storno"] == "NO") && $_GET["id"]){
$err = stornoRechnung($dbconn, $_GET["id"], $_GET["storno"] == "YES");
if(!$err)
doneNreturn("Erfolgreich geändert");
}
elseif($_GET["mail"] == 1 && $_GET["id"])
{
$kdnres=makeadressarray($dbconn, $_GET["adressid"]);
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede");
while($res=mysqli_fetch_assoc($qry))
{
$typnames[$res["id"]] = $res["anrede"];
}
$smarty->assign("anrs",$typnames);
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel");
while($res=mysqli_fetch_assoc($qry))
{
$typnames[$res["id"]] = $res["titel"];
}
$smarty->assign("titels",$typnames);
$mails=array();
$mailids=array();
$qry = mysqli_query($dbconn,"SELECT kontakt.id, kontakt, partner_id, typ FROM kontakt LEFT JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id WHERE partner_id='".mysql_escape_string($kdnres["partner_id"])."' AND typ_id = 1");
while($res=mysqli_fetch_assoc($qry))
{
$mails[] = $res["kontakt"];
$mailids[] = $res["id"];
}
$smarty->assign("mails",$mails);
$smarty->assign("mailids",$mailids);
$typids=array();
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,bezeichn FROM artikeltyp");
while($res=mysqli_fetch_assoc($qry))
{
$typids[] = $res["id"];
$typnames[] = $res["bezeichn"];
}
$smarty->assign("typids",$typids);
$smarty->assign("typs",$typnames);
list($anrs, $titels) = anredenUndTitel($dbconn);
$smarty->assign("anrs",$anrs);
$smarty->assign("titels",$titels);
$mails = db_zuordnung($dbconn, "SELECT id, kontakt FROM kontakt WHERE partner_id = ? AND typ_id = 1", array($kdnres["partner_id"] ?? 0)) ?: array();
$smarty->assign("mails",array_values($mails));
$smarty->assign("mailids",array_keys($mails));
$typen = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
$smarty->assign("typids",array_keys($typen));
$smarty->assign("typs",array_values($typen));
$rechnung=makerechnungsarray($dbconn, $_GET["id"], 0);
$smarty->assign("rechnung",$rechnung);
$smarty->assign("adresse",$kdnres);
@@ -174,7 +141,7 @@ else
}
else
{
$smarty->assign("loadrech",$_GET["id"]);
$smarty->assign("loadrech",(int)$_GET["id"]);
$rechnung=makerechnungsarray($dbconn, $_GET["id"], 0);
$kommission=makeadressarray($dbconn, $rechnung["kommission"]);
$smarty->assign("rechnung",$rechnung);
@@ -189,80 +156,37 @@ else
$smarty->assign("artikel",makeartikelarray($dbconn, $_GET["draft"], 1));
}
$smarty->assign("type",$_GET["type"]);
$smarty->assign("newtype",$_GET["newtype"]);
$smarty->assign("type",(int)$_GET["type"]);
$smarty->assign("newtype",(int)$_GET["newtype"]);
$kdnres=makeadressarray($dbconn, $_GET["adressid"]);
if($kdnres["adresstyp"] == "Kommission")
{
$smarty->assign("kommission",$kdnres);
$qry = mysqli_query($dbconn,"SELECT plz, ortsteil, ort, str, adresstyp.typ AS adresstyp, hnr, vname, partner_id, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, anrede2_id, titel2_id
FROM adresse
LEFT JOIN strasse ON str_id = strasse.id
LEFT JOIN ort ON ort_id = ort.id
LEFT JOIN land ON land_id = land.id
JOIN adresstyp ON adresse.typ_id = adresstyp.id
WHERE adresse.typ_id='1' AND adresse.partner_id = '".$kdnres["partner_id"]."'
ORDER BY typ_id ASC") or $err = error("Fehler beim abrufen der Daten ".mysqli_error($dbconn));
//$kdnres=mysqli_fetch_assoc($qry);
}
if($kdnres["partner_id"])
{
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede");
while($res=mysqli_fetch_assoc($qry))
{
$typnames[$res["id"]] = $res["anrede"];
}
$smarty->assign("anrs",$typnames);
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel");
while($res=mysqli_fetch_assoc($qry))
{
$typnames[$res["id"]] = $res["titel"];
}
$smarty->assign("titels",$typnames);
list($anrs, $titels) = anredenUndTitel($dbconn);
$smarty->assign("anrs",$anrs);
$smarty->assign("titels",$titels);
$liste = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
$smarty->assign("typids",array_keys($liste));
$smarty->assign("typs",array_values($liste));
$liste = db_zuordnung($dbconn, "SELECT id, einheit FROM einheit") ?: array();
$smarty->assign("einhids",array_keys($liste));
$smarty->assign("einhs",array_values($liste));
$liste = db_zuordnung($dbconn, "SELECT id, wahrung FROM wahrung") ?: array();
$smarty->assign("wahrids",array_keys($liste));
$smarty->assign("wahrs",array_values($liste));
$typids=array();
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,bezeichn FROM artikeltyp");
while($res=mysqli_fetch_assoc($qry))
{
$typids[] = $res["id"];
$typnames[] = $res["bezeichn"];
}
$smarty->assign("typids",$typids);
$smarty->assign("typs",$typnames);
$typids=array();
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,einheit FROM einheit");
while($res=mysqli_fetch_assoc($qry))
{
$typids[] = $res["id"];
$typnames[] = $res["einheit"];
}
$smarty->assign("einhids",$typids);
$smarty->assign("einhs",$typnames);
$typids=array();
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,wahrung FROM wahrung");
while($res=mysqli_fetch_assoc($qry))
{
$typids[] = $res["id"];
$typnames[] = $res["wahrung"];
}
$smarty->assign("wahrids",$typids);
$smarty->assign("wahrs",$typnames);
$typids=array();
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,mwst FROM mwst");
while($res=mysqli_fetch_assoc($qry))
foreach(db_zeilen($dbconn, "SELECT id, mwst FROM mwst") ?: array() as $res)
{
if($res["mwst"] != "999")
{
@@ -283,31 +207,18 @@ else
$smarty->assign("artmwstids",$typids2);
$smarty->assign("artmwsts",$typnames2);
$typids=array();
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,ziel FROM zahlziel");
while($res=mysqli_fetch_assoc($qry))
{
$typids[] = $res["id"];
$typnames[] = $res["ziel"];
}
$smarty->assign("zzielids",$typids);
$smarty->assign("zziels",$typnames);
$typids=array();
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,kto,name FROM buchungsKontos");
while($res=mysqli_fetch_assoc($qry))
{
$typids[] = $res["id"];
$typnames[] = $res["kto"]." (".$res["name"].")";
}
$smarty->assign("buchKtoids",$typids);
$smarty->assign("buchKtos",$typnames);
$qry=mysqli_query($dbconn,"SELECT tmp_rechnung.id,adresse_id, vname, nname, str, hnr FROM tmp_rechnung JOIN adresse ON adresse_id = adresse.id JOIN strasse ON str_id = strasse.id WHERE tmp_rechnung.typ_id='".mysql_escape_string($_GET["type"])."' AND user_id = '".mysql_escape_string($_SESSION["user"])."' ORDER BY datetime DESC LIMIT 1") or $err=error("Fehler beim Suchen nach nicht gespeicherten Daten<br />".mysqli_error($dbconn));
if($res = mysqli_fetch_assoc($qry))
$liste = db_zuordnung($dbconn, "SELECT id, ziel FROM zahlziel") ?: array();
$smarty->assign("zzielids",array_keys($liste));
$smarty->assign("zziels",array_values($liste));
$liste = db_zuordnung($dbconn, "SELECT id, CONCAT(kto, ' (', name, ')') FROM buchungsKontos") ?: array();
$smarty->assign("buchKtoids",array_keys($liste));
$smarty->assign("buchKtos",array_values($liste));
$res = db_zeile($dbconn, "SELECT tmp_rechnung.id, adresse_id, vname, nname, str, hnr FROM tmp_rechnung JOIN adresse ON adresse_id = adresse.id JOIN strasse ON str_id = strasse.id WHERE tmp_rechnung.typ_id = ? AND user_id = ? ORDER BY datetime DESC LIMIT 1", array((string)$_GET["type"], $_SESSION["user"]));
if($res === false)
$err = error("Fehler beim Suchen nach nicht gespeicherten Daten<br />".mysqli_error($dbconn));
if($res)
{
$smarty->assign("draft",$res["id"]);
$smarty->assign("draftname",$res["vname"]." ".$res["nname"]);
+1 -1
View File
@@ -1,4 +1,4 @@
<?php
<?php
require_once ("./incs/rechnung.php");
$smarty->assign("heading","Steuerexport");
$smarty->display("heading.tpl");
+14 -137
View File
@@ -1,148 +1,25 @@
<?php
require_once("incs/users.php");
$_SESSION["camefrom"] = "termin&show=".$_GET["show"]."&page=".$_GET["page"];
require_once "incs/termin.php";
require_once "incs/users.php";
if($_GET["show"] == "list")
$seite = parameterGanzzahl("page");
$_SESSION["camefrom"] = "termin&show=".(isset($_GET["show"]) && $_GET["show"] == "list" ? "list" : "")."&page=".$seite;
if(isset($_GET["show"]) && $_GET["show"] == "list")
{
$smarty->assign("heading","Terminliste");
if($_GET["tabs"])
$smarty->assign("tabs",$_GET["tabs"]);
else
$smarty->assign("tabs",$_SESSION["termtyp"]);
$smarty->assign("heading", "Terminliste");
$smarty->assign("tabs", parameterGanzzahl("tabs") ?: ($_SESSION["termtyp"] ?? 1));
$smarty->display("heading.tpl");
$smarty->display("termlist.tpl");
}
else
else
{
$smarty->assign("heading","Termine");
$smarty->assign("heading", "Termine");
$smarty->display("heading.tpl");
//$colors = array("#f00","#0c0","#ff0","#90c","#0bb","#066","#09f","#f60","#00f","#f09");
//$weather = GetWeather();
//$smarty->assign("weather",$weather);
$start = $_GET["page"]*8 - 1;
$end = $_GET["page"]*8 + 7;
for($i=$start; $i<$end; $i++)
{
$qry = mysqli_query($dbconn,"SELECT user.vname,user.nname, user.color,
case MAX(zeiten.gehen)
when MAX(zeiten.kommen) then 0
else 1 end AS complete
FROM user
LEFT JOIN zeiten ON user.id = zeiten.ma_id
WHERE DATE_FORMAT(kommen,'%Y%m%d') = '".date("Ymd",strtotime("+".$i." days"))."'
GROUP BY user.id ORDER BY user.nname ASC") or $err=error("fehler beim ermitteln der anwesenden Mitarbeiter<br />".mysqli_error($dbconn));
$ma_check=array();
while($res=mysqli_fetch_assoc($qry))
{
$ma_check[] = $res;
}
$qry = mysqli_query($dbconn,"SELECT termin.id,termtyp.typ, termin.head, termtime, termdauer, user, user2, user3, user4, done, partner_id, termin.id, main_id, str, ort, ortsteil, plz, hnr, adresse.vname as vname, adresse.nname as nname,
user.vname as uservname, user.nname as usernname,
user2.vname as uservname2, user2.nname as usernname2,
user3.vname as uservname3, user3.nname as usernname3,
user4.vname as uservname4, user4.nname as usernname4,
firma, vname2, nname2
FROM termin
LEFT JOIN termtyp ON termin.typ = termtyp.id
LEFT JOIN adresse ON termin.adresse_id = adresse.id
LEFT JOIN partner ON adresse.partner_id = partner.id
LEFT JOIN strasse ON adresse.str_id = strasse.id
LEFT JOIN ort ON strasse.ort_id = ort.id
LEFT JOIN user ON termin.user = user.id
LEFT JOIN user AS user2 ON termin.user2 = user2.id
LEFT JOIN user AS user3 ON termin.user3 = user3.id
LEFT JOIN user AS user4 ON termin.user4 = user4.id
WHERE DATE_FORMAT(termtime,'%Y%m%d') = '".date("Ymd",strtotime("+".$i." days"))."' AND termdauer > '12:00:00'
ORDER BY termtime ASC") or $err=error("fehler beim ermitteln der termine<br />".mysqli_error($dbconn));
$fulldaytermine=array();
while($res=mysqli_fetch_assoc($qry))
{
$fulldaytermine[] = $res;
}
$termine=array();
if($_SESSION["firma"] == "Ingenieurbüro Wagner"){
$qry = mysqli_query($dbconn,"SELECT work.id, project.id AS projectid, work.bezeichn AS head, work.rechn AS done, project.name AS projectname, work.datetime AS termtime, work.std AS termdauer, project.changeuser AS user, project.partner_id,
adresse.vname as vname, adresse.nname as nname, adresse.firma AS firma
FROM work
LEFT JOIN project ON work.project_id = project.id
LEFT JOIN partner ON project.partner_id = partner.id
LEFT JOIN adresse ON adresse.partner_id = partner.id
LEFT JOIN user ON work.changeuser = user.id
WHERE adresse.typ_id = 1 AND DATE_FORMAT(work.datetime,'%Y%m%d') = '".date("Ymd",strtotime("+".$i." days"))."'
ORDER BY work.datetime ASC") or $err=error("fehler beim ermitteln der termine<br />".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$termine[] = $res;
}
}
$qry = mysqli_query($dbconn,"SELECT termin.id,termtyp.typ, termin.head, termtime, termdauer, user, user2, user3, user4, done, partner_id, termin.id, main_id, str, ort, ortsteil, plz, hnr, adresse.vname as vname, adresse.nname as nname,
user.vname as uservname, user.nname as usernname,
user2.vname as uservname2, user2.nname as usernname2,
user3.vname as uservname3, user3.nname as usernname3,
user4.vname as uservname4, user4.nname as usernname4,
firma, vname2, nname2
FROM termin
LEFT JOIN termtyp ON termin.typ = termtyp.id
LEFT JOIN adresse ON termin.adresse_id = adresse.id
LEFT JOIN partner ON adresse.partner_id = partner.id
LEFT JOIN strasse ON adresse.str_id = strasse.id
LEFT JOIN ort ON strasse.ort_id = ort.id
LEFT JOIN user ON termin.user = user.id
LEFT JOIN user AS user2 ON termin.user2 = user2.id
LEFT JOIN user AS user3 ON termin.user3 = user3.id
LEFT JOIN user AS user4 ON termin.user4 = user4.id
WHERE DATE_FORMAT(termtime,'%Y%m%d') = '".date("Ymd",strtotime("+".$i." days"))."' AND termdauer < '12:00:00'
ORDER BY termtime ASC") or $err=error("fehler beim ermitteln der termine<br />".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$termine[] = $res;
}
$feiertag = feiertag_bayern(idate("d",strtotime("+".$i." days")),idate("m",strtotime("+".$i." days")),idate("Y",strtotime("+".$i." days")));
if($feiertag){
$weekdays[]=array( "weekday"=>date("d.m.Y",strtotime("+".$i." days"))."<br/>",
"date"=>strftime("%Y%m%d",strtotime("+".$i." days")),
"termine"=>$termine,
"fulldaytermine"=>$fulldaytermine,
"numfulldaytermine" => 0,
"ma_check"=>$ma_check,
"feiertag" => $feiertag
);
}
else{
$weekdays[]=array( "weekday"=>strftime("%A",strtotime("+".$i." days"))."<br/>".date("d.m.Y",strtotime("+".$i." days")),
"date"=>strftime("%Y%m%d",strtotime("+".$i." days")),
"termine"=>$termine,
"fulldaytermine"=>$fulldaytermine,
"numfulldaytermine" => 0,
"ma_check"=>$ma_check,
"feiertag" => ""
);
}
}
$smarty->assign("page",$_GET["page"]);
$smarty->assign("weekdays",$weekdays);
$qry=mysqli_query($dbconn,"SELECT id, vname, nname, color FROM user WHERE blocked = 0 AND nick != 'ALL'");
while($res=mysqli_fetch_assoc($qry))
{
//$res["color"] = $colors[$res["id"]];
$res["openvacation"] = urlaub_remaining($dbconn, $res["id"]);
$users[$res["id"]] = $res;
}
$smarty->assign("users",$users);
$smarty->assign("page", $seite);
$smarty->assign("weekdays", kalenderTage($dbconn, $seite));
$smarty->assign("users", kalenderBenutzer($dbconn));
$smarty->display("calendar.tpl");
}
?>
+76 -407
View File
@@ -1,422 +1,91 @@
<?php
<?php
require_once "incs/termin.php";
if($_GET["id"] && $_GET["del"] == 1)
/*
* Termin anlegen, ändern, löschen oder als erledigt markieren.
*
* Die Terminliste kann mehrere Termine auf einmal abhaken oder löschen;
* dafür kommt id=multi und je Zeile ein Ankreuzfeld erl<N> bzw. del<N>.
*/
/* Die angekreuzten Termine einer Mehrfachauswahl */
function angekreuzteTermine($praefix)
{
if($_GET["id"] == "multi"){
for( $i=1; $i<=$_POST["pagesize"]; $i++){
mysqli_query($dbconn,"DELETE FROM termin WHERE id='".$_POST["del".$i]."'") or $err=error("Konnte Haupttermin nicht löschen<br />".mysqli_error($dbconn));
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".$_POST["del".$i]."'" or $err=error("Konnte Nebentermine nicht löschen<br />".mysqli_error($dbconn)));
}
if(!$err)
doneNreturn("Erfolgreich gelöscht");
}
else{
$qry = mysqli_query($dbconn,"SELECT * FROM termin WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
$res = mysqli_fetch_assoc($qry);
if(!$res)
$err = error("Dieser Termin existiert nicht!");
mysqli_query($dbconn,"DELETE FROM termin WHERE id='".$res["id"]."'") or $err=error("Konnte Haupttermin nicht löschen<br />".mysqli_error($dbconn));
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".$res["id"]."'" or $err=error("Konnte Nebentermine nicht löschen<br />".mysqli_error($dbconn)));
$ids = array();
$anzahl = isset($_POST["pagesize"]) ? (int)$_POST["pagesize"] : 0;
for($i = 1; $i <= $anzahl; $i++)
if(!empty($_POST[$praefix.$i]))
$ids[] = (int)$_POST[$praefix.$i];
return $ids;
}
$mehrfach = isset($_GET["id"]) && $_GET["id"] === "multi";
$terminid = parameterGanzzahl("id");
$adressid = parameterGanzzahl("adressid");
$err = 0;
if(($mehrfach || $terminid) && parameterGanzzahl("del") == 1)
{
foreach($mehrfach ? angekreuzteTermine("del") : array($terminid) as $id)
if(!$err)
doneNreturn("Erfolgreich gelöscht");
$err = loescheTerminreihe($dbconn, $id);
if(!$err)
{
doneNreturn("Erfolgreich gelöscht");
return;
}
}
elseif($_GET["id"] && $_GET["done"])
elseif(($mehrfach || $terminid) && !empty($_GET["done"]))
{
if($_GET["id"] == "multi"){
for( $i=1; $i<=$_POST["pagesize"]; $i++){
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE id='".$_POST["erl".$i]."'") or $err+=error("Konnte Haupttermin nicht als erledigt markieren<br />".mysqli_error($dbconn));
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE main_id='".$_POST["erl".$i]."'") or $err+=error("Konnte Nebentermine nicht als erledigt markieren<br />".mysqli_error($dbconn));
}
$erledigt = $_GET["done"] != "no";
foreach($mehrfach ? angekreuzteTermine("erl") : array($terminid) as $id)
if(!$err)
doneNreturn("Erfolgreich geändert!");
}
else{
$qry = mysqli_query($dbconn,"SELECT * FROM termin WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
$res = mysqli_fetch_assoc($qry);
if(!$res)
$err = error("Dieser Termin existiert nicht!");
if($_GET["done"] == "yes")
{
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE id='".$res["id"]."'") or $err=error("Konnte Haupttermin nicht als erledigt markieren<br />".mysqli_error($dbconn));
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE main_id='".$res["id"]."'") or $err=error("Konnte Nebentermine nicht als erledigt markieren<br />".mysqli_error($dbconn));
}
elseif($_GET["done"] == "no")
{
mysqli_query($dbconn,"UPDATE termin SET done = 0 WHERE id='".$res["id"]."'") or $err=error("Konnte Haupttermin nicht als nicht erledigt markieren<br />".mysqli_error($dbconn));
mysqli_query($dbconn,"UPDATE termin SET done = 0 WHERE main_id='".$res["id"]."'") or $err=error("Konnte Nebentermine nicht als nicht erledigt markieren<br />".mysqli_error($dbconn));
}
if(!$err)
doneNreturn("Erfolgreich geändert!");
$err = setzeTerminErledigt($dbconn, $id, $erledigt);
if(!$err)
{
doneNreturn("Erfolgreich geändert!");
return;
}
}
$qry = mysqli_query($dbconn,"SELECT plz, ortsteil, ort, str, hnr, vname, partner_id, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, anrede2_id, titel2_id
FROM adresse
LEFT JOIN strasse ON str_id = strasse.id
LEFT JOIN ort ON ort_id = ort.id
LEFT JOIN land ON land_id = land.id
WHERE adresse.id='".mysql_escape_string($_GET["adressid"])."'
ORDER BY typ_id ASC") or $err = error("Fehler beim abrufen der Daten ".mysqli_error($dbconn));
$kdnres=mysqli_fetch_assoc($qry);
if($_GET["user"])
$smarty->assign("user",$_GET["user"]);
if(!$kdnres["partner_id"])
$kunde = terminAdresse($dbconn, $adressid);
if(empty($kunde["partner_id"]))
$adressid = 0;
if(!$err && parameterGanzzahl("formsent") == 1)
{
$_GET["adressid"] = 0;
$err = speichereTermin($dbconn, $terminid, $adressid);
if(!$err)
{
doneNreturn("Erfolgreich eingetragen");
return;
}
// bei einem Fehler die Eingaben im Formular stehen lassen
$smarty->assign("termin", $_POST);
}
if($_GET["formsent"] == 1)
{
$head = mysql_escape_string(trim($_POST["head"]));
$user = mysql_escape_string(trim($_POST["user"]));
$user2 = mysql_escape_string(trim($_POST["user2"]));
$user3 = mysql_escape_string(trim($_POST["user3"]));
$user4 = mysql_escape_string(trim($_POST["user4"]));
$text = mysql_escape_string(trim($_POST["text"]));
$typ = mysql_escape_string(trim($_POST["typ"]));
$done = mysql_escape_string(trim($_POST["done"]));
$folge = mysql_escape_string(trim($_POST["folge"]));
$folgetyp = mysql_escape_string(trim($_POST["folgetyp"]));
$folgedays = mysql_escape_string(trim($_POST["folgedays"]));
$datetime_start = dispdate_to_mysql_date(mysql_escape_string(trim($_POST["datetime_start"])),0);
$datetime_end = dispdate_to_mysql_date(mysql_escape_string(trim($_POST["datetime_end"])),1);
$_POST["termtime"] = $datetime_start;
$_POST["termend"] = $datetime_end;
$dauer = $_POST["termdauer"] = mysql_dauer($datetime_start,$datetime_end);
$days = 1;
$split_dauer = explode(":",$dauer);
if($split_dauer[0]>12 || $typ == 0)
{
$days = ceil($dauer/24);
$dauer = "24:00:00";
$_POST["termtime"] = $datetime_start = substr($datetime_start,0,11)."00:00:00";
$_POST["termend"] = $datetime_end = substr($datetime_start,0,11)."23:59:00";
}
$datetime_start_tmp =$datetime_start;
if($days > 1 && $_GET["id"])
{
mysqli_query($dbconn,"DELETE FROM termin WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
$_GET["id"] = "";
}
else
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".mysqli_escape_string($dbconn,$_GET["id"])."' AND id != '".mysqli_escape_string($dbconn,$_GET["id"])."'");
if($done == 0){
for($i=0;$i<$days;$i++)
{
$datetime_start_tmp = date("Y-m-d H:i:s",strtotime("+".$i." day",strtotime($datetime_start)));
$qry = mysqli_query($dbconn,"SELECT * FROM
( SELECT id,user, user2, user3, user4, termtime,
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
as subselect
WHERE
(user='$user' OR user2='$user' OR user3='$user' OR user4='$user') AND
(
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
$res=mysqli_fetch_assoc($qry);
if(!$res && $user2)
{
$qry = mysqli_query($dbconn,"SELECT * FROM
( SELECT id,user, user2, user3, user4, termtime,
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
as subselect
WHERE
(user='$user2' OR user2='$user2' OR user3='$user2' OR user4='$user2') AND
(
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
$res=mysqli_fetch_assoc($qry);
}
if(!$res && $user3)
{
$qry = mysqli_query($dbconn,"SELECT * FROM
( SELECT id,user, user2, user3, user4, termtime,
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
as subselect
WHERE
(user='$user3' OR user2='$user3' OR user3='$user3' OR user4='$user3') AND
(
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
$res=mysqli_fetch_assoc($qry);
}
if(!$res && $user4)
{
$qry = mysqli_query($dbconn,"SELECT * FROM
( SELECT id,user, user2, user3, user4, termtime,
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
as subselect
WHERE
(user='$user4' OR user2='$user4' OR user3='$user4' OR user4='$user4') AND
(
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
$res=mysqli_fetch_assoc($qry);
}
if($res && $res["id"] != $_GET["id"])
{
$err=error("Dieser Mitarbeiter hat zu der Zeit bereits einen Termin, er kann nicht an zwei Orten gleichzeitig sein.");
break;
}
}
}
if(!$err)
{
for($i=0;$i<$days;$i++)
{
$datetime_start_tmp = date("Y-m-d H:i:s",strtotime("+".$i." day",strtotime($datetime_start)));
if(strstr($datetime_start_tmp,"1970")){
echo "NICHTTERMINIERT!!";
$datetime_start_tmp = "0000-00-00 00:00:00";
}
if($_GET["id"])
{
$qry=mysqli_query($dbconn,"SELECT * FROM termin WHERE id = '".mysqli_escape_string($dbconn,($_GET["id"]))."'");
if ($res=mysqli_fetch_assoc($qry))
{
if($done && $folge && !$res["followed_by"] && !$i)
{
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
text='',
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
typ='$folgetyp',
changetime=NOW(),
datetime=NOW(),
done='0',
termtime='',
termdauer='',
user='$user',
user2='$user2',
user3='$user3',
user4='$user4',
changeuser='".$_SESSION["user"]."',
act_date=DATE_ADD(CURDATE(),INTERVAL $folgedays DAY)") or $err=error("Fehler beim anlegen des Folgetermins<br />".mysqli_error($dbconn));
$res["followed_by"] = mysqli_insert_id($dbconn);
mysqli_query($dbconn,"UPDATE termin SET main_id = '".$res["followed_by"]."' WHERE id='".$res["followed_by"]."'");
}
if(!$i)
{
mysqli_query($dbconn,"UPDATE termin SET head='$head',
text='$text',
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
typ='$typ',
changetime=NOW(),
done='$done',
termtime='$datetime_start_tmp',
termdauer='$dauer',
changeuser='".$_SESSION["user"]."',
user='$user',
user2='$user2',
user3='$user3',
user4='$user4',
followed_by='".$res["followed_by"]."'
WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'") or $err=error("Fehler beim ändern des Termins<br />".mysqli_error($dbconn));
}
}
else
$err=error("dieser Termin existiert nicht!");
}
else
{
if($done && $folge && !$err && !$i)
{
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
text='',
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
typ='$folgetyp',
changetime=NOW(),
datetime=NOW(),
done='0',
termtime='',
termdauer='',
changeuser='".$_SESSION["user"]."',
user='$user',
user2='$user2',
user3='$user3',
user4='$user4',
act_date=DATE_ADD(CURDATE(),INTERVAL $folgedays DAY)") or $err=error("Fehler beim anlegen des Folgetermins<br />".mysqli_error($dbconn));
$res["followed_by"] = mysqli_insert_id($dbconn);
mysqli_query($dbconn,"UPDATE termin SET main_id = '".$res["followed_by"]."' WHERE id='".$res["followed_by"]."'");
}
if(!$err)
{
if(!$i)
{
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
text='$text',
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
typ='$typ',
changetime=NOW(),
datetime=NOW(),
done='$done',
termtime='$datetime_start_tmp',
termdauer='$dauer',
changeuser='".$_SESSION["user"]."',
user='$user',
user2='$user2',
user3='$user3',
user4='$user4',
followed_by='".$res["followed_by"]."'") or $err=error("Fehler beim anlegen des Termins<br />".mysqli_error($dbconn));
$main_id = mysqli_insert_id($dbconn);
mysqli_query($dbconn,"UPDATE termin SET main_id = '$main_id' WHERE id='$main_id'");
}
else
{
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
text='$text',
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
typ='$typ',
changetime=NOW(),
datetime=NOW(),
done='$done',
termtime='$datetime_start_tmp',
termdauer='$dauer',
changeuser='".$_SESSION["user"]."',
user='$user',
user2='$user2',
user3='$user3',
user4='$user4',
main_id='$main_id',
followed_by='".$res["followed_by"]."'") or $err=error("Fehler beim anlegen des Termins<br />".mysqli_error($dbconn));
}
}
}
}
if(!$err)
{
doneNreturn("Erfolgreich eingetragen");
}
}
if($err){
$smarty->assign("termin",$_POST);
}
//elseif(!$head)
// $err=error("Bitte geben Sie eine Terminbeschreibung an!");
}
$qry = mysqli_query($dbconn,"SELECT id, typ
FROM termtyp WHERE id > 0") or $err = error("Fehler beim abrufen der Termintypen<br />".mysqli_error($dbconn));
while($res = mysqli_fetch_assoc($qry))
{
$typids[] =$res["id"];
$typs[] = $res["typ"];
}
$smarty->assign("typs",$typs);
$smarty->assign("typids",$typids);
$typids=array();
$typs=array();
$qry = mysqli_query($dbconn,"SELECT id, vname, nname
FROM user WHERE blocked = 0 AND id > 0") or $err = error("Fehler beim abrufen der Benutzer<br />".mysqli_error($dbconn));
while($res = mysqli_fetch_assoc($qry))
{
$typids[] =$res["id"];
$typs[] = $res["vname"]." ".$res["nname"];
}
$smarty->assign("users",$typs);
$smarty->assign("userids",$typids);
$typs[]="Keiner";
$typids[]=0;
$smarty->assign("optusers",$typs);
$smarty->assign("optuserids",$typids);
$smarty->assign("days",array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40));
$smarty->assign("kunde",$kdnres);
if($_GET["id"])
{
$qry=mysqli_query($dbconn,"SELECT MIN(termtime) AS termtime,
SEC_TO_TIME(SUM(TIME_TO_SEC(termdauer))) AS termdauer,
head,
followed_by,
MIN(id) AS id,
main_id,
typ,adresse_id,
done,
user,
user2,
user3,
user4,
changeuser,
act_date,
text
FROM termin WHERE main_id = '".mysqli_escape_string($dbconn,$_GET["id"])."' GROUP BY main_id");
if ($res=mysqli_fetch_assoc($qry))
{
if($res["followed_by"] > 0)
{
$qry2=mysqli_query($dbconn, "SELECT DATE_FORMAT(act_date,'%Y-%m-%d'), typ_id FROM termin WHERE id = '".$res["followed_by"]."'");
$res2=mysqli_fetch_assoc($qry2);
$days = (strtotime($res2["act_date"]) - strtotime(date("Y-m-d"))) / (60 * 60 * 24);
$res["folgetyp"]= $res2["typ_id"];
if($days > 0)
$res["folgedays"] = $days;
}
$res["termend"] = dauer_to_date($res["termtime"], $res["termdauer"]);
if(strstr($res["termend"],"00:00:00")){
$res["termend"] = date("Y-m-d H:i:s",strtotime("-1 minutes",strtotime($res["termend"])));
}
$smarty->assign("termin",$res);
if($_GET["adressid"])
$smarty->assign("heading","Termin ändern");
else
$smarty->assign("heading","Urlaub / Krankheit ändern");
}
else
{
$err=error("Dieser Termin existiert nicht!");
}
}
else
{
$smarty->assign("termin",$_POST);
if($_GET["adressid"]){
$smarty->assign("heading","Neuer Termin");
}
else{
$smarty->assign("heading","Neuer Urlaub / Krankheitstag");
$typids=array();
$typs=array();
$qry = mysqli_query($dbconn,"SELECT id, typ
FROM termtyp WHERE typ = 'Urlaub' OR typ = 'Krankheit'") or $err = error("Fehler beim abrufen der Termintypen<br />".mysqli_error($dbconn));
while($res = mysqli_fetch_assoc($qry))
{
$typids[] =$res["id"];
$typs[] = $res["typ"];
}
$smarty->assign("vac_types_id",$typids);
$smarty->assign("vac_types_name",$typs);
}
}
$smarty->display("heading.tpl");
$smarty->display("addtermin.tpl");
terminAuswahllisten($dbconn, $smarty);
$smarty->assign("kunde", $kunde);
$smarty->assign("user", parameterGanzzahl("user"));
?>
if($terminid && !$err)
{
$termin = terminZumBearbeiten($dbconn, $terminid);
if(!$termin)
$err = error("Dieser Termin existiert nicht!");
else
{
$smarty->assign("termin", $termin);
$smarty->assign("heading", $adressid ? "Termin ändern" : "Urlaub / Krankheit ändern");
}
}
elseif(!$terminid)
{
if(!$err)
$smarty->assign("termin", $_POST);
$smarty->assign("heading", $adressid ? "Neuer Termin" : "Neuer Urlaub / Krankheitstag");
}
$smarty->display("heading.tpl");
$smarty->display("addtermin.tpl");
?>
+38 -64
View File
@@ -1,71 +1,45 @@
<?php
// GET: id OR date;type
<?php
/*
* Terminzettel als PDF: eine Seite je Termin, einmal zum Abheften und
* einmal mit Anfahrtsskizze. Aufruf entweder mit id (ein Termin) oder mit
* date (alle Termine eines Tages).
*/
require_once "incs/termin.php";
include("incs/makepdf.php");
$pdf = makerawPDFcopy(0);
if($_GET["id"] && !$_GET["date"])
{
$termin=maketerminarray($dbconn, $_GET["id"]);
$adresse=maketerminadresse($dbconn, $_GET["id"]);
$telnrn=maketelnrn($dbconn,$_GET["id"]);
makesingleterminpage($pdf,$termin,$adresse,$telnrn,0);
}
elseif($_GET["date"])
{
$qry=mysqli_query($dbconn,"SELECT id FROM termin WHERE adresse_id AND DATE_FORMAT(termtime,'%Y%m%d') = '".date("Ymd",strtotime($_GET["date"]))."' ORDER BY termtime ASC");
if($_GET["type"]="singlepages")
{
$prevpage=0;
while($res=mysqli_fetch_assoc($qry))
{
if($prevpage)
$pdf->addpage();
$prevpage=1;
$termin=maketerminarray($dbconn, $res["id"]);
$adresse=maketerminadresse($dbconn, $res["id"]);
$telnrn=maketelnrn($dbconn,$res["id"]);
makesingleterminpage($pdf,$termin,$adresse,$telnrn,0);
}
}
}
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
savePDF($pdf,"./temp/pdftemp/$tmppdfname.pdf");
$smarty->assign("pdffile","./temp/pdftemp/$tmppdfname.pdf");
$terminid = parameterGanzzahl("id");
$datum = isset($_GET["date"]) && is_string($_GET["date"]) ? date("Y-m-d", strtotime($_GET["date"])) : "";
$pdf = makerawPDFanfahrt(0);
if($_GET["id"] && !$_GET["date"])
$ids = array();
if($terminid && !$datum)
$ids[] = $terminid;
elseif($datum)
{
$termin=maketerminarray($dbconn, $_GET["id"]);
$adresse=maketerminadresse($dbconn, $_GET["id"]);
$googleadresse=makegooglestring($dbconn, $_GET["id"]);
$telnrn=maketelnrn($dbconn,$_GET["id"]);
makesingleterminpage($pdf,$termin,$adresse,$telnrn,1,$googleadresse);
$zeilen = db_zeilen($dbconn, "SELECT id FROM termin WHERE adresse_id != 0 AND DATE(termtime) = ? ORDER BY termtime ASC", array($datum));
foreach((array)$zeilen as $z)
$ids[] = $z["id"];
}
elseif($_GET["date"])
{
$qry=mysqli_query($dbconn,"SELECT id FROM termin WHERE adresse_id AND DATE_FORMAT(termtime,'%Y%m%d') = '".date("Ymd",strtotime($_GET["date"]))."' ORDER BY termtime ASC");
if($_GET["type"]="singlepages")
{
$prevpage=0;
while($res=mysqli_fetch_assoc($qry))
{
if($prevpage)
$pdf->addpage();
$prevpage=1;
$termin=maketerminarray($dbconn, $res["id"]);
$adresse=maketerminadresse($dbconn, $res["id"]);
$googleadresse=makegooglestring($dbconn,$res["id"]);
$telnrn=maketelnrn($dbconn,$res["id"]);
makesingleterminpage($pdf,$termin,$adresse,$telnrn,1,$googleadresse);
}
}
}
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
savePDF($pdf,"./temp/pdftemp/$tmppdfname.pdf");
$smarty->assign("pdffile2","./temp/pdftemp/$tmppdfname.pdf");
/* $anfahrt = 0 für den Terminzettel, 1 für die Seite mit der Karte */
function terminzettel($dbconn, $ids, $anfahrt)
{
$pdf = $anfahrt ? makerawPDFanfahrt(0) : makerawPDFcopy(0);
$erste = true;
foreach($ids as $id)
{
if(!$erste)
$pdf->addpage();
$erste = false;
$googleadresse = $anfahrt ? makegooglestring($dbconn, $id) : "";
makesingleterminpage($pdf, maketerminarray($dbconn, $id), maketerminadresse($dbconn, $id),
maketelnrn($dbconn, $id), $anfahrt, $googleadresse);
}
$name = str_replace(array(" ", "."), array("_", "_"), microtime());
savePDF($pdf, "./temp/pdftemp/$name.pdf");
return "./temp/pdftemp/$name.pdf";
}
$smarty->assign("pdffile", terminzettel($dbconn, $ids, 0));
$smarty->assign("pdffile2", terminzettel($dbconn, $ids, 1));
$smarty->display("terminshow.tpl");
?>
?>
+3 -15
View File
@@ -6,21 +6,9 @@ $kdnres=makeadressarray($dbconn, $_GET["adressid"]);
if($kdnres["partner_id"])
{
$kdnres["adressid"] = $_GET["adressid"];
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede");
while($res=mysqli_fetch_assoc($qry))
{
$typnames[$res["id"]] = $res["anrede"];
}
$smarty->assign("anrs",$typnames);
$typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel");
while($res=mysqli_fetch_assoc($qry))
{
$typnames[$res["id"]] = $res["titel"];
}
$smarty->assign("titels",$typnames);
list($anrs, $titels) = anredenUndTitel($dbconn);
$smarty->assign("anrs",$anrs);
$smarty->assign("titels",$titels);
$smarty->assign("adresse",$kdnres);
$smarty->display("umschlagshow.tpl");
+138 -138
View File
@@ -1,4 +1,4 @@
<div class="centersidebyside">
<div class="centersidebyside">
<div class="sidebyside">
{if $rechnung.typ_id && !$newtype}
{$type = $rechnung.typ_id}
@@ -23,72 +23,72 @@
{elseif $type == 6}
{$typename="Mahnung"}
{/if}
<h2>{$typename} {$headstr}:</h2>
<form action="?action=rechnungadd&formsent=1&id={$loadrech}" name="mainform" id='rechnform' method='POST'>
<h2>{$typename|escape} {$headstr|escape}:</h2>
<form action="?action=rechnungadd&formsent=1&id={$loadrech|escape}" name="mainform" id='rechnform' method='POST'>
<input type="hidden" name="type" value="{$type|escape}" />
<input type="hidden" name="adressid" value="{$adresse.id|escape}" />
<input type="hidden" name="partnerid" value="{$adresse.partner_id|escape}" />
<fieldset class='nolim'>
<legend>{$typename} an <a href="?action=kundenshow&id={$adresse.partner_id}">Kunde {$adresse.partner_id}</a></legend>
<legend>{$typename|escape} an <a href="?action=kundenshow&id={$adresse.partner_id|escape}">Kunde {$adresse.partner_id|escape}</a></legend>
{if $adresse.firma}
<label class='checktext'><input type="checkbox" name="show_firmaanr" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_FIRMAANR:1 || $rechnung.adressfields==0}checked="checked"{/if} />Firma</label>
<label class='checktext'><input type="checkbox" name="show_firma" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_FIRMA:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.firma}</label>
<label class='checktext'><input type="checkbox" name="show_firma" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_FIRMA:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.firma|escape}</label>
{/if}
{if $adresse.anrede_id > 1}
<label class='checktext'><input type="checkbox" name="show_anr" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ANR1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$anrs.{$adresse.anrede_id}}</label>
<label class='checktext'><input type="checkbox" name="show_anr" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ANR1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$anrs.{$adresse.anrede_id}|escape}</label>
{/if}
{if $adresse.titel_id > 1}
<label class='checktext'><input type="checkbox" name="show_titel" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_TITEL1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$titels.{$adresse.titel_id}}</label>
<label class='checktext'><input type="checkbox" name="show_titel" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_TITEL1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$titels.{$adresse.titel_id}|escape}</label>
{/if}
{if $adresse.vname || $adresse.nname}
<label class='checktext'><input type="checkbox" name="show_name" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_NAME1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.vname} {$adresse.nname}</label>
<label class='checktext'><input type="checkbox" name="show_name" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_NAME1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.vname|escape} {$adresse.nname|escape}</label>
{/if}
<br />
{if $adresse.anrede2_id > 1}
<label class='checktext'><input type="checkbox" name="show_anr2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ANR2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$anrs.{$adresse.anrede2_id}}</label>
<label class='checktext'><input type="checkbox" name="show_anr2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ANR2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$anrs.{$adresse.anrede2_id}|escape}</label>
{/if}
{if $adresse.titel2_id > 1}
<label class='checktext'><input type="checkbox" name="show_titel2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_TITEL2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$titels.{$adresse.titel2_id}}</label>
<label class='checktext'><input type="checkbox" name="show_titel2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_TITEL2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$titels.{$adresse.titel2_id}|escape}</label>
{/if}
{if $adresse.vname2 || $adresse.nname2}
<label class='checktext'><input type="checkbox" name="show_name2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_NAME2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.vname2} {$adresse.nname2}</label>
<label class='checktext'><input type="checkbox" name="show_name2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_NAME2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.vname2|escape} {$adresse.nname2|escape}</label>
{/if}
{if $adresse.str}
<label class='checktext'><input type="checkbox" name="show_str" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_STR:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.str} {$adresse.hnr}</label>
<label class='checktext'><input type="checkbox" name="show_str" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_STR:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.str|escape} {$adresse.hnr|escape}</label>
{/if}
{if $adresse.plz || $adresse.ort}
<label class='checktext'><input type="checkbox" name="show_ort" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ORT:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.plz} {$adresse.ort}
<label class='checktext'><input type="checkbox" name="show_ort" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ORT:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.plz|escape} {$adresse.ort|escape}
{/if}
{if $adresse.ortsteil}
- {$adresse.ortsteil}
- {$adresse.ortsteil|escape}
{/if}
{if $adresse.plz || $adresse.ort}
</label>
{/if}
{if $adresse.land}
<label class='checktext'><input type="checkbox" name="show_land" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_LAND:1}checked="checked"{/if} />{$adresse.land}</label>
<label class='checktext'><input type="checkbox" name="show_land" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_LAND:1}checked="checked"{/if} />{$adresse.land|escape}</label>
{/if}
{if $adresse.zusatz}
<label class='checktext'><input type="checkbox" name="show_zusatz" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ZUSATZ:1}checked="checked"{/if} />{$adresse.zusatz|truncate:60:"...":false}</label>
<label class='checktext'><input type="checkbox" name="show_zusatz" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ZUSATZ:1}checked="checked"{/if} />{$adresse.zusatz|truncate:60:"...":false|escape}</label>
{/if}
<br />
<label>Adresserweiterung: </label><input name="adresserweiterung" value="{$rechnung.adresserweiterung}" />
<label>Adresserweiterung: </label><input name="adresserweiterung" value="{$rechnung.adresserweiterung|escape}" />
<br />
<p>
<label>Währung:</label>
<select name='wahrung'>
{html_options values=$wahrids output=$wahrs selected="{$rechnung.wahrung_id|default:1}"}
{html_options values=$wahrids output=$wahrs selected="{$rechnung.wahrung_id|default:1|escape}"}
</select><br />
<label>Mehrwertsteuer:</label>
<select name='mwst'>
{html_options values=$mwstids output=$mwsts selected="{$rechnung.mwst_id|default:2}"}
{html_options values=$mwstids output=$mwsts selected="{$rechnung.mwst_id|default:2|escape}"}
</select>
<br />
{if $type == 1}
<label>Zahlungsziel:</label>
<select name='zahlziel'>
{html_options values=$zzielids output=$zziels selected="{$rechnung.zahlziel_id|default:2}"}
{html_options values=$zzielids output=$zziels selected="{$rechnung.zahlziel_id|default:2|escape}"}
</select>
{else}
<input type='hidden' name='zahlziel' value='1'>
@@ -100,10 +100,10 @@
<div class="leftalign">
<br />
<label>Rabatt:</label>
<input name='rabatt' id='rabatt' maxlength='3' pattern="[0-9]{ldelim}0,3{rdelim}" value="{$rechnung.rabatt}" /><b>%</b>
<input name='rabatt' id='rabatt' maxlength='3' pattern="[0-9]{ldelim}0,3{rdelim}" value="{$rechnung.rabatt|escape}" /><b>%</b>
<br />
<label>Rabatt Beschreibung:</label>
<input name='rabattdesc' id='rabattdesc' maxlength='100' value="{$rechnung.rabattdesc}" />
<input name='rabattdesc' id='rabattdesc' maxlength='100' value="{$rechnung.rabattdesc|escape}" />
</div>
{/if}
@@ -114,71 +114,71 @@
<p>
<br />
<label>Anrede:</label>
{if $anrs.{$adresse.anrede_id} == "Herrn" || $anrs.{$adresse.anrede_id} == "Herr"}
{if $anrs.{$adresse.anrede_id} == "Herrn" || $anrs.{$adresse.anrede_id|escape} == "Herr"}
{strip}
<input value='
{if $rechnung.anr1}
$rechnung.anr1
{if $rechnung.anrede1}
{$rechnung.anrede1|escape}
{else}
Sehr geehrter Herr{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{$titels.{$adresse.titel_id}|escape}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{$adresse.vname|escape}{" "}
{/if}
{$adresse.nname},
{$adresse.nname|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Herrn" || $anrs.{$adresse.anrede_id} == "Herr"}
{elseif $anrs.{$adresse.anrede2_id} == "Herrn" || $anrs.{$adresse.anrede_id|escape} == "Herr"}
{strip}
<input value='
{if $rechnung.anr1}
$rechnung.anr1
{if $rechnung.anrede1}
{$rechnung.anrede1|escape}
{else}
Sehr geehrter Herr{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{$titels.{$adresse.titel2_id}|escape}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{$adresse.vname2|escape}{" "}
{/if}
{$adresse.nname2},
{$adresse.nname2|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede_id} == "Frau"}
{strip}
<input value='
{if $rechnung.anr1}
$rechnung.anr1
{if $rechnung.anrede1}
{$rechnung.anrede1|escape}
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{$titels.{$adresse.titel_id}|escape}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{$adresse.vname|escape}{" "}
{/if}
{$adresse.nname},
{$adresse.nname|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Frau"}
{strip}
<input value='
{if $rechnung.anr1}
$rechnung.anr1
{if $rechnung.anrede1}
{$rechnung.anrede1|escape}
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{$titels.{$adresse.titel2_id}|escape}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{$adresse.vname2|escape}{" "}
{/if}
{$adresse.nname2},
{$adresse.nname2|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
@@ -187,37 +187,37 @@
{/if}
<label>Zweite Anrede:</label>
{if $anrs.{$adresse.anrede_id} == "Frau" && $anrs.{$adresse.anrede2_id} == "Herrn"}
{if $anrs.{$adresse.anrede_id} == "Frau" && $anrs.{$adresse.anrede2_id|escape} == "Herrn"}
{strip}
<input value='
{if $rechnung.anr2}
$rechnung.anr2
{if $rechnung.anrede2}
{$rechnung.anrede2|escape}
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{$titels.{$adresse.titel_id}|escape}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{$adresse.vname|escape}{" "}
{/if}
{$adresse.nname},
{$adresse.nname|escape},
{/if}
' id='anr2' maxlength='150' name='anr2' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Frau"}
{strip}
<input value='
{if $rechnung.anr2}
$rechnung.anr2
{if $rechnung.anrede2}
{$rechnung.anrede2|escape}
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{$titels.{$adresse.titel2_id}|escape}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{$adresse.vname2|escape}{" "}
{/if}
{$adresse.nname2},
{$adresse.nname2|escape},
{/if}
' id='anr2' maxlength='150' name='anr2' /><br />
{/strip}
@@ -226,22 +226,22 @@
{/if}
<label class='artlabel'>{if $type != 5}Einleitungstext{else}Text{/if}:</label><br />
<center><textarea name='intro' id='intro' {if $type == 5}class='tinymce'{else}class='bigtextarea'{/if}>{$rechnung.intro}
{if $newtype == 6}Leider haben wir bis zum heutigen Tag noch keinen vollständigen Zahlungseingang zur Rechnung Nr. {$rechnung.drechnr} erhalten. Deshalb bitten wir Sie, den fehlenden Betrag bis zum angegeben Zahlungsziel auf unser Konto zu überweisen.{/if}
<center><textarea name='intro' id='intro' {if $type == 5}class='tinymce'{else}class='bigtextarea'{/if}>{$rechnung.intro|escape}
{if $newtype == 6}Leider haben wir bis zum heutigen Tag noch keinen vollständigen Zahlungseingang zur Rechnung Nr. {$rechnung.drechnr|escape} erhalten. Deshalb bitten wir Sie, den fehlenden Betrag bis zum angegeben Zahlungsziel auf unser Konto zu überweisen.{/if}
</textarea></center>
</p>
{/if}
{if $type == 1}
{if $smarty.session.firma == "Wagner Markisen"}
<label>Lieferdatum:</label><input value='{$rechnung.lieferdatum|default:"Lieferdatum ist gleich Rechnungsdatum"}' id='lieferdatum' maxlength='100' name='lieferdatum' /><br />
<label>Lieferdatum:</label><input value='{$rechnung.lieferdatum|default:"Lieferdatum ist gleich Rechnungsdatum"|escape}' id='lieferdatum' maxlength='100' name='lieferdatum' /><br />
{else}
<label>Lieferdatum:</label><input value='{$rechnung.lieferdatum|default:""}' id='lieferdatum' maxlength='100' name='lieferdatum' /><br />
<label>Lieferdatum:</label><input value='{$rechnung.lieferdatum|default:""|escape}' id='lieferdatum' maxlength='100' name='lieferdatum' /><br />
{/if}
{/if}
{if $type == 1}
<label>Buchungskonto:</label>
<select name='buchKto'>
{html_options values=$buchKtoids output=$buchKtos selected="{$rechnung.buchungsKto_id|default:1}"}
{html_options values=$buchKtoids output=$buchKtos selected="{$rechnung.buchungsKto_id|default:1|escape}"}
</select>
{else}
<input type='hidden' name='buchKto' value='1'>
@@ -264,30 +264,30 @@
<button type="button" class='swart' onclick="swart({$artnr|escape});"></button>
{/if}
{if $type == 3}
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr}" id="1angtyp{$artnr}" value="1" {if $art.art.angtyp == 1}checked="checked"{/if} />Normal</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr}" id="2angtyp{$artnr}" value="2" {if $art.art.angtyp == 2}checked="checked"{/if} />Optional</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr}" id="3angtyp{$artnr}" value="3" {if $art.art.angtyp == 3}checked="checked"{/if} />Alternativ</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr|escape}" id="1angtyp{$artnr|escape}" value="1" {if $art.art.angtyp == 1}checked="checked"{/if} />Normal</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr|escape}" id="2angtyp{$artnr|escape}" value="2" {if $art.art.angtyp == 2}checked="checked"{/if} />Optional</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr|escape}" id="3angtyp{$artnr|escape}" value="3" {if $art.art.angtyp == 3}checked="checked"{/if} />Alternativ</label><br />
{else}
<input type="hidden" name="angtyp{$artnr}" id="1angtyp{$artnr}" value="1" />
<input type="hidden" name="angtyp{$artnr}" id="2angtyp{$artnr}" value="1" />
<input type="hidden" name="angtyp{$artnr}" id="3angtyp{$artnr}" value="1" />
<input type="hidden" name="angtyp{$artnr|escape}" id="1angtyp{$artnr|escape}" value="1" />
<input type="hidden" name="angtyp{$artnr|escape}" id="2angtyp{$artnr|escape}" value="1" />
<input type="hidden" name="angtyp{$artnr|escape}" id="3angtyp{$artnr|escape}" value="1" />
{/if}
</td>
<td>
{if $art.art.pagebreak}
<button type="button" class='pagebreak' id='pagebreakimg{$artnr}' onclick="togglePageBreak({$artnr});" title='<b>Manueller Seitenumbruch</b><br />Durch klick wird der erzwungene Seitenumbruch an dieser Stelle entfernt.'></button>
<input type='hidden' id='pagebreak{$artnr}' name='pagebreak{$artnr}' value='1' />
<button type="button" class='pagebreak' id='pagebreakimg{$artnr|escape}' onclick="togglePageBreak({$artnr|escape});" title='<b>Manueller Seitenumbruch</b><br />Durch klick wird der erzwungene Seitenumbruch an dieser Stelle entfernt.'></button>
<input type='hidden' id='pagebreak{$artnr|escape}' name='pagebreak{$artnr|escape}' value='1' />
{else}
<button type="button" class='nopagebreak' id='pagebreakimg{$artnr}' onclick="togglePageBreak({$artnr});" title='<b>Automatischer Seitenumbruch</b><br />Durch klick wird eine neue Seite an dieser Stelle Erzwungen'></button>
<input type='hidden' id='pagebreak{$artnr}' name='pagebreak{$artnr}' value='' />
<button type="button" class='nopagebreak' id='pagebreakimg{$artnr|escape}' onclick="togglePageBreak({$artnr|escape});" title='<b>Automatischer Seitenumbruch</b><br />Durch klick wird eine neue Seite an dieser Stelle Erzwungen'></button>
<input type='hidden' id='pagebreak{$artnr|escape}' name='pagebreak{$artnr|escape}' value='' />
{/if}
<label class='checktext'><input type="checkbox" class="artcheck" name="artact{$artnr}" id="artact{$artnr}" value="1" checked="checked" onclick="artactivate({$artnr|escape})" title='Ohne Haken wird dieser Artikel nicht angezeigt und nicht gespeichert' />Aktiv</label><br />
<label class='artlabel'>Artikeltyp:</label><select class='artselect' name='arttyp{$artnr}' id='arttyp{$artnr}'>
{html_options values=$typids output=$typs selected="{$art.art.typ_id}"}
<label class='checktext'><input type="checkbox" class="artcheck" name="artact{$artnr|escape}" id="artact{$artnr|escape}" value="1" checked="checked" onclick="artactivate({$artnr|escape})" title='Ohne Haken wird dieser Artikel nicht angezeigt und nicht gespeichert' />Aktiv</label><br />
<label class='artlabel'>Artikeltyp:</label><select class='artselect' name='arttyp{$artnr|escape}' id='arttyp{$artnr|escape}'>
{html_options values=$typids output=$typs selected="{$art.art.typ_id|escape}"}
</select><br />
<label class='artlabel'>Artikelbeschreibung:</label><br />
<input class='art' value='{$art.art.bezeichn|escape}' id='arthead{$artnr}' maxlength='50' name='arthead{$artnr}' onInput='addArtBlock({$type|escape},{$artnr});' /><br />
<div id='arteig{$artnr}'>
<input class='art' value='{$art.art.bezeichn|escape}' id='arthead{$artnr|escape}' maxlength='50' name='arthead{$artnr|escape}' onInput='addArtBlock({$type|escape},{$artnr|escape});' /><br />
<div id='arteig{$artnr|escape}'>
{$eignr = 0}
{foreach $art.eig as $eigensch}
{$eignr = $eignr+1}
@@ -295,12 +295,12 @@
<div class="sweig_spacer"></div>
{else}
<br />
<button type="button" class='sweig' onclick="sweig({$artnr},{$eignr});"></button>
<button type="button" class='sweig' onclick="sweig({$artnr|escape},{$eignr|escape});"></button>
{/if}
<input class='arteig' value='{$eigensch.bezeichn|escape}' id='arteig{$artnr}_{$eignr}' maxlength='100' name='arteig{$artnr}_{$eignr}' onChange='addEigBlock({$artnr},{$eignr});' />
<input class='artval' value='{$eigensch.wert|escape}' id='artval{$artnr}_{$eignr}' maxlength='50' name='artval{$artnr}_{$eignr}' />
<select name='arteinh{$artnr}_{$eignr}' id='arteinh{$artnr}_{$eignr}' class='arteinh'>
{html_options values=$einhids output=$einhs selected="{$eigensch.einheit_id}"}
<input class='arteig' value='{$eigensch.bezeichn|escape}' id='arteig{$artnr|escape}_{$eignr|escape}' maxlength='100' name='arteig{$artnr|escape}_{$eignr|escape}' onChange='addEigBlock({$artnr|escape},{$eignr|escape});' />
<input class='artval' value='{$eigensch.wert|escape}' id='artval{$artnr|escape}_{$eignr|escape}' maxlength='50' name='artval{$artnr|escape}_{$eignr|escape}' />
<select name='arteinh{$artnr|escape}_{$eignr|escape}' id='arteinh{$artnr|escape}_{$eignr|escape}' class='arteinh'>
{html_options values=$einhids output=$einhs selected="{$eigensch.einheit_id|escape}"}
</select>
{/foreach}
{$eignr = $eignr+1}
@@ -308,50 +308,50 @@
<div class="sweig_spacer"></div>
{else}
<br />
<button type="button" class='sweig' onclick="sweig({$artnr},{$eignr});"></button>
<button type="button" class='sweig' onclick="sweig({$artnr|escape},{$eignr|escape});"></button>
{/if}
<input class='arteig' value='' id='arteig{$artnr}_{$eignr}' maxlength='100' name='arteig{$artnr}_{$eignr}' onChange='addEigBlock({$artnr},{$eignr});' />
<input class='artval' value='' id='artval{$artnr}_{$eignr}' maxlength='50' name='artval{$artnr}_{$eignr}' />
<select name='arteinh{$artnr}_{$eignr}' id='arteinh{$artnr}_{$eignr}' class='arteinh'>
<input class='arteig' value='' id='arteig{$artnr|escape}_{$eignr|escape}' maxlength='100' name='arteig{$artnr|escape}_{$eignr|escape}' onChange='addEigBlock({$artnr|escape},{$eignr|escape});' />
<input class='artval' value='' id='artval{$artnr|escape}_{$eignr|escape}' maxlength='50' name='artval{$artnr|escape}_{$eignr|escape}' />
<select name='arteinh{$artnr|escape}_{$eignr|escape}' id='arteinh{$artnr|escape}_{$eignr|escape}' class='arteinh'>
{html_options values=$einhids output=$einhs selected="1"}
</select>
</div>
<p>
<label class='artlabel'>Bestellnummer (WA-Nr.):</label><br />
<input class='artwa' value='{$art.art.wanr}' id='artwa{$artnr}' maxlength='50' name='artwa{$artnr}' />
<input class='artwa' value='{$art.art.wanr|escape}' id='artwa{$artnr|escape}' maxlength='50' name='artwa{$artnr|escape}' />
<label>Mwst:</label>
<select name='artmwst{$artnr}' id='artmwst{$artnr}' class='arteinh'>
{html_options values=$artmwstids output=$artmwsts selected="{$art.art.mwst_id|default:1}"}
<select name='artmwst{$artnr|escape}' id='artmwst{$artnr|escape}' class='arteinh'>
{html_options values=$artmwstids output=$artmwsts selected="{$art.art.mwst_id|default:1|escape}"}
</select>
</p>
</td>
<td class="pricetd">
<label class='artlabel'>Menge:</label><br />
<input class='artmen' value='{$art.art.menge|replace:".":","}' id='artmen{$artnr}' maxlength='7' pattern="\d{ldelim}0,3{rdelim}(,\d{ldelim}0,3{rdelim})?" name='artmen{$artnr}' />
<select name='artmeneinh{$artnr}' id='artmeneinh{$artnr}' class='artmeneinh'>
{html_options values=$einhids output=$einhs selected="{$art.art.einheit_id}"}
<input class='artmen' value='{$art.art.menge|replace:".":","|escape}' id='artmen{$artnr|escape}' maxlength='7' pattern="\d{ldelim}0,3{rdelim}(,\d{ldelim}0,3{rdelim})?" name='artmen{$artnr|escape}' />
<select name='artmeneinh{$artnr|escape}' id='artmeneinh{$artnr|escape}' class='artmeneinh'>
{html_options values=$einhids output=$einhs selected="{$art.art.einheit_id|escape}"}
</select><br />
<label class='artlabel'>Preis:</label><br />
<input class='artpr' value='{$art.art.preis|replace:".":","}' id='artpr{$artnr}' pattern="-?\d+(,\d{ldelim}2{rdelim})?" name='artpr{$artnr}' /><br />
<input class='artpr' value='{$art.art.preis|replace:".":","|escape}' id='artpr{$artnr|escape}' pattern="-?\d+(,\d{ldelim}2{rdelim})?" name='artpr{$artnr|escape}' /><br />
<label class='artlabel'>Rabatt:</label><br />
<input class='artpr' value='{$art.art.rabatt}' id='artrab{$artnr}' maxlength='3' pattern="[0-9]*" name='artrab{$artnr}' /><b>%</b>
<label class='checktext'><input type="checkbox" name="artrabtyp{$artnr}" id="artrabtyp{$artnr}" value="1" {if $art.art.rabatttyp} checked='checked'{/if} />Winterrabatt</label>
<input class='artpr' value='{$art.art.rabatt|escape}' id='artrab{$artnr|escape}' maxlength='3' pattern="[0-9]*" name='artrab{$artnr|escape}' /><b>%</b>
<label class='checktext'><input type="checkbox" name="artrabtyp{$artnr|escape}" id="artrabtyp{$artnr|escape}" value="1" {if $art.art.rabatttyp} checked='checked'{/if} />Winterrabatt</label>
<br />
</td>
</tr>
<script>
$(function() {
$( "#arthead{$artnr}" ).autocomplete({
$( "#arthead{$artnr|escape}" ).autocomplete({
source: "ajax/auto/art.php",
minLength: 2,
select: function( event, ui ) {
i=0;
$("#arthead{$artnr}").val(ui.item.value);
$("#artpr{$artnr}").val(ui.item.preis);
$("#arttyp{$artnr}").val(ui.item.typ);
$("#artmeneinh{$artnr}").val(ui.item.einh);
cleareig({$artnr});
$("#arthead{$artnr|escape}").val(ui.item.value);
$("#artpr{$artnr|escape}").val(ui.item.preis);
$("#arttyp{$artnr|escape}").val(ui.item.typ);
$("#artmeneinh{$artnr|escape}").val(ui.item.einh);
cleareig({$artnr|escape});
i=0;
if(ui.item.eig)
{
@@ -359,9 +359,9 @@
{
i++;
addEigBlock(1,i);
$("#arteig{$artnr}_"+i).val(value.des);
$("#artval{$artnr}_"+i).val(value.val);
$("#arteinh{$artnr}_"+i).val(value.einh);
$("#arteig{$artnr|escape}_"+i).val(value.des);
$("#artval{$artnr|escape}_"+i).val(value.val);
$("#arteinh{$artnr|escape}_"+i).val(value.einh);
});
}
return false;
@@ -378,71 +378,71 @@
<button type="button" class='swart' onclick="swart({$artnr|escape});"></button>
{/if}
{if $type == 3 || $type == 5}
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr}" id="1angtyp{$artnr}" value="1" />Normal</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr}" id="2angtyp{$artnr}" value="2" />Optional</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr}" id="3angtyp{$artnr}" value="3" />Alternativ</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr|escape}" id="1angtyp{$artnr|escape}" value="1" />Normal</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr|escape}" id="2angtyp{$artnr|escape}" value="2" />Optional</label><br />
<label class='artlabel'><input type="radio" class="artcheck" name="angtyp{$artnr|escape}" id="3angtyp{$artnr|escape}" value="3" />Alternativ</label><br />
{else}
<input type="hidden" name="angtyp{$artnr}" id="1angtyp{$artnr}" value="1" />
<input type="hidden" name="angtyp{$artnr}" id="2angtyp{$artnr}" value="1" />
<input type="hidden" name="angtyp{$artnr}" id="3angtyp{$artnr}" value="1" />
<input type="hidden" name="angtyp{$artnr|escape}" id="1angtyp{$artnr|escape}" value="1" />
<input type="hidden" name="angtyp{$artnr|escape}" id="2angtyp{$artnr|escape}" value="1" />
<input type="hidden" name="angtyp{$artnr|escape}" id="3angtyp{$artnr|escape}" value="1" />
{/if}
</td>
<td>
<button type="button" class='nopagebreak' id='pagebreakimg{$artnr}' onclick="togglePageBreak({$artnr});" title='<b>Automatischer Seitenumbruch</b><br />Durch klick wird eine neue Seite an dieser Stelle Erzwungen'></button>
<input type='hidden' id='pagebreak{$artnr}' name='pagebreak{$artnr}' value='' />
<button type="button" class='nopagebreak' id='pagebreakimg{$artnr|escape}' onclick="togglePageBreak({$artnr|escape});" title='<b>Automatischer Seitenumbruch</b><br />Durch klick wird eine neue Seite an dieser Stelle Erzwungen'></button>
<input type='hidden' id='pagebreak{$artnr|escape}' name='pagebreak{$artnr|escape}' value='' />
<label class='checktext'><input type="checkbox" class="artcheck" name="artact{$artnr}" id="artact{$artnr}" value="1" checked="checked" onclick="artactivate({$artnr|escape})" title='Ohne Haken wird dieser Artikel nicht angezeigt und nicht gespeichert' />Aktiv</label><br />
<label class='artlabel'>Artikeltyp:</label><select class='artselect' name='arttyp{$artnr}' id='arttyp{$artnr}'>
<label class='checktext'><input type="checkbox" class="artcheck" name="artact{$artnr|escape}" id="artact{$artnr|escape}" value="1" checked="checked" onclick="artactivate({$artnr|escape})" title='Ohne Haken wird dieser Artikel nicht angezeigt und nicht gespeichert' />Aktiv</label><br />
<label class='artlabel'>Artikeltyp:</label><select class='artselect' name='arttyp{$artnr|escape}' id='arttyp{$artnr|escape}'>
{html_options values=$typids output=$typs selected="1"}
</select><br />
<label class='artlabel'>Artikelbeschreibung:</label><br />
<input class='art' value='' id='arthead{$artnr}' maxlength='50' name='arthead{$artnr}' onInput='addArtBlock({$type|escape},{$artnr});' /><br />
<div id='arteig{$artnr}'>
<input class='art' value='' id='arthead{$artnr|escape}' maxlength='50' name='arthead{$artnr|escape}' onInput='addArtBlock({$type|escape},{$artnr|escape});' /><br />
<div id='arteig{$artnr|escape}'>
{$eignr = 1}
<div class="sweig_spacer"></div>
<input class='arteig' value='' id='arteig{$artnr}_{$eignr}' maxlength='100' name='arteig{$artnr}_{$eignr}' onChange='addEigBlock({$artnr},{$eignr});' />
<input class='artval' value='' id='artval{$artnr}_{$eignr}' maxlength='50' name='artval{$artnr}_{$eignr}' />
<select name='arteinh{$artnr}_{$eignr}' id='arteinh{$artnr}_{$eignr}' class='arteinh'>
<input class='arteig' value='' id='arteig{$artnr|escape}_{$eignr|escape}' maxlength='100' name='arteig{$artnr|escape}_{$eignr|escape}' onChange='addEigBlock({$artnr|escape},{$eignr|escape});' />
<input class='artval' value='' id='artval{$artnr|escape}_{$eignr|escape}' maxlength='50' name='artval{$artnr|escape}_{$eignr|escape}' />
<select name='arteinh{$artnr|escape}_{$eignr|escape}' id='arteinh{$artnr|escape}_{$eignr|escape}' class='arteinh'>
{html_options values=$einhids output=$einhs selected="1"}
</select>
</div>
<p>
<label class='artlabel'>Bestellnummer (WA-Nr.):</label><br />
<input class='artwa' value='' id='artwa{$artnr}' maxlength='50' name='artwa{$artnr}' />
<input class='artwa' value='' id='artwa{$artnr|escape}' maxlength='50' name='artwa{$artnr|escape}' />
<label>Mwst:</label>
<select name='artmwst{$artnr}' id='artmwst{$artnr}' class='arteinh'>
{html_options values=$artmwstids output=$artmwsts selected="{$art.art.mwst_id|default:1}"}
<select name='artmwst{$artnr|escape}' id='artmwst{$artnr|escape}' class='arteinh'>
{html_options values=$artmwstids output=$artmwsts selected="{$art.art.mwst_id|default:1|escape}"}
</select>
</p>
</td>
<td class="pricetd">
<label class='artlabel'>Menge:</label><br />
<input class='artmen' value='' id='artmen{$artnr}' maxlength='7' pattern="\d{ldelim}0,3{rdelim}+(,\d{ldelim}0,3{rdelim})?" name='artmen{$artnr}' />
<select name='artmeneinh{$artnr}' id='artmeneinh{$artnr}' class='artmeneinh'>
<input class='artmen' value='' id='artmen{$artnr|escape}' maxlength='7' pattern="\d{ldelim}0,3{rdelim}+(,\d{ldelim}0,3{rdelim})?" name='artmen{$artnr|escape}' />
<select name='artmeneinh{$artnr|escape}' id='artmeneinh{$artnr|escape}' class='artmeneinh'>
{html_options values=$einhids output=$einhs selected="5"}
</select><br />
<label class='artlabel'>Preis:</label><br />
<input class='artpr' value='' id='artpr{$artnr}' pattern="-?\d+(,\d{ldelim}2{rdelim})?" name='artpr{$artnr}' /><br />
<input class='artpr' value='' id='artpr{$artnr|escape}' pattern="-?\d+(,\d{ldelim}2{rdelim})?" name='artpr{$artnr|escape}' /><br />
<label class='artlabel'>Rabatt:</label><br />
<input class='artpr' value='' id='artrab{$artnr}' maxlength='3' pattern="[0-9]*" name='artrab{$artnr}' /><b>%</b>
<label class='checktext'><input type="checkbox" name="artrabtyp{$artnr}" id="artrabtyp{$artnr}" value="1" />Winterrabatt</label>
<input class='artpr' value='' id='artrab{$artnr|escape}' maxlength='3' pattern="[0-9]*" name='artrab{$artnr|escape}' /><b>%</b>
<label class='checktext'><input type="checkbox" name="artrabtyp{$artnr|escape}" id="artrabtyp{$artnr|escape}" value="1" />Winterrabatt</label>
<br />
</td>
</tr>
<script>
$(function() {
$( "#arthead{$artnr}" ).autocomplete({
$( "#arthead{$artnr|escape}" ).autocomplete({
source: "ajax/auto/art.php",
minLength: 2,
select: function( event, ui ) {
i=0;
$("#arthead{$artnr}").val(ui.item.value);
$("#artpr{$artnr}").val(ui.item.preis);
$("#arttyp{$artnr}").val(ui.item.typ);
$("#artmeneinh{$artnr}").val(ui.item.einh);
cleareig({$artnr});
$("#arthead{$artnr|escape}").val(ui.item.value);
$("#artpr{$artnr|escape}").val(ui.item.preis);
$("#arttyp{$artnr|escape}").val(ui.item.typ);
$("#artmeneinh{$artnr|escape}").val(ui.item.einh);
cleareig({$artnr|escape});
i=0;
if(ui.item.eig)
{
@@ -450,9 +450,9 @@
{
i++;
addEigBlock(1,i);
$("#arteig{$artnr}_"+i).val(value.des);
$("#artval{$artnr}_"+i).val(value.val);
$("#arteinh{$artnr}_"+i).val(value.einh);
$("#arteig{$artnr|escape}_"+i).val(value.des);
$("#artval{$artnr|escape}_"+i).val(value.val);
$("#arteinh{$artnr|escape}_"+i).val(value.einh);
});
}
return false;
@@ -470,11 +470,11 @@
<fieldset class='nolim'>
<legend>Rechnungsabschluss:</legend>
<label class='artlabel'>Abschlusstext:</label><br />
<textarea class='bigtextarea' name='outro' id='outro' >{$rechnung.outro}</textarea>
<textarea class='bigtextarea' name='outro' id='outro' >{$rechnung.outro|escape}</textarea>
{if $kommission}
<p>
<label>Kommission: </label> {$kommission.vname} {$kommission.nname} {$kommission.str} {$kommission.hnr}, {$kommission.plz} {$kommission.ort}
<input type='hidden' name='kommission' id='kommission' value='{$kommission.id}' />
<label>Kommission: </label> {$kommission.vname|escape} {$kommission.nname|escape} {$kommission.str|escape} {$kommission.hnr|escape}, {$kommission.plz|escape} {$kommission.ort|escape}
<input type='hidden' name='kommission' id='kommission' value='{$kommission.id|escape}' />
</p>
{/if}
<br />
@@ -503,7 +503,7 @@
{if $draft && $loaddraft == 0}
<script>
askdraft("Sie haben {if $typename == "Angebot"}das{else if $typename == "Brief"}den{else}die{/if} zuletzt bearbeitete {$typename} nicht gespeichert.<br />{$draftname} ({$draftstr})<br />Möchten Sie daran nun weiter Arbeiten? Falls nein werden diese Daten gelöscht.",{$draft},{$type},{$draftadressid});
askdraft("Sie haben {if $typename == "Angebot"}das{else if $typename == "Brief"}den{else}die{/if} zuletzt bearbeitete {$typename|escape} nicht gespeichert.<br />{$draftname|escape} ({$draftstr|escape})<br />Möchten Sie daran nun weiter Arbeiten? Falls nein werden diese Daten gelöscht.",{$draft|escape},{$type|escape},{$draftadressid|escape});
</script>
{else}
<script>
+3 -3
View File
@@ -5,7 +5,7 @@
{/if}
<h2>Termin für Kunde Nummer:</h2>
<span class='big'>{$kunde.partner_id}</span><br />
{$kunde.vname} {$kunde.nname} {$kunde.firma}<br />{$kunde.str} {$kunde.hnr}<br />{$kunde.plz} {$kunde.ort}
{$kunde.vname|escape} {$kunde.nname|escape} {$kunde.firma|escape}<br />{$kunde.str|escape} {$kunde.hnr|escape}<br />{$kunde.plz|escape} {$kunde.ort|escape}
{/if}
{if $user}
{$termin.user = $user}
@@ -45,10 +45,10 @@
</select><br />
{/if}
<label>Beschreibung:</label>
<input name='head' id='head' maxlength='100' value='{$termin.head}' />
<input name='head' id='head' maxlength='100' value='{$termin.head|escape}' />
<br />
<label kundeclass='artlabel'>Notizen:</label>
<textarea class='bigtextarea' id='text' name='text'>{$termin.text}</textarea><p>
<textarea class='bigtextarea' id='text' name='text'>{$termin.text|escape}</textarea><p>
<label class='checktext'><input type="checkbox" id='done' name="done" value="1" {if $termin.done == 1}checked="checked"{/if} />Termin ist erledigt</label>
</p>
<br />
+15 -15
View File
@@ -50,9 +50,9 @@
{foreach $weekday.fulldaytermine as $key=>$termin}
<a href='?action=terminshow&id={$termin.main_id}'>
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: 1em;height: {$height}em;top: {$start}em;left: {$shift + $dayXpos}em;background-color: {$users.{$termin.user}.color};'
title='{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname} {$termin.usernname}</b><br /> Ganztags<br />{if {$termin.ort}}<b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />{/if}{if {$termin.vname} || {$termin.nname} || {$termin.firma}}Bei {$termin.vname} {$termin.nname} {$termin.firma}{/if}'>
<span class='rotate' style='padding-top: {$shift}em;'>{$termin.typ|substr:0:3}.</span>
style='width: 1em;height: {$height}em;top: {$start}em;left: {$shift + $dayXpos}em;background-color: {$users.{$termin.user}.color|escape};'
title='{$termin.typ|escape}<br />{$termin.head|escape} - <b>{$termin.uservname|escape} {$termin.usernname|escape}</b><br /> Ganztags<br />{if {$termin.ort}}<b>In {$termin.ort|escape}{if $termin.ortsteil}-{$termin.ortsteil|escape}{/if}</b><br />{/if}{if {$termin.vname} || {$termin.nname} || {$termin.firma}}Bei {$termin.vname|escape} {$termin.nname|escape} {$termin.firma|escape}{/if}'>
<span class='rotate' style='padding-top: {$shift}em;'>{$termin.typ|substr:0:3|escape}.</span>
</div>
</a>
{$shift = $shift+1.1}
@@ -107,19 +107,19 @@
{if {$termin.typ} != 'Arbeitsleistung'}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: {$width-0.3}em;height: {$height}em;top: {$start}em;left: {$dayXpos+ 0.1 + $shift}em;background-color: {$users.{$termin.user}.color}'
style='width: {$width-0.3}em;height: {$height}em;top: {$start}em;left: {$dayXpos+ 0.1 + $shift}em;background-color: {$users.{$termin.user}.color|escape}'
title='
{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname} {$termin.usernname}</b><br />
{$termin.typ|escape}<br />{$termin.head|escape} - <b>{$termin.uservname|escape} {$termin.usernname|escape}</b><br />
Um {$termin.termtime|date_format:'%k:%M'}Uhr<br />Dauer {if {$termin.termdauer|date_format:'%k'} > 0} {$termin.termdauer|date_format:'%k'}h{/if}
{if {$termin.termdauer|date_format:'%M'} > 0}{$termin.termdauer|date_format:'%M'}min{/if}<br />
<b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />
Bei {$termin.vname} {$termin.nname} {$termin.firma}'>
<b>In {$termin.ort|escape}{if $termin.ortsteil}-{$termin.ortsteil|escape}{/if}</b><br />
Bei {$termin.vname|escape} {$termin.nname|escape} {$termin.firma|escape}'>
{else}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: {$width-0.3}em;height: {$height}em;top: {$start}em;left: {$dayXpos+ 0.1 + $shift}em;background-color: {if $termin.done}#CFC{else}{$users.{$termin.user}.color}{/if};'
title='{$termin.typ} - {$termin.firma} {$termin.vname} {$termin.nname}<br /> <b>{$termin.projectname}</b> <br /> {$termin.head}<br /> <b>Dauer: </b>{$termin.termdauer|string_format:"%.1f"}h'>
style='width: {$width-0.3}em;height: {$height}em;top: {$start}em;left: {$dayXpos+ 0.1 + $shift}em;background-color: {if $termin.done}#CFC{else}{$users.{$termin.user}.color|escape}{/if};'
title='{$termin.typ|escape} - {$termin.firma|escape} {$termin.vname|escape} {$termin.nname|escape}<br /> <b>{$termin.projectname|escape}</b> <br /> {$termin.head|escape}<br /> <b>Dauer: </b>{$termin.termdauer|string_format:"%.1f"}h'>
{/if}
<span class='rotate'>{$termin.typ|substr:0:3}.</span>
<span class='rotate'>{$termin.typ|substr:0:3|escape}.</span>
</div>
</a>
{/foreach}
@@ -133,9 +133,9 @@
{$width = 9}
{$start = $ma_nr + 0.5}
<div class='mabox'
style='width: {$width}em;height: {$height}em;top: {$start}em;left: {$dayXpos+ 0.5}em;background-color: {$mitarb.color};'
title='{$mitarb.vname} {$mitarb.nname} - Anwesend {if {$mitarb.complete} == 0} aber noch nicht ausgestempelt{/if}<br />'>
{if {$mitarb.complete} == 0}<font color='#aa0000'>{else}<font color='#000000'>{/if}{$mitarb.vname} {$mitarb.nname|substr:0:1}.</font>
style='width: {$width}em;height: {$height}em;top: {$start}em;left: {$dayXpos+ 0.5}em;background-color: {$mitarb.color|escape};'
title='{$mitarb.vname|escape} {$mitarb.nname|escape} - Anwesend {if {$mitarb.complete} == 0} aber noch nicht ausgestempelt{/if}<br />'>
{if {$mitarb.complete} == 0}<font color='#aa0000'>{else}<font color='#000000'>{/if}{$mitarb.vname|escape} {$mitarb.nname|substr:0:1|escape}.</font>
</div>
</a>
{/foreach}
@@ -169,9 +169,9 @@
</div>
{foreach $users as $user}
{if $user.openvacation < 0}
<a href='?action=terminadd&user={$user.id}' style="color: #000;" title='Urlaub eintragen'><span class='legendcolbox' style='background-color: {$user.color}'>{$user.vname} {$user.nname} <font color='#cc0000'><b>({$user.openvacation})</b></font></span></a>
<a href='?action=terminadd&user={$user.id}' style="color: #000;" title='Urlaub eintragen'><span class='legendcolbox' style='background-color: {$user.color|escape}'>{$user.vname|escape} {$user.nname|escape} <font color='#cc0000'><b>({$user.openvacation|escape})</b></font></span></a>
{else}
<a href='?action=terminadd&user={$user.id}' style="color: #000;" title='Urlaub eintragen'><span class='legendcolbox' style='background-color: {$user.color}'>{$user.vname} {$user.nname} <b>({$user.openvacation})</b></span></a>
<a href='?action=terminadd&user={$user.id}' style="color: #000;" title='Urlaub eintragen'><span class='legendcolbox' style='background-color: {$user.color|escape}'>{$user.vname|escape} {$user.nname|escape} <b>({$user.openvacation|escape})</b></span></a>
{/if}
{/foreach}
<br />
-276
View File
@@ -1,276 +0,0 @@
<p>
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<p>
&nbsp;
</p>
<br />
<div id='monthview'>
<a href='?action=termin&show=list'><span class='cal-list' title="Terminliste anzeigen" style='position: absolute; left: 50%;top: -11em;'></span></a><br />
<a href='?action=termin&show=month&page={$page-1}'><span class='left' title="6 Monate zurück" style='position: absolute; left: 0;top: -8em;'></span></a>
<a href='?action=termin&show=month&page=0'><span class='now' title="heute" style='position: absolute; left: 50%;top: -8em;'></span></a>
<a href='?action=termin&show=month&page={$page+1}'><span class='right' title="6 Monate Tage vor" style='position: absolute; right: 0;top: -8em;'></span></a>
{if $page == 0}
{*<a href='?action=terminadd&date=0' title='Neuer Termin'>*}<div class='nowweekdaybg'></div>{*</a>*}
{else}
<div class='weekdaybg' style='left: 14em;'>
</div>
{/if}
{foreach $weekdays as $weekday}
{$lastarbtermend = 0}
{if $i == 1 && $page == 0}
<div class='nowweekdayhead' style='left: {10*$i+3.5}em;'>{$weekday.weekday}
<a href='?action=terminshow&id=1&date={$weekday.date}&type=singlepages'><span class='print' title="Alle Termine von heute drucken" style='position:absolute;top: 0em;right:0em;'></span></a>
</div>
{else if {$weekday.weekday|substr:0:7} != "Samstag" && {$weekday.weekday|substr:0:7} != "Sonntag"}
<div class='weekdayhead' style='left: {10*$i+3.5}em;'>{$weekday.weekday}<br />
<a href='?action=terminshow&id=1&date={$weekday.date}&type=singlepages'><span class='print' title="Alle Termine an diesem Tag drucken" style='position:absolute;top: 0em;right:0em;'></span></a>
</div>
{*<a href='?action=terminadd&date={$i-1}' title='Neuer Termin'>*}<div class='weekdaybg' style='left: {10*$i+4}em;'></div>{*</a>*}
{else}
<div class='weekdayhead' style='left: {10*$i+3.5}em;background-color: #FFDDDD;'>{$weekday.weekday}<br />
<a href='?action=terminshow&id=1&date={$weekday.date}&type=singlepages'><span class='print' title="Alle Termine an diesem Tag drucken" style='position:absolute;top: 0em;right:0em;'></span></a>
</div>
{*<a href='?action=terminadd&date={$i-1}' title='Neuer Termin'>*}<div class='weekdaybg' style='left: {10*$i+4}em;background-color: #FFFFFF;'></div>{*</a>*}
{/if}
<div class='weekday_line' style='left: {10*$i+3.5}em;'></div>
{$shift = 0}
{$prevtermin= ""}
{$absmaxshift.{$weekday.weekday} = 1}
{$absmaxshiftone.{$weekday.weekday} = 0}
{$shiftone = 0}
{foreach $weekday.termine as $key=>$termin}
{if {$termin.termdauer} == "24:00:00"}
{$termin.termdauer = "23:59:59"}
{/if}
{if {$prevtermin.termtime|date_format:"%H%M"} <= {$termin.termtime|date_format:"%H%M"} && {{$prevtermin.termtime|date_format:"%H%M"}+{$prevtermin.termdauer|date_format:"%H%M"}} > {$termin.termtime|date_format:"%H%M"}} {*starttime of next term is within the prev term*}
{if {$prevtermin.termdauer} == "23:59:59"}
{$shiftone = $shiftone+1}
{else}
{$shift = $shift+1}
{/if}
{/if}
{if $termin.termdauer == "23:59:59"}
{if $termin.user2 > 0}
{$shiftone = $shiftone+1}
{/if}
{if $termin.user3 > 0}
{$shiftone = $shiftone+1}
{/if}
{if $termin.user4 > 0}
{$shiftone = $shiftone+1}
{/if}
{else}
{if $termin.user2 > 0}
{$shift = $shift+1}
{/if}
{if $termin.user3 > 0}
{$shift = $shift+1}
{/if}
{if $termin.user4 > 0}
{$shift = $shift+1}
{/if}
{/if}
{$weekday.termine.{$key}.shift = $shift}
{$weekday.termine.{$key}.shiftone = $shiftone}
{if $shift+1 > $absmaxshift.{$weekday.weekday}}
{$absmaxshift.{$weekday.weekday} = $shift+1}
{/if}
{if $shiftone > $absmaxshiftone.{$weekday.weekday}}
{$absmaxshiftone.{$weekday.weekday} = $shiftone}
{/if}
{$prevtermin = $termin}
{/foreach}
{$width = ((18 / $absmaxshift.{$weekday.weekday})-$absmaxshiftone.{$weekday.weekday})}
{foreach $weekday.termine as $key=>$termin}
{$shift = 10*$i + 3.9 + ($width/2)*$termin.shift + $termin.shiftone}
{if {$termin.termdauer} == '24:00:00'}
{$terminlength = 960}
{$terminstart = 390}
{$height = ($terminlength/15)}
{$start = 4 + ($terminstart - 420)/15}
<a href='?action=terminshow&id={$termin.main_id}'>
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: 1em;height: {$height}em;top: {$start}em;left: {$shift}em;background-color: {$users.{$termin.user}.color}'
title='{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname} {$termin.usernname}</b><br /> Ganztags<br />{if {$termin.ort}}<b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />{/if}{if {$termin.vname} || {$termin.nname} || {$termin.firma}}Bei {$termin.vname} {$termin.nname} {$termin.firma}{/if}'>
<span class='rotate'>{$termin.typ|substr:0:3}.</span>
</div>
{else}
{$terminlength = ({$termin.termdauer|date_format:"%H"}*60 + {$termin.termdauer|date_format:"%M"})}
{$terminstart = ({$termin.termtime|date_format:"%H"}*60 + {$termin.termtime|date_format:"%M"})}
{if {$terminstart} == 0}
<a href='?action=projectadd&id={$termin.projectid}'>
{$terminlength = {$termin.termdauer}*60}
{$terminstart = 450+$lastarbtermend}
{$lastarbtermend = $terminstart-450 + $termin.termdauer * 60}
{$termin.typ = 'Arbeitsleistung'}
{else}
<a href='?action=terminshow&id={$termin.main_id}'>
{/if}
{$height = ($terminlength/15)}
{$start = 4 + ($terminstart - 420)/15}
{if {$termin.typ} != 'Arbeitsleistung'}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: {$width}em;height: {$height}em;top: {$start}em;left: {$shift}em;background-color: {$users.{$termin.user}.color}'
title='
{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname} {$termin.usernname}</b><br />
Um {$termin.termtime|date_format:'%k:%M'}Uhr<br />Dauer {if {$termin.termdauer|date_format:'%k'} > 0} {$termin.termdauer|date_format:'%k'}h{/if}
{if {$termin.termdauer|date_format:'%M'} > 0}{$termin.termdauer|date_format:'%M'}min{/if}<br />
<b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />
Bei {$termin.vname} {$termin.nname} {$termin.firma}'>
{else}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: {$width/3}em;height: {$height}em;top: {$start}em;left: {$shift}em;background-color: {if $termin.done}#CFC{else}{$users.{$termin.user}.color}{/if}'
title='
{$termin.typ} -
{$termin.firma} {$termin.vname} {$termin.nname}<br />
<b>{$termin.projectname}</b> <br />
{$termin.head}<br />
<b>Dauer: </b>{if {$termin.termdauer} > 1} {$termin.termdauer|string_format:"%.1f"}h{/if}<br />
{/if}
<span class='rotate'>{$termin.typ|substr:0:3}.</span>
</div>
{/if}
</a>
{if $termin.user2}
{$shift = 10*$i + 3.9 + ($width)*($termin.shift-1) + $termin.shiftone}
<a href='?action=terminshow&id={$termin.main_id}'>
{if {$termin.termdauer} == '24:00:00'}
{$terminlength = 960}
{$terminstart = 390}
{$height = ($terminlength/15)}
{$start = 4 + ($terminstart - 420)/15}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: 1em;height: {$height}em;top: {$start}em;left: {$shift}em;background-color: {$users.{$termin.user2}.color}'
title='{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname2} {$termin.usernname2}</b><br /> Ganztags<br />{if {$termin.ort}}<b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />{/if}{if {$termin.vname} || {$termin.nname} || {$termin.firma}}Bei {$termin.vname} {$termin.nname} {$termin.firma}{/if}'>
<span class='rotate'>{$termin.typ|substr:0:3}.</span>
</div>
{else}
{$terminlength = ({$termin.termdauer|date_format:"%H"}*60 + {$termin.termdauer|date_format:"%M"})}
{$terminstart = ({$termin.termtime|date_format:"%H"}*60 + {$termin.termtime|date_format:"%M"})}
{$height = ($terminlength/15)}
{$start = 4 + ($terminstart - 420)/15}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: {$width}em;height: {$height}em;top: {$start}em;left: {$shift}em;background-color: {$users.{$termin.user2}.color}'
title='{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname2} {$termin.usernname2}</b><br /> Um {$termin.termtime|date_format:'%k:%M'}Uhr<br />Dauer {if {$termin.termdauer|date_format:'%k'} > 0} {$termin.termdauer|date_format:'%k'}h{/if} {if {$termin.termdauer|date_format:'%M'} > 0}{$termin.termdauer|date_format:'%M'}min{/if}<br /> <b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />Bei {$termin.vname} {$termin.nname} {$termin.firma}'>
<span class='rotate'>{$termin.typ|substr:0:3}.</span>
</div>
{/if}
</a>
{/if}
{if $termin.user3}
{$shift = 10*$i + 3.9 + ($width)*($termin.shift-2) + $termin.shiftone}
<a href='?action=terminshow&id={$termin.main_id}'>
{if {$termin.termdauer} == '24:00:00'}
{$terminlength = 960}
{$terminstart = 390}
{$height = ($terminlength/15)}
{$start = 4 + ($terminstart - 420)/15}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: 1em;height: {$height}em;top: {$start}em;left: {$shift}em;background-color: {$users.{$termin.user3}.color}'
title='{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname3} {$termin.usernname3}</b><br /> Ganztags<br />{if {$termin.ort}}<b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />{/if}{if {$termin.vname} || {$termin.nname} || {$termin.firma}}Bei {$termin.vname} {$termin.nname} {$termin.firma}{/if}'>
<span class='rotate'>{$termin.typ|substr:0:3}.</span>
</div>
{else}
{$terminlength = ({$termin.termdauer|date_format:"%H"}*60 + {$termin.termdauer|date_format:"%M"})}
{$terminstart = ({$termin.termtime|date_format:"%H"}*60 + {$termin.termtime|date_format:"%M"})}
{$height = ($terminlength/15)}
{$start = 4 + ($terminstart - 420)/15}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: {$width}em;height: {$height}em;top: {$start}em;left: {$shift}em;background-color: {$users.{$termin.user3}.color}'
title='{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname3} {$termin.usernname3}</b><br /> Um {$termin.termtime|date_format:'%k:%M'}Uhr<br />Dauer {if {$termin.termdauer|date_format:'%k'} > 0} {$termin.termdauer|date_format:'%k'}h{/if} {if {$termin.termdauer|date_format:'%M'} > 0}{$termin.termdauer|date_format:'%M'}min{/if}<br /> <b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />Bei {$termin.vname} {$termin.nname} {$termin.firma}'>
<span class='rotate'>{$termin.typ|substr:0:3}.</span>
</div>
{/if}
</a>
{/if}
{if $termin.user4}
{$shift = 10*$i + 3.9 + ($width)*($termin.shift-3) + $termin.shiftone}
<a href='?action=terminshow&id={$termin.main_id}'>
{if {$termin.termdauer} == '24:00:00'}
{$terminlength = 960}
{$terminstart = 390}
{$height = ($terminlength/15)}
{$start = 4 + ($terminstart - 420)/15}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: 1em;height: {$height}em;top: {$start}em;left: {$shift}em;background-color: {$users.{$termin.user4}.color}'
title='{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname4} {$termin.usernname4}</b><br /> Ganztags<br />{if {$termin.ort}}<b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />{/if}{if {$termin.vname} || {$termin.nname} || {$termin.firma}}Bei {$termin.vname} {$termin.nname} {$termin.firma}{/if}'>
<span class='rotate'>{$termin.typ|substr:0:3}.</span>
</div>
{else}
{$terminlength = ({$termin.termdauer|date_format:"%H"}*60 + {$termin.termdauer|date_format:"%M"})}
{$terminstart = ({$termin.termtime|date_format:"%H"}*60 + {$termin.termtime|date_format:"%M"})}
{$height = ($terminlength/15)}
{$start = 4 + ($terminstart - 420)/15}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}'
style='width: {$width}em;height: {$height}em;top: {$start}em;left: {$shift}em;background-color: {$users.{$termin.user4}.color}'
title='{$termin.typ}<br />{$termin.head} - <b>{$termin.uservname4} {$termin.usernname4}</b><br /> Um {$termin.termtime|date_format:'%k:%M'}Uhr<br />Dauer {if {$termin.termdauer|date_format:'%k'} > 0} {$termin.termdauer|date_format:'%k'}h{/if} {if {$termin.termdauer|date_format:'%M'} > 0}{$termin.termdauer|date_format:'%M'}min{/if}<br /> <b>In {$termin.ort}{if $termin.ortsteil}-{$termin.ortsteil}{/if}</b><br />Bei {$termin.vname} {$termin.nname} {$termin.firma}'>
<span class='rotate'>{$termin.typ|substr:0:3}.</span>
</div>
{/if}
</a>
{/if}
{/foreach}
{$i=$i+1}
{/foreach}
{$i = 0}
{while $i < 16}
{$i = $i+1}
<div class='hourline_desc' style='top: {$i*4-0.5}em'>{{$i+6}|str_pad:2:'0':0}:00</div>
<div class='hourline' style='top: {$i*4}em'></div>
{/while}
{$time = {$smarty.now|date_format:"%H"}*60 + {$smarty.now|date_format:"%M"}}
<div id='timeline' style='top: {4 + ($time - 420)/15}em'></div>
{if $page == 0}
{for $i = 1 to 7}
<div class='weatherinfo' style="left: {3+10*$i}em;background-image: url('{$weather.{$i}.icon}');">
{$weather.{$i}.low}°C - {$weather.{$i}.high}°C
</div>
{/for}
{/if}
</div>
<br />
{foreach $users as $user}
<a href='?action=terminadd&user={$user.id}' style="color: #000;" title='Urlaub eintragen'><span class='legendcolbox' style='background-color: {$user.color}'>{$user.vname} {$user.nname}</span></a>
{/foreach}
<br />
<script type="text/javascript">
$(".terminbox").tooltip({
track: true,
delay: 0,
showURL: false,
showBody: " - ",
});
$(".doneterminbox").tooltip({
track: true,
delay: 0,
showURL: false,
showBody: " - ",
});
</script>
+3 -3
View File
@@ -3,8 +3,8 @@
<fieldset class="big">
<legend>Neue Adresse:</legend>
<div class='centersrc'>
{html_options name=adrsrc_field onChange="ajax_searchadress({$rechid},'changeadr',0)" id=adrsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'}
<input name='adrsrc_src' id='adrsrc_src' value='' class='searchform' onKeyUp="ajax_searchadress({$rechid},'changeadr',0)" title='Geben Sie hier das Suchmuster ein <br />% ist ein Platzhalter für eine beliebige Anzahl Zeichen<br />_ ist der Platzhalter für ein einziges Zeichen.' />
{html_options name=adrsrc_field onChange="ajax_searchadress(0,{$rechid|intval},'changeadr')" id=adrsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'}
<input name='adrsrc_src' id='adrsrc_src' value='' class='searchform' onKeyUp="ajax_searchadress(0,{$rechid|intval},'changeadr')" title='Geben Sie hier das Suchmuster ein <br />% ist ein Platzhalter für eine beliebige Anzahl Zeichen<br />_ ist der Platzhalter für ein einziges Zeichen.' />
<br />
</div>
@@ -14,4 +14,4 @@
</fieldset>
</form>
<script language='javascript'>ajax_searchadress({$rechid},'changeadr',0);</script>
<script language='javascript'>ajax_searchadress(0,{$rechid|intval},'changeadr');</script>
+3 -3
View File
@@ -3,8 +3,8 @@
<fieldset class="big">
<legend>Neue Adresse:</legend>
<div class='centersrc'>
{html_options name=adrsrc_field onChange='ajax_searchadress({$rechid},\'copy\',0)' id=adrsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'}
<input name='adrsrc_src' id='adrsrc_src' value='' class='searchform' onKeyUp='ajax_searchadress({$rechid},'copy',0)' title='Geben Sie hier das Suchmuster ein <br />% ist ein Platzhalter für eine beliebige Anzahl Zeichen<br />_ ist der Platzhalter für ein einziges Zeichen.' />
{html_options name=adrsrc_field onChange="ajax_searchadress(0,{$rechid|intval},'copy')" id=adrsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'}
<input name='adrsrc_src' id='adrsrc_src' value='' class='searchform' onKeyUp="ajax_searchadress(0,{$rechid|intval},'copy')" title='Geben Sie hier das Suchmuster ein <br />% ist ein Platzhalter für eine beliebige Anzahl Zeichen<br />_ ist der Platzhalter für ein einziges Zeichen.' />
<br />
</div>
@@ -14,4 +14,4 @@
</fieldset>
</form>
<script language='javascript'>ajax_searchadress({$rechid},'copy',0);</script>
<script language='javascript'>ajax_searchadress(0,{$rechid|intval},'copy');</script>
+2 -2
View File
@@ -5,7 +5,7 @@
<a href='?action=kundenadd'><span class='addcenter' title="Neuer Kunde"></span></a><br />
<div class='centersrc'>
{html_options name=kdnsrc_field onChange='ajax_searchkunden(0)' id=kdnsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'}
<input name='kdnsrc_src' id='kdnsrc_src' value='{$search}' class='searchform' onKeyUp='ajax_searchkunden(0)' autofocus='autofocus' title='Geben Sie hier das Suchmuster ein <br />% ist ein Platzhalter für eine beliebige Anzahl Zeichen<br />_ ist der Platzhalter für ein einziges Zeichen.' />
<input name='kdnsrc_src' id='kdnsrc_src' value='{$search|escape}' class='searchform' onKeyUp='ajax_searchkunden(0)' autofocus='autofocus' title='Geben Sie hier das Suchmuster ein <br />% ist ein Platzhalter für eine beliebige Anzahl Zeichen<br />_ ist der Platzhalter für ein einziges Zeichen.' />
<br />
</div>
@@ -15,7 +15,7 @@
</fieldset>
</form>
<script language='javascript'>ajax_searchkunden({$page});</script>
<script language='javascript'>ajax_searchkunden({$page|intval});</script>
<div id="question">
</div>
+13 -10
View File
@@ -42,9 +42,9 @@
{/if}
{if $adresse.gebdat != "01.01.2100" && $adresse.gebdat != "00.00.0000"}
{if $adresse.gebdat|substr:6:4 != "2099"}
(Geburtstag: {$adresse.gebdat})<br />
(Geburtstag: {$adresse.gebdat|escape})<br />
{else}
(Geburtstag: {$adresse.gebdat|substr:0:5})<br />
(Geburtstag: {$adresse.gebdat|escape|substr:0:5})<br />
{/if}
{/if}
{/if}
@@ -56,9 +56,9 @@
{/if}
{if $adresse.gebdat2 != "01.01.2100" && $adresse.gebdat2 != "00.00.0000"}
{if $adresse.gebdat2|substr:6:4 != "2099"}
(Geburtstag: {$adresse.gebdat2})<br />
(Geburtstag: {$adresse.gebdat2|escape})<br />
{else}
(Geburtstag: {$adresse.gebdat2|substr:0:5})<br />
(Geburtstag: {$adresse.gebdat2|escape|substr:0:5})<br />
{/if}
{/if}
{/if}
@@ -71,6 +71,9 @@
{$adresse.plz|escape|default:""} {$adresse.ort|escape|default:""} {$adresse.ortsteil|escape|default:""}<br />
<span>{$adresse.land|escape|default:""}</span>
{if $adresse.nr}
Telefon: {if $adresse.vwahl}{$adresse.vwahl|escape} / {/if}{$adresse.nr|escape}<br />
{/if}
</p>
<p>
@@ -78,7 +81,7 @@
{if $adresse.typ_id != 1}
<span class='del' title="Adresse löschen" onClick='askdel("Möchten Sie diese Adresse<br /><b>UND ALLE ZUGEHÖRIGEN RECHNUNGEN</b><br />wirklich unwiederruflich löschen?","?action=kundenchange&do=adress&adressid={$adresse.id}&del=1")'></span>
{/if}
<a href="http://maps.google.com?q={$adresse.plz}+{$adresse.ort}+{$adresse.str}+{$adresse.hnr}" class="noloading" target="_blank"><span class='map' title="Auf Karte zeigen"></span></a>
<a href="http://maps.google.com?q={$adresse.plz|escape:'url'}+{$adresse.ort|escape:'url'}+{$adresse.str|escape:'url'}+{$adresse.hnr|escape:'url'}" rel="noopener" class="noloading" target="_blank"><span class='map' title="Auf Karte zeigen"></span></a>
<a href='?action=terminadd&adressid={$adresse.id}'><span class='termadd' title="Termin anlegen"></span></a><br />
<a href='?action=rechnungadd&type=1&adressid={$adresse.id}'><span class='rechnadd' title="Rechnung anlegen"></span></a>
@@ -177,13 +180,13 @@
{/if}
{$i=$i+1}
{strip}
<fieldset class='note' style="background-color: {$note.color|default:'#fff'};">
<fieldset class='note' style="background-color: {$note.color|default:'#fff'|escape};">
<legend>{$note.datetime|date_format:"%a, %d.%m.%Y <br /> %R Uhr"}</legend>
{$note.notiz|nl2br|default:""}<br />
{$note.notiz|default:""|escape|nl2br}<br />
<p>
{if $note.id}
{if $note.file}
<a href='{$note.file}' target="_Blank" class='noloading'><span class='file' title="Angehängte Datei anzeigen"></span></a>
<a href='{$note.file|escape}' target="_Blank" class='noloading'><span class='file' title="Angehängte Datei anzeigen"></span></a>
{/if}
<a href='?action=kundenchange&do=notiz&notizid={$note.id}'><span class='edit' title="Notiz ändern"></span></a>
<span class='del' id='del' title="Notiz löschen" onClick='askdel("Möchten Sie diese Notiz wirklich unwiederruflich löschen?","?action=kundenchange&do=notiz&notizid={$note.id}&del=1")'></span>
@@ -211,7 +214,7 @@
{$i=$i+1}
{strip}
<fieldset class='small'>
<legend>{$kto.bank} <br />{$kto.blz|chunk_split:3:" "}</legend>
<legend>{$kto.bank|escape} <br />{$kto.blz|escape|chunk_split:3:" "}</legend>
Konto Nr.: {$kto.ktonr|escape|chunk_split:3:" "}<br />
Inhaber: {$kto.inhaber|escape}<br />
{if $kto.iban}
@@ -234,7 +237,7 @@
<div id="tabs">
<ul>
{foreach $rechtypen as $rechtyp}
<li><a href="#tabs-{$rechtyp.id}" class='noloading' onClick='ajax_searchkdnrech(0,0,{$rechtyp.id},{$kunde.id})'>{$rechtyp.typ}</a></li>
<li><a href="#tabs-{$rechtyp.id}" class='noloading' onClick='ajax_searchkdnrech(0,0,{$rechtyp.id},{$kunde.id})'>{$rechtyp.typ|escape}</a></li>
{/foreach}
</ul>
{foreach $rechtypen as $rechtyp}
+9 -6
View File
@@ -43,13 +43,16 @@
{$adresse.plz|escape|default:""} {$adresse.ort|escape|default:""} {$adresse.ortsteil|escape|default:""}<br />
<span>{$adresse.land|escape|default:""}</span>
{if $adresse.nr}
Telefon: {if $adresse.vwahl}{$adresse.vwahl|escape} / {/if}{$adresse.nr|escape}<br />
{/if}
</p>
<p>
<a href='?action=lieferchange&do=adress&adressid={$adresse.id}&kunde={$kunde.id}'><span class='edit' title="Adresse ändern"></span></a>
{if $adresse.typ_id != 1}
<span class='del' id='del' title="Adresse löschen" onClick='askdel("Möchten Sie diese Adresse wirklich unwiederruflich löschen?","?action=lieferchange&do=adress&adressid={$adresse.id}&del=1")'></span>
{/if}
<a href="http://maps.google.com?q={$adresse.plz}+{$adresse.ort}+{$adresse.str}+{$adresse.hnr}" class="noloading" target="_blank"><span class='map' title="Auf Karte zeigen"></span></a>
<a href="http://maps.google.com?q={$adresse.plz|escape:'url'}+{$adresse.ort|escape:'url'}+{$adresse.str|escape:'url'}+{$adresse.hnr|escape:'url'}" rel="noopener" class="noloading" target="_blank"><span class='map' title="Auf Karte zeigen"></span></a>
</p>
</fieldset>
{/strip}
@@ -116,7 +119,7 @@
<a href='?action=lieferchange&kunde={$kunde.id}&do=notiz'><span class='add' title="Neue Notiz"></span></a>
{foreach $notes as $note}
{strip}
<fieldset class='note' style="background-color: {$note.color|default:'#fff'};">
<fieldset class='note' style="background-color: {$note.color|default:'#fff'|escape};">
<legend>{$note.datetime|date_format:"%a, %d.%m.%Y <br /> %R Uhr"}</legend>
{$note.notiz|escape|default:""}<br />
<p>
@@ -134,7 +137,7 @@
{foreach $kontos as $kto}
{strip}
<fieldset class='small'>
<legend>{$kto.bank} <br />{$kto.blz|chunk_split:3:" "}</legend>
<legend>{$kto.bank|escape} <br />{$kto.blz|escape|chunk_split:3:" "}</legend>
Konto Nr.: {$kto.ktonr|escape|chunk_split:3:" "}<br />
Inhaber: {$kto.inhaber|escape}<br />
{if $kto.iban}
@@ -158,14 +161,14 @@
<div id="tabs">
<ul>
{foreach $rechtypen as $rechtyp}
<li><a href="#tabs-{$rechtyp.id}" class='noloading' onClick='ajax_searchkdnrech(0,{$rechtyp.id},{$kunde.id})'>{$rechtyp.typ}</a></li>
<li><a href="#tabs-{$rechtyp.id}" class='noloading' onClick='ajax_searchkdnrech(0,0,{$rechtyp.id},{$kunde.id})'>{$rechtyp.typ|escape}</a></li>
{/foreach}
</ul>
{foreach $rechtypen as $rechtyp}
<div id="tabs-{$rechtyp.id}">
<div class='centersrc'>
<input name='kdnsrc_src' id='src_rech-{$rechtyp.id}' value='' class='searchform' onKeyUp='ajax_searchkdnrech(0,{$rechtyp.id},{$kunde.id})' title='Geben Sie hier das Suchmuster ein <br />% ist ein Platzhalter für eine beliebige Anzahl Zeichen<br />_ ist der Platzhalter für ein einziges Zeichen.' />
<input name='kdnsrc_src' id='src_rech-{$rechtyp.id}' value='' class='searchform' onKeyUp='ajax_searchkdnrech(0,0,{$rechtyp.id},{$kunde.id})' title='Geben Sie hier das Suchmuster ein <br />% ist ein Platzhalter für eine beliebige Anzahl Zeichen<br />_ ist der Platzhalter für ein einziges Zeichen.' />
<br />
</div>
<div id='rechlist-{$rechtyp.id}'>
@@ -181,7 +184,7 @@
$(function() {
$( "#tabs" ).tabs();
});
ajax_searchkdnrech(0,1,{$kunde.id});
ajax_searchkdnrech(0,0,1,{$kunde.id});
</script>
<div id="question">
+29 -29
View File
@@ -15,11 +15,11 @@
{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'>
<h2>{$typename|escape} {$headstr|escape}:</h2>
<form action="?action=rechnungadd&mailformsent=1&mail=1&id={$smarty.get.id|intval}" 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>
<legend>{$typename|escape} an <a href="?action=kundenshow&id={$adresse.partner_id|escape}">Kunde {$adresse.partner_id|escape}</a></legend>
<p>
<br />
@@ -28,9 +28,9 @@
{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 />
<input value='{$smarty.session.firma|escape}: 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"}
{if $anrs.{$adresse.anrede_id} == "Herrn" || $anrs.{$adresse.anrede_id|escape} == "Herr"}
{strip}
<input value='
{if $rechnung.anr1}
@@ -38,16 +38,16 @@
{else}
Sehr geehrter Herr{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{$titels.{$adresse.titel_id}|escape}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{$adresse.vname|escape}{" "}
{/if}
{$adresse.nname},
{$adresse.nname|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Herrn" || $anrs.{$adresse.anrede_id} == "Herr"}
{elseif $anrs.{$adresse.anrede2_id} == "Herrn" || $anrs.{$adresse.anrede_id|escape} == "Herr"}
{strip}
<input value='
{if $rechnung.anr1}
@@ -55,12 +55,12 @@
{else}
Sehr geehrter Herr{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{$titels.{$adresse.titel2_id}|escape}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{$adresse.vname2|escape}{" "}
{/if}
{$adresse.nname2},
{$adresse.nname2|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
@@ -72,12 +72,12 @@
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{$titels.{$adresse.titel_id}|escape}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{$adresse.vname|escape}{" "}
{/if}
{$adresse.nname},
{$adresse.nname|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
@@ -89,12 +89,12 @@
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{$titels.{$adresse.titel2_id}|escape}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{$adresse.vname2|escape}{" "}
{/if}
{$adresse.nname2},
{$adresse.nname2|escape},
{/if}
' id='anr1' maxlength='150' name='anr1' /><br />
{/strip}
@@ -103,7 +103,7 @@
{/if}
<label>Zweite Anrede:</label>
{if $anrs.{$adresse.anrede_id} == "Frau" && $anrs.{$adresse.anrede2_id} == "Herr" && $anrs.{$adresse.anrede2_id} == "Herrn"}
{if $anrs.{$adresse.anrede_id} == "Frau" && $anrs.{$adresse.anrede2_id|escape} == "Herr" && $anrs.{$adresse.anrede2_id|escape} == "Herrn"}
{strip}
<input value='
{if $rechnung.anr2}
@@ -111,12 +111,12 @@
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "}
{$titels.{$adresse.titel_id}|escape}{" "}
{/if}
{if $adresse.vname}
{$adresse.vname}{" "}
{$adresse.vname|escape}{" "}
{/if}
{$adresse.nname},
{$adresse.nname|escape},
{/if}
' id='anr2' maxlength='150' name='anr2' /><br />
{/strip}
@@ -128,12 +128,12 @@
{else}
Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "}
{$titels.{$adresse.titel2_id}|escape}{" "}
{/if}
{if $adresse.vname2}
{$adresse.vname2}{" "}
{$adresse.vname2|escape}{" "}
{/if}
{$adresse.nname2},
{$adresse.nname2|escape},
{/if}
' id='anr2' maxlength='150' name='anr2' /><br />
{/strip}
@@ -142,11 +142,11 @@
{/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}.
Anbei senden wir Ihnen {if $typename == "Angebot"}das{elseif $typename == "Brief"}den{else}die{/if} geforderte{if $typename == "Brief"}n{/if} {$typename|escape}.
Mit freundlichen Grüßen
{$smarty.session.vname} {$smarty.session.nname}
{$smarty.session.firma}
{$smarty.session.vname|escape} {$smarty.session.nname|escape}
{$smarty.session.firma|escape}
---
Das Dokument ist als PDF-Datei im Anhang hinterlegt.
@@ -169,7 +169,7 @@ http://www.adobe.de/products/acrobat/readstep2.html
<br />
<h2>Anhang:</h2>
<div id="pdfpreview">
<iframe src='{$pdffile}' width='100%' height='600px'></iframe>
<iframe src='{$pdffile|escape}' width='100%' height='600px'></iframe>
</div>
</div>
</div>
+1 -1
View File
@@ -2,7 +2,7 @@
{include file="heading.tpl" heading=$head}
<div class="widthlimiter">
<form action="?action={$frmact}&do=adress&kunde={$kunde|escape}&formsent=1&adressid={$adressid}" name="mainform" method='POST'>
<form action="?action={$frmact}&do=adress&kunde={$kunde|escape}&formsent=1&adressid={$adressid|intval}" name="mainform" method='POST'>
<fieldset>
<label>Adresstyp:</label><select name="typ" id="typ" >
+1 -1
View File
@@ -2,7 +2,7 @@
{include file="heading.tpl" heading=$head}
<div class="widthlimiter">
<form action="?action={$frmact}&do=kontakt&kunde={$kunde|escape}&formsent=1&kontaktid={$kontaktid}" method='POST'>
<form action="?action={$frmact}&do=kontakt&kunde={$kunde|escape}&formsent=1&kontaktid={$kontaktid|intval}" method='POST'>
<fieldset>
<label>Typ:</label><select name="typ" id="typ" >
{html_options values=$typids output=$typs selected="{$typ}"}
+1 -1
View File
@@ -2,7 +2,7 @@
{include file="heading.tpl" heading=$head}
<div class="widthlimiter">
<form action="?action={$frmact}&do=konto&kunde={$kunde|escape}&formsent=1&kontoid={$kontoid}" method='POST'>
<form action="?action={$frmact}&do=konto&kunde={$kunde|escape}&formsent=1&kontoid={$kontoid|intval}" method='POST'>
<fieldset>
<label>Bank:</label><input name='bank' id='bank' value="{$bank|escape}" pattern="[^0-9]*" /><br />
+3 -3
View File
@@ -2,16 +2,16 @@
{include file="heading.tpl" heading=$head}
<div class="widthlimiter">
<form action="?action={$frmact}&do=notiz&kunde={$kunde|escape}&formsent=1&notizid={$notizid}" method='POST' enctype="multipart/form-data">
<form action="?action={$frmact}&do=notiz&kunde={$kunde|escape}&formsent=1&notizid={$notizid|intval}" method='POST' enctype="multipart/form-data">
<fieldset class='colorchooser'>
<legend>Farbe:</legend>
{html_radios name='color' options=$colors selected={$color|default:'#fff'} separator='&nbsp;' escape=0 labels=1}
{html_radios name='color' options=$colors selected={$color|default:'#fff'|escape} separator='&nbsp;' escape=0 labels=1}
</fieldset>
<fieldset>
<legend>Notiz:</legend>
<textarea name='notiz' id='notiz' class='bigtextarea'>{$notiz}</textarea><br />
<textarea name='notiz' id='notiz' class='bigtextarea'>{$notiz|escape}</textarea><br />
<label>Dateianhang zu dieser Notiz: </label><input type="file" id='notefile' name='notefile' /><br />
<button type="button" class='spell' onclick="$('textarea:not(#personalnotes,#globalnotes),input:not([type=radio])').spellCheckInDialog()">Rechtschreibung prüfen</button><br />
</fieldset>
+1 -1
View File
@@ -2,7 +2,7 @@
{include file="heading.tpl" heading=$head}
<div class="widthlimiter">
<form action="?action={$frmact}&do=tel&kunde={$kunde|escape}&formsent=1&telid={$telid}" method='POST'>
<form action="?action={$frmact}&do=tel&kunde={$kunde|escape}&formsent=1&telid={$telid|intval}" method='POST'>
<fieldset>
<label>Typ:</label><select name="typ" id="typ" >
{html_options values=$typids output=$typs selected="{$typ}"}
+2 -2
View File
@@ -1,6 +1,6 @@
{include file="heading.tpl" heading="Dokumentanzeige"}
<h2><div class='fifty'>Original:</div><div class='fifty'>Kopie:</div></h2>
<iframe style='display: block; float: left; margin: 1em;' src='{$pdffile}' width='45%' height='600px'></iframe>
<iframe style='display: block; float: left; margin: 1em;' src='{$pdffile|escape}' width='45%' height='600px'></iframe>
{if $pdffile2}
<iframe style='display: block; float: left; margin: 1em;' src='{$pdffile2}' width='45%' height='600px'></iframe>
<iframe style='display: block; float: left; margin: 1em;' src='{$pdffile2|escape}' width='45%' height='600px'></iframe>
{/if}
+2 -2
View File
@@ -1,4 +1,4 @@
{include file="heading.tpl" heading="Terminanzeige"}
<h2><div class='fifty'>Ohne Anfahrt:</div><div class='fifty'>Mit Anfahrt:</div></h2>
<iframe src='{$pdffile}' width='40%' height='600px'></iframe>
<iframe src='{$pdffile2}' width='40%' height='600px'></iframe>
<iframe src='{$pdffile|escape}' width='40%' height='600px'></iframe>
<iframe src='{$pdffile2|escape}' width='40%' height='600px'></iframe>
+1 -1
View File
@@ -1,4 +1,4 @@
<a href='?action=termin'><span class='cal' title="Terminkalender anzeigen" style='margin-left: 50%;'></span></a><br />
<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'>
+16 -16
View File
@@ -1,55 +1,55 @@
{include file="heading.tpl" heading="Umschlag bedrucken"}
<div class="fifty">
<form action="?action=rechnungadd&formsent=1&id={$loadrech}" name="mainform" id='rechnform' method='POST'>
<form action="?action=rechnungadd&formsent=1&id={$loadrech|escape}" 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>
<legend>{$typename|escape} an <a href="?action=kundenshow&id={$adresse.partner_id|escape}">Kunde {$adresse.partner_id|escape}</a></legend>
{if $adresse.firma}
<label class='checktext'><input type="checkbox" name="show_firmaanr" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_FIRMAANR:1 || $rechnung.adressfields==0}checked="checked"{/if} />Firma</label>
<label class='checktext'><input type="checkbox" name="show_firma" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_FIRMA:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.firma}</label>
<label class='checktext'><input type="checkbox" name="show_firma" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_FIRMA:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.firma|escape}</label>
{/if}
{if $adresse.anrede_id > 1}
<label class='checktext'><input type="checkbox" name="show_anr" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ANR1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$anrs.{$adresse.anrede_id}}</label>
<label class='checktext'><input type="checkbox" name="show_anr" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ANR1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$anrs.{$adresse.anrede_id}|escape}</label>
{/if}
{if $adresse.titel_id > 1}
<label class='checktext'><input type="checkbox" name="show_titel" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_TITEL1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$titels.{$adresse.titel_id}}</label>
<label class='checktext'><input type="checkbox" name="show_titel" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_TITEL1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$titels.{$adresse.titel_id}|escape}</label>
{/if}
{if $adresse.vname || $adresse.nname}
<label class='checktext'><input type="checkbox" name="show_name" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_NAME1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.vname} {$adresse.nname}</label>
<label class='checktext'><input type="checkbox" name="show_name" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_NAME1:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.vname|escape} {$adresse.nname|escape}</label>
{/if}
<br />
{if $adresse.anrede2_id > 1}
<label class='checktext'><input type="checkbox" name="show_anr2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ANR2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$anrs.{$adresse.anrede2_id}}</label>
<label class='checktext'><input type="checkbox" name="show_anr2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ANR2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$anrs.{$adresse.anrede2_id}|escape}</label>
{/if}
{if $adresse.titel2_id > 1}
<label class='checktext'><input type="checkbox" name="show_titel2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_TITEL2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$titels.{$adresse.titel2_id}}</label>
<label class='checktext'><input type="checkbox" name="show_titel2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_TITEL2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$titels.{$adresse.titel2_id}|escape}</label>
{/if}
{if $adresse.vname2 || $adresse.nname2}
<label class='checktext'><input type="checkbox" name="show_name2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_NAME2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.vname2} {$adresse.nname2}</label>
<label class='checktext'><input type="checkbox" name="show_name2" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_NAME2:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.vname2|escape} {$adresse.nname2|escape}</label>
{/if}
{if $adresse.str}
<label class='checktext'><input type="checkbox" name="show_str" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_STR:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.str} {$adresse.hnr}</label>
<label class='checktext'><input type="checkbox" name="show_str" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_STR:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.str|escape} {$adresse.hnr|escape}</label>
{/if}
{if $adresse.plz || $adresse.ort}
<label class='checktext'><input type="checkbox" name="show_ort" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ORT:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.plz} {$adresse.ort}
<label class='checktext'><input type="checkbox" name="show_ort" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ORT:1 || $rechnung.adressfields==0}checked="checked"{/if} />{$adresse.plz|escape} {$adresse.ort|escape}
{/if}
{if $adresse.ortsteil}
- {$adresse.ortsteil}
- {$adresse.ortsteil|escape}
{/if}
{if $adresse.plz || $adresse.ort}
</label>
{/if}
{if $adresse.land}
<label class='checktext'><input type="checkbox" name="show_land" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_LAND:1}checked="checked"{/if} />{$adresse.land}</label>
<label class='checktext'><input type="checkbox" name="show_land" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_LAND:1}checked="checked"{/if} />{$adresse.land|escape}</label>
{/if}
{if $adresse.zusatz}
<label class='checktext'><input type="checkbox" name="show_zusatz" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ZUSATZ:1}checked="checked"{/if} />{$adresse.zusatz|truncate:60:"...":false}</label>
<label class='checktext'><input type="checkbox" name="show_zusatz" value="1" {if $rechnung.adressfields|substr:$smarty.const.ADRFIELD_ZUSATZ:1}checked="checked"{/if} />{$adresse.zusatz|truncate:60:"...":false|escape}</label>
{/if}
<br />
<label class='artlabel'>Adresserweiterung: </label>
<input class='art' name="adresserweiterung" value="{$rechnung.adresserweiterung}" />
<input class='art' name="adresserweiterung" value="{$rechnung.adresserweiterung|escape}" />
<br />
<input name="adressid" type="hidden" value="{$adresse.adressid}" />
<input name="adressid" type="hidden" value="{$adresse.adressid|escape}" />
<button type="button" class='preview' onclick="ajax_loadUmschlagpreview();">Vorschau aktualisieren</button><br />
</fieldset>
</form>