Compare commits
19
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b7704ff03 | ||
|
|
2779f505df | ||
|
|
490c4f12a4 | ||
|
|
3dfbf1c9c7 | ||
|
|
3f7d070d7f | ||
|
|
8fe43d6802 | ||
|
|
b76d883fbe | ||
|
|
d8fff4aeb6 | ||
|
|
a130ed56a3 | ||
|
|
c59e7fb393 | ||
|
|
f24a7a88dd | ||
|
|
6306bfba17 | ||
|
|
7dd6580bcc | ||
|
|
e2596b6e1c | ||
|
|
a6758ae63b | ||
|
|
a66ace58c4 | ||
|
|
0d0059f033 | ||
|
|
ec6222c4eb | ||
|
|
210a6c47a8 |
@@ -11,6 +11,8 @@
|
|||||||
# --- Datenbank-Dumps / Backups ---------------------------------
|
# --- Datenbank-Dumps / Backups ---------------------------------
|
||||||
*.sql
|
*.sql
|
||||||
*.sql.gz
|
*.sql.gz
|
||||||
|
# Ausnahme: das Schema selbst enthaelt keine Daten
|
||||||
|
!update/schema.sql
|
||||||
*.dump
|
*.dump
|
||||||
*.bak
|
*.bak
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -84,14 +88,39 @@ Eine Schemaänderung besteht also aus: neuer Eintrag **vorn** in `update/version
|
|||||||
|
|
||||||
## Datenbankzugriff
|
## Datenbankzugriff
|
||||||
|
|
||||||
|
**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.
|
||||||
@@ -102,8 +131,13 @@ SQL wird durchgehend per String-Verkettung gebaut. Escaping ist Handarbeit über
|
|||||||
|
|
||||||
Klassischer Login plus WebAuthn/FIDO2. Server-Seite: `authServer.php` mit `incs/WebAuthn` (Bibliothek von Lukas Buchs) und `incs/authHelper.php`; Client-Seite `js/auth.js`. Schlüsselverwaltung über `addKey.php` und `sites/userkeys.php`.
|
Klassischer Login plus WebAuthn/FIDO2. Server-Seite: `authServer.php` mit `incs/WebAuthn` (Bibliothek von Lukas Buchs) und `incs/authHelper.php`; Client-Seite `js/auth.js`. Schlüsselverwaltung über `addKey.php` und `sites/userkeys.php`.
|
||||||
|
|
||||||
|
- **Passwort-Login nur aus dem lokalen Netz**, von außen nur per Passkey. „Lokal“ entscheidet `isLocal()` in `incs/authHelper.php` anhand von `$lokale_netze` (CIDR-Liste) aus der externen Config. Anfragen mit Proxy-Headern (`X-Forwarded-For`, `Forwarded` …) gelten nie als lokal. Webserver und MariaDB laufen in Docker auf dem NAS: **Das Docker-Netz gehört nicht in die Liste**, sonst gilt jede über den Docker- oder Reverse-Proxy eingehende Anfrage als lokal.
|
||||||
|
- **Passkeys anlegen** geht nur über eine Einmal-Freigabe: Ein Superadmin erzeugt in `addKey.php` einen `addKey`, `sites/userkeys.php` löst ihn ein und legt `$_SESSION["passkey_freigabe"]` (Benutzer-id, 5 Minuten) ab. `authServer.php` akzeptiert `getCreateArgs`/`processCreate` nur mit dieser Freigabe und nimmt die Benutzer-id von dort, nie aus der URL.
|
||||||
|
|
||||||
## Historie
|
## Historie
|
||||||
|
|
||||||
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.
|
||||||
|
|||||||
+8
-13
@@ -11,22 +11,17 @@ if($settings != "valid")
|
|||||||
|
|
||||||
if($settings == "valid")
|
if($settings == "valid")
|
||||||
{
|
{
|
||||||
if(!$dbconn = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw))
|
if(!$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db))
|
||||||
$err = error("Verbindung zur Datenbank fehlgeschlagen!!");
|
$err = error("Verbindung zur Datenbank fehlgeschlagen: ".htmlspecialchars(mysqli_connect_error()));
|
||||||
if(!@mysqli_select_db($dbconn,$mysql_db))
|
|
||||||
$err = error("Datenbank nicht gefunden!! ($mysql_db)");
|
|
||||||
}
|
}
|
||||||
if($_SESSION["login"] == "valid" && isset($_GET["id"])){
|
// Wie sites/userkeys.php: nur Superadmins dürfen Passkeys vergeben
|
||||||
if(!mysqli_query($dbconn,"DELETE FROM addKey WHERE datetime < DATE_SUB(NOW(), INTERVAL 1 MINUTE);")){
|
if($_SESSION["login"] == "valid" && isset($_GET["id"]) && ((int)substr($_SESSION["rights"], RIGHTS_SUPERADMIN, 1) & RIGHTS_CHANGE)){
|
||||||
echo mysqli_error($dbconn);
|
db_abfrage($dbconn, "DELETE FROM addKey WHERE datetime < DATE_SUB(NOW(), INTERVAL 1 MINUTE)") or print(mysqli_error($dbconn));
|
||||||
}
|
|
||||||
if(isLocal()){
|
if(isLocal()){
|
||||||
$accessKey = strval(random_int(0,99999999));
|
$accessKey = strval(random_int(0,99999999));
|
||||||
if(!mysqli_query($dbconn,"INSERT INTO addKey SET accesskey=".$accessKey.", datetime=NOW();")){
|
db_abfrage($dbconn, "INSERT INTO addKey SET accesskey = ?, datetime = NOW()", array($accessKey)) or print(mysqli_error($dbconn));
|
||||||
echo mysqli_error($dbconn);
|
header('Location: https://wm.el-wa.org/kunden?action=userkeys&id='.(int)$_GET["id"].'&addKey='.$accessKey);
|
||||||
}
|
echo 'https://wm.el-wa.org/kunden?action=userkeys&id='.(int)$_GET["id"].'&addKey='.$accessKey;
|
||||||
header('Location: https://wm.el-wa.org/kunden?action=userkeys&id='.$_GET["id"].'&addKey='.$accessKey);
|
|
||||||
echo 'https://wm.el-wa.org/kunden?action=userkeys&id='.$_GET["id"].'&addKey='.$accessKey;
|
|
||||||
}else{
|
}else{
|
||||||
echo "Keine Berechtigung.";
|
echo "Keine Berechtigung.";
|
||||||
}
|
}
|
||||||
|
|||||||
+40
-44
@@ -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
|
|
||||||
WHERE artikel.bezeichn LIKE '".$_GET["term"]."%' AND dropdown = 1 AND YEAR(artikel.datetime) >= YEAR(NOW())-1 GROUP BY artikel.bezeichn") or die(mysqli_error($dbconn));
|
|
||||||
if($tmpres=mysqli_fetch_array($qry))
|
|
||||||
{
|
|
||||||
$innerqry = mysqli_query($dbconn,"SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id, artikel_rechn.preis, artikel_rechn.rech_id, artikel_rechn.posnr FROM artikel
|
|
||||||
JOIN artikeltyp ON typ_id = artikeltyp.id
|
|
||||||
JOIN artikel_rechn ON artikel.id = art_id
|
|
||||||
WHERE artikel.id = ".$tmpres["id"]." ORDER BY artikel_rechn.art_id DESC LIMIT 1") or die(mysqli_error($dbconn));
|
|
||||||
$res = mysqli_fetch_array($innerqry);
|
|
||||||
echo "[ ";
|
|
||||||
echo '{"value": "'.$res[0].'","typ": "'.$res[1].'","einh": "'.$res[2].'","preis": "'.number_format($res[4],2,",","").'","eig":[';
|
|
||||||
$qry2 = mysqli_query($dbconn,"SELECT bezeichn, wert, einheit_id FROM eigensch
|
|
||||||
JOIN artikel_eigensch ON eig_id = eigensch.id
|
|
||||||
WHERE art_id='".$res[3]."' AND rech_id='".$res[5]."' AND artposnr = '".$res[6]."' ORDER BY posnr ASC");
|
|
||||||
if($res2 = mysqli_fetch_array($qry2))
|
|
||||||
echo '{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}';
|
|
||||||
while($res2=mysqli_fetch_array($qry2))
|
|
||||||
echo ',{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}';
|
|
||||||
echo ']}';
|
|
||||||
while($tmpres=mysqli_fetch_array($qry))
|
|
||||||
{
|
|
||||||
$innerqry = mysqli_query($dbconn,"SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id, artikel_rechn.preis, artikel_rechn.rech_id, artikel_rechn.posnr FROM artikel
|
|
||||||
JOIN artikeltyp ON typ_id = artikeltyp.id
|
JOIN artikeltyp ON typ_id = artikeltyp.id
|
||||||
JOIN artikel_rechn ON artikel.id = art_id
|
WHERE artikel.bezeichn LIKE ? AND dropdown = 1
|
||||||
WHERE artikel.id = ".$tmpres["id"]." ORDER BY artikel_rechn.art_id DESC LIMIT 1") or die(mysqli_error($dbconn));
|
AND YEAR(artikel.datetime) >= YEAR(NOW())-1
|
||||||
$res = mysqli_fetch_array($innerqry);
|
GROUP BY artikel.bezeichn LIMIT 25",
|
||||||
echo ',{"value": "'.$res[0].'","typ": "'.$res[1].'","einh": "'.$res[2].'","preis": "'.number_format($res[4],2,",","").'","eig":[';
|
array(db_like_praefix(autoBegriff())));
|
||||||
$qry2 = mysqli_query($dbconn,"SELECT bezeichn, wert, einheit_id FROM eigensch
|
|
||||||
JOIN artikel_eigensch ON eig_id = eigensch.id
|
$liste = array();
|
||||||
WHERE art_id='".$res[0]."' AND rech_id='".$res[5]."' AND artposnr = '".$res[6]."' ORDER BY posnr ASC");
|
foreach((array)$treffer as $t)
|
||||||
if($res2 = mysqli_fetch_array($qry2))
|
{
|
||||||
echo '{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}';
|
$art = db_zeile($dbconn, "SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id,
|
||||||
while($res2=mysqli_fetch_array($qry2))
|
artikel_rechn.preis, artikel_rechn.rech_id, artikel_rechn.posnr
|
||||||
echo ',{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}';
|
FROM artikel
|
||||||
echo ']}';
|
JOIN artikeltyp ON artikel.typ_id = artikeltyp.id
|
||||||
}
|
JOIN artikel_rechn ON artikel.id = art_id
|
||||||
echo "]";
|
WHERE artikel.id = ? ORDER BY artikel_rechn.art_id DESC LIMIT 1",
|
||||||
}
|
array($t["id"]));
|
||||||
|
if(!$art)
|
||||||
|
continue;
|
||||||
|
$eigensch = db_zeilen($dbconn, "SELECT bezeichn AS des, wert AS val, einheit_id AS einh
|
||||||
|
FROM eigensch
|
||||||
|
JOIN artikel_eigensch ON eig_id = eigensch.id
|
||||||
|
WHERE art_id = ? AND rech_id = ? AND artposnr = ? ORDER BY posnr ASC",
|
||||||
|
array($art["id"], $art["rech_id"], $art["posnr"]));
|
||||||
|
$liste[] = array(
|
||||||
|
"value" => $art["bezeichn"],
|
||||||
|
"typ" => $art["typ_id"],
|
||||||
|
"einh" => $art["einheit_id"],
|
||||||
|
"preis" => number_format((float)$art["preis"], 2, ",", ""),
|
||||||
|
"eig" => $eigensch ? $eigensch : array(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
header("Content-Type: application/json; charset=utf-8");
|
||||||
|
echo json_encode($liste, JSON_UNESCAPED_UNICODE);
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Gemeinsames für die Autovervollständigung der Formulare.
|
||||||
|
*
|
||||||
|
* Die Endpunkte liefern eine JSON-Liste, die jQuery UI direkt als
|
||||||
|
* Vorschlagsliste verwendet: "value" ist der Vorschlag selbst, die übrigen
|
||||||
|
* Schlüssel füllen weitere Felder desselben Formulars (siehe die
|
||||||
|
* focus-Handler in den Templates).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Suchbegriff aus der Anfrage, "" wenn keiner da ist */
|
||||||
|
function autoBegriff()
|
||||||
|
{
|
||||||
|
return isset($_GET["term"]) && is_string($_GET["term"]) ? trim($_GET["term"]) : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Führt die Abfrage aus und gibt das Ergebnis als JSON aus. Die Spalten
|
||||||
|
* heißen bereits so, wie das Formular sie erwartet. json_encode() kümmert
|
||||||
|
* sich ums Maskieren - früher war die Liste von Hand zusammengesetzt und
|
||||||
|
* ein Anführungszeichen im Ortsnamen machte sie unbrauchbar.
|
||||||
|
*/
|
||||||
|
function autoAusgabe($dbconn, $sql, $params)
|
||||||
|
{
|
||||||
|
$zeilen = db_zeilen($dbconn, $sql, $params);
|
||||||
|
header("Content-Type: application/json; charset=utf-8");
|
||||||
|
echo json_encode($zeilen ? $zeilen : array(), JSON_UNESCAPED_UNICODE);
|
||||||
|
}
|
||||||
+6
-20
@@ -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 "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+7
-19
@@ -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 "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
@@ -2,13 +2,20 @@
|
|||||||
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")
|
||||||
{
|
{
|
||||||
|
|
||||||
$dbconn = mysqli_connect($mysql_server, $mysql_user, $mysql_pw);
|
$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db);
|
||||||
mysqli_select_db($dbconn,$mysql_db);
|
if(!$dbconn)
|
||||||
|
$err = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
$err = 1;
|
$err = 1;
|
||||||
|
|||||||
+6
-20
@@ -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 "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+7
-20
@@ -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 "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+7
-21
@@ -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 "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+7
-21
@@ -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 "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+9
-21
@@ -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 "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+7
-20
@@ -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 "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+11
-183
@@ -1,4 +1,4 @@
|
|||||||
<?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");
|
||||||
@@ -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)
|
||||||
|
$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"]))
|
|
||||||
$sub_mwst = $_POST["sub_mwst"];
|
|
||||||
else
|
|
||||||
$sub_mwst = "";
|
|
||||||
$rabatt = $_POST["rabatt"];
|
|
||||||
$rabattdesc = $_POST["rabattdesc"];
|
|
||||||
$lieferdatum = $_POST["lieferdatum"];
|
|
||||||
$buchKto = $_POST["buchKto"];
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn, "SELECT id FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type'") or $err=error("Fehler beim ermitteln der Rechnung <br />".mysqli_error($dbconn));
|
|
||||||
$progressid = mysqli_fetch_array($qry);
|
|
||||||
$progressid = $progressid[0];
|
|
||||||
if(!$progressid)
|
|
||||||
{
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn, "INSERT INTO tmp_rechnung SET
|
|
||||||
user_id = '".$_SESSION["user"]."',
|
|
||||||
adressfields='$show',
|
|
||||||
anrede1='$anr1',
|
|
||||||
anrede2='$anr2',
|
|
||||||
intro='$intro',
|
|
||||||
outro='$outro',
|
|
||||||
typ_id = '$type',
|
|
||||||
adresse_id='$adressid',
|
|
||||||
partner_id='$partnerid',
|
|
||||||
mwst_id = '$mwst',
|
|
||||||
zahlziel_id = '$zahlziel',
|
|
||||||
wahrung_id='$wahrung',
|
|
||||||
sub_mwst='$sub_mwst',
|
|
||||||
rabatt='$rabatt',
|
|
||||||
rabattdesc='$rabattdesc',
|
|
||||||
adresserweiterung='$adrerw',
|
|
||||||
lieferdatum='$lieferdatum',
|
|
||||||
buchungsKto_id = '$buchKto',
|
|
||||||
datetime=NOW()") or $err=error("[autosave.js] Fehler beim erstellen der Rechnung <br />".mysqli_error($dbconn));
|
|
||||||
$progressid = mysqli_insert_id($dbconn);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$qry = mysqli_query($dbconn, "UPDATE tmp_rechnung SET
|
|
||||||
user_id = '".$_SESSION["user"]."',
|
|
||||||
adressfields='$show',
|
|
||||||
anrede1='$anr1',
|
|
||||||
anrede2='$anr2',
|
|
||||||
intro='$intro',
|
|
||||||
outro='$outro',
|
|
||||||
typ_id = '$type',
|
|
||||||
adresse_id='$adressid',
|
|
||||||
partner_id='$partnerid',
|
|
||||||
mwst_id = '$mwst',
|
|
||||||
zahlziel_id = '$zahlziel',
|
|
||||||
wahrung_id='$wahrung',
|
|
||||||
sub_mwst='$sub_mwst',
|
|
||||||
rabatt='$rabatt',
|
|
||||||
rabattdesc='$rabattdesc',
|
|
||||||
lieferdatum='$lieferdatum',
|
|
||||||
adresserweiterung='$adrerw',
|
|
||||||
buchungsKto_id = '$buchKto',
|
|
||||||
datetime=NOW() WHERE id='$progressid'") or $err=error("Fehler beim aktualisieren der Rechnung <br />".mysqli_error($dbconn));
|
|
||||||
$qry = mysqli_query($dbconn, "DELETE FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type' AND id != '$progressid' LIMIT 1") or $err=error("Fehler beim löschen alter tmp Rechnungen <br />".mysqli_error($dbconn));
|
|
||||||
}
|
|
||||||
|
|
||||||
$qry= mysqli_query($dbconn, "SELECT id FROM tmp_artikel WHERE rech_id = '".$progressid."'");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn, "DELETE FROM tmp_eigensch WHERE art_id = '".$res["id"]."'") or $err=error("Fehler beim löschen der eigenschaften <br />".mysqli_error($dbconn));
|
|
||||||
}
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn, "DELETE FROM tmp_artikel WHERE rech_id = '".$progressid."'") or $err=error("Fehler beim löschen der Artikel <br />".mysqli_error($dbconn));
|
|
||||||
if(!isset($err))
|
|
||||||
{
|
|
||||||
$i = 1;
|
|
||||||
while($_POST["arthead".$i] && !isset($err))
|
|
||||||
{
|
|
||||||
$angtyp = trim($_POST["angtyp".$i]);
|
|
||||||
$arttyp = trim($_POST["arttyp".$i]);
|
|
||||||
$arthead = trim($_POST["arthead".$i]);
|
|
||||||
$artpr = str_replace(",",".",trim($_POST["artpr".$i]));
|
|
||||||
$artmen = str_replace(",",".",trim($_POST["artmen".$i]));
|
|
||||||
$artrab = trim($_POST["artrab".$i]);
|
|
||||||
if(!isset($_POST["artrabtyp".$i]))
|
|
||||||
$_POST["artrabtyp".$i] = "";
|
|
||||||
$artrabtyp = trim($_POST["artrabtyp".$i]);
|
|
||||||
$artmeneinh = trim($_POST["artmeneinh".$i]);
|
|
||||||
$artwa = trim($_POST["artwa".$i]);
|
|
||||||
$artmwst = trim($_POST["artmwst".$i]);
|
|
||||||
$pagebreak = trim($_POST["pagebreak".$i]);
|
|
||||||
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn, "INSERT INTO tmp_artikel SET bezeichn='$arthead', preis='$artpr', mwst_id='$artmwst', pagebreak='$pagebreak', einheit_id='$artmeneinh', typ_id='$arttyp', datetime=NOW(), wanr='$artwa', rech_id='$progressid',posnr='$i',rabatt='$artrab',rabatttyp='$artrabtyp',menge='$artmen',angtyp='$angtyp'") or $err=error("Fehler beim anlegen der Artikel <br />".mysqli_error($dbconn));
|
|
||||||
$artid=mysqli_insert_id($dbconn);
|
|
||||||
$ii = 1;
|
|
||||||
while($_POST["arteig".$i."_".$ii] && !isset($err))
|
|
||||||
{
|
|
||||||
$arteig = trim($_POST["arteig".$i."_".$ii]);
|
|
||||||
$artval = trim($_POST["artval".$i."_".$ii]);
|
|
||||||
$arteinh = trim($_POST["arteinh".$i."_".$ii]);
|
|
||||||
$qry = mysqli_query($dbconn, "INSERT INTO tmp_eigensch SET bezeichn='$arteig', wert='$artval', einheit_id='$arteinh', datetime=NOW(), posnr='$ii', art_id='$artid'") or $err=error("Fehler beim anlegen der Eigenschaften <br />".mysqli_error($dbconn));
|
|
||||||
$eigid=mysqli_insert_id($dbconn);
|
|
||||||
$ii++;
|
|
||||||
}
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!isset($err))
|
|
||||||
{
|
{
|
||||||
|
$type = formularGanzzahl("type");
|
||||||
$adresse = makeadressblock($dbconn,$progressid,1);
|
$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!");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
+11
-193
@@ -1,4 +1,4 @@
|
|||||||
<?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");
|
||||||
@@ -10,213 +10,31 @@ 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);
|
||||||
}
|
}
|
||||||
makeEndPage($pdf,$rechnung,$gesamtpreis,1);
|
makeEndPage($pdf,$rechnung,$gesamtpreis,1);
|
||||||
|
|
||||||
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
|
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
|
||||||
savePDF($pdf,"../temp/pdfpreview/$tmppdfname.pdf");
|
savePDF($pdf,"../temp/pdfpreview/$tmppdfname.pdf");
|
||||||
echo makeImageFromPDF("../temp/pdfpreview/$tmppdfname.pdf");
|
echo makeImageFromPDF("../temp/pdfpreview/$tmppdfname.pdf");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
+34
-38
@@ -1,56 +1,52 @@
|
|||||||
<?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 = 50;
|
$pagesize = 50;
|
||||||
|
if(!isset($err))
|
||||||
|
$err = "";
|
||||||
|
|
||||||
if(!$err)
|
if(!$err)
|
||||||
{
|
{
|
||||||
$speciallines=array();
|
// kommt per encodeURIComponent bereits als UTF-8
|
||||||
|
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
|
||||||
$fulltag = utf8_encode($_GET["search"]);
|
$link = isset($_GET["link"]) && is_string($_GET["link"]) ? $_GET["link"] : "";
|
||||||
$src = explode(" ",$fulltag);
|
$field = isset($_GET["field"]) && is_string($_GET["field"]) ? $_GET["field"] : "";
|
||||||
$combiner = mysql_escape_string($_GET["link"]);
|
$page = isset($_GET["page"]) ? (int)$_GET["page"] : 0;
|
||||||
if($combiner != "AND" && $combiner != "OR")
|
$rechid = isset($_GET["rechid"]) ? (int)$_GET["rechid"] : 0;
|
||||||
{
|
// steuert, wofür die gewählte Adresse verwendet wird
|
||||||
$combiner = "AND";
|
$subact = (isset($_GET["subact"]) && $_GET["subact"] == "copy") ? "copy" : "changeadr";
|
||||||
}
|
|
||||||
$page = $_GET["page"];
|
$speciallines = array();
|
||||||
|
$listlines = array();
|
||||||
$queries = createAdressQry($page,$pagesize,$src,$combiner,$_GET["field"],0,1);
|
$src = explode(" ", $fulltag);
|
||||||
$qry = mysqli_query($dbconn,$queries["all"])
|
$combiner = $link == "OR" ? "OR" : "AND";
|
||||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
|
||||||
$numres = mysqli_num_rows($qry);
|
$queries = createAdressQry($page,$pagesize,$src,$combiner,$field,0,1);
|
||||||
|
$numres = zaehleTreffer($dbconn, $queries);
|
||||||
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." ".(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> ".$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> ".$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;
|
||||||
@@ -60,12 +56,12 @@ if(!$err)
|
|||||||
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
||||||
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.");
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
+31
-76
@@ -1,89 +1,45 @@
|
|||||||
<?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 = 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;
|
||||||
|
|
||||||
|
$src = explode(" ", $fulltag);
|
||||||
|
$combiner = $link == "OR" ? "OR" : "AND";
|
||||||
|
$listlines = array();
|
||||||
|
|
||||||
$fulltag = utf8_encode($_GET["search"]);
|
|
||||||
$src = explode(" ",$fulltag);
|
|
||||||
$combiner = mysql_escape_string($_GET["link"]);
|
|
||||||
if($combiner != "AND" && $combiner != "OR")
|
|
||||||
{
|
|
||||||
$combiner = "AND";
|
|
||||||
}
|
|
||||||
$page = $_GET["page"];
|
|
||||||
$skspage = $_GET["skspage"];
|
|
||||||
$typ = $_GET["typ"];
|
|
||||||
$id = $_GET["kdnid"];
|
|
||||||
$queries = createKdnProjectQry($page,$pagesize,$src,$combiner,$id);
|
$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"]."©=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");
|
||||||
$lastdisplay = ($page+1)*$pagesize;
|
$lastdisplay = ($page+1)*$pagesize;
|
||||||
if($numres < $lastdisplay)
|
if($numres < $lastdisplay)
|
||||||
@@ -92,18 +48,17 @@ if(!$err)
|
|||||||
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
||||||
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
|
||||||
{
|
{
|
||||||
if($fulltag)
|
if($fulltag)
|
||||||
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
|
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
|
||||||
else
|
else
|
||||||
ok("Keine Einträge.");
|
ok("Keine Einträge.");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
+19
-18
@@ -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"]."©=1'><span class='copy' title='Dokument kopieren'></span></a>";
|
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."©=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
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -123,19 +124,19 @@ if(!isset($err))
|
|||||||
|
|
||||||
//OLD SKS RECHNUNGEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
//OLD SKS RECHNUNGEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
if(getUserSetting($dbconn,"show_sks", mysql_escape_string($_SESSION["user"]), 1)) //show sks rechnungen????
|
if(getUserSetting($dbconn,"show_sks", $_SESSION["user"], 1)) //show sks rechnungen????
|
||||||
{
|
{
|
||||||
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");
|
||||||
|
|||||||
+36
-55
@@ -1,66 +1,47 @@
|
|||||||
<?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 = 50;
|
$pagesize = 50;
|
||||||
|
if(!isset($err))
|
||||||
|
$err = "";
|
||||||
|
|
||||||
if(!$err)
|
if(!$err)
|
||||||
{
|
{
|
||||||
$fulltag = utf8_encode($_GET["search"]);
|
// kommt per encodeURIComponent bereits als UTF-8
|
||||||
$src = explode(" ",$fulltag);
|
$fulltag = isset($_GET["search"]) && is_string($_GET["search"]) ? $_GET["search"] : "";
|
||||||
$combiner = mysql_escape_string($_GET["link"]);
|
$link = isset($_GET["link"]) && is_string($_GET["link"]) ? $_GET["link"] : "";
|
||||||
if($combiner != "AND" && $combiner != "OR")
|
$page = isset($_GET["page"]) ? (int)$_GET["page"] : 0;
|
||||||
{
|
$id = isset($_GET["kdnid"]) ? (int)$_GET["kdnid"] : 0;
|
||||||
$combiner = "AND";
|
|
||||||
}
|
$src = explode(" ", $fulltag);
|
||||||
$page = $_GET["page"];
|
$combiner = $link == "OR" ? "OR" : "AND";
|
||||||
$id = $_GET["kdnid"];
|
$listlines = array();
|
||||||
$queries = createKommQry($page,$pagesize,$src,$combiner,$id,$typ,0);
|
|
||||||
$qry = mysqli_query($dbconn,$queries["all"])
|
$queries = createKommQry($page,$pagesize,$src,$combiner,$id);
|
||||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
$numres = zaehleTreffer($dbconn, $queries);
|
||||||
$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>";
|
$adresse = makeadressline($res);
|
||||||
$name=makenameline($res);
|
$listlines[] = array(makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $actions);
|
||||||
$adresse=makeadressline($res);
|
|
||||||
$listlines[] = array($name,
|
|
||||||
$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;
|
||||||
@@ -70,17 +51,17 @@ if(!$err)
|
|||||||
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
||||||
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
|
||||||
{
|
{
|
||||||
if($fulltag)
|
if($fulltag)
|
||||||
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
|
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
|
||||||
else
|
else
|
||||||
ok("Keine Einträge.");
|
ok("Keine Einträge.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
+36
-50
@@ -1,85 +1,71 @@
|
|||||||
<?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 = 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"] = $_GET["search"];
|
$_SESSION["search"] = $fulltag;
|
||||||
$_SESSION["link"] = $_GET["link"];
|
$_SESSION["link"] = $link;
|
||||||
$_SESSION["field"] = $_GET["field"];
|
$_SESSION["field"] = $field;
|
||||||
$_SESSION["page"] = $_GET["page"];
|
$_SESSION["page"] = $page;
|
||||||
$speciallines=array();
|
|
||||||
|
$speciallines = array();
|
||||||
$fulltag = utf8_encode($_GET["search"]);
|
$listlines = array();
|
||||||
$src = explode(" ",$fulltag);
|
$src = explode(" ", $fulltag);
|
||||||
$combiner = mysql_escape_string($_GET["link"]);
|
$combiner = $link == "OR" ? "OR" : "AND";
|
||||||
if($combiner != "AND" && $combiner != "OR")
|
|
||||||
{
|
$queries = createPartQry($page,$pagesize,$src,$combiner,$field,0,1);
|
||||||
$combiner = "AND";
|
$numres = zaehleTreffer($dbconn, $queries);
|
||||||
}
|
|
||||||
$page = $_GET["page"];
|
|
||||||
|
|
||||||
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],0,1);
|
|
||||||
$qry = mysqli_query($dbconn,$queries["all"])
|
|
||||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
|
||||||
$numres = mysqli_num_rows($qry);
|
|
||||||
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"];
|
$adresse = makeadressline($res);
|
||||||
if(isset($res["firma"]))
|
$kdnr = (int)$res["kdnr"];
|
||||||
$name .= " <i><u>".$res["firma"]."</u></i>";
|
$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>"
|
||||||
if(isset($res["vwahl"]))
|
."<a href='?action=projectlist&kundeid=".$kdnr."'><span class='projects' title='Projekte dieses Kunden auflisten'></span></a>";
|
||||||
$res["tel"] = $res["vwahl"]."/".$res["tel"];
|
$zeile = array("<a href='?action=kundenshow&id=".$kdnr."'>".$kdnr."</a>", makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $aktionen);
|
||||||
$adresse=makeadressline($res);
|
if(empty($res["updated_by"]))
|
||||||
if(!isset($res["updated_by"]))
|
$listlines[] = $zeile;
|
||||||
$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>");
|
|
||||||
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)
|
||||||
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
||||||
else
|
else
|
||||||
ok($numres." Kunden sind insgesamt gespeichert.");
|
ok($numres." Kunden sind insgesamt gespeichert.");
|
||||||
|
|
||||||
displayPages($pagesize,$page,$numres,"ajax_searchkunden");
|
displayPages($pagesize,$page,$numres,"ajax_searchkunden");
|
||||||
displayList($headings,$listlines,$speciallines);
|
displayList($headings,$listlines,$speciallines);
|
||||||
displayPages($pagesize,$page,$numres,"ajax_searchkunden");
|
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.");
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
+29
-44
@@ -1,61 +1,47 @@
|
|||||||
<?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 = 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"]="";
|
$src = explode(" ", $fulltag);
|
||||||
}
|
$combiner = $link == "OR" ? "OR" : "AND";
|
||||||
|
|
||||||
$fulltag = utf8_encode($_GET["search"]);
|
$queries = createPartQry($page,$pagesize,$src,$combiner,$field,0,2);
|
||||||
$src = explode(" ",$fulltag);
|
$numres = zaehleTreffer($dbconn, $queries);
|
||||||
$combiner = mysql_escape_string($_GET["link"]);
|
|
||||||
if($combiner != "AND" && $combiner != "OR")
|
|
||||||
{
|
|
||||||
$combiner = "AND";
|
|
||||||
}
|
|
||||||
$page = $_GET["page"];
|
|
||||||
|
|
||||||
$queries = createPartQry($page,$pagesize,$src,$combiner,$_GET["field"],0,2);
|
|
||||||
$qry = mysqli_query($dbconn,$queries["all"])
|
|
||||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
|
||||||
$numres = mysqli_num_rows($qry);
|
|
||||||
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;
|
||||||
@@ -63,13 +49,12 @@ if(!isset($err))
|
|||||||
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
||||||
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.");
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
+15
-14
@@ -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
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -118,18 +119,18 @@ if(!isset($err))
|
|||||||
|
|
||||||
//OLD SKS RECHNUNGEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
//OLD SKS RECHNUNGEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
if(getUserSetting($dbconn,"show_sks", mysql_escape_string($_SESSION["user"]), 1)) //show sks rechnungen????
|
if(getUserSetting($dbconn,"show_sks", $_SESSION["user"], 1)) //show sks rechnungen????
|
||||||
{
|
{
|
||||||
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");
|
||||||
|
|||||||
+120
-158
@@ -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 = "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Datum und Dauer eines Termins für die Liste. Ab 24 Stunden zählt der
|
||||||
|
* Termin in Tagen, sonst in Stunden und Minuten.
|
||||||
|
*/
|
||||||
|
function terminZeitraum($termtime, $termdauer)
|
||||||
{
|
{
|
||||||
$usercolors = array("#f00","#0c0","#ff0","#90c","#0bb","#066","#09f","#f60","#00f","#f09");
|
$stunden = (int)strtok((string)$termdauer, ":");
|
||||||
|
$minuten = (int)substr((string)$termdauer, 3, 2);
|
||||||
$fulltag = utf8_encode($_GET["search"]);
|
|
||||||
$src = explode(" ",$fulltag);
|
if($termtime == "0000-00-00 00:00:00")
|
||||||
if(isset($_GET["link"])){
|
$zeitpunkt = "N/A";
|
||||||
$combiner = mysql_escape_string($_GET["link"]);
|
elseif($stunden > 23)
|
||||||
}else{
|
|
||||||
$combiner = "";
|
|
||||||
}
|
|
||||||
if($combiner != "AND" && $combiner != "OR")
|
|
||||||
{
|
{
|
||||||
$combiner = "AND";
|
$zeitpunkt = date("d.m.Y", strtotime($termtime));
|
||||||
|
if($stunden / 24 > 1)
|
||||||
|
$zeitpunkt .= " - ".date("d.m", strtotime("+".(($stunden / 24) - 1)." day", strtotime($termtime)));
|
||||||
}
|
}
|
||||||
$page = $_GET["page"];
|
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>";
|
||||||
|
if(!$res["done"])
|
||||||
|
$actions .= "<span class='check' title='Termin als erledigt markieren' onClick='askbranch(\"Möchten Sie einen Folgetermin vormerken?\",\"?action=terminadd&id=".$id."\",\"?action=terminadd&id=".$id."&done=yes\")'></span>";
|
||||||
|
else
|
||||||
|
$actions .= "<a href='?action=terminadd&id=".$id."&done=no'><span class='cross' title='Termin als nicht erledigt markieren'></span></a>";
|
||||||
|
|
||||||
|
list($termtime, $termdauer) = terminZeitraum($res["termtime"], $res["termdauer"]);
|
||||||
|
|
||||||
|
$adresse = "<b>".htmlspecialchars($res["plz"]." ".$res["ort"]);
|
||||||
|
if($res["ortsteil"])
|
||||||
|
$adresse .= "-".htmlspecialchars((string)$res["ortsteil"]);
|
||||||
|
$adresse .= "</b><br />".htmlspecialchars($res["str"]." ".$res["hnr"]);
|
||||||
|
// Nummern ohne Durchwahl-Bindestrich am Ende
|
||||||
|
$nummern = db_wert($dbconn, "SELECT GROUP_CONCAT(nr ORDER BY id SEPARATOR ', ') FROM tel
|
||||||
|
WHERE partner_id = ? AND RIGHT(nr,1) != '-'", array($res["partner_id"]));
|
||||||
|
if($nummern)
|
||||||
{
|
{
|
||||||
$actions = "<span class='del' title='löschen' onClick='askdel(\"Möchten Sie den Termiiin ".htmlspecialchars($res["head"],ENT_QUOTES)."<br />wirklich <b>unwiederruflich</b> löschen?\",\"?action=terminadd&id=".$res["id"]."&del=1\")'></span>";
|
$adresse .= "<br />Tel: ".htmlspecialchars($nummern);
|
||||||
$actions .= "<a href='?action=terminadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."'><span class='edit' title='Termin ändern'></span></a>";
|
if($res["vname"] || $res["nname"])
|
||||||
$actions .= "<a href='?action=kundenshow&id=".$res["partner_id"]."'><span class='partner' title='Kunden anzeigen'></span></a>";
|
$adresse .= "<br />(".htmlspecialchars(trim($res["vname"]." ".$res["nname"])).")";
|
||||||
$actions .= "<a href='?action=terminshow&id=".$res["id"]."'><span class='print' title='Termin drucken'></span></a>";
|
elseif($res["firma"])
|
||||||
if(!$res["done"])
|
$adresse .= "<br />(".htmlspecialchars((string)$res["firma"]).")";
|
||||||
$actions .= "<span class='check' title='Termin als erledigt markieren' onClick='askbranch(\"Möchten Sie einen Folgetermin vormerken?\",\"?action=terminadd&id=".$res["id"]."\",\"?action=terminadd&id=".$res["id"]."&done=yes\")'></span>";
|
|
||||||
else
|
|
||||||
$actions .= "<a href='?action=terminadd&id=".$res["id"]."&done=no'><span class='cross' title='Termin als nicht erledigt markieren'></span></a>";
|
|
||||||
$split_termdauer = explode(":",$res["termdauer"]);
|
|
||||||
|
|
||||||
if($res["termtime"] == "0000-00-00 00:00:00")
|
|
||||||
$termtime = "N/A";
|
|
||||||
else if($split_termdauer[0] > 23)
|
|
||||||
{
|
|
||||||
if($split_termdauer[0]/24 > 1)
|
|
||||||
{
|
|
||||||
$termtime = date("d.m.Y - ",strtotime($res["termtime"]));
|
|
||||||
$termtime .= date("d.m",strtotime("+".(($split_termdauer[0]/24)-1)." day",strtotime($res["termtime"])));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$termtime = date("d.m.Y",strtotime($res["termtime"]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
$termtime = date("d.m.Y H:i ",strtotime($res["termtime"]))."Uhr";
|
|
||||||
|
|
||||||
if($split_termdauer[0] > 23)
|
|
||||||
{
|
|
||||||
if($split_termdauer[0]/24 > 1)
|
|
||||||
$termdauer = ($split_termdauer[0]/24)." Tage";
|
|
||||||
else
|
|
||||||
$termdauer = ($split_termdauer[0]/24)." Tag";
|
|
||||||
}
|
|
||||||
else if($split_termdauer[0] > 0)
|
|
||||||
$termdauer = ltrim(substr($res["termdauer"],0,2),"0")." Std";
|
|
||||||
if($split_termdauer[0] > 0 && $split_termdauer[1] > 0)
|
|
||||||
$termdauer .= " - ";
|
|
||||||
if($split_termdauer[1] > 0)
|
|
||||||
$termdauer .= ltrim(substr($res["termdauer"],3,2),"0")." Min";
|
|
||||||
|
|
||||||
$adresse = "<b>".$res["plz"]." ".$res["ort"];
|
|
||||||
if($res["ortsteil"])
|
|
||||||
$adresse .= "-".$res["ortsteil"];
|
|
||||||
$adresse .= "</b><br />".$res["str"]." ".$res["hnr"];
|
|
||||||
if(isset($telres)){
|
|
||||||
if($res["vname"])
|
|
||||||
$adresse .= "<br />Tel: ".$telres["nr"]."<br />(".$res["vname"]." ".$res["nname"].")";
|
|
||||||
else if($res["nname"])
|
|
||||||
$adresse .= "<br />Tel: ".$telres["nr"]."<br />(".$res["nname"].")";
|
|
||||||
else if($res["firma"])
|
|
||||||
$adresse .= "<br />Tel: ".$telres["nr"]."<br />(".$res["firma"].")";
|
|
||||||
else
|
|
||||||
$adresse .= "<br />Tel: ".$telres["nr"];
|
|
||||||
}
|
|
||||||
$namelist = $res["uservname"]." ".substr($res["usernname"],0,1);
|
|
||||||
if($res["user2"])
|
|
||||||
$namelist .= ", ".$res["uservname2"]." ".substr($res["usernname2"],0,1);
|
|
||||||
if($res["user3"])
|
|
||||||
$namelist .= ", ".$res["uservname3"]." ".substr($res["usernname3"],0,1);
|
|
||||||
if($res["user4"])
|
|
||||||
$namelist .= ", ".$res["uservname4"]." ".substr($res["usernname4"],0,1);
|
|
||||||
if($termtyp == 1){
|
|
||||||
$checkbox = "<input type='checkbox' value='".$res["id"]."' id='erl".$counter."' name='erl".$counter."'></input>";
|
|
||||||
|
|
||||||
$listlines[] = array("<a href='?action=terminshow&id=".$res["id"]."'><b>".$res["typ"]."</b></a><br />".$namelist,
|
|
||||||
"<a href='?action=terminshow&id=".$res["id"]."'>".$res["head"]."</a>",
|
|
||||||
$termtime,
|
|
||||||
$termdauer,
|
|
||||||
$adresse,
|
|
||||||
$actions,
|
|
||||||
$checkbox
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if($termtyp == 3){
|
|
||||||
$checkbox = "<input type='checkbox' value='".$res["id"]."' id='del".$counter."' name='del".$counter."'></input>";
|
|
||||||
|
|
||||||
$listlines[] = array("<a href='?action=terminshow&id=".$res["id"]."'><b>".$res["typ"]."</b></a><br />".$namelist,
|
|
||||||
"<a href='?action=terminshow&id=".$res["id"]."'>".$res["head"]."</a>",
|
|
||||||
$termtime,
|
|
||||||
$termdauer,
|
|
||||||
$adresse,
|
|
||||||
$actions,
|
|
||||||
$checkbox
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$listlines[] = array("<a href='?action=terminshow&id=".$res["id"]."'><b>".$res["typ"]."</b></a><br />".$namelist,
|
|
||||||
"<a href='?action=terminshow&id=".$res["id"]."'>".$res["head"]."</a>",
|
|
||||||
$termtime,
|
|
||||||
$termdauer,
|
|
||||||
$adresse,
|
|
||||||
$actions
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if($res["user2"] || $res["user3"] || $res["user4"])
|
|
||||||
$colors[] = "#fff";
|
|
||||||
else if($res["color"])
|
|
||||||
$colors[] = $res["color"];
|
|
||||||
else
|
|
||||||
$colors[] = "#fff";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$namelist = htmlspecialchars($res["uservname"]." ".substr((string)$res["usernname"], 0, 1));
|
||||||
|
foreach(array(2, 3, 4) as $n)
|
||||||
|
if($res["user".$n])
|
||||||
|
$namelist .= ", ".htmlspecialchars($res["uservname".$n]." ".substr((string)$res["usernname".$n], 0, 1));
|
||||||
|
|
||||||
|
$zeile = array("<a href='?action=terminshow&id=".$id."'><b>".htmlspecialchars((string)$res["typ"])."</b></a><br />".$namelist,
|
||||||
|
"<a href='?action=terminshow&id=".$id."'>".$kopf."</a>",
|
||||||
|
$termtime,
|
||||||
|
$termdauer,
|
||||||
|
$adresse,
|
||||||
|
$actions);
|
||||||
|
// Registerkarte 1 hakt ab, Registerkarte 3 löscht - beides mehrfach
|
||||||
|
if($termtyp == 1 || $termtyp == 3)
|
||||||
|
{
|
||||||
|
$feld = $termtyp == 1 ? "erl" : "del";
|
||||||
|
$zeile[] = "<input type='checkbox' value='".$id."' id='".$feld.$counter."' name='".$feld.$counter."' />";
|
||||||
|
}
|
||||||
|
$listlines[] = $zeile;
|
||||||
|
|
||||||
|
if($res["user2"] || $res["user3"] || $res["user4"] || !$res["color"])
|
||||||
|
$colors[] = "#fff";
|
||||||
|
else
|
||||||
|
$colors[] = $res["color"];
|
||||||
}
|
}
|
||||||
if($termtyp == 1){
|
|
||||||
$headings = array("Typ","Beschreibung","Datum","Dauer","Ort","Aktionen"," Erledigt ");
|
$headings = array("Typ","Beschreibung","Datum","Dauer","Ort","Aktionen");
|
||||||
}
|
if($termtyp == 1)
|
||||||
else if($termtyp == 3){
|
$headings[] = " Erledigt ";
|
||||||
$headings = array("Typ","Beschreibung","Datum","Dauer","Ort","Aktionen"," Löschen ");
|
elseif($termtyp == 3)
|
||||||
}
|
$headings[] = " Löschen ";
|
||||||
else{
|
|
||||||
$headings = array("Typ","Beschreibung","Datum","Dauer","Ort","Aktionen");
|
|
||||||
}
|
|
||||||
$lastdisplay = ($page+1)*$pagesize;
|
$lastdisplay = ($page+1)*$pagesize;
|
||||||
if($numres < $lastdisplay)
|
if($numres < $lastdisplay)
|
||||||
$lastdisplay = $numres;
|
$lastdisplay = $numres;
|
||||||
@@ -168,27 +134,23 @@ if(!isset($err))
|
|||||||
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.<br /> Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay);
|
||||||
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
|
||||||
{
|
{
|
||||||
if($fulltag)
|
if($fulltag)
|
||||||
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
|
ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse.");
|
||||||
else
|
else
|
||||||
ok("Keine Einträge.");
|
ok("Keine Einträge.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
+48
-27
@@ -50,10 +50,8 @@ try {
|
|||||||
|
|
||||||
if($settings == "valid")
|
if($settings == "valid")
|
||||||
{
|
{
|
||||||
if(!$dbconn = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw))
|
if(!$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db))
|
||||||
$err = error("Verbindung zur Datenbank fehlgeschlagen!!");
|
$err = error("Verbindung zur Datenbank fehlgeschlagen: ".htmlspecialchars(mysqli_connect_error()));
|
||||||
if(!@mysqli_select_db($dbconn,$mysql_db))
|
|
||||||
$err = error("Datenbank nicht gefunden!! ($mysql_db)");
|
|
||||||
}
|
}
|
||||||
// read get argument and post body
|
// read get argument and post body
|
||||||
$fn = filter_input(INPUT_GET, 'fn');
|
$fn = filter_input(INPUT_GET, 'fn');
|
||||||
@@ -107,6 +105,24 @@ try {
|
|||||||
// request for create arguments
|
// request for create arguments
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
|
|
||||||
|
// Passkeys anlegen darf nur ein angemeldeter Superadmin, der vorher in
|
||||||
|
// sites/userkeys.php eine gültige Einmal-Freigabe (addKey) eingelöst hat.
|
||||||
|
// Die Freigabe liegt in der Session und legt fest, für welchen Benutzer
|
||||||
|
// der Schlüssel gilt - die id aus der URL zählt nicht.
|
||||||
|
$passkeyFreigabe = null;
|
||||||
|
if (isset($_SESSION["passkey_freigabe"]) && $_SESSION["passkey_freigabe"]["bis"] >= time()
|
||||||
|
&& ($_SESSION["login"] ?? "") == "valid"
|
||||||
|
&& ((int)substr($_SESSION["rights"] ?? "", RIGHTS_SUPERADMIN, 1) & RIGHTS_CHANGE)) {
|
||||||
|
$passkeyFreigabe = $_SESSION["passkey_freigabe"];
|
||||||
|
}
|
||||||
|
if (($fn === 'getCreateArgs' || $fn === 'processCreate') && $passkeyFreigabe === null) {
|
||||||
|
throw new Exception('Keine Berechtigung, Passkeys anzulegen.');
|
||||||
|
}
|
||||||
|
if ($fn === 'queryFidoMetaDataService'
|
||||||
|
&& !(($_SESSION["login"] ?? "") == "valid" && ((int)substr($_SESSION["rights"] ?? "", RIGHTS_SUPERADMIN, 1) & RIGHTS_CHANGE))) {
|
||||||
|
throw new Exception('Keine Berechtigung.');
|
||||||
|
}
|
||||||
|
|
||||||
if ($fn === 'getCreateArgs') {
|
if ($fn === 'getCreateArgs') {
|
||||||
$createArgs = $WebAuthn->getCreateArgs(\hex2bin($userId), $userName, $userDisplayName, 60*4, $requireResidentKey, $userVerification, $crossPlatformAttachment);
|
$createArgs = $WebAuthn->getCreateArgs(\hex2bin($userId), $userName, $userDisplayName, 60*4, $requireResidentKey, $userVerification, $crossPlatformAttachment);
|
||||||
|
|
||||||
@@ -123,22 +139,20 @@ try {
|
|||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
|
|
||||||
} else if ($fn === 'getGetArgs') {
|
} else if ($fn === 'getGetArgs') {
|
||||||
$result = mysqli_query($dbconn,"SELECT id FROM user WHERE nick = '".mysqli_real_escape_string($dbconn,$_GET["user"])."';");
|
$userId = db_wert($dbconn, "SELECT id FROM user WHERE nick = ?", array((string)filter_input(INPUT_GET, 'user')));
|
||||||
if ($result->num_rows > 0) {
|
if ($userId === false) {
|
||||||
$row = $result->fetch_assoc();
|
throw new Exception(mysqli_error($dbconn));
|
||||||
$userId = $row["id"];
|
}
|
||||||
}else{
|
if ($userId === null) {
|
||||||
throw new Exception('Username not found');
|
throw new Exception('Username not found');
|
||||||
}
|
}
|
||||||
$ids = [];
|
$ids = [];
|
||||||
$result = mysqli_query($dbconn,"SELECT credentialId FROM passkeys WHERE userId = '".$userId."';");
|
$zeilen = db_zeilen($dbconn, "SELECT credentialId FROM passkeys WHERE userId = ?", array($userId));
|
||||||
if(!$result){
|
if ($zeilen === false) {
|
||||||
$msg = "Error:<br>".mysqli_error($dbconn)."<br />";
|
throw new Exception(mysqli_error($dbconn));
|
||||||
}
|
}
|
||||||
if ($result->num_rows > 0) {
|
foreach ($zeilen as $row) {
|
||||||
while($row = $result->fetch_assoc()) {
|
$ids[] = base64_decode($row["credentialId"]);
|
||||||
$ids[] = base64_decode($row["credentialId"]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count($ids) === 0) {
|
if (count($ids) === 0) {
|
||||||
@@ -181,10 +195,13 @@ try {
|
|||||||
if (!isset($_SESSION['registrations']) || !array_key_exists('registrations', $_SESSION) || !is_array($_SESSION['registrations'])) {
|
if (!isset($_SESSION['registrations']) || !array_key_exists('registrations', $_SESSION) || !is_array($_SESSION['registrations'])) {
|
||||||
$_SESSION['registrations'] = [];
|
$_SESSION['registrations'] = [];
|
||||||
}*/
|
}*/
|
||||||
if(!mysqli_query($dbconn,"INSERT INTO passkeys SET credentialId = '".base64_encode($data->credentialId)."', credentialPublicKey = '".base64_encode($data->credentialPublicKey)."', signatureCounter = '".base64_encode($data->signatureCounter)."', name = '".mysqli_real_escape_string($mysql,filter_input(INPUT_GET, 'name'))."', userId = '".mysqli_real_escape_string($mysql,filter_input(INPUT_GET, 'id'))."';")){
|
if(!db_abfrage($dbconn, "INSERT INTO passkeys SET credentialId = ?, credentialPublicKey = ?, signatureCounter = ?, name = ?, userId = ?, lastAuth = NOW(), authKey = 0",
|
||||||
|
array(base64_encode($data->credentialId), base64_encode($data->credentialPublicKey), base64_encode($data->signatureCounter), (string)filter_input(INPUT_GET, 'name'), $passkeyFreigabe["user"]))){
|
||||||
$msg = "Error:<br>".mysqli_error($dbconn)."<br />";
|
$msg = "Error:<br>".mysqli_error($dbconn)."<br />";
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
// Freigabe gilt für genau einen Schlüssel
|
||||||
|
unset($_SESSION["passkey_freigabe"]);
|
||||||
if ($data->rootValid === false) {
|
if ($data->rootValid === false) {
|
||||||
$msg = 'registration ok, but certificate does not match any of the selected root ca. NO PROBLEM FOR THIS APP';
|
$msg = 'registration ok, but certificate does not match any of the selected root ca. NO PROBLEM FOR THIS APP';
|
||||||
}
|
}
|
||||||
@@ -218,12 +235,11 @@ try {
|
|||||||
// looking up correspondending public key of the credential id
|
// looking up correspondending public key of the credential id
|
||||||
// you should also validate that only ids of the given user name
|
// you should also validate that only ids of the given user name
|
||||||
// are taken for the login.
|
// are taken for the login.
|
||||||
$result = mysqli_query($dbconn,"SELECT credentialPublicKey, userId, name FROM passkeys WHERE credentialId = '".base64_encode($id)."';");
|
$row = db_zeile($dbconn, "SELECT credentialPublicKey, userId, name FROM passkeys WHERE credentialId = ?", array(base64_encode((string)$id)));
|
||||||
if(!$result){
|
if ($row === false) {
|
||||||
$msg = "Error:<br>".mysqli_error($dbconn)."<br />";
|
throw new Exception(mysqli_error($dbconn));
|
||||||
}
|
}
|
||||||
if ($result->num_rows > 0) {
|
if ($row) {
|
||||||
$row = $result->fetch_assoc();
|
|
||||||
$userId = $row["userId"];
|
$userId = $row["userId"];
|
||||||
$credentialPublicKey = base64_decode($row["credentialPublicKey"]);
|
$credentialPublicKey = base64_decode($row["credentialPublicKey"]);
|
||||||
$reg = (object) ['userId' => base64_decode($row["userId"])];
|
$reg = (object) ['userId' => base64_decode($row["userId"])];
|
||||||
@@ -252,11 +268,16 @@ try {
|
|||||||
|
|
||||||
|
|
||||||
$authKey = strval(random_int(0,99999999));
|
$authKey = strval(random_int(0,99999999));
|
||||||
$result = mysqli_query($dbconn,"UPDATE passkeys SET authKey=".$authKey.", lastAuth=NOW() WHERE credentialId = '".base64_encode($id)."';");
|
db_abfrage($dbconn, "UPDATE passkeys SET authKey = ?, lastAuth = NOW() WHERE credentialId = ?", array($authKey, base64_encode($id)));
|
||||||
$qry= mysqli_query($dbconn, "SELECT * FROM user WHERE id = '".mysqli_real_escape_string($dbconn,$userId)."'");
|
// Gesperrte Benutzer bleiben gesperrt, auch mit gültigem Passkey
|
||||||
if(mysqli_num_rows($qry) == 1)
|
$udata = db_zeile($dbconn, "SELECT * FROM user WHERE id = ? AND blocked = 0", array($userId));
|
||||||
|
if(!$udata)
|
||||||
{
|
{
|
||||||
$udata = mysqli_fetch_assoc($qry);
|
throw new Exception('Benutzer nicht gefunden oder gesperrt.');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
session_regenerate_id(true);
|
||||||
$_SESSION["login"] = "valid";
|
$_SESSION["login"] = "valid";
|
||||||
$_SESSION["logedout"] = $udata["logedout"];
|
$_SESSION["logedout"] = $udata["logedout"];
|
||||||
$_SESSION["user"] = $udata["id"];
|
$_SESSION["user"] = $udata["id"];
|
||||||
@@ -275,7 +296,7 @@ try {
|
|||||||
$_SESSION["zoom"] = getUserSetting($dbconn,"zoom", $_SESSION["user"], 1);
|
$_SESSION["zoom"] = getUserSetting($dbconn,"zoom", $_SESSION["user"], 1);
|
||||||
$_SESSION["privateNotes"] = getUserSetting($dbconn,"privnotes", $_SESSION["user"], "");
|
$_SESSION["privateNotes"] = getUserSetting($dbconn,"privnotes", $_SESSION["user"], "");
|
||||||
|
|
||||||
mysqli_query($dbconn, "UPDATE user SET wrongpw = 0, lastlogin = NOW(), numlogins = numlogins + 1, logedout = 0 WHERE id = '".mysqli_real_escape_string($dbconn,$userId)."'");
|
db_abfrage($dbconn, "UPDATE user SET wrongpw = 0, lastlogin = NOW(), numlogins = numlogins + 1, logedout = 0 WHERE id = ?", array($userId));
|
||||||
}
|
}
|
||||||
$return = new stdClass();
|
$return = new stdClass();
|
||||||
$return->success = true;
|
$return->success = true;
|
||||||
|
|||||||
+6
-2
@@ -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();
|
||||||
@@ -7,8 +10,9 @@ $settings=readsettings();
|
|||||||
if($settings == "valid")
|
if($settings == "valid")
|
||||||
{
|
{
|
||||||
|
|
||||||
$dbconn = mysqli_connect($mysql_server, $mysql_user, $mysql_pw);
|
$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db);
|
||||||
mysqli_select_db($dbconn,$mysql_db);
|
if(!$dbconn)
|
||||||
|
$err = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
$err = 1;
|
$err = 1;
|
||||||
|
|||||||
@@ -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).
|
||||||
*
|
*
|
||||||
|
|||||||
+72
-39
@@ -8,60 +8,93 @@ if($settings != "valid")
|
|||||||
|
|
||||||
if($settings == "valid")
|
if($settings == "valid")
|
||||||
{
|
{
|
||||||
if(!$mysql = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw))
|
if(!$mysql = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db))
|
||||||
$err = error("Verbindung zur Datenbank fehlgeschlagen!!");
|
$err = error("Verbindung zur Datenbank fehlgeschlagen: ".htmlspecialchars(mysqli_connect_error()));
|
||||||
if(!@mysqli_select_db($mysql,$mysql_db))
|
|
||||||
$err = error("Datenbank nicht gefunden!! ($mysql_db)");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$_SESSION["local"] =false;
|
$_SESSION["local"] =false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Liegt $ip im Netz $netz (CIDR-Schreibweise, IPv4 oder IPv6)? Eine Adresse
|
||||||
|
* ohne /Präfix gilt als einzelner Host.
|
||||||
|
*/
|
||||||
|
function ipImNetz($ip, $netz)
|
||||||
|
{
|
||||||
|
if(!str_contains($netz, "/"))
|
||||||
|
$netz .= str_contains($netz, ":") ? "/128" : "/32";
|
||||||
|
list($adresse, $praefix) = explode("/", $netz, 2);
|
||||||
|
$ipBin = @inet_pton($ip);
|
||||||
|
$netzBin = @inet_pton($adresse);
|
||||||
|
if($ipBin === false || $netzBin === false || !ctype_digit($praefix))
|
||||||
|
return false;
|
||||||
|
// IPv4 in IPv6-Schreibweise (::ffff:192.168.1.2) wie IPv4 behandeln
|
||||||
|
if(strlen($ipBin) == 16 && strlen($netzBin) == 4 && substr($ipBin, 0, 12) === str_repeat("\0", 10)."\xff\xff")
|
||||||
|
$ipBin = substr($ipBin, 12);
|
||||||
|
$praefix = (int)$praefix;
|
||||||
|
if(strlen($ipBin) != strlen($netzBin) || $praefix > strlen($ipBin) * 8)
|
||||||
|
return false;
|
||||||
|
$bytes = intdiv($praefix, 8);
|
||||||
|
if(substr($ipBin, 0, $bytes) !== substr($netzBin, 0, $bytes))
|
||||||
|
return false;
|
||||||
|
$bits = $praefix % 8;
|
||||||
|
if($bits == 0)
|
||||||
|
return true;
|
||||||
|
$maske = (0xFF << (8 - $bits)) & 0xFF;
|
||||||
|
return (ord($ipBin[$bytes]) & $maske) == (ord($netzBin[$bytes]) & $maske);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Kommt die Anfrage aus dem lokalen Netz? Davon hängen Passwort-Login und das
|
||||||
|
* Vergeben von Passkeys ab.
|
||||||
|
*
|
||||||
|
* Maßgeblich ist $lokale_netze aus der externen Config, z.B.
|
||||||
|
* $lokale_netze = array("192.168.179.0/24", "2001:db8:1:2::/64");
|
||||||
|
* Fehlt die Liste, gelten nur Geräte im selben IPv6-/64-Netz wie der Server.
|
||||||
|
*
|
||||||
|
* Das Docker-Netz darf dort nicht stehen: Anfragen, die über den Docker-
|
||||||
|
* Proxy oder einen Reverse Proxy kommen, tragen dessen Adresse aus diesem
|
||||||
|
* Netz - dann wäre jeder Zugriff aus dem Internet "lokal".
|
||||||
|
*/
|
||||||
function isLocal(){
|
function isLocal(){
|
||||||
$ipv6_prefix = explode(":",$_SERVER['SERVER_ADDR'],5);
|
global $lokale_netze;
|
||||||
$ipv6 = explode(":",$_SERVER['REMOTE_ADDR'],5);
|
$_SESSION["local"] = false;
|
||||||
if(($ipv6_prefix[0] == $ipv6[0] && $ipv6_prefix[1] == $ipv6[1] && $ipv6_prefix[2] == $ipv6[2] && $ipv6_prefix[3] == $ipv6[3]) || str_starts_with($_SERVER['REMOTE_ADDR'],"192.168.147.")){
|
|
||||||
$_SESSION["local"] =true;
|
|
||||||
return true;
|
|
||||||
}else{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkLogin(){
|
// Über einen Proxy weitergereicht: REMOTE_ADDR ist dann die Adresse des
|
||||||
global $mysql;
|
// Proxys, nicht die des Browsers. Solche Anfragen sind nie lokal.
|
||||||
//$mysql = new mysqli($GLOBALS["mysql_server"],$GLOBALS["mysql_user"],$GLOBALS["mysql_pass"],$GLOBALS["mysql_db"]);
|
foreach(array("HTTP_X_FORWARDED_FOR", "HTTP_X_REAL_IP", "HTTP_FORWARDED", "HTTP_X_FORWARDED_HOST", "HTTP_CLIENT_IP") as $kopf){
|
||||||
if(isLocal()){
|
if(!empty($_SERVER[$kopf]))
|
||||||
$_SESSION["local"] =true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if(isset($_SESSION["authKey"])){
|
|
||||||
$res = mysqli_query($mysql,"SELECT id FROM users WHERE lastAuth > DATE_SUB(NOW(), INTERVAL 2 DAY) AND authKey = '".mysqli_real_escape_string($mysql,$_SESSION["authKey"])."' AND name = '".mysqli_real_escape_string($mysql,$_SESSION["user"])."';");
|
|
||||||
if(!$res){
|
|
||||||
echo mysqli_error($mysql);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(mysqli_num_rows($res) == 1){
|
|
||||||
return isset($_SESSION["Logged"]);
|
$remote = $_SERVER["REMOTE_ADDR"] ?? "";
|
||||||
|
$lokal = false;
|
||||||
|
if(is_array($lokale_netze)){
|
||||||
|
foreach($lokale_netze as $netz){
|
||||||
|
if(ipImNetz($remote, $netz)){
|
||||||
|
$lokal = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
return false;
|
$server = $_SERVER["SERVER_ADDR"] ?? "";
|
||||||
|
$lokal = str_contains($server, ":") && !str_starts_with(strtolower($server), "fe80") && ipImNetz($remote, $server."/64");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$_SESSION["local"] = $lokal;
|
||||||
|
return $lokal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Ist $_GET["addKey"] eine gültige, höchstens eine Minute alte Freigabe? */
|
||||||
function checkAdduser(){
|
function checkAdduser(){
|
||||||
global $mysql;
|
global $mysql;
|
||||||
//$mysql = new mysqli($GLOBALS["mysql_server"],$GLOBALS["mysql_user"],$GLOBALS["mysql_pass"],$GLOBALS["mysql_db"]);
|
db_abfrage($mysql, "DELETE FROM addKey WHERE datetime < DATE_SUB(NOW(), INTERVAL 1 MINUTE)") or print(mysqli_error($mysql));
|
||||||
if(!mysqli_query($mysql,"DELETE FROM addKey WHERE datetime < DATE_SUB(NOW(), INTERVAL 1 MINUTE);")){
|
// Nur reine Ziffern: accesskey ist eine Zahlenspalte, MariaDB würde
|
||||||
echo mysqli_error($mysql);
|
// "12345678xyz" beim Vergleich stillschweigend zu 12345678 machen.
|
||||||
}
|
$key = $_GET["addKey"] ?? "";
|
||||||
$result = mysqli_query($mysql,"SELECT * FROM addKey WHERE accesskey='".mysqli_real_escape_string($mysql,$_GET["addKey"])."';");
|
if(!is_string($key) || !ctype_digit($key))
|
||||||
if(!$result){
|
|
||||||
return false;
|
return false;
|
||||||
}
|
$anzahl = db_wert($mysql, "SELECT COUNT(*) FROM addKey WHERE accesskey = ?", array((int)$key));
|
||||||
if ($result->num_rows > 0) {
|
return $anzahl > 0;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
@@ -2,13 +2,20 @@
|
|||||||
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")
|
||||||
{
|
{
|
||||||
|
|
||||||
$dbconn = mysqli_connect($mysql_server, $mysql_user, $mysql_pw);
|
$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db);
|
||||||
mysqli_select_db($dbconn,$mysql_db);
|
if(!$dbconn)
|
||||||
|
$err = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
$err = 1;
|
$err = 1;
|
||||||
|
|||||||
+8
-4
@@ -1,15 +1,19 @@
|
|||||||
<?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")
|
||||||
$dir = $dirs[count($dirs)-2];
|
$dir = $dirs[count($dirs)-2];
|
||||||
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/");
|
||||||
define("CONFIG_FILE", $dir."_settings.conf");
|
define("CONFIG_FILE", $dir."_settings.conf");
|
||||||
|
|
||||||
|
|||||||
+139
@@ -0,0 +1,139 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Datenbankzugriff: Verbindungsaufbau und Prepared Statements.
|
||||||
|
*
|
||||||
|
* Neue und umgebaute Abfragen laufen über db_abfrage() und Co. Werte stehen
|
||||||
|
* im SQL nur als ? und kommen getrennt als Array - sie werden nie in den
|
||||||
|
* SQL-String eingesetzt, Escaping entfällt. Tabellen- und Spaltennamen
|
||||||
|
* (z.B. für ORDER BY) lassen sich nicht binden und müssen gegen eine feste
|
||||||
|
* Liste erlaubter Werte geprüft werden.
|
||||||
|
*
|
||||||
|
* Fehler verhalten sich wie bei mysqli_query(): Rückgabe false, Details über
|
||||||
|
* mysqli_error($dbconn). Das bestehende Muster
|
||||||
|
* db_abfrage(...) or $err = error(...mysqli_error($dbconn));
|
||||||
|
* funktioniert also unverändert.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Baut die Verbindung auf und stellt sie einheitlich ein. Gibt die
|
||||||
|
* Verbindung zurück oder false; der Grund steht dann in
|
||||||
|
* mysqli_connect_error().
|
||||||
|
*/
|
||||||
|
function db_verbinden($server, $user, $pw, $db)
|
||||||
|
{
|
||||||
|
// Seit PHP 8.1 wirft mysqli standardmäßig Exceptions. Der Code prüft
|
||||||
|
// Rückgabewerte, also das alte Verhalten wiederherstellen.
|
||||||
|
mysqli_report(MYSQLI_REPORT_OFF);
|
||||||
|
|
||||||
|
$dbconn = @mysqli_connect($server, $user, $pw, $db);
|
||||||
|
if(!$dbconn)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Ohne das behandelt der Server die Verbindung je nach Einstellung als
|
||||||
|
// latin1, und UTF-8 aus dem Browser wird doppelt kodiert gespeichert.
|
||||||
|
mysqli_set_charset($dbconn, "utf8mb4");
|
||||||
|
|
||||||
|
// Unabhängig von der Server-Konfiguration immer strikt: ungültige Werte
|
||||||
|
// und fehlende Pflichtfelder sind Fehler, statt still zu '' oder 0 zu
|
||||||
|
// werden.
|
||||||
|
mysqli_query($dbconn, "SET SESSION sql_mode = 'STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'");
|
||||||
|
|
||||||
|
return $dbconn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Führt eine Abfrage mit ?-Platzhaltern aus. Gibt bei SELECT ein
|
||||||
|
* mysqli_result zurück, sonst true, bei Fehlern false.
|
||||||
|
*
|
||||||
|
* Achtung: Prepared Statements liefern Zahlen als int/float, mysqli_query()
|
||||||
|
* lieferte Strings. db_zeilen(), db_zeile(), db_wert() und db_zuordnung()
|
||||||
|
* wandeln deshalb in Strings um, damit sich alter Code (=== "0", "1" etc.)
|
||||||
|
* gleich verhält. Wer das Ergebnis von db_abfrage() selbst ausliest, bekommt
|
||||||
|
* die nativen Typen.
|
||||||
|
*/
|
||||||
|
function db_abfrage($dbconn, $sql, $params = array())
|
||||||
|
{
|
||||||
|
return mysqli_execute_query($dbconn, $sql, array_values($params));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Werte einer Zeile als Strings wie bei mysqli_query(), NULL bleibt NULL */
|
||||||
|
function db_als_text($zeile)
|
||||||
|
{
|
||||||
|
if(!is_array($zeile))
|
||||||
|
return $zeile;
|
||||||
|
foreach($zeile as $spalte => $wert)
|
||||||
|
if($wert !== null && !is_string($wert))
|
||||||
|
$zeile[$spalte] = (string)$wert;
|
||||||
|
return $zeile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Alle Zeilen als Liste assoziativer Arrays, bei Fehlern false. */
|
||||||
|
function db_zeilen($dbconn, $sql, $params = array())
|
||||||
|
{
|
||||||
|
$res = db_abfrage($dbconn, $sql, $params);
|
||||||
|
if(!$res)
|
||||||
|
return false;
|
||||||
|
return array_map("db_als_text", mysqli_fetch_all($res, MYSQLI_ASSOC));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Erste Zeile als assoziatives Array, null ohne Treffer, bei Fehlern false. */
|
||||||
|
function db_zeile($dbconn, $sql, $params = array())
|
||||||
|
{
|
||||||
|
$res = db_abfrage($dbconn, $sql, $params);
|
||||||
|
if(!$res)
|
||||||
|
return false;
|
||||||
|
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. */
|
||||||
|
function db_wert($dbconn, $sql, $params = array())
|
||||||
|
{
|
||||||
|
$res = db_abfrage($dbconn, $sql, $params);
|
||||||
|
if(!$res)
|
||||||
|
return false;
|
||||||
|
$zeile = mysqli_fetch_row($res);
|
||||||
|
return $zeile === null || $zeile[0] === null ? null : (string)$zeile[0];
|
||||||
|
}
|
||||||
@@ -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())
|
||||||
{
|
{
|
||||||
|
|||||||
+257
-264
@@ -1,197 +1,119 @@
|
|||||||
<?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);
|
||||||
switch($fields)
|
// Ohne feste Reihenfolge kann dieselbe Zeile beim Blaettern zweimal
|
||||||
{
|
// oder gar nicht auftauchen
|
||||||
case "all":
|
$query .= " GROUP BY partner.id ORDER BY partner.id";
|
||||||
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
|
||||||
{
|
FROM partner
|
||||||
$query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr,adresse.id AS adrid, tel.nr AS tel
|
LEFT JOIN adresse ON adresse.partner_id = partner.id
|
||||||
FROM partner
|
LEFT JOIN strasse ON strasse.id = str_id
|
||||||
LEFT JOIN adresse ON adresse.partner_id = partner.id
|
LEFT JOIN ort ON ort.id = ort_id
|
||||||
LEFT JOIN strasse ON strasse.id = str_id
|
LEFT JOIN tel ON tel.partner_id = partner.id
|
||||||
LEFT JOIN ort ON ort.id = ort_id
|
LEFT JOIN kontakt ON kontakt.partner_id = partner.id
|
||||||
LEFT JOIN tel ON tel.partner_id = partner.id
|
WHERE ".($full ? "" : "updated_by = 0 AND ")."partner.typ_id = ?";
|
||||||
LEFT JOIN kontakt ON kontakt.partner_id = partner.id
|
$params = array((int)$typ);
|
||||||
WHERE updated_by = 0 AND partner.typ_id = $typ";
|
$query .= partnerSuchbedingung($src, $combiner, $fields, $params);
|
||||||
}
|
$query .= " GROUP BY adresse.id ORDER BY adresse.id";
|
||||||
else
|
|
||||||
{
|
|
||||||
$query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr,adresse.id AS adrid, tel.nr AS tel
|
|
||||||
FROM partner
|
|
||||||
LEFT JOIN adresse ON adresse.partner_id = partner.id
|
|
||||||
LEFT JOIN strasse ON strasse.id = str_id
|
|
||||||
LEFT JOIN ort ON ort.id = ort_id
|
|
||||||
LEFT JOIN tel ON tel.partner_id = partner.id
|
|
||||||
LEFT JOIN kontakt ON kontakt.partner_id = partner.id
|
|
||||||
WHERE partner.typ_id = $typ";
|
|
||||||
}
|
|
||||||
|
|
||||||
switch($fields)
|
|
||||||
{
|
|
||||||
case "all":
|
|
||||||
foreach($src AS $tag)
|
|
||||||
{
|
|
||||||
$tag = "%".$tag."%";
|
|
||||||
$query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag' OR ort LIKE '$tag' OR str LIKE '$tag' OR plz LIKE '$tag' OR partner.id LIKE '$tag')";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "kdnr":
|
|
||||||
foreach($src AS $tag)
|
|
||||||
{
|
|
||||||
$tag = "%".$tag."%";
|
|
||||||
$query .= " $combiner (partner.id LIKE '$tag')";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "name":
|
|
||||||
foreach($src AS $tag)
|
|
||||||
{
|
|
||||||
$tag = "%".$tag."%";
|
|
||||||
$query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag')";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "str":
|
|
||||||
foreach($src AS $tag)
|
|
||||||
{
|
|
||||||
$tag = "%".$tag."%";
|
|
||||||
$query .= " $combiner (str LIKE '$tag')";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "plz":
|
|
||||||
foreach($src AS $tag)
|
|
||||||
{
|
|
||||||
$tag = "%".$tag."%";
|
|
||||||
$query .= " $combiner (plz LIKE '$tag')";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "ort":
|
|
||||||
foreach($src AS $tag)
|
|
||||||
{
|
|
||||||
$tag = "%".$tag."%";
|
|
||||||
$query .= " $combiner (ort LIKE '$tag')";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "tel":
|
|
||||||
foreach($src AS $tag)
|
|
||||||
{
|
|
||||||
$tag = "%".$tag."%";
|
|
||||||
$query .= " $combiner (tel.nr LIKE '$tag')";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "kont":
|
|
||||||
foreach($src AS $tag)
|
|
||||||
{
|
|
||||||
$tag = "%".$tag."%";
|
|
||||||
$query .= " $combiner (kontakt LIKE '$tag')";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$query .= " GROUP BY adresse.id";
|
|
||||||
$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";
|
||||||
$docnr = "rechnr";
|
$combiner = $combiner == "OR" ? "OR" : "AND";
|
||||||
else
|
$params = array($id, $typ);
|
||||||
$docnr = "rechnr";
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
$query = "SELECT project.id, project.name,
|
$combiner = $combiner == "OR" ? "OR" : "AND";
|
||||||
|
$params = array($id);
|
||||||
|
$query = "SELECT project.id, project.name,
|
||||||
DATE_FORMAT(project.datetime, '%d.%m.%Y') AS date,
|
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)
|
||||||
{
|
{
|
||||||
$query = "SELECT adresse.id, adresse.partner_id, firma, vname, nname, vname2, nname2, titel_id, titel2_id, anrede_id, anrede2_id, str, hnr, ort, ortsteil,plz,ort,nr AS tel,vwahl
|
$combiner = $combiner == "OR" ? "OR" : "AND";
|
||||||
|
$params = array($id);
|
||||||
|
$query = "SELECT adresse.id, adresse.partner_id, firma, vname, nname, vname2, nname2, titel_id, titel2_id, anrede_id, anrede2_id, str, hnr, ort, ortsteil,plz,ort,nr AS tel,vwahl
|
||||||
FROM adresse
|
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,77 +266,99 @@ 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,
|
||||||
firma, vname2, nname2
|
user2.vname AS uservname2, user2.nname AS usernname2,
|
||||||
FROM termin
|
user3.vname AS uservname3, user3.nname AS usernname3,
|
||||||
LEFT JOIN termtyp ON termin.typ = termtyp.id
|
user4.vname AS uservname4, user4.nname AS usernname4,
|
||||||
LEFT JOIN adresse ON termin.adresse_id = adresse.id
|
firma, vname2, nname2
|
||||||
LEFT JOIN partner ON adresse.partner_id = partner.id
|
FROM termin
|
||||||
LEFT JOIN strasse ON adresse.str_id = strasse.id
|
LEFT JOIN termtyp ON termin.typ = termtyp.id
|
||||||
LEFT JOIN ort ON strasse.ort_id = ort.id
|
LEFT JOIN adresse ON termin.adresse_id = adresse.id
|
||||||
LEFT JOIN user ON termin.user = user.id
|
LEFT JOIN partner ON adresse.partner_id = partner.id
|
||||||
LEFT JOIN user AS user2 ON termin.user2 = user2.id
|
LEFT JOIN strasse ON adresse.str_id = strasse.id
|
||||||
LEFT JOIN user AS user3 ON termin.user3 = user3.id
|
LEFT JOIN ort ON strasse.ort_id = ort.id
|
||||||
LEFT JOIN user AS user4 ON termin.user4 = user4.id
|
LEFT JOIN user ON termin.user = user.id
|
||||||
WHERE ";
|
LEFT JOIN user AS user2 ON termin.user2 = user2.id
|
||||||
if($termtyp == 1)
|
LEFT JOIN user AS user3 ON termin.user3 = user3.id
|
||||||
$query .= "termdauer != '24:00:00' AND termtime != '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()";
|
LEFT JOIN user AS user4 ON termin.user4 = user4.id
|
||||||
elseif($termtyp == 2)
|
WHERE ";
|
||||||
$query .= "termdauer != '24:00:00' AND termtime = '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()";
|
switch((int)$termtyp)
|
||||||
elseif($termtyp == 3)
|
{
|
||||||
$query .= "termdauer != '24:00:00' AND done = 1 AND act_date < NOW()";
|
case 2:
|
||||||
elseif($termtyp == 4)
|
$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 act_date > NOW()";
|
break;
|
||||||
elseif($termtyp == 5)
|
case 3:
|
||||||
$query .= "termdauer = '24:00:00'";
|
$query .= "termdauer != '24:00:00' AND done = 1 AND act_date < NOW()";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
$query .= "termdauer != '24:00:00' AND act_date > NOW()";
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
$query .= "termdauer = '24:00:00'";
|
||||||
|
break;
|
||||||
|
// 1 ist die uebliche Ansicht und faengt zugleich unbekannte Werte ab
|
||||||
|
default:
|
||||||
|
$query .= "termdauer != '24:00:00' AND termtime != '0000-00-00 00:00:00' AND done = 0 AND act_date < NOW()";
|
||||||
|
break;
|
||||||
|
}
|
||||||
foreach($src AS $tag)
|
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)
|
||||||
{
|
{
|
||||||
$ret="";
|
$nr = isset($tel["tel"]) ? (string)$tel["tel"] : "";
|
||||||
if(isset($tel["vwahl"]) && !stristr($tel["tel"], "-") && !stristr($tel["tel"], "/"))
|
$ret = "";
|
||||||
$ret = $tel["vwahl"]."-";
|
if(!empty($tel["vwahl"]) && !str_contains($nr, "-") && !str_contains($nr, "/"))
|
||||||
$ret .= $tel["tel"];
|
$ret = zeilenHtml($tel["vwahl"])."-";
|
||||||
|
$ret .= zeilenHtml($nr);
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+160
-178
@@ -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 = "";
|
||||||
FROM termin
|
$adresse = db_zeile($dbconn,"SELECT partner_id, adresse_id
|
||||||
|
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 = "";
|
||||||
FROM termin
|
$adresse = db_zeile($dbconn,"SELECT nname, titel_id, titel2_id, vname, nname2, vname2, str, ort, plz, hnr, land, firma, anrede_id, anrede2_id
|
||||||
JOIN adresse ON termin.adresse_id = adresse.id
|
FROM termin
|
||||||
JOIN strasse ON strasse.id = str_id
|
JOIN adresse ON termin.adresse_id = adresse.id
|
||||||
|
JOIN strasse ON strasse.id = str_id
|
||||||
JOIN ort ON ort.id = ort_id JOIN land ON land.id = land_id
|
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);
|
||||||
|
|||||||
+437
-667
File diff suppressed because it is too large
Load Diff
+1149
-685
File diff suppressed because it is too large
Load Diff
+16
-18
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once("constants.php");
|
include_once("constants.php");
|
||||||
|
require_once(__DIR__."/db.php");
|
||||||
function readsettings()
|
function readsettings()
|
||||||
{
|
{
|
||||||
if(is_file(CONFIG_PATH.CONFIG_FILE))
|
if(is_file(CONFIG_PATH.CONFIG_FILE))
|
||||||
@@ -17,30 +18,27 @@ function readsettings()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Benutzereinstellungen. Werte und ids roh übergeben - nicht escapen, das
|
||||||
|
* erledigen die Platzhalter.
|
||||||
|
*/
|
||||||
function getUserSetting($dbconn,$setting, $user, $default = 0)
|
function getUserSetting($dbconn,$setting, $user, $default = 0)
|
||||||
{
|
{
|
||||||
$qry2 = mysqli_query($dbconn, "SELECT val FROM setting WHERE opt = '".mysqli_real_escape_string($dbconn, $setting)."' AND user_id = '".mysqli_real_escape_string($dbconn, $user)."'") or die(mysqli_error($dbconn));
|
$wert = db_wert($dbconn, "SELECT val FROM setting WHERE opt = ? AND user_id = ?", array($setting, $user));
|
||||||
if($res = mysqli_fetch_array($qry2))
|
if($wert === false)
|
||||||
$ret = $res[0];
|
die(mysqli_error($dbconn));
|
||||||
else
|
return $wert === null ? $default : $wert;
|
||||||
$ret = $default;
|
|
||||||
|
|
||||||
return $ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateUserSetting($dbconn,$setting, $value, $user)
|
function updateUserSetting($dbconn,$setting, $value, $user)
|
||||||
{
|
{
|
||||||
$qry = mysqli_query($dbconn,"SELECT id FROM setting WHERE opt = '".mysqli_real_escape_string($dbconn, $setting)."' AND user_id = '".mysqli_real_escape_string($dbconn, $user)."'") or die(mysqli_error($dbconn));
|
$id = db_wert($dbconn, "SELECT id FROM setting WHERE opt = ? AND user_id = ?", array($setting, $user));
|
||||||
if(mysqli_num_rows($qry))
|
if($id === false)
|
||||||
{
|
die(mysqli_error($dbconn));
|
||||||
$res = mysqli_fetch_array($qry);
|
if($id !== null)
|
||||||
mysqli_query($dbconn, "UPDATE setting SET val = '".mysqli_real_escape_string($dbconn, $value)."' WHERE id = ".$res[0]) or die($mysqli_error($dbconn));
|
db_abfrage($dbconn, "UPDATE setting SET val = ? WHERE id = ?", array($value, $id)) or die(mysqli_error($dbconn));
|
||||||
echo "update";
|
else
|
||||||
}
|
db_abfrage($dbconn, "INSERT INTO setting SET val = ?, user_id = ?, opt = ?", array($value, $user, $setting)) or die(mysqli_error($dbconn));
|
||||||
else
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn, "INSERT INTO setting SET val = '".mysqli_real_escape_string($dbconn, $value)."', user_id = '".mysqli_real_escape_string($dbconn, $user)."', opt = '".mysqli_real_escape_string($setting)."'") or die(mysqli_error($dbconn));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+569
@@ -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
@@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
function generateSalt() {
|
function generateSalt() {
|
||||||
|
|
||||||
|
|||||||
@@ -56,10 +56,8 @@ else if($action == "setup")
|
|||||||
|
|
||||||
if($settings == "valid" && $action != "setup")
|
if($settings == "valid" && $action != "setup")
|
||||||
{
|
{
|
||||||
if(!$dbconn = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw))
|
if(!$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db))
|
||||||
$err = error("Verbindung zur Datenbank fehlgeschlagen!!");
|
$err = error("Verbindung zur Datenbank fehlgeschlagen: ".htmlspecialchars(mysqli_connect_error()));
|
||||||
if(!@mysqli_select_db($dbconn,$mysql_db))
|
|
||||||
$err = error("Datenbank nicht gefunden!! ($mysql_db)");
|
|
||||||
$newversion = checknewversion($version);
|
$newversion = checknewversion($version);
|
||||||
$status = manageupdate($version, $newversion);
|
$status = manageupdate($version, $newversion);
|
||||||
$version = $status[1];
|
$version = $status[1];
|
||||||
|
|||||||
+17
-15
@@ -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);
|
||||||
|
|||||||
+4
-56
@@ -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);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+6
-206
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+6
-120
@@ -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");
|
partnerShowDaten($dbconn, $smarty, parameterGanzzahl("id"), 1);
|
||||||
$kdnres=mysqli_fetch_assoc($qry);
|
$_SESSION["camefrom"] = "kundenshow&id=".parameterGanzzahl("id");
|
||||||
$smarty->assign("kunde",$kdnres);
|
|
||||||
if($kdnres["id"])
|
|
||||||
{
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$kdnres["id"]."'");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$oldrecords[] = $res;
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$res["id"]."'");
|
|
||||||
}
|
|
||||||
$smarty->assign("oldrecords",$oldrecords);
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$kdnres["updated_by"]."'");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$newrecords[] = $res;
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$res["updated_by"]."'");
|
|
||||||
}
|
|
||||||
$smarty->assign("newrecords",$newrecords);
|
|
||||||
|
|
||||||
$tmp = array();
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT * FROM anrede");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$tmp[$res["id"]] = $res["anrede"];
|
|
||||||
}
|
|
||||||
$smarty->assign("anr",$tmp);
|
|
||||||
|
|
||||||
$tmp = array();
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT * FROM titel");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$tmp[$res["id"]] = $res["titel"];
|
|
||||||
}
|
|
||||||
$smarty->assign("titel",$tmp);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT name,typ,tel.id,nr,ort,ortsteil,plz,vwahl, ort.id AS ort_id FROM tel LEFT JOIN teltyp ON typ_id = teltyp.id LEFT JOIN ort ON ort_id = ort.id WHERE partner_id='".mysql_escape_string($_GET["id"])."' AND tel.adresse_id = 0 ORDER BY typ_id ASC");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$tels[] = $res;
|
|
||||||
}
|
|
||||||
$smarty->assign("telnrn",$tels);
|
|
||||||
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT kontakt.id, kontakt, partner_id, typ FROM kontakt LEFT JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id WHERE partner_id='".mysql_escape_string($_GET["id"])."' ORDER BY typ_id ASC");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$contacts[] = $res;
|
|
||||||
}
|
|
||||||
$smarty->assign("contacts",$contacts);
|
|
||||||
|
|
||||||
$tmp = array();
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT ktonr,iban,swift,blz,bank,partner_id,konto.id,inhaber
|
|
||||||
FROM konto JOIN bank ON konto.bank_id = bank.id WHERE partner_id='".mysql_escape_string($_GET["id"])."'")
|
|
||||||
or $err=error("Fehler beim auslesen der Konten:<br />". mysqli_error($dbconn));
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$tmp[] = $res;
|
|
||||||
}
|
|
||||||
$smarty->assign("kontos",$tmp);
|
|
||||||
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT * FROM notiz WHERE partner_id='".mysql_escape_string($_GET["id"])."'");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$res["file"] = search_file("./".UPLOADS_PATH."notes/","!^".$res["id"]."\.(.)+$!");
|
|
||||||
$notes[] = $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT COUNT(rechnr) AS nr_mahn, NOW() AS datetime FROM rechnung WHERE typ_id = 6 AND partner_id = '".mysql_escape_string($_GET["id"])."'") or $err=error("Fehler beim Auslesen der Daten:<br />".mysqli_error($dbconn));
|
|
||||||
$res=mysqli_fetch_assoc($qry);
|
|
||||||
if($res["nr_mahn"] > 0)
|
|
||||||
{
|
|
||||||
$mahn["notiz"] = "ACHTUNG! Es sind bereits ".$res["nr_mahn"]." Mahnungen für diesen Kunden vorhanden!!";
|
|
||||||
$mahn["color"] = "#f76";
|
|
||||||
$mahn["datetime"] = $res["datetime"];
|
|
||||||
$notes[] = $mahn;
|
|
||||||
}
|
|
||||||
$smarty->assign("notes",$notes);
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT plz, ortsteil, tel.nr, ort.vwahl, ort, str, DATE_FORMAT(gebdat,'%d.%m.%Y') AS gebdat, DATE_FORMAT(gebdat2,'%d.%m.%Y') AS gebdat2, hnr, vname, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, anrede2_id, titel2_id, adresstyp.typ, adresse.typ_id
|
|
||||||
FROM adresse JOIN
|
|
||||||
adresstyp ON adresstyp.id = adresse.typ_id
|
|
||||||
LEFT JOIN strasse ON str_id = strasse.id
|
|
||||||
LEFT JOIN ort ON ort_id = ort.id
|
|
||||||
LEFT JOIN land ON land_id = land.id
|
|
||||||
LEFT JOIN tel ON tel.adresse_id = adresse.id
|
|
||||||
WHERE adresse.partner_id='".mysql_escape_string($_GET["id"])."' AND adresse.typ_id != 5
|
|
||||||
ORDER BY typ_id ASC")or $err=error("Mysql-Fehler:<br />".mysqli_error($dbconn));
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$adressen[] = $res;
|
|
||||||
}
|
|
||||||
$smarty->assign("adressen",$adressen);
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT id
|
|
||||||
FROM adresse WHERE adresse.partner_id='".mysql_escape_string($_GET["id"])."' AND adresse.typ_id = 5
|
|
||||||
ORDER BY typ_id ASC")or $err=error("Mysql-Fehler:<br />".mysqli_error($dbconn));
|
|
||||||
if(mysqli_fetch_array($qry))
|
|
||||||
$smarty->assign("kommadressen",1);
|
|
||||||
|
|
||||||
$tmp=array();
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT typ, id FROM rechtyp");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$tmp[] = $res;
|
|
||||||
}
|
|
||||||
$smarty->assign("rechtypen",$tmp);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$_SESSION["camefrom"] ="kundenshow&id=".$_GET["id"];
|
|
||||||
$smarty->display("kundenshow.tpl");
|
$smarty->display("kundenshow.tpl");
|
||||||
?>
|
?>
|
||||||
|
|||||||
+5
-55
@@ -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);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+6
-190
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|||||||
+5
-118
@@ -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");
|
||||||
?>
|
?>
|
||||||
|
|||||||
+49
-138
@@ -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");
|
||||||
doneNreturn("Erfolgreich geändert");
|
|
||||||
}
|
|
||||||
elseif($_GET["storno"] == "NO" && $_GET["id"]){
|
|
||||||
$querystr = "UPDATE rechnung SET
|
|
||||||
storno = 0 WHERE id = '".$_GET["id"]."'";
|
|
||||||
mysqli_query($dbconn,$querystr) or $err=error("Fehler beim aktualisieren der Rechnung<br />".mysqli_error($dbconn));
|
|
||||||
doneNreturn("Erfolgreich geändert");
|
|
||||||
}
|
}
|
||||||
elseif($_GET["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"];
|
$mails = db_zuordnung($dbconn, "SELECT id, kontakt FROM kontakt WHERE partner_id = ? AND typ_id = 1", array($kdnres["partner_id"] ?? 0)) ?: array();
|
||||||
}
|
$smarty->assign("mails",array_values($mails));
|
||||||
$smarty->assign("anrs",$typnames);
|
$smarty->assign("mailids",array_keys($mails));
|
||||||
|
|
||||||
$typnames=array();
|
$typen = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
|
||||||
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel");
|
$smarty->assign("typids",array_keys($typen));
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
$smarty->assign("typs",array_values($typen));
|
||||||
{
|
|
||||||
$typnames[$res["id"]] = $res["titel"];
|
|
||||||
}
|
|
||||||
$smarty->assign("titels",$typnames);
|
|
||||||
|
|
||||||
$mails=array();
|
|
||||||
$mailids=array();
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT kontakt.id, kontakt, partner_id, typ FROM kontakt LEFT JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id WHERE partner_id='".mysql_escape_string($kdnres["partner_id"])."' AND typ_id = 1");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$mails[] = $res["kontakt"];
|
|
||||||
$mailids[] = $res["id"];
|
|
||||||
}
|
|
||||||
$smarty->assign("mails",$mails);
|
|
||||||
$smarty->assign("mailids",$mailids);
|
|
||||||
|
|
||||||
$typids=array();
|
|
||||||
$typnames=array();
|
|
||||||
$qry=mysqli_query($dbconn, "SELECT id,bezeichn FROM artikeltyp");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$typids[] = $res["id"];
|
|
||||||
$typnames[] = $res["bezeichn"];
|
|
||||||
}
|
|
||||||
$smarty->assign("typids",$typids);
|
|
||||||
$smarty->assign("typs",$typnames);
|
|
||||||
$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"];
|
$liste = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
|
||||||
}
|
$smarty->assign("typids",array_keys($liste));
|
||||||
$smarty->assign("anrs",$typnames);
|
$smarty->assign("typs",array_values($liste));
|
||||||
|
|
||||||
$typnames=array();
|
$liste = db_zuordnung($dbconn, "SELECT id, einheit FROM einheit") ?: array();
|
||||||
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel");
|
$smarty->assign("einhids",array_keys($liste));
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
$smarty->assign("einhs",array_values($liste));
|
||||||
{
|
|
||||||
$typnames[$res["id"]] = $res["titel"];
|
$liste = db_zuordnung($dbconn, "SELECT id, wahrung FROM wahrung") ?: array();
|
||||||
}
|
$smarty->assign("wahrids",array_keys($liste));
|
||||||
$smarty->assign("titels",$typnames);
|
$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))
|
|
||||||
{
|
$liste = db_zuordnung($dbconn, "SELECT id, CONCAT(kto, ' (', name, ')') FROM buchungsKontos") ?: array();
|
||||||
$typids[] = $res["id"];
|
$smarty->assign("buchKtoids",array_keys($liste));
|
||||||
$typnames[] = $res["ziel"];
|
$smarty->assign("buchKtos",array_values($liste));
|
||||||
}
|
|
||||||
$smarty->assign("zzielids",$typids);
|
$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"]));
|
||||||
$smarty->assign("zziels",$typnames);
|
if($res === false)
|
||||||
|
$err = error("Fehler beim Suchen nach nicht gespeicherten Daten<br />".mysqli_error($dbconn));
|
||||||
$typids=array();
|
if($res)
|
||||||
$typnames=array();
|
|
||||||
$qry=mysqli_query($dbconn, "SELECT id,kto,name FROM buchungsKontos");
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$typids[] = $res["id"];
|
|
||||||
|
|
||||||
$typnames[] = $res["kto"]." (".$res["name"].")";
|
|
||||||
}
|
|
||||||
$smarty->assign("buchKtoids",$typids);
|
|
||||||
$smarty->assign("buchKtos",$typnames);
|
|
||||||
|
|
||||||
$qry=mysqli_query($dbconn,"SELECT tmp_rechnung.id,adresse_id, vname, nname, str, hnr FROM tmp_rechnung JOIN adresse ON adresse_id = adresse.id JOIN strasse ON str_id = strasse.id WHERE tmp_rechnung.typ_id='".mysql_escape_string($_GET["type"])."' AND user_id = '".mysql_escape_string($_SESSION["user"])."' ORDER BY datetime DESC LIMIT 1") or $err=error("Fehler beim Suchen nach nicht gespeicherten Daten<br />".mysqli_error($dbconn));
|
|
||||||
if($res = mysqli_fetch_assoc($qry))
|
|
||||||
{
|
{
|
||||||
$smarty->assign("draft",$res["id"]);
|
$smarty->assign("draft",$res["id"]);
|
||||||
$smarty->assign("draftname",$res["vname"]." ".$res["nname"]);
|
$smarty->assign("draftname",$res["vname"]." ".$res["nname"]);
|
||||||
|
|||||||
+5
-4
@@ -76,12 +76,13 @@ else
|
|||||||
{
|
{
|
||||||
if($_GET["formsent"] == 1)
|
if($_GET["formsent"] == 1)
|
||||||
{
|
{
|
||||||
if(is_file("./styles/".$_POST["style"]))
|
// nur Dateien direkt in styles/, kein ../
|
||||||
|
if(basename($_POST["style"]) === $_POST["style"] && is_file("./styles/".$_POST["style"]))
|
||||||
{
|
{
|
||||||
updateUserSetting($dbconn,"style", mysqli_real_escape_string($dbconn,$_POST["style"]), mysqli_real_escape_string($dbconn,$_SESSION["user"]));
|
updateUserSetting($dbconn,"style", $_POST["style"], $_SESSION["user"]);
|
||||||
$_SESSION["style"] = $_POST["style"];
|
$_SESSION["style"] = $_POST["style"];
|
||||||
}
|
}
|
||||||
updateUserSetting($dbconn,"show_sks", mysqi_real_escape_string($dbconn,$_POST["show_sks"]), mysqli_real_escape_string($dbconn,$_SESSION["user"]));
|
updateUserSetting($dbconn,"show_sks", (int)$_POST["show_sks"], $_SESSION["user"]);
|
||||||
}
|
}
|
||||||
if(substr($_SESSION["rights"],RIGHTS_SUPERADMIN,1) & RIGHTS_CHANGE || substr($_SESSION["rights"],RIGHTS_SUPERADMIN,1) & RIGHTS_ADD)
|
if(substr($_SESSION["rights"],RIGHTS_SUPERADMIN,1) & RIGHTS_CHANGE || substr($_SESSION["rights"],RIGHTS_SUPERADMIN,1) & RIGHTS_ADD)
|
||||||
$smarty->assign("superadmin","add");
|
$smarty->assign("superadmin","add");
|
||||||
@@ -129,7 +130,7 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$show_sks = getUserSetting($dbconn,"show_sks", mysqli_real_escape_string($dbconn,$_SESSION["user"]), 1);
|
$show_sks = getUserSetting($dbconn,"show_sks", $_SESSION["user"], 1);
|
||||||
$smarty->assign("show_sks",$show_sks);
|
$smarty->assign("show_sks",$show_sks);
|
||||||
$smarty->assign("styles",$styles);
|
$smarty->assign("styles",$styles);
|
||||||
|
|
||||||
|
|||||||
+48
-62
@@ -1,71 +1,57 @@
|
|||||||
<?php
|
<?php
|
||||||
if(!isset($_POST["user"]))
|
|
||||||
$_POST["user"] = "";
|
|
||||||
else
|
|
||||||
$_POST["user"] = htmlspecialchars($_POST["user"]);
|
|
||||||
if(!isset($_POST["pass"]))
|
|
||||||
$_POST["pass"] = "";
|
|
||||||
else
|
|
||||||
$_POST["pass"] = htmlspecialchars($_POST["pass"]);
|
|
||||||
|
|
||||||
$smarty->display("heading.tpl");
|
$smarty->display("heading.tpl");
|
||||||
$smarty->assign("local",isLocal());
|
$smarty->assign("local",isLocal());
|
||||||
if(isset($_GET["formsent"]) && $_SESSION["login"] != "valid" && isLocal())
|
if(isset($_GET["formsent"]) && $_SESSION["login"] != "valid" && isLocal())
|
||||||
{
|
{
|
||||||
$qry= mysqli_query($dbconn, "SELECT salt FROM user WHERE LOWER(nick) = '".mysql_escape_string(strtolower($_POST["user"]))."' AND blocked = 0") or error("Es ist ein Fehler in der abfrage der Benutzerdaten: <br />".formaterror(mysqli_error($dbconn)));
|
// Eingaben unverändert verwenden: Passwörter werden beim Anlegen roh
|
||||||
if(mysqli_num_rows($qry) == 1)
|
// gehasht, ein htmlspecialchars() hier ließ Passwörter mit & < > " '
|
||||||
{
|
// nie passen. Ausgabe-Escaping übernimmt das Template.
|
||||||
$res = mysqli_fetch_array($qry);
|
$nick = isset($_POST["user"]) && is_string($_POST["user"]) ? $_POST["user"] : "";
|
||||||
$qry= mysqli_query($dbconn, "SELECT * FROM user WHERE nick = '".mysql_escape_string($_POST["user"])."' AND pass = '".crypt($_POST["pass"],$res[0])."'") or error("Es ist ein Fehler in der abfrage der Benutzerdaten: <br />".formaterror(mysqli_error($dbconn)));
|
$pass = isset($_POST["pass"]) && is_string($_POST["pass"]) ? $_POST["pass"] : "";
|
||||||
if(mysqli_num_rows($qry) == 1)
|
|
||||||
{
|
$udata = db_zeile($dbconn, "SELECT * FROM user WHERE nick = ? AND blocked = 0", array($nick));
|
||||||
$udata = mysqli_fetch_assoc($qry);
|
if($udata === false)
|
||||||
$_SESSION["login"] = "valid";
|
error("Es ist ein Fehler in der abfrage der Benutzerdaten: <br />".formaterror(mysqli_error($dbconn)));
|
||||||
$_SESSION["logedout"] = $udata["logedout"];
|
elseif($udata === null)
|
||||||
$_SESSION["user"] = $udata["id"];
|
|
||||||
$_SESSION["nick"] = $udata["nick"];
|
|
||||||
$_SESSION["vname"] = $udata["vname"];
|
|
||||||
$_SESSION["nname"] = $udata["nname"];
|
|
||||||
$_SESSION["rights"] = $udata["rights"];
|
|
||||||
$_SESSION["lastlogin"] = $udata["lastlogin"];
|
|
||||||
$_SESSION["numlogins"] = $udata["numlogins"];
|
|
||||||
$_SESSION["style"] = getUserSetting($dbconn,"style", $udata["id"]);
|
|
||||||
if(!is_file("styles/".$_SESSION["style"]))
|
|
||||||
{
|
|
||||||
updateUserSetting($dbconn,"style", "default.css", $udata["id"]);
|
|
||||||
$_SESSION["style"] = getUserSetting($dbconn,"style", $udata["id"]);
|
|
||||||
}
|
|
||||||
$_SESSION["zoom"] = getUserSetting($dbconn,"zoom", $_SESSION["user"], 1);
|
|
||||||
$_SESSION["privateNotes"] = getUserSetting($dbconn,"privnotes", $_SESSION["user"], "");
|
|
||||||
|
|
||||||
mysqli_query($dbconn, "UPDATE user SET wrongpw = 0, lastlogin = NOW(), numlogins = numlogins + 1, logedout = 0 WHERE nick = '".mysql_escape_string($_POST["user"])."'");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$qry= mysqli_query($dbconn, "SELECT wrongpw FROM user WHERE nick = '".mysql_escape_string($_POST["user"])."'") or error("Es ist ein Fehler in der abfrage der Benutzerdaten: <br />".formaterror(mysqli_error($dbconn)));;
|
|
||||||
if(mysqli_num_rows($qry))
|
|
||||||
{
|
|
||||||
$wrongpw = mysqli_fetch_array($qry);
|
|
||||||
if($wrongpw[0] < 10)
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn, "UPDATE user SET wrongpw = wrongpw + 1 WHERE nick = '".mysql_escape_string($_POST["user"])."'");
|
|
||||||
$triesleft = 10 - $wrongpw[0];
|
|
||||||
if($triesleft > 1)
|
|
||||||
error("Der Benuzername oder das Passwort sind falsch, bitte versuchen Sie es erneut (Nach weiteren $triesleft Versuchen wird der Benutzer deaktiviert und muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.)");
|
|
||||||
else
|
|
||||||
error("Der Benuzername oder das Passwort sind falsch, bitte versuchen Sie es erneut (Wenn der nächste Versuch falsch ist, wird der Benutzer für deaktiviert und muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.)");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn, "UPDATE user SET blocked = 1 WHERE nick = '".mysql_escape_string($_POST["user"])."'");
|
|
||||||
error("Der Benuzer wurde deaktiviert, er muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
error("Dieser Benutzername existiert nicht.");
|
error("Dieser Benutzername existiert nicht.");
|
||||||
|
elseif(hash_equals($udata["pass"], crypt($pass, $udata["salt"])))
|
||||||
|
{
|
||||||
|
// neue Session-ID nach dem Login, sonst ist Session-Fixation möglich
|
||||||
|
session_regenerate_id(true);
|
||||||
|
$_SESSION["login"] = "valid";
|
||||||
|
$_SESSION["logedout"] = $udata["logedout"];
|
||||||
|
$_SESSION["user"] = $udata["id"];
|
||||||
|
$_SESSION["nick"] = $udata["nick"];
|
||||||
|
$_SESSION["vname"] = $udata["vname"];
|
||||||
|
$_SESSION["nname"] = $udata["nname"];
|
||||||
|
$_SESSION["rights"] = $udata["rights"];
|
||||||
|
$_SESSION["lastlogin"] = $udata["lastlogin"];
|
||||||
|
$_SESSION["numlogins"] = $udata["numlogins"];
|
||||||
|
$_SESSION["style"] = getUserSetting($dbconn,"style", $udata["id"]);
|
||||||
|
if(!is_file("styles/".$_SESSION["style"]))
|
||||||
|
{
|
||||||
|
updateUserSetting($dbconn,"style", "default.css", $udata["id"]);
|
||||||
|
$_SESSION["style"] = getUserSetting($dbconn,"style", $udata["id"]);
|
||||||
|
}
|
||||||
|
$_SESSION["zoom"] = getUserSetting($dbconn,"zoom", $_SESSION["user"], 1);
|
||||||
|
$_SESSION["privateNotes"] = getUserSetting($dbconn,"privnotes", $_SESSION["user"], "");
|
||||||
|
|
||||||
|
db_abfrage($dbconn, "UPDATE user SET wrongpw = 0, lastlogin = NOW(), numlogins = numlogins + 1, logedout = 0 WHERE id = ?", array($udata["id"]));
|
||||||
|
}
|
||||||
|
elseif($udata["wrongpw"] < 10)
|
||||||
|
{
|
||||||
|
db_abfrage($dbconn, "UPDATE user SET wrongpw = wrongpw + 1 WHERE id = ?", array($udata["id"]));
|
||||||
|
$triesleft = 10 - $udata["wrongpw"];
|
||||||
|
if($triesleft > 1)
|
||||||
|
error("Der Benuzername oder das Passwort sind falsch, bitte versuchen Sie es erneut (Nach weiteren $triesleft Versuchen wird der Benutzer deaktiviert und muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.)");
|
||||||
|
else
|
||||||
|
error("Der Benuzername oder das Passwort sind falsch, bitte versuchen Sie es erneut (Wenn der nächste Versuch falsch ist, wird der Benutzer für deaktiviert und muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.)");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
db_abfrage($dbconn, "UPDATE user SET blocked = 1 WHERE id = ?", array($udata["id"]));
|
||||||
|
error("Der Benuzer wurde deaktiviert, er muss vom Hauptbenutzer wieder aktiviert werden, damit er sich anmelden kann.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if($_SESSION["login"]=="valid"){
|
if($_SESSION["login"]=="valid"){
|
||||||
header('Location:?action=kunden');
|
header('Location:?action=kunden');
|
||||||
|
|||||||
+1
-1
@@ -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");
|
||||||
|
|||||||
+14
-137
@@ -1,148 +1,25 @@
|
|||||||
<?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");
|
$smarty->assign("tabs", parameterGanzzahl("tabs") ?: ($_SESSION["termtyp"] ?? 1));
|
||||||
if($_GET["tabs"])
|
|
||||||
$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");
|
||||||
}
|
}
|
||||||
else
|
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");
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
+76
-407
@@ -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];
|
||||||
if(!$err)
|
return $ids;
|
||||||
doneNreturn("Erfolgreich gelöscht");
|
}
|
||||||
}
|
|
||||||
else{
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT * FROM termin WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
|
||||||
$res = mysqli_fetch_assoc($qry);
|
|
||||||
if(!$res)
|
|
||||||
$err = error("Dieser Termin existiert nicht!");
|
|
||||||
|
|
||||||
mysqli_query($dbconn,"DELETE FROM termin WHERE id='".$res["id"]."'") or $err=error("Konnte Haupttermin nicht löschen<br />".mysqli_error($dbconn));
|
|
||||||
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".$res["id"]."'" or $err=error("Konnte Nebentermine nicht löschen<br />".mysqli_error($dbconn)));
|
|
||||||
|
|
||||||
|
$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)
|
||||||
doneNreturn("Erfolgreich gelöscht");
|
$err = loescheTerminreihe($dbconn, $id);
|
||||||
|
if(!$err)
|
||||||
|
{
|
||||||
|
doneNreturn("Erfolgreich gelöscht");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elseif($_GET["id"] && $_GET["done"])
|
elseif(($mehrfach || $terminid) && !empty($_GET["done"]))
|
||||||
{
|
{
|
||||||
if($_GET["id"] == "multi"){
|
$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)
|
if(!$err)
|
||||||
doneNreturn("Erfolgreich geändert!");
|
$err = setzeTerminErledigt($dbconn, $id, $erledigt);
|
||||||
}
|
if(!$err)
|
||||||
else{
|
{
|
||||||
$qry = mysqli_query($dbconn,"SELECT * FROM termin WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
doneNreturn("Erfolgreich geändert!");
|
||||||
$res = mysqli_fetch_assoc($qry);
|
return;
|
||||||
if(!$res)
|
|
||||||
$err = error("Dieser Termin existiert nicht!");
|
|
||||||
|
|
||||||
if($_GET["done"] == "yes")
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE id='".$res["id"]."'") or $err=error("Konnte Haupttermin nicht als erledigt markieren<br />".mysqli_error($dbconn));
|
|
||||||
mysqli_query($dbconn,"UPDATE termin SET done = 1 WHERE main_id='".$res["id"]."'") or $err=error("Konnte Nebentermine nicht als erledigt markieren<br />".mysqli_error($dbconn));
|
|
||||||
}
|
|
||||||
elseif($_GET["done"] == "no")
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn,"UPDATE termin SET done = 0 WHERE id='".$res["id"]."'") or $err=error("Konnte Haupttermin nicht als nicht erledigt markieren<br />".mysqli_error($dbconn));
|
|
||||||
mysqli_query($dbconn,"UPDATE termin SET done = 0 WHERE main_id='".$res["id"]."'") or $err=error("Konnte Nebentermine nicht als nicht erledigt markieren<br />".mysqli_error($dbconn));
|
|
||||||
}
|
|
||||||
if(!$err)
|
|
||||||
doneNreturn("Erfolgreich geändert!");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$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
|
if(!$err && parameterGanzzahl("formsent") == 1)
|
||||||
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"])
|
|
||||||
{
|
{
|
||||||
$_GET["adressid"] = 0;
|
$err = speichereTermin($dbconn, $terminid, $adressid);
|
||||||
|
if(!$err)
|
||||||
|
{
|
||||||
|
doneNreturn("Erfolgreich eingetragen");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// bei einem Fehler die Eingaben im Formular stehen lassen
|
||||||
|
$smarty->assign("termin", $_POST);
|
||||||
}
|
}
|
||||||
if($_GET["formsent"] == 1)
|
|
||||||
{
|
|
||||||
$head = mysql_escape_string(trim($_POST["head"]));
|
|
||||||
$user = mysql_escape_string(trim($_POST["user"]));
|
|
||||||
$user2 = mysql_escape_string(trim($_POST["user2"]));
|
|
||||||
$user3 = mysql_escape_string(trim($_POST["user3"]));
|
|
||||||
$user4 = mysql_escape_string(trim($_POST["user4"]));
|
|
||||||
$text = mysql_escape_string(trim($_POST["text"]));
|
|
||||||
$typ = mysql_escape_string(trim($_POST["typ"]));
|
|
||||||
$done = mysql_escape_string(trim($_POST["done"]));
|
|
||||||
$folge = mysql_escape_string(trim($_POST["folge"]));
|
|
||||||
$folgetyp = mysql_escape_string(trim($_POST["folgetyp"]));
|
|
||||||
$folgedays = mysql_escape_string(trim($_POST["folgedays"]));
|
|
||||||
$datetime_start = dispdate_to_mysql_date(mysql_escape_string(trim($_POST["datetime_start"])),0);
|
|
||||||
$datetime_end = dispdate_to_mysql_date(mysql_escape_string(trim($_POST["datetime_end"])),1);
|
|
||||||
$_POST["termtime"] = $datetime_start;
|
|
||||||
$_POST["termend"] = $datetime_end;
|
|
||||||
$dauer = $_POST["termdauer"] = mysql_dauer($datetime_start,$datetime_end);
|
|
||||||
$days = 1;
|
|
||||||
$split_dauer = explode(":",$dauer);
|
|
||||||
if($split_dauer[0]>12 || $typ == 0)
|
|
||||||
{
|
|
||||||
$days = ceil($dauer/24);
|
|
||||||
$dauer = "24:00:00";
|
|
||||||
$_POST["termtime"] = $datetime_start = substr($datetime_start,0,11)."00:00:00";
|
|
||||||
$_POST["termend"] = $datetime_end = substr($datetime_start,0,11)."23:59:00";
|
|
||||||
}
|
|
||||||
$datetime_start_tmp =$datetime_start;
|
|
||||||
|
|
||||||
if($days > 1 && $_GET["id"])
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn,"DELETE FROM termin WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
|
||||||
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
|
||||||
|
|
||||||
$_GET["id"] = "";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
mysqli_query($dbconn,"DELETE FROM termin WHERE main_id='".mysqli_escape_string($dbconn,$_GET["id"])."' AND id != '".mysqli_escape_string($dbconn,$_GET["id"])."'");
|
|
||||||
if($done == 0){
|
|
||||||
for($i=0;$i<$days;$i++)
|
|
||||||
{
|
|
||||||
$datetime_start_tmp = date("Y-m-d H:i:s",strtotime("+".$i." day",strtotime($datetime_start)));
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT * FROM
|
|
||||||
( SELECT id,user, user2, user3, user4, termtime,
|
|
||||||
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
|
|
||||||
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
|
|
||||||
as subselect
|
|
||||||
WHERE
|
|
||||||
(user='$user' OR user2='$user' OR user3='$user' OR user4='$user') AND
|
|
||||||
(
|
|
||||||
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
|
|
||||||
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
|
|
||||||
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
|
|
||||||
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
|
|
||||||
$res=mysqli_fetch_assoc($qry);
|
|
||||||
if(!$res && $user2)
|
|
||||||
{
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT * FROM
|
|
||||||
( SELECT id,user, user2, user3, user4, termtime,
|
|
||||||
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
|
|
||||||
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
|
|
||||||
as subselect
|
|
||||||
WHERE
|
|
||||||
(user='$user2' OR user2='$user2' OR user3='$user2' OR user4='$user2') AND
|
|
||||||
(
|
|
||||||
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
|
|
||||||
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
|
|
||||||
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
|
|
||||||
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
|
|
||||||
$res=mysqli_fetch_assoc($qry);
|
|
||||||
}
|
|
||||||
if(!$res && $user3)
|
|
||||||
{
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT * FROM
|
|
||||||
( SELECT id,user, user2, user3, user4, termtime,
|
|
||||||
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
|
|
||||||
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
|
|
||||||
as subselect
|
|
||||||
WHERE
|
|
||||||
(user='$user3' OR user2='$user3' OR user3='$user3' OR user4='$user3') AND
|
|
||||||
(
|
|
||||||
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
|
|
||||||
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
|
|
||||||
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
|
|
||||||
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
|
|
||||||
$res=mysqli_fetch_assoc($qry);
|
|
||||||
}
|
|
||||||
if(!$res && $user4)
|
|
||||||
{
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT * FROM
|
|
||||||
( SELECT id,user, user2, user3, user4, termtime,
|
|
||||||
DATE_ADD(termtime,INTERVAL CONCAT(HOUR(termdauer),' ',MINUTE(termdauer)) HOUR_MINUTE)as termend
|
|
||||||
FROM termin WHERE termtime != '0000-00-00 00:00:00' AND done = 0)
|
|
||||||
as subselect
|
|
||||||
WHERE
|
|
||||||
(user='$user4' OR user2='$user4' OR user3='$user4' OR user4='$user4') AND
|
|
||||||
(
|
|
||||||
('$datetime_start_tmp' >= termtime AND '$datetime_start_tmp' < termend) OR
|
|
||||||
('$datetime_end' > termtime AND '$datetime_end' <= termend) OR
|
|
||||||
('$datetime_start_tmp' <= termtime AND '$datetime_end' >= termend)
|
|
||||||
)") or $err=error("Fehler beim überprüfen von Überlappungen<br />".mysqli_error($dbconn));
|
|
||||||
$res=mysqli_fetch_assoc($qry);
|
|
||||||
}
|
|
||||||
if($res && $res["id"] != $_GET["id"])
|
|
||||||
{
|
|
||||||
$err=error("Dieser Mitarbeiter hat zu der Zeit bereits einen Termin, er kann nicht an zwei Orten gleichzeitig sein.");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$err)
|
|
||||||
{
|
|
||||||
|
|
||||||
for($i=0;$i<$days;$i++)
|
|
||||||
{
|
|
||||||
$datetime_start_tmp = date("Y-m-d H:i:s",strtotime("+".$i." day",strtotime($datetime_start)));
|
|
||||||
if(strstr($datetime_start_tmp,"1970")){
|
|
||||||
echo "NICHTTERMINIERT!!";
|
|
||||||
$datetime_start_tmp = "0000-00-00 00:00:00";
|
|
||||||
}
|
|
||||||
if($_GET["id"])
|
|
||||||
{
|
|
||||||
$qry=mysqli_query($dbconn,"SELECT * FROM termin WHERE id = '".mysqli_escape_string($dbconn,($_GET["id"]))."'");
|
|
||||||
if ($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
if($done && $folge && !$res["followed_by"] && !$i)
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
|
|
||||||
text='',
|
|
||||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
|
||||||
typ='$folgetyp',
|
|
||||||
changetime=NOW(),
|
|
||||||
datetime=NOW(),
|
|
||||||
done='0',
|
|
||||||
termtime='',
|
|
||||||
termdauer='',
|
|
||||||
user='$user',
|
|
||||||
user2='$user2',
|
|
||||||
user3='$user3',
|
|
||||||
user4='$user4',
|
|
||||||
changeuser='".$_SESSION["user"]."',
|
|
||||||
act_date=DATE_ADD(CURDATE(),INTERVAL $folgedays DAY)") or $err=error("Fehler beim anlegen des Folgetermins<br />".mysqli_error($dbconn));
|
|
||||||
$res["followed_by"] = mysqli_insert_id($dbconn);
|
|
||||||
mysqli_query($dbconn,"UPDATE termin SET main_id = '".$res["followed_by"]."' WHERE id='".$res["followed_by"]."'");
|
|
||||||
}
|
|
||||||
if(!$i)
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn,"UPDATE termin SET head='$head',
|
|
||||||
text='$text',
|
|
||||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
|
||||||
typ='$typ',
|
|
||||||
changetime=NOW(),
|
|
||||||
done='$done',
|
|
||||||
termtime='$datetime_start_tmp',
|
|
||||||
termdauer='$dauer',
|
|
||||||
changeuser='".$_SESSION["user"]."',
|
|
||||||
user='$user',
|
|
||||||
user2='$user2',
|
|
||||||
user3='$user3',
|
|
||||||
user4='$user4',
|
|
||||||
followed_by='".$res["followed_by"]."'
|
|
||||||
WHERE id='".mysqli_escape_string($dbconn,$_GET["id"])."'") or $err=error("Fehler beim ändern des Termins<br />".mysqli_error($dbconn));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
$err=error("dieser Termin existiert nicht!");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if($done && $folge && !$err && !$i)
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
|
|
||||||
text='',
|
|
||||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
|
||||||
typ='$folgetyp',
|
|
||||||
changetime=NOW(),
|
|
||||||
datetime=NOW(),
|
|
||||||
done='0',
|
|
||||||
termtime='',
|
|
||||||
termdauer='',
|
|
||||||
changeuser='".$_SESSION["user"]."',
|
|
||||||
user='$user',
|
|
||||||
user2='$user2',
|
|
||||||
user3='$user3',
|
|
||||||
user4='$user4',
|
|
||||||
act_date=DATE_ADD(CURDATE(),INTERVAL $folgedays DAY)") or $err=error("Fehler beim anlegen des Folgetermins<br />".mysqli_error($dbconn));
|
|
||||||
$res["followed_by"] = mysqli_insert_id($dbconn);
|
|
||||||
mysqli_query($dbconn,"UPDATE termin SET main_id = '".$res["followed_by"]."' WHERE id='".$res["followed_by"]."'");
|
|
||||||
}
|
|
||||||
if(!$err)
|
|
||||||
{
|
|
||||||
if(!$i)
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
|
|
||||||
text='$text',
|
|
||||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
|
||||||
typ='$typ',
|
|
||||||
changetime=NOW(),
|
|
||||||
datetime=NOW(),
|
|
||||||
done='$done',
|
|
||||||
termtime='$datetime_start_tmp',
|
|
||||||
termdauer='$dauer',
|
|
||||||
changeuser='".$_SESSION["user"]."',
|
|
||||||
user='$user',
|
|
||||||
user2='$user2',
|
|
||||||
user3='$user3',
|
|
||||||
user4='$user4',
|
|
||||||
followed_by='".$res["followed_by"]."'") or $err=error("Fehler beim anlegen des Termins<br />".mysqli_error($dbconn));
|
|
||||||
$main_id = mysqli_insert_id($dbconn);
|
|
||||||
mysqli_query($dbconn,"UPDATE termin SET main_id = '$main_id' WHERE id='$main_id'");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mysqli_query($dbconn,"INSERT INTO termin SET head='$head',
|
|
||||||
text='$text',
|
|
||||||
adresse_id='".mysqli_escape_string($dbconn,$_GET["adressid"])."',
|
|
||||||
typ='$typ',
|
|
||||||
changetime=NOW(),
|
|
||||||
datetime=NOW(),
|
|
||||||
done='$done',
|
|
||||||
termtime='$datetime_start_tmp',
|
|
||||||
termdauer='$dauer',
|
|
||||||
changeuser='".$_SESSION["user"]."',
|
|
||||||
user='$user',
|
|
||||||
user2='$user2',
|
|
||||||
user3='$user3',
|
|
||||||
user4='$user4',
|
|
||||||
main_id='$main_id',
|
|
||||||
followed_by='".$res["followed_by"]."'") or $err=error("Fehler beim anlegen des Termins<br />".mysqli_error($dbconn));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!$err)
|
|
||||||
{
|
|
||||||
doneNreturn("Erfolgreich eingetragen");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if($err){
|
|
||||||
$smarty->assign("termin",$_POST);
|
|
||||||
}
|
|
||||||
//elseif(!$head)
|
|
||||||
// $err=error("Bitte geben Sie eine Terminbeschreibung an!");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT id, typ
|
|
||||||
FROM termtyp WHERE id > 0") or $err = error("Fehler beim abrufen der Termintypen<br />".mysqli_error($dbconn));
|
|
||||||
while($res = mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$typids[] =$res["id"];
|
|
||||||
$typs[] = $res["typ"];
|
|
||||||
}
|
|
||||||
$smarty->assign("typs",$typs);
|
|
||||||
$smarty->assign("typids",$typids);
|
|
||||||
|
|
||||||
$typids=array();
|
|
||||||
$typs=array();
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT id, vname, nname
|
|
||||||
FROM user WHERE blocked = 0 AND id > 0") or $err = error("Fehler beim abrufen der Benutzer<br />".mysqli_error($dbconn));
|
|
||||||
while($res = mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$typids[] =$res["id"];
|
|
||||||
$typs[] = $res["vname"]." ".$res["nname"];
|
|
||||||
}
|
|
||||||
$smarty->assign("users",$typs);
|
|
||||||
$smarty->assign("userids",$typids);
|
|
||||||
$typs[]="Keiner";
|
|
||||||
$typids[]=0;
|
|
||||||
$smarty->assign("optusers",$typs);
|
|
||||||
$smarty->assign("optuserids",$typids);
|
|
||||||
|
|
||||||
$smarty->assign("days",array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40));
|
|
||||||
$smarty->assign("kunde",$kdnres);
|
|
||||||
if($_GET["id"])
|
|
||||||
{
|
|
||||||
$qry=mysqli_query($dbconn,"SELECT MIN(termtime) AS termtime,
|
|
||||||
SEC_TO_TIME(SUM(TIME_TO_SEC(termdauer))) AS termdauer,
|
|
||||||
head,
|
|
||||||
followed_by,
|
|
||||||
MIN(id) AS id,
|
|
||||||
main_id,
|
|
||||||
typ,adresse_id,
|
|
||||||
done,
|
|
||||||
user,
|
|
||||||
user2,
|
|
||||||
user3,
|
|
||||||
user4,
|
|
||||||
changeuser,
|
|
||||||
act_date,
|
|
||||||
text
|
|
||||||
FROM termin WHERE main_id = '".mysqli_escape_string($dbconn,$_GET["id"])."' GROUP BY main_id");
|
|
||||||
if ($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
|
|
||||||
if($res["followed_by"] > 0)
|
|
||||||
{
|
|
||||||
$qry2=mysqli_query($dbconn, "SELECT DATE_FORMAT(act_date,'%Y-%m-%d'), typ_id FROM termin WHERE id = '".$res["followed_by"]."'");
|
|
||||||
$res2=mysqli_fetch_assoc($qry2);
|
|
||||||
$days = (strtotime($res2["act_date"]) - strtotime(date("Y-m-d"))) / (60 * 60 * 24);
|
|
||||||
$res["folgetyp"]= $res2["typ_id"];
|
|
||||||
if($days > 0)
|
|
||||||
$res["folgedays"] = $days;
|
|
||||||
}
|
|
||||||
$res["termend"] = dauer_to_date($res["termtime"], $res["termdauer"]);
|
|
||||||
if(strstr($res["termend"],"00:00:00")){
|
|
||||||
$res["termend"] = date("Y-m-d H:i:s",strtotime("-1 minutes",strtotime($res["termend"])));
|
|
||||||
}
|
|
||||||
$smarty->assign("termin",$res);
|
|
||||||
if($_GET["adressid"])
|
|
||||||
$smarty->assign("heading","Termin ändern");
|
|
||||||
else
|
|
||||||
$smarty->assign("heading","Urlaub / Krankheit ändern");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$err=error("Dieser Termin existiert nicht!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
$smarty->assign("termin",$_POST);
|
|
||||||
|
|
||||||
if($_GET["adressid"]){
|
|
||||||
$smarty->assign("heading","Neuer Termin");
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$smarty->assign("heading","Neuer Urlaub / Krankheitstag");
|
|
||||||
$typids=array();
|
|
||||||
$typs=array();
|
|
||||||
$qry = mysqli_query($dbconn,"SELECT id, typ
|
|
||||||
FROM termtyp WHERE typ = 'Urlaub' OR typ = 'Krankheit'") or $err = error("Fehler beim abrufen der Termintypen<br />".mysqli_error($dbconn));
|
|
||||||
while($res = mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
$typids[] =$res["id"];
|
|
||||||
$typs[] = $res["typ"];
|
|
||||||
}
|
|
||||||
$smarty->assign("vac_types_id",$typids);
|
|
||||||
$smarty->assign("vac_types_name",$typs);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$smarty->display("heading.tpl");
|
|
||||||
$smarty->display("addtermin.tpl");
|
|
||||||
|
|
||||||
|
terminAuswahllisten($dbconn, $smarty);
|
||||||
|
$smarty->assign("kunde", $kunde);
|
||||||
|
$smarty->assign("user", parameterGanzzahl("user"));
|
||||||
|
|
||||||
?>
|
if($terminid && !$err)
|
||||||
|
{
|
||||||
|
$termin = terminZumBearbeiten($dbconn, $terminid);
|
||||||
|
if(!$termin)
|
||||||
|
$err = error("Dieser Termin existiert nicht!");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$smarty->assign("termin", $termin);
|
||||||
|
$smarty->assign("heading", $adressid ? "Termin ändern" : "Urlaub / Krankheit ändern");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif(!$terminid)
|
||||||
|
{
|
||||||
|
if(!$err)
|
||||||
|
$smarty->assign("termin", $_POST);
|
||||||
|
$smarty->assign("heading", $adressid ? "Neuer Termin" : "Neuer Urlaub / Krankheitstag");
|
||||||
|
}
|
||||||
|
|
||||||
|
$smarty->display("heading.tpl");
|
||||||
|
$smarty->display("addtermin.tpl");
|
||||||
|
?>
|
||||||
|
|||||||
+38
-64
@@ -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"])) : "";
|
||||||
{
|
|
||||||
$termin=maketerminarray($dbconn, $_GET["id"]);
|
|
||||||
$adresse=maketerminadresse($dbconn, $_GET["id"]);
|
|
||||||
$telnrn=maketelnrn($dbconn,$_GET["id"]);
|
|
||||||
makesingleterminpage($pdf,$termin,$adresse,$telnrn,0);
|
|
||||||
}
|
|
||||||
elseif($_GET["date"])
|
|
||||||
{
|
|
||||||
$qry=mysqli_query($dbconn,"SELECT id FROM termin WHERE adresse_id AND DATE_FORMAT(termtime,'%Y%m%d') = '".date("Ymd",strtotime($_GET["date"]))."' ORDER BY termtime ASC");
|
|
||||||
if($_GET["type"]="singlepages")
|
|
||||||
{
|
|
||||||
$prevpage=0;
|
|
||||||
while($res=mysqli_fetch_assoc($qry))
|
|
||||||
{
|
|
||||||
if($prevpage)
|
|
||||||
$pdf->addpage();
|
|
||||||
$prevpage=1;
|
|
||||||
$termin=maketerminarray($dbconn, $res["id"]);
|
|
||||||
$adresse=maketerminadresse($dbconn, $res["id"]);
|
|
||||||
$telnrn=maketelnrn($dbconn,$res["id"]);
|
|
||||||
makesingleterminpage($pdf,$termin,$adresse,$telnrn,0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
|
|
||||||
savePDF($pdf,"./temp/pdftemp/$tmppdfname.pdf");
|
|
||||||
$smarty->assign("pdffile","./temp/pdftemp/$tmppdfname.pdf");
|
|
||||||
|
|
||||||
$pdf = makerawPDFanfahrt(0);
|
$ids = array();
|
||||||
if($_GET["id"] && !$_GET["date"])
|
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)
|
||||||
$googleadresse=makegooglestring($dbconn, $_GET["id"]);
|
$ids[] = $z["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");
|
|
||||||
|
|
||||||
|
/* $anfahrt = 0 für den Terminzettel, 1 für die Seite mit der Karte */
|
||||||
|
function terminzettel($dbconn, $ids, $anfahrt)
|
||||||
|
{
|
||||||
|
$pdf = $anfahrt ? makerawPDFanfahrt(0) : makerawPDFcopy(0);
|
||||||
|
$erste = true;
|
||||||
|
foreach($ids as $id)
|
||||||
|
{
|
||||||
|
if(!$erste)
|
||||||
|
$pdf->addpage();
|
||||||
|
$erste = false;
|
||||||
|
$googleadresse = $anfahrt ? makegooglestring($dbconn, $id) : "";
|
||||||
|
makesingleterminpage($pdf, maketerminarray($dbconn, $id), maketerminadresse($dbconn, $id),
|
||||||
|
maketelnrn($dbconn, $id), $anfahrt, $googleadresse);
|
||||||
|
}
|
||||||
|
$name = str_replace(array(" ", "."), array("_", "_"), microtime());
|
||||||
|
savePDF($pdf, "./temp/pdftemp/$name.pdf");
|
||||||
|
return "./temp/pdftemp/$name.pdf";
|
||||||
|
}
|
||||||
|
|
||||||
|
$smarty->assign("pdffile", terminzettel($dbconn, $ids, 0));
|
||||||
|
$smarty->assign("pdffile2", terminzettel($dbconn, $ids, 1));
|
||||||
$smarty->display("terminshow.tpl");
|
$smarty->display("terminshow.tpl");
|
||||||
|
?>
|
||||||
|
|
||||||
?>
|
|
||||||
|
|||||||
+3
-15
@@ -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");
|
||||||
|
|||||||
+12
-8
@@ -2,7 +2,12 @@
|
|||||||
|
|
||||||
|
|
||||||
if(isset($_GET["id"]) && isset($_GET["addKey"])){
|
if(isset($_GET["id"]) && isset($_GET["addKey"])){
|
||||||
if (checkAdduser($_GET["addUser"])) {
|
if (checkAdduser()) {
|
||||||
|
// Freigabe einlösen: gilt 5 Minuten, nur für diesen Benutzer und nur
|
||||||
|
// in dieser Session (geprüft in authServer.php). Der addKey ist damit
|
||||||
|
// verbraucht.
|
||||||
|
$_SESSION["passkey_freigabe"] = array("user" => (int)$_GET["id"], "bis" => time() + 300);
|
||||||
|
db_abfrage($mysql, "DELETE FROM addKey WHERE accesskey = ?", array((int)$_GET["addKey"]));
|
||||||
echo <<<ENDE
|
echo <<<ENDE
|
||||||
<html>
|
<html>
|
||||||
<head></head>
|
<head></head>
|
||||||
@@ -73,15 +78,14 @@ if(isset($_GET["id"]) && isset($_GET["addKey"])){
|
|||||||
$smarty->assign("heading","Passkeys für externen Zugang verwalten");
|
$smarty->assign("heading","Passkeys für externen Zugang verwalten");
|
||||||
$smarty->display("heading.tpl");
|
$smarty->display("heading.tpl");
|
||||||
|
|
||||||
$qry = mysqli_query($_SESSION["dbconn"],"SELECT id, vname, nname FROM user WHERE blocked = 0 AND user.id = ".mysqli_real_escape_string($_SESSION["dbconn"],$_GET["id"])) or die("Datenbank fehler: ".mysqli_error($_SESSION["dbconn"]));
|
$row = db_zeile($dbconn, "SELECT id, vname, nname FROM user WHERE blocked = 0 AND user.id = ?", array($_GET["id"]));
|
||||||
$row=mysqli_fetch_array($qry);
|
if($row === false)
|
||||||
|
die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||||
$smarty->assign("user",$row);
|
$smarty->assign("user",$row);
|
||||||
|
|
||||||
$qry = mysqli_query($_SESSION["dbconn"],"SELECT passkeys.id , passkeys.name FROM user JOIN passkeys ON user.id = passkeys.userId WHERE blocked = 0 AND user.id = ".mysqli_real_escape_string($_SESSION["dbconn"],$_GET["id"])) or die("Datenbank fehler: ".mysqli_error($_SESSION["dbconn"]));
|
$keys = db_zeilen($dbconn, "SELECT passkeys.id, passkeys.name FROM user JOIN passkeys ON user.id = passkeys.userId WHERE blocked = 0 AND user.id = ?", array($_GET["id"]));
|
||||||
$keys = array();
|
if($keys === false)
|
||||||
while($row=mysqli_fetch_array($qry)){
|
die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||||
$keys[] = $row;
|
|
||||||
}
|
|
||||||
$smarty->assign("keys",$keys);
|
$smarty->assign("keys",$keys);
|
||||||
$smarty->assign("local",isLocal());
|
$smarty->assign("local",isLocal());
|
||||||
$smarty->display("userkeys.tpl");
|
$smarty->display("userkeys.tpl");
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -9,8 +17,7 @@
|
|||||||
// Zugang zur Statistik-Datenbank steht in der externen Config
|
// Zugang zur Statistik-Datenbank steht in der externen Config
|
||||||
require_once("incs/settings.php");
|
require_once("incs/settings.php");
|
||||||
readsettings();
|
readsettings();
|
||||||
$dbconn = mysqli_connect($stats_mysql_server, $stats_mysql_user, $stats_mysql_pw) or die("Keine Verbindung zur Statistik-Datenbank.");
|
$dbconn = db_verbinden($stats_mysql_server, $stats_mysql_user, $stats_mysql_pw, $stats_mysql_db) or die("Keine Verbindung zur Statistik-Datenbank.");
|
||||||
mysqli_select_db($dbconn, $stats_mysql_db);
|
|
||||||
|
|
||||||
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
|
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
|
||||||
// Dataset definition
|
// Dataset definition
|
||||||
|
|||||||
+138
-138
@@ -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>
|
||||||
|
|||||||
@@ -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
@@ -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 />
|
||||||
|
|||||||
@@ -1,276 +0,0 @@
|
|||||||
<p>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
|
|
||||||
</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,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,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>
|
||||||
|
|||||||
@@ -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
@@ -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¬izid={$note.id}'><span class='edit' title="Notiz ändern"></span></a>
|
<a href='?action=kundenchange&do=notiz¬izid={$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¬izid={$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¬izid={$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}
|
||||||
|
|||||||
@@ -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
@@ -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>
|
||||||
|
|||||||
@@ -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" >
|
||||||
|
|||||||
@@ -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}"}
|
||||||
|
|||||||
@@ -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 />
|
||||||
|
|||||||
@@ -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¬izid={$notizid}" method='POST' enctype="multipart/form-data">
|
<form action="?action={$frmact}&do=notiz&kunde={$kunde|escape}&formsent=1¬izid={$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=' ' escape=0 labels=1}
|
{html_radios name='color' options=$colors selected={$color|default:'#fff'|escape} separator=' ' 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>
|
||||||
|
|||||||
@@ -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}"}
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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,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
@@ -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>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<table><tr><th>Name</th><th>Aktion</th></tr>
|
<table><tr><th>Name</th><th>Aktion</th></tr>
|
||||||
{foreach $keys as $key}
|
{foreach $keys as $key}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{$key.name}</td>
|
<td>{$key.name|escape}</td>
|
||||||
<td><a href="?action=userkeys&id={$user.id}&del={$key.id}"><span class="del" title="Passkey löschen"></span></a></td>
|
<td><a href="?action=userkeys&id={$user.id}&del={$key.id}"><span class="del" title="Passkey löschen"></span></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
|
|||||||
@@ -0,0 +1,420 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Migration einer Instanz-Datenbank auf das Schema update/schema.sql
|
||||||
|
* (utf8mb4) mit Reparatur doppelt kodierter Texte.
|
||||||
|
*
|
||||||
|
* Hintergrund: Die Anwendung hat jahrelang UTF-8 aus dem Browser über eine
|
||||||
|
* Verbindung geschrieben, die der Server als latin1 behandelt hat. Aus "ä"
|
||||||
|
* wurde dabei "ä". Datensätze, die auf anderem Weg entstanden sind
|
||||||
|
* (phpMyAdmin, neuere Server-Defaults), können dagegen korrekt sein. Deshalb
|
||||||
|
* wird jeder Wert einzeln geprüft und nur repariert, wenn er eindeutig
|
||||||
|
* doppelt kodiert ist.
|
||||||
|
*
|
||||||
|
* Aufruf im Installationsverzeichnis der Instanz (die Zugangsdaten kommen
|
||||||
|
* aus deren Config):
|
||||||
|
*
|
||||||
|
* php update/migration-utf8mb4.php pruefen
|
||||||
|
* Liest nur und gibt einen Bericht aus. Ändert nichts.
|
||||||
|
*
|
||||||
|
* php update/migration-utf8mb4.php migrieren <zieldatenbank>
|
||||||
|
* Legt die Zieldatenbank mit update/schema.sql an und kopiert alle
|
||||||
|
* Daten hinein. Die Quelldatenbank bleibt unverändert. Die Ziel-
|
||||||
|
* datenbank darf noch nicht existieren oder muss leer sein.
|
||||||
|
*
|
||||||
|
* Für lokale Tests lässt sich die Config übergehen:
|
||||||
|
* --server=127.0.0.1:3307 --user=root --db=wagner
|
||||||
|
* Das Passwort kommt dann aus der Umgebungsvariable MIGRATION_PW, damit es
|
||||||
|
* nicht in der Prozessliste steht.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(PHP_SAPI != "cli")
|
||||||
|
exit("Nur per Kommandozeile aufrufbar.\n");
|
||||||
|
|
||||||
|
require_once(__DIR__."/../incs/db.php");
|
||||||
|
|
||||||
|
function fehler($text)
|
||||||
|
{
|
||||||
|
fwrite(STDERR, "FEHLER: ".$text."\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------
|
||||||
|
* Kodierung
|
||||||
|
* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Umkehrung dessen, was MariaDB beim Speichern gemacht hat: Unicode-Text
|
||||||
|
* zurück in die Bytes von MySQL-"latin1" (das ist cp1252; die fünf dort
|
||||||
|
* undefinierten Bytes bildet MySQL auf U+0081, U+008D, U+008F, U+0090 und
|
||||||
|
* U+009D ab). Gibt null zurück, wenn ein Zeichen in latin1 nicht vorkommt -
|
||||||
|
* dann kann der Wert nicht über eine latin1-Verbindung entstanden sein.
|
||||||
|
*/
|
||||||
|
function latin1Bytes($text)
|
||||||
|
{
|
||||||
|
static $cp1252 = array(
|
||||||
|
0x20AC => 0x80, 0x201A => 0x82, 0x0192 => 0x83, 0x201E => 0x84,
|
||||||
|
0x2026 => 0x85, 0x2020 => 0x86, 0x2021 => 0x87, 0x02C6 => 0x88,
|
||||||
|
0x2030 => 0x89, 0x0160 => 0x8A, 0x2039 => 0x8B, 0x0152 => 0x8C,
|
||||||
|
0x017D => 0x8E, 0x2018 => 0x91, 0x2019 => 0x92, 0x201C => 0x93,
|
||||||
|
0x201D => 0x94, 0x2022 => 0x95, 0x2013 => 0x96, 0x2014 => 0x97,
|
||||||
|
0x02DC => 0x98, 0x2122 => 0x99, 0x0161 => 0x9A, 0x203A => 0x9B,
|
||||||
|
0x0153 => 0x9C, 0x017E => 0x9E, 0x0178 => 0x9F,
|
||||||
|
0x0081 => 0x81, 0x008D => 0x8D, 0x008F => 0x8F, 0x0090 => 0x90,
|
||||||
|
0x009D => 0x9D,
|
||||||
|
);
|
||||||
|
$bytes = "";
|
||||||
|
foreach(preg_split('//u', $text, -1, PREG_SPLIT_NO_EMPTY) as $zeichen)
|
||||||
|
{
|
||||||
|
$cp = codepoint($zeichen);
|
||||||
|
if($cp < 0x80 || ($cp >= 0xA0 && $cp <= 0xFF))
|
||||||
|
$bytes .= chr($cp);
|
||||||
|
elseif(isset($cp1252[$cp]))
|
||||||
|
$bytes .= chr($cp1252[$cp]);
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return $bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
function codepoint($zeichen)
|
||||||
|
{
|
||||||
|
$b = array_values(unpack("C*", $zeichen));
|
||||||
|
switch(count($b))
|
||||||
|
{
|
||||||
|
case 1: return $b[0];
|
||||||
|
case 2: return (($b[0] & 0x1F) << 6) | ($b[1] & 0x3F);
|
||||||
|
case 3: return (($b[0] & 0x0F) << 12) | (($b[1] & 0x3F) << 6) | ($b[2] & 0x3F);
|
||||||
|
default: return (($b[0] & 0x07) << 18) | (($b[1] & 0x3F) << 12) | (($b[2] & 0x3F) << 6) | ($b[3] & 0x3F);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ordnet einen Textwert ein und liefert array(kategorie, neuer_wert).
|
||||||
|
*
|
||||||
|
* ascii nur ASCII, unverändert
|
||||||
|
* korrekt enthält Nicht-ASCII, ist aber kein doppelt kodierter Text
|
||||||
|
* repariert war doppelt kodiert
|
||||||
|
* mehrfach war mehr als doppelt kodiert
|
||||||
|
* unklar sieht teilweise doppelt kodiert aus, lässt sich aber nicht
|
||||||
|
* eindeutig zurückführen; bleibt unverändert
|
||||||
|
*/
|
||||||
|
function pruefeText($wert)
|
||||||
|
{
|
||||||
|
if(!preg_match('/[^\x00-\x7F]/', $wert))
|
||||||
|
return array("ascii", $wert);
|
||||||
|
|
||||||
|
$runden = 0;
|
||||||
|
$aktuell = $wert;
|
||||||
|
while($runden < 5)
|
||||||
|
{
|
||||||
|
$bytes = latin1Bytes($aktuell);
|
||||||
|
// Echte Umlaute in latin1-Bytes ("M\xFCller") sind kein gültiges
|
||||||
|
// UTF-8. Nur wenn die Bytes gültiges UTF-8 mit Nicht-ASCII ergeben,
|
||||||
|
// war der Text doppelt kodiert.
|
||||||
|
if($bytes === null || !preg_match('//u', $bytes) || !preg_match('/[^\x00-\x7F]/', $bytes))
|
||||||
|
break;
|
||||||
|
$aktuell = $bytes;
|
||||||
|
$runden++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($runden == 1)
|
||||||
|
return array("repariert", $aktuell);
|
||||||
|
if($runden > 1)
|
||||||
|
return array("mehrfach", $aktuell);
|
||||||
|
|
||||||
|
// Typische Reste doppelter Kodierung neben Zeichen, die nicht aus
|
||||||
|
// latin1 stammen können: gemischter Wert, nicht automatisch lösbar.
|
||||||
|
if(preg_match('/[\x{00C2}\x{00C3}][\x{0080}-\x{00BF}\x{0152}\x{0153}\x{0160}\x{0161}\x{0178}\x{017D}\x{017E}\x{0192}\x{02C6}\x{02DC}\x{2013}\x{2014}\x{2018}-\x{201E}\x{2020}-\x{2022}\x{2026}\x{2030}\x{2039}\x{203A}\x{20AC}\x{2122}]/u', $wert))
|
||||||
|
return array("unklar", $wert);
|
||||||
|
|
||||||
|
return array("korrekt", $wert);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------
|
||||||
|
* Aufruf und Verbindung
|
||||||
|
* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
$modus = null;
|
||||||
|
$zielDb = null;
|
||||||
|
$optionen = array();
|
||||||
|
foreach(array_slice($argv, 1) as $arg)
|
||||||
|
{
|
||||||
|
if(preg_match('/^--(server|user|db)=(.*)$/', $arg, $m))
|
||||||
|
$optionen[$m[1]] = $m[2];
|
||||||
|
elseif($modus === null)
|
||||||
|
$modus = $arg;
|
||||||
|
elseif($zielDb === null)
|
||||||
|
$zielDb = $arg;
|
||||||
|
else
|
||||||
|
fehler("Unbekanntes Argument: ".$arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($modus != "pruefen" && $modus != "migrieren")
|
||||||
|
fehler("Aufruf: php update/migration-utf8mb4.php pruefen | migrieren <zieldatenbank>");
|
||||||
|
if($modus == "migrieren" && !preg_match('/^[A-Za-z0-9_]+$/', (string)$zielDb))
|
||||||
|
fehler("Zieldatenbank fehlt oder enthält unzulässige Zeichen.");
|
||||||
|
|
||||||
|
if(isset($optionen["db"]))
|
||||||
|
{
|
||||||
|
$server = isset($optionen["server"]) ? $optionen["server"] : "localhost";
|
||||||
|
$user = isset($optionen["user"]) ? $optionen["user"] : "";
|
||||||
|
$pw = (string)getenv("MIGRATION_PW");
|
||||||
|
$quellDb = $optionen["db"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
require_once(__DIR__."/../incs/constants.php");
|
||||||
|
require_once(__DIR__."/../incs/settings.php");
|
||||||
|
if(readsettings() != "valid")
|
||||||
|
fehler("Konfiguration ".CONFIG_PATH.CONFIG_FILE." nicht lesbar. Im Installationsverzeichnis der Instanz aufrufen.");
|
||||||
|
$server = $mysql_server;
|
||||||
|
$user = $mysql_user;
|
||||||
|
$pw = $mysql_pw;
|
||||||
|
$quellDb = $mysql_db;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($modus == "migrieren" && strcasecmp($zielDb, $quellDb) == 0)
|
||||||
|
fehler("Quelle und Ziel sind dieselbe Datenbank.");
|
||||||
|
|
||||||
|
// Lesen immer als utf8mb4: Der Server wandelt dabei nur um, die Reparatur
|
||||||
|
// passiert ausschließlich hier im Skript.
|
||||||
|
$quelle = db_verbinden($server, $user, $pw, $quellDb) or fehler("Keine Verbindung zu ".$quellDb.": ".mysqli_connect_error());
|
||||||
|
|
||||||
|
/* Spalten einer Datenbank: tabelle(klein) => array(name, spalten) */
|
||||||
|
function tabellen($dbconn, $db)
|
||||||
|
{
|
||||||
|
$tabellen = array();
|
||||||
|
$zeilen = db_zeilen($dbconn, "SELECT table_name AS t, column_name AS c, data_type AS typ, is_nullable AS nullbar, column_default AS standard, character_set_name AS zeichensatz, extra
|
||||||
|
FROM information_schema.columns WHERE table_schema = ? ORDER BY table_name, ordinal_position", array($db));
|
||||||
|
foreach($zeilen as $z)
|
||||||
|
{
|
||||||
|
$schluessel = strtolower($z["t"]);
|
||||||
|
if(!isset($tabellen[$schluessel]))
|
||||||
|
$tabellen[$schluessel] = array("name" => $z["t"], "spalten" => array());
|
||||||
|
$tabellen[$schluessel]["spalten"][$z["c"]] = $z;
|
||||||
|
}
|
||||||
|
return $tabellen;
|
||||||
|
}
|
||||||
|
|
||||||
|
$quellTabellen = tabellen($quelle, $quellDb);
|
||||||
|
if(!$quellTabellen)
|
||||||
|
fehler("Datenbank ".$quellDb." enthält keine Tabellen.");
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------
|
||||||
|
* Zielschema anlegen
|
||||||
|
* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
$ziel = null;
|
||||||
|
if($modus == "migrieren")
|
||||||
|
{
|
||||||
|
$vorhanden = db_wert($quelle, "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ?", array($zielDb));
|
||||||
|
if($vorhanden > 0)
|
||||||
|
fehler("Zieldatenbank ".$zielDb." existiert und ist nicht leer.");
|
||||||
|
mysqli_query($quelle, "CREATE DATABASE IF NOT EXISTS `".$zielDb."` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
|
||||||
|
or fehler("Zieldatenbank nicht anlegbar: ".mysqli_error($quelle));
|
||||||
|
|
||||||
|
$ziel = db_verbinden($server, $user, $pw, $zielDb) or fehler("Keine Verbindung zu ".$zielDb.": ".mysqli_connect_error());
|
||||||
|
$schema = file_get_contents(__DIR__."/schema.sql") or fehler("update/schema.sql nicht lesbar.");
|
||||||
|
if(!mysqli_multi_query($ziel, $schema))
|
||||||
|
fehler("Schema: ".mysqli_error($ziel));
|
||||||
|
do {
|
||||||
|
if($r = mysqli_store_result($ziel))
|
||||||
|
mysqli_free_result($r);
|
||||||
|
} while(mysqli_more_results($ziel) && mysqli_next_result($ziel));
|
||||||
|
if(mysqli_errno($ziel))
|
||||||
|
fehler("Schema: ".mysqli_error($ziel));
|
||||||
|
|
||||||
|
// Beim Kopieren: ids 0 behalten, Fremdschlüssel erst hinterher prüfen.
|
||||||
|
mysqli_query($ziel, "SET SESSION sql_mode = 'STRICT_ALL_TABLES,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION'");
|
||||||
|
mysqli_query($ziel, "SET FOREIGN_KEY_CHECKS = 0");
|
||||||
|
$zielTabellen = tabellen($ziel, $zielDb);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Im Prüfmodus zählt das Schema aus der Datei nicht - geprüft wird,
|
||||||
|
// was in der Quelle steht.
|
||||||
|
$zielTabellen = $quellTabellen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------
|
||||||
|
* Tabellen durchgehen
|
||||||
|
* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
/* Wert für eine Spalte, die es in der Quelle nicht gibt */
|
||||||
|
function ersatzwert($spalte)
|
||||||
|
{
|
||||||
|
if(stripos($spalte["extra"], "auto_increment") !== false)
|
||||||
|
return null; // Spalte weglassen, die Datenbank vergibt die Werte
|
||||||
|
if($spalte["standard"] !== null && strtoupper($spalte["standard"]) !== "NULL")
|
||||||
|
return null; // Spalte weglassen, DEFAULT greift
|
||||||
|
if($spalte["nullbar"] == "YES")
|
||||||
|
return array(null);
|
||||||
|
return array(leerwert($spalte));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Was der alte, nicht strikte Modus für einen fehlenden Wert eingesetzt hätte */
|
||||||
|
function leerwert($spalte)
|
||||||
|
{
|
||||||
|
switch($spalte["typ"])
|
||||||
|
{
|
||||||
|
case "date": return "0000-00-00";
|
||||||
|
case "datetime": case "timestamp": return "0000-00-00 00:00:00";
|
||||||
|
case "time": return "00:00:00";
|
||||||
|
case "char": case "varchar": case "text": case "tinytext": case "mediumtext": case "longtext": case "enum": case "set":
|
||||||
|
return "";
|
||||||
|
default: return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$bericht = array();
|
||||||
|
$hinweise = array();
|
||||||
|
|
||||||
|
foreach($quellTabellen as $schluessel => $q)
|
||||||
|
if(!isset($zielTabellen[$schluessel]))
|
||||||
|
$hinweise[] = "Tabelle ".$q["name"]." gibt es im neuen Schema nicht, sie wird nicht übernommen.";
|
||||||
|
|
||||||
|
foreach($zielTabellen as $schluessel => $z)
|
||||||
|
{
|
||||||
|
if(!isset($quellTabellen[$schluessel]))
|
||||||
|
{
|
||||||
|
$hinweise[] = "Tabelle ".$z["name"]." fehlt in der Quelle und bleibt leer.";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$q = $quellTabellen[$schluessel];
|
||||||
|
|
||||||
|
$gemeinsam = array();
|
||||||
|
$ergaenzt = array();
|
||||||
|
foreach($z["spalten"] as $name => $spalte)
|
||||||
|
{
|
||||||
|
if(isset($q["spalten"][$name]))
|
||||||
|
$gemeinsam[] = $name;
|
||||||
|
elseif(($ersatz = ersatzwert($spalte)) !== null)
|
||||||
|
$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)
|
||||||
|
$hinweise[] = "Spalte ".$q["name"].".".$name." gibt es im neuen Schema nicht, sie wird nicht übernommen.";
|
||||||
|
foreach($ergaenzt as $name => $wert)
|
||||||
|
$hinweise[] = "Spalte ".$z["name"].".".$name." fehlt in der Quelle und wird mit ".var_export($wert, true)." gefüllt.";
|
||||||
|
|
||||||
|
// Im Ziel Pflicht, in der Quelle darf NULL stehen: dort den Leerwert
|
||||||
|
// einsetzen, sonst lehnt der strikte Modus die Zeile ab.
|
||||||
|
$nullErsatz = array();
|
||||||
|
foreach($gemeinsam as $name)
|
||||||
|
if($z["spalten"][$name]["nullbar"] == "NO" && $q["spalten"][$name]["nullbar"] == "YES")
|
||||||
|
$nullErsatz[$name] = 0;
|
||||||
|
|
||||||
|
$textSpalten = array();
|
||||||
|
foreach($gemeinsam as $name)
|
||||||
|
if($q["spalten"][$name]["zeichensatz"] !== null)
|
||||||
|
$textSpalten[] = $name;
|
||||||
|
|
||||||
|
$liste = implode(", ", array_map(function($n) { return "`".$n."`"; }, $gemeinsam));
|
||||||
|
$res = mysqli_query($quelle, "SELECT ".$liste." FROM `".$q["name"]."`", MYSQLI_USE_RESULT)
|
||||||
|
or fehler($q["name"].": ".mysqli_error($quelle));
|
||||||
|
|
||||||
|
$stmt = null;
|
||||||
|
if($ziel)
|
||||||
|
{
|
||||||
|
$spaltenZiel = array_merge($gemeinsam, array_keys($ergaenzt));
|
||||||
|
$sql = "INSERT INTO `".$z["name"]."` (".implode(", ", array_map(function($n) { return "`".$n."`"; }, $spaltenZiel)).") VALUES (".implode(", ", array_fill(0, count($spaltenZiel), "?")).")";
|
||||||
|
$stmt = mysqli_prepare($ziel, $sql) or fehler($z["name"].": ".mysqli_error($ziel));
|
||||||
|
mysqli_begin_transaction($ziel);
|
||||||
|
}
|
||||||
|
|
||||||
|
$zeilen = 0;
|
||||||
|
while($zeile = mysqli_fetch_assoc($res))
|
||||||
|
{
|
||||||
|
$zeilen++;
|
||||||
|
foreach($textSpalten as $name)
|
||||||
|
{
|
||||||
|
if($zeile[$name] === null)
|
||||||
|
continue;
|
||||||
|
list($kategorie, $neu) = pruefeText($zeile[$name]);
|
||||||
|
if(!isset($bericht[$q["name"]][$name]))
|
||||||
|
$bericht[$q["name"]][$name] = array("ascii" => 0, "korrekt" => 0, "repariert" => 0, "mehrfach" => 0, "unklar" => 0, "unklar_ids" => array());
|
||||||
|
$bericht[$q["name"]][$name][$kategorie]++;
|
||||||
|
if($kategorie == "unklar" && isset($zeile["id"]) && count($bericht[$q["name"]][$name]["unklar_ids"]) < 20)
|
||||||
|
$bericht[$q["name"]][$name]["unklar_ids"][] = $zeile["id"];
|
||||||
|
$zeile[$name] = $neu;
|
||||||
|
}
|
||||||
|
foreach($nullErsatz as $name => $anzahl)
|
||||||
|
{
|
||||||
|
if($zeile[$name] === null)
|
||||||
|
{
|
||||||
|
$zeile[$name] = leerwert($z["spalten"][$name]);
|
||||||
|
$nullErsatz[$name]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($stmt)
|
||||||
|
{
|
||||||
|
$werte = array_merge(array_values($zeile), array_values($ergaenzt));
|
||||||
|
mysqli_stmt_execute($stmt, $werte)
|
||||||
|
or fehler($z["name"].", Zeile ".$zeilen.(isset($zeile["id"]) ? " (id ".$zeile["id"].")" : "").": ".mysqli_stmt_error($stmt));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mysqli_free_result($res);
|
||||||
|
foreach($nullErsatz as $name => $anzahl)
|
||||||
|
if($anzahl > 0)
|
||||||
|
$hinweise[] = "Spalte ".$z["name"].".".$name.": ".$anzahl." Zeilen mit NULL, im neuen Schema Pflichtfeld, gefüllt mit ".var_export(leerwert($z["spalten"][$name]), true).".";
|
||||||
|
|
||||||
|
if($stmt)
|
||||||
|
{
|
||||||
|
mysqli_commit($ziel);
|
||||||
|
mysqli_stmt_close($stmt);
|
||||||
|
$anzahl = db_wert($ziel, "SELECT COUNT(*) FROM `".$z["name"]."`");
|
||||||
|
if($anzahl != $zeilen)
|
||||||
|
fehler($z["name"].": ".$zeilen." Zeilen gelesen, aber ".$anzahl." im Ziel.");
|
||||||
|
}
|
||||||
|
$bericht[$q["name"]]["_zeilen"] = $zeilen;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------
|
||||||
|
* Fremdschlüssel prüfen (nur Ziel)
|
||||||
|
* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
$verwaist = array();
|
||||||
|
if($ziel)
|
||||||
|
{
|
||||||
|
mysqli_query($ziel, "SET FOREIGN_KEY_CHECKS = 1");
|
||||||
|
$fks = db_zeilen($ziel, "SELECT table_name AS t, column_name AS c, referenced_table_name AS rt, referenced_column_name AS rc
|
||||||
|
FROM information_schema.key_column_usage WHERE table_schema = ? AND referenced_table_name IS NOT NULL", array($zielDb));
|
||||||
|
foreach($fks as $fk)
|
||||||
|
{
|
||||||
|
$anzahl = db_wert($ziel, "SELECT COUNT(*) FROM `".$fk["t"]."` k LEFT JOIN `".$fk["rt"]."` e ON e.`".$fk["rc"]."` = k.`".$fk["c"]."` WHERE k.`".$fk["c"]."` IS NOT NULL AND e.`".$fk["rc"]."` IS NULL");
|
||||||
|
if($anzahl > 0)
|
||||||
|
$verwaist[] = sprintf("%s.%s -> %s.%s: %d Zeilen ohne Gegenstück", $fk["t"], $fk["c"], $fk["rt"], $fk["rc"], $anzahl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------
|
||||||
|
* Bericht
|
||||||
|
* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
echo "Migration utf8mb4 - ".($modus == "pruefen" ? "Prüfmodus (nichts geändert)" : "Migration nach ".$zielDb)."\n";
|
||||||
|
echo "Quelle: ".$quellDb."\n\n";
|
||||||
|
|
||||||
|
$summe = array("repariert" => 0, "mehrfach" => 0, "unklar" => 0, "korrekt" => 0);
|
||||||
|
printf("%-40s %8s %8s %9s %8s %7s\n", "Spalte", "Zeilen", "korrekt", "repariert", "mehrfach", "unklar");
|
||||||
|
foreach($bericht as $tabelle => $spalten)
|
||||||
|
{
|
||||||
|
$zeilen = $spalten["_zeilen"];
|
||||||
|
unset($spalten["_zeilen"]);
|
||||||
|
foreach($spalten as $spalte => $w)
|
||||||
|
{
|
||||||
|
foreach($summe as $k => $v)
|
||||||
|
$summe[$k] += $w[$k];
|
||||||
|
if($w["korrekt"] + $w["repariert"] + $w["mehrfach"] + $w["unklar"] == 0)
|
||||||
|
continue; // reine ASCII-Spalte
|
||||||
|
printf("%-40s %8d %8d %9d %8d %7d\n", $tabelle.".".$spalte, $zeilen, $w["korrekt"], $w["repariert"], $w["mehrfach"], $w["unklar"]);
|
||||||
|
if($w["unklar_ids"])
|
||||||
|
echo " unklar bei id: ".implode(", ", $w["unklar_ids"]).(count($w["unklar_ids"]) == 20 ? ", ..." : "")."\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\nSumme: %d korrekt, %d repariert, %d mehrfach kodiert, %d unklar\n", $summe["korrekt"], $summe["repariert"], $summe["mehrfach"], $summe["unklar"]);
|
||||||
|
|
||||||
|
if($hinweise)
|
||||||
|
echo "\nHinweise:\n - ".implode("\n - ", $hinweise)."\n";
|
||||||
|
if($ziel)
|
||||||
|
echo "\nFremdschlüssel: ".($verwaist ? "\n - ".implode("\n - ", $verwaist) : "alle Verweise gültig")."\n";
|
||||||
@@ -38,6 +38,7 @@ if(!file_put_contents (CONFIG_PATH.CONFIG_FILE,
|
|||||||
global $openweathermap_appid;
|
global $openweathermap_appid;
|
||||||
global $aeris_client_id;
|
global $aeris_client_id;
|
||||||
global $aeris_client_secret;
|
global $aeris_client_secret;
|
||||||
|
global $lokale_netze;
|
||||||
|
|
||||||
$instanz = '.var_export(INSTANZ, true).';
|
$instanz = '.var_export(INSTANZ, true).';
|
||||||
$dbconn = 0;
|
$dbconn = 0;
|
||||||
@@ -60,6 +61,8 @@ if(!file_put_contents (CONFIG_PATH.CONFIG_FILE,
|
|||||||
$openweathermap_appid = "";
|
$openweathermap_appid = "";
|
||||||
$aeris_client_id = "";
|
$aeris_client_id = "";
|
||||||
$aeris_client_secret = "";
|
$aeris_client_secret = "";
|
||||||
|
// Netze, aus denen Passwort-Login erlaubt ist (CIDR). Nie das Docker-Netz!
|
||||||
|
$lokale_netze = array();
|
||||||
?>'))
|
?>'))
|
||||||
{
|
{
|
||||||
$err= error("Konfiguration konnte nicht geschrieben werden!");
|
$err= error("Konfiguration konnte nicht geschrieben werden!");
|
||||||
@@ -69,10 +72,8 @@ else
|
|||||||
$settings=readsettings();
|
$settings=readsettings();
|
||||||
if($settings == "valid")
|
if($settings == "valid")
|
||||||
{
|
{
|
||||||
if(!$dbconn = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw))
|
if(!$dbconn = db_verbinden($mysql_server, $mysql_user, $mysql_pw, $mysql_db))
|
||||||
$err = error("Verbindung zur Datenbank fehlgeschlagen!!");
|
$err = error("Verbindung zur Datenbank fehlgeschlagen: ".htmlspecialchars(mysqli_connect_error()));
|
||||||
if(!@mysqli_select_db($dbconn,$mysql_db))
|
|
||||||
$err = error("Datenbank nicht gefunden!!");
|
|
||||||
|
|
||||||
|
|
||||||
if(!$err)
|
if(!$err)
|
||||||
|
|||||||
@@ -0,0 +1,677 @@
|
|||||||
|
-- Schema der Kundenverwaltung
|
||||||
|
--
|
||||||
|
-- Maßgeblich ist die Datenbank der Instanz kunden; project und work
|
||||||
|
-- stammen aus ingwa, weil sie dort fehlen, der Code sie aber braucht.
|
||||||
|
-- Einheitlich utf8mb4. Die Anwendung verbindet sich im strikten sql_mode
|
||||||
|
-- (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 FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
CREATE TABLE `accesstype` (
|
||||||
|
`id` tinyint(3) NOT NULL AUTO_INCREMENT,
|
||||||
|
`typ` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `addKey` (
|
||||||
|
`accesskey` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `adresse` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`partner_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`anrede_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`anrede2_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`titel_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`titel2_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`vname` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`vname2` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`nname` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`nname2` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`firma` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`str_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`typ_id` int(2) NOT NULL DEFAULT 0,
|
||||||
|
`hnr` varchar(10) NOT NULL DEFAULT '',
|
||||||
|
`zusatz` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`gebdat` date NOT NULL DEFAULT '0000-00-00',
|
||||||
|
`gebdat2` date NOT NULL DEFAULT '0000-00-00',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_partner_titel_id` (`titel_id`),
|
||||||
|
KEY `fk_partner_anrede_id` (`anrede_id`),
|
||||||
|
KEY `fk_adr_str_id` (`str_id`),
|
||||||
|
KEY `fk_adr_typ_id` (`typ_id`),
|
||||||
|
KEY `onlyoneadresstype` (`partner_id`,`typ_id`),
|
||||||
|
CONSTRAINT `fk_adr_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_adr_str_id` FOREIGN KEY (`str_id`) REFERENCES `strasse` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_adr_typ_id` FOREIGN KEY (`typ_id`) REFERENCES `adresstyp` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_partner_anrede_id` FOREIGN KEY (`anrede_id`) REFERENCES `anrede` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_partner_titel_id` FOREIGN KEY (`titel_id`) REFERENCES `titel` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `adresstyp` (
|
||||||
|
`id` int(2) NOT NULL AUTO_INCREMENT,
|
||||||
|
`typ` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `altlasten` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`vacationdays` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`hours` decimal(8,4) NOT NULL DEFAULT 0,
|
||||||
|
`ma_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`last_generated` date NOT NULL DEFAULT '0000-00-00',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_altlasten_user_id` (`ma_id`),
|
||||||
|
CONSTRAINT `fk_altlasten_user_id` FOREIGN KEY (`ma_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `anrede` (
|
||||||
|
`id` int(5) NOT NULL AUTO_INCREMENT,
|
||||||
|
`anrede` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `artikel` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`bezeichn` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`typ_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`user_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`einheit_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_artikel_typ_id` (`typ_id`),
|
||||||
|
KEY `fk_art_rech_einheit_id` (`einheit_id`),
|
||||||
|
KEY `fk_artikel_user_id` (`user_id`),
|
||||||
|
CONSTRAINT `fk_art_rech_einheit_id` FOREIGN KEY (`einheit_id`) REFERENCES `einheit` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_artikel_typ_id` FOREIGN KEY (`typ_id`) REFERENCES `artikeltyp` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_artikel_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `artikel_eigensch` (
|
||||||
|
`art_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`eig_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`rech_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`posnr` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`artposnr` int(11) NOT NULL DEFAULT 0,
|
||||||
|
KEY `fk_art_eig_art_id` (`art_id`),
|
||||||
|
KEY `fk_art_eig_rech_id` (`rech_id`),
|
||||||
|
KEY `fk_art_eig_eig_id` (`eig_id`),
|
||||||
|
CONSTRAINT `fk_art_eig_art_id` FOREIGN KEY (`art_id`) REFERENCES `artikel` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_art_eig_eig_id` FOREIGN KEY (`eig_id`) REFERENCES `eigensch` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_art_eig_rech_id` FOREIGN KEY (`rech_id`) REFERENCES `rechnung` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `artikel_rechn` (
|
||||||
|
`art_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`rech_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`posnr` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`rabatt` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`rabatttyp` int(2) NOT NULL DEFAULT 0,
|
||||||
|
`menge` decimal(6,3) NOT NULL DEFAULT 0,
|
||||||
|
`preis` decimal(10,2) DEFAULT NULL,
|
||||||
|
`angtyp` int(1) NOT NULL DEFAULT 0,
|
||||||
|
`artmwst` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`wanr` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`pagebreak` int(1) NOT NULL DEFAULT 0,
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_art_rech_art_id` (`art_id`),
|
||||||
|
KEY `fk_art_rech_rech_id` (`rech_id`),
|
||||||
|
CONSTRAINT `fk_art_rech_art_id` FOREIGN KEY (`art_id`) REFERENCES `artikel` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_art_rech_rech_id` FOREIGN KEY (`rech_id`) REFERENCES `rechnung` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `artikel_termin` (
|
||||||
|
`art_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`termin_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`menge` decimal(6,3) NOT NULL DEFAULT 0,
|
||||||
|
`rabatt` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`wanr` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
KEY `fk_art_term_art_id` (`art_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_art_id` FOREIGN KEY (`art_id`) REFERENCES `artikel` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `artikelsks` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`rechnr` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`bezeichn1` varchar(60) NOT NULL DEFAULT '',
|
||||||
|
`bezeichn2` varchar(60) NOT NULL DEFAULT '',
|
||||||
|
`menge` decimal(6,3) NOT NULL DEFAULT 0,
|
||||||
|
`beschr` text DEFAULT NULL,
|
||||||
|
`pos` tinyint(3) NOT NULL DEFAULT 0,
|
||||||
|
`rabatt` tinyint(3) NOT NULL DEFAULT 0,
|
||||||
|
`preis` decimal(10,2) DEFAULT NULL,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_artikelsks_rech_id` (`rechnr`),
|
||||||
|
CONSTRAINT `fk_artikelsks_rech_id` FOREIGN KEY (`rechnr`) REFERENCES `rechnung` (`rechnr`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `artikeltyp` (
|
||||||
|
`id` int(5) NOT NULL AUTO_INCREMENT,
|
||||||
|
`bezeichn` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`dropdown` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`list` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `ausgabe` (
|
||||||
|
`id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`user_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`partner_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`rec_kto_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`send_kto_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`betr` decimal(12,3) NOT NULL DEFAULT 0,
|
||||||
|
`rabatt` decimal(4,1) NOT NULL DEFAULT 0,
|
||||||
|
KEY `fk_ausg_user_id` (`user_id`),
|
||||||
|
KEY `fk_ausg_reckto_id` (`rec_kto_id`),
|
||||||
|
KEY `fk_ausg_sendkto_id` (`send_kto_id`),
|
||||||
|
KEY `fk_ausg_partner_id` (`partner_id`),
|
||||||
|
CONSTRAINT `fk_ausg_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_ausg_reckto_id` FOREIGN KEY (`rec_kto_id`) REFERENCES `konto` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_ausg_sendkto_id` FOREIGN KEY (`send_kto_id`) REFERENCES `konto` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_ausg_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `bank` (
|
||||||
|
`id` int(5) NOT NULL AUTO_INCREMENT,
|
||||||
|
`blz` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`bank` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `buchungsKontos` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`kto` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`name` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`descr` text NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `eigensch` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`bezeichn` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`wert` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`einheit_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`user_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_eigensch_user_id` (`user_id`),
|
||||||
|
KEY `fk_eigensch_einheit_id` (`einheit_id`),
|
||||||
|
CONSTRAINT `fk_eigensch_einheit_id` FOREIGN KEY (`einheit_id`) REFERENCES `einheit` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_eigensch_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `einheit` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`einheit` varchar(10) NOT NULL DEFAULT '',
|
||||||
|
`si` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `kontakt` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`partner_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`typ_id` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`kontakt` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_kontakt_typ_id` (`typ_id`),
|
||||||
|
KEY `fk_kontakt_partner_id` (`partner_id`),
|
||||||
|
CONSTRAINT `fk_kontakt_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_kontakt_typ_id` FOREIGN KEY (`typ_id`) REFERENCES `kontakttyp` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `kontakttyp` (
|
||||||
|
`id` int(3) NOT NULL AUTO_INCREMENT,
|
||||||
|
`typ` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `konto` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`bank_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`partner_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`inhaber` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`iban` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`swift` varchar(15) NOT NULL DEFAULT '',
|
||||||
|
`ktonr` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_kto_partner_id` (`partner_id`),
|
||||||
|
KEY `fk_kto_bank_id` (`bank_id`),
|
||||||
|
CONSTRAINT `fk_kto_bank_id` FOREIGN KEY (`bank_id`) REFERENCES `bank` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_kto_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `land` (
|
||||||
|
`id` int(5) NOT NULL AUTO_INCREMENT,
|
||||||
|
`land_short` varchar(5) NOT NULL DEFAULT '',
|
||||||
|
`land` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `log` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`typ_id` tinyint(3) NOT NULL DEFAULT 0,
|
||||||
|
`user_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`qry` text NOT NULL DEFAULT '',
|
||||||
|
`undo_qry` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_log_accesstype_id` (`typ_id`),
|
||||||
|
KEY `fk_log_user_id` (`user_id`),
|
||||||
|
CONSTRAINT `fk_log_accesstype_id` FOREIGN KEY (`typ_id`) REFERENCES `accesstype` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_log_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `message` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`send_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`rec_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`head` varchar(50) DEFAULT NULL,
|
||||||
|
`msg` text NOT NULL DEFAULT '',
|
||||||
|
`rd` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_msg_senduser_id` (`send_id`),
|
||||||
|
KEY `fk_msg_recuser_id` (`rec_id`),
|
||||||
|
CONSTRAINT `fk_msg_recuser_id` FOREIGN KEY (`rec_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_msg_senduser_id` FOREIGN KEY (`send_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `mwst` (
|
||||||
|
`id` int(3) NOT NULL AUTO_INCREMENT,
|
||||||
|
`mwst` decimal(4,1) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `mykonto` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`bank_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`inhaber` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`iban` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`swift` varchar(15) NOT NULL DEFAULT '',
|
||||||
|
`ktonr` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_mykto_bank_id` (`bank_id`),
|
||||||
|
CONSTRAINT `fk_mykto_bank_id` FOREIGN KEY (`bank_id`) REFERENCES `bank` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `notiz` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`partner_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`notiz` text NOT NULL DEFAULT '',
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`color` varchar(6) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_notizen_partner_id` (`partner_id`),
|
||||||
|
CONSTRAINT `fk_notizen_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `ort` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ort` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`ortsteil` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`plz` varchar(15) NOT NULL DEFAULT '',
|
||||||
|
`vwahl` varchar(15) NOT NULL DEFAULT '',
|
||||||
|
`land_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_ort_land_id` (`land_id`),
|
||||||
|
CONSTRAINT `fk_ort_land_id` FOREIGN KEY (`land_id`) REFERENCES `land` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `partner` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`datetime_new` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`datetime_lastchange` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`user_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`typ_id` int(2) NOT NULL DEFAULT 0,
|
||||||
|
`zahlziel_id` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`rabatt` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`sks_not_checked` int(1) NOT NULL DEFAULT 0,
|
||||||
|
`sks_kdnotiz` text NOT NULL DEFAULT '',
|
||||||
|
`updated_by` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_partner_typ_id` (`typ_id`),
|
||||||
|
KEY `fk_partner_zahlziel_id` (`zahlziel_id`),
|
||||||
|
KEY `fk_partner_user_id` (`user_id`),
|
||||||
|
CONSTRAINT `fk_partner_typ_id` FOREIGN KEY (`typ_id`) REFERENCES `partnertyp` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_partner_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_partner_zahlziel_id` FOREIGN KEY (`zahlziel_id`) REFERENCES `zahlziel` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `partnertyp` (
|
||||||
|
`id` int(2) NOT NULL AUTO_INCREMENT,
|
||||||
|
`typ` varchar(15) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `passkeys` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`lastAuth` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`name` varchar(40) NOT NULL DEFAULT '',
|
||||||
|
`userId` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`credentialId` varchar(1023) NOT NULL DEFAULT '',
|
||||||
|
`credentialPublicKey` text NOT NULL DEFAULT '',
|
||||||
|
`signatureCounter` text NOT NULL DEFAULT '',
|
||||||
|
`authKey` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `project` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`name2` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`partner_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`changetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`changeuser` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`intro` text NOT NULL DEFAULT '',
|
||||||
|
`outro` text NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fek_proj_partner_id` (`partner_id`),
|
||||||
|
CONSTRAINT `fek_proj_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `rechnr` (
|
||||||
|
`rechnr` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`typ_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`rechnr`,`typ_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `rechnung` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`adressfields` varchar(12) NOT NULL DEFAULT '',
|
||||||
|
`anrede1` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`anrede2` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`partner_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`mwst_id` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`user_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`typ_id` int(2) NOT NULL DEFAULT 0,
|
||||||
|
`zahlziel_id` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`adresse_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`wahrung_id` tinyint(3) NOT NULL DEFAULT 0,
|
||||||
|
`changetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`changeuser` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`rechnr` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`rabatt` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`rabattdesc` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`intro` text NOT NULL DEFAULT '',
|
||||||
|
`outro` text NOT NULL DEFAULT '',
|
||||||
|
`sks` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`sub_mwst` int(1) NOT NULL DEFAULT 0,
|
||||||
|
`kommission` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`lieferdatum` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`adresserweiterung` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`storno` int(1) NOT NULL DEFAULT 0,
|
||||||
|
`stornodate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`buchungsKto_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fek_rech_partner_id` (`partner_id`),
|
||||||
|
KEY `fek_rech_adresse_id` (`adresse_id`),
|
||||||
|
KEY `fek_rech_mwst_id` (`mwst_id`),
|
||||||
|
KEY `fek_rech_user_id` (`user_id`),
|
||||||
|
KEY `fek_rech_zahlziehl_id` (`zahlziel_id`),
|
||||||
|
KEY `fek_rech_typ_id` (`typ_id`),
|
||||||
|
KEY `fek_rech_wahrung_id` (`wahrung_id`),
|
||||||
|
KEY `rechnr` (`rechnr`),
|
||||||
|
KEY `fk_rech_buchungsKto_id` (`buchungsKto_id`),
|
||||||
|
CONSTRAINT `fek_rech_adresse_id` FOREIGN KEY (`adresse_id`) REFERENCES `adresse` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fek_rech_mwst_id` FOREIGN KEY (`mwst_id`) REFERENCES `mwst` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fek_rech_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fek_rech_typ_id` FOREIGN KEY (`typ_id`) REFERENCES `rechtyp` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fek_rech_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fek_rech_wahrung_id` FOREIGN KEY (`wahrung_id`) REFERENCES `wahrung` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fek_rech_zahlziehl_id` FOREIGN KEY (`zahlziel_id`) REFERENCES `zahlziel` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_rech_buchungsKto_id` FOREIGN KEY (`buchungsKto_id`) REFERENCES `buchungsKontos` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `rechtyp` (
|
||||||
|
`id` int(3) NOT NULL AUTO_INCREMENT,
|
||||||
|
`typ` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `setting` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`user_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`opt` varchar(10) NOT NULL DEFAULT '',
|
||||||
|
`val` text NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_settings_user_id` (`user_id`),
|
||||||
|
CONSTRAINT `fk_settings_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `strasse` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`str` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`ort_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_str_ort_id` (`ort_id`),
|
||||||
|
CONSTRAINT `fk_str_ort_id` FOREIGN KEY (`ort_id`) REFERENCES `ort` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `tel` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ort_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`partner_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`typ_id` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`nr` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
`name` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`adresse_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_tel_ort_id` (`ort_id`),
|
||||||
|
KEY `fk_tel_typ_id` (`typ_id`),
|
||||||
|
KEY `fk_tel_partner_id` (`partner_id`),
|
||||||
|
CONSTRAINT `fk_tel_ort_id` FOREIGN KEY (`ort_id`) REFERENCES `ort` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tel_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tel_typ_id` FOREIGN KEY (`typ_id`) REFERENCES `teltyp` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `teltyp` (
|
||||||
|
`id` int(3) NOT NULL AUTO_INCREMENT,
|
||||||
|
`typ` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `termin` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`typ` int(2) NOT NULL DEFAULT 0,
|
||||||
|
`adresse_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`text` text NOT NULL DEFAULT '',
|
||||||
|
`changetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`done` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`user` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`changeuser` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`termtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`termdauer` time NOT NULL DEFAULT '00:00:00',
|
||||||
|
`followed_by` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`act_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`head` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`main_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`user2` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`user3` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`user4` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_termin_typ_termtyp_id` (`typ`),
|
||||||
|
CONSTRAINT `fk_termin_typ_termtyp_id` FOREIGN KEY (`typ`) REFERENCES `termtyp` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `termtyp` (
|
||||||
|
`id` int(2) NOT NULL AUTO_INCREMENT,
|
||||||
|
`typ` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `titel` (
|
||||||
|
`id` int(5) NOT NULL AUTO_INCREMENT,
|
||||||
|
`titel` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `tmp_artikel` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`bezeichn` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`typ_id` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`einheit_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`preis` decimal(10,2) DEFAULT NULL,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`posnr` int(5) NOT NULL DEFAULT 0,
|
||||||
|
`rabatt` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`rabatttyp` int(2) NOT NULL DEFAULT 0,
|
||||||
|
`menge` decimal(6,3) NOT NULL DEFAULT 0,
|
||||||
|
`angtyp` int(1) NOT NULL DEFAULT 0,
|
||||||
|
`mwst_id` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`rech_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`wanr` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`pagebreak` int(1) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_tmp_artikel_typ_id` (`typ_id`),
|
||||||
|
KEY `fk_tmp_art_mwst_id` (`mwst_id`),
|
||||||
|
KEY `fk_tmp_art_rech_id` (`rech_id`),
|
||||||
|
KEY `fk_tmp_artikel_einheit_id` (`einheit_id`),
|
||||||
|
CONSTRAINT `fk_tmp_art_mwst_id` FOREIGN KEY (`mwst_id`) REFERENCES `mwst` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_art_rech_id` FOREIGN KEY (`rech_id`) REFERENCES `tmp_rechnung` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_artikel_einheit_id` FOREIGN KEY (`einheit_id`) REFERENCES `einheit` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_artikel_typ_id` FOREIGN KEY (`typ_id`) REFERENCES `artikeltyp` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `tmp_eigensch` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`bezeichn` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`wert` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`einheit_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`art_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`posnr` int(5) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_tmp_eigensch_art_id` (`art_id`),
|
||||||
|
KEY `fk_tmp_eigensch_einheit_id` (`einheit_id`),
|
||||||
|
CONSTRAINT `fk_tmp_eigensch_art_id` FOREIGN KEY (`art_id`) REFERENCES `tmp_artikel` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_eigensch_einheit_id` FOREIGN KEY (`einheit_id`) REFERENCES `einheit` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `tmp_rechnung` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`adressfields` varchar(12) NOT NULL DEFAULT '',
|
||||||
|
`partner_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`anrede1` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`anrede2` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`mwst_id` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`user_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`rechnr` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`typ_id` int(2) NOT NULL DEFAULT 0,
|
||||||
|
`zahlziel_id` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`adresse_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`wahrung_id` tinyint(3) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`rabatt` int(3) NOT NULL DEFAULT 0,
|
||||||
|
`rabattdesc` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`intro` text NOT NULL DEFAULT '',
|
||||||
|
`outro` text NOT NULL DEFAULT '',
|
||||||
|
`sub_mwst` int(1) NOT NULL DEFAULT 0,
|
||||||
|
`kommission` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`lieferdatum` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`adresserweiterung` varchar(100) NOT NULL DEFAULT '',
|
||||||
|
`storno` int(1) NOT NULL DEFAULT 0,
|
||||||
|
`buchungsKto_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_tmp_rech_partner_id` (`partner_id`),
|
||||||
|
KEY `fk_tmp_rech_adresse_id` (`adresse_id`),
|
||||||
|
KEY `fk_tmp_rech_mwst_id` (`mwst_id`),
|
||||||
|
KEY `fk_tmp_rech_user_id` (`user_id`),
|
||||||
|
KEY `fk_tmp_rech_zahlziehl_id` (`zahlziel_id`),
|
||||||
|
KEY `fk_tmp_rech_typ_id` (`typ_id`),
|
||||||
|
KEY `fk_tmp_rech_wahrung_id` (`wahrung_id`),
|
||||||
|
KEY `fek_rech_buchungsKto_id` (`buchungsKto_id`),
|
||||||
|
CONSTRAINT `fek_rech_buchungsKto_id` FOREIGN KEY (`buchungsKto_id`) REFERENCES `buchungsKontos` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_rech_adresse_id` FOREIGN KEY (`adresse_id`) REFERENCES `adresse` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_rech_mwst_id` FOREIGN KEY (`mwst_id`) REFERENCES `mwst` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_rech_partner_id` FOREIGN KEY (`partner_id`) REFERENCES `partner` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_rech_typ_id` FOREIGN KEY (`typ_id`) REFERENCES `rechtyp` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_rech_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_rech_wahrung_id` FOREIGN KEY (`wahrung_id`) REFERENCES `wahrung` (`id`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `fk_tmp_rech_zahlziehl_id` FOREIGN KEY (`zahlziel_id`) REFERENCES `zahlziel` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `user` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`vname` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`nname` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`nick` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`pass` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`mail` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`salt` varchar(50) NOT NULL DEFAULT '',
|
||||||
|
`tel_priv` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`tel_gesch` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`tel_mobil` varchar(30) NOT NULL DEFAULT '',
|
||||||
|
`lastlogin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`numlogins` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`logedout` tinyint(2) NOT NULL DEFAULT 0,
|
||||||
|
`wrongpw` tinyint(3) NOT NULL DEFAULT 0,
|
||||||
|
`notizen` text NOT NULL DEFAULT '',
|
||||||
|
`blocked` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`rights` varchar(6) NOT NULL DEFAULT '',
|
||||||
|
`weekly_hours` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`rfid` varchar(10) NOT NULL DEFAULT '',
|
||||||
|
`color` varchar(8) NOT NULL DEFAULT '',
|
||||||
|
`weekhours` decimal(6,3) NOT NULL DEFAULT 0,
|
||||||
|
`vacationdays` int(4) NOT NULL DEFAULT 0,
|
||||||
|
`sahours` decimal(3,1) NOT NULL DEFAULT 0,
|
||||||
|
`timelog_start` date NOT NULL DEFAULT '0000-00-00',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE KEY `nick` (`nick`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `wahrung` (
|
||||||
|
`id` tinyint(3) NOT NULL AUTO_INCREMENT,
|
||||||
|
`wahrung` varchar(20) NOT NULL DEFAULT '',
|
||||||
|
`kurs` decimal(8,4) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `work` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`bezeichn` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`bezeichn2` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
`project_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`changetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`changeuser` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`std` decimal(6,3) NOT NULL DEFAULT 0,
|
||||||
|
`rechn` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fek_work_partner_id` (`project_id`),
|
||||||
|
CONSTRAINT `fek_work_partner_id` FOREIGN KEY (`project_id`) REFERENCES `project` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `zahlziel` (
|
||||||
|
`id` int(3) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ziel` varchar(150) NOT NULL DEFAULT '',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
CREATE TABLE `zeiten` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`ma_id` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`kommen` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`gehen` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
|
`pause_mins` int(11) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `fk_zeiten_user_id` (`ma_id`),
|
||||||
|
CONSTRAINT `fk_zeiten_user_id` FOREIGN KEY (`ma_id`) REFERENCES `user` (`id`) ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
Reference in New Issue
Block a user