Compare commits

...
11 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
admin a130ed56a3 Merge branch 'main' into db-umbau 2026-09-17 10:30:31 +02:00
adminandClaude Opus 5 c59e7fb393 Sicherheit: AJAX-Endpunkte und Statistik nur mit Anmeldung
Keiner der AJAX-Endpunkte hat einen Login geprueft. Ohne Anmeldung liessen
sich Kunden, Adressen und Rechnungen durchsuchen, und ajax/autosave.php
setzt $_POST ungeprueft in SQL (SQL-Injection ohne Login).

- incs/connectmysql.php und ajax/auto/connectmysql.php, die alle
  AJAX-Endpunkte laden, antworten ohne gueltige Session mit 403
- stats.php verlangt eine Anmeldung
- db-backup.php und clean_db.php laufen nur noch per Kommandozeile;
  ueber den Webserver konnte jeder einen Datenbank-Dump anstossen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 10:30:30 +02:00
adminandClaude Opus 5 f24a7a88dd Schema: Pflichtspalten mit den frueheren impliziten Standardwerten
Der alte Code fuegt fast ueberall Zeilen ein, ohne alle NOT-NULL-Spalten zu
setzen; der nicht strikte Modus hat dann '', 0 oder ein Nulldatum
eingesetzt. Diese Werte stehen jetzt als DEFAULT im Schema. Weggelassene
Spalten verhalten sich damit wie bisher, ungueltige Werte, zu lange Texte
und falsche Verweise lehnt der strikte Modus weiterhin ab.

Das Migrationsskript meldet Spalten, die in der Quelle fehlen und ueber den
Standardwert gefuellt werden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 10:28:44 +02:00
69 changed files with 3927 additions and 5147 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. 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 ## Die zwei zentralen Mechanismen
### 1. Das Verzeichnis bestimmt die Instanz ### 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. **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. 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. 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 ## Fallstricke
- **`smarty/` enthält Smarty 4.5.6** — der schlichte Verzeichnisname sagt nichts über die Version. - **`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. - **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. - **`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. - **`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. - **`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-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. 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.
+36 -40
View File
@@ -1,50 +1,46 @@
<?php <?php
require_once("./connectmysql.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"]) $treffer = db_zeilen($dbconn, "SELECT MAX(artikel.id) AS id FROM artikel
{
$qry = mysqli_query($dbconn,"SELECT MAX(artikel.id) AS id FROM artikel
JOIN artikeltyp ON typ_id = artikeltyp.id 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)); WHERE artikel.bezeichn LIKE ? AND dropdown = 1
if($tmpres=mysqli_fetch_array($qry)) 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)
{ {
$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 $art = db_zeile($dbconn, "SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id,
JOIN artikeltyp ON typ_id = artikeltyp.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 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)); WHERE artikel.id = ? ORDER BY artikel_rechn.art_id DESC LIMIT 1",
$res = mysqli_fetch_array($innerqry); array($t["id"]));
echo "[ "; if(!$art)
echo '{"value": "'.$res[0].'","typ": "'.$res[1].'","einh": "'.$res[2].'","preis": "'.number_format($res[4],2,",","").'","eig":['; continue;
$qry2 = mysqli_query($dbconn,"SELECT bezeichn, wert, einheit_id FROM eigensch $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 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"); WHERE art_id = ? AND rech_id = ? AND artposnr = ? ORDER BY posnr ASC",
if($res2 = mysqli_fetch_array($qry2)) array($art["id"], $art["rech_id"], $art["posnr"]));
echo '{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}'; $liste[] = array(
while($res2=mysqli_fetch_array($qry2)) "value" => $art["bezeichn"],
echo ',{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}'; "typ" => $art["typ_id"],
echo ']}'; "einh" => $art["einheit_id"],
while($tmpres=mysqli_fetch_array($qry)) "preis" => number_format((float)$art["preis"], 2, ",", ""),
{ "eig" => $eigensch ? $eigensch : array(),
$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 ',{"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 "]"; 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);
}
+5 -19
View File
@@ -1,22 +1,8 @@
<?php <?php
require_once("./connectmysql.php"); require_once("./connectmysql.php");
if(!$err) require_once("./autofuncs.php");
{
if($_GET["term"]) if(!$err && autoBegriff() !== "")
{ autoAusgabe($dbconn, "SELECT bank AS value, blz FROM bank
$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)); WHERE bank LIKE ? GROUP BY bank ORDER BY bank ASC LIMIT 25",
if($res=mysqli_fetch_array($qry)) array(db_like_praefix(autoBegriff())));
{
echo "[ ";
echo '{"value": "'.$res[0].'","blz":"'.$res[1].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value":"'.$res[0].'","blz":"'.$res[1].'"}';
}
echo "]";
}
}
}
?>
+6 -18
View File
@@ -1,20 +1,8 @@
<?php <?php
require_once("./connectmysql.php"); require_once("./connectmysql.php");
if(!$err) require_once("./autofuncs.php");
{
if($_GET["term"]) if(!$err && autoBegriff() !== "")
{ autoAusgabe($dbconn, "SELECT blz AS value, bank FROM bank
$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)); WHERE blz LIKE ? GROUP BY blz ORDER BY blz ASC LIMIT 25",
if($res=mysqli_fetch_array($qry)) array(db_like_praefix(autoBegriff())));
{
echo "[ ";
echo '{"value": "'.$res[0].'","bank":"'.$res[1].'"}';
while($res=mysqli_fetch_array($qry))
{
echo ',{"value":"'.$res[0].'","bank":"'.$res[1].'"}';
}
echo "]";
}
}
}
?>
+6
View File
@@ -2,6 +2,12 @@
require_once("../../incs/constants.php"); require_once("../../incs/constants.php");
session_name(SESSION_NAME); session_name(SESSION_NAME);
session_start(); session_start();
// Alle AJAX-Endpunkte laden diese Datei: ohne Anmeldung gibt es keine Daten.
if(($_SESSION["login"] ?? "") !== "valid")
{
http_response_code(403);
exit("Nicht angemeldet.");
}
require_once("../../incs/settings.php"); require_once("../../incs/settings.php");
$settings=readsettings(); $settings=readsettings();
if($settings == "valid") if($settings == "valid")
+5 -19
View File
@@ -1,22 +1,8 @@
<?php <?php
require_once("./connectmysql.php"); require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err) if(!$err && autoBegriff() !== "")
{ autoAusgabe($dbconn, "SELECT land AS value FROM land
WHERE land LIKE ? ORDER BY land ASC LIMIT 25",
if($_GET["term"]) array(db_like_praefix(autoBegriff())));
{
$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 "]";
}
}
}
?>
+6 -19
View File
@@ -1,22 +1,9 @@
<?php <?php
require_once("./connectmysql.php"); require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err) 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
if($_GET["term"]) WHERE ort LIKE ? GROUP BY ort ORDER BY ort ASC LIMIT 25",
{ array(db_like_praefix(autoBegriff())));
$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 "]";
}
}
}
?>
+6 -20
View File
@@ -1,23 +1,9 @@
<?php <?php
require_once("./connectmysql.php"); require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err) 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
if($_GET["term"]) WHERE ortsteil LIKE ? GROUP BY ortsteil ORDER BY ort ASC LIMIT 25",
{ array(db_like_praefix(autoBegriff())));
$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 "]";
}
}
}
?>
+6 -20
View File
@@ -1,23 +1,9 @@
<?php <?php
require_once("./connectmysql.php"); require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err) 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
if($_GET["term"]) WHERE plz LIKE ? GROUP BY plz ORDER BY plz ASC LIMIT 25",
{ array(db_like_praefix(autoBegriff())));
$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 "]";
}
}
}
?>
+8 -20
View File
@@ -1,23 +1,11 @@
<?php <?php
require_once("./connectmysql.php"); require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err) if(!$err && autoBegriff() !== "")
{ autoAusgabe($dbconn, "SELECT str AS value, plz, ort, ortsteil AS otl, land AS lnd
FROM strasse
if($_GET["term"]) JOIN ort ON ort.id = strasse.ort_id
{ JOIN land ON land.id = ort.land_id
$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)); WHERE str LIKE ? GROUP BY str ORDER BY str ASC LIMIT 25",
if($res=mysqli_fetch_array($qry)) array(db_like_praefix(autoBegriff())));
{
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 "]";
}
}
}
?>
+6 -19
View File
@@ -1,22 +1,9 @@
<?php <?php
require_once("./connectmysql.php"); require_once("./connectmysql.php");
require_once("./autofuncs.php");
if(!$err) 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
if($_GET["term"]) WHERE vwahl LIKE ? GROUP BY vwahl ORDER BY vwahl ASC LIMIT 25",
{ array(db_like_praefix(autoBegriff())));
$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 "]";
}
}
}
?>
+7 -179
View File
@@ -9,202 +9,30 @@ require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty; $smarty = new Smarty;
if(!isset($err)) if(!isset($err))
{ {
$show = ""; // Entwurf speichern, alle Artikel (auch deaktivierte)
if(isset($_POST["show_firmaanr"])) list($progressid, $fehler) = saveTmpRechnung($dbconn, false);
$show .= str_pad($_POST["show_firmaanr"],1,"0"); if($fehler)
else $err = $fehler;
$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 else
{ {
$qry = mysqli_query($dbconn, "UPDATE tmp_rechnung SET $type = formularGanzzahl("type");
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))
{
$adresse = makeadressblock($dbconn,$progressid,1); $adresse = makeadressblock($dbconn,$progressid,1);
$rechnung = makerechnungsarray($dbconn,$progressid,1); $rechnung = makerechnungsarray($dbconn,$progressid,1);
$artikel = makeartikelarray($dbconn,$progressid,1); $artikel = makeartikelarray($dbconn,$progressid,1);
if($adresse["lines"]>6) if($adresse["lines"]>6)
error("Die Adresse hat zu viele Zeilen!<br />Bitte wählen Sie einige Elemente ab."); error("Die Adresse hat zu viele Zeilen!<br />Bitte wählen Sie einige Elemente ab.");
if(!$_POST["show_ort"] || !$_POST["show_str"]) 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!"); 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"]) 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.)."); 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."); 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")) 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"); 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!"); ok("<img src='' id='saveimg' class='saveimg' /><br />Dokument wurde um ".date("H:i:s")." Uhr gespeichert!");
} }
} }
?> ?>
+6 -188
View File
@@ -10,203 +10,22 @@ require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty; $smarty = new Smarty;
if(!isset($err)) if(!isset($err))
{ {
$show = ""; // Entwurf speichern, nur aktive Artikel, und daraus die Vorschau erzeugen
if(isset($_POST["show_firmaanr"])) list($progressid, $fehler) = saveTmpRechnung($dbconn, true);
$show .= str_pad($_POST["show_firmaanr"],1,"0"); if($fehler)
$err = $fehler;
else 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); $adresse = makeadressblock($dbconn,$progressid,1);
$rechnung = makerechnungsarray($dbconn,$progressid,1); $rechnung = makerechnungsarray($dbconn,$progressid,1);
$artikel = makeartikelarray($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); $pdf = makerawPDF(1);
makefirstpage($pdf,$adresse["adresse"],$rechnung,1); makefirstpage($pdf,$adresse["adresse"],$rechnung,1);
$gesamtpreis = 0;
if(count($artikel)) if(count($artikel))
{ {
$gesamtpreis = maketable($pdf,$artikel,$rechnung,1); $gesamtpreis = maketable($pdf,$artikel,$rechnung,1);
@@ -217,6 +36,5 @@ if(!isset($err))
savePDF($pdf,"../temp/pdfpreview/$tmppdfname.pdf"); savePDF($pdf,"../temp/pdfpreview/$tmppdfname.pdf");
echo makeImageFromPDF("../temp/pdfpreview/$tmppdfname.pdf"); echo makeImageFromPDF("../temp/pdfpreview/$tmppdfname.pdf");
} }
} }
?> ?>
+27 -31
View File
@@ -4,53 +4,49 @@ require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php"); require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php'); require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty; $smarty = new Smarty;
$pagesize = 50; $pagesize = 50;
if(!isset($err))
$err = "";
if(!$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;
$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(); $speciallines = array();
$listlines = array();
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ", $fulltag); $src = explode(" ", $fulltag);
$combiner = mysql_escape_string($_GET["link"]); $combiner = $link == "OR" ? "OR" : "AND";
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$queries = createAdressQry($page,$pagesize,$src,$combiner,$_GET["field"],0,1); $queries = createAdressQry($page,$pagesize,$src,$combiner,$field,0,1);
$qry = mysqli_query($dbconn,$queries["all"]) $numres = zaehleTreffer($dbconn, $queries);
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
if(!$numres) if(!$numres)
{ {
$queries = createAdressQry($page,$pagesize,$src,$combiner,$_GET["field"],1,1); $queries = createAdressQry($page,$pagesize,$src,$combiner,$field,1,1);
$qry = mysqli_query($dbconn,$queries["all"]) $numres = zaehleTreffer($dbconn, $queries);
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen"); message("veraltete Datensätze wurden in die Suche einbezogen");
} }
if($numres) if($numres)
{ {
$qry = mysqli_query($dbconn,$queries["limited"]) $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn)); or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
while($res=mysqli_fetch_assoc($qry)) while($res=mysqli_fetch_assoc($qry))
{ {
$name = $res["vname"]." ".$res["nname"]; $adresse = makeadressline($res);
if($res["firma"]) $waehlen = "<a href='?action=rechnungadd&id=".$rechid."&".$subact."=1&adrid=".(int)$res["adrid"]."'><span class='check' title='Diese Adresse verwenden'></span></a>";
$name .= " <i><u>".$res["firma"]."</u></i>"; $zeile = array($waehlen." &nbsp;&nbsp;".(int)$res["kdnr"], makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res));
if($res["vwahl"]) if(empty($res["updated_by"]))
$res["tel"] = $res["vwahl"]."/".$res["tel"]; $listlines[] = $zeile;
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"]);
else 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"); $headings = array("Kd.Nr.","Name/<i><u>Firma</u></i>","Ort","Straße","Telefon");
$lastdisplay = ($page+1)*$pagesize; $lastdisplay = ($page+1)*$pagesize;
@@ -61,9 +57,9 @@ if(!$err)
else else
ok($numres." Adressen sind insgesamt gespeichert."); ok($numres." Adressen sind insgesamt gespeichert.");
displayPages($pagesize,$page,$numres,"ajax_searchadress"); displayPages($pagesize,$page,$numres,"ajax_searchadress",",".$rechid.",'".$subact."'");
displayList($headings,$listlines,$speciallines); 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."); ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
+24 -69
View File
@@ -4,84 +4,40 @@ require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php"); require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php'); require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty; $smarty = new Smarty;
$pagesize = 20; $pagesize = 20;
if(!isset($err))
$err = "";
if(!$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;
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ", $fulltag); $src = explode(" ", $fulltag);
$combiner = mysql_escape_string($_GET["link"]); $combiner = $link == "OR" ? "OR" : "AND";
if($combiner != "AND" && $combiner != "OR") $listlines = array();
{
$combiner = "AND";
}
$page = $_GET["page"];
$skspage = $_GET["skspage"];
$typ = $_GET["typ"];
$id = $_GET["kdnid"];
$queries = createKdnProjectQry($page,$pagesize,$src,$combiner,$id); $queries = createKdnProjectQry($page,$pagesize,$src,$combiner,$id);
$qry = mysqli_query($dbconn,$queries["all"]) $numres = zaehleTreffer($dbconn, $queries);
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");
}
*/
if($numres) if($numres)
{ {
$listlines=array(); $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
$qry = mysqli_query($dbconn,$queries["limited"]) or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
or die("Datenbank fehler: ".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry)) 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>"; $projektid = (int)$res["id"];
$actions .= "<a href='?action=projectadd&id=".$res["id"]."'><span class='edit' title='Projekt ändern'></span></a>"; $name = htmlspecialchars((string)$res["name"]);
//$actions .= "<a href='?action=projectadd&id=".$res["id"]."&copy=1'><span class='copy' title='Projekt kopieren'></span></a>"; $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>";
//$tmpqry = mysqli_query($dbconn,"SELECT id FROM kontakt WHERE partner_id = '$id' AND typ_id = 1"); $actions .= "<a href='?action=projectadd&id=".$projektid."'><span class='edit' title='Projekt ändern'></span></a>";
//if(mysqli_fetch_array($tmpqry)) $listlines[] = array("<a href='?action=projectshow&id=".$projektid."'>".$name."</a>",
// $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>"; htmlspecialchars((string)$res["date"]),
/* htmlspecialchars((string)$res["work"]),
$res["drechnr"] = substr($res["rechnr"],0,4)."-".substr($res["rechnr"],4,2)."-".substr($res["rechnr"],6,2).".".substr($res["rechnr"],8,2); $actions);
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
);
} }
$headings = array("Name","Datum","Unberechnete<br />Stunden","Aktionen"); $headings = array("Name","Datum","Unberechnete<br />Stunden","Aktionen");
@@ -93,9 +49,9 @@ if(!$err)
else else
ok($numres." Projekte sind insgesamt gespeichert."); ok($numres." Projekte sind insgesamt gespeichert.");
displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkdnprojects",",$typ,$id"); displayPages($pagesize,$page,$numres,"ajax_searchkdnprojects",",".$id);
displayList($headings,$listlines,$speciallines); displayList($headings,$listlines,array());
displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkdnprojects",",$typ,$id"); displayPages($pagesize,$page,$numres,"ajax_searchkdnprojects",",".$id);
} }
else else
{ {
@@ -104,6 +60,5 @@ if(!$err)
else else
ok("Keine Einträge."); ok("Keine Einträge.");
} }
} }
?> ?>
+18 -17
View File
@@ -16,26 +16,28 @@ if(!isset($err))
if(!isset($_GET["link"])){ if(!isset($_GET["link"])){
$_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); $src = explode(" ",$fulltag);
$combiner = mysql_escape_string($_GET["link"]); $combiner = $_GET["link"];
if($combiner != "AND" && $combiner != "OR") if($combiner != "AND" && $combiner != "OR")
{ {
$combiner = "AND"; $combiner = "AND";
} }
$page = $_GET["page"]; $page = (int)$_GET["page"];
$skspage = $_GET["skspage"]; $skspage = (int)$_GET["skspage"];
$typ = $_GET["typ"]; // landen auch in JavaScript-Aufrufen der Seitennavigation
$id = $_GET["kdnid"]; $typ = (int)$_GET["typ"];
$id = (int)$_GET["kdnid"];
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,0); $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)); or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry); $numres = mysqli_num_rows($qry);
/* /*
if(!$numres) if(!$numres)
{ {
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1); $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)); or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry); $numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen"); message("veraltete Datensätze wurden in die Suche einbezogen");
@@ -44,7 +46,7 @@ if(!isset($err))
if($numres) if($numres)
{ {
$listlines=array(); $listlines=array();
$qry = mysqli_query($dbconn,$queries["limited"]) $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn)); or die("Datenbank fehler: ".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry)) 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"]."'><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"]."&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>"; $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(db_wert($dbconn, "SELECT id FROM kontakt WHERE partner_id = ? AND typ_id = 1 LIMIT 1", array($id)))
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>"; $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"]) switch($res["typ_id"])
@@ -87,14 +88,14 @@ if(!isset($err))
if($res["storno"] == 1){ if($res["storno"] == 1){
$listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'><font color='#FF0000'>".$res["drechnr"]."</font></a>", $listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'><font color='#FF0000'>".$res["drechnr"]."</font></a>",
$res["date"], $res["date"],
$res["artikel"], zeilenHtml($res["artikel"]),
$actions $actions
); );
} }
else{ else{
$listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["drechnr"]."</a>", $listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["drechnr"]."</a>",
$res["date"], $res["date"],
$res["artikel"], zeilenHtml($res["artikel"]),
$actions $actions
); );
} }
@@ -128,14 +129,14 @@ if(!isset($err))
echo "<h3>SKS Dokumente:</h3><div class='line'></div>"; echo "<h3>SKS Dokumente:</h3><div class='line'></div>";
$queries=""; $queries="";
$queries = createKdnRechQry($skspage,$pagesize,$src,$combiner,$id,$typ,1); $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)); or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry); $numres = mysqli_num_rows($qry);
/* /*
if(!$numres) if(!$numres)
{ {
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1); $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)); or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry); $numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen"); message("veraltete Datensätze wurden in die Suche einbezogen");
@@ -145,13 +146,13 @@ if(!isset($err))
{ {
$speciallines[]=array(); $speciallines[]=array();
$listlines[]=array(); $listlines[]=array();
$qry = mysqli_query($dbconn,$queries["limited"]) $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn)); or die("Datenbank fehler: ".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry)) while($res=mysqli_fetch_assoc($qry))
{ {
$speciallines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["rechnr"]."</a>", $speciallines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["rechnr"]."</a>",
$res["date"], $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>"); "<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"); $headings = array("Nummer","Datum","Artikel","Aktion");
+29 -48
View File
@@ -4,63 +4,44 @@ require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php"); require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php'); require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty; $smarty = new Smarty;
$pagesize = 50; $pagesize = 50;
if(!isset($err))
$err = "";
if(!$err) if(!$err)
{ {
$fulltag = utf8_encode($_GET["search"]); // 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); $src = explode(" ", $fulltag);
$combiner = mysql_escape_string($_GET["link"]); $combiner = $link == "OR" ? "OR" : "AND";
if($combiner != "AND" && $combiner != "OR") $listlines = array();
{
$combiner = "AND"; $queries = createKommQry($page,$pagesize,$src,$combiner,$id);
} $numres = zaehleTreffer($dbconn, $queries);
$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");
}
*/
if($numres) if($numres)
{ {
$listlines=array(); $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
$qry = mysqli_query($dbconn,$queries["limited"]) or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
or die("Datenbank fehler: ".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry)) 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>"; $adrid = (int)$res["id"];
$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>"; $karte = rawurlencode($res["plz"]." ".$res["ort"]." ".$res["str"]." ".$res["hnr"]);
$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=kundenchange&do=adress&adressid=".$adrid."&kunde=".$id."'><span class='edit' title='Adresse ändern'></span></a>";
$actions .= " <a href='?action=terminadd&adressid=".$res["id"]."'><span class='termadd' title='Termin anlegen'></span></a><br />"; $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='?action=rechnungadd&type=1&adressid=".$res["id"]."'><span class='rechnadd' title='Rechnung anlegen'></span></a>"; $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=rechnungadd&type=1&adressid=".$res["id"]."'><span class='gutschradd' title='Gutschrift anlegen'></span></a>"; $actions .= " <a href='?action=terminadd&adressid=".$adrid."'><span class='termadd' title='Termin anlegen'></span></a><br />";
$actions .= " <a href='?action=rechnungadd&type=3&adressid=".$res["id"]."'><span class='angadd' title='Angebot anlegen'></span></a>"; $actions .= " <a href='?action=rechnungadd&type=1&adressid=".$adrid."'><span class='rechnadd' title='Rechnung anlegen'></span></a>";
$actions .= " <a href='?action=rechnungadd&type=5&adressid=".$res["id"]."'><span class='letteradd' title='Brief anlegen'></span></a><br />"; $actions .= " <a href='?action=rechnungadd&type=2&adressid=".$adrid."'><span class='gutschradd' title='Gutschrift anlegen'></span></a>";
$tmpqry = mysqli_query($dbconn,"SELECT id FROM kontakt WHERE partner_id = '$id' AND typ_id = 1"); $actions .= " <a href='?action=rechnungadd&type=3&adressid=".$adrid."'><span class='angadd' title='Angebot anlegen'></span></a>";
if(mysqli_fetch_array($tmpqry)) $actions .= " <a href='?action=rechnungadd&type=5&adressid=".$adrid."'><span class='letteradd' title='Brief anlegen'></span></a><br />";
$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); $adresse = makeadressline($res);
$listlines[] = array($name, $listlines[] = array(makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $actions);
$adresse["ort"], $adresse["str"],
maketelline($res),
$actions
);
} }
$headings = array("Name","Ort","Straße","Tel","Aktionen"); $headings = array("Name","Ort","Straße","Tel","Aktionen");
$lastdisplay = ($page+1)*$pagesize; $lastdisplay = ($page+1)*$pagesize;
@@ -71,9 +52,9 @@ if(!$err)
else else
ok($numres." Kommissionen sind insgesamt gespeichert."); ok($numres." Kommissionen sind insgesamt gespeichert.");
displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkomm",",$id"); displayPages($pagesize,$page,$numres,"ajax_searchkomm",",".$id);
displayList($headings,$listlines,$speciallines); displayList($headings,$listlines,array());
displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkomm",",$id"); displayPages($pagesize,$page,$numres,"ajax_searchkomm",",".$id);
} }
else else
{ {
+27 -41
View File
@@ -4,70 +4,56 @@ require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php"); require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php'); require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty; $smarty = new Smarty;
$pagesize = 50; $pagesize = 50;
if(!isset($err)){ if(!isset($err))
$err = ""; $err = "";
}
if(!$err) if(!$err)
{ {
if(!isset($_GET["link"])){ // kommt per encodeURIComponent bereits als UTF-8
$_GET["link"] = ""; $fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
} $link = isset($_GET["link"]) && is_string($_GET["link"]) ? $_GET["link"] : "";
if(!isset($_GET["field"])){ $field = isset($_GET["field"]) && is_string($_GET["field"]) ? $_GET["field"] : "";
$_GET["field"] = ""; $page = isset($_GET["page"]) ? (int)$_GET["page"] : 0;
}
$_SESSION["search"] = $fulltag;
$_SESSION["link"] = $link;
$_SESSION["field"] = $field;
$_SESSION["page"] = $page;
$_SESSION["search"] = $_GET["search"];
$_SESSION["link"] = $_GET["link"];
$_SESSION["field"] = $_GET["field"];
$_SESSION["page"] = $_GET["page"];
$speciallines = array(); $speciallines = array();
$listlines = array();
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ", $fulltag); $src = explode(" ", $fulltag);
$combiner = mysql_escape_string($_GET["link"]); $combiner = $link == "OR" ? "OR" : "AND";
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],0,1); $queries = createPartQry($page,$pagesize,$src,$combiner,$field,0,1);
$qry = mysqli_query($dbconn,$queries["all"]) $numres = zaehleTreffer($dbconn, $queries);
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
if(!$numres) if(!$numres)
{ {
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],1,1); $queries = createPartQry($page,$pagesize,$src,$combiner,$field,1,1);
$qry = mysqli_query($dbconn,$queries["all"]) $numres = zaehleTreffer($dbconn, $queries);
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen"); message("veraltete Datensätze wurden in die Suche einbezogen");
} }
if($numres) if($numres)
{ {
$qry = mysqli_query($dbconn,$queries["limited"]) $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn)); or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
while($res=mysqli_fetch_assoc($qry)) 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); $adresse = makeadressline($res);
if(!isset($res["updated_by"])) $kdnr = (int)$res["kdnr"];
$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>"); $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 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"); $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) if($numres < $lastdisplay)
$lastdisplay = $numres; $lastdisplay = $numres;
if($fulltag) if($fulltag)
+24 -39
View File
@@ -4,58 +4,44 @@ require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php"); require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php'); require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty; $smarty = new Smarty;
$pagesize = 50; $pagesize = 50;
if(!isset($err)) 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"])){ $listlines = array();
$_GET["link"]="";
}
$fulltag = utf8_encode($_GET["search"]);
$src = explode(" ", $fulltag); $src = explode(" ", $fulltag);
$combiner = mysql_escape_string($_GET["link"]); $combiner = $link == "OR" ? "OR" : "AND";
if($combiner != "AND" && $combiner != "OR")
{
$combiner = "AND";
}
$page = $_GET["page"];
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],0,2); $queries = createPartQry($page,$pagesize,$src,$combiner,$field,0,2);
$qry = mysqli_query($dbconn,$queries["all"]) $numres = zaehleTreffer($dbconn, $queries);
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
if(!$numres) if(!$numres)
{ {
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],1,2); $queries = createPartQry($page,$pagesize,$src,$combiner,$field,1,2);
$qry = mysqli_query($dbconn,$queries["all"]) $numres = zaehleTreffer($dbconn, $queries);
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen"); message("veraltete Datensätze wurden in die Suche einbezogen");
} }
if($numres) if($numres)
{ {
$qry = mysqli_query($dbconn,$queries["limited"]) $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn)); or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
while($res=mysqli_fetch_assoc($qry)) while($res=mysqli_fetch_assoc($qry))
{ {
if(!isset($res["nname"])) $adresse = makeadressline($res);
$name = $res["firma"]; $kdnr = (int)$res["kdnr"];
else $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>";
$name = $res["vname"]." ".$res["nname"]; $listlines[] = array("<a href='?action=liefershow&id=".$kdnr."'>".$kdnr."</a>", makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $aktionen);
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>");
} }
$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; $lastdisplay = ($page+1)*$pagesize;
if($numres < $lastdisplay) if($numres < $lastdisplay)
$lastdisplay = $numres; $lastdisplay = $numres;
@@ -64,10 +50,9 @@ if(!isset($err))
else else
ok($numres." Lieferanten sind insgesamt gespeichert."); ok($numres." Lieferanten sind insgesamt gespeichert.");
$speciallines = Array(); displayPages($pagesize,$page,$numres,"ajax_searchliefer");
displayPages($pagesize,$page,$numres,"ajax_searchkunden"); displayList($headings,$listlines,array());
displayList($headings,$listlines,$speciallines); displayPages($pagesize,$page,$numres,"ajax_searchliefer");
displayPages($pagesize,$page,$numres,"ajax_searchkunden");
} }
else else
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse."); ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
+14 -13
View File
@@ -22,26 +22,27 @@ if(!isset($err))
if(!isset($_GET["kdnid"])){ if(!isset($_GET["kdnid"])){
$_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); $src = explode(" ",$fulltag);
$combiner = mysql_escape_string($_GET["link"]); $combiner = $_GET["link"];
if($combiner != "AND" && $combiner != "OR") if($combiner != "AND" && $combiner != "OR")
{ {
$combiner = "AND"; $combiner = "AND";
} }
$page = $_GET["page"]; $page = (int)$_GET["page"];
$skspage = $_GET["skspage"]; $skspage = (int)$_GET["skspage"];
$typ = $_GET["typ"]; $typ = $_GET["typ"];
$id = $_GET["kdnid"]; $id = $_GET["kdnid"];
$queries = createRechQry($page,$pagesize,$src,$combiner,0); $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)); or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry); $numres = mysqli_num_rows($qry);
/* /*
if(!$numres) if(!$numres)
{ {
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1); $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)); or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry); $numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen"); message("veraltete Datensätze wurden in die Suche einbezogen");
@@ -49,7 +50,7 @@ if(!isset($err))
*/ */
if($numres) if($numres)
{ {
$qry = mysqli_query($dbconn,$queries["limited"]) $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn)); or die("Datenbank fehler: ".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry)) while($res=mysqli_fetch_assoc($qry))
{ {
@@ -82,14 +83,14 @@ if(!isset($err))
if($res["storno"] == 1){ if($res["storno"] == 1){
$listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'><font color='#FF0000'>".$res["drechnr"]."</font></a>", $listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'><font color='#FF0000'>".$res["drechnr"]."</font></a>",
$res["date"], $res["date"],
$res["artikel"], zeilenHtml($res["artikel"]),
$actions $actions
); );
} }
else{ else{
$listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["drechnr"]."</a>", $listlines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["drechnr"]."</a>",
$res["date"], $res["date"],
$res["artikel"], zeilenHtml($res["artikel"]),
$actions $actions
); );
} }
@@ -122,14 +123,14 @@ if(!isset($err))
{ {
echo "<h3>SKS Dokumente:</h3><div class='line'></div>"; echo "<h3>SKS Dokumente:</h3><div class='line'></div>";
$queries = createRechQry($skspage,$pagesize,$src,$combiner,1); $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)); or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry); $numres = mysqli_num_rows($qry);
/* /*
if(!$numres) if(!$numres)
{ {
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1); $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)); or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry); $numres = mysqli_num_rows($qry);
message("veraltete Datensätze wurden in die Suche einbezogen"); message("veraltete Datensätze wurden in die Suche einbezogen");
@@ -137,12 +138,12 @@ if(!isset($err))
*/ */
if($numres) if($numres)
{ {
$qry = mysqli_query($dbconn,$queries["limited"]); $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"]);
while($res=mysqli_fetch_assoc($qry)) while($res=mysqli_fetch_assoc($qry))
{ {
$speciallines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["rechnr"]."</a>", $speciallines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["rechnr"]."</a>",
$res["date"], $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>"); "<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"); $headings = array("Nummer","Datum","Artikel","Aktion");
+102 -140
View File
@@ -1,166 +1,132 @@
<?php <?php
require_once("../incs/connectmysql.php"); require_once("../incs/connectmysql.php");
require_once("../incs/funcs.php"); require_once("../incs/funcs.php");
require_once("../incs/listfuncs.php"); require_once("../incs/listfuncs.php");
require('../smarty/libs/Smarty.class.php'); require('../smarty/libs/Smarty.class.php');
$smarty = new Smarty; $smarty = new Smarty;
$pagesize = 25; $pagesize = 25;
if(!isset($err)) if(!isset($err))
{ $err = "";
$usercolors = array("#f00","#0c0","#ff0","#90c","#0bb","#066","#09f","#f60","#00f","#f09");
$fulltag = utf8_encode($_GET["search"]); /*
$src = explode(" ",$fulltag); * Datum und Dauer eines Termins für die Liste. Ab 24 Stunden zählt der
if(isset($_GET["link"])){ * Termin in Tagen, sonst in Stunden und Minuten.
$combiner = mysql_escape_string($_GET["link"]); */
}else{ function terminZeitraum($termtime, $termdauer)
$combiner = "";
}
if($combiner != "AND" && $combiner != "OR")
{ {
$combiner = "AND"; $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)
{
$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"]; else
$termtyp = $_GET["termtyp"]; $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; $_SESSION["termtyp"] = $termtyp;
$src = explode(" ", $fulltag);
$combiner = $link == "OR" ? "OR" : "AND";
$listlines = array();
$colors = array();
$queries = createTermQry($page,$pagesize,$src,$combiner,$termtyp); $queries = createTermQry($page,$pagesize,$src,$combiner,$termtyp);
$qry = mysqli_query($dbconn,$queries["all"]) $numres = zaehleTreffer($dbconn, $queries);
or die("Datenbank fehler: ".mysqli_error($dbconn));
$numres = mysqli_num_rows($qry);
if($numres) if($numres)
{ {
$qry = mysqli_query($dbconn,$queries["limited"]) $qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
or die("Datenbank fehler: ".mysqli_error($dbconn)); or die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn)));
$counter = 0; $counter = 0;
while($res=mysqli_fetch_assoc($qry)) while($res=mysqli_fetch_assoc($qry))
{ {
$counter = $counter+1; $counter++;
$termdauer = ""; $id = (int)$res["id"];
$termtime =""; $kopf = htmlspecialchars((string)$res["head"]);
$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); $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>";
//Normale Termine anzeigen $actions .= "<a href='?action=terminadd&id=".$id."&adressid=".(int)$res["adresse_id"]."'><span class='edit' title='Termin ändern'></span></a>";
if($res) $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>";
$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"]) 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>"; $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 else
$actions .= "<a href='?action=terminadd&id=".$res["id"]."&done=no'><span class='cross' title='Termin als nicht erledigt markieren'></span></a>"; $actions .= "<a href='?action=terminadd&id=".$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") list($termtime, $termdauer) = terminZeitraum($res["termtime"], $res["termdauer"]);
$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) $adresse = "<b>".htmlspecialchars($res["plz"]." ".$res["ort"]);
{
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"]) if($res["ortsteil"])
$adresse .= "-".$res["ortsteil"]; $adresse .= "-".htmlspecialchars((string)$res["ortsteil"]);
$adresse .= "</b><br />".$res["str"]." ".$res["hnr"]; $adresse .= "</b><br />".htmlspecialchars($res["str"]." ".$res["hnr"]);
if(isset($telres)){ // Nummern ohne Durchwahl-Bindestrich am Ende
if($res["vname"]) $nummern = db_wert($dbconn, "SELECT GROUP_CONCAT(nr ORDER BY id SEPARATOR ', ') FROM tel
$adresse .= "<br />Tel: ".$telres["nr"]."<br />(".$res["vname"]." ".$res["nname"].")"; WHERE partner_id = ? AND RIGHT(nr,1) != '-'", array($res["partner_id"]));
else if($res["nname"]) if($nummern)
$adresse .= "<br />Tel: ".$telres["nr"]."<br />(".$res["nname"].")"; {
$adresse .= "<br />Tel: ".htmlspecialchars($nummern);
if($res["vname"] || $res["nname"])
$adresse .= "<br />(".htmlspecialchars(trim($res["vname"]." ".$res["nname"])).")";
elseif($res["firma"]) elseif($res["firma"])
$adresse .= "<br />Tel: ".$telres["nr"]."<br />(".$res["firma"].")"; $adresse .= "<br />(".htmlspecialchars((string)$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, $namelist = htmlspecialchars($res["uservname"]." ".substr((string)$res["usernname"], 0, 1));
"<a href='?action=terminshow&id=".$res["id"]."'>".$res["head"]."</a>", foreach(array(2, 3, 4) as $n)
$termtime, if($res["user".$n])
$termdauer, $namelist .= ", ".htmlspecialchars($res["uservname".$n]." ".substr((string)$res["usernname".$n], 0, 1));
$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, $zeile = array("<a href='?action=terminshow&id=".$id."'><b>".htmlspecialchars((string)$res["typ"])."</b></a><br />".$namelist,
"<a href='?action=terminshow&id=".$res["id"]."'>".$res["head"]."</a>", "<a href='?action=terminshow&id=".$id."'>".$kopf."</a>",
$termtime, $termtime,
$termdauer, $termdauer,
$adresse, $adresse,
$actions, $actions);
$checkbox // 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."' />";
} }
else{ $listlines[] = $zeile;
$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>", if($res["user2"] || $res["user3"] || $res["user4"] || !$res["color"])
$termtime,
$termdauer,
$adresse,
$actions
);
}
if($res["user2"] || $res["user3"] || $res["user4"])
$colors[] = "#fff"; $colors[] = "#fff";
else if($res["color"]) else
$colors[] = $res["color"]; $colors[] = $res["color"];
else }
$colors[] = "#fff";
}
}
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; $lastdisplay = ($page+1)*$pagesize;
if($numres < $lastdisplay) if($numres < $lastdisplay)
$lastdisplay = $numres; $lastdisplay = $numres;
@@ -169,19 +135,15 @@ if(!isset($err))
else else
ok($numres." Termine sind insgesamt gespeichert."); ok($numres." Termine sind insgesamt gespeichert.");
displayPages($pagesize,$page,$numres,"ajax_searchterm",",$termtyp"); displayPages($pagesize,$page,$numres,"ajax_searchterm",",".$termtyp);
if($termtyp == 1){ if($termtyp == 1)
echo "<form action='?action=terminadd&id=multi&done=yes' method='post'><input type='hidden' name='pagesize' value='".$pagesize."'></input>"; echo "<form action='?action=terminadd&id=multi&done=yes' method='post'><input type='hidden' name='pagesize' value='".$pagesize."' />";
} elseif($termtyp == 3)
else if($termtyp == 3){ echo "<form action='?action=terminadd&id=multi&del=1' method='post'><input type='hidden' name='pagesize' value='".$pagesize."' />";
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)
displayList($headings,$listlines,Array(),$colors); echo "<input type='submit' value='Mehrfachänderung ausführen' /></form><br />";
if($termtyp == 1 || $termtyp == 3){ displayPages($pagesize,$page,$numres,"ajax_searchterm",",".$termtyp);
echo "<input type='submit' value='Mehrfachänderung ausführen'></input></form><br />";
}
displayPages($pagesize,$page,$numres,"ajax_searchterm",",$termtyp");
} }
else else
{ {
+3
View File
@@ -1,4 +1,7 @@
<?php <?php
// Wartungsskript: nur per Kommandozeile, nie über den Webserver
if(PHP_SAPI != "cli")
exit;
require_once("./incs/constants.php"); require_once("./incs/constants.php");
session_name(SESSION_NAME); session_name(SESSION_NAME);
session_start(); session_start();
+3
View File
@@ -1,4 +1,7 @@
<?php <?php
// Nur per Kommandozeile (Cronjob), nie über den Webserver
if(PHP_SAPI != "cli")
exit;
/* /*
* Datenbank-Backup (Cronjob). * Datenbank-Backup (Cronjob).
* *
+6
View File
@@ -2,6 +2,12 @@
require_once("../incs/constants.php"); require_once("../incs/constants.php");
session_name(SESSION_NAME); session_name(SESSION_NAME);
session_start(); session_start();
// Alle AJAX-Endpunkte laden diese Datei: ohne Anmeldung gibt es keine Daten.
if(($_SESSION["login"] ?? "") !== "valid")
{
http_response_code(403);
exit("Nicht angemeldet.");
}
require_once("../incs/settings.php"); require_once("../incs/settings.php");
$settings=readsettings(); $settings=readsettings();
if($settings == "valid") if($settings == "valid")
+6 -2
View File
@@ -1,5 +1,6 @@
<?php <?php
$dirs = explode("/",getcwd()); // Unter Windows liefert getcwd() Backslashes
$dirs = preg_split('#[/\\\\]#', getcwd());
$dir = $dirs[count($dirs)-1]; $dir = $dirs[count($dirs)-1];
if($dir == "ajax") if($dir == "ajax")
@@ -7,7 +8,10 @@ if($dir == "ajax")
else if($dir == "auto") else if($dir == "auto")
$dir = $dirs[count($dirs)-3]; $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/"); define("CONFIG_PATH", "/volume1/homes/wagner/kundenconfig/");
else else
define("CONFIG_PATH", "c:/kundenverwaltung/config/"); define("CONFIG_PATH", "c:/kundenverwaltung/config/");
+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 * Führt eine Abfrage mit ?-Platzhaltern aus. Gibt bei SELECT ein
* mysqli_result zurück, sonst true, bei Fehlern false. * 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()) function db_abfrage($dbconn, $sql, $params = array())
{ {
return mysqli_execute_query($dbconn, $sql, array_values($params)); 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. */ /* Alle Zeilen als Liste assoziativer Arrays, bei Fehlern false. */
function db_zeilen($dbconn, $sql, $params = array()) function db_zeilen($dbconn, $sql, $params = array())
{ {
$res = db_abfrage($dbconn, $sql, $params); $res = db_abfrage($dbconn, $sql, $params);
if(!$res) if(!$res)
return false; 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. */ /* 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); $res = db_abfrage($dbconn, $sql, $params);
if(!$res) if(!$res)
return false; 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. */ /* Erste Spalte der ersten Zeile, null ohne Treffer, bei Fehlern false. */
@@ -75,5 +135,5 @@ function db_wert($dbconn, $sql, $params = array())
if(!$res) if(!$res)
return false; return false;
$zeile = mysqli_fetch_row($res); $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) { function del_files($path, $pattern) {
$matches = Array(); $matches = Array();
$entries = Array(); $entries = Array();
// Fehlt das Verzeichnis, gibt es auch nichts zu loeschen
if(!is_dir($path))
return;
$dir = dir($path); $dir = dir($path);
while ($entry = $dir->read()) while ($entry = $dir->read())
{ {
@@ -51,6 +54,10 @@ function del_files($path, $pattern) {
function search_file($path, $pattern) { function search_file($path, $pattern) {
$matches = Array(); $matches = Array();
$entries = Array(); $entries = Array();
$ret = "";
// Fehlt das Verzeichnis, gibt es auch nichts zu finden
if(!is_dir($path))
return $ret;
$dir = dir($path); $dir = dir($path);
while ($entry = $dir->read()) while ($entry = $dir->read())
{ {
+220 -227
View File
@@ -1,97 +1,84 @@
<?php <?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) 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) if(!$full)
{ $query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr, tel.nr AS tel
$query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr, tel.nr AS tel FROM partner $joins
LEFT JOIN adresse ON adresse.partner_id = partner.id WHERE updated_by = 0 AND adresse.typ_id = 1 AND partner.typ_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";
}
else else
{ $query = "SELECT partner.id AS kdnr,firma,
$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 GROUP_CONCAT(CONCAT(vname,' ',nname) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS nname, '' AS vname,
LEFT JOIN adresse ON adresse.partner_id = partner.id GROUP_CONCAT(CONCAT(vname2,' ',nname2) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS nname2,'' AS vname2,'' AS ort,
LEFT JOIN strasse ON strasse.id = str_id GROUP_CONCAT(CONCAT(plz,' ',ort) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS plz,
LEFT JOIN ort ON ort.id = ort_id GROUP_CONCAT(CONCAT(str,' ',hnr) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS str,'' AS hnr,
LEFT JOIN tel ON tel.partner_id = partner.id GROUP_CONCAT(tel.nr ORDER BY adresse.id, tel.id SEPARATOR '\n') AS tel
LEFT JOIN kontakt ON kontakt.partner_id = partner.id $joins
WHERE partner.typ_id = $typ"; 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";
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";
$ret["all"] = $query; $ret["all"] = $query;
$query .= " LIMIT ".(intval($page)*$pagesize).", $pagesize"; $ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["limited"] = $query; $ret["params"] = $params;
return $ret; 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) 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 $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 FROM partner
@@ -100,98 +87,33 @@ function createAdressQry($page,$pagesize,$src,$combiner,$fields,$full=0,$typ=1)
LEFT JOIN ort ON ort.id = ort_id LEFT JOIN ort ON ort.id = ort_id
LEFT JOIN tel ON tel.partner_id = partner.id LEFT JOIN tel ON tel.partner_id = partner.id
LEFT JOIN kontakt ON kontakt.partner_id = partner.id LEFT JOIN kontakt ON kontakt.partner_id = partner.id
WHERE updated_by = 0 AND partner.typ_id = $typ"; WHERE ".($full ? "" : "updated_by = 0 AND ")."partner.typ_id = ?";
} $params = array((int)$typ);
else $query .= partnerSuchbedingung($src, $combiner, $fields, $params);
{ $query .= " GROUP BY adresse.id ORDER 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 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";
$ret["all"] = $query; $ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize"; $ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["limited"] = $query; $ret["params"] = $params;
return $ret; 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) 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) if(!$sks)
{ {
$query = "SELECT rechnung.$docnr AS rechnr, $query = "SELECT rechnung.$docnr AS rechnr,
rechnung.id, rechnung.id,
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') AS date, 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, adresse_id,
storno, storno,
rechnung.typ_id 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 rechtyp ON rechnung.typ_id = rechtyp.id
LEFT JOIN artikel_rechn ON rechnung.id = artikel_rechn.rech_id LEFT JOIN artikel_rechn ON rechnung.id = artikel_rechn.rech_id
LEFT JOIN artikel ON artikel_rechn.art_id = artikel.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) foreach($src AS $tag)
{ {
$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 else
@@ -211,88 +134,104 @@ function createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,$sks=0)
$query = "SELECT rechnung.$docnr AS rechnr, $query = "SELECT rechnung.$docnr AS rechnr,
rechnung.id, rechnung.id,
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') AS date, 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, adresse_id,
rechnung.typ_id rechnung.typ_id
FROM rechnung FROM rechnung
LEFT JOIN rechtyp ON rechnung.typ_id = rechtyp.id LEFT JOIN rechtyp ON rechnung.typ_id = rechtyp.id
RIGHT JOIN artikelsks ON rechnung.rechnr = artikelsks.rechnr 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) 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 "; $query .= " GROUP BY rechnung.rechnr ORDER BY rechnung.datetime DESC ";
$ret["all"] = $query; $ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize"; $query .= " LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["limited"] = $query; $ret["limited"] = $query;
$ret["params"] = $params;
return $ret; return $ret;
} }
/* Projekte eines Kunden, Rueckgabe wie createKdnRechQry(). */
function createKdnProjectQry($page,$pagesize,$src,$combiner,$id) function createKdnProjectQry($page,$pagesize,$src,$combiner,$id)
{ {
$combiner = $combiner == "OR" ? "OR" : "AND";
$params = array($id);
$query = "SELECT project.id, project.name, $query = "SELECT project.id, project.name,
DATE_FORMAT(project.datetime, '%d.%m.%Y') AS date, DATE_FORMAT(project.datetime, '%d.%m.%Y') AS date,
SUM(CASE WHEN rechn = 0 THEN work.std ELSE 0 END) AS work 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 JOIN work ON project.id = work.project_id
AND partner_id='".$id."'"; AND partner_id = ?";
foreach($src AS $tag) foreach($src AS $tag)
{ {
$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 "; $query .= " GROUP BY project.id ORDER BY project.datetime DESC ";
$ret["all"] = $query; $ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize"; $ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["limited"] = $query; $ret["params"] = $params;
return $ret; return $ret;
} }
/* Kommissionsadressen (adresstyp 5) eines Kunden, Rueckgabe wie createKdnRechQry(). */
function createKommQry($page,$pagesize,$src,$combiner,$id) function createKommQry($page,$pagesize,$src,$combiner,$id)
{ {
$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 $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 FROM adresse
LEFT JOIN strasse ON adresse.str_id = strasse.id LEFT JOIN strasse ON adresse.str_id = strasse.id
LEFT JOIN ort ON ort_id = ort.id LEFT JOIN ort ON ort_id = ort.id
LEFT JOIN tel ON adresse.id = tel.adresse_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) foreach($src AS $tag)
{ {
$tag .= "%"; $tag .= "%";
$query .= " $combiner (ort LIKE '$tag' $query .= " $combiner (ort LIKE ?
OR str LIKE '$tag' OR str LIKE ?
OR nr LIKE '$tag' OR nr LIKE ?
OR vname LIKE '$tag' OR vname LIKE ?
OR nname LIKE '$tag' OR nname LIKE ?
OR vname2 LIKE '$tag' OR vname2 LIKE ?
OR nname2 LIKE '$tag' OR nname2 LIKE ?
OR firma LIKE '$tag')"; OR firma LIKE ?)";
for($i = 0; $i < 8; $i++)
$params[] = $tag;
} }
$query .= " GROUP BY adresse.id ORDER BY adresse.id DESC "; $query .= " GROUP BY adresse.id ORDER BY adresse.id DESC ";
$ret["all"] = $query; $ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize"; $ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["limited"] = $query; $ret["params"] = $params;
return $ret; return $ret;
} }
/*
* Suche über alle Dokumente, Rückgabe wie createKdnRechQry().
*/
function createRechQry($page,$pagesize,$src,$combiner,$sks=0) function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
{ {
$docnr = "rechnr"; $docnr = "rechnr";
$combiner = $combiner == "OR" ? "OR" : "AND";
$params = array();
if(!$sks) 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, $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.$docnr AS rechnr,
rechnung.id, rechnung.id,
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') AS date, 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, adresse_id,
storno, storno,
rechnung.typ_id rechnung.typ_id
@@ -304,9 +243,10 @@ function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
foreach($src AS $tag) foreach($src AS $tag)
{ {
$tag = "%".$tag."%"; $tag = "%".$tag."%";
$query .= " $combiner (artikel.bezeichn LIKE '$tag' OR $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 '$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 ? OR
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')"; DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE ?)";
array_push($params, $tag, $tag, $tag);
} }
} }
else else
@@ -315,7 +255,7 @@ function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
rechnung.$docnr AS rechnr, rechnung.$docnr AS rechnr,
rechnung.id, rechnung.id,
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') AS date, 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, adresse_id,
storno = 0, storno = 0,
rechnung.typ_id rechnung.typ_id
@@ -326,32 +266,43 @@ function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
foreach($src AS $tag) foreach($src AS $tag)
{ {
$tag = "%".$tag."%"; $tag = "%".$tag."%";
$query .= " $combiner (artikelsks.bezeichn1 LIKE '$tag' OR $query .= " $combiner (artikelsks.bezeichn1 LIKE ? OR
artikelsks.bezeichn2 LIKE '$tag' OR artikelsks.bezeichn2 LIKE ? OR
rechnung.rechnr LIKE '$tag' OR rechnung.rechnr LIKE ? OR
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')"; 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 "; $query .= " GROUP BY rechnung.rechnr ORDER BY rechnung.datetime DESC ";
$ret["all"] = $query; $ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize"; $query .= " LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["limited"] = $query; $ret["limited"] = $query;
$ret["params"] = $params;
return $ret; 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) function createTermQry($page,$pagesize,$src,$combiner,$termtyp)
{ {
$combiner = $combiner == "OR" ? "OR" : "AND";
$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, $params = array();
adresse.firma as firma, $query = "SELECT termin.id, termtyp.typ, termin.head, MIN(termtime) AS termtime,
user.vname as uservname, user.nname as usernname, user.color as color, SEC_TO_TIME(SUM(TIME_TO_SEC(termdauer))) AS termdauer,
user2.vname as uservname2, user2.nname as usernname2, user, user2, user3, user4, done, partner_id, adresse_id, main_id,
user3.vname as uservname3, user3.nname as usernname3, str, ort, ortsteil, plz, hnr, adresse.vname AS vname, adresse.nname AS nname,
user4.vname as uservname4, user4.nname as usernname4, 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 firma, vname2, nname2
FROM termin FROM termin
LEFT JOIN termtyp ON termin.typ = termtyp.id LEFT JOIN termtyp ON termin.typ = termtyp.id
@@ -364,39 +315,50 @@ function createTermQry($page,$pagesize,$src,$combiner,$termtyp)
LEFT JOIN user AS user3 ON termin.user3 = user3.id LEFT JOIN user AS user3 ON termin.user3 = user3.id
LEFT JOIN user AS user4 ON termin.user4 = user4.id LEFT JOIN user AS user4 ON termin.user4 = user4.id
WHERE "; WHERE ";
if($termtyp == 1) switch((int)$termtyp)
$query .= "termdauer != '24:00:00' AND termtime != '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()"; {
elseif($termtyp == 2) case 2:
$query .= "termdauer != '24:00:00' AND termtime = '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()"; $query .= "termdauer != '24:00:00' AND termtime = '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()";
elseif($termtyp == 3) break;
case 3:
$query .= "termdauer != '24:00:00' AND done = 1 AND act_date < NOW()"; $query .= "termdauer != '24:00:00' AND done = 1 AND act_date < NOW()";
elseif($termtyp == 4) break;
case 4:
$query .= "termdauer != '24:00:00' AND act_date > NOW()"; $query .= "termdauer != '24:00:00' AND act_date > NOW()";
elseif($termtyp == 5) break;
case 5:
$query .= "termdauer = '24:00:00'"; $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) foreach($src AS $tag)
{ {
$tag = "%".$tag."%"; $tag = "%".$tag."%";
$query .= " $combiner (termin.head LIKE '$tag' OR $query .= " $combiner (termin.head LIKE ? OR
termin.text LIKE '$tag' OR termin.text LIKE ? OR
adresse.firma LIKE '$tag' OR adresse.firma LIKE ? OR
adresse.vname LIKE '$tag' OR adresse.vname LIKE ? OR
adresse.nname LIKE '$tag' OR adresse.nname LIKE ? OR
ort LIKE '$tag' OR ort LIKE ? OR
plz LIKE '$tag' OR plz LIKE ? OR
str LIKE '$tag' OR str LIKE ? OR
DATE_FORMAT(termtime, '%d.%m.%Y %H:%i') LIKE '$tag')"; 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"; $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"; $query .= " GROUP BY main_id ORDER BY termtime ASC";
else else
$query .= " GROUP BY main_id ORDER BY termtime DESC"; $query .= " GROUP BY main_id ORDER BY termtime DESC";
$ret["all"] = $query; $ret["all"] = $query;
$query .= " LIMIT ".$page*$pagesize.", $pagesize"; $ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
$ret["limited"] = $query; $ret["params"] = $params;
return $ret; return $ret;
} }
@@ -446,6 +408,31 @@ function createMsgQry($page,$pagesize,$src,$combiner,$user)
return $ret; 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 = "") function displayPages($pagesize,$currpage,$numentries,$refreshfunc,$ad_params = "")
{ {
echo "Seite: "; echo "Seite: ";
@@ -535,7 +522,8 @@ function displayList($header,$entries,$speciallines=array(),$colors=array())
echo "<tr style='background-color: #e2e2e2;'>"; echo "<tr style='background-color: #e2e2e2;'>";
if(isset($colors[$i])) 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) foreach($entry AS $element)
{ {
@@ -564,25 +552,30 @@ function displayList($header,$entries,$speciallines=array(),$colors=array())
echo "</table>"; echo "</table>";
} }
/*
* Bausteine fuer die Trefferlisten. Sie liefern fertiges HTML und escapen
* die Werte aus der Datenbank deshalb selbst.
*/
function makenameline($adresse) function makenameline($adresse)
{ {
$ret = $adresse["vname"]." ".$adresse["nname"]; $ret = zeilenHtml(trim($adresse["vname"]." ".$adresse["nname"]));
if($adresse["firma"]) if(!empty($adresse["firma"]))
$ret .= "<br /><i><u>".$adresse["firma"]."</u></i>"; $ret .= "<br /><i><u>".zeilenHtml($adresse["firma"])."</u></i>";
return $ret; return $ret;
} }
function makeadressline($adresse) function makeadressline($adresse)
{ {
$ret["ort"] = $adresse["plz"]." ".$adresse["ort"]; $ret["ort"] = zeilenHtml(trim($adresse["plz"]." ".$adresse["ort"]));
$ret["str"] = $adresse["str"]." ".$adresse["hnr"]; $ret["str"] = zeilenHtml(trim($adresse["str"]." ".$adresse["hnr"]));
return $ret; return $ret;
} }
function maketelline($tel) function maketelline($tel)
{ {
$nr = isset($tel["tel"]) ? (string)$tel["tel"] : "";
$ret = ""; $ret = "";
if(isset($tel["vwahl"]) && !stristr($tel["tel"], "-") && !stristr($tel["tel"], "/")) if(!empty($tel["vwahl"]) && !str_contains($nr, "-") && !str_contains($nr, "/"))
$ret = $tel["vwahl"]."-"; $ret = zeilenHtml($tel["vwahl"])."-";
$ret .= $tel["tel"]; $ret .= zeilenHtml($nr);
return $ret; return $ret;
} }
+153 -171
View File
@@ -1,6 +1,19 @@
<?php <?php
require_once(__DIR__."/db.php");
require_once('tcpdf/tcpdf.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) function makerawPDF($ajax)
{ {
@@ -45,13 +58,13 @@ function makerawPDF($ajax)
$this->SetY(-16.5); $this->SetY(-16.5);
$linepos=$this->GetY(); $linepos=$this->GetY();
$this->setX(30); $this->setX(30);
$this->SetFont('Times','',9); $this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(20,47,119); $this->SetTextColor(20,47,119);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R'); $this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-16.3); $this->SetY(-16.3);
$this->setX(15); $this->setX(15);
//Arial fett 6 //Arial fett 6
$this->SetFont('helvetica','B',7); $this->SetFont(PDF_SCHRIFT_SANS,'B',7);
//Seitenzahl //Seitenzahl
$this->SetDrawColor(20,47,119); $this->SetDrawColor(20,47,119);
@@ -100,12 +113,12 @@ function makerawPDF($ajax)
//Position 1,5 cm von unten //Position 1,5 cm von unten
$this->SetY(-23); $this->SetY(-23);
$this->setX(30); $this->setX(30);
$this->SetFont('Times','',9); $this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(0,0,0); $this->SetTextColor(0,0,0);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R'); $this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-19); $this->SetY(-19);
//Arial fett 6 //Arial fett 6
$this->SetFont('helvetica','B',8); $this->SetFont(PDF_SCHRIFT_SANS,'B',8);
$this->SetTextColor(124,124,138); $this->SetTextColor(124,124,138);
//Seitenzahl //Seitenzahl
$this->setX(15); $this->setX(15);
@@ -164,13 +177,13 @@ function makerawPDF($ajax)
//Position 1,5 cm von unten //Position 1,5 cm von unten
$this->SetY(-17); $this->SetY(-17);
$this->setX(30); $this->setX(30);
$this->SetFont('Times','',9); $this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(0,0,0); $this->SetTextColor(0,0,0);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R'); $this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-10); $this->SetY(-10);
$this->setX(15); $this->setX(15);
//Arial fett 6 //Arial fett 6
$this->SetFont('helvetica','B',6); $this->SetFont(PDF_SCHRIFT_SANS,'B',6);
$this->SetTextColor(124,124,138); $this->SetTextColor(124,124,138);
//Seitenzahl //Seitenzahl
@@ -214,7 +227,7 @@ function makeumschlagAddress($ajax, $address){
$pdf->SetAutoPageBreak(true,5); $pdf->SetAutoPageBreak(true,5);
$pdf->AddPage("L",$pagelayout); $pdf->AddPage("L",$pagelayout);
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setY(55); $pdf->setY(55);
$pdf->setX(140); $pdf->setX(140);
$pdf->MultiCell(75,50,str_replace("<br />","\n",$address["adresse"]),0,"L",0); $pdf->MultiCell(75,50,str_replace("<br />","\n",$address["adresse"]),0,"L",0);
@@ -261,7 +274,7 @@ function makerawPDFcopy($ajax)
{ {
$this->SetY(-17); $this->SetY(-17);
$this->setX(30); $this->setX(30);
$this->SetFont('Times','',9); $this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(0,0,0); $this->SetTextColor(0,0,0);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R'); $this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-10); $this->SetY(-10);
@@ -303,7 +316,7 @@ function makerawPDFanfahrt($ajax)
{ {
$this->SetY(-17); $this->SetY(-17);
$this->setX(30); $this->setX(30);
$this->SetFont('Times','',9); $this->SetFont(PDF_SCHRIFT_SERIF,'',9);
$this->SetTextColor(0,0,0); $this->SetTextColor(0,0,0);
$this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R'); $this->Cell(180,5,'Seite '.$this->getAliasNumPage().' von '.$this->getAliasNbPages(),0,0,'R');
$this->SetY(-10); $this->SetY(-10);
@@ -329,13 +342,13 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
//$pdf->SetDrawColor(0,0,0); //$pdf->SetDrawColor(0,0,0);
if($_SESSION["firma"] == "Wagner Markisen") if($_SESSION["firma"] == "Wagner Markisen")
{ {
$pdf->SetFont('helvetica','B',10); $pdf->SetFont(PDF_SCHRIFT_SANS,'B',10);
$pdf->setY(52); $pdf->setY(52);
$pdf->setX(165); $pdf->setX(165);
$pdf->cell(40,5,"Öffnungszeiten:",0,0); $pdf->cell(40,5,"Öffnungszeiten:",0,0);
$pdf->ln(5); $pdf->ln(5);
$pdf->setX(165); $pdf->setX(165);
$pdf->SetFont('helvetica','',9); $pdf->SetFont(PDF_SCHRIFT_SANS,'',9);
$pdf->cell(12,4,"Mo.:"); $pdf->cell(12,4,"Mo.:");
$pdf->cell(20,4," 8:00 bis 12:00",0,0); $pdf->cell(20,4," 8:00 bis 12:00",0,0);
$pdf->ln(3.8); $pdf->ln(3.8);
@@ -361,7 +374,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
} }
//STORNO!!! //STORNO!!!
if($rechnung["storno"] == 1){ if($rechnung["storno"] == 1){
$pdf->SetFont('helvetica','B',75); $pdf->SetFont(PDF_SCHRIFT_SANS,'B',75);
$pdf->setY(135); $pdf->setY(135);
$pdf->setX(70); $pdf->setX(70);
$pdf->SetTextColor(200,0,0); $pdf->SetTextColor(200,0,0);
@@ -372,7 +385,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
} }
//ADRESSE!!!! //ADRESSE!!!!
$pdf->SetFont('helvetica','B',6); $pdf->SetFont(PDF_SCHRIFT_SANS,'B',6);
$pdf->setY(35); $pdf->setY(35);
$pdf->setX(25); $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->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->SetTextColor(0,0,0);
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setY(40); $pdf->setY(40);
$pdf->setX(25); $pdf->setX(25);
$pdf->MultiCell(75,45,str_replace("<br />","\n",$adresse),0,"L",0); $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"])); $datum=strftime("%d.%m.%Y",strtotime($rechnung["datetime"]));
$pdf->Cell(0,5,$datum,0,0,'L'); $pdf->Cell(0,5,$datum,0,0,'L');
//typ //typ
$pdf->SetFont('Times','B',18); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',18);
$pdf->sety(80); $pdf->sety(80);
$pdf->setX(20); $pdf->setX(20);
if($rechnung["typ"] != "Brief") if($rechnung["typ"] != "Brief")
@@ -412,19 +425,19 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
if($rechnung["typ"] != "Brief") if($rechnung["typ"] != "Brief")
{ {
$pdf->SetFont('Times','B',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',12);
$pdf->sety(95); $pdf->sety(95);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(0,5,$rechnung["typ"].": ",0,0,'L'); $pdf->Cell(0,5,$rechnung["typ"].": ",0,0,'L');
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety(95); $pdf->sety(95);
$pdf->setX(60); $pdf->setX(60);
$pdf->Cell(0,5,$rechnung["drechnr"],0,0,'L'); $pdf->Cell(0,5,$rechnung["drechnr"],0,0,'L');
if($_SESSION["firma"] == "LSG Oberallgäu") 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->Cell(0,5,"Bitte bei der Überweisung angeben!!",0,0,'L');
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
} }
$currY = 100; $currY = 100;
} }
@@ -436,11 +449,11 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
if($_SESSION["firma"] == "Wagner Markisen") if($_SESSION["firma"] == "Wagner Markisen")
{ {
$pdf->SetFont('Times','B',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',12);
$pdf->sety(100); $pdf->sety(100);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(0,5,"Kundennummer: ",0,0,'L'); $pdf->Cell(0,5,"Kundennummer: ",0,0,'L');
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety(100); $pdf->sety(100);
$pdf->setX(60); $pdf->setX(60);
$pdf->Cell(0,5,$rechnung["partner_id"],0,0,'L'); $pdf->Cell(0,5,$rechnung["partner_id"],0,0,'L');
@@ -454,7 +467,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
//Begrüßung //Begrüßung
$pdf->SetFont('Times','B',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',12);
$pdf->setY($currY); $pdf->setY($currY);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(0,5,$rechnung["anrede1"],0,0,'L'); $pdf->Cell(0,5,$rechnung["anrede1"],0,0,'L');
@@ -470,7 +483,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
if ($rechnung["typ"] == "Rechnung") if ($rechnung["typ"] == "Rechnung")
{ {
// $currY += 5; // $currY += 5;
// $pdf->SetFont('Times','',12); // $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
// $pdf->sety($currY); // $pdf->sety($currY);
// $pdf->setX(20); // $pdf->setX(20);
// $pdf->Cell(0,5,"Wir bedanken uns für Ihr Vertrauen.",0,0,'L'); // $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") elseif ($rechnung["typ"] == "Auftragsbestätigung")
{ {
$currY += 5; $currY += 5;
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety($currY); $pdf->sety($currY);
$pdf->setX(20); $pdf->setX(20);
if($_SESSION["firma"] == "Ingenieurbüro Wagner") if($_SESSION["firma"] == "Ingenieurbüro Wagner")
@@ -489,7 +502,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
elseif ($rechnung["typ"] == "Angebot") elseif ($rechnung["typ"] == "Angebot")
{ {
$currY += 5; $currY += 5;
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety($currY); $pdf->sety($currY);
$pdf->setX(20); $pdf->setX(20);
if($rechnung["anrede1"] || $rechnung["anrede2"]) if($rechnung["anrede1"] || $rechnung["anrede2"])
@@ -509,7 +522,7 @@ function makefirstpage($pdf,$adresse,$rechnung,$ajax)
if (rtrim($rechnung["intro"])!="" ) if (rtrim($rechnung["intro"])!="" )
{ {
$currY += 5; $currY += 5;
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->sety($currY); $pdf->sety($currY);
$pdf->setX(20); $pdf->setX(20);
if($rechnung["typ"] == "Brief") if($rechnung["typ"] == "Brief")
@@ -553,7 +566,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->setX(20); $newpdf->setX(20);
$newcurrY=3; $newcurrY=3;
$newpdf->setY($newcurrY); $newpdf->setY($newcurrY);
$newpdf->SetFont('Times','',14); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->setX(20); $newpdf->setX(20);
$newpdf->MultiCell(100-$mixedmwst*15,5,$artikel[0]["art"]["bezeichn"],0,'L',0,1); $newpdf->MultiCell(100-$mixedmwst*15,5,$artikel[0]["art"]["bezeichn"],0,'L',0,1);
$newpdf->setX(120-$mixedmwst*15); $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->Cell(15,5,$artikel[0]["art"]["artmwst"]."%",0,0,'R');
} }
$newpdf->setY($newcurrY+2); $newpdf->setY($newcurrY+2);
$newpdf->SetFont('Times','',12); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
foreach($artikel[0]["eig"] as $eig) foreach($artikel[0]["eig"] as $eig)
{ {
$newpdf->Cell(100, 3, $eig["bezeichn"], 0, 1, "L", 0); $newpdf->Cell(100, 3, $eig["bezeichn"], 0, 1, "L", 0);
@@ -582,7 +595,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
} }
//Table-HEAD //Table-HEAD
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->sety($pdf->GetY()+5); $pdf->sety($pdf->GetY()+5);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(100-$mixedmwst*15,5,'Bezeichnung',0,0,'L'); $pdf->Cell(100-$mixedmwst*15,5,'Bezeichnung',0,0,'L');
@@ -619,7 +632,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY = $newpdf->GetY(); $currY = $newpdf->GetY();
if (($currY+$artheight > 255 && $artheight < 219) || ($art["art"]["pagebreak"] && !$wholetablebreak)) 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->Line(18 , $currY+4.3, 200, $currY+4.3);
$newpdf->setY($currY+7); $newpdf->setY($currY+7);
$newpdf->setX(130-$mixedmwst*15); $newpdf->setX(130-$mixedmwst*15);
@@ -632,7 +645,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->AddPage("P"); $newpdf->AddPage("P");
//Table-re-HEAD //Table-re-HEAD
$currY = $pdf->GetY(); $currY = $pdf->GetY();
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(100-$mixedmwst*15,5,'Bezeichnung',0,0,'L'); $pdf->Cell(100-$mixedmwst*15,5,'Bezeichnung',0,0,'L');
$pdf->setX(120-$mixedmwst*15); $pdf->setX(120-$mixedmwst*15);
@@ -651,7 +664,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY = $pdf->GetY(); $currY = $pdf->GetY();
$newpdf->SetFont('Times','',14); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
} }
$currY = $newpdf->GetY(); $currY = $newpdf->GetY();
} }
@@ -671,7 +684,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY= $newpdf->GetY()+5; $currY= $newpdf->GetY()+5;
$newpdf->setY($currY); $newpdf->setY($currY);
$newpdf->SetFont('Times','',14); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->setX(120-$mixedmwst*15); $newpdf->setX(120-$mixedmwst*15);
$newpdf->Cell(15,5,number_significant($art["art"]["menge"], 3)." ".$art["art"]["einheit"],0,0,'C'); $newpdf->Cell(15,5,number_significant($art["art"]["menge"], 3)." ".$art["art"]["einheit"],0,0,'C');
$newpdf->setX(135-$mixedmwst*15); $newpdf->setX(135-$mixedmwst*15);
@@ -689,7 +702,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
} }
if($art["art"]["rabatt"]) if($art["art"]["rabatt"])
{ {
$newpdf->SetFont('Times','I',14); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'I',14);
$newpdf->setX(110-$mixedmwst*15); $newpdf->setX(110-$mixedmwst*15);
if(!$art["art"]["rabatttyp"]) if(!$art["art"]["rabatttyp"])
$newpdf->Cell(100,5,"Abzüglich ".$art["art"]["rabatt"]."% Rabatt",0,0,'L'); $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->setY($currY);
$newpdf->setX(20); $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); $newpdf->MultiCell(90-$mixedmwst*15,5,$art["art"]["bezeichn"],0,'L',0,1);
$currY = $newpdf->GetY(); $currY = $newpdf->GetY();
$newpdf->SetFont('Times','',12); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
foreach($art["eig"] as $eig) foreach($art["eig"] as $eig)
{ {
if($eig["einheit"] == "keine") if($eig["einheit"] == "keine")
@@ -728,7 +741,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY= $newpdf->GetY()+3; $currY= $newpdf->GetY()+3;
$newpdf->setY($currY); $newpdf->setY($currY);
$newpdf->SetFont('Times','',14); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->setX(120-$mixedmwst*15); $newpdf->setX(120-$mixedmwst*15);
$newpdf->Cell(15,5,number_significant($art["art"]["menge"], 3)." ".$art["art"]["einheit"],0,0,'C'); $newpdf->Cell(15,5,number_significant($art["art"]["menge"], 3)." ".$art["art"]["einheit"],0,0,'C');
$newpdf->setX(135-$mixedmwst*15); $newpdf->setX(135-$mixedmwst*15);
@@ -743,7 +756,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$newpdf->Ln(); $newpdf->Ln();
if($art["art"]["rabatt"]) if($art["art"]["rabatt"])
{ {
$newpdf->SetFont('Times','I',14); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'I',14);
$newpdf->setX(110-$mixedmwst*15); $newpdf->setX(110-$mixedmwst*15);
if(!$art["art"]["rabatttyp"]) if(!$art["art"]["rabatttyp"])
$newpdf->Cell(100,5,"Abzüglich ".$art["art"]["rabatt"]."% Rabatt",0,0,'L'); $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->setY($currY);
$newpdf->setX(25); $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); $newpdf->MultiCell(85-$mixedmwst*15,5,"(Optional: " .$art["art"]["bezeichn"].")",0,'L',0,1);
$currY = $newpdf->GetY(); $currY = $newpdf->GetY();
$newpdf->SetFont('Times','',12); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
foreach($art["eig"] as $eig) foreach($art["eig"] as $eig)
{ {
if($eig["einheit"] == "keine") if($eig["einheit"] == "keine")
@@ -780,7 +793,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
$currY= $newpdf->GetY()+3; $currY= $newpdf->GetY()+3;
$newpdf->setY($currY); $newpdf->setY($currY);
$newpdf->SetFont('Times','',14); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$newpdf->setX(120-$mixedmwst*15); $newpdf->setX(120-$mixedmwst*15);
$newpdf->Cell(15,5,number_significant($art["art"]["menge"], 3)." ".$art["art"]["einheit"],0,0,'C'); $newpdf->Cell(15,5,number_significant($art["art"]["menge"], 3)." ".$art["art"]["einheit"],0,0,'C');
$newpdf->setX(135-$mixedmwst*15); $newpdf->setX(135-$mixedmwst*15);
@@ -796,7 +809,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
if($art["art"]["rabatt"]) if($art["art"]["rabatt"])
{ {
$newpdf->SetFont('Times','I',14); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'I',14);
$newpdf->setX(110-$mixedmwst*15); $newpdf->setX(110-$mixedmwst*15);
if(!$art["art"]["rabatttyp"]) if(!$art["art"]["rabatttyp"])
$newpdf->Cell(100,5,"Abzüglich ".$art["art"]["rabatt"]."% Rabatt",0,0,'L'); $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->setY($currY);
$newpdf->setX(25); $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); $newpdf->MultiCell(85-$mixedmwst*15,5,"(Alternativ: " .$art["art"]["bezeichn"].")",0,'L',0,1);
$currY = $newpdf->GetY(); $currY = $newpdf->GetY();
$newpdf->SetFont('Times','',12); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
foreach($art["eig"] as $eig) foreach($art["eig"] as $eig)
{ {
if($eig["einheit"] == "keine") if($eig["einheit"] == "keine")
@@ -837,7 +850,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
{ {
$currY = $pdf->GetY(); $currY = $pdf->GetY();
//Endbetrag //Endbetrag
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->Line(18 , $currY+2, 200, $currY+2); $pdf->Line(18 , $currY+2, 200, $currY+2);
$pdf->setY($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'); $pdf->Cell(30,6,number_format($ubertr_all,2,",",".")." ".$wahrung,0,1,'R');
$currY=$pdf->GetY()+10; $currY=$pdf->GetY()+10;
$pdf->setY($currY); $pdf->setY($currY);
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setX(20); $pdf->setX(20);
$currY=$currY; $currY=$currY;
} }
@@ -883,7 +896,7 @@ function maketable($pdf,$artikel,$rechnung,$ajax)
{ {
$currY = $pdf->GetY(); $currY = $pdf->GetY();
//Endbetrag //Endbetrag
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->Line(18 , $currY+2, 200, $currY+2); $pdf->Line(18 , $currY+2, 200, $currY+2);
$pdf->setY($currY+2); $pdf->setY($currY+2);
$pdf->setX(130-$mixedmwst*15); $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'); $pdf->Cell(30,6,number_format($ubertr_all,2,",",".")." ".$wahrung,0,1,'R');
$currY=$pdf->GetY()+10; $currY=$pdf->GetY()+10;
$pdf->setY($currY); $pdf->setY($currY);
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setX(20); $pdf->setX(20);
$currY=$currY; $currY=$currY;
} }
@@ -978,7 +991,7 @@ function makeEndPage($pdf,$rechnung,$gesamtpreis,$ajax)
} }
if (rtrim($rechnung["outro"]) != "") if (rtrim($rechnung["outro"]) != "")
{ {
$newpdf->SetFont('Times','',12); $newpdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$newpdf->setX(20); $newpdf->setX(20);
$newpdf->MultiCell(0,5,rtrim($rechnung["outro"]),0,'L',0); $newpdf->MultiCell(0,5,rtrim($rechnung["outro"]),0,'L',0);
//ENDE!! //ENDE!!
@@ -1121,9 +1134,9 @@ function savePDF($pdf,$PDFpath)
if (preg_match("=^\.=", $file)) if (preg_match("=^\.=", $file))
continue; # ., .. und versteckte Dateien (.gitkeep) ignorieren continue; # ., .. und versteckte Dateien (.gitkeep) ignorieren
elseif(is_file($PDFpathpart.$file)) 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))); $lastTime = ceil((time() - filemtime($PDFpathpart.$file)));
if($lastTime > 20){ if($lastTime > PDF_TEMP_MAX_ALTER){
unlink($PDFpathpart.$file); unlink($PDFpathpart.$file);
} }
} }
@@ -1144,27 +1157,27 @@ function makeImageFromPDF($PDFpath)
$handle=opendir($PDFpathpart); $handle=opendir($PDFpathpart);
while ($file = readdir($handle)) while ($file = readdir($handle))
{ {
if (preg_match("=^\.{1,2}$=", $file)) if (preg_match("=^\.=", $file))
continue; # . und .. Dateien ignorieren continue; # ., .. und versteckte Dateien (.gitkeep) ignorieren
if (is_dir($PDFpathpart.$file)) if (is_dir($PDFpathpart.$file))
{ {
$lastTime = ceil((time() - filemtime($PDFpathpart.$file))); $lastTime = ceil((time() - filemtime($PDFpathpart.$file)));
if($lastTime > 20){ if($lastTime > PDF_TEMP_MAX_ALTER){
rrmdir($PDFpathpart.$file."/"); rrmdir($PDFpathpart.$file."/");
} }
} }
else 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))); $lastTime = ceil((time() - filemtime($PDFpathpart.$file)));
if($lastTime > 20){ if($lastTime > PDF_TEMP_MAX_ALTER){
unlink($PDFpathpart.$file); unlink($PDFpathpart.$file);
} }
} }
} }
mkdir(dirname($PDFpath)."/".basename($PDFpath,".pdf")."/"); mkdir(dirname($PDFpath)."/".basename($PDFpath,".pdf")."/");
//exec(''); //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"; $i="0";
$ret = ""; $ret = "";
if(is_file(dirname($PDFpath)."/".basename($PDFpath,".pdf")."/".basename($PDFpath,".pdf").".png")) 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->SetTextColor(0,0,0);
$pdf->SetFont('Times','',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$pdf->setY(20); $pdf->setY(20);
$pdf->setX(25); $pdf->setX(25);
$pdf->MultiCell(85,0,str_replace("<br />","\n",$adresse["adresse"]),0,"L",0); $pdf->MultiCell(85,0,str_replace("<br />","\n",$adresse["adresse"]),0,"L",0);
$pdf->Ln(10); $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->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()); //$pdf->Line(35,$pdf->GetY(),180,$pdf->GetY());
$notespos = $pdf->GetY(); $notespos = $pdf->GetY();
$pdf->setY(20); $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,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->Cell(0,5,"(".$dauer." geplant)",0,1,"R",0);
$pdf->SetY($notespos); $pdf->SetY($notespos);
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->MultiCell(0,0,$termin["text"],0,"C",0); $pdf->MultiCell(0,0,$termin["text"],0,"C",0);
$pdf->Ln(); $pdf->Ln();
$pdf->SetFont('Times','B',16); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',16);
$pdf->Cell(0,5,"Notizen:",0,1,"C",0); $pdf->Cell(0,5,"Notizen:",0,1,"C",0);
$pdf->Ln(12); $pdf->Ln(12);
$pdf->SetDrawColor(100,100,100); $pdf->SetDrawColor(100,100,100);
@@ -1261,17 +1274,17 @@ function makesingleterminpage($pdf,$termin,$adresse,$telnrn,$anfahrt,$googleadre
$mitarbeiter .= ", ".$termin["uservname4"]." ".$termin["usernname4"]; $mitarbeiter .= ", ".$termin["uservname4"]." ".$termin["usernname4"];
$pdf->SetTextColor(0,0,0); $pdf->SetTextColor(0,0,0);
$pdf->SetFont('Times','',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',14);
$pdf->setY(20); $pdf->setY(20);
$pdf->setX(25); $pdf->setX(25);
$pdf->MultiCell(85,0,str_replace("<br />","\n",$adresse["adresse"]),0,"L",0); $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->ln(5);
$pdf->MultiCell(0,0,$telnrn,0,"L",0); $pdf->MultiCell(0,0,$telnrn,0,"L",0);
$pdf->Ln(10); $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->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()); //$pdf->Line(35,$pdf->GetY(),180,$pdf->GetY());
$notespos = $pdf->GetY(); $notespos = $pdf->GetY();
$pdf->setY(10); $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->Cell(0,5,"(".$dauer." geplant)",0,1,"R",0);
$pdf->MultiCell(0,0,"(".$mitarbeiter.")",0,"R",0); $pdf->MultiCell(0,0,"(".$mitarbeiter.")",0,"R",0);
$pdf->SetY($notespos); $pdf->SetY($notespos);
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->MultiCell(0,0,$termin["text"],0,"C",0); $pdf->MultiCell(0,0,$termin["text"],0,"C",0);
$pdf->Ln(); $pdf->Ln();
$pdf->SetFont('Times','B',16); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',16);
$pdf->Cell(0,5,"Notizen:",0,1,"C",0); $pdf->Cell(0,5,"Notizen:",0,1,"C",0);
$pdf->Ln(12); $pdf->Ln(12);
$pdf->SetDrawColor(100,100,100); $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->line(10,$pdf->GetY(),200,$pdf->GetY());
$pdf->Ln(12); $pdf->Ln(12);
} }
$pdf->SetFont('Times','',16); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',16);
$pdf->Cell(0,5,"Ankunft:______________________ Abfahrt:_____________________",0,1,"L",0); $pdf->Cell(0,5,"Ankunft:______________________ Abfahrt:_____________________",0,1,"L",0);
$pdf->Ln(12); $pdf->Ln(12);
$pdf->Cell(0,5,"Unterschrift Kunde:_____________________",0,1,"C",0); $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->line(120,$pdf->GetY(),200,$pdf->GetY());
$pdf->Ln(12); $pdf->Ln(12);
} }
$pdf->SetFont('Times','',16); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',16);
$pdf->Cell(0,5,"Ankunft:______________________ Abfahrt:_____________________",0,1,"L",0); $pdf->Cell(0,5,"Ankunft:______________________ Abfahrt:_____________________",0,1,"L",0);
$pdf->Ln(10); $pdf->Ln(10);
$pdf->Cell(0,5,"Unterschrift Kunde:_____________________",0,1,"C",0); $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) 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, 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, user.vname as uservname, user.nname as usernname,
user2.vname as uservname2, user2.nname as usernname2, 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 user2 ON termin.user2 = user2.id
LEFT JOIN user AS user3 ON termin.user3 = user3.id LEFT JOIN user AS user3 ON termin.user3 = user3.id
LEFT JOIN user AS user4 ON termin.user4 = user4.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)); WHERE termin.id = ?", array($id));
$res = mysqli_fetch_assoc($qry); if(!$res)
{
$qry = mysqli_query($dbconn,"SELECT anrede error("Fehler beim ermitteln der Termindaten<br />".mysqli_error($dbconn));
FROM anrede return array();
WHERE id = '".$res["anrede_id"]."'") or $err = error("Fehler beim ermitteln der Anrede<br />".mysqli_error($dbconn)); }
$res2 = mysqli_fetch_assoc($qry); $anrs = db_zuordnung($dbconn, "SELECT id, anrede FROM anrede") ?: array();
$res["anrede"] = $res2["anrede"]; $titels = db_zuordnung($dbconn, "SELECT id, titel FROM titel") ?: array();
$res["anrede"] = $anrs[$res["anrede_id"]] ?? "";
$qry = mysqli_query($dbconn,"SELECT anrede $res["anrede2"] = $anrs[$res["anrede2_id"]] ?? "";
FROM anrede $res["titel"] = $titels[$res["titel_id"]] ?? "";
WHERE id = '".$res["anrede2_id"]."'") or $err = error("Fehler beim ermitteln der Anrede2<br />".mysqli_error($dbconn)); $res["titel2"] = $titels[$res["titel2_id"]] ?? "";
$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"];
return $res; return $res;
} }
function maketerminadresse($dbconn,$termid) 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 $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 FROM termin
JOIN adresse ON termin.adresse_id = adresse.id JOIN adresse ON termin.adresse_id = adresse.id
JOIN strasse ON strasse.id = str_id JOIN strasse ON strasse.id = str_id
JOIN ort ON ort.id = ort_id JOIN land ON land.id = land_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)); WHERE termin.id = ?", array($termid));
if(!$adresse)
$adresse = mysqli_fetch_assoc($qry);
$qry = mysqli_query($dbconn,"SELECT * FROM anrede");
while($res=mysqli_fetch_assoc($qry))
{ {
$anrs[$res["id"]] = $res["anrede"]; error("Fehler beim ermitteln der Adressdaten<br />".mysqli_error($dbconn));
$adresse = array();
} }
// ADRFIELD_* stehen in incs/constants.php
$qry = mysqli_query($dbconn,"SELECT * FROM titel"); $anrs = db_zuordnung($dbconn, "SELECT id, anrede FROM anrede") ?: array();
while($res=mysqli_fetch_assoc($qry)) $titels = db_zuordnung($dbconn, "SELECT id, titel FROM titel") ?: array();
{
$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);
$adressfields = ""; $adressfields = "";
if($adresse["firma"]) if($adresse["firma"])
@@ -1788,50 +1768,52 @@ define("ADRFIELD_LAND", 10);
function maketelnrn($dbconn,$termid) function maketelnrn($dbconn,$termid)
{ {
$qry=mysqli_query($dbconn,"SELECT partner_id, adresse_id $telstr = "";
$adresse = db_zeile($dbconn,"SELECT partner_id, adresse_id
FROM termin FROM termin
JOIN adresse ON termin.adresse_id = adresse.id JOIN adresse ON termin.adresse_id = adresse.id
WHERE termin.id = $termid") or $err= error("Fehler beim ermitteln der Adressdaten<br />".mysqli_error($dbconn)); WHERE termin.id = ?", array($termid));
if($adresse)
if($adresse = mysqli_fetch_assoc($qry))
{ {
$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"); $zeilen = db_zeilen($dbconn,"SELECT name, typ, tel.id, nr, ort, ortsteil, plz, vwahl FROM tel
while($res=mysqli_fetch_assoc($qry)) LEFT JOIN teltyp ON tel.typ_id = teltyp.id
{ LEFT JOIN ort ON tel.ort_id = ort.id
$telstr .= trim($res["typ"]).": "." (".$res["vwahl"].") ".$res["nr"]." in ".$res["ort"]."(".$res["name"].")\n"; 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"]));
$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"); foreach((array)$zeilen as $res)
while($res=mysqli_fetch_assoc($qry)) $telstr .= trim($res["typ"]).": "." (".$res["vwahl"].") ".$res["nr"]." in ".$res["ort"]."(".$res["name"].")\\n";
{ $zeilen = db_zeilen($dbconn,"SELECT kontakt, typ FROM kontakt
$telstr .= trim($res["typ"]).": ".$res["kontakt"]."\n"; 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; return $telstr;
} }
function makeadrtelnrn($dbconn,$partnerid) 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"); $telstr = "";
while($res=mysqli_fetch_assoc($qry)) $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
$telstr .= trim($res["typ"]).": "."(".$res["vwahl"].")".$res["nr"].",".$res["ort"]."(".$res["name"].")\n"; 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; return $telstr;
} }
function makegooglestring($dbconn,$termid) 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 $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 FROM termin
JOIN adresse ON termin.adresse_id = adresse.id JOIN adresse ON termin.adresse_id = adresse.id
JOIN strasse ON strasse.id = str_id JOIN strasse ON strasse.id = str_id
JOIN ort ON ort.id = ort_id JOIN land ON land.id = land_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)); WHERE termin.id = ?", array($termid));
if($adresse)
if($adresse = mysqli_fetch_assoc($qry))
{ {
$googlestr = "http://maps.googleapis.com/maps/api/staticmap"; $googlestr = "http://maps.googleapis.com/maps/api/staticmap";
$googlestr .= "?markers=color:blue|label:A|"; $googlestr .= "?markers=color:blue|label:A|";
@@ -1852,7 +1834,7 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
else else
$picpath = "./pics/"; $picpath = "./pics/";
$pdf->SetFont('helvetica','B',6); $pdf->SetFont(PDF_SCHRIFT_SANS,'B',6);
$pdf->setY(35); $pdf->setY(35);
$pdf->setX(25); $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->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->SetTextColor(0,0,0);
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setY(40); $pdf->setY(40);
$pdf->setX(25); $pdf->setX(25);
$pdf->MultiCell(85,0,str_replace("<br />","\n",$adresse["adresse"]),0,"L",0); $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(); $tmpY = $pdf->getY();
$pdf->setY(40); $pdf->setY(40);
$pdf->setX(110); $pdf->setX(110);
@@ -1885,13 +1867,13 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
$tmpY = $pdf->getY(); $tmpY = $pdf->getY();
$pdf->setY($tmpY); $pdf->setY($tmpY);
$pdf->Ln(5); $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->Cell(0,5,$project["name"],0,1,"C",0);
$pdf->SetFont('Times','B',16); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',16);
$pdf->Ln(12); $pdf->Ln(12);
//Table-re-HEAD //Table-re-HEAD
$currY = $pdf->GetY(); $currY = $pdf->GetY();
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(135,5,'Arbeit',0,0,'C'); $pdf->Cell(135,5,'Arbeit',0,0,'C');
$pdf->setX(155); $pdf->setX(155);
@@ -1906,7 +1888,7 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
$currY = $pdf->GetY(); $currY = $pdf->GetY();
$pdf->SetDrawColor(100,100,100); $pdf->SetDrawColor(100,100,100);
//while($pdf->GetY() < 260) //while($pdf->GetY() < 260)
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$gesstd = 0; $gesstd = 0;
foreach($work as $workline) foreach($work as $workline)
{ {
@@ -1928,7 +1910,7 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
$pdf->AddPage("P"); $pdf->AddPage("P");
//Table-re-HEAD //Table-re-HEAD
$currY = $pdf->GetY(); $currY = $pdf->GetY();
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(135,5,'Arbeit',0,0,'C'); $pdf->Cell(135,5,'Arbeit',0,0,'C');
$pdf->setX(155); $pdf->setX(155);
@@ -1939,13 +1921,13 @@ function makeprojectpage($pdf,$adresse,$telnrn,$project,$work)
$pdf->Line(18 , $pdf->GetY(), 200, $pdf->GetY()); $pdf->Line(18 , $pdf->GetY(), 200, $pdf->GetY());
$pdf->Line(180 , $pdf->GetY()-5, 180, 270); $pdf->Line(180 , $pdf->GetY()-5, 180, 270);
$pdf->Line(155 , $pdf->GetY()-5, 155, 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()+1, 200, $pdf->GetY());
$pdf->Line(18 , $pdf->GetY()+2, 200, $pdf->GetY()+1); $pdf->Line(18 , $pdf->GetY()+2, 200, $pdf->GetY()+1);
$pdf->SetY($pdf->GetY()+3); $pdf->SetY($pdf->GetY()+3);
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(135,5,'Arbeitsstunden Summe:',0,0,'C'); $pdf->Cell(135,5,'Arbeitsstunden Summe:',0,0,'C');
$pdf->setX(155); $pdf->setX(155);
@@ -1961,7 +1943,7 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
else else
$picpath = "./pics/"; $picpath = "./pics/";
$pdf->SetFont('helvetica','B',6); $pdf->SetFont(PDF_SCHRIFT_SANS,'B',6);
$pdf->setY(35); $pdf->setY(35);
$pdf->setX(25); $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->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->SetTextColor(0,0,0);
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$pdf->setY(40); $pdf->setY(40);
$pdf->setX(25); $pdf->setX(25);
$pdf->MultiCell(85,0,str_replace("<br />","\n",$name),0,"L",0); $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(); $tmpY = $pdf->getY();
$pdf->setY(40); $pdf->setY(40);
$pdf->setX(110); $pdf->setX(110);
@@ -1994,13 +1976,13 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
$tmpY = $pdf->getY(); $tmpY = $pdf->getY();
$pdf->setY($tmpY); $pdf->setY($tmpY);
$pdf->Ln(5); $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->Cell(0,5,$project["name"],0,1,"C",0);
$pdf->SetFont('Times','B',16); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',16);
$pdf->Ln(12); $pdf->Ln(12);
//Table-re-HEAD //Table-re-HEAD
$currY = $pdf->GetY(); $currY = $pdf->GetY();
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(35,5,'Kommen',0,0,'C'); $pdf->Cell(35,5,'Kommen',0,0,'C');
$pdf->setX(55); $pdf->setX(55);
@@ -2017,7 +1999,7 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
$currY = $pdf->GetY(); $currY = $pdf->GetY();
$pdf->SetDrawColor(100,100,100); $pdf->SetDrawColor(100,100,100);
//while($pdf->GetY() < 260) //while($pdf->GetY() < 260)
$pdf->SetFont('Times','',12); $pdf->SetFont(PDF_SCHRIFT_SERIF,'',12);
$gesstd = 0; $gesstd = 0;
foreach($zeiten as $zeit) foreach($zeiten as $zeit)
{ {
@@ -2040,7 +2022,7 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
$pdf->AddPage("P"); $pdf->AddPage("P");
//Table-re-HEAD //Table-re-HEAD
$currY = $pdf->GetY(); $currY = $pdf->GetY();
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(35,5,'Kommen',0,0,'C'); $pdf->Cell(35,5,'Kommen',0,0,'C');
$pdf->setX(55); $pdf->setX(55);
@@ -2053,13 +2035,13 @@ function makezeitpage($pdf,$name,$daymins,$zeiten)
$pdf->Line(18 , $pdf->GetY(), 200, $pdf->GetY()); $pdf->Line(18 , $pdf->GetY(), 200, $pdf->GetY());
$pdf->Line(180 , $pdf->GetY()-5, 180, 270); $pdf->Line(180 , $pdf->GetY()-5, 180, 270);
$pdf->Line(155 , $pdf->GetY()-5, 155, 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()+1, 200, $pdf->GetY());
$pdf->Line(18 , $pdf->GetY()+2, 200, $pdf->GetY()+1); $pdf->Line(18 , $pdf->GetY()+2, 200, $pdf->GetY()+1);
$pdf->SetY($pdf->GetY()+3); $pdf->SetY($pdf->GetY()+3);
$pdf->SetFont('Times','B',14); $pdf->SetFont(PDF_SCHRIFT_SERIF,'B',14);
$pdf->setX(20); $pdf->setX(20);
$pdf->Cell(35,5,'Arbeitsstunden Summe:',0,0,'C'); $pdf->Cell(35,5,'Arbeitsstunden Summe:',0,0,'C');
$pdf->setX(55); $pdf->setX(55);
+397 -627
View File
File diff suppressed because it is too large Load Diff
+1115 -651
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() { function generateSalt() {
+17 -15
View File
@@ -7,8 +7,8 @@ function ajax_searchkunden(page)
search_in_progress = 1; search_in_progress = 1;
document.getElementById("kdnsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>"; document.getElementById("kdnsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true; //document.getElementById("kdnsrc_src").disabled = true;
field = escape(document.getElementById("kdnsrc_field").value); field = encodeURIComponent(document.getElementById("kdnsrc_field").value);
search = escape(document.getElementById("kdnsrc_src").value); search = encodeURIComponent(document.getElementById("kdnsrc_src").value);
var url = "ajax/searchkunden.php?field=" + field + "&page=" + page + "&search=" + search; var url = "ajax/searchkunden.php?field=" + field + "&page=" + page + "&search=" + search;
reqkdnsrc = new XMLHttpRequest(); reqkdnsrc = new XMLHttpRequest();
@@ -35,7 +35,7 @@ function ajax_searchzeit(page,user)
search_in_progress = 1; search_in_progress = 1;
document.getElementById("termcontainer-"+user).innerHTML = "<p><img src='pics/progress_white.gif' /></p>"; document.getElementById("termcontainer-"+user).innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true; //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; var url = "ajax/searchzeit.php?page=" + page + "&user=" + user + "&search=" + search;
reqkdnsrc = new XMLHttpRequest(); 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) if(!search_in_progress)
{ {
search_in_progress = 1; search_in_progress = 1;
document.getElementById("adrsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>"; document.getElementById("adrsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true; //document.getElementById("kdnsrc_src").disabled = true;
field = escape(document.getElementById("adrsrc_field").value); field = encodeURIComponent(document.getElementById("adrsrc_field").value);
search = escape(document.getElementById("adrsrc_src").value); search = encodeURIComponent(document.getElementById("adrsrc_src").value);
var url = "ajax/searchadress.php?field=" + field + "&page=" + page + "&search=" + search + "&rechid=" + rechid + "&subact=" + subact; var url = "ajax/searchadress.php?field=" + field + "&page=" + page + "&search=" + search + "&rechid=" + rechid + "&subact=" + subact;
reqadrsrc = new XMLHttpRequest(); reqadrsrc = new XMLHttpRequest();
@@ -90,8 +92,8 @@ function ajax_searchliefer(page)
search_in_progress = 1; search_in_progress = 1;
document.getElementById("kdnsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>"; document.getElementById("kdnsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true; //document.getElementById("kdnsrc_src").disabled = true;
field = escape(document.getElementById("kdnsrc_field").value); field = encodeURIComponent(document.getElementById("kdnsrc_field").value);
search = escape(document.getElementById("kdnsrc_src").value); search = encodeURIComponent(document.getElementById("kdnsrc_src").value);
var url = "ajax/searchliefer.php?field=" + field + "&page=" + page + "&search=" + search; var url = "ajax/searchliefer.php?field=" + field + "&page=" + page + "&search=" + search;
reqkdnsrc = new XMLHttpRequest(); reqkdnsrc = new XMLHttpRequest();
@@ -118,7 +120,7 @@ function ajax_searchkdnprojects(page,kdnid)
search_in_progress = 1; search_in_progress = 1;
document.getElementById("projectlist").innerHTML = "<p><img src='pics/progress_white.gif' /></p>"; document.getElementById("projectlist").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true; //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; 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; search_in_progress = 1;
document.getElementById("rechlist-"+typ).innerHTML = "<p><img src='pics/progress_white.gif' /></p>"; document.getElementById("rechlist-"+typ).innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true; //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; 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; search_in_progress = 1;
document.getElementById("kommsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>"; document.getElementById("kommsrc_list").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true; //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; 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.open("GET", url, true);
reqkommsrc.onreadystatechange = function() reqkommsrc.onreadystatechange = function()
{ {
if(reqkdnsrc.readyState == 4) if(reqkommsrc.readyState == 4)
{ {
// Get the data from the server's response // Get the data from the server's response
document.getElementById("kommsrc_list").innerHTML = reqkommsrc.responseText; document.getElementById("kommsrc_list").innerHTML = reqkommsrc.responseText;
@@ -200,7 +202,7 @@ function ajax_searchrech(page,skspage)
search_in_progress = 1; search_in_progress = 1;
document.getElementById("rechlist").innerHTML = "<p><img src='pics/progress_white.gif' /></p>"; document.getElementById("rechlist").innerHTML = "<p><img src='pics/progress_white.gif' /></p>";
//document.getElementById("kdnsrc_src").disabled = true; //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; var url = "ajax/searchrech.php?page=" + page + "&skspage=" + skspage + "&search=" + search;
@@ -226,7 +228,7 @@ function ajax_searchterm(page, termtyp)
{ {
search_in_progress = 1; search_in_progress = 1;
document.getElementById("termcontainer-"+termtyp).innerHTML = "<p><img src='pics/progress_white.gif' /></p>"; 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; var url = "ajax/searchterm.php?page=" + page + "&search=" + search + "&termtyp=" + termtyp;
@@ -276,7 +278,7 @@ function ajax_displaymsgs(page,user)
} }
function sendmsg(touser) 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; var url = "ajax/sendmsg.php?touser="+touser+"&msg="+msg;
reqsndmsgs = new XMLHttpRequest(); reqsndmsgs = new XMLHttpRequest();
reqsndmsgs.open("GET", url, true); reqsndmsgs.open("GET", url, true);
+2 -54
View File
@@ -1,59 +1,7 @@
<?php <?php
require_once "incs/saveNchange.php"; require_once "incs/saveNchange.php";
// loeschePartner() räumt die Dokumente des Kunden über delRechnung() mit ab
require_once "incs/rechnung.php"; require_once "incs/rechnung.php";
if($_GET["del"] == 1) $err = partnerAddSeite($dbconn, $smarty, 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);
}
?> ?>
+4 -204
View File
@@ -1,207 +1,7 @@
<?php <?php
require_once "incs/saveNchange.php"; require_once "incs/saveNchange.php";
if($_GET["do"] == "adress") // Beim Löschen einer Adresse verschwinden auch ihre Dokumente (delRechnung)
{ require_once "incs/rechnung.php";
if($_GET["del"] == 1)
{ $err = partnerChangeSeite($dbconn, $smarty, 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);
}
}
?> ?>
+3 -117
View File
@@ -1,121 +1,7 @@
<?php <?php
if($_GET["id"]) require_once "incs/saveNchange.php";
{
$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"]."'"); partnerShowDaten($dbconn, $smarty, parameterGanzzahl("id"), 1);
while($res=mysqli_fetch_assoc($qry)) $_SESSION["camefrom"] = "kundenshow&id=".parameterGanzzahl("id");
{
$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"];
$smarty->display("kundenshow.tpl"); $smarty->display("kundenshow.tpl");
?> ?>
+3 -53
View File
@@ -1,57 +1,7 @@
<?php <?php
require_once "incs/saveNchange.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) $err = partnerAddSeite($dbconn, $smarty, 2);
{
$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);
}
?> ?>
+4 -188
View File
@@ -1,191 +1,7 @@
<?php <?php
require_once "incs/saveNchange.php"; require_once "incs/saveNchange.php";
if($_GET["do"] == "adress") // Beim Löschen einer Adresse verschwinden auch ihre Dokumente (delRechnung)
{ require_once "incs/rechnung.php";
if($_GET["del"] == 1)
{ $err = partnerChangeSeite($dbconn, $smarty, 2);
$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);
}
}
?> ?>
+3 -116
View File
@@ -1,120 +1,7 @@
<?php <?php
if($_GET["id"]) require_once "incs/saveNchange.php";
{
$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"];
}
}
partnerShowDaten($dbconn, $smarty, parameterGanzzahl("id"), 2);
$_SESSION["camefrom"] = "liefershow&id=".parameterGanzzahl("id");
$smarty->display("liefershow.tpl"); $smarty->display("liefershow.tpl");
?> ?>
+42 -131
View File
@@ -17,7 +17,7 @@ elseif($_GET["changeadr"] == 1 && $_GET["id"])
if(!$_GET["adrid"]) 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("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"); $smarty->display("changeadr.tpl");
} }
else else
@@ -32,7 +32,7 @@ elseif($_GET["copy"] == 1 && $_GET["id"])
if(!$_GET["adrid"]) 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("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"); $smarty->display("copyrech.tpl");
} }
else else
@@ -42,58 +42,25 @@ elseif($_GET["copy"] == 1 && $_GET["id"])
doneNreturn("Erfolgreich geändert"); doneNreturn("Erfolgreich geändert");
} }
} }
elseif($_GET["storno"] == "YES" && $_GET["id"]){ elseif(($_GET["storno"] == "YES" || $_GET["storno"] == "NO") && $_GET["id"]){
$querystr = "UPDATE rechnung SET $err = stornoRechnung($dbconn, $_GET["id"], $_GET["storno"] == "YES");
storno = 1, stornodate = NOW() WHERE id = '".$_GET["id"]."'"; if(!$err)
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"); doneNreturn("Erfolgreich geändert");
} }
elseif($_GET["mail"] == 1 && $_GET["id"]) elseif($_GET["mail"] == 1 && $_GET["id"])
{ {
$kdnres=makeadressarray($dbconn, $_GET["adressid"]); $kdnres=makeadressarray($dbconn, $_GET["adressid"]);
$typnames=array(); list($anrs, $titels) = anredenUndTitel($dbconn);
$qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede"); $smarty->assign("anrs",$anrs);
while($res=mysqli_fetch_assoc($qry)) $smarty->assign("titels",$titels);
{
$typnames[$res["id"]] = $res["anrede"];
}
$smarty->assign("anrs",$typnames);
$typnames=array(); $mails = db_zuordnung($dbconn, "SELECT id, kontakt FROM kontakt WHERE partner_id = ? AND typ_id = 1", array($kdnres["partner_id"] ?? 0)) ?: array();
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel"); $smarty->assign("mails",array_values($mails));
while($res=mysqli_fetch_assoc($qry)) $smarty->assign("mailids",array_keys($mails));
{
$typnames[$res["id"]] = $res["titel"];
}
$smarty->assign("titels",$typnames);
$mails=array(); $typen = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
$mailids=array(); $smarty->assign("typids",array_keys($typen));
$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"); $smarty->assign("typs",array_values($typen));
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);
$rechnung=makerechnungsarray($dbconn, $_GET["id"], 0); $rechnung=makerechnungsarray($dbconn, $_GET["id"], 0);
$smarty->assign("rechnung",$rechnung); $smarty->assign("rechnung",$rechnung);
$smarty->assign("adresse",$kdnres); $smarty->assign("adresse",$kdnres);
@@ -174,7 +141,7 @@ else
} }
else else
{ {
$smarty->assign("loadrech",$_GET["id"]); $smarty->assign("loadrech",(int)$_GET["id"]);
$rechnung=makerechnungsarray($dbconn, $_GET["id"], 0); $rechnung=makerechnungsarray($dbconn, $_GET["id"], 0);
$kommission=makeadressarray($dbconn, $rechnung["kommission"]); $kommission=makeadressarray($dbconn, $rechnung["kommission"]);
$smarty->assign("rechnung",$rechnung); $smarty->assign("rechnung",$rechnung);
@@ -189,80 +156,37 @@ else
$smarty->assign("artikel",makeartikelarray($dbconn, $_GET["draft"], 1)); $smarty->assign("artikel",makeartikelarray($dbconn, $_GET["draft"], 1));
} }
$smarty->assign("type",$_GET["type"]); $smarty->assign("type",(int)$_GET["type"]);
$smarty->assign("newtype",$_GET["newtype"]); $smarty->assign("newtype",(int)$_GET["newtype"]);
$kdnres=makeadressarray($dbconn, $_GET["adressid"]); $kdnres=makeadressarray($dbconn, $_GET["adressid"]);
if($kdnres["adresstyp"] == "Kommission") if($kdnres["adresstyp"] == "Kommission")
{ {
$smarty->assign("kommission",$kdnres); $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"]) if($kdnres["partner_id"])
{ {
$typnames=array(); list($anrs, $titels) = anredenUndTitel($dbconn);
$qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede"); $smarty->assign("anrs",$anrs);
while($res=mysqli_fetch_assoc($qry)) $smarty->assign("titels",$titels);
{
$typnames[$res["id"]] = $res["anrede"];
}
$smarty->assign("anrs",$typnames);
$typnames=array(); $liste = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel"); $smarty->assign("typids",array_keys($liste));
while($res=mysqli_fetch_assoc($qry)) $smarty->assign("typs",array_values($liste));
{
$typnames[$res["id"]] = $res["titel"]; $liste = db_zuordnung($dbconn, "SELECT id, einheit FROM einheit") ?: array();
} $smarty->assign("einhids",array_keys($liste));
$smarty->assign("titels",$typnames); $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(); $typids=array();
$typnames=array(); $typnames=array();
$qry=mysqli_query($dbconn, "SELECT id,bezeichn FROM artikeltyp"); foreach(db_zeilen($dbconn, "SELECT id, mwst FROM mwst") ?: array() as $res)
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))
{ {
if($res["mwst"] != "999") if($res["mwst"] != "999")
{ {
@@ -283,31 +207,18 @@ else
$smarty->assign("artmwstids",$typids2); $smarty->assign("artmwstids",$typids2);
$smarty->assign("artmwsts",$typnames2); $smarty->assign("artmwsts",$typnames2);
$typids=array(); $liste = db_zuordnung($dbconn, "SELECT id, ziel FROM zahlziel") ?: array();
$typnames=array(); $smarty->assign("zzielids",array_keys($liste));
$qry=mysqli_query($dbconn, "SELECT id,ziel FROM zahlziel"); $smarty->assign("zziels",array_values($liste));
while($res=mysqli_fetch_assoc($qry))
{
$typids[] = $res["id"];
$typnames[] = $res["ziel"];
}
$smarty->assign("zzielids",$typids);
$smarty->assign("zziels",$typnames);
$typids=array(); $liste = db_zuordnung($dbconn, "SELECT id, CONCAT(kto, ' (', name, ')') FROM buchungsKontos") ?: array();
$typnames=array(); $smarty->assign("buchKtoids",array_keys($liste));
$qry=mysqli_query($dbconn, "SELECT id,kto,name FROM buchungsKontos"); $smarty->assign("buchKtos",array_values($liste));
while($res=mysqli_fetch_assoc($qry))
{
$typids[] = $res["id"];
$typnames[] = $res["kto"]." (".$res["name"].")"; $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)
$smarty->assign("buchKtoids",$typids); $err = error("Fehler beim Suchen nach nicht gespeicherten Daten<br />".mysqli_error($dbconn));
$smarty->assign("buchKtos",$typnames); if($res)
$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))
{ {
$smarty->assign("draft",$res["id"]); $smarty->assign("draft",$res["id"]);
$smarty->assign("draftname",$res["vname"]." ".$res["nname"]); $smarty->assign("draftname",$res["vname"]." ".$res["nname"]);
+1 -1
View File
@@ -1,4 +1,4 @@
<?php <?php
require_once ("./incs/rechnung.php"); require_once ("./incs/rechnung.php");
$smarty->assign("heading","Steuerexport"); $smarty->assign("heading","Steuerexport");
$smarty->display("heading.tpl"); $smarty->display("heading.tpl");
+10 -133
View File
@@ -1,15 +1,14 @@
<?php <?php
require_once("incs/users.php"); require_once "incs/termin.php";
$_SESSION["camefrom"] = "termin&show=".$_GET["show"]."&page=".$_GET["page"]; 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"); $smarty->assign("heading", "Terminliste");
if($_GET["tabs"]) $smarty->assign("tabs", parameterGanzzahl("tabs") ?: ($_SESSION["termtyp"] ?? 1));
$smarty->assign("tabs",$_GET["tabs"]);
else
$smarty->assign("tabs",$_SESSION["termtyp"]);
$smarty->display("heading.tpl"); $smarty->display("heading.tpl");
$smarty->display("termlist.tpl"); $smarty->display("termlist.tpl");
} }
@@ -18,131 +17,9 @@ else
$smarty->assign("heading", "Termine"); $smarty->assign("heading", "Termine");
$smarty->display("heading.tpl"); $smarty->display("heading.tpl");
//$colors = array("#f00","#0c0","#ff0","#90c","#0bb","#066","#09f","#f60","#00f","#f09"); $smarty->assign("page", $seite);
$smarty->assign("weekdays", kalenderTage($dbconn, $seite));
//$weather = GetWeather(); $smarty->assign("users", kalenderBenutzer($dbconn));
//$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->display("calendar.tpl"); $smarty->display("calendar.tpl");
} }
?> ?>
+56 -387
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"){ $ids = array();
for( $i=1; $i<=$_POST["pagesize"]; $i++){ $anzahl = isset($_POST["pagesize"]) ? (int)$_POST["pagesize"] : 0;
mysqli_query($dbconn,"DELETE FROM termin WHERE id='".$_POST["del".$i]."'") or $err=error("Konnte Haupttermin nicht löschen<br />".mysqli_error($dbconn)); for($i = 1; $i <= $anzahl; $i++)
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(!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) if(!$err)
$err = loescheTerminreihe($dbconn, $id);
if(!$err)
{
doneNreturn("Erfolgreich gelöscht"); doneNreturn("Erfolgreich gelöscht");
} return;
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)));
if(!$err)
doneNreturn("Erfolgreich gelöscht");
} }
} }
elseif($_GET["id"] && $_GET["done"]) elseif(($mehrfach || $terminid) && !empty($_GET["done"]))
{ {
if($_GET["id"] == "multi"){ $erledigt = $_GET["done"] != "no";
for( $i=1; $i<=$_POST["pagesize"]; $i++){ foreach($mehrfach ? angekreuzteTermine("erl") : array($terminid) as $id)
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));
}
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) if(!$err)
$err = setzeTerminErledigt($dbconn, $id, $erledigt);
if(!$err)
{
doneNreturn("Erfolgreich geändert!"); 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 $kunde = terminAdresse($dbconn, $adressid);
FROM adresse if(empty($kunde["partner_id"]))
LEFT JOIN strasse ON str_id = strasse.id $adressid = 0;
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"]) if(!$err && parameterGanzzahl("formsent") == 1)
{ {
$_GET["adressid"] = 0; $err = speichereTermin($dbconn, $terminid, $adressid);
}
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) if(!$err)
{ {
doneNreturn("Erfolgreich eingetragen"); doneNreturn("Erfolgreich eingetragen");
return;
} }
} // bei einem Fehler die Eingaben im Formular stehen lassen
if($err){
$smarty->assign("termin", $_POST); $smarty->assign("termin", $_POST);
} }
//elseif(!$head)
// $err=error("Bitte geben Sie eine Terminbeschreibung an!");
}
terminAuswahllisten($dbconn, $smarty);
$smarty->assign("kunde", $kunde);
$smarty->assign("user", parameterGanzzahl("user"));
$qry = mysqli_query($dbconn,"SELECT id, typ if($terminid && !$err)
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
{ {
$termin = terminZumBearbeiten($dbconn, $terminid);
if(!$termin)
$err = error("Dieser Termin existiert nicht!"); $err = error("Dieser Termin existiert nicht!");
}
}
else else
{ {
$smarty->assign("termin", $termin);
$smarty->assign("termin",$_POST); $smarty->assign("heading", $adressid ? "Termin ändern" : "Urlaub / Krankheit ändern");
if($_GET["adressid"]){
$smarty->assign("heading","Neuer Termin");
} }
else{ }
$smarty->assign("heading","Neuer Urlaub / Krankheitstag"); elseif(!$terminid)
$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"]; if(!$err)
$typs[] = $res["typ"]; $smarty->assign("termin", $_POST);
$smarty->assign("heading", $adressid ? "Neuer Termin" : "Neuer Urlaub / Krankheitstag");
} }
$smarty->assign("vac_types_id",$typids);
$smarty->assign("vac_types_name",$typs);
}
}
$smarty->display("heading.tpl"); $smarty->display("heading.tpl");
$smarty->display("addtermin.tpl"); $smarty->display("addtermin.tpl");
?> ?>
+32 -58
View File
@@ -1,71 +1,45 @@
<?php <?php
// GET: id OR date;type /*
* 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"); include("incs/makepdf.php");
$pdf = makerawPDFcopy(0); $terminid = parameterGanzzahl("id");
if($_GET["id"] && !$_GET["date"]) $datum = isset($_GET["date"]) && is_string($_GET["date"]) ? date("Y-m-d", strtotime($_GET["date"])) : "";
$ids = array();
if($terminid && !$datum)
$ids[] = $terminid;
elseif($datum)
{ {
$termin=maketerminarray($dbconn, $_GET["id"]); $zeilen = db_zeilen($dbconn, "SELECT id FROM termin WHERE adresse_id != 0 AND DATE(termtime) = ? ORDER BY termtime ASC", array($datum));
$adresse=maketerminadresse($dbconn, $_GET["id"]); foreach((array)$zeilen as $z)
$telnrn=maketelnrn($dbconn,$_GET["id"]); $ids[] = $z["id"];
makesingleterminpage($pdf,$termin,$adresse,$telnrn,0);
} }
elseif($_GET["date"])
/* $anfahrt = 0 für den Terminzettel, 1 für die Seite mit der Karte */
function terminzettel($dbconn, $ids, $anfahrt)
{ {
$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"); $pdf = $anfahrt ? makerawPDFanfahrt(0) : makerawPDFcopy(0);
if($_GET["type"]="singlepages") $erste = true;
foreach($ids as $id)
{ {
$prevpage=0; if(!$erste)
while($res=mysqli_fetch_assoc($qry))
{
if($prevpage)
$pdf->addpage(); $pdf->addpage();
$prevpage=1; $erste = false;
$termin=maketerminarray($dbconn, $res["id"]); $googleadresse = $anfahrt ? makegooglestring($dbconn, $id) : "";
$adresse=maketerminadresse($dbconn, $res["id"]); makesingleterminpage($pdf, maketerminarray($dbconn, $id), maketerminadresse($dbconn, $id),
$telnrn=maketelnrn($dbconn,$res["id"]); maketelnrn($dbconn, $id), $anfahrt, $googleadresse);
makesingleterminpage($pdf,$termin,$adresse,$telnrn,0);
} }
$name = str_replace(array(" ", "."), array("_", "_"), microtime());
savePDF($pdf, "./temp/pdftemp/$name.pdf");
return "./temp/pdftemp/$name.pdf";
} }
}
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
savePDF($pdf,"./temp/pdftemp/$tmppdfname.pdf");
$smarty->assign("pdffile","./temp/pdftemp/$tmppdfname.pdf");
$pdf = makerawPDFanfahrt(0);
if($_GET["id"] && !$_GET["date"])
{
$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);
}
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");
$smarty->assign("pdffile", terminzettel($dbconn, $ids, 0));
$smarty->assign("pdffile2", terminzettel($dbconn, $ids, 1));
$smarty->display("terminshow.tpl"); $smarty->display("terminshow.tpl");
?> ?>
+3 -15
View File
@@ -6,21 +6,9 @@ $kdnres=makeadressarray($dbconn, $_GET["adressid"]);
if($kdnres["partner_id"]) if($kdnres["partner_id"])
{ {
$kdnres["adressid"] = $_GET["adressid"]; $kdnres["adressid"] = $_GET["adressid"];
$typnames=array(); list($anrs, $titels) = anredenUndTitel($dbconn);
$qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede"); $smarty->assign("anrs",$anrs);
while($res=mysqli_fetch_assoc($qry)) $smarty->assign("titels",$titels);
{
$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);
$smarty->assign("adresse",$kdnres); $smarty->assign("adresse",$kdnres);
$smarty->display("umschlagshow.tpl"); $smarty->display("umschlagshow.tpl");
+8
View File
@@ -1,4 +1,12 @@
<?php <?php
require_once("incs/constants.php");
session_name(SESSION_NAME);
session_start();
if((($_SESSION["login"] ?? "") !== "valid"))
{
http_response_code(403);
exit("Nicht angemeldet.");
}
error_reporting(E_ERROR | E_WARNING | E_PARSE); error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Standard inclusions // Standard inclusions
+138 -138
View File
@@ -1,4 +1,4 @@
<div class="centersidebyside"> <div class="centersidebyside">
<div class="sidebyside"> <div class="sidebyside">
{if $rechnung.typ_id && !$newtype} {if $rechnung.typ_id && !$newtype}
{$type = $rechnung.typ_id} {$type = $rechnung.typ_id}
@@ -23,72 +23,72 @@
{elseif $type == 6} {elseif $type == 6}
{$typename="Mahnung"} {$typename="Mahnung"}
{/if} {/if}
<h2>{$typename} {$headstr}:</h2> <h2>{$typename|escape} {$headstr|escape}:</h2>
<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'>
<input type="hidden" name="type" value="{$type|escape}" /> <input type="hidden" name="type" value="{$type|escape}" />
<input type="hidden" name="adressid" value="{$adresse.id|escape}" /> <input type="hidden" name="adressid" value="{$adresse.id|escape}" />
<input type="hidden" name="partnerid" value="{$adresse.partner_id|escape}" /> <input type="hidden" name="partnerid" value="{$adresse.partner_id|escape}" />
<fieldset class='nolim'> <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} {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_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}
{if $adresse.anrede_id > 1} {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}
{if $adresse.titel_id > 1} {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}
{if $adresse.vname || $adresse.nname} {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} {/if}
<br /> <br />
{if $adresse.anrede2_id > 1} {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}
{if $adresse.titel2_id > 1} {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}
{if $adresse.vname2 || $adresse.nname2} {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}
{if $adresse.str} {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}
{if $adresse.plz || $adresse.ort} {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}
{if $adresse.ortsteil} {if $adresse.ortsteil}
- {$adresse.ortsteil} - {$adresse.ortsteil|escape}
{/if} {/if}
{if $adresse.plz || $adresse.ort} {if $adresse.plz || $adresse.ort}
</label> </label>
{/if} {/if}
{if $adresse.land} {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}
{if $adresse.zusatz} {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} {/if}
<br /> <br />
<label>Adresserweiterung: </label><input name="adresserweiterung" value="{$rechnung.adresserweiterung}" /> <label>Adresserweiterung: </label><input name="adresserweiterung" value="{$rechnung.adresserweiterung|escape}" />
<br /> <br />
<p> <p>
<label>Währung:</label> <label>Währung:</label>
<select name='wahrung'> <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 /> </select><br />
<label>Mehrwertsteuer:</label> <label>Mehrwertsteuer:</label>
<select name='mwst'> <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> </select>
<br /> <br />
{if $type == 1} {if $type == 1}
<label>Zahlungsziel:</label> <label>Zahlungsziel:</label>
<select name='zahlziel'> <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> </select>
{else} {else}
<input type='hidden' name='zahlziel' value='1'> <input type='hidden' name='zahlziel' value='1'>
@@ -100,10 +100,10 @@
<div class="leftalign"> <div class="leftalign">
<br /> <br />
<label>Rabatt:</label> <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 /> <br />
<label>Rabatt Beschreibung:</label> <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> </div>
{/if} {/if}
@@ -114,71 +114,71 @@
<p> <p>
<br /> <br />
<label>Anrede:</label> <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} {strip}
<input value=' <input value='
{if $rechnung.anr1} {if $rechnung.anrede1}
$rechnung.anr1 {$rechnung.anrede1|escape}
{else} {else}
Sehr geehrter Herr{" "} Sehr geehrter Herr{" "}
{if $adresse.titel_id > 1} {if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "} {$titels.{$adresse.titel_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname} {if $adresse.vname}
{$adresse.vname}{" "} {$adresse.vname|escape}{" "}
{/if} {/if}
{$adresse.nname}, {$adresse.nname|escape},
{/if} {/if}
' id='anr1' maxlength='150' name='anr1' /><br /> ' id='anr1' maxlength='150' name='anr1' /><br />
{/strip} {/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} {strip}
<input value=' <input value='
{if $rechnung.anr1} {if $rechnung.anrede1}
$rechnung.anr1 {$rechnung.anrede1|escape}
{else} {else}
Sehr geehrter Herr{" "} Sehr geehrter Herr{" "}
{if $adresse.titel2_id > 1} {if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "} {$titels.{$adresse.titel2_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname2} {if $adresse.vname2}
{$adresse.vname2}{" "} {$adresse.vname2|escape}{" "}
{/if} {/if}
{$adresse.nname2}, {$adresse.nname2|escape},
{/if} {/if}
' id='anr1' maxlength='150' name='anr1' /><br /> ' id='anr1' maxlength='150' name='anr1' /><br />
{/strip} {/strip}
{elseif $anrs.{$adresse.anrede_id} == "Frau"} {elseif $anrs.{$adresse.anrede_id} == "Frau"}
{strip} {strip}
<input value=' <input value='
{if $rechnung.anr1} {if $rechnung.anrede1}
$rechnung.anr1 {$rechnung.anrede1|escape}
{else} {else}
Sehr geehrte Frau{" "} Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1} {if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "} {$titels.{$adresse.titel_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname} {if $adresse.vname}
{$adresse.vname}{" "} {$adresse.vname|escape}{" "}
{/if} {/if}
{$adresse.nname}, {$adresse.nname|escape},
{/if} {/if}
' id='anr1' maxlength='150' name='anr1' /><br /> ' id='anr1' maxlength='150' name='anr1' /><br />
{/strip} {/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Frau"} {elseif $anrs.{$adresse.anrede2_id} == "Frau"}
{strip} {strip}
<input value=' <input value='
{if $rechnung.anr1} {if $rechnung.anrede1}
$rechnung.anr1 {$rechnung.anrede1|escape}
{else} {else}
Sehr geehrte Frau{" "} Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1} {if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "} {$titels.{$adresse.titel2_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname2} {if $adresse.vname2}
{$adresse.vname2}{" "} {$adresse.vname2|escape}{" "}
{/if} {/if}
{$adresse.nname2}, {$adresse.nname2|escape},
{/if} {/if}
' id='anr1' maxlength='150' name='anr1' /><br /> ' id='anr1' maxlength='150' name='anr1' /><br />
{/strip} {/strip}
@@ -187,37 +187,37 @@
{/if} {/if}
<label>Zweite Anrede:</label> <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} {strip}
<input value=' <input value='
{if $rechnung.anr2} {if $rechnung.anrede2}
$rechnung.anr2 {$rechnung.anrede2|escape}
{else} {else}
Sehr geehrte Frau{" "} Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1} {if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "} {$titels.{$adresse.titel_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname} {if $adresse.vname}
{$adresse.vname}{" "} {$adresse.vname|escape}{" "}
{/if} {/if}
{$adresse.nname}, {$adresse.nname|escape},
{/if} {/if}
' id='anr2' maxlength='150' name='anr2' /><br /> ' id='anr2' maxlength='150' name='anr2' /><br />
{/strip} {/strip}
{elseif $anrs.{$adresse.anrede2_id} == "Frau"} {elseif $anrs.{$adresse.anrede2_id} == "Frau"}
{strip} {strip}
<input value=' <input value='
{if $rechnung.anr2} {if $rechnung.anrede2}
$rechnung.anr2 {$rechnung.anrede2|escape}
{else} {else}
Sehr geehrte Frau{" "} Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1} {if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "} {$titels.{$adresse.titel2_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname2} {if $adresse.vname2}
{$adresse.vname2}{" "} {$adresse.vname2|escape}{" "}
{/if} {/if}
{$adresse.nname2}, {$adresse.nname2|escape},
{/if} {/if}
' id='anr2' maxlength='150' name='anr2' /><br /> ' id='anr2' maxlength='150' name='anr2' /><br />
{/strip} {/strip}
@@ -226,22 +226,22 @@
{/if} {/if}
<label class='artlabel'>{if $type != 5}Einleitungstext{else}Text{/if}:</label><br /> <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} <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} erhalten. Deshalb bitten wir Sie, den fehlenden Betrag bis zum angegeben Zahlungsziel auf unser Konto zu überweisen.{/if} {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> </textarea></center>
</p> </p>
{/if} {/if}
{if $type == 1} {if $type == 1}
{if $smarty.session.firma == "Wagner Markisen"} {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} {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} {/if}
{if $type == 1} {if $type == 1}
<label>Buchungskonto:</label> <label>Buchungskonto:</label>
<select name='buchKto'> <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> </select>
{else} {else}
<input type='hidden' name='buchKto' value='1'> <input type='hidden' name='buchKto' value='1'>
@@ -264,30 +264,30 @@
<button type="button" class='swart' onclick="swart({$artnr|escape});"></button> <button type="button" class='swart' onclick="swart({$artnr|escape});"></button>
{/if} {/if}
{if $type == 3} {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|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}" 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|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}" 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="3angtyp{$artnr|escape}" value="3" {if $art.art.angtyp == 3}checked="checked"{/if} />Alternativ</label><br />
{else} {else}
<input type="hidden" name="angtyp{$artnr}" id="1angtyp{$artnr}" value="1" /> <input type="hidden" name="angtyp{$artnr|escape}" id="1angtyp{$artnr|escape}" value="1" />
<input type="hidden" name="angtyp{$artnr}" id="2angtyp{$artnr}" value="1" /> <input type="hidden" name="angtyp{$artnr|escape}" id="2angtyp{$artnr|escape}" value="1" />
<input type="hidden" name="angtyp{$artnr}" id="3angtyp{$artnr}" value="1" /> <input type="hidden" name="angtyp{$artnr|escape}" id="3angtyp{$artnr|escape}" value="1" />
{/if} {/if}
</td> </td>
<td> <td>
{if $art.art.pagebreak} {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> <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}' name='pagebreak{$artnr}' value='1' /> <input type='hidden' id='pagebreak{$artnr|escape}' name='pagebreak{$artnr|escape}' value='1' />
{else} {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> <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}' name='pagebreak{$artnr}' value='' /> <input type='hidden' id='pagebreak{$artnr|escape}' name='pagebreak{$artnr|escape}' value='' />
{/if} {/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='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}' id='arttyp{$artnr}'> <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}"} {html_options values=$typids output=$typs selected="{$art.art.typ_id|escape}"}
</select><br /> </select><br />
<label class='artlabel'>Artikelbeschreibung:</label><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 /> <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}'> <div id='arteig{$artnr|escape}'>
{$eignr = 0} {$eignr = 0}
{foreach $art.eig as $eigensch} {foreach $art.eig as $eigensch}
{$eignr = $eignr+1} {$eignr = $eignr+1}
@@ -295,12 +295,12 @@
<div class="sweig_spacer"></div> <div class="sweig_spacer"></div>
{else} {else}
<br /> <br />
<button type="button" class='sweig' onclick="sweig({$artnr},{$eignr});"></button> <button type="button" class='sweig' onclick="sweig({$artnr|escape},{$eignr|escape});"></button>
{/if} {/if}
<input class='arteig' value='{$eigensch.bezeichn|escape}' id='arteig{$artnr}_{$eignr}' maxlength='100' name='arteig{$artnr}_{$eignr}' onChange='addEigBlock({$artnr},{$eignr});' /> <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}_{$eignr}' maxlength='50' name='artval{$artnr}_{$eignr}' /> <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}_{$eignr}' id='arteinh{$artnr}_{$eignr}' class='arteinh'> <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}"} {html_options values=$einhids output=$einhs selected="{$eigensch.einheit_id|escape}"}
</select> </select>
{/foreach} {/foreach}
{$eignr = $eignr+1} {$eignr = $eignr+1}
@@ -308,50 +308,50 @@
<div class="sweig_spacer"></div> <div class="sweig_spacer"></div>
{else} {else}
<br /> <br />
<button type="button" class='sweig' onclick="sweig({$artnr},{$eignr});"></button> <button type="button" class='sweig' onclick="sweig({$artnr|escape},{$eignr|escape});"></button>
{/if} {/if}
<input class='arteig' value='' id='arteig{$artnr}_{$eignr}' maxlength='100' name='arteig{$artnr}_{$eignr}' onChange='addEigBlock({$artnr},{$eignr});' /> <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}_{$eignr}' maxlength='50' name='artval{$artnr}_{$eignr}' /> <input class='artval' value='' id='artval{$artnr|escape}_{$eignr|escape}' maxlength='50' name='artval{$artnr|escape}_{$eignr|escape}' />
<select name='arteinh{$artnr}_{$eignr}' id='arteinh{$artnr}_{$eignr}' class='arteinh'> <select name='arteinh{$artnr|escape}_{$eignr|escape}' id='arteinh{$artnr|escape}_{$eignr|escape}' class='arteinh'>
{html_options values=$einhids output=$einhs selected="1"} {html_options values=$einhids output=$einhs selected="1"}
</select> </select>
</div> </div>
<p> <p>
<label class='artlabel'>Bestellnummer (WA-Nr.):</label><br /> <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> <label>Mwst:</label>
<select name='artmwst{$artnr}' id='artmwst{$artnr}' class='arteinh'> <select name='artmwst{$artnr|escape}' id='artmwst{$artnr|escape}' class='arteinh'>
{html_options values=$artmwstids output=$artmwsts selected="{$art.art.mwst_id|default:1}"} {html_options values=$artmwstids output=$artmwsts selected="{$art.art.mwst_id|default:1|escape}"}
</select> </select>
</p> </p>
</td> </td>
<td class="pricetd"> <td class="pricetd">
<label class='artlabel'>Menge:</label><br /> <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}' /> <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}' id='artmeneinh{$artnr}' class='artmeneinh'> <select name='artmeneinh{$artnr|escape}' id='artmeneinh{$artnr|escape}' class='artmeneinh'>
{html_options values=$einhids output=$einhs selected="{$art.art.einheit_id}"} {html_options values=$einhids output=$einhs selected="{$art.art.einheit_id|escape}"}
</select><br /> </select><br />
<label class='artlabel'>Preis:</label><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 /> <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> <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}" id="artrabtyp{$artnr}" value="1" {if $art.art.rabatttyp} checked='checked'{/if} />Winterrabatt</label> <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 /> <br />
</td> </td>
</tr> </tr>
<script> <script>
$(function() { $(function() {
$( "#arthead{$artnr}" ).autocomplete({ $( "#arthead{$artnr|escape}" ).autocomplete({
source: "ajax/auto/art.php", source: "ajax/auto/art.php",
minLength: 2, minLength: 2,
select: function( event, ui ) { select: function( event, ui ) {
i=0; i=0;
$("#arthead{$artnr}").val(ui.item.value); $("#arthead{$artnr|escape}").val(ui.item.value);
$("#artpr{$artnr}").val(ui.item.preis); $("#artpr{$artnr|escape}").val(ui.item.preis);
$("#arttyp{$artnr}").val(ui.item.typ); $("#arttyp{$artnr|escape}").val(ui.item.typ);
$("#artmeneinh{$artnr}").val(ui.item.einh); $("#artmeneinh{$artnr|escape}").val(ui.item.einh);
cleareig({$artnr}); cleareig({$artnr|escape});
i=0; i=0;
if(ui.item.eig) if(ui.item.eig)
{ {
@@ -359,9 +359,9 @@
{ {
i++; i++;
addEigBlock(1,i); addEigBlock(1,i);
$("#arteig{$artnr}_"+i).val(value.des); $("#arteig{$artnr|escape}_"+i).val(value.des);
$("#artval{$artnr}_"+i).val(value.val); $("#artval{$artnr|escape}_"+i).val(value.val);
$("#arteinh{$artnr}_"+i).val(value.einh); $("#arteinh{$artnr|escape}_"+i).val(value.einh);
}); });
} }
return false; return false;
@@ -378,71 +378,71 @@
<button type="button" class='swart' onclick="swart({$artnr|escape});"></button> <button type="button" class='swart' onclick="swart({$artnr|escape});"></button>
{/if} {/if}
{if $type == 3 || $type == 5} {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|escape}" id="1angtyp{$artnr|escape}" 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|escape}" id="2angtyp{$artnr|escape}" 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="3angtyp{$artnr|escape}" value="3" />Alternativ</label><br />
{else} {else}
<input type="hidden" name="angtyp{$artnr}" id="1angtyp{$artnr}" value="1" /> <input type="hidden" name="angtyp{$artnr|escape}" id="1angtyp{$artnr|escape}" value="1" />
<input type="hidden" name="angtyp{$artnr}" id="2angtyp{$artnr}" value="1" /> <input type="hidden" name="angtyp{$artnr|escape}" id="2angtyp{$artnr|escape}" value="1" />
<input type="hidden" name="angtyp{$artnr}" id="3angtyp{$artnr}" value="1" /> <input type="hidden" name="angtyp{$artnr|escape}" id="3angtyp{$artnr|escape}" value="1" />
{/if} {/if}
</td> </td>
<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> <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}' name='pagebreak{$artnr}' value='' /> <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='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}' id='arttyp{$artnr}'> <label class='artlabel'>Artikeltyp:</label><select class='artselect' name='arttyp{$artnr|escape}' id='arttyp{$artnr|escape}'>
{html_options values=$typids output=$typs selected="1"} {html_options values=$typids output=$typs selected="1"}
</select><br /> </select><br />
<label class='artlabel'>Artikelbeschreibung:</label><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 /> <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}'> <div id='arteig{$artnr|escape}'>
{$eignr = 1} {$eignr = 1}
<div class="sweig_spacer"></div> <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='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}_{$eignr}' maxlength='50' name='artval{$artnr}_{$eignr}' /> <input class='artval' value='' id='artval{$artnr|escape}_{$eignr|escape}' maxlength='50' name='artval{$artnr|escape}_{$eignr|escape}' />
<select name='arteinh{$artnr}_{$eignr}' id='arteinh{$artnr}_{$eignr}' class='arteinh'> <select name='arteinh{$artnr|escape}_{$eignr|escape}' id='arteinh{$artnr|escape}_{$eignr|escape}' class='arteinh'>
{html_options values=$einhids output=$einhs selected="1"} {html_options values=$einhids output=$einhs selected="1"}
</select> </select>
</div> </div>
<p> <p>
<label class='artlabel'>Bestellnummer (WA-Nr.):</label><br /> <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> <label>Mwst:</label>
<select name='artmwst{$artnr}' id='artmwst{$artnr}' class='arteinh'> <select name='artmwst{$artnr|escape}' id='artmwst{$artnr|escape}' class='arteinh'>
{html_options values=$artmwstids output=$artmwsts selected="{$art.art.mwst_id|default:1}"} {html_options values=$artmwstids output=$artmwsts selected="{$art.art.mwst_id|default:1|escape}"}
</select> </select>
</p> </p>
</td> </td>
<td class="pricetd"> <td class="pricetd">
<label class='artlabel'>Menge:</label><br /> <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}' /> <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}' id='artmeneinh{$artnr}' class='artmeneinh'> <select name='artmeneinh{$artnr|escape}' id='artmeneinh{$artnr|escape}' class='artmeneinh'>
{html_options values=$einhids output=$einhs selected="5"} {html_options values=$einhids output=$einhs selected="5"}
</select><br /> </select><br />
<label class='artlabel'>Preis:</label><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 /> <label class='artlabel'>Rabatt:</label><br />
<input class='artpr' value='' id='artrab{$artnr}' maxlength='3' pattern="[0-9]*" name='artrab{$artnr}' /><b>%</b> <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}" id="artrabtyp{$artnr}" value="1" />Winterrabatt</label> <label class='checktext'><input type="checkbox" name="artrabtyp{$artnr|escape}" id="artrabtyp{$artnr|escape}" value="1" />Winterrabatt</label>
<br /> <br />
</td> </td>
</tr> </tr>
<script> <script>
$(function() { $(function() {
$( "#arthead{$artnr}" ).autocomplete({ $( "#arthead{$artnr|escape}" ).autocomplete({
source: "ajax/auto/art.php", source: "ajax/auto/art.php",
minLength: 2, minLength: 2,
select: function( event, ui ) { select: function( event, ui ) {
i=0; i=0;
$("#arthead{$artnr}").val(ui.item.value); $("#arthead{$artnr|escape}").val(ui.item.value);
$("#artpr{$artnr}").val(ui.item.preis); $("#artpr{$artnr|escape}").val(ui.item.preis);
$("#arttyp{$artnr}").val(ui.item.typ); $("#arttyp{$artnr|escape}").val(ui.item.typ);
$("#artmeneinh{$artnr}").val(ui.item.einh); $("#artmeneinh{$artnr|escape}").val(ui.item.einh);
cleareig({$artnr}); cleareig({$artnr|escape});
i=0; i=0;
if(ui.item.eig) if(ui.item.eig)
{ {
@@ -450,9 +450,9 @@
{ {
i++; i++;
addEigBlock(1,i); addEigBlock(1,i);
$("#arteig{$artnr}_"+i).val(value.des); $("#arteig{$artnr|escape}_"+i).val(value.des);
$("#artval{$artnr}_"+i).val(value.val); $("#artval{$artnr|escape}_"+i).val(value.val);
$("#arteinh{$artnr}_"+i).val(value.einh); $("#arteinh{$artnr|escape}_"+i).val(value.einh);
}); });
} }
return false; return false;
@@ -470,11 +470,11 @@
<fieldset class='nolim'> <fieldset class='nolim'>
<legend>Rechnungsabschluss:</legend> <legend>Rechnungsabschluss:</legend>
<label class='artlabel'>Abschlusstext:</label><br /> <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} {if $kommission}
<p> <p>
<label>Kommission: </label> {$kommission.vname} {$kommission.nname} {$kommission.str} {$kommission.hnr}, {$kommission.plz} {$kommission.ort} <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}' /> <input type='hidden' name='kommission' id='kommission' value='{$kommission.id|escape}' />
</p> </p>
{/if} {/if}
<br /> <br />
@@ -503,7 +503,7 @@
{if $draft && $loaddraft == 0} {if $draft && $loaddraft == 0}
<script> <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> </script>
{else} {else}
<script> <script>
+3 -3
View File
@@ -5,7 +5,7 @@
{/if} {/if}
<h2>Termin für Kunde Nummer:</h2> <h2>Termin für Kunde Nummer:</h2>
<span class='big'>{$kunde.partner_id}</span><br /> <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}
{if $user} {if $user}
{$termin.user = $user} {$termin.user = $user}
@@ -45,10 +45,10 @@
</select><br /> </select><br />
{/if} {/if}
<label>Beschreibung:</label> <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 /> <br />
<label kundeclass='artlabel'>Notizen:</label> <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> <label class='checktext'><input type="checkbox" id='done' name="done" value="1" {if $termin.done == 1}checked="checked"{/if} />Termin ist erledigt</label>
</p> </p>
<br /> <br />
+15 -15
View File
@@ -50,9 +50,9 @@
{foreach $weekday.fulldaytermine as $key=>$termin} {foreach $weekday.fulldaytermine as $key=>$termin}
<a href='?action=terminshow&id={$termin.main_id}'> <a href='?action=terminshow&id={$termin.main_id}'>
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}' <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};' style='width: 1em;height: {$height}em;top: {$start}em;left: {$shift + $dayXpos}em;background-color: {$users.{$termin.user}.color|escape};'
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}'> 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}.</span> <span class='rotate' style='padding-top: {$shift}em;'>{$termin.typ|substr:0:3|escape}.</span>
</div> </div>
</a> </a>
{$shift = $shift+1.1} {$shift = $shift+1.1}
@@ -107,19 +107,19 @@
{if {$termin.typ} != 'Arbeitsleistung'} {if {$termin.typ} != 'Arbeitsleistung'}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}' <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=' 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} 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 /> {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 /> <b>In {$termin.ort|escape}{if $termin.ortsteil}-{$termin.ortsteil|escape}{/if}</b><br />
Bei {$termin.vname} {$termin.nname} {$termin.firma}'> Bei {$termin.vname|escape} {$termin.nname|escape} {$termin.firma|escape}'>
{else} {else}
<div class='{if $termin.done == 1}doneterminbox{else}terminbox{/if}' <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};' 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} - {$termin.firma} {$termin.vname} {$termin.nname}<br /> <b>{$termin.projectname}</b> <br /> {$termin.head}<br /> <b>Dauer: </b>{$termin.termdauer|string_format:"%.1f"}h'> 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} {/if}
<span class='rotate'>{$termin.typ|substr:0:3}.</span> <span class='rotate'>{$termin.typ|substr:0:3|escape}.</span>
</div> </div>
</a> </a>
{/foreach} {/foreach}
@@ -133,9 +133,9 @@
{$width = 9} {$width = 9}
{$start = $ma_nr + 0.5} {$start = $ma_nr + 0.5}
<div class='mabox' <div class='mabox'
style='width: {$width}em;height: {$height}em;top: {$start}em;left: {$dayXpos+ 0.5}em;background-color: {$mitarb.color};' style='width: {$width}em;height: {$height}em;top: {$start}em;left: {$dayXpos+ 0.5}em;background-color: {$mitarb.color|escape};'
title='{$mitarb.vname} {$mitarb.nname} - Anwesend {if {$mitarb.complete} == 0} aber noch nicht ausgestempelt{/if}<br />'> 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} {$mitarb.nname|substr:0:1}.</font> {if {$mitarb.complete} == 0}<font color='#aa0000'>{else}<font color='#000000'>{/if}{$mitarb.vname|escape} {$mitarb.nname|substr:0:1|escape}.</font>
</div> </div>
</a> </a>
{/foreach} {/foreach}
@@ -169,9 +169,9 @@
</div> </div>
{foreach $users as $user} {foreach $users as $user}
{if $user.openvacation < 0} {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} {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} {/if}
{/foreach} {/foreach}
<br /> <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"> <fieldset class="big">
<legend>Neue Adresse:</legend> <legend>Neue Adresse:</legend>
<div class='centersrc'> <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='#'} {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({$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.' /> <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 /> <br />
</div> </div>
@@ -14,4 +14,4 @@
</fieldset> </fieldset>
</form> </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"> <fieldset class="big">
<legend>Neue Adresse:</legend> <legend>Neue Adresse:</legend>
<div class='centersrc'> <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='#'} {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({$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.' /> <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 /> <br />
</div> </div>
@@ -14,4 +14,4 @@
</fieldset> </fieldset>
</form> </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 /> <a href='?action=kundenadd'><span class='addcenter' title="Neuer Kunde"></span></a><br />
<div class='centersrc'> <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='#'} {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 /> <br />
</div> </div>
@@ -15,7 +15,7 @@
</fieldset> </fieldset>
</form> </form>
<script language='javascript'>ajax_searchkunden({$page});</script> <script language='javascript'>ajax_searchkunden({$page|intval});</script>
<div id="question"> <div id="question">
</div> </div>
+13 -10
View File
@@ -42,9 +42,9 @@
{/if} {/if}
{if $adresse.gebdat != "01.01.2100" && $adresse.gebdat != "00.00.0000"} {if $adresse.gebdat != "01.01.2100" && $adresse.gebdat != "00.00.0000"}
{if $adresse.gebdat|substr:6:4 != "2099"} {if $adresse.gebdat|substr:6:4 != "2099"}
(Geburtstag: {$adresse.gebdat})<br /> (Geburtstag: {$adresse.gebdat|escape})<br />
{else} {else}
(Geburtstag: {$adresse.gebdat|substr:0:5})<br /> (Geburtstag: {$adresse.gebdat|escape|substr:0:5})<br />
{/if} {/if}
{/if} {/if}
{/if} {/if}
@@ -56,9 +56,9 @@
{/if} {/if}
{if $adresse.gebdat2 != "01.01.2100" && $adresse.gebdat2 != "00.00.0000"} {if $adresse.gebdat2 != "01.01.2100" && $adresse.gebdat2 != "00.00.0000"}
{if $adresse.gebdat2|substr:6:4 != "2099"} {if $adresse.gebdat2|substr:6:4 != "2099"}
(Geburtstag: {$adresse.gebdat2})<br /> (Geburtstag: {$adresse.gebdat2|escape})<br />
{else} {else}
(Geburtstag: {$adresse.gebdat2|substr:0:5})<br /> (Geburtstag: {$adresse.gebdat2|escape|substr:0:5})<br />
{/if} {/if}
{/if} {/if}
{/if} {/if}
@@ -71,6 +71,9 @@
{$adresse.plz|escape|default:""} {$adresse.ort|escape|default:""} {$adresse.ortsteil|escape|default:""}<br /> {$adresse.plz|escape|default:""} {$adresse.ort|escape|default:""} {$adresse.ortsteil|escape|default:""}<br />
<span>{$adresse.land|escape|default:""}</span> <span>{$adresse.land|escape|default:""}</span>
{if $adresse.nr}
Telefon: {if $adresse.vwahl}{$adresse.vwahl|escape} / {/if}{$adresse.nr|escape}<br />
{/if}
</p> </p>
<p> <p>
@@ -78,7 +81,7 @@
{if $adresse.typ_id != 1} {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> <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} {/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=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> <a href='?action=rechnungadd&type=1&adressid={$adresse.id}'><span class='rechnadd' title="Rechnung anlegen"></span></a>
@@ -177,13 +180,13 @@
{/if} {/if}
{$i=$i+1} {$i=$i+1}
{strip} {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> <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> <p>
{if $note.id} {if $note.id}
{if $note.file} {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} {/if}
<a href='?action=kundenchange&do=notiz&notizid={$note.id}'><span class='edit' title="Notiz ändern"></span></a> <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> <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} {$i=$i+1}
{strip} {strip}
<fieldset class='small'> <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 /> Konto Nr.: {$kto.ktonr|escape|chunk_split:3:" "}<br />
Inhaber: {$kto.inhaber|escape}<br /> Inhaber: {$kto.inhaber|escape}<br />
{if $kto.iban} {if $kto.iban}
@@ -234,7 +237,7 @@
<div id="tabs"> <div id="tabs">
<ul> <ul>
{foreach $rechtypen as $rechtyp} {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} {/foreach}
</ul> </ul>
{foreach $rechtypen as $rechtyp} {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 /> {$adresse.plz|escape|default:""} {$adresse.ort|escape|default:""} {$adresse.ortsteil|escape|default:""}<br />
<span>{$adresse.land|escape|default:""}</span> <span>{$adresse.land|escape|default:""}</span>
{if $adresse.nr}
Telefon: {if $adresse.vwahl}{$adresse.vwahl|escape} / {/if}{$adresse.nr|escape}<br />
{/if}
</p> </p>
<p> <p>
<a href='?action=lieferchange&do=adress&adressid={$adresse.id}&kunde={$kunde.id}'><span class='edit' title="Adresse ändern"></span></a> <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} {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> <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} {/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> </p>
</fieldset> </fieldset>
{/strip} {/strip}
@@ -116,7 +119,7 @@
<a href='?action=lieferchange&kunde={$kunde.id}&do=notiz'><span class='add' title="Neue Notiz"></span></a> <a href='?action=lieferchange&kunde={$kunde.id}&do=notiz'><span class='add' title="Neue Notiz"></span></a>
{foreach $notes as $note} {foreach $notes as $note}
{strip} {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> <legend>{$note.datetime|date_format:"%a, %d.%m.%Y <br /> %R Uhr"}</legend>
{$note.notiz|escape|default:""}<br /> {$note.notiz|escape|default:""}<br />
<p> <p>
@@ -134,7 +137,7 @@
{foreach $kontos as $kto} {foreach $kontos as $kto}
{strip} {strip}
<fieldset class='small'> <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 /> Konto Nr.: {$kto.ktonr|escape|chunk_split:3:" "}<br />
Inhaber: {$kto.inhaber|escape}<br /> Inhaber: {$kto.inhaber|escape}<br />
{if $kto.iban} {if $kto.iban}
@@ -158,14 +161,14 @@
<div id="tabs"> <div id="tabs">
<ul> <ul>
{foreach $rechtypen as $rechtyp} {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} {/foreach}
</ul> </ul>
{foreach $rechtypen as $rechtyp} {foreach $rechtypen as $rechtyp}
<div id="tabs-{$rechtyp.id}"> <div id="tabs-{$rechtyp.id}">
<div class='centersrc'> <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 /> <br />
</div> </div>
<div id='rechlist-{$rechtyp.id}'> <div id='rechlist-{$rechtyp.id}'>
@@ -181,7 +184,7 @@
$(function() { $(function() {
$( "#tabs" ).tabs(); $( "#tabs" ).tabs();
}); });
ajax_searchkdnrech(0,1,{$kunde.id}); ajax_searchkdnrech(0,0,1,{$kunde.id});
</script> </script>
<div id="question"> <div id="question">
+29 -29
View File
@@ -15,11 +15,11 @@
{elseif $type == 5} {elseif $type == 5}
{$typename="Brief"} {$typename="Brief"}
{/if} {/if}
<h2>{$typename} {$headstr}:</h2> <h2>{$typename|escape} {$headstr|escape}:</h2>
<form action="?action=rechnungadd&mailformsent=1&mail=1&id={$smarty.get.id}" name="mainform" id='rechnform' method='POST'> <form action="?action=rechnungadd&mailformsent=1&mail=1&id={$smarty.get.id|intval}" name="mainform" id='rechnform' method='POST'>
<fieldset class='nolim'> <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> <p>
<br /> <br />
@@ -28,9 +28,9 @@
{html_options values=$mails output=$mails} {html_options values=$mails output=$mails}
</select><br /> </select><br />
<label>Betreff:</label> <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> <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} {strip}
<input value=' <input value='
{if $rechnung.anr1} {if $rechnung.anr1}
@@ -38,16 +38,16 @@
{else} {else}
Sehr geehrter Herr{" "} Sehr geehrter Herr{" "}
{if $adresse.titel_id > 1} {if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "} {$titels.{$adresse.titel_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname} {if $adresse.vname}
{$adresse.vname}{" "} {$adresse.vname|escape}{" "}
{/if} {/if}
{$adresse.nname}, {$adresse.nname|escape},
{/if} {/if}
' id='anr1' maxlength='150' name='anr1' /><br /> ' id='anr1' maxlength='150' name='anr1' /><br />
{/strip} {/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} {strip}
<input value=' <input value='
{if $rechnung.anr1} {if $rechnung.anr1}
@@ -55,12 +55,12 @@
{else} {else}
Sehr geehrter Herr{" "} Sehr geehrter Herr{" "}
{if $adresse.titel2_id > 1} {if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "} {$titels.{$adresse.titel2_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname2} {if $adresse.vname2}
{$adresse.vname2}{" "} {$adresse.vname2|escape}{" "}
{/if} {/if}
{$adresse.nname2}, {$adresse.nname2|escape},
{/if} {/if}
' id='anr1' maxlength='150' name='anr1' /><br /> ' id='anr1' maxlength='150' name='anr1' /><br />
{/strip} {/strip}
@@ -72,12 +72,12 @@
{else} {else}
Sehr geehrte Frau{" "} Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1} {if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "} {$titels.{$adresse.titel_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname} {if $adresse.vname}
{$adresse.vname}{" "} {$adresse.vname|escape}{" "}
{/if} {/if}
{$adresse.nname}, {$adresse.nname|escape},
{/if} {/if}
' id='anr1' maxlength='150' name='anr1' /><br /> ' id='anr1' maxlength='150' name='anr1' /><br />
{/strip} {/strip}
@@ -89,12 +89,12 @@
{else} {else}
Sehr geehrte Frau{" "} Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1} {if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "} {$titels.{$adresse.titel2_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname2} {if $adresse.vname2}
{$adresse.vname2}{" "} {$adresse.vname2|escape}{" "}
{/if} {/if}
{$adresse.nname2}, {$adresse.nname2|escape},
{/if} {/if}
' id='anr1' maxlength='150' name='anr1' /><br /> ' id='anr1' maxlength='150' name='anr1' /><br />
{/strip} {/strip}
@@ -103,7 +103,7 @@
{/if} {/if}
<label>Zweite Anrede:</label> <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} {strip}
<input value=' <input value='
{if $rechnung.anr2} {if $rechnung.anr2}
@@ -111,12 +111,12 @@
{else} {else}
Sehr geehrte Frau{" "} Sehr geehrte Frau{" "}
{if $adresse.titel_id > 1} {if $adresse.titel_id > 1}
{$titels.{$adresse.titel_id}}{" "} {$titels.{$adresse.titel_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname} {if $adresse.vname}
{$adresse.vname}{" "} {$adresse.vname|escape}{" "}
{/if} {/if}
{$adresse.nname}, {$adresse.nname|escape},
{/if} {/if}
' id='anr2' maxlength='150' name='anr2' /><br /> ' id='anr2' maxlength='150' name='anr2' /><br />
{/strip} {/strip}
@@ -128,12 +128,12 @@
{else} {else}
Sehr geehrte Frau{" "} Sehr geehrte Frau{" "}
{if $adresse.titel2_id > 1} {if $adresse.titel2_id > 1}
{$titels.{$adresse.titel2_id}}{" "} {$titels.{$adresse.titel2_id}|escape}{" "}
{/if} {/if}
{if $adresse.vname2} {if $adresse.vname2}
{$adresse.vname2}{" "} {$adresse.vname2|escape}{" "}
{/if} {/if}
{$adresse.nname2}, {$adresse.nname2|escape},
{/if} {/if}
' id='anr2' maxlength='150' name='anr2' /><br /> ' id='anr2' maxlength='150' name='anr2' /><br />
{/strip} {/strip}
@@ -142,11 +142,11 @@
{/if} {/if}
<label class='artlabel'>E-Mail Text:</label><br /> <label class='artlabel'>E-Mail Text:</label><br />
<center><textarea name='intro' id='intro' {if $type == 5}class='tinymce'{else}class='bigtextarea'{/if}> <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 Mit freundlichen Grüßen
{$smarty.session.vname} {$smarty.session.nname} {$smarty.session.vname|escape} {$smarty.session.nname|escape}
{$smarty.session.firma} {$smarty.session.firma|escape}
--- ---
Das Dokument ist als PDF-Datei im Anhang hinterlegt. Das Dokument ist als PDF-Datei im Anhang hinterlegt.
@@ -169,7 +169,7 @@ http://www.adobe.de/products/acrobat/readstep2.html
<br /> <br />
<h2>Anhang:</h2> <h2>Anhang:</h2>
<div id="pdfpreview"> <div id="pdfpreview">
<iframe src='{$pdffile}' width='100%' height='600px'></iframe> <iframe src='{$pdffile|escape}' width='100%' height='600px'></iframe>
</div> </div>
</div> </div>
</div> </div>
+1 -1
View File
@@ -2,7 +2,7 @@
{include file="heading.tpl" heading=$head} {include file="heading.tpl" heading=$head}
<div class="widthlimiter"> <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> <fieldset>
<label>Adresstyp:</label><select name="typ" id="typ" > <label>Adresstyp:</label><select name="typ" id="typ" >
+1 -1
View File
@@ -2,7 +2,7 @@
{include file="heading.tpl" heading=$head} {include file="heading.tpl" heading=$head}
<div class="widthlimiter"> <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> <fieldset>
<label>Typ:</label><select name="typ" id="typ" > <label>Typ:</label><select name="typ" id="typ" >
{html_options values=$typids output=$typs selected="{$typ}"} {html_options values=$typids output=$typs selected="{$typ}"}
+1 -1
View File
@@ -2,7 +2,7 @@
{include file="heading.tpl" heading=$head} {include file="heading.tpl" heading=$head}
<div class="widthlimiter"> <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> <fieldset>
<label>Bank:</label><input name='bank' id='bank' value="{$bank|escape}" pattern="[^0-9]*" /><br /> <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} {include file="heading.tpl" heading=$head}
<div class="widthlimiter"> <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'> <fieldset class='colorchooser'>
<legend>Farbe:</legend> <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>
<fieldset> <fieldset>
<legend>Notiz:</legend> <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 /> <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 /> <button type="button" class='spell' onclick="$('textarea:not(#personalnotes,#globalnotes),input:not([type=radio])').spellCheckInDialog()">Rechtschreibung prüfen</button><br />
</fieldset> </fieldset>
+1 -1
View File
@@ -2,7 +2,7 @@
{include file="heading.tpl" heading=$head} {include file="heading.tpl" heading=$head}
<div class="widthlimiter"> <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> <fieldset>
<label>Typ:</label><select name="typ" id="typ" > <label>Typ:</label><select name="typ" id="typ" >
{html_options values=$typids output=$typs selected="{$typ}"} {html_options values=$typids output=$typs selected="{$typ}"}
+2 -2
View File
@@ -1,6 +1,6 @@
{include file="heading.tpl" heading="Dokumentanzeige"} {include file="heading.tpl" heading="Dokumentanzeige"}
<h2><div class='fifty'>Original:</div><div class='fifty'>Kopie:</div></h2> <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} {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} {/if}
+2 -2
View File
@@ -1,4 +1,4 @@
{include file="heading.tpl" heading="Terminanzeige"} {include file="heading.tpl" heading="Terminanzeige"}
<h2><div class='fifty'>Ohne Anfahrt:</div><div class='fifty'>Mit Anfahrt:</div></h2> <h2><div class='fifty'>Ohne Anfahrt:</div><div class='fifty'>Mit Anfahrt:</div></h2>
<iframe src='{$pdffile}' width='40%' height='600px'></iframe> <iframe src='{$pdffile|escape}' width='40%' height='600px'></iframe>
<iframe src='{$pdffile2}' 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"> <div id="tabs">
{* ANZEIGE PANE *} {* ANZEIGE PANE *}
<div class='widthlimiter'> <div class='widthlimiter'>
+16 -16
View File
@@ -1,55 +1,55 @@
{include file="heading.tpl" heading="Umschlag bedrucken"} {include file="heading.tpl" heading="Umschlag bedrucken"}
<div class="fifty"> <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'> <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} {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_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}
{if $adresse.anrede_id > 1} {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}
{if $adresse.titel_id > 1} {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}
{if $adresse.vname || $adresse.nname} {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} {/if}
<br /> <br />
{if $adresse.anrede2_id > 1} {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}
{if $adresse.titel2_id > 1} {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}
{if $adresse.vname2 || $adresse.nname2} {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}
{if $adresse.str} {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}
{if $adresse.plz || $adresse.ort} {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}
{if $adresse.ortsteil} {if $adresse.ortsteil}
- {$adresse.ortsteil} - {$adresse.ortsteil|escape}
{/if} {/if}
{if $adresse.plz || $adresse.ort} {if $adresse.plz || $adresse.ort}
</label> </label>
{/if} {/if}
{if $adresse.land} {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}
{if $adresse.zusatz} {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} {/if}
<br /> <br />
<label class='artlabel'>Adresserweiterung: </label> <label class='artlabel'>Adresserweiterung: </label>
<input class='art' name="adresserweiterung" value="{$rechnung.adresserweiterung}" /> <input class='art' name="adresserweiterung" value="{$rechnung.adresserweiterung|escape}" />
<br /> <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 /> <button type="button" class='preview' onclick="ajax_loadUmschlagpreview();">Vorschau aktualisieren</button><br />
</fieldset> </fieldset>
</form> </form>
+2
View File
@@ -290,6 +290,8 @@ foreach($zielTabellen as $schluessel => $z)
$gemeinsam[] = $name; $gemeinsam[] = $name;
elseif(($ersatz = ersatzwert($spalte)) !== null) elseif(($ersatz = ersatzwert($spalte)) !== null)
$ergaenzt[$name] = $ersatz[0]; $ergaenzt[$name] = $ersatz[0];
elseif(stripos($spalte["extra"], "auto_increment") === false)
$hinweise[] = "Spalte ".$z["name"].".".$name." fehlt in der Quelle, es gilt der Standardwert ".$spalte["standard"].".";
} }
foreach(array_diff(array_keys($q["spalten"]), array_keys($z["spalten"])) as $name) foreach(array_diff(array_keys($q["spalten"]), array_keys($z["spalten"])) as $name)
$hinweise[] = "Spalte ".$q["name"].".".$name." gibt es im neuen Schema nicht, sie wird nicht übernommen."; $hinweise[] = "Spalte ".$q["name"].".".$name." gibt es im neuen Schema nicht, sie wird nicht übernommen.";
+282 -277
View File
@@ -4,39 +4,44 @@
-- stammen aus ingwa, weil sie dort fehlen, der Code sie aber braucht. -- stammen aus ingwa, weil sie dort fehlen, der Code sie aber braucht.
-- Einheitlich utf8mb4. Die Anwendung verbindet sich im strikten sql_mode -- Einheitlich utf8mb4. Die Anwendung verbindet sich im strikten sql_mode
-- (siehe db_verbinden() in incs/db.php). -- (siehe db_verbinden() in incs/db.php).
--
-- Pflichtspalten haben als DEFAULT den Wert, den der frühere nicht strikte
-- Modus beim Weglassen eingesetzt hat ('', 0, Nulldatum). Weggelassene
-- Spalten verhalten sich damit wie bisher; ungültige Werte, zu lange Texte
-- und falsche Verweise lehnt der strikte Modus trotzdem ab.
SET NAMES utf8mb4; SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE `accesstype` ( CREATE TABLE `accesstype` (
`id` tinyint(3) NOT NULL AUTO_INCREMENT, `id` tinyint(3) NOT NULL AUTO_INCREMENT,
`typ` varchar(20) NOT NULL, `typ` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `addKey` ( CREATE TABLE `addKey` (
`accesskey` int(11) NOT NULL, `accesskey` int(11) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `adresse` ( CREATE TABLE `adresse` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`partner_id` int(11) NOT NULL, `partner_id` int(11) NOT NULL DEFAULT 0,
`anrede_id` int(5) NOT NULL, `anrede_id` int(5) NOT NULL DEFAULT 0,
`anrede2_id` int(5) NOT NULL, `anrede2_id` int(5) NOT NULL DEFAULT 0,
`titel_id` int(5) NOT NULL, `titel_id` int(5) NOT NULL DEFAULT 0,
`titel2_id` int(5) NOT NULL, `titel2_id` int(5) NOT NULL DEFAULT 0,
`vname` varchar(50) NOT NULL, `vname` varchar(50) NOT NULL DEFAULT '',
`vname2` varchar(50) NOT NULL, `vname2` varchar(50) NOT NULL DEFAULT '',
`nname` varchar(50) NOT NULL, `nname` varchar(50) NOT NULL DEFAULT '',
`nname2` varchar(50) NOT NULL, `nname2` varchar(50) NOT NULL DEFAULT '',
`firma` varchar(50) NOT NULL, `firma` varchar(50) NOT NULL DEFAULT '',
`str_id` int(11) NOT NULL, `str_id` int(11) NOT NULL DEFAULT 0,
`typ_id` int(2) NOT NULL, `typ_id` int(2) NOT NULL DEFAULT 0,
`hnr` varchar(10) NOT NULL, `hnr` varchar(10) NOT NULL DEFAULT '',
`zusatz` varchar(100) NOT NULL, `zusatz` varchar(100) NOT NULL DEFAULT '',
`gebdat` date NOT NULL, `gebdat` date NOT NULL DEFAULT '0000-00-00',
`gebdat2` date NOT NULL, `gebdat2` date NOT NULL DEFAULT '0000-00-00',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_partner_titel_id` (`titel_id`), KEY `fk_partner_titel_id` (`titel_id`),
KEY `fk_partner_anrede_id` (`anrede_id`), KEY `fk_partner_anrede_id` (`anrede_id`),
@@ -52,16 +57,16 @@ CREATE TABLE `adresse` (
CREATE TABLE `adresstyp` ( CREATE TABLE `adresstyp` (
`id` int(2) NOT NULL AUTO_INCREMENT, `id` int(2) NOT NULL AUTO_INCREMENT,
`typ` varchar(20) NOT NULL, `typ` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `altlasten` ( CREATE TABLE `altlasten` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`vacationdays` int(11) NOT NULL, `vacationdays` int(11) NOT NULL DEFAULT 0,
`hours` decimal(8,4) NOT NULL, `hours` decimal(8,4) NOT NULL DEFAULT 0,
`ma_id` int(11) NOT NULL, `ma_id` int(11) NOT NULL DEFAULT 0,
`last_generated` date NOT NULL, `last_generated` date NOT NULL DEFAULT '0000-00-00',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_altlasten_user_id` (`ma_id`), KEY `fk_altlasten_user_id` (`ma_id`),
CONSTRAINT `fk_altlasten_user_id` FOREIGN KEY (`ma_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE CONSTRAINT `fk_altlasten_user_id` FOREIGN KEY (`ma_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
@@ -69,17 +74,17 @@ CREATE TABLE `altlasten` (
CREATE TABLE `anrede` ( CREATE TABLE `anrede` (
`id` int(5) NOT NULL AUTO_INCREMENT, `id` int(5) NOT NULL AUTO_INCREMENT,
`anrede` varchar(20) NOT NULL, `anrede` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `artikel` ( CREATE TABLE `artikel` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`bezeichn` varchar(150) NOT NULL, `bezeichn` varchar(150) NOT NULL DEFAULT '',
`typ_id` int(5) NOT NULL, `typ_id` int(5) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`user_id` int(11) NOT NULL, `user_id` int(11) NOT NULL DEFAULT 0,
`einheit_id` int(11) NOT NULL, `einheit_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_artikel_typ_id` (`typ_id`), KEY `fk_artikel_typ_id` (`typ_id`),
KEY `fk_art_rech_einheit_id` (`einheit_id`), KEY `fk_art_rech_einheit_id` (`einheit_id`),
@@ -90,11 +95,11 @@ CREATE TABLE `artikel` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `artikel_eigensch` ( CREATE TABLE `artikel_eigensch` (
`art_id` int(11) NOT NULL, `art_id` int(11) NOT NULL DEFAULT 0,
`eig_id` int(11) NOT NULL, `eig_id` int(11) NOT NULL DEFAULT 0,
`rech_id` int(11) NOT NULL, `rech_id` int(11) NOT NULL DEFAULT 0,
`posnr` int(5) NOT NULL, `posnr` int(5) NOT NULL DEFAULT 0,
`artposnr` int(11) NOT NULL, `artposnr` int(11) NOT NULL DEFAULT 0,
KEY `fk_art_eig_art_id` (`art_id`), KEY `fk_art_eig_art_id` (`art_id`),
KEY `fk_art_eig_rech_id` (`rech_id`), KEY `fk_art_eig_rech_id` (`rech_id`),
KEY `fk_art_eig_eig_id` (`eig_id`), KEY `fk_art_eig_eig_id` (`eig_id`),
@@ -104,17 +109,17 @@ CREATE TABLE `artikel_eigensch` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `artikel_rechn` ( CREATE TABLE `artikel_rechn` (
`art_id` int(11) NOT NULL, `art_id` int(11) NOT NULL DEFAULT 0,
`rech_id` int(11) NOT NULL, `rech_id` int(11) NOT NULL DEFAULT 0,
`posnr` int(5) NOT NULL, `posnr` int(5) NOT NULL DEFAULT 0,
`rabatt` int(3) NOT NULL, `rabatt` int(3) NOT NULL DEFAULT 0,
`rabatttyp` int(2) NOT NULL, `rabatttyp` int(2) NOT NULL DEFAULT 0,
`menge` decimal(6,3) NOT NULL, `menge` decimal(6,3) NOT NULL DEFAULT 0,
`preis` decimal(10,2) DEFAULT NULL, `preis` decimal(10,2) DEFAULT NULL,
`angtyp` int(1) NOT NULL, `angtyp` int(1) NOT NULL DEFAULT 0,
`artmwst` int(3) NOT NULL, `artmwst` int(3) NOT NULL DEFAULT 0,
`wanr` varchar(100) NOT NULL, `wanr` varchar(100) NOT NULL DEFAULT '',
`pagebreak` int(1) NOT NULL, `pagebreak` int(1) NOT NULL DEFAULT 0,
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_art_rech_art_id` (`art_id`), KEY `fk_art_rech_art_id` (`art_id`),
@@ -124,11 +129,11 @@ CREATE TABLE `artikel_rechn` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `artikel_termin` ( CREATE TABLE `artikel_termin` (
`art_id` int(11) NOT NULL, `art_id` int(11) NOT NULL DEFAULT 0,
`termin_id` int(11) NOT NULL, `termin_id` int(11) NOT NULL DEFAULT 0,
`menge` decimal(6,3) NOT NULL, `menge` decimal(6,3) NOT NULL DEFAULT 0,
`rabatt` int(3) NOT NULL, `rabatt` int(3) NOT NULL DEFAULT 0,
`wanr` varchar(100) NOT NULL, `wanr` varchar(100) NOT NULL DEFAULT '',
KEY `fk_art_term_art_id` (`art_id`), KEY `fk_art_term_art_id` (`art_id`),
KEY `fk_art_term_ang_id` (`termin_id`), KEY `fk_art_term_ang_id` (`termin_id`),
CONSTRAINT `fk_art_term_ang_id` FOREIGN KEY (`termin_id`) REFERENCES `termin` (`id`) ON UPDATE CASCADE, CONSTRAINT `fk_art_term_ang_id` FOREIGN KEY (`termin_id`) REFERENCES `termin` (`id`) ON UPDATE CASCADE,
@@ -137,15 +142,15 @@ CREATE TABLE `artikel_termin` (
CREATE TABLE `artikelsks` ( CREATE TABLE `artikelsks` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`rechnr` int(11) NOT NULL, `rechnr` int(11) NOT NULL DEFAULT 0,
`bezeichn1` varchar(60) NOT NULL, `bezeichn1` varchar(60) NOT NULL DEFAULT '',
`bezeichn2` varchar(60) NOT NULL, `bezeichn2` varchar(60) NOT NULL DEFAULT '',
`menge` decimal(6,3) NOT NULL, `menge` decimal(6,3) NOT NULL DEFAULT 0,
`beschr` text DEFAULT NULL, `beschr` text DEFAULT NULL,
`pos` tinyint(3) NOT NULL, `pos` tinyint(3) NOT NULL DEFAULT 0,
`rabatt` tinyint(3) NOT NULL, `rabatt` tinyint(3) NOT NULL DEFAULT 0,
`preis` decimal(10,2) DEFAULT NULL, `preis` decimal(10,2) DEFAULT NULL,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_artikelsks_rech_id` (`rechnr`), KEY `fk_artikelsks_rech_id` (`rechnr`),
CONSTRAINT `fk_artikelsks_rech_id` FOREIGN KEY (`rechnr`) REFERENCES `rechnung` (`rechnr`) ON UPDATE CASCADE CONSTRAINT `fk_artikelsks_rech_id` FOREIGN KEY (`rechnr`) REFERENCES `rechnung` (`rechnr`) ON UPDATE CASCADE
@@ -153,20 +158,20 @@ CREATE TABLE `artikelsks` (
CREATE TABLE `artikeltyp` ( CREATE TABLE `artikeltyp` (
`id` int(5) NOT NULL AUTO_INCREMENT, `id` int(5) NOT NULL AUTO_INCREMENT,
`bezeichn` varchar(50) NOT NULL, `bezeichn` varchar(50) NOT NULL DEFAULT '',
`dropdown` tinyint(1) NOT NULL, `dropdown` tinyint(1) NOT NULL DEFAULT 0,
`list` tinyint(1) NOT NULL, `list` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `ausgabe` ( CREATE TABLE `ausgabe` (
`id` int(11) NOT NULL, `id` int(11) NOT NULL DEFAULT 0,
`user_id` int(11) NOT NULL, `user_id` int(11) NOT NULL DEFAULT 0,
`partner_id` int(11) NOT NULL, `partner_id` int(11) NOT NULL DEFAULT 0,
`rec_kto_id` int(11) NOT NULL, `rec_kto_id` int(11) NOT NULL DEFAULT 0,
`send_kto_id` int(11) NOT NULL, `send_kto_id` int(11) NOT NULL DEFAULT 0,
`betr` decimal(12,3) NOT NULL, `betr` decimal(12,3) NOT NULL DEFAULT 0,
`rabatt` decimal(4,1) NOT NULL, `rabatt` decimal(4,1) NOT NULL DEFAULT 0,
KEY `fk_ausg_user_id` (`user_id`), KEY `fk_ausg_user_id` (`user_id`),
KEY `fk_ausg_reckto_id` (`rec_kto_id`), KEY `fk_ausg_reckto_id` (`rec_kto_id`),
KEY `fk_ausg_sendkto_id` (`send_kto_id`), KEY `fk_ausg_sendkto_id` (`send_kto_id`),
@@ -179,26 +184,26 @@ CREATE TABLE `ausgabe` (
CREATE TABLE `bank` ( CREATE TABLE `bank` (
`id` int(5) NOT NULL AUTO_INCREMENT, `id` int(5) NOT NULL AUTO_INCREMENT,
`blz` varchar(30) NOT NULL, `blz` varchar(30) NOT NULL DEFAULT '',
`bank` varchar(100) NOT NULL, `bank` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `buchungsKontos` ( CREATE TABLE `buchungsKontos` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`kto` int(11) NOT NULL, `kto` int(11) NOT NULL DEFAULT 0,
`name` varchar(100) NOT NULL, `name` varchar(100) NOT NULL DEFAULT '',
`descr` text NOT NULL, `descr` text NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `eigensch` ( CREATE TABLE `eigensch` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`bezeichn` varchar(100) NOT NULL, `bezeichn` varchar(100) NOT NULL DEFAULT '',
`wert` varchar(50) NOT NULL, `wert` varchar(50) NOT NULL DEFAULT '',
`einheit_id` int(11) NOT NULL, `einheit_id` int(11) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`user_id` int(11) NOT NULL, `user_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_eigensch_user_id` (`user_id`), KEY `fk_eigensch_user_id` (`user_id`),
KEY `fk_eigensch_einheit_id` (`einheit_id`), KEY `fk_eigensch_einheit_id` (`einheit_id`),
@@ -208,16 +213,16 @@ CREATE TABLE `eigensch` (
CREATE TABLE `einheit` ( CREATE TABLE `einheit` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`einheit` varchar(10) NOT NULL, `einheit` varchar(10) NOT NULL DEFAULT '',
`si` tinyint(1) NOT NULL, `si` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `kontakt` ( CREATE TABLE `kontakt` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`partner_id` int(11) NOT NULL, `partner_id` int(11) NOT NULL DEFAULT 0,
`typ_id` int(3) NOT NULL, `typ_id` int(3) NOT NULL DEFAULT 0,
`kontakt` varchar(100) NOT NULL, `kontakt` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_kontakt_typ_id` (`typ_id`), KEY `fk_kontakt_typ_id` (`typ_id`),
KEY `fk_kontakt_partner_id` (`partner_id`), KEY `fk_kontakt_partner_id` (`partner_id`),
@@ -227,18 +232,18 @@ CREATE TABLE `kontakt` (
CREATE TABLE `kontakttyp` ( CREATE TABLE `kontakttyp` (
`id` int(3) NOT NULL AUTO_INCREMENT, `id` int(3) NOT NULL AUTO_INCREMENT,
`typ` varchar(20) NOT NULL, `typ` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `konto` ( CREATE TABLE `konto` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`bank_id` int(5) NOT NULL, `bank_id` int(5) NOT NULL DEFAULT 0,
`partner_id` int(11) NOT NULL, `partner_id` int(11) NOT NULL DEFAULT 0,
`inhaber` varchar(50) NOT NULL, `inhaber` varchar(50) NOT NULL DEFAULT '',
`iban` varchar(30) NOT NULL, `iban` varchar(30) NOT NULL DEFAULT '',
`swift` varchar(15) NOT NULL, `swift` varchar(15) NOT NULL DEFAULT '',
`ktonr` varchar(20) NOT NULL, `ktonr` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_kto_partner_id` (`partner_id`), KEY `fk_kto_partner_id` (`partner_id`),
KEY `fk_kto_bank_id` (`bank_id`), KEY `fk_kto_bank_id` (`bank_id`),
@@ -248,18 +253,18 @@ CREATE TABLE `konto` (
CREATE TABLE `land` ( CREATE TABLE `land` (
`id` int(5) NOT NULL AUTO_INCREMENT, `id` int(5) NOT NULL AUTO_INCREMENT,
`land_short` varchar(5) NOT NULL, `land_short` varchar(5) NOT NULL DEFAULT '',
`land` varchar(30) NOT NULL, `land` varchar(30) NOT NULL DEFAULT '',
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `log` ( CREATE TABLE `log` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`typ_id` tinyint(3) NOT NULL, `typ_id` tinyint(3) NOT NULL DEFAULT 0,
`user_id` int(11) NOT NULL, `user_id` int(11) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`qry` text NOT NULL, `qry` text NOT NULL DEFAULT '',
`undo_qry` text DEFAULT NULL, `undo_qry` text DEFAULT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_log_accesstype_id` (`typ_id`), KEY `fk_log_accesstype_id` (`typ_id`),
@@ -270,12 +275,12 @@ CREATE TABLE `log` (
CREATE TABLE `message` ( CREATE TABLE `message` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`send_id` int(11) NOT NULL, `send_id` int(11) NOT NULL DEFAULT 0,
`rec_id` int(11) NOT NULL, `rec_id` int(11) NOT NULL DEFAULT 0,
`head` varchar(50) DEFAULT NULL, `head` varchar(50) DEFAULT NULL,
`msg` text NOT NULL, `msg` text NOT NULL DEFAULT '',
`rd` tinyint(1) NOT NULL, `rd` tinyint(1) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_msg_senduser_id` (`send_id`), KEY `fk_msg_senduser_id` (`send_id`),
KEY `fk_msg_recuser_id` (`rec_id`), KEY `fk_msg_recuser_id` (`rec_id`),
@@ -285,17 +290,17 @@ CREATE TABLE `message` (
CREATE TABLE `mwst` ( CREATE TABLE `mwst` (
`id` int(3) NOT NULL AUTO_INCREMENT, `id` int(3) NOT NULL AUTO_INCREMENT,
`mwst` decimal(4,1) NOT NULL, `mwst` decimal(4,1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `mykonto` ( CREATE TABLE `mykonto` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`bank_id` int(5) NOT NULL, `bank_id` int(5) NOT NULL DEFAULT 0,
`inhaber` varchar(50) NOT NULL, `inhaber` varchar(50) NOT NULL DEFAULT '',
`iban` varchar(30) NOT NULL, `iban` varchar(30) NOT NULL DEFAULT '',
`swift` varchar(15) NOT NULL, `swift` varchar(15) NOT NULL DEFAULT '',
`ktonr` varchar(20) NOT NULL, `ktonr` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_mykto_bank_id` (`bank_id`), KEY `fk_mykto_bank_id` (`bank_id`),
CONSTRAINT `fk_mykto_bank_id` FOREIGN KEY (`bank_id`) REFERENCES `bank` (`id`) ON UPDATE CASCADE CONSTRAINT `fk_mykto_bank_id` FOREIGN KEY (`bank_id`) REFERENCES `bank` (`id`) ON UPDATE CASCADE
@@ -303,10 +308,10 @@ CREATE TABLE `mykonto` (
CREATE TABLE `notiz` ( CREATE TABLE `notiz` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`partner_id` int(11) NOT NULL, `partner_id` int(11) NOT NULL DEFAULT 0,
`notiz` text NOT NULL, `notiz` text NOT NULL DEFAULT '',
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`color` varchar(6) NOT NULL, `color` varchar(6) NOT NULL DEFAULT '',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_notizen_partner_id` (`partner_id`), KEY `fk_notizen_partner_id` (`partner_id`),
CONSTRAINT `fk_notizen_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE CONSTRAINT `fk_notizen_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE
@@ -314,11 +319,11 @@ CREATE TABLE `notiz` (
CREATE TABLE `ort` ( CREATE TABLE `ort` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`ort` varchar(30) NOT NULL, `ort` varchar(30) NOT NULL DEFAULT '',
`ortsteil` varchar(30) NOT NULL, `ortsteil` varchar(30) NOT NULL DEFAULT '',
`plz` varchar(15) NOT NULL, `plz` varchar(15) NOT NULL DEFAULT '',
`vwahl` varchar(15) NOT NULL, `vwahl` varchar(15) NOT NULL DEFAULT '',
`land_id` int(5) NOT NULL, `land_id` int(5) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_ort_land_id` (`land_id`), KEY `fk_ort_land_id` (`land_id`),
CONSTRAINT `fk_ort_land_id` FOREIGN KEY (`land_id`) REFERENCES `land` (`id`) ON UPDATE CASCADE CONSTRAINT `fk_ort_land_id` FOREIGN KEY (`land_id`) REFERENCES `land` (`id`) ON UPDATE CASCADE
@@ -326,15 +331,15 @@ CREATE TABLE `ort` (
CREATE TABLE `partner` ( CREATE TABLE `partner` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`datetime_new` datetime NOT NULL, `datetime_new` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`datetime_lastchange` datetime NOT NULL, `datetime_lastchange` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`user_id` int(11) NOT NULL, `user_id` int(11) NOT NULL DEFAULT 0,
`typ_id` int(2) NOT NULL, `typ_id` int(2) NOT NULL DEFAULT 0,
`zahlziel_id` int(3) NOT NULL, `zahlziel_id` int(3) NOT NULL DEFAULT 0,
`rabatt` int(3) NOT NULL, `rabatt` int(3) NOT NULL DEFAULT 0,
`sks_not_checked` int(1) NOT NULL, `sks_not_checked` int(1) NOT NULL DEFAULT 0,
`sks_kdnotiz` text NOT NULL, `sks_kdnotiz` text NOT NULL DEFAULT '',
`updated_by` int(11) NOT NULL, `updated_by` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_partner_typ_id` (`typ_id`), KEY `fk_partner_typ_id` (`typ_id`),
KEY `fk_partner_zahlziel_id` (`zahlziel_id`), KEY `fk_partner_zahlziel_id` (`zahlziel_id`),
@@ -346,71 +351,71 @@ CREATE TABLE `partner` (
CREATE TABLE `partnertyp` ( CREATE TABLE `partnertyp` (
`id` int(2) NOT NULL AUTO_INCREMENT, `id` int(2) NOT NULL AUTO_INCREMENT,
`typ` varchar(15) NOT NULL, `typ` varchar(15) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `passkeys` ( CREATE TABLE `passkeys` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`lastAuth` datetime NOT NULL, `lastAuth` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`name` varchar(40) NOT NULL, `name` varchar(40) NOT NULL DEFAULT '',
`userId` int(11) NOT NULL, `userId` int(11) NOT NULL DEFAULT 0,
`credentialId` varchar(1023) NOT NULL, `credentialId` varchar(1023) NOT NULL DEFAULT '',
`credentialPublicKey` text NOT NULL, `credentialPublicKey` text NOT NULL DEFAULT '',
`signatureCounter` text NOT NULL, `signatureCounter` text NOT NULL DEFAULT '',
`authKey` int(11) NOT NULL, `authKey` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `project` ( CREATE TABLE `project` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(150) NOT NULL, `name` varchar(150) NOT NULL DEFAULT '',
`name2` varchar(150) NOT NULL, `name2` varchar(150) NOT NULL DEFAULT '',
`partner_id` int(11) NOT NULL, `partner_id` int(11) NOT NULL DEFAULT 0,
`changetime` datetime NOT NULL, `changetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`changeuser` int(11) NOT NULL, `changeuser` int(11) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`intro` text NOT NULL, `intro` text NOT NULL DEFAULT '',
`outro` text NOT NULL, `outro` text NOT NULL DEFAULT '',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fek_proj_partner_id` (`partner_id`), KEY `fek_proj_partner_id` (`partner_id`),
CONSTRAINT `fek_proj_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE CONSTRAINT `fek_proj_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `rechnr` ( CREATE TABLE `rechnr` (
`rechnr` int(11) NOT NULL, `rechnr` int(11) NOT NULL DEFAULT 0,
`typ_id` int(5) NOT NULL, `typ_id` int(5) NOT NULL DEFAULT 0,
PRIMARY KEY (`rechnr`,`typ_id`) PRIMARY KEY (`rechnr`,`typ_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `rechnung` ( CREATE TABLE `rechnung` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`adressfields` varchar(12) NOT NULL, `adressfields` varchar(12) NOT NULL DEFAULT '',
`anrede1` varchar(150) NOT NULL, `anrede1` varchar(150) NOT NULL DEFAULT '',
`anrede2` varchar(150) NOT NULL, `anrede2` varchar(150) NOT NULL DEFAULT '',
`partner_id` int(11) NOT NULL, `partner_id` int(11) NOT NULL DEFAULT 0,
`mwst_id` int(3) NOT NULL, `mwst_id` int(3) NOT NULL DEFAULT 0,
`user_id` int(11) NOT NULL, `user_id` int(11) NOT NULL DEFAULT 0,
`typ_id` int(2) NOT NULL, `typ_id` int(2) NOT NULL DEFAULT 0,
`zahlziel_id` int(3) NOT NULL, `zahlziel_id` int(3) NOT NULL DEFAULT 0,
`adresse_id` int(11) NOT NULL, `adresse_id` int(11) NOT NULL DEFAULT 0,
`wahrung_id` tinyint(3) NOT NULL, `wahrung_id` tinyint(3) NOT NULL DEFAULT 0,
`changetime` datetime NOT NULL, `changetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`changeuser` int(11) NOT NULL, `changeuser` int(11) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`rechnr` int(11) NOT NULL, `rechnr` int(11) NOT NULL DEFAULT 0,
`rabatt` int(3) NOT NULL, `rabatt` int(3) NOT NULL DEFAULT 0,
`rabattdesc` varchar(100) NOT NULL, `rabattdesc` varchar(100) NOT NULL DEFAULT '',
`intro` text NOT NULL, `intro` text NOT NULL DEFAULT '',
`outro` text NOT NULL, `outro` text NOT NULL DEFAULT '',
`sks` tinyint(1) NOT NULL, `sks` tinyint(1) NOT NULL DEFAULT 0,
`sub_mwst` int(1) NOT NULL, `sub_mwst` int(1) NOT NULL DEFAULT 0,
`kommission` int(11) NOT NULL, `kommission` int(11) NOT NULL DEFAULT 0,
`lieferdatum` varchar(100) NOT NULL, `lieferdatum` varchar(100) NOT NULL DEFAULT '',
`adresserweiterung` varchar(100) NOT NULL, `adresserweiterung` varchar(100) NOT NULL DEFAULT '',
`storno` int(1) NOT NULL DEFAULT 0, `storno` int(1) NOT NULL DEFAULT 0,
`stornodate` datetime NOT NULL, `stornodate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`buchungsKto_id` int(11) NOT NULL, `buchungsKto_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fek_rech_partner_id` (`partner_id`), KEY `fek_rech_partner_id` (`partner_id`),
KEY `fek_rech_adresse_id` (`adresse_id`), KEY `fek_rech_adresse_id` (`adresse_id`),
@@ -433,15 +438,15 @@ CREATE TABLE `rechnung` (
CREATE TABLE `rechtyp` ( CREATE TABLE `rechtyp` (
`id` int(3) NOT NULL AUTO_INCREMENT, `id` int(3) NOT NULL AUTO_INCREMENT,
`typ` varchar(20) NOT NULL, `typ` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `setting` ( CREATE TABLE `setting` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL, `user_id` int(11) NOT NULL DEFAULT 0,
`opt` varchar(10) NOT NULL, `opt` varchar(10) NOT NULL DEFAULT '',
`val` text NOT NULL, `val` text NOT NULL DEFAULT '',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_settings_user_id` (`user_id`), KEY `fk_settings_user_id` (`user_id`),
CONSTRAINT `fk_settings_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE CONSTRAINT `fk_settings_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
@@ -449,8 +454,8 @@ CREATE TABLE `setting` (
CREATE TABLE `strasse` ( CREATE TABLE `strasse` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`str` varchar(50) NOT NULL, `str` varchar(50) NOT NULL DEFAULT '',
`ort_id` int(11) NOT NULL, `ort_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_str_ort_id` (`ort_id`), KEY `fk_str_ort_id` (`ort_id`),
CONSTRAINT `fk_str_ort_id` FOREIGN KEY (`ort_id`) REFERENCES `ort` (`id`) ON UPDATE CASCADE CONSTRAINT `fk_str_ort_id` FOREIGN KEY (`ort_id`) REFERENCES `ort` (`id`) ON UPDATE CASCADE
@@ -458,12 +463,12 @@ CREATE TABLE `strasse` (
CREATE TABLE `tel` ( CREATE TABLE `tel` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`ort_id` int(11) NOT NULL, `ort_id` int(11) NOT NULL DEFAULT 0,
`partner_id` int(11) NOT NULL, `partner_id` int(11) NOT NULL DEFAULT 0,
`typ_id` int(3) NOT NULL, `typ_id` int(3) NOT NULL DEFAULT 0,
`nr` varchar(20) NOT NULL, `nr` varchar(20) NOT NULL DEFAULT '',
`name` varchar(30) NOT NULL, `name` varchar(30) NOT NULL DEFAULT '',
`adresse_id` int(11) NOT NULL, `adresse_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_tel_ort_id` (`ort_id`), KEY `fk_tel_ort_id` (`ort_id`),
KEY `fk_tel_typ_id` (`typ_id`), KEY `fk_tel_typ_id` (`typ_id`),
@@ -475,29 +480,29 @@ CREATE TABLE `tel` (
CREATE TABLE `teltyp` ( CREATE TABLE `teltyp` (
`id` int(3) NOT NULL AUTO_INCREMENT, `id` int(3) NOT NULL AUTO_INCREMENT,
`typ` varchar(20) NOT NULL, `typ` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `termin` ( CREATE TABLE `termin` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`typ` int(2) NOT NULL, `typ` int(2) NOT NULL DEFAULT 0,
`adresse_id` int(11) NOT NULL, `adresse_id` int(11) NOT NULL DEFAULT 0,
`text` text NOT NULL, `text` text NOT NULL DEFAULT '',
`changetime` datetime NOT NULL, `changetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`done` tinyint(1) NOT NULL, `done` tinyint(1) NOT NULL DEFAULT 0,
`user` int(11) NOT NULL, `user` int(11) NOT NULL DEFAULT 0,
`changeuser` int(11) NOT NULL, `changeuser` int(11) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`termtime` datetime NOT NULL, `termtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`termdauer` time NOT NULL, `termdauer` time NOT NULL DEFAULT '00:00:00',
`followed_by` int(11) NOT NULL, `followed_by` int(11) NOT NULL DEFAULT 0,
`act_date` datetime NOT NULL, `act_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`head` varchar(100) NOT NULL, `head` varchar(100) NOT NULL DEFAULT '',
`main_id` int(11) NOT NULL, `main_id` int(11) NOT NULL DEFAULT 0,
`user2` int(11) NOT NULL, `user2` int(11) NOT NULL DEFAULT 0,
`user3` int(11) NOT NULL, `user3` int(11) NOT NULL DEFAULT 0,
`user4` int(11) NOT NULL, `user4` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_termin_typ_termtyp_id` (`typ`), KEY `fk_termin_typ_termtyp_id` (`typ`),
CONSTRAINT `fk_termin_typ_termtyp_id` FOREIGN KEY (`typ`) REFERENCES `termtyp` (`id`) ON UPDATE CASCADE CONSTRAINT `fk_termin_typ_termtyp_id` FOREIGN KEY (`typ`) REFERENCES `termtyp` (`id`) ON UPDATE CASCADE
@@ -505,33 +510,33 @@ CREATE TABLE `termin` (
CREATE TABLE `termtyp` ( CREATE TABLE `termtyp` (
`id` int(2) NOT NULL AUTO_INCREMENT, `id` int(2) NOT NULL AUTO_INCREMENT,
`typ` varchar(20) NOT NULL, `typ` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `titel` ( CREATE TABLE `titel` (
`id` int(5) NOT NULL AUTO_INCREMENT, `id` int(5) NOT NULL AUTO_INCREMENT,
`titel` varchar(50) NOT NULL, `titel` varchar(50) NOT NULL DEFAULT '',
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `tmp_artikel` ( CREATE TABLE `tmp_artikel` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`bezeichn` varchar(150) NOT NULL, `bezeichn` varchar(150) NOT NULL DEFAULT '',
`typ_id` int(5) NOT NULL, `typ_id` int(5) NOT NULL DEFAULT 0,
`einheit_id` int(11) NOT NULL, `einheit_id` int(11) NOT NULL DEFAULT 0,
`preis` decimal(10,2) DEFAULT NULL, `preis` decimal(10,2) DEFAULT NULL,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`posnr` int(5) NOT NULL, `posnr` int(5) NOT NULL DEFAULT 0,
`rabatt` int(3) NOT NULL, `rabatt` int(3) NOT NULL DEFAULT 0,
`rabatttyp` int(2) NOT NULL, `rabatttyp` int(2) NOT NULL DEFAULT 0,
`menge` decimal(6,3) NOT NULL, `menge` decimal(6,3) NOT NULL DEFAULT 0,
`angtyp` int(1) NOT NULL, `angtyp` int(1) NOT NULL DEFAULT 0,
`mwst_id` int(3) NOT NULL, `mwst_id` int(3) NOT NULL DEFAULT 0,
`rech_id` int(11) NOT NULL, `rech_id` int(11) NOT NULL DEFAULT 0,
`wanr` varchar(100) NOT NULL, `wanr` varchar(100) NOT NULL DEFAULT '',
`pagebreak` int(1) NOT NULL, `pagebreak` int(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_tmp_artikel_typ_id` (`typ_id`), KEY `fk_tmp_artikel_typ_id` (`typ_id`),
KEY `fk_tmp_art_mwst_id` (`mwst_id`), KEY `fk_tmp_art_mwst_id` (`mwst_id`),
@@ -545,12 +550,12 @@ CREATE TABLE `tmp_artikel` (
CREATE TABLE `tmp_eigensch` ( CREATE TABLE `tmp_eigensch` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`bezeichn` varchar(100) NOT NULL, `bezeichn` varchar(100) NOT NULL DEFAULT '',
`wert` varchar(50) NOT NULL, `wert` varchar(50) NOT NULL DEFAULT '',
`einheit_id` int(11) NOT NULL, `einheit_id` int(11) NOT NULL DEFAULT 0,
`art_id` int(11) NOT NULL, `art_id` int(11) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`posnr` int(5) NOT NULL, `posnr` int(5) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_tmp_eigensch_art_id` (`art_id`), KEY `fk_tmp_eigensch_art_id` (`art_id`),
KEY `fk_tmp_eigensch_einheit_id` (`einheit_id`), KEY `fk_tmp_eigensch_einheit_id` (`einheit_id`),
@@ -560,28 +565,28 @@ CREATE TABLE `tmp_eigensch` (
CREATE TABLE `tmp_rechnung` ( CREATE TABLE `tmp_rechnung` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`adressfields` varchar(12) NOT NULL, `adressfields` varchar(12) NOT NULL DEFAULT '',
`partner_id` int(11) NOT NULL, `partner_id` int(11) NOT NULL DEFAULT 0,
`anrede1` varchar(150) NOT NULL, `anrede1` varchar(150) NOT NULL DEFAULT '',
`anrede2` varchar(150) NOT NULL, `anrede2` varchar(150) NOT NULL DEFAULT '',
`mwst_id` int(3) NOT NULL, `mwst_id` int(3) NOT NULL DEFAULT 0,
`user_id` int(11) NOT NULL, `user_id` int(11) NOT NULL DEFAULT 0,
`rechnr` int(11) NOT NULL, `rechnr` int(11) NOT NULL DEFAULT 0,
`typ_id` int(2) NOT NULL, `typ_id` int(2) NOT NULL DEFAULT 0,
`zahlziel_id` int(3) NOT NULL, `zahlziel_id` int(3) NOT NULL DEFAULT 0,
`adresse_id` int(11) NOT NULL, `adresse_id` int(11) NOT NULL DEFAULT 0,
`wahrung_id` tinyint(3) NOT NULL, `wahrung_id` tinyint(3) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`rabatt` int(3) NOT NULL, `rabatt` int(3) NOT NULL DEFAULT 0,
`rabattdesc` varchar(100) NOT NULL, `rabattdesc` varchar(100) NOT NULL DEFAULT '',
`intro` text NOT NULL, `intro` text NOT NULL DEFAULT '',
`outro` text NOT NULL, `outro` text NOT NULL DEFAULT '',
`sub_mwst` int(1) NOT NULL, `sub_mwst` int(1) NOT NULL DEFAULT 0,
`kommission` int(11) NOT NULL, `kommission` int(11) NOT NULL DEFAULT 0,
`lieferdatum` varchar(100) NOT NULL, `lieferdatum` varchar(100) NOT NULL DEFAULT '',
`adresserweiterung` varchar(100) NOT NULL, `adresserweiterung` varchar(100) NOT NULL DEFAULT '',
`storno` int(1) NOT NULL DEFAULT 0, `storno` int(1) NOT NULL DEFAULT 0,
`buchungsKto_id` int(11) NOT NULL, `buchungsKto_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_tmp_rech_partner_id` (`partner_id`), KEY `fk_tmp_rech_partner_id` (`partner_id`),
KEY `fk_tmp_rech_adresse_id` (`adresse_id`), KEY `fk_tmp_rech_adresse_id` (`adresse_id`),
@@ -603,49 +608,49 @@ CREATE TABLE `tmp_rechnung` (
CREATE TABLE `user` ( CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`vname` varchar(50) NOT NULL, `vname` varchar(50) NOT NULL DEFAULT '',
`nname` varchar(50) NOT NULL, `nname` varchar(50) NOT NULL DEFAULT '',
`nick` varchar(50) NOT NULL, `nick` varchar(50) NOT NULL DEFAULT '',
`pass` varchar(150) NOT NULL, `pass` varchar(150) NOT NULL DEFAULT '',
`mail` varchar(50) NOT NULL, `mail` varchar(50) NOT NULL DEFAULT '',
`salt` varchar(50) NOT NULL, `salt` varchar(50) NOT NULL DEFAULT '',
`tel_priv` varchar(30) NOT NULL, `tel_priv` varchar(30) NOT NULL DEFAULT '',
`tel_gesch` varchar(30) NOT NULL, `tel_gesch` varchar(30) NOT NULL DEFAULT '',
`tel_mobil` varchar(30) NOT NULL, `tel_mobil` varchar(30) NOT NULL DEFAULT '',
`lastlogin` datetime NOT NULL, `lastlogin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`numlogins` int(11) NOT NULL, `numlogins` int(11) NOT NULL DEFAULT 0,
`logedout` tinyint(2) NOT NULL, `logedout` tinyint(2) NOT NULL DEFAULT 0,
`wrongpw` tinyint(3) NOT NULL, `wrongpw` tinyint(3) NOT NULL DEFAULT 0,
`notizen` text NOT NULL, `notizen` text NOT NULL DEFAULT '',
`blocked` tinyint(1) NOT NULL, `blocked` tinyint(1) NOT NULL DEFAULT 0,
`rights` varchar(6) NOT NULL, `rights` varchar(6) NOT NULL DEFAULT '',
`weekly_hours` int(11) NOT NULL, `weekly_hours` int(11) NOT NULL DEFAULT 0,
`rfid` varchar(10) NOT NULL, `rfid` varchar(10) NOT NULL DEFAULT '',
`color` varchar(8) NOT NULL, `color` varchar(8) NOT NULL DEFAULT '',
`weekhours` decimal(6,3) NOT NULL, `weekhours` decimal(6,3) NOT NULL DEFAULT 0,
`vacationdays` int(4) NOT NULL, `vacationdays` int(4) NOT NULL DEFAULT 0,
`sahours` decimal(3,1) NOT NULL, `sahours` decimal(3,1) NOT NULL DEFAULT 0,
`timelog_start` date NOT NULL, `timelog_start` date NOT NULL DEFAULT '0000-00-00',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `nick` (`nick`) UNIQUE KEY `nick` (`nick`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `wahrung` ( CREATE TABLE `wahrung` (
`id` tinyint(3) NOT NULL AUTO_INCREMENT, `id` tinyint(3) NOT NULL AUTO_INCREMENT,
`wahrung` varchar(20) NOT NULL, `wahrung` varchar(20) NOT NULL DEFAULT '',
`kurs` decimal(8,4) DEFAULT NULL, `kurs` decimal(8,4) DEFAULT NULL,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `work` ( CREATE TABLE `work` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`bezeichn` varchar(150) NOT NULL, `bezeichn` varchar(150) NOT NULL DEFAULT '',
`bezeichn2` varchar(150) NOT NULL, `bezeichn2` varchar(150) NOT NULL DEFAULT '',
`project_id` int(11) NOT NULL, `project_id` int(11) NOT NULL DEFAULT 0,
`changetime` datetime NOT NULL, `changetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`changeuser` int(11) NOT NULL, `changeuser` int(11) NOT NULL DEFAULT 0,
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`std` decimal(6,3) NOT NULL, `std` decimal(6,3) NOT NULL DEFAULT 0,
`rechn` int(11) NOT NULL DEFAULT 0, `rechn` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fek_work_partner_id` (`project_id`), KEY `fek_work_partner_id` (`project_id`),
@@ -654,16 +659,16 @@ CREATE TABLE `work` (
CREATE TABLE `zahlziel` ( CREATE TABLE `zahlziel` (
`id` int(3) NOT NULL AUTO_INCREMENT, `id` int(3) NOT NULL AUTO_INCREMENT,
`ziel` varchar(150) NOT NULL, `ziel` varchar(150) NOT NULL DEFAULT '',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `zeiten` ( CREATE TABLE `zeiten` (
`id` int(11) NOT NULL AUTO_INCREMENT, `id` int(11) NOT NULL AUTO_INCREMENT,
`ma_id` int(11) NOT NULL, `ma_id` int(11) NOT NULL DEFAULT 0,
`kommen` datetime NOT NULL, `kommen` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`gehen` datetime NOT NULL, `gehen` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`pause_mins` int(11) NOT NULL, `pause_mins` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `fk_zeiten_user_id` (`ma_id`), KEY `fk_zeiten_user_id` (`ma_id`),
CONSTRAINT `fk_zeiten_user_id` FOREIGN KEY (`ma_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE CONSTRAINT `fk_zeiten_user_id` FOREIGN KEY (`ma_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE