Compare commits

...

65 Commits

Author SHA1 Message Date
felix 4b9bc8754b www/themes/new/templates/loginpage.tpl aktualisiert 2024-03-02 17:13:58 +01:00
felix 980b4d3056 www/themes/new/templates/loginpage.tpl aktualisiert 2024-03-02 17:10:16 +01:00
felix 602bd21f99 www/themes/new/templates/loginpage.tpl aktualisiert 2024-03-02 17:07:46 +01:00
felix 4e8c12b631 Dateien nach "www/themes/new/templates" hochladen 2024-03-02 17:04:28 +01:00
felix aff20577d0 www/themes/new/templates/sidebar_logo.svg gelöscht 2024-03-02 17:04:04 +01:00
felix 212789faa9 Dateien nach "www/themes/new/templates" hochladen 2024-03-02 16:58:49 +01:00
felix 3aba261ba3 www/themes/new/templates/sidebar_logo.svg gelöscht 2024-03-02 16:58:26 +01:00
felix e45e783d39 DBXE Rebranding 2024-03-02 16:55:47 +01:00
felix 962529cbc9 DBXE Rebranding
_old Suffix hinzugefügt
2024-03-02 16:54:55 +01:00
felix 93b1f8d61a upgrade/data/remote.json aktualisiert 2024-03-02 16:33:35 +01:00
felix a05d497774 upgrade/data/remote.json aktualisiert
http -> https
2024-03-02 16:22:01 +01:00
felix 7d4138dd18 DBXE Rebranding 2024-03-02 16:15:07 +01:00
felix d0f53eb1f4 DBXE Rebranding
_old Suffix hinzugefügt
2024-03-02 16:13:48 +01:00
felix d5de8365ee version.php aktualisiert 2024-02-25 11:19:42 +01:00
felix 12cf3f7767 DBXE Rebranding 2024-02-25 11:16:57 +01:00
felix b8f1efbe12 DBXE Rebranding 2024-02-25 11:13:28 +01:00
felix 5a040d69da Update Remote Pfad geändert 2024-02-23 10:29:12 +01:00
felix d69b2fb342 DBXE Rebranding 2024-02-23 10:28:32 +01:00
felix 70b7a63694 DBXE Rebranding 2024-02-23 09:47:00 +01:00
felix 50e232cae7 DBXE Rebranding 2024-02-23 09:46:38 +01:00
felix 0f06a5838d DBXE Rebranding 2024-02-23 09:39:26 +01:00
felix e297ff8669 DBXE Rebranding 2024-02-23 09:39:17 +01:00
felix cffe00216c www/themes/new/templates/sidebar.tpl aktualisiert 2024-02-23 09:38:42 +01:00
felix 051a0805b9 DBXE Rebranding 2024-02-23 09:37:56 +01:00
felix 3d0210dc6d DBXE Rebranding 2024-02-23 09:24:00 +01:00
felix c99958525e DBXE Rebranding 2024-02-23 09:22:59 +01:00
felix 308c2aefa8 DBXE Rebranding 2024-02-23 09:19:52 +01:00
felix 925b8bf56e DBXE Rebranding 2024-02-23 09:19:05 +01:00
felix 5adc7458b2 DBXE Rebranding 2024-02-23 09:15:28 +01:00
felix e7af1e1164 VERSION aktualisiert 2024-02-23 09:14:35 +01:00
felix 29f8fe38ca DBXE Rebranding 2024-02-23 09:13:23 +01:00
felix 0ef8c498a2 DBXE Rebranding 2024-02-23 09:10:19 +01:00
root cf266fb4aa Aenderungen an Loginpage 2024-02-23 08:40:16 +01:00
root 8b8474e6eb Aenderungen an Loginpage 2024-02-23 08:33:15 +01:00
felix 8b43c9c08d www/pages/upgrade.php aktualisiert
Auskommentierung wieder entfernt, da Datenbankupgrade nicht möglich ist und Klick auf "Upgrade" zu Fehlern führt.
2024-02-22 18:38:24 +01:00
felix b39a7e5adb www/pages/upgrade.php aktualisiert 2024-02-21 15:11:52 +01:00
felix 9f633a8fdd Dateien nach "www/themes/new/images" hochladen 2024-02-21 14:15:04 +01:00
felix 4d956f1e38 www/themes/new/images/login_screen_picture.jpg gelöscht 2024-02-21 14:14:31 +01:00
felix ca4825e84e www/themes/new/templates/loginpage.tpl aktualisiert 2024-02-21 13:56:41 +01:00
felix 1b952e3021 www/themes/new/templates/loginpage.tpl aktualisiert 2024-02-21 13:55:31 +01:00
OpenXE bce18dcece Merge branch 'amperios' 2024-02-19 19:40:02 +01:00
OpenXE 9fc07ca3df bugfix lieferantengutschrift positionen hinzufuegen 2024-02-19 12:50:37 +01:00
OpenXE 345bbc5a9d bugfix buchhaltung export erloes 2024-02-14 10:33:51 +01:00
OpenXE dd713c2286 bugfix lageretiketten 2024-02-12 19:45:43 +01:00
OpenXE c89c36e596 exportbuchhaltung added new verbindlichkeit, lieferantengutschrift 2024-02-10 18:07:29 +01:00
OpenXE 4d5b46e903 bugfix ticket htmlentities betreff 2024-02-09 21:00:57 +01:00
OpenXE 7b1d12d59b bugfix artikel instueckliste sum view 2024-02-09 14:53:14 +01:00
OpenXE c6ee9c0faf bugfix lieferantengutschrift menge max 2024-02-09 10:49:18 +01:00
OpenXE 324c7dbf17 lieferantengutschrift sortcols 2024-02-08 20:43:58 +01:00
OpenXE 4e5011c5f5 lieferantengutschrift artikel manuell bruttopreise 2024-02-08 20:37:07 +01:00
OpenXE 885cf37d29 FirmendatenSet -> AddNeuenFirmendatenWert 2024-02-08 17:56:01 +01:00
OpenXE e348560cf7 lieferantengutschrift artikell manuell 2024-02-08 16:15:39 +01:00
OpenXE c3cbf0d214 bugfix verbindlichkeit positionen 2024-02-08 14:17:56 +01:00
OpenXE c5cf7bcba4 angebot optional positions with ellipsis, added optional total 2024-02-07 20:45:34 +01:00
OpenXE ca4e320085 lieferantengutschrift positionen 2024-02-07 17:57:11 +01:00
OpenXE 8dc86fdddf Lieferantengutschrift initial 2024-02-05 21:58:08 +01:00
OpenXE 4a5a723a15 wareneingang reopen 2024-02-05 12:18:52 +01:00
OpenXE 0360d5657f bugfix angebot Alternativ Text Preis 2024-02-05 11:58:36 +01:00
OpenXE 2efc34c280 bugfix AN AB RE GS ust ausblenden 2024-02-04 21:54:43 +01:00
OpenXE 9d543e6635 database patch for belegvorlagen 2024-02-03 17:54:51 +01:00
OpenXE 2ff5c007c1 added belegvorlagen from OSS 20.1 2024-02-03 12:49:37 +01:00
OpenXE 4acb921b51 bugfix emailbackup testmail utf-8 2024-01-31 18:38:53 +01:00
OpenXE 40734ccd66 Bugfix emailbackup 2024-01-31 18:35:16 +01:00
OpenXE 15f4ef55f2 bugfix beleg editable einkaufspreise menu 2024-01-30 15:58:43 +01:00
OpenXE 2b29457763 mailsend bugfix UTF-8 2024-01-30 11:13:07 +01:00
52 changed files with 11091 additions and 7149 deletions

View File

@ -20,7 +20,7 @@ final class ErrorPageData implements JsonSerializable
public function __construct($exception, $title = null)
{
$this->exception = $exception;
$this->title = !empty($title) ? (string)$title : 'OpenXE: Es ist ein unerwarteter Fehler aufgetreten!';
$this->title = !empty($title) ? (string)$title : 'DBXE: Es ist ein unerwarteter Fehler aufgetreten!';
}

View File

@ -16752,7 +16752,7 @@ INSERT INTO `geschaeftsbrief_vorlagen` (`id`, `sprache`, `betreff`, `text`, `sub
(17, 'deutsch', 'Ihre Gutschrift {BELEGNR} von {FIRMA}', '{ANSCHREIBEN},<br><br>anbei finden Sie Ihre Gutschrift. Gerne stehen wir Ihnen weiterhin zur Verfügung.<br><br>Ihre Gutschrift ist im PDF-Format erstellt worden. Um sich die Gutschrift ansehen zu können, klicken Sie auf den Anhang und es öffnet sich automatisch der Acrobat Reader. Sollten Sie keinen Acrobat Reader besitzen, haben wir für Sie den Link zum kostenlosen Download von Adobe Acrobat Reader mit angegeben. Er führt Sie automatisch auf die Downloadseite von Adobe. So können Sie sich Ihre Gutschrift auch für Ihre Unterlagen ausdrucken.<br><br>http://www.adobe.com/products/acrobat/readstep2.html<br><br>{IF}{INTERNET}{THEN}Internet-Bestellnr.: {INTERNET}{ELSE}{ENDIF}', 'Gutschrift', 1, 1);
/* OpenXE 2024-01-24 für datatablelabel */
/* DBXE 2024-01-24 für datatablelabel */
INSERT INTO `hook` (`name`, `aktiv`, `parametercount`, `alias`, `description`) VALUES
('eproosystem_ende', 1, 0, '', ''),
('parseuservars', 1, 0, '', ''),
@ -16767,7 +16767,27 @@ INSERT INTO `hook_register` (`hook_action`, `function`, `aktiv`, `position`, `ho
(0, 'DataTableLabelsDokumentSendHook', 1, 1, (SELECT id FROM hook WHERE name = 'dokumentsend_ende'), 'Datatablelabels', 0),
(0, 'DatatablelabelsOrderSent', 1, 1, (SELECT id FROM hook WHERE name = 'auftrag_versand_ende'), 'Datatablelabels', 0),
(0, 'DatatablelabelsTransferDocumentIncomming', 1, 1, (SELECT id FROM hook WHERE name = 'transfer_document_incoming'), 'Datatablelabels', 0);
/* OpenXE 2024-01-24 für datatablelabel */
/* DBXE 2024-01-24 für datatablelabel */
/* OpenXE 2024-02-03 für belegvorlagen */
INSERT INTO `hook` (`name`, `aktiv`, `parametercount`, `alias`, `description`) VALUES
('BelegPositionenButtons', 1, 3, '', ''),
('AARLGPositionen_cmds_end', 1, 1, '', ''),
('ajax_filter_hook1', 1, 1, '', '');
INSERT INTO `hook_register` (`hook_action`, `function`, `aktiv`, `position`, `hook`, `module`, `module_parameter`) VALUES
(0, 'BelegevorlagenAARLGPositionen_cmds_end', 1, 2, (SELECT id FROM hook WHERE name = 'AARLGPositionen_cmds_end' LIMIT 1), 'belegevorlagen', 0),
(0, 'Belegevorlagenajax_filter_hook1', 1, 2, (SELECT id FROM hook WHERE name = 'ajax_filter_hook1' LIMIT 1), 'belegevorlagen', 0),
(0, 'BelegevorlagenBelegPositionenButtons', 1, 2, (SELECT id FROM hook WHERE name = 'BelegPositionenButtons' LIMIT 1), 'belegevorlagen', 0)
;
/* DBXE 2024-02-03 für belegvorlagen */
/*
BelegPositionenButtons
Id,Hook_action,Function,Aktiv,Position,Hook,Module,Module_parameter
20,0,BelegevorlagenBelegPositionenButtons,1,2,16,belegevorlagen,0
*/
INSERT INTO `hook_menu` (`id`, `module`, `aktiv`) VALUES
(1, 'artikel', 1),
@ -18190,7 +18210,7 @@ INSERT INTO `wiedervorlage_stages` (`id`, `kurzbezeichnung`, `name`, `hexcolor`,
(12, 'Stay', 'Stay (Erhalt)', '#A2D624', 0, 1, 4, 4, NULL),
(13, 'Okay', 'Okay (Befürwortung)', '#A2D624', 0, 1, 5, 4, NULL);
INSERT INTO `wiki` (`id`, `name`, `content`, `lastcontent`) VALUES
(1, 'StartseiteWiki', '\n<p>Herzlich Willkommen in Ihrem OpenXE, dem freien ERP.<br><br>Wir freuen uns Sie als Benutzer begrüßen zu dürfen. Mit OpenXE organisieren Sie Ihre Firma schnell und einfach. Sie haben alle wichtigen Zahlen und Vorgänge im Überblick.<br><br>Für Einsteiger sind die folgenden Themen wichtig:<br><br></p>\n<ul>\n<li> <a href="index.php?module=firmendaten&amp;action=edit" target="_blank"> Firmendaten</a> (dort richten Sie Ihr Briefpapier ein)</li>\n<li> <a href="index.php?module=adresse&amp;action=list" target="_blank"> Stammdaten / Adressen</a> (Kunden und Lieferanten anlegen)</li>\n<li> <a href="index.php?module=artikel&amp;action=list" target="_blank"> Artikel anlegen</a> (Ihr Artikelstamm)</li>\n<li> <a href="index.php?module=angebot&amp;action=list" target="_blank"> Angebot</a> / <a href="index.php?module=auftrag&amp;action=list" target="_blank"> Auftrag</a> (Alle Dokumente für Ihr Geschäft)</li>\n<li> <a href="index.php?module=rechnung&amp;action=list" target="_blank"> Rechnung</a> / <a href="index.php?module=gutschrift&amp;action=list" target="_blank"> Gutschrift</a></li>\n<li> <a href="index.php?module=lieferschein&amp;action=list" target="_blank"> Lieferschein</a></li>\n</ul>\n<p><br><br>Kennen Sie unsere Zusatzmodule die Struktur und Organisation in das tägliche Geschäft bringen?<br><br></p>\n<ul>\n<li> <a href="index.php?module=kalender&amp;action=list" target="_blank"> Kalender</a></li>\n<li> <a href="index.php?module=wiki&amp;action=list" target="_blank"> Wiki</a></li>\n</ul>', NULL);
(1, 'StartseiteWiki', '\n<p>Herzlich Willkommen in Ihrem DBXE, dem freien ERP.<br><br>Wir freuen uns Sie als Benutzer begrüßen zu dürfen. Mit DBXE organisieren Sie Ihre Firma schnell und einfach. Sie haben alle wichtigen Zahlen und Vorgänge im Überblick.<br><br>Für Einsteiger sind die folgenden Themen wichtig:<br><br></p>\n<ul>\n<li> <a href="index.php?module=firmendaten&amp;action=edit" target="_blank"> Firmendaten</a> (dort richten Sie Ihr Briefpapier ein)</li>\n<li> <a href="index.php?module=adresse&amp;action=list" target="_blank"> Stammdaten / Adressen</a> (Kunden und Lieferanten anlegen)</li>\n<li> <a href="index.php?module=artikel&amp;action=list" target="_blank"> Artikel anlegen</a> (Ihr Artikelstamm)</li>\n<li> <a href="index.php?module=angebot&amp;action=list" target="_blank"> Angebot</a> / <a href="index.php?module=auftrag&amp;action=list" target="_blank"> Auftrag</a> (Alle Dokumente für Ihr Geschäft)</li>\n<li> <a href="index.php?module=rechnung&amp;action=list" target="_blank"> Rechnung</a> / <a href="index.php?module=gutschrift&amp;action=list" target="_blank"> Gutschrift</a></li>\n<li> <a href="index.php?module=lieferschein&amp;action=list" target="_blank"> Lieferschein</a></li>\n</ul>\n<p><br><br>Kennen Sie unsere Zusatzmodule die Struktur und Organisation in das tägliche Geschäft bringen?<br><br></p>\n<ul>\n<li> <a href="index.php?module=kalender&amp;action=list" target="_blank"> Kalender</a></li>\n<li> <a href="index.php?module=wiki&amp;action=list" target="_blank"> Wiki</a></li>\n</ul>', NULL);
INSERT INTO `konten` (`id`, `bezeichnung`, `kurzbezeichnung`, `type`, `erstezeile`, `datevkonto`, `blz`, `konto`, `swift`, `iban`, `lastschrift`, `hbci`, `hbcikennung`, `inhaber`, `aktiv`, `keineemail`, `firma`, `schreibbar`, `importletztenzeilenignorieren`, `liveimport`, `liveimport_passwort`, `liveimport_online`, `importtrennzeichen`, `codierung`, `importerstezeilenummer`, `importdatenmaskierung`, `importnullbytes`, `glaeubiger`, `geloescht`, `projekt`, `saldo_summieren`, `saldo_betrag`, `saldo_datum`, `importfelddatum`, `importfelddatumformat`, `importfelddatumformatausgabe`, `importfeldbetrag`, `importfeldbetragformat`, `importfeldbuchungstext`, `importfeldbuchungstextformat`, `importfeldwaehrung`, `importfeldwaehrungformat`, `importfeldhabensollkennung`, `importfeldkennunghaben`, `importfeldkennungsoll`, `importextrahabensoll`, `importfeldhaben`, `importfeldsoll`, `cronjobaktiv`, `cronjobverbuchen`) VALUES

View File

@ -2847,21 +2847,28 @@ class YUI {
";
}
}else{
} else {
$sql = "SELECT $sortcol, CONCAT($hersteller_ansicht if(b.beschreibung!='',
if(CHAR_LENGTH(b.bezeichnung)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(CONCAT(b.bezeichnung,' *'),1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),CONCAT(b.bezeichnung,' *')),
if(CHAR_LENGTH(b.bezeichnung)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(b.bezeichnung,1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),b.bezeichnung)) $erweiterte_ansicht)
as Artikel,
p.abkuerzung as projekt, a.nummer as nummer, b.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum, trim(b.menge)+0 as menge, ".$this->FormatPreis($preiscell)." as preis
,b.waehrung, b.rabatt as rabatt,";
p.abkuerzung as projekt,
a.nummer as nummer,
b.nummer as nummer,
DATE_FORMAT(lieferdatum,
'%d.%m.%Y') as lieferdatum,
trim(b.menge)+0 as menge,
".$this->FormatPreis($preiscell)." as preis,
b.waehrung,
b.rabatt as rabatt,
'' AS Einkaufspreis,
'' AS DB,
";
}
$sql .= "b.id as id
FROM $table b
LEFT JOIN artikel a ON a.id=b.artikel LEFT JOIN projekt p ON b.projekt=p.id
WHERE b.$module='$id'";
$sql .= "b.id as id
FROM $table b
LEFT JOIN artikel a ON a.id=b.artikel LEFT JOIN projekt p ON b.projekt=p.id
WHERE b.$module='$id'";
}
else if ($module == "verbindlichkeit") // OpenXE
{

View File

@ -78533,6 +78533,17 @@
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "next_lieferantengutschrift",
"Type": "text",
"Collation": "utf8mb3_general_ci",
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "freifeld1",
"Type": "text",
@ -110984,6 +110995,617 @@
}
]
},
{
"name": "lieferantengutschrift",
"collation": "utf8mb3_general_ci",
"type": "BASE TABLE",
"columns": [
{
"Field": "id",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "PRI",
"Default": null,
"Extra": "auto_increment",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "usereditid",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "PRI",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "belegnr",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "datum",
"Type": "date",
"Collation": null,
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "status_beleg",
"Type": "varchar(64)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "schreibschutz",
"Type": "tinyint(1)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "rechnung",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "zahlbarbis",
"Type": "date",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "betrag",
"Type": "decimal(10,2)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "skonto",
"Type": "decimal(10,2)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "skontobis",
"Type": "date",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "freigabe",
"Type": "int(1)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "freigabemitarbeiter",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "adresse",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "MUL",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "projekt",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "status",
"Type": "varchar(64)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "bezahlt",
"Type": "int(1)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "firma",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "logdatei",
"Type": "timestamp",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0000-00-00 00:00:00",
"Extra": "on update current_timestamp()",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "waehrung",
"Type": "varchar(3)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": "'EUR'",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "zahlungsweise",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "eingangsdatum",
"Type": "date",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "rechnungsdatum",
"Type": "date",
"Collation": null,
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "rechnungsfreigabe",
"Type": "tinyint(1)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "kostenstelle",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "beschreibung",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "sachkonto",
"Type": "varchar(64)",
"Collation": "utf8mb3_general_ci",
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "internebemerkung",
"Type": "text",
"Collation": "utf8mb3_general_ci",
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "ust_befreit",
"Type": "int(1)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
}
],
"keys": [
{
"Key_name": "PRIMARY",
"Index_type": "BTREE",
"columns": [
"id"
],
"Non_unique": ""
},
{
"Key_name": "adresse",
"Index_type": "BTREE",
"columns": [
"adresse"
],
"Non_unique": ""
}
]
},
{
"name": "lieferantengutschrift_position",
"collation": "utf8mb3_general_ci",
"type": "BASE TABLE",
"columns": [
{
"Field": "id",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "PRI",
"Default": null,
"Extra": "auto_increment",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "lieferantengutschrift",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "MUL",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "sort",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "artikel",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "projekt",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "bestellung",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "nummer",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "waehrung",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "einheit",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "vpe",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "bezeichnung",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "umsatzsteuer",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "status",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "beschreibung",
"Type": "text",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "lieferdatum",
"Type": "date",
"Collation": null,
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "steuersatz",
"Type": "decimal(5,2)",
"Collation": null,
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "steuertext",
"Type": "varchar(1024)",
"Collation": "utf8mb3_general_ci",
"Null": "YES",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "kostenstelle",
"Type": "varchar(10)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "preis",
"Type": "decimal(14,4)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0.0000",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "menge",
"Type": "decimal(14,4)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0.0000",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "verbindlichkeit_position",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "kontorahmen",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
}
],
"keys": [
{
"Key_name": "PRIMARY",
"Index_type": "BTREE",
"columns": [
"id"
],
"Non_unique": ""
},
{
"Key_name": "lieferantengutschrift",
"Index_type": "BTREE",
"columns": [
"lieferantengutschrift"
],
"Non_unique": ""
}
]
},
{
"name": "verbindlichkeit_bestellungen",
"collation": "utf8mb3_general_ci",
@ -111673,6 +112295,86 @@
}
]
},
{
"name": "lieferantengutschrift_protokoll",
"collation": "utf8mb3_general_ci",
"type": "BASE TABLE",
"columns": [
{
"Field": "id",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "PRI",
"Default": null,
"Extra": "auto_increment",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "lieferantengutschrift",
"Type": "int(11)",
"Collation": null,
"Null": "NO",
"Key": "MUL",
"Default": "0",
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "zeit",
"Type": "datetime",
"Collation": null,
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "bearbeiter",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
},
{
"Field": "grund",
"Type": "varchar(255)",
"Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
"Extra": "",
"Privileges": "select,insert,update,references",
"Comment": ""
}
],
"keys": [
{
"Key_name": "PRIMARY",
"Index_type": "BTREE",
"columns": [
"id"
],
"Non_unique": ""
},
{
"Key_name": "lieferantengutschrift",
"Index_type": "BTREE",
"columns": [
"lieferantengutschrift"
],
"Non_unique": ""
}
]
},
{
"name": "verbindlichkeit_regelmaessig",
"collation": "utf8mb3_general_ci",

View File

@ -1,4 +1,4 @@
{
"host": "https://github.com/openxe-org/openxe.git",
"host": "http://repo.dbxe.de/dbxe/dbxe.git",
"branch": "master"
}

View File

@ -163,7 +163,7 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
$remote_file_name = $datafolder."/remote.json";
$schema_file_name = "db_schema.json";
echo_out("--------------- OpenXE upgrade ---------------\n");
echo_out("--------------- DBXE upgrade ---------------\n");
echo_out("--------------- ".date("Y-m-d H:i:s")." ---------------\n");
//require_once($directory.'/../cronjobs/githash.php');
@ -485,8 +485,8 @@ function upgrade_main(string $directory,bool $verbose, bool $check_git, bool $do
}
function info() {
echo_out("OpenXE upgrade tool\n");
echo_out("Copyright 2022 (c) OpenXE project\n");
echo_out("DBXE upgrade tool\n");
echo_out("Copyright 2024 (c) DBXE project\n");
echo_out("\n");
echo_out("Upgrade files and database\n");
echo_out("Options:\n");

View File

@ -1,7 +1,7 @@
<?php
$version="OSS";
$version_revision="1.11";
$version_revision="1.0.2";
$githash = file_get_contents("../githash.txt");
if (!empty($githash)) {
$version_revision .= " (".substr($githash,0,8).")";

File diff suppressed because it is too large Load Diff

View File

@ -7191,6 +7191,7 @@ title: 'Abschicken',
$navarray['menu']['admin'][$menu]['sec'][] = array('Lohnabrechnung','lohnabrechnung','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Verbindlichkeiten','verbindlichkeit','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Lieferantengutschriften','lieferantengutschrift','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Kassenbuch','kasse','list');
@ -8620,6 +8621,7 @@ function StandardFirmendatenWerte()
$this->AddNeuenFirmendatenWert( 'next_proformarechnung', 'varchar', '128', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_serviceauftrag', 'varchar', '128', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_verbindlichkeit', 'varchar', '128', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_lieferantengutschrift', 'varchar', '128', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'zahlung_auftrag_sofort_de', 'text', '', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'zahlung_auftrag_de', 'text', '', '', '', '', 1, 1);
@ -10517,15 +10519,19 @@ function SendPaypalFromAuftrag($auftrag, $test = false)
}
}
if($variables['datum']=="") $variables['datum']=date('d.m.Y');
if (is_array($variables)) {
if($variables['datum']=="") {
$variables['datum']=date('d.m.Y');
}
if(!empty($variables))
{
foreach($variables as $key=>$value)
{
$value = $this->UmlauteEntfernen($value);
$xml = str_replace("{".strtoupper($key)."}",$value,$xml);
}
if(!empty($variables))
{
foreach($variables as $key=>$value)
{
$value = $this->UmlauteEntfernen($value);
$xml = str_replace("{".strtoupper($key)."}",$value,$xml);
}
}
}
// y to z wenn Kein PDF -> also nur bei EPL Drucker - 09.06.2019 BS heute auf 0 gestellt bei deutschen adapterboxen eventuell
@ -13246,6 +13252,11 @@ function SendPaypalFromAuftrag($auftrag, $test = false)
return $this->ReplaceANABRELSGSBE("rechnung",$db,$value,$fromform);
}
function ReplaceVerbindlichkeit($db,$value,$fromform)
{
return $this->ReplaceANABRELSGSBE("verbindlichkeit",$db,$value,$fromform);
}
function ReplaceRetoure($db,$value,$fromform)
{
return $this->ReplaceANABRELSGSBE('retoure',$db,$value,$fromform);
@ -25530,31 +25541,31 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p
{
$signaturtext = $this->Signatur($from);
if($this->isHTML($signaturtext))
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br>".$signaturtext;
$body = str_replace('\r\n',"\n",$text)."<br>".$signaturtext;
else
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br>".nl2br($signaturtext);
$body = str_replace('\r\n',"\n",$text)."<br>".nl2br($signaturtext);
}else{
if($projekt > 0 && $this->Projektdaten($projekt,"absendesignatur")!=""){
$signaturtext = $this->Projektdaten($projekt,"absendesignatur");
if($this->isHTML($signaturtext))
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br><br>".$signaturtext;
$body = str_replace('\r\n',"\n",$text)."<br><br>".$signaturtext;
else
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br><br>".$this->ReadyForPDF(nl2br($signaturtext));
$body = str_replace('\r\n',"\n",$text)."<br><br>".$this->ReadyForPDF(nl2br($signaturtext));
}else{
if(strlen(trim($this->Signatur($from))) > 0 && $eigenesignatur == 0){
$signaturtext = $this->Signatur($from);
if($this->isHTML($signaturtext))
$body = str_replace('\r\n',"\n",$text)."<br>".$signaturtext;
else
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br>".nl2br($signaturtext);
$body = str_replace('\r\n',"\n",$text)."<br>".nl2br($signaturtext);
}else{
$body = utf8_decode(str_replace('\r\n',"\n",$text));
$body = str_replace('\r\n',"\n",$text);
}
}
}
} else {
$body = utf8_decode(str_replace('\r\n',"\n",$text));
$body = str_replace('\r\n',"\n",$text);
}
{
@ -25799,6 +25810,7 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p
$uebersetzung['dokument_artikelnummerkunde']['deutsch'] = "Ihre Artikelnummer";
$uebersetzung['dokument_menge']['deutsch'] = "Menge";
$uebersetzung['dokument_gesamt']['deutsch'] = "Gesamt";
$uebersetzung['dokument_gesamt_optional']['deutsch'] = "Gesamt optional";
$uebersetzung['dokument_gesamt_total']['deutsch'] = "Gesamt";
$uebersetzung['dokument_mwst']['deutsch'] = "MwSt.";
$uebersetzung['dokument_zzglmwst']['deutsch'] = "zzgl. MwSt.";
@ -25816,6 +25828,7 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p
$uebersetzung['dokument_ursprungsregion']['deutsch'] = "Ursprungsregion";
$uebersetzung['dokument_gewicht']['deutsch'] = "Gewicht";
$uebersetzung['dokument_gesamtnetto']['deutsch'] = "Gesamt netto";
$uebersetzung['dokument_gesamtnetto_optional']['deutsch'] = "Gesamt netto optional";
$uebersetzung['dokument_seite']['deutsch'] = "Seite";
$uebersetzung['dokument_seitevon']['deutsch'] = "von";
$uebersetzung['dokument_datum']['deutsch'] = "Datum";
@ -26074,7 +26087,14 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p
}
}
else {
$this->app->DB->Update("UPDATE firmendaten SET " . $field . "='$value' WHERE id='" . $firmendatenid . "'");
$column_exists = $this->app->DB->Select("SHOW COLUMNS FROM firmendaten WHERE field = '".$field."'");
if ($column_exists) {
$this->app->DB->Update("UPDATE firmendaten SET " . $field . "='$value' WHERE id='" . $firmendatenid . "'");
} else {
$this->AddNeuenFirmendatenWert($field, $typ, $typ1, $typ2, $value, $default_value, $default_null, $darf_null);
}
}
$db = $this->app->Conf->WFdbname;
if(!empty($this->firmendaten[$db])) {
@ -27720,7 +27740,7 @@ function Firmendaten($field,$projekt="")
$allowedtypes = ['angebot', 'auftrag', 'rechnung', 'lieferschein', 'arbeitsnachweis', 'reisekosten',
'bestellung', 'gutschrift', 'kundennummer', 'lieferantennummer', 'mitarbeiternummer', 'waren',
'produktion', 'sonstiges', 'anfrage', 'artikelnummer', 'kalkulation', 'preisanfrage', 'proformarechnung',
'retoure', 'verbindlichkeit', 'goodspostingdocument', 'receiptdocument'];
'retoure', 'verbindlichkeit','lieferantengutschrift', 'goodspostingdocument', 'receiptdocument'];
$dbfield = "next_$type";
$belegnr = $this->app->DB->Select("SELECT $dbfield FROM projekt WHERE id='$projekt' LIMIT 1");
@ -27846,6 +27866,11 @@ function Firmendaten($field,$projekt="")
if($belegnr == "0" || $belegnr=="") $belegnr = 10000;
$newbelegnr = $this->CalcNextNummer($belegnr);
break;
case "lieferantengutschrift":
$belegnr = $this->Firmendaten("next_lieferantengutschrift");
if($belegnr == "0" || $belegnr=="") $belegnr = 20000;
$newbelegnr = $this->CalcNextNummer($belegnr);
break;
case 'receiptdocument':
$belegnr = $this->Firmendaten('next_receiptdocument');
if($belegnr == '0' || $belegnr=='') {

View File

@ -41,8 +41,15 @@ class AngebotPDF extends BriefpapierCustom {
{
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
$check = $this->app->erp->SteuerAusBeleg($this->doctype,$id);
if(!empty($check)?count($check):0>1)$this->ust_spalteausblende=false;
else $this->ust_spalteausblende=true;
$this->ust_spalteausblende=false;
if(!empty($check)) {
if (count($check) == 1) {
$this->ust_spalteausblende=true;
}
}
}
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');
@ -491,30 +498,29 @@ class AngebotPDF extends BriefpapierCustom {
"rabatt"=>$value['rabatt'],
"steuertext"=>$value['steuertext']));
if($positionenkaufmaenischrunden == 3){
$netto_gesamt = $value['menge'] * round($value['preis'] - ($value['preis'] / 100 * $value['rabatt']),2);
}else{
if (!$value['nicht_einrechnen']) {
$netto_gesamt = $value['menge'] * round($value['preis'] - ($value['preis'] / 100 * $value['rabatt']),2);
}
}else if (!$value['nicht_einrechnen']) {
$netto_gesamt = $value['menge'] * ($value['preis'] - ($value['preis'] / 100 * $value['rabatt']));
}
if($positionenkaufmaenischrunden)
{
$netto_gesamt = round($netto_gesamt, 2);
}
if($value['optional']!="1"){
if(!isset($summen[$value['steuersatz']])) {
$summen[$value['steuersatz']] = 0;
}
if($value['optional']!="1"){
if($value['explodiert_parent'] == 0 || !$berechnen_aus_teile)
{
$summe = $summe + $netto_gesamt;
if(!isset($summen[$value['steuersatz']]))$summen[$value['steuersatz']] = 0;
$summen[$value['steuersatz']] += ($netto_gesamt/100)*$value['steuersatz'];
$summe = $summe + $netto_gesamt;
$gesamtsteuern +=($netto_gesamt/100)*$value['steuersatz'];
}
/*
if($value['umsatzsteuer']=="" || $value['umsatzsteuer']=="normal")
{
$summeV = $summeV + (($netto_gesamt/100)*$this->app->erp->GetSteuersatzNormal(false,$id,"angebot"));
}
else {
$summeR = $summeR + (($netto_gesamt/100)*$this->app->erp->GetSteuersatzErmaessigt(false,$id,"angebot"));
}*/
}
} else {
$summe_netto_optional += $netto_gesamt;
$steuern_optional +=($netto_gesamt/100)*$value['steuersatz'];
}
}
@ -536,7 +542,7 @@ class AngebotPDF extends BriefpapierCustom {
if($this->app->erp->AngebotMitUmsatzeuer($id))
{
$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe + $gesamtsteuern,"summen"=>$summen,"totalTaxV"=>0,"totalTaxR"=>0));
$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe + $gesamtsteuern,"summen"=>$summen,"totalTaxV"=>0,"totalTaxR"=>0,"optional"=>$summe_netto_optional+$steuern_optional,"optional_netto"=>$summe_netto_optional));
//$this->setTotals(array("totalArticles"=>$summe,"totalTaxV"=>$summeV,"totalTaxR"=>$summeR,"total"=>$summe+$summeV+$summeR));
} else {
$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe));

View File

@ -43,8 +43,13 @@ class AuftragPDF extends BriefpapierCustom {
{
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
$check = $this->app->erp->SteuerAusBeleg($this->doctype,$id);
if(!empty($check)?count($check):0>1)$this->ust_spalteausblende=false;
else $this->ust_spalteausblende=true;
$this->ust_spalteausblende=false;
if(!empty($check)) {
if (count($check) == 1) {
$this->ust_spalteausblende=true;
}
}
}
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');

View File

@ -658,7 +658,7 @@ class Briefpapier extends SuperFPDF {
public function addItem($rdata){
// add rabatt
if($rdata['price']!='-'){
if($rdata['price']!='-' && is_numeric($rdata['price'])){
if($rdata['rabatt'] == 100){
$rdata['tprice'] = round($rdata['amount'] * ((double)$rdata['price'] - (double)($rdata['price'] / 100.00 * (double)$rdata['rabatt'])), 13);
}else{
@ -1775,7 +1775,12 @@ class Briefpapier extends SuperFPDF {
$total=$totalFullTax=$totalReducedTax=0;
$citems = !empty($this->items)?count($this->items):0;
for($i=0;$i<$citems;$i++) {
$total += $this->items[$i]['tprice'];
if (!$this->items[$i]['optional']) {
$total += $this->items[$i]['tprice'];
} else {
$totalOptional += $this->items[$i]['tprice'];
}
if($this->items[$i]['tax']=="USTV") {
$totalFullTax+= $this->items[$i]['tprice']*USTV;
}
@ -1783,7 +1788,7 @@ class Briefpapier extends SuperFPDF {
$totalReducedTax+= $this->items[$i]['tprice']*USTR;
}
}
return array($total,$totalFullTax,$totalReducedTax);
return array($total,$totalFullTax,$totalReducedTax,$totalOptional);
}
function GetFont()
@ -2498,7 +2503,6 @@ class Briefpapier extends SuperFPDF {
}
public function renderItems() {
$this->app->erp->RunHook('briefpapier_renderitems',1, $this);
// if($this->bestellungohnepreis) $this->doctype="lieferschein";
$posWidth = $this->getStyleElement("breite_position");
@ -2942,7 +2946,6 @@ class Briefpapier extends SuperFPDF {
if($this->doctype!=='zahlungsavis')
{
if($item['tax']!=='hidden'){
if($anzeigeBelegNettoAdrese){
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
//&& $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
@ -3068,16 +3071,18 @@ class Briefpapier extends SuperFPDF {
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
{
if(!$inventurohnepreis){
$this->Cell_typed($priceWidth,$cellhoehe,$item['ohnepreis']?'':$this->formatMoney((double)$item['tprice']),0,0,'R');
// $this->Cell_typed($priceWidth,$cellhoehe,$item['ohnepreis']?'':$this->formatMoney((double)$item['tprice']),0,0,'R');
$price_displayed = $item['ohnepreis']?'':$this->formatMoney((double)$item['tprice']);
}
}
else{
if(!$inventurohnepreis){
$this->Cell_typed($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
// $this->Cell_typed($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']);
}
}
$this->Cell_typed($rabattWidth,$cellhoehe,"",0,0,'R');
// $this->Cell_typed($rabattWidth,$cellhoehe,"",0,0,'R');
}
}
}
@ -3093,7 +3098,7 @@ class Briefpapier extends SuperFPDF {
$this->Cell_typed($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['price'] * $item['tmptax']), 0, 0, 'R');
}
}
}
}
//$this->Cell_typed($sumWidth,$cellhoehe,$this->formatMoney($item['tprice']).' '.$item['currency'],0,0,'R');
if($this->rabatt=='1')
{
@ -3107,12 +3112,14 @@ class Briefpapier extends SuperFPDF {
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
if(!$inventurohnepreis){
$this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
// $this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']);
}
}
else{
if(!$inventurohnepreis){
$this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
// $this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']);
}
}
}
@ -3121,18 +3128,29 @@ class Briefpapier extends SuperFPDF {
// if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
if(!$inventurohnepreis){
$this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
// $this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']);
}
}
else{
if(!$inventurohnepreis){
$this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
// $this->Cell_typed($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
$price_displayed = $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']);
}
}
}
}
}
// OpenXE add price here
if (!empty($price_displayed)) {
if ($item['optional']) {
$this->Cell_typed($sumWidth, $cellhoehe, "(".$price_displayed.")", 0, 0, 'R');
} else {
$this->Cell_typed($sumWidth, $cellhoehe, $price_displayed, 0, 0, 'R');
}
}
}
else if(($this->doctype==='lieferschein' || $this->doctype==='preisanfrage') && $this->getStyleElement('artikeleinheit')=='1')
{
@ -4008,7 +4026,7 @@ class Briefpapier extends SuperFPDF {
}
$beschriftung_zeile = ucfirst($zwischenpositionen[$i]['postype']);
if($data['name']=="")
$html = ($fett?"<b>":"").$beschriftung_zeile.($fett?"</b>":"");
else
@ -4029,10 +4047,10 @@ class Briefpapier extends SuperFPDF {
$abstand_links = $posWidth +$itemNoWidth;
}
$this->SetX($x+$abstand_links);
$text = $this->WriteHTML($html);
$text = empty($text)?"":$text;
$this->SetX($x+$abstand_links);
$text = $this->WriteHTML($html);
$text = empty($text)?"":$text;
$this->Cell_typed($descWidth,4,);
$this->SetX($x+$abstand_links+$descWidth);
@ -4279,7 +4297,7 @@ class Briefpapier extends SuperFPDF {
$this->Cell_typed(40,3,'',0,0,'R');
}
$this->Ln();
}
}
$this->SetY($this->GetY()+2);
//$this->Line(110, $this->GetY(), 190,$this->GetY());
}
@ -4320,6 +4338,16 @@ class Briefpapier extends SuperFPDF {
$this->Line($differenz_wegen_abstand+5, $this->GetY(), 210-$this->getStyleElement('abstand_seitenrandrechts'),$this->GetY());
$this->Line($differenz_wegen_abstand+5, $this->GetY()+1, 210-$this->getStyleElement('abstand_seitenrandrechts'),$this->GetY()+1);
}
if(isset($this->totals['optional'])) {
$this->SetFont($this->GetFont(),'',$this->getStyleElement('schriftgroesse_gesamt'));
$this->Ln(2);
$this->Cell_typed($differenz_wegen_abstand,1,'',0);
$this->Cell_typed(30,5,"(".$this->app->erp->Beschriftung('dokument_gesamt_optional'),0,0,'L');
$this->Cell_typed(40,5,$this->formatMoney(round($this->totals['optional'],2), 2).' '.$this->waehrung.")",0,0,'R');
$this->Ln();
}
$this->SetY($this->GetY()+10);
}

View File

@ -1,201 +1,202 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
use Xentral\Components\Barcode\BarcodeFactory;
include_once "class.superfpdf.php";
class EtikettenPDF extends SuperFPDF {
function __construct($app,$projekt="") {
$this->app=$app;
$this->page_definded=false;
}
function SetXML($xml)
{
if(empty($xml))return;
$xml = str_replace('&','&amp;', $xml);
try {
$label = new SimpleXMLElement($xml);
} catch (Exception $e) {
return;
}
foreach($label as $key=>$items)
{
switch($key)
{
case "settings":
if(!$this->page_definded)
{
parent::__construct('P','mm',array(trim($items->attributes()->width),trim($items->attributes()->height)));
$this->page_definded = true;
}
$this->SetAutoPageBreak(false);
$this->SetFont('Arial','B',4);
$this->SetLeftMargin(0);
$this->SetMargins(0,0,0);
$this->AddPage();
break;
case "line":
$this->SetXY(trim($items->attributes()->x),$items->attributes()->y,$items[0]);
$this->SetFont('Arial','',$items->attributes()->size*2);
$this->MultiCell(0,$items->attributes()->size,$items[0],0,'L');
break;
case "rectangle":
$attributes = $items->attributes();
$borderwidth = 1;
if(isset($attributes->size))$borderwidth = $attributes->size;
$this->SetLineWidth($borderwidth / 10);
$this->Rect($items->attributes()->x, $items->attributes()->y,trim($items->attributes()->width),trim($items->attributes()->height),'B');
break;
case "image":
$filename = '';
if(isset($items->attributes()->src))
{
$src = str_replace('&amp;','&',$items->attributes()->src);
if(stripos($src,'http://') === false && stripos($src,'https://') === false)
{
$src = 'http://'.$src;
}
$content = file_get_contents($src);
if($content)
{
$filename = rtrim($this->app->erp->GetTMP(),'/').'/'.md5(microtime(true).$items[0]);
file_put_contents($filename.'1.jpg', $content);
$bildbreite = trim($items->attributes()->width);
$bildhoehe = trim($items->attributes()->height);
if(!class_exists('image'))include_once(__DIR__.'/../class.image.php');
$img = new image($this->app);
if($bildbreite > 0)
{
$breite = $bildbreite;
}else{
$breite = 30;
}
if($bildhoehe > 0)
{
$hoehe = $bildhoehe;
}else{
$hoehe = $breite;
}
$_breite = $breite;
$_hoehe = $hoehe;
list($width, $height) = getimagesize($filename.'1.jpg');
if($width > 0 && $height > 0)
{
$scalex = $breite / $width;
$scaley = $hoehe / $height;
if($scalex < $scaley)
{
$hoehe /= $scaley / $scalex;
$hoehe = ceil($hoehe);
}else{
$breite /= $scalex / $scaley;
$breite = ceil($breite);
}
$str = $content;
$manipulator = new ImageManipulator($str);
$manipulator->resample($_breite*10, $_hoehe*10, false,true, true);
$typ = IMAGETYPE_JPEG;
$manipulator->save($filename.'2.jpg', $typ);
$items[0] = $filename.'2.jpg';
}
}
}
$type = exif_imagetype ( trim($items[0]) );
switch($type)
{
case IMAGETYPE_GIF: $type="gif"; break;
case IMAGETYPE_JPEG: $type="jpg"; break;
case IMAGETYPE_PNG: $type="png"; break;
default: $type="";
}
if($type!="")
{
$this->Image(trim($items[0]),trim($items->attributes()->x),trim($items->attributes()->y),trim($items->attributes()->width),trim($items->attributes()->height),$type);
}
if($filename != '')
{
unlink($filename.'1.jpg');
unlink($filename.'2.jpg');
}
break;
case "barcode":
if((String)($items->attributes()->type)=="E30") {
$this->EAN13($items->attributes()->x,$items->attributes()->y, $items[0],$items->attributes()->size);
}
else if((String)($items->attributes()->type)=="Code128" || (String)($items->attributes()->type)=="1") {
$this->Code128($items->attributes()->x, $items->attributes()->y, $items[0], $items->attributes()->width, $items->attributes()->size);
}
else if((String)($items->attributes()->type)=="GS1-128" || (String)($items->attributes()->type)=="1") {
//$items[0] = "!FNC1!0104012345012345!FNC1!081231!FNC1!1012345";
$tmp =explode("!FNC1!",$items[0]);
$codewithfnc1 = implode(chr(206),$tmp);
//echo chr(206)."0104012345012345".chr(206)."081231".chr(206)."1012345";
//$this->Code128($items->attributes()->x, $items->attributes()->y, chr(206)."0104012345012345".chr(206)."081231".chr(206)."1012345", $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
$this->Code128($items->attributes()->x, $items->attributes()->y, $codewithfnc1, $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
//$this->Code128($items->attributes()->x, $items->attributes()->y, chr(206).$items[0], $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
}
else { // standard auf 2 bzw default
$this->Code39($items->attributes()->x,$items->attributes()->y, $items[0], 0.5, $items->attributes()->size);//, $printText=false)
}
break;
case "qrcode":
/** @var BarcodeFactory $factory */
$factory = $this->app->Container->get('BarcodeFactory');
$ecLevel = 'M';
$type = 'png';
$filename = rtrim($this->app->erp->GetTMP(),'/').'/'.md5(microtime(true).$items[0]).'.' . $type;
$qrText = (string) $items[0];
$qrcode = $factory->createQrCode($qrText, $ecLevel);
$width = $items->attributes()->width ?? $items->attributes()->size;
$height = $items->attributes()->height ?? $items->attributes()->size;
$image = $qrcode->toPng(trim($width), trim($height));
if(file_put_contents($filename, $image) === false) {
throw new RuntimeException('qrcode image cannot be created. Perhaps due to missing write permission');
}
unset($image);
$this->Image(
trim($filename),
trim((int) $items->attributes()->x),
trim((int) $items->attributes()->y),
trim((int) $width),
trim((int) $height),
$type
);
unlink($filename);
break;
}
}
}
}
<?php
use Xentral\Components\Barcode\BarcodeFactory;
include_once "class.superfpdf.php";
class EtikettenPDF extends SuperFPDF {
function __construct($app,$projekt="") {
$this->app=$app;
$this->page_definded=false;
$this->images = array();
}
function SetXML($xml)
{
if(empty($xml))return;
$xml = str_replace('&','&amp;', $xml);
try {
$label = new SimpleXMLElement($xml);
} catch (Exception $e) {
return;
}
foreach($label as $key=>$items)
{
switch($key)
{
case "settings":
if(!$this->page_definded)
{
parent::__construct('P','mm',array(trim($items->attributes()->width),trim($items->attributes()->height)));
$this->page_definded = true;
}
$this->SetAutoPageBreak(false);
$this->SetFont('Arial','B',4);
$this->SetLeftMargin(0);
$this->SetMargins(0,0,0);
$this->AddPage();
break;
case "line":
$this->SetXY(trim($items->attributes()->x),$items->attributes()->y,$items[0]);
$this->SetFont('Arial','',$items->attributes()->size*2);
$this->MultiCell(0,$items->attributes()->size,$items[0],0,'L');
break;
case "rectangle":
$attributes = $items->attributes();
$borderwidth = 1;
if(isset($attributes->size))$borderwidth = $attributes->size;
$this->SetLineWidth($borderwidth / 10);
$this->Rect($items->attributes()->x, $items->attributes()->y,trim($items->attributes()->width),trim($items->attributes()->height),'B');
break;
case "image":
$filename = '';
if(isset($items->attributes()->src))
{
$src = str_replace('&amp;','&',$items->attributes()->src);
if(stripos($src,'http://') === false && stripos($src,'https://') === false)
{
$src = 'http://'.$src;
}
$content = file_get_contents($src);
if($content)
{
$filename = rtrim($this->app->erp->GetTMP(),'/').'/'.md5(microtime(true).$items[0]);
file_put_contents($filename.'1.jpg', $content);
$bildbreite = trim($items->attributes()->width);
$bildhoehe = trim($items->attributes()->height);
if(!class_exists('image'))include_once(__DIR__.'/../class.image.php');
$img = new image($this->app);
if($bildbreite > 0)
{
$breite = $bildbreite;
}else{
$breite = 30;
}
if($bildhoehe > 0)
{
$hoehe = $bildhoehe;
}else{
$hoehe = $breite;
}
$_breite = $breite;
$_hoehe = $hoehe;
list($width, $height) = getimagesize($filename.'1.jpg');
if($width > 0 && $height > 0)
{
$scalex = $breite / $width;
$scaley = $hoehe / $height;
if($scalex < $scaley)
{
$hoehe /= $scaley / $scalex;
$hoehe = ceil($hoehe);
}else{
$breite /= $scalex / $scaley;
$breite = ceil($breite);
}
$str = $content;
$manipulator = new ImageManipulator($str);
$manipulator->resample($_breite*10, $_hoehe*10, false,true, true);
$typ = IMAGETYPE_JPEG;
$manipulator->save($filename.'2.jpg', $typ);
$items[0] = $filename.'2.jpg';
}
}
}
$type = exif_imagetype ( trim($items[0]) );
switch($type)
{
case IMAGETYPE_GIF: $type="gif"; break;
case IMAGETYPE_JPEG: $type="jpg"; break;
case IMAGETYPE_PNG: $type="png"; break;
default: $type="";
}
if($type!="")
{
$this->Image(trim($items[0]),trim($items->attributes()->x),trim($items->attributes()->y),trim($items->attributes()->width),trim($items->attributes()->height),$type);
}
if($filename != '')
{
unlink($filename.'1.jpg');
unlink($filename.'2.jpg');
}
break;
case "barcode":
if((String)($items->attributes()->type)=="E30") {
$this->EAN13($items->attributes()->x,$items->attributes()->y, $items[0],$items->attributes()->size);
}
else if((String)($items->attributes()->type)=="Code128" || (String)($items->attributes()->type)=="1") {
$this->Code128($items->attributes()->x, $items->attributes()->y, $items[0], $items->attributes()->width, $items->attributes()->size);
}
else if((String)($items->attributes()->type)=="GS1-128" || (String)($items->attributes()->type)=="1") {
//$items[0] = "!FNC1!0104012345012345!FNC1!081231!FNC1!1012345";
$tmp =explode("!FNC1!",$items[0]);
$codewithfnc1 = implode(chr(206),$tmp);
//echo chr(206)."0104012345012345".chr(206)."081231".chr(206)."1012345";
//$this->Code128($items->attributes()->x, $items->attributes()->y, chr(206)."0104012345012345".chr(206)."081231".chr(206)."1012345", $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
$this->Code128($items->attributes()->x, $items->attributes()->y, $codewithfnc1, $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
//$this->Code128($items->attributes()->x, $items->attributes()->y, chr(206).$items[0], $items->attributes()->width, $items->attributes()->size); // 206 = FNC1
}
else { // standard auf 2 bzw default
$this->Code39($items->attributes()->x,$items->attributes()->y, $items[0], 0.5, $items->attributes()->size);//, $printText=false)
}
break;
case "qrcode":
/** @var BarcodeFactory $factory */
$factory = $this->app->Container->get('BarcodeFactory');
$ecLevel = 'M';
$type = 'png';
$filename = rtrim($this->app->erp->GetTMP(),'/').'/'.md5(microtime(true).$items[0]).'.' . $type;
$qrText = (string) $items[0];
$qrcode = $factory->createQrCode($qrText, $ecLevel);
$width = $items->attributes()->width ?? $items->attributes()->size;
$height = $items->attributes()->height ?? $items->attributes()->size;
$image = $qrcode->toPng(trim($width), trim($height));
if(file_put_contents($filename, $image) === false) {
throw new RuntimeException('qrcode image cannot be created. Perhaps due to missing write permission');
}
unset($image);
$this->Image(
trim($filename),
trim((int) $items->attributes()->x),
trim((int) $items->attributes()->y),
trim((int) $width),
trim((int) $height),
$type
);
unlink($filename);
break;
}
}
}
}

View File

@ -43,8 +43,13 @@ class GutschriftPDF extends BriefpapierCustom {
{
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
$check = $this->app->erp->SteuerAusBeleg($this->doctype,$id);
if(!empty($check)?count($check):0>1)$this->ust_spalteausblende=false;
else $this->ust_spalteausblende=true;
$this->ust_spalteausblende=false;
if(!empty($check)) {
if (count($check) == 1) {
$this->ust_spalteausblende=true;
}
}
}
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');

View File

@ -50,8 +50,13 @@ class RechnungPDF extends BriefpapierCustom {
{
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
$check = $this->app->erp->SteuerAusBeleg($this->doctype,$id);
if(!empty($check)?count($check):0>1)$this->ust_spalteausblende=false;
else $this->ust_spalteausblende=true;
$this->ust_spalteausblende=false;
if(!empty($check)) {
if (count($check) == 1) {
$this->ust_spalteausblende=true;
}
}
}
$lvl = null;
$briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden');

View File

@ -3832,10 +3832,13 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$term = str_replace(',','',$term);
}
$adresse = (int)$this->app->Secure->GetGET('adresse');
if (!empty($adresse)) {
$subwhere .= " AND a.id = ".$adresse;
}
$sql =
"SELECT CONCAT(v.id,
IF(IFNULL(v.belegnr, '') <> '' AND v.belegnr!=v.id,
CONCAT(' Nr. ',v.belegnr),''),
"SELECT CONCAT(v.belegnr,
' Betrag: ',".$this->app->erp->FormatPreis('v.betrag',2).",
if(v.skonto <> 0,CONCAT(' mit Skonto ',v.skonto,'% ',
".$this->app->erp->FormatPreis("v.betrag-((v.betrag/100.0)*v.skonto)",2)."),''),' ',
@ -3848,7 +3851,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
a.name,' (Lieferant ',a.lieferantennummer,if(a.lieferantennummer_buchhaltung!='' AND a.lieferantennummer <> a.lieferantennummer_buchhaltung,CONCAT(' ',a.lieferantennummer_buchhaltung),''),') RE ',v.rechnung,' Rechnungsdatum ',DATE_FORMAT(v.rechnungsdatum,'%d.%m.%Y')) as bezeichnung
FROM verbindlichkeit AS v
LEFT JOIN adresse AS a ON a.id=v.adresse
WHERE ($subwhere) AND bezahlt!=1 AND status!='storniert'
WHERE ($subwhere) AND bezahlt!=1 AND status!='storniert' AND belegnr <> ''
ORDER by v.id DESC"; //AND v.status!='bezahlt' // heute wieder raus
$arr = $this->app->DB->SelectArr($sql);

View File

@ -1800,22 +1800,35 @@ class Artikel extends GenArtikel {
// SQL statement
if (!empty($this->app->Conf->WFdbType) && $this->app->Conf->WFdbType == 'postgre') {
$sql = 'SELECT s.id, a.name_de as artikel,a.nummer as nummer, trim(s.menge)+0 as menge,
CASE WHEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) > 0
THEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id)
ELSE 0
END as lager, s.artikel as menu
$sql = 'SELECT
s.id,
a.name_de as artikel,
a.nummer as nummer,
trim(SUM(s.menge))+0 as menge,
CASE
WHEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id) > 0
THEN (SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id)
ELSE 0
END as lager,
s.artikel as menu
FROM stueckliste s LEFT JOIN artikel a ON s.artikel=a.id ';
} else {
$sql = 'SELECT SQL_CALC_FOUND_ROWS s.id, a.name_de as artikel,a.nummer as nummer, trim(s.menge)+0 as menge,
s.stuecklistevonartikel
as menu
FROM stueckliste s LEFT JOIN artikel a ON s.stuecklistevonartikel=a.id ';
$sql = ' SELECT SQL_CALC_FOUND_ROWS
s.id,
a.name_de as artikel,
a.nummer as nummer,
trim(SUM(s.menge))+0 as menge,
s.stuecklistevonartikel AS menu
FROM
stueckliste s
LEFT JOIN artikel a ON s.stuecklistevonartikel=a.id ';
}
// Fester filter
$where = "s.artikel='$id' ";
$groupby = " GROUP BY a.id";
// gesamt anzahl
$count = "SELECT COUNT(s.id) FROM stueckliste s WHERE s.stuecklistevonartikel='$id' ";
break;

View File

@ -0,0 +1,238 @@
<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
class Belegevorlagen
{
static function TableSearch(&$app, $name, $erlaubtevars)
{
switch($name)
{
case "belegevorlagen_list":
$heading = array('Bezeichnung','Belegtyp','Projekt','Men&uuml;');
$width = array('40%','20%','29%','1%');
$findcols = array('b.bezeichnung','b.belegtyp','pr.abkuerzung','b.id');
$searchsql = array('b.bezeichnung','b.belegtyp','pr.abkuerzung');
$menu = "<table><tr><td nowrap><a href=\"#\" onclick=\"deletevorlage(%value%);\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a></td></tr></table>";
$sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.bezeichnung,CONCAT(UCASE(LEFT(b.belegtyp, 1)), SUBSTRING(b.belegtyp, 2)), pr.abkuerzung, b.id FROM belegevorlagen b LEFT JOIN projekt pr ON b.projekt = pr.id";
$where = $app->erp->ProjektRechte('b.projekt');
break;
case "belegevorlagen_list2":
$belegtyp = $app->Secure->GetGET('smodule');
$heading = array('Bezeichnung','Projekt','Men&uuml;');
$width = array('50%','49%','1%');
$findcols = array('b.bezeichnung','pr.abkuerzung','b.id');
$searchsql = array('b.bezeichnung','pr.abkuerzung');
$menu = "<table><tr><td nowrap><a href=\"#\" onclick=\"loadbelegvorlage(%value%);\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/forward.svg\" border=\"0\"></a>&nbsp;<a href=\"#\" onclick=\"deletevorlage(%value%);\"><img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a></td></tr></table>";
$sql = "SELECT SQL_CALC_FOUND_ROWS b.id, b.bezeichnung, pr.abkuerzung, b.id FROM belegevorlagen b LEFT JOIN projekt pr ON b.projekt = pr.id";
$where = "belegtyp = '$belegtyp' ".$app->erp->ProjektRechte('b.projekt');
break;
}
$erg = false;
foreach($erlaubtevars as $k => $v)
{
if(isset($$v))$erg[$v] = $$v;
}
return $erg;
}
function __construct(&$app, $intern = false)
{
$this->app=&$app;
$this->artikel = $this->app->erp->GetKonfiguration('gesamtrabatt_artikel');
if($intern)return;
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list","BelegevorlagenList");
$this->app->ActionHandler("einstellungen","BelegevorlagenEinstellungen");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
}
function BelegevorlagenMenu(){
$this->app->erp->MenuEintrag("index.php?module=belegevorlagen&action=list","&Uuml;bersicht");
$this->app->erp->MenuEintrag("index.php?module=belegevorlagen&action=einstellungen","Einstellungen");
}
function BelegevorlagenList()
{
if($this->app->Secure->GetGET('cmd') == 'delvorlage')
{
$id = (int)$this->app->Secure->GetPOST('lid');
$this->app->DB->Delete("DELETE FROM belegevorlagen WHERE id = '$id' LIMIT 1");
echo json_encode(array('status'=>1));
exit;
}
$this->BelegevorlagenMenu();
$this->app->YUI->TableSearch('TAB1', "belegevorlagen_list", "show","","",basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','belegevorlagen_list.tpl');
}
function BelegevorlagenEinstellungen()
{
$this->BelegevorlagenMenu();
$this->app->Tpl->Set('PREISEAKTUALISIEREN',$this->app->erp->GetKonfiguration('belegevorlagen_preiseaktualisieren')=='on'?'checked':'');
$this->app->YUI->AutoSaveKonfiguration('preiseaktualisieren','belegevorlagen_preiseaktualisieren');
$this->app->Tpl->Parse('PAGE','belegevorlagen_einstellungen.tpl');
}
function Install()
{
$this->app->erp->CheckTable('belegevorlagen');
$this->app->erp->CheckColumn("id","int(11)","belegevorlagen","DEFAULT '0' NOT NULL AUTO_INCREMENT");
$this->app->erp->CheckColumn("belegtyp", "varchar(255)", "belegevorlagen", "DEFAULT '' NOT NULL");
$this->app->erp->CheckColumn("bezeichnung", "varchar(255)", "belegevorlagen", "DEFAULT '' NOT NULL");
$this->app->erp->CheckColumn("projekt", "int(11)", "belegevorlagen", "DEFAULT '0' NOT NULL");
$this->app->erp->CheckColumn("json", "MEDIUMTEXT", "belegevorlagen", "DEFAULT '' NOT NULL");
$this->app->erp->CheckColumn("bearbeiter", "varchar(255)", "belegevorlagen", "DEFAULT '' NOT NULL");
$this->app->erp->CheckColumn("zeitstempel", "timestamp", "belegevorlagen","DEFAULT CURRENT_TIMESTAMP NOT NULL");
$this->app->erp->RegisterHook('BelegPositionenButtons', 'belegevorlagen', 'BelegevorlagenBelegPositionenButtons');
$this->app->erp->RegisterHook('AARLGPositionen_cmds_end', 'belegevorlagen', 'BelegevorlagenAARLGPositionen_cmds_end');
$this->app->erp->RegisterHook('ajax_filter_hook1', 'belegevorlagen', 'Belegevorlagenajax_filter_hook1');
}
function Belegevorlagenajax_filter_hook1($filtername,&$newarr, $term, $term2, $term3)
{
if($filtername == 'belegvorlagen')
{
$arr = $this->app->DB->SelectArr("SELECT CONCAT(b.id,' ',b.bezeichnung) as bezeichnung FROM belegevorlagen b
WHERE (b.bezeichnung LIKE '%$term%') ".$this->app->erp->ProjektRechte('b.projekt'));
if($arr)
{
for($i=0;$i<count($arr);$i++)
$newarr[] = $arr[$i]['bezeichnung'];
}
}
}
function BelegevorlagenBelegPositionenButtons($target, $module, $id)
{
if($module=="angebot" || $module=="auftrag" || $module=="rechnung" || $module=="lieferschein" || $module=="gutschrift" || $module=="proformarechnung")
{
$this->app->Tpl->Set('ID', $id);
$this->app->Tpl->Set('MODULE', $module);
$this->app->YUI->AutoComplete('bestehendevorlage','belegvorlagen');
$this->app->YUI->TableSearch('BELEGEVORLAGENTABELLE', "belegevorlagen_list2", "show","","",basename(__FILE__), __CLASS__);
$this->app->Tpl->Add($target, "<input type=\"button\" id=\"belegevorlagen\" value=\"Belegevorlagen\">&nbsp;".$this->app->Tpl->Parse($target,'belegevorlagen_widget.tpl'));
}
}
function BelegevorlagenAARLGPositionen_cmds_end($id){
$module = $this->app->Secure->GetGET('module');
if(!$module)return;
$projekt = $this->app->DB->Select("SELECT projekt FROM $module WHERE id='$id' LIMIT 1");
if($projekt <=0) $projekt=0;
if($this->app->Secure->GetGET('cmd') == 'deletebelegvorlage')
{
$status = 1;
$lid = (int)$this->app->Secure->GetPOST('lid');
$this->app->DB->Delete("DELETE FROM belegevorlagen WHERE id = '$lid' AND belegtyp = '$module' LIMIT 1");
echo json_encode(array('status'=>$status));
exit;
}
if($this->app->Secure->GetGET('cmd') == 'loadbelegvorlage')
{
$status = 0;
$lid = (int)$this->app->Secure->GetPOST('lid');
$json = (String)$this->app->DB->Select("SELECT json FROM belegevorlagen WHERE id = '$lid' AND belegtyp = '$module' LIMIT 1");
if($json !== '')
{
$json = json_decode($json, true);
$maxsort = (int)$this->app->DB->Select("SELECT max(sort) FROM $module"."_position WHERE $module = '$id' LIMIT 1");
if(isset($json['positionen']))
{
foreach($json['positionen'] as $v)
{
$v[$module] = $id;
if($this->app->erp->GetKonfiguration('belegevorlagen_preiseaktualisieren')=='on'){
if($v['artikel'] != '0'){
$v['preis'] = $this->app->erp->GetVerkaufspreis($v['artikel'],$v['menge']);
}
}
$v['sort'] += $maxsort;
$this->app->DB->Insert("INSERT INTO $module"."_position (id) VALUES ('')");
$idnew = $this->app->DB->GetInsertID();
$oldtonew[$v['id']] = $idnew;
if($v['explodiert_parent'] && isset($oldtonew) && isset($oldtonew[$v['explodiert_parent']]))$v['explodiert_parent'] = $oldtonew[$v['explodiert_parent']];
unset($v['id']);
$this->app->DB->UpdateArr($module.'_position',$idnew,"id",$v, true);
if(is_null($v['steuersatz']))$this->app->DB->Update("UPDATE ".$module."_position SET steuersatz = NULL WHERE id = '$idnew' LIMIT 1");
}
}
if(isset($json['zwischenpositionen']))
{
$maxpos = $this->app->DB->SelectArr("SELECT id,sort FROM beleg_zwischenpositionen WHERE doctype = '$module' AND doctypeid = '$id' AND pos='$maxsort' ORDER BY sort DESC LIMIT 1");
if($maxpos)
{
$sortoffset = 1 + $maxpos[0]['sort'];
}else{
$sortoffset = 0;
}
foreach($json['zwischenpositionen'] as $v)
{
if($v['pos'] == 0)$v['sort'] += $sortoffset;
$v['doctypeid'] = $id;
$v['pos'] += $maxsort;
unset($v['id']);
$this->app->DB->Insert("INSERT INTO beleg_zwischenpositionen (id) VALUES ('')");
$idnew = $this->app->DB->GetInsertID();
$this->app->DB->UpdateArr('beleg_zwischenpositionen',$idnew,"id",$v, true);
}
}
$status = 1;
$this->app->erp->ANABREGSNeuberechnen($id,$module);
}
echo json_encode(array('status'=>$status));
exit;
}
if($this->app->Secure->GetGET('cmd') == 'savebelegevorlage')
{
$json = null;
$status = 0;
$bestehendevorlage = (int)reset(explode(' ',$this->app->Secure->GetPOST('bestehendevorlage')));
$bezeichnung = (String)$this->app->Secure->GetPOST('bezeichnung');
$vorlagetyp = $this->app->Secure->GetPOST('vorlagetyp');
$bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName());
$lid = null;
if($vorlagetyp == 'neu')
{
if($bezeichnung !== '')
{
$this->app->DB->Insert("INSERT INTO belegevorlagen (bezeichnung, belegtyp, bearbeiter, zeitstempel,projekt) VALUES ('$bezeichnung','$module','$bearbeiter',now(),'$projekt')");
$lid = $this->app->DB->GetInsertID();
}
}else{
$lid = $this->app->DB->Select("SELECT id FROM belegevorlagen WHERE id = '$bestehendevorlage' LIMIT 1");
if($lid && $bezeichnung !== '')$this->app->DB->Update("UPDATE belegevorlagen set bezeichnung = '$bezeichnung' WHERE id = '$bestehendevorlage' LIMIT 1");
}
if($lid)
{
$json['positionen'] = $this->app->DB->SelectArr("SELECT * FROM $module"."_position WHERE $module = '$id' ORDER BY sort");
$json['zwischenpositionen'] = $this->app->DB->SelectArr("SELECT * FROM beleg_zwischenpositionen WHERE doctype = '$module' AND doctypeid = '$id' ORDER BY pos, sort");
$json = $this->app->DB->real_escape_string(json_encode($json));
$this->app->DB->Update("UPDATE belegevorlagen set json = '$json', zeitstempel = now(), bearbeiter = '$bearbeiter' WHERE id = '$lid' LIMIT 1");
$status = 1;
}
echo json_encode(array('status'=>$status));
exit;
}
}
}
?>

View File

@ -0,0 +1,20 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"><!--[TABTEXT]--></a></li>
</ul>
<!-- ende gehort zu tabview -->
<!-- erstes tab -->
<div id="tabs-1">
[MESSAGE]
<fieldset>
<legend>Einstellungen</legend>
<input type="checkbox" name="preiseaktualisieren" id="preiseaktualisieren" [PREISEAKTUALISIEREN] /> <label for="preiseaktualisieren">Aktuelle Artikelpreise verwenden wenn Belegvorlage geladen wird.</label>
</fieldset>
[TAB1]
[TAB1NEXT]
</div>
<!-- tab view schließen -->
</div>

View File

@ -0,0 +1,38 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"><!--[TABTEXT]--></a></li>
</ul>
<!-- ende gehort zu tabview -->
<!-- erstes tab -->
<div id="tabs-1">
[MESSAGE]
[TAB1]
[TAB1NEXT]
</div>
<!-- tab view schließen -->
</div>
<script type="text/javascript">
function deletevorlage(belegid)
{
if(confirm('Vorlage wirklich löschen?'))
{
$('#belegevorlagendiv').dialog('close');
$.ajax({
url: 'index.php?module=belegevorlagen&action=list&cmd=delvorlage',
type: 'POST',
dataType: 'json',
data: {lid:belegid},
success: function(data) {
var oTable = $('#belegevorlagen_list').DataTable( );
oTable.ajax.reload();
},
beforeSend: function() {
}
});
}
}
</script>

View File

@ -27,6 +27,10 @@
<td>{|Verbindlichkeiten:|}</td>
<td><input type="checkbox" name="verbindlichkeit" value="1" [VBCHECKED] /></td>
</tr>
<tr>
<td>{|Lieferantengutschriften:|}</td>
<td><input type="checkbox" name="lieferantengutschrift" value="1" [LGCHECKED] /></td>
</tr>
<tr>
<td>Datum von:</td>
<td><input type="text" name="von" id="von" value="[VON]" /></td>

View File

@ -775,6 +775,10 @@
<td>Nächste Verbindlichkeitsnummer:</td><td><input type="text" name="next_verbindlichkeit" readonly value="[NEXT_VERBINDLICHKEIT]" size="40">
<input type="button" onclick="next_number('verbindlichkeit','[NEXT_VERBINDLICHKEIT]');" value="bearbeiten"></td>
</tr>
<tr>
<td>Nächste Lieferantengutschriftnummer:</td><td><input type="text" name="next_lieferantengutschrift" readonly value="[NEXT_LIEFERANTENGUTSCHRIFT]" size="40">
<input type="button" onclick="next_number('lieferantengutschrift','[NEXT_LIEFERANTENGUTSCHRIFT]');" value="bearbeiten"></td>
</tr>
<tr>
<td>N&auml;chste Kundennummer:</td><td><input type="text" name="next_kundennummer" readonly value="[NEXT_KUNDENNUMMER]" size="40">
<input type="button" onclick="next_number('kundennummer','[NEXT_KUNDENNUMMER]');" value="bearbeiten"></td>

View File

@ -0,0 +1,55 @@
[POSITIONENMESSAGE]
<form method="post" action="#tabs-2">
<div class="row" [POSITIONHINZUFUEGENHIDDEN]>
<div class="row-height">
<div class="col-xs-14 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend style="float:left">Artikel hinzuf&uuml;gen:</legend>
<div class="filter-box filter-usersave" style="float:right;">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="passende" class="switch">
<input type="checkbox" id="passende">
<span class="slider round"></span>
</label>
<label for="passende">{|Nur passende (Bestellung/Rechnungsnummer)|}</label>
</li>
</ul>
</div>
</div>
[ARTIKELMANUELL]
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
<tr [HINZUFUEGENHIDDEN]>
<td>
{|Multifilter|}:&nbsp;<img src="./themes/new/images/tooltip_grau.png" border="0" style="position: relative; left: 1px; top: 3px; z-index: 8;" class="wawitooltipicon" title="Auswahl mehrerer Artikel &uuml;ber Name oder Nummer">
</td>
</tr>
<tr>
<td><input type="checkbox" name="bruttoeingabe" value="1" />Bruttopreise eingeben</td>
</tr>
<tr [HINZUFUEGENHIDDEN]>
<td>
<input type="text" name="multifilter" id="multifilter" value="[MULTIFILTER]" size="20" style="width:98%;" form="">
</td>
</tr>
<tr>
<td><button [SAVEDISABLED] name="submit" value="artikel_manuell_hinzufuegen" class="ui-button-icon" style="width:100%;">Hinzuf&uuml;gen</button></td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>

View File

@ -0,0 +1,219 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">Lieferantengutschrift</a></li>
<li [POSITIONENHIDDEN]><a href="#tabs-2">Positionen</a></li>
<li [POSITIONENHIDDEN]><a href="#tabs-4">Artikel manuell</a></li>
<li><a href="#tabs-3">Protokoll</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-6 col-md-height">
<div class="inside inside-full-height">
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-8 col-md-height">
<div class="inside inside-full-height">
<fieldset style="float: left;">
<legend>{|<b>Lieferantengutschrift <font color="blue">[BELEGNR]</font></b> Lf-Nr. <a href="index.php?module=adresse&action=edit&id=[ADRESSE_ID]">[LIEFERANTENNUMMER]|}</a></legend>
[STATUSICONS]
</fieldset>
<fieldset style="float: right;">
<button name="submit" value="speichern" class="ui-button-icon" style="width:100%;">Speichern</button>
</fieldset>
</div>
</div>
</div>
</div>
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-8 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Status|}:
</td>
<td>
<input type="text" value="[STATUS]" size="20" disabled>
</td>
</tr>
<tr>
<td>
{|Adresse|}:
</td>
<td>
<input type="text" name="adresse" id="adresse" value="[ADRESSE]" size="20" [ADRESSESAVEDISABLED] required>
</td>
</tr>
<tr>
<td>
{|Lieferantengutschrifts-Nr.|}:
</td>
<td>
<input type="text" name="rechnung" id="rechnung" value="[RECHNUNG]" size="20" [SAVEDISABLED] required>
</td>
</tr>
<tr>
<td>
{|Lieferantengutschriftsdatum|}:
</td>
<td>
<input type="text" name="rechnungsdatum" id="rechnungsdatum" value="[RECHNUNGSDATUM]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Eingangsdatum|}:
</td>
<td>
<input type="text" name="eingangsdatum" id="eingangsdatum" value="[EINGANGSDATUM]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Betrag brutto|}:
</td>
<td>
<input type="number" step="0.01" name="betrag" id="betrag" value="[BETRAG]" size="20" [SAVEDISABLED]>
<select name="waehrung" [SAVEDISABLED]>[WAEHRUNGSELECT]</select>
</td>
</tr>
<tr>
<td>
{|Betrag Positionen brutto|}:
</td>
<td>
<input type="number" step="0.01" name="betragbruttopos" id="betragbruttopos" value="[BETRAGBRUTTOPOS]" size="20" disabled><img class="wawitooltipicon" src="themes/new/images/tooltip_grau.png" title="Rundungsdifferenz [RUNDUNGSDIFFERENZ] wurde automatisch ber&uuml;cksichtigt" [RUNDUNGSDIFFERENZICONHIDDEN]>
</td>
</tr>
<tr>
<td>
{|Betrag Positionen netto|}:
</td>
<td>
<input type="number" step="0.01" name="betragnetto" id="betragnetto" value="[BETRAGNETTO]" size="20" disabled [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Zahlbar bis|}:
</td>
<td>
<input type="text" name="zahlbarbis" id="zahlbarbis" value="[ZAHLBARBIS]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Skonto %|}:
</td>
<td>
<input type="text" name="skonto" id="skonto" value="[SKONTO]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Skonto bis|}:
</td>
<td>
<input type="text" name="skontobis" id="skontobis" value="[SKONTOBIS]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Bestellung|}:
</td>
<td>
<input type="text" name="bestellung" id="bestellung" value="[BESTELLUNG]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Waren-/Leistungsprüfung (Einkauf)|}:
</td>
<td>
<input type="checkbox" id="wareneingang" value="1" [WARENEINGANGCHECKED] size="20" disabled>
<a href="index.php?module=lieferantengutschrift&action=freigabeeinkauf&id=[ID]" title="freigeben" [FREIGABEEINKAUFHIDDEN]><img src="themes/new/images/forward.svg" border="0" class="textfeld_icon"></a>
<a href="index.php?module=lieferantengutschrift&action=ruecksetzeneinkauf&id=[ID]" title="r&uuml;cksetzen" [RUECKSETZENEINKAUFHIDDEN]><img src="themes/new/images/delete.svg" border="0" class="textfeld_icon"></a>
<i [EINKAUFINFOHIDDEN]>Wird automatisch gesetzt wenn Positionen vollst&auml;ndig</a>
</td>
</tr>
<tr>
<td>
{|Lieferantengutschriftseingangsprüfung (Buchhaltung)|}:
</td>
<td>
<input type="checkbox" id="rechnungsfreigabe" [RECHNUNGSFREIGABECHECKED] size="20" disabled>
<a href="index.php?module=lieferantengutschrift&action=freigabebuchhaltung&id=[ID]" title="freigeben" [FREIGABEBUCHHALTUNGHIDDEN]><img src="themes/new/images/forward.svg" border="0" class="textfeld_icon"></a>
<a href="index.php?module=lieferantengutschrift&action=ruecksetzenbuchhaltung&id=[ID]" title="r&uuml;cksetzen" [RUECKSETZENBUCHHALTUNGHIDDEN]><img src="themes/new/images/delete.svg" border="0" class="textfeld_icon"></a>
</td>
</tr>
<tr>
<td>
{|Bezahlt|}:
</td>
<td>
<input type="checkbox" id="zahlungsstatus" [BEZAHLTCHECKED] size="20" disabled>
<a href="index.php?module=lieferantengutschrift&action=freigabebezahlt&id=[ID]" title="auf &apos;bezahlt&apos; setzen" [FREIGABEBEZAHLTHIDDEN]><img src="themes/new/images/forward.svg" border="0" class="textfeld_icon"></a>
<a href="index.php?module=lieferantengutschrift&action=ruecksetzenbezahlt&id=[ID]" title="r&uuml;cksetzen" [RUECKSETZENBEZAHLTHIDDEN]><img src="themes/new/images/delete.svg" border="0" class="textfeld_icon"></a>
</td>
</tr>
<tr>
<td>
{|Projekt|}:
</td>
<td>
<input type="text" name="projekt" id="projekt" value="[PROJEKT]" size="20">
</td>
</tr>
<tr>
<td>
{|Kostenstelle|}:
</td>
<td>
<input type="text" name="kostenstelle" id="kostenstelle" value="[KOSTENSTELLE]" size="20">
</td>
</tr>
<tr>
<td>
{|Internebemerkung|}:
</td>
<td>
<textarea name="internebemerkung" id="internebemerkung" rows="6" style="width:100%;">[INTERNEBEMERKUNG]</textarea>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Vorschau|}</legend>
[INLINEPDF]
</fieldset>
</div>
</div>
</div>
</div>
</form>
</div>
<div id="tabs-2">
[POSITIONENTAB]
</div>
<div id="tabs-4">
[POSITIONENMANUELLTAB]
</div>
<div id="tabs-3">
[MINIDETAIL]
</div>
</div>

View File

@ -0,0 +1,93 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1">[TABTEXT1]</a></li>
</ul>
<div id="tabs-1">
[MESSAGE]
<div class="filter-box filter-usersave">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="anhang" class="switch">
<input type="checkbox" id="anhang">
<span class="slider round"></span>
</label>
<label for="anhang">{|Anhang fehlt|}</label>
</li>
<li class="filter-item">
<label for="wareneingang" class="switch">
<input type="checkbox" id="wareneingang">
<span class="slider round"></span>
</label>
<label for="wareneingang">{|Wareingang/Leistungspr&uuml;fung fehlt|}</label>
</li>
<li class="filter-item">
<label for="rechnungsfreigabe" class="switch">
<input type="checkbox" id="rechnungsfreigabe">
<span class="slider round"></span>
</label>
<label for="rechnungsfreigabe">{|Lieferantengutschriftseingangspr&uuml;fung fehlt|}</label>
</li>
<li class="filter-item">
<label for="nichtbezahlt" class="switch">
<input type="checkbox" id="nichtbezahlt">
<span class="slider round"></span>
</label>
<label for="nichtbezahlt">{|Nicht bezahlt|}</label>
</li>
<li class="filter-item">
<label for="stornierte" class="switch">
<input type="checkbox" id="stornierte">
<span class="slider round"></span>
</label>
<label for="stornierte">{|Inkl. stornierte|}</label>
</li>
<li class="filter-item">
<label for="abgeschlossen" class="switch">
<input type="checkbox" id="abgeschlossen">
<span class="slider round"></span>
</label>
<label for="abgeschlossen">{|Inkl. abgeschlossene|}</label>
</li>
<li class="filter-item">
<label for="zahlbarbis">{|Zahlbar bis|}:</label>
<input type="text" name="zahlbarbis" id="zahlbarbis" size="10">
</li>
<li class="filter-item">
<label for="skontobis">{|Skonto bis|}:</label>
<input type="text" name="skontobis" id="skontobis" size="10">
</li>
</ul>
<form method="post" action="#">
<button name="submit" value="status_berechnen" class="ui-button-icon">{|Status auffrischen|}</button>
</form>
</div>
</div>
<form method="post" action="#">
[TAB1]
<fieldset><legend>{|Stapelverarbeitung|}</legend>
<input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />&nbsp;{|alle markieren|}&nbsp;
<select id="sel_aktion" name="sel_aktion">
<option value="">{|bitte w&auml;hlen|} ...</option>
[MANUELLFREIGABEEINKAUF]
[MANUELLFREIGABEBUCHHALTUNG]
[ALSBEZAHLTMARKIEREN]
</select>
<button name="submit" value="ausfuehren" class="ui-button-icon">{|Ausf&uuml;hren|}</button>
</fieldset>
</form>
[TAB1NEXT]
</div>
</div>
<script>
function alleauswaehlen()
{
var wert = $('#auswahlalle').prop('checked');
$('#lieferantengutschrift_list').find(':checkbox').prop('checked',wert);
}
</script>

View File

@ -0,0 +1,76 @@
[FORMHANDLEREVENT]
[MESSAGE]
<style>
.auftraginfo_cell {
color: #636363;border: 1px solid #ccc;padding: 5px;
}
.auftrag_cell {
color: #636363;border: 1px solid #fff;padding: 0px; margin:0px;
}
</style>
<div style="float:left; width:39%; padding-right:1%;">
<table width="100%" border="0">
<tr valign="top">
<td width="150">Lieferant:</td>
<td colspan="3">[ADRESSEAUTOSTART][ADRESSE][MSGADRESSE][ADRESSEAUTOEND]</td>
</tr>
<tr>
<td>Lieferantengutschrifts-Nr.:</td>
<td>[RECHNUNG][MSGRECHNUNG]</td>
</tr>
<tr>
<td>Lieferantengutschriftsdatum:</td>
<td width="250">[RECHNUNGSDATUM][MSGRECHNUNGSDATUM]</td>
<tr>
</tr>
</tr>
<td width="200">Zahlbar bis:</td>
<td>[ZAHLBARBIS][MSGZAHLBARBIS][DATUM_ZAHLBARBIS]</td>
</tr>
<td>Betrag/Total (Brutto):</td>
<td>[BETRAG][MSGBETRAG]&nbsp;[WAEHRUNG][MSGWAEHRUNG]</td>
<tr>
<td>Skonto in %:</td>
<td>[SKONTO][MSGSKONTO]</td>
</tr>
<tr>
<td>Skonto bis:</td>
<td>[SKONTOBIS][MSGSKONTOBIS][DATUM_SKONTOBIS]</td>
</tr>
<tr>
<td>Projekt:</td>
<td>[PROJEKT][MSGKOSTENSTELLE]</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Kostenstelle:</td>
<td>[KOSTENSTELLE][MSGKOSTENSTELLE]</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Interne Bemerkung:</td>
<td colspan="4">[INTERNEBEMERKUNG]</td>
</tr>
</table>
</div>
<div style="float:left; width:60%">
<div style="background-color:white">
<h2 class="greyh2">Artikel</h2>
<div style="padding:10px">
[ARTIKEL]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">Buchungen</h2>
<div style="padding:10px">
[ZAHLUNGEN]
</div>
</div>
<div style="background-color:white">
<h2 class="greyh2">Protokoll</h2>
<div style="padding:10px;">
[PROTOKOLL]
</div>
</div>
</div>

View File

@ -0,0 +1,64 @@
<div id="tabs">
<ul>
<li><a href="#tabs-1"></a></li>
</ul>
<!-- Example for multiple tabs
<ul hidden">
<li><a href="#tabs-1">First Tab</a></li>
<li><a href="#tabs-2">Second Tab</a></li>
</ul>
-->
<div id="tabs-1">
[MESSAGE]
<form action="" method="post">
[FORMHANDLEREVENT]
<div class="row">
<div class="row-height">
<div class="col-xs-12 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|Position bearbeiten|}</legend><i></i>
<table width="100%" border="0" class="mkTableFormular">
<tr>
<td>
{|Menge|}:
</td>
<td>
<input type="number" name="menge" id="menge" value="[MENGE]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Preis|}:
</td>
<td>
<input type="number" name="preis" id="preis" step="0.00001" value="[PREIS]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Steuersatz %|}:
</td>
<td>
<input type="number" name="steuersatz" id="steuersatz" value="[STEUERSATZ]" size="20" [SAVEDISABLED]>
</td>
</tr>
<tr>
<td>
{|Sachkonto|}:
</td>
<td>
<input type="text" name="sachkonto" id="sachkonto" value="[SACHKONTO]" size="20" [SACHKONTOSAVEDISABLED]>
</td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Speichern" style="float:right"/>
</form>
</div>
</div>

View File

@ -0,0 +1,88 @@
[POSITIONENMESSAGE]
<form method="post" action="#tabs-2">
<div class="row" [POSITIONHINZUFUEGENHIDDEN]>
<div class="row-height">
<div class="col-xs-14 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend style="float:left">Artikel hinzuf&uuml;gen:</legend>
<div class="filter-box filter-usersave" style="float:right;">
<div class="filter-block filter-inline">
<div class="filter-title">{|Filter|}</div>
<ul class="filter-list">
<li class="filter-item">
<label for="passende" class="switch">
<input type="checkbox" id="passende">
<span class="slider round"></span>
</label>
<label for="passende">{|Nur passende (Bestellung/Rechnungsnummer)|}</label>
</li>
</ul>
</div>
</div>
[PAKETDISTRIBUTION]
</fieldset>
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
<tr>
<td><input type="checkbox" id="auswahlallewareneingaenge" onchange="allewareneingaengeauswaehlen();" />{|alle markieren|}</td>
</tr>
<tr>
<td><button [SAVEDISABLED] name="submit" value="positionen_hinzufuegen" class="ui-button-icon" style="width:100%;">Hinzuf&uuml;gen</button></td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>
<form method="post" action="#tabs-2">
<div class="row">
<div class="row-height">
<div class="col-xs-14 col-md-12 col-md-height">
<div class="inside inside-full-height">
[POSITIONEN]
</div>
</div>
<div class="col-xs-14 col-md-2 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<table width="100%" border="0" class="mkTableFormular">
<legend>{|Aktionen|}</legend>
<tr [SACHKONTOCHANGEHIDDEN]>
<td><input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />{|alle markieren|}</td>
</tr>
<tr [POSITIONHINZUFUEGENHIDDEN]>
<td><button [SAVEDISABLED] name="submit" value="positionen_entfernen" class="ui-button-icon" style="width:100%;">Entfernen</button></td>
</tr>
<tr [SACHKONTOCHANGEHIDDEN]>
<td><input type="text" name="positionen_sachkonto" id="positionen_sachkonto" value="" size="20"></td>
</tr>
<tr [SACHKONTOCHANGEHIDDEN]>
<td><button name="submit" value="positionen_kontorahmen_setzen" class="ui-button-icon" style="width:100%;">Sachkonto setzen</button></td>
</tr>
</table>
</fieldset>
</div>
</div>
</div>
</div>
</form>
<script>
function allewareneingaengeauswaehlen()
{
var wert = $('#auswahlallewareneingaenge').prop('checked');
$('#verbindlichkeit_positionen').find(':checkbox').prop('checked',wert);
}
function alleauswaehlen()
{
var wert = $('#auswahlalle').prop('checked');
$('#lieferantengutschrift_positionen').find(':checkbox').prop('checked',wert);
}
</script>

View File

@ -15,7 +15,7 @@
<div class="col-xs-14 col-md-12 col-md-height">
<div class="inside inside-full-height">
<fieldset>
<legend>{|OpenXE Upgrade-System|}</legend>
<legend>{|DBXE Upgrade-System|}</legend>
Das Upgrade funktioniert in 2 Schritten: Dateien aktualisieren, Datenbank auffrischen. Wenn das Upgrade lange l&auml;uft, kann der Fortschritt in einem neuen Fenster mit "Anzeige auffrischen" angezeigt werden.<br><br>
Falls nach einem Abbruch oder schwerwiegenden Fehler kein Upgrade möglich ist, im Hauptordner den Ordner ".git" l&ouml;schen und das Upgrade in der Konsole erneut durchf&uuml;hren.
Dazu im Unterordner "upgrade" diesen Befehl starten: <pre>./upgrade.sh -do</pre>
@ -37,7 +37,7 @@ Dazu im Unterordner "upgrade" diesen Befehl starten: <pre>./upgrade.sh -do</pre>
<fieldset>
<legend>{|Aktuelle Version|}</legend>
<table width="100%" border="0" class="mkTableFormular">
<b>OpenXE [CURRENT]</b>
<b>DBXE [CURRENT]</b>
</table>
</fieldset>
</div>

View File

@ -172,6 +172,11 @@
<button name="submit" class="ui-button-icon" style="width:100%;" value="abschliessen">{|Abschlie&szlig;en|}</button>
</td>
</tr>
<tr [ABGESCHLOSSENHIDDEN]>
<td>
<button name="submit" class="ui-button-icon" style="width:100%;" value="oeffnen" form="oeffnen">{|&Ouml;ffnen|}</button>
</td>
</tr>
</table>
</fieldset>
</div>
@ -218,6 +223,9 @@
</div> [AFTERTAB2]
</form>
</div>
<form action="index.php?module=wareneingang&action=oeffnen" id="oeffnen" method="POST">
<input name="id" value="[ID]" hidden></input>
</form>
<script type="text/javascript">
$(document).ready(function() {
$("#tabs").tabs("option", "active", [TABINDEX]);

View File

@ -1,7 +1,7 @@
<?php
/*
* Copyright (c) 2022 OpenXE project
* Copyright (c) 2024 DBXE project
*/
use Xentral\Components\Database\Exception\QueryFailureException;
@ -161,10 +161,7 @@ $width = array('10%'); // Fill out manually later
if (!empty($result)) {
$emailbackup = $result[0];
} else {
return;
}
}
foreach ($emailbackup as $key => $value) {
$this->app->Tpl->Set(strtoupper($key), $value);
}
@ -296,10 +293,10 @@ $width = array('10%'); // Fill out manually later
$this->app->erp->MailSend(
$result[0]['email'],
$result[0]['angezeigtername'],
$result[0]['email'],
$result[0]['angezeigtername'],
'OpenXE ERP: Testmail',
utf8_encode('Dies ist eine Testmail für Account "'.$result[0]['email'].'".'),
array($result[0]['email']),
array($result[0]['angezeigtername']),
'DBXE ERP: Testmail',
'Dies ist eine Testmail für Account "'.$result[0]['email'].'".',
'',0,false,'','',
true
)

View File

@ -77,6 +77,7 @@ class Exportbuchhaltung
$rgchecked = $this->app->Secure->GetPOST("rechnung");
$gschecked = $this->app->Secure->GetPOST("gutschrift");
$vbchecked = $this->app->Secure->GetPOST("verbindlichkeit");
$lgchecked = $this->app->Secure->GetPOST("lieferantengutschrift");
$diffignore = $this->app->Secure->GetPOST("diffignore");
$sachkonto = $this->app->Secure->GetPOST('sachkonto');
@ -97,6 +98,7 @@ class Exportbuchhaltung
$rgchecked = true;
$gschecked = true;
$vbchecked = true;
$lgchecked = true;
}
$missing_obligatory = array();
@ -134,7 +136,8 @@ class Exportbuchhaltung
if (
!$rgchecked &&
!$gschecked &&
!$vbchecked
!$vbchecked &&
!$lgchecked
) {
$msg = "<div class=error>Bitte mindestens eine Belegart auswählen.</div>";
$dataok = false;
@ -159,7 +162,7 @@ class Exportbuchhaltung
if ($dataok) {
$filename = "EXTF_".date('Ymd') . "_Buchungsstapel_DATEV_export.csv";
try {
$csv = $this->DATEV_Buchuchungsstapel($rgchecked, $gschecked, $vbchecked, $buchhaltung_berater, $buchhaltung_mandant, $buchhaltung_wj_beginn, $buchhaltung_sachkontenlaenge, $von, $bis, $projekt, $filename, $diffignore, $sachkonto_kennung);
$csv = $this->DATEV_Buchuchungsstapel($rgchecked, $gschecked, $vbchecked, $lgchecked, $buchhaltung_berater, $buchhaltung_mandant, $buchhaltung_wj_beginn, $buchhaltung_sachkontenlaenge, $von, $bis, $projekt, $filename, $diffignore, $sachkonto_kennung);
header("Content-Disposition: attachment; filename=" . $filename);
header("Pragma: no-cache");
header("Expires: 0");
@ -198,6 +201,7 @@ class Exportbuchhaltung
$this->app->Tpl->SET('RGCHECKED',$rgchecked?'checked':'');
$this->app->Tpl->SET('GSCHECKED',$gschecked?'checked':'');
$this->app->Tpl->SET('VBCHECKED',$vbchecked?'checked':'');
$this->app->Tpl->SET('LGCHECKED',$lgchecked?'checked':'');
$this->app->Tpl->SET('DIFFIGNORE',$diffignore?'checked':'');
$this->app->Tpl->SET('VON', $von_form);
@ -212,7 +216,7 @@ class Exportbuchhaltung
* Create DATEV Buchhungsstapel
* @throws ConsistencyException with string (list of items) if consistency check fails and no sachkonto for differences is given
*/
function DATEV_Buchuchungsstapel(bool $rechnung, bool $gutschrift, bool $verbindlichkeit, string $berater, string $mandant, datetime $wj_beginn, int $sachkontenlaenge, datetime $von, datetime $bis, int $projekt = 0, string $filename = 'EXTF_Buchungsstapel_DATEV_export.csv', $diffignore = false, $sachkonto_differences) : string {
function DATEV_Buchuchungsstapel(bool $rechnung, bool $gutschrift, bool $verbindlichkeit, bool $lieferantengutschrift, string $berater, string $mandant, datetime $wj_beginn, int $sachkontenlaenge, datetime $von, datetime $bis, int $projekt = 0, string $filename = 'EXTF_Buchungsstapel_DATEV_export.csv', $diffignore = false, $sachkonto_differences) : string {
$datev_header_definition = array (
'1' => 'Kennzeichen',
@ -453,7 +457,6 @@ class Exportbuchhaltung
'field_kundennummer' => 'b.kundennummer',
'field_betrag_gesamt' => 'b.soll',
'field_betrag' => 'p.umsatz_brutto_gesamt',
'field_gegenkonto' => '\'\'',
'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\',\'storniert\')',
'Buchungstyp' => 'SR',
'do' => $rechnung
@ -472,14 +475,13 @@ class Exportbuchhaltung
'field_kundennummer' => 'b.kundennummer',
'field_betrag_gesamt' => 'b.soll',
'field_betrag' => 'p.umsatz_brutto_gesamt',
'field_gegenkonto' => '\'\'',
'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\')',
'Buchungstyp' => '',
'do' => $gutschrift
),
array(
'typ' => 'verbindlichkeit',
'subtable' => 'verbindlichkeit_kontierung',
'subtable' => 'verbindlichkeit_position',
'kennzeichen' => 'H',
'kennzeichen_negativ' => 'S',
'field_belegnr' => 'b.rechnung',
@ -490,11 +492,30 @@ class Exportbuchhaltung
'field_kontonummer' => 'a.lieferantennummer_buchhaltung',
'field_kundennummer' => 'a.lieferantennummer',
'field_betrag_gesamt' => 'b.betrag',
'field_betrag' => 'p.betrag',
'field_gegenkonto' => 'gegenkonto',
'condition_where' => '',
'field_betrag' => 'p.preis*p.menge*((100+p.steuersatz)/100)',
'field_gegenkonto' => '(SELECT sachkonto FROM kontorahmen k WHERE k.id = p.kontorahmen)',
'condition_where' => ' AND b.status IN (\'freigegeben\')',
'Buchungstyp' => '',
'do' => $verbindlichkeit
),
array(
'typ' => 'lieferantengutschrift',
'subtable' => 'lieferantengutschrift_position',
'kennzeichen' => 'S',
'kennzeichen_negativ' => 'H',
'field_belegnr' => 'b.rechnung',
'field_name' => 'a.name',
'field_date' => 'rechnungsdatum',
'field_auftrag' => '\'\'',
'field_zahlweise' => '\'\'',
'field_kontonummer' => 'a.lieferantennummer_buchhaltung',
'field_kundennummer' => 'a.lieferantennummer',
'field_betrag_gesamt' => 'b.betrag',
'field_betrag' => 'p.preis*p.menge*((100+p.steuersatz)/100)',
'field_gegenkonto' => '(SELECT sachkonto FROM kontorahmen k WHERE k.id = p.kontorahmen)',
'condition_where' => ' AND b.status IN (\'freigegeben\')',
'Buchungstyp' => '',
'do' => $lieferantengutschrift
)
);
@ -503,21 +524,30 @@ class Exportbuchhaltung
if (!$typ['do']) {
continue;
}
if (!empty($typ['field_gegenkonto'])) {
$sql_gegenkonto = $typ['field_gegenkonto'];
} else
{
$sql_gegenkonto = "NULL";
}
$sql = "SELECT
".$typ['typ']." id,
".$typ['field_belegnr']." as belegnr,
".$typ['field_auftrag']." as auftrag,
".$typ['field_zahlweise']." as zahlweise,
if(".$typ['field_kontonummer']." <> '',".$typ['field_kontonummer'].",".$typ['field_kundennummer'].") as kundennummer,
".$typ['field_name']." as name,
b.ustid,
a.ustid,
b.".$typ['field_date']." as datum,
p.id as pos_id,
".$typ['field_betrag_gesamt']." as betrag_gesamt,
b.waehrung,
ROUND(".$typ['field_betrag'].",2) as betrag,
".$typ['field_gegenkonto']." as gegenkonto,
p.waehrung as pos_waehrung
".$sql_gegenkonto." as gegenkonto,
b.waehrung as pos_waehrung
FROM
".$typ['typ']." b
LEFT JOIN
@ -535,6 +565,7 @@ class Exportbuchhaltung
FROM
(
SELECT
id,
belegnr,
datum,
betrag_gesamt,
@ -546,10 +577,10 @@ class Exportbuchhaltung
FROM
(".$sql.") posten
GROUP BY
belegnr
id
) summen
WHERE betrag_gesamt <> betrag_summe OR betrag_summe IS NULL";
$result = $this->app->DB->SelectArr($sql_check);
if (!empty($result)) {
@ -590,7 +621,7 @@ class Exportbuchhaltung
}
}
} // diffignore
// Query position data
$arr = $this->app->DB->Query($sql);
while ($row = $this->app->DB->Fetch_Assoc($arr)) {
@ -619,7 +650,7 @@ class Exportbuchhaltung
$data['Belegfeld 1'] = mb_strimwidth($row['belegnr'],0,12);
$data['Konto'] = $row['kundennummer']; // obligatory
if ($typ['field_gegenkonto'] == 'gegenkonto') {
if (!empty($typ['field_gegenkonto'])) {
$data['Gegenkonto (ohne BU-Schlüssel)'] = $row['gegenkonto']; // obligatory
} else {
$data['Gegenkonto (ohne BU-Schlüssel)'] = $erloes; // obligatory

View File

@ -446,6 +446,7 @@ class Firmendaten {
'artikelnummer',
'preisanfrage',
'verbindlichkeit',
'lieferantengutschrift',
'receiptdocument',
];
if(in_array($cmd, $allowedNumbers)) {
@ -1703,6 +1704,7 @@ class Firmendaten {
$this->app->Tpl->Set('NEXT_ANFRAGE' , $data[0]['next_anfrage']);
$this->app->Tpl->Set('NEXT_PREISANFRAGE' , $data[0]['next_preisanfrage']);
$this->app->Tpl->Set('NEXT_VERBINDLICHKEIT', $data[0]['next_verbindlichkeit']);
$this->app->Tpl->Set('NEXT_LIEFERANTENGUTSCHRIFT', $data[0]['next_lieferantengutschrift']);
$this->app->Tpl->Set('NEXT_RECEIPTDOCUMENT', $data[0]['next_receiptdocument']);
//Briefpapier Hintergrund
@ -2060,6 +2062,7 @@ class Firmendaten {
$this->app->Tpl->Set('NEXT_ANFRAGE' , ($data['next_anfrage']));
$this->app->Tpl->Set('NEXT_PREISANFRAGE' , ($data['next_preisanfrage']));
$this->app->Tpl->Set('NEXT_VERBINDLICHKEIT', ($data['next_verbindlichkeit']));
$this->app->Tpl->Set('NEXT_LIEFERANTENGUTSCHRIFT', ($data['next_lieferantengutschrift']));
$this->app->Tpl->Set('NEXT_RECEIPTDOCUMENT', ($data['next_receiptdocument']));
//Briefpapier Hintergrund
@ -2283,6 +2286,7 @@ class Firmendaten {
$data['next_anfrage'] = ($this->app->Secure->POST["next_anfrage"]);
$data['next_preisanfrage'] = ($this->app->Secure->POST["next_preisanfrage"]);
$data['next_verbindlichkeit'] = ($this->app->Secure->POST["next_verbindlichkeit"]);
$data['next_lieferantengutschrift'] = ($this->app->Secure->POST["next_lieferantengutschrift"]);
$data['produktionsverhalten'] = $this->app->Secure->POST["produktionsverhalten"];
$data['sprachebevorzugen'] = ($this->app->Secure->POST["sprachebevorzugen"]);

File diff suppressed because it is too large Load Diff

View File

@ -716,7 +716,7 @@ class Ticket {
$ticket_from_db = $this->app->DB->SelectArr($sql)[0];
$ticket_from_db['betreff'] = htmlentities(strip_tags($ticket_from_db['betreff'])); //+ #20230916 XSS
$ticket_from_db['betreff'] = strip_tags($ticket_from_db['betreff']);
foreach ($ticket_from_db as $key => $value) {
$this->app->Tpl->Set(strtoupper($key), $value);

View File

@ -22,7 +22,7 @@ class upgrade {
public function Install() {
/* Fill out manually later */
}
function upgrade_overview() {
$submit = $this->app->Secure->GetPOST('submit');

View File

@ -244,16 +244,16 @@ class Verbindlichkeit {
'<input type="number" name="werte[]" value="',
['sql' => $offen_menge],
'" min="0"',
'" max="',
' max="',
['sql' => $offen_menge],
'"/>'
);
$preise = array (
'<input type="number" name="preise[]" step="0.00001" value="',
['sql' => $this->app->erp->FormatMenge("COALESCE(bp.preis,0)",5)],
['sql' => "TRIM(COALESCE(bp.preis,0))+0"],
'" min="0"',
'"/>'
'/>'
);
$artikellink = array (

View File

@ -1474,6 +1474,7 @@ class Wareneingang {
$this->app->ActionHandler("settings", "WareneingangSettings");
$this->app->ActionHandler("deletepos", "WareneingangPositionLoeschen");
$this->app->ActionHandler("oeffnen", "WareneingangOeffnen");
$this->app->DefaultActionHandler("list");
$this->app->erp->Headlines('Wareneingang');
@ -1598,6 +1599,15 @@ class Wareneingang {
$this->app->Location->execute('Location: index.php?module=wareneingang&action=distribution');
}
public function WareneingangOeffnen() {
$id = $this->app->Secure->GetPOST('id');
if ($id > 0 && is_numeric($id)) {
$this->app->DB->Delete("UPDATE paketannahme set status = 'angelegt' WHERE id='$id' LIMIT 1");
}
$this->app->Location->execute('Location: index.php?module=wareneingang&action=distriinhalt&id='.$id);
}
public function WareneingangMenu() {
$action = $this->app->Secure->GetGET('action');
$this->app->Tpl->Add('KURZUEBERSCHRIFT', ' Wareneingang');

File diff suppressed because it is too large Load Diff

View File

@ -1,448 +1,448 @@
<?php
session_start();
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
ini_set('display_errors', 1);
$config_file = 'setup.conf.php';
$output_folder = '../../conf/';
if(!is_file($config_file) ) { echo 'Config-File is missing'; return; }
include_once($config_file);
#########################################################################
$max_steps = count(array_filter($setup))+1;
$step = (($_GET['step']!='') ? $_GET['step'] : 1);
$submit = $_POST['_SUBMIT'];
$isSecure = false;
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
$isSecure = true;
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') {
$isSecure = true;
}
$REQUEST_PROTOCOL = $isSecure ? 'https' : 'http';
//$weburl = $REQUEST_PROTOCOL."://".$_SERVER['SERVER_ADDR'].":".$_SERVER['SERVER_PORT'].str_replace('setup/setup.php?step=5','',$_SERVER['REQUEST_URI'])."index.php?module=welcome&action=cronjob";
//$weburllink = $REQUEST_PROTOCOL."://".$_SERVER['SERVER_ADDR'].":".$_SERVER['SERVER_PORT'].str_replace('setup/setup.php?step=5','',$_SERVER['REQUEST_URI']);
if($_SERVER['SCRIPT_URI'] != '')
{
$weburl = str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$_SERVER['SCRIPT_URI'])."index.php?module=welcome&action=cronjob";
// $weburllink = str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$_SERVER['SCRIPT_URI']);
}elseif($_SERVER['REQUEST_URI'] != '' && $_SERVER['SERVER_ADDR']!='' && $_SERVER['SERVER_ADDR']!='::1' && strpos($_SERVER['SERVER_SOFTWARE'],"nginx")===false)
{
$weburl = (isset($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR']?$REQUEST_PROTOCOL."://".$_SERVER['SERVER_ADDR'].(isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443?':'.$_SERVER['SERVER_PORT']:''):'').str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$_SERVER['REQUEST_URI'])."index.php?module=welcome&action=cronjob";
// $weburllink = (isset($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR']?$REQUEST_PROTOCOL."://".$_SERVER['SERVER_ADDR'].(isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443?':'.$_SERVER['SERVER_PORT']:''):'').str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$_SERVER['REQUEST_URI']);
} elseif($_SERVER['SERVER_NAME']!="") //MAMP auf macos
{
$weburl = str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$REQUEST_PROTOCOL."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT'].$_SERVER['REQUESR_URI'].$_SERVER['SCRIPT_NAME'])."index.php?module=welcome&action=cronjob";
// $weburllink = str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$REQUEST_PROTOCOL."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT'].$_SERVER['REQUESR_URI'].$_SERVER['SCRIPT_NAME']);
}
else{
$weburl = '../index.php?module=welcome&action=cronjob';
$weburllink = '../';
}
$weburllink = '../';
if($step>=$max_steps){
//GenerateConfigFiles($output_folder);
//if($config['postinstall']) PostInstall();
$webserverUser = DetermineWebserverUser();
$phpBinary = DeterminePhpBinary();
$baseDir = DetermineInstallationDir();
$cronjobStarterPath = $baseDir . '/cronjobs/starter2.php';
$cronjobLine = htmlspecialchars(sprintf('* * * * * %s %s > /dev/null 2>&1', $phpBinary, $cronjobStarterPath));
$page = HtmlTemplate(
"<h2>Setup erfolgreich beendet!</h2>
<p>Um den Prozessstarter nutzen zu k&ouml;nnen: Tragen Sie folgendes Script in ihrer crontab ein:</p>
<pre style=\"font-size:9pt\">php {$cronjobStarterPath}</pre>
<p>Am besten eignet sich ein Interval von einer Minute. Wichtig ist dass der Cronjob unter dem Benutzer des Webservers läuft.</p>
<br>
<div id=\"crontab\">
<h3>Anleitung Crontab einrichten</h3>
<ol>
<li>
<p>Nachfolgendes Kommando ausführen:</p>
<pre class=\"console\">sudo crontab -u {$webserverUser} -e</pre>
</li>
<li>
<p>Anschließend öffnet sich ein Editor. Dort folgende Zeile einfügen und die Datei speichern:</p>
<pre class=\"console\">{$cronjobLine}</pre>
</li>
<li>
<p>Nach dem Verlassen des Editors sollte diese Ausgabe als Bestätigung erscheinen:</p>
<pre class=\"console\">crontab: installing new crontab</pre>
</li>
</ol>
</div>
<br><br>
<center>
<a href=\"$weburllink\">Anmelden mit Benutzer: <i>admin</i> und Passwort: <i>admin</i></a>
<br><br>
Bitte nach der Installation das <a href=\"".$weburllink."index.php?module=upgrade\" target=\"_blank\">Datenbank-Upgrade</a> durchführen.</a>
</center>
");
}else{
$ok = true;
if($step == 1)
{
$setup[$step]['description'] = stepMessage($step);
$ok = stepFehler($step);
}else $ok = stepFehler($step);
$page = GenerateHtml($step, $setup);
if($ok){$page = str_replace('[BUTTON]', (($step<=$max_steps)?"<input type=\"submit\" name=\"_SUBMIT\" value=\"Weiter\" class=\"btn\">":""), $page);}else{$page = str_replace('[BUTTON]','',$page);}
}
if($submit!='') {
$configfile = $_POST['_CONFIGFILE'];
$action = $_POST['_ACTION'];
unset($_POST['_CONFIGFILE']);
unset($_POST['_ACTION']);
unset($_POST['_SUBMIT']);
$error = ((function_exists($action ?? '')) ? $action() : '');
if($configfile=='') $error .= "<br>'configfile' for this step is missing";
if($error=='') {
// Convert Fields to Session
foreach($_POST as $key=>$value)
$_SESSION['setup'][$configfile][$key] = $value;
if($step == 3)GenerateConfigFiles($output_folder);
if($step == 3)CreateUserdata();
if($step == 3)PostInstall();
// execute Sql-Files
$sql_prefix = "sql_";
foreach($_POST as $key=>$value) {
if(strlen($key)>strlen($sql_prefix) && substr($key,0,strlen($sql_prefix))==$sql_prefix &&
$_SESSION['setup'][$configfile][substr($key,strlen($sql_prefix), strlen($key)-strlen($sql_prefix))]!=''){
unset($_SESSION['setup'][$configfile][$key]);
if($value != '../../database/struktur.sql' && $value != '../../database/beispiel.sql')continue;
if(is_file($value)){
if(is_file(__DIR__.'/../../conf/user.inc.php'))
{
$import = file_get_contents($value);
$import = preg_replace ("%/\*(.*)\*/%Us", '', $import);
$import = preg_replace ("%^--(.*)\n%mU", '', $import);
$import = preg_replace ("%^$\n%mU", '', $import);
$db= mysqli_connect($_SESSION['setup'][$configfile]['WFdbhost'],$_SESSION['setup'][$configfile]['WFdbuser'],$_SESSION['setup'][$configfile]['WFdbpass']);
if($db)
{
if(mysqli_select_db($db,$_SESSION['setup'][$configfile]['WFdbname']))
{
mysqli_set_charset($db,"utf8");
mysqli_query($db,"SET SESSION SQL_MODE :=''");
//mysqli_real_escape_string($db,$import);
if($value == '../../database/struktur.sql')
{
// Clear target DB
mysqli_query($db,'SET foreign_key_checks = 0');
if ($result = mysqli_query($db,"SHOW TABLES"))
{
while($row = $result->fetch_array(MYSQLI_NUM))
{
mysqli_query($db,'DROP TABLE IF EXISTS '.$row[0]);
}
}
mysqli_query($db,'SET foreign_key_checks = 1');
}
$import = explode (";\n", $import);
foreach ($import as $imp){
if ($imp != '' && $imp != ' ' && trim($imp) != ''){
mysqli_query($db,$imp);
}
}
if(isset($_POST['BeispielTpl']) && $_POST['BeispielTpl'])
mysqli_query($db, "INSERT INTO `user` (`id`, `username`, `password`, `repassword`, `description`, `settings`, `parentuser`, `activ`, `type`, `adresse`, `fehllogins`, `standarddrucker`, `firma`, `logdatei`, `startseite`, `hwtoken`, `hwkey`, `hwcounter`, `motppin`, `motpsecret`, `passwordmd5`, `externlogin`, `projekt_bevorzugen`, `email_bevorzugen`, `projekt`, `rfidtag`, `vorlage`, `kalender_passwort`, `kalender_ausblenden`, `kalender_aktiv`, `gpsstechuhr`, `standardetikett`, `standardfax`, `internebezeichnung`, `hwdatablock`) VALUES
(3, 'demomitarbeiter', 'pllIX0pw7JU9c', 0, '', 'a:6:{s:16:\"pos_list_projekt\";s:1:\"0\";s:18:\"pos_list_kassierer\";s:1:\"0\";s:22:\"pos_list_kassierername\";s:1:\"0\";s:18:\"pos_list_lkadresse\";s:1:\"0\";s:18:\"lohnabrechnung_von\";s:0:\"\";s:18:\"lohnabrechnung_bis\";s:0:\"\";}', 0, 1, 'standard', 6, 0, 0, 1, '2015-10-26 16:01:23', '', 0, '', 0, '', '', '2ad71933e4b074c4671425c8e6b48021', 0, 0, 1, 0, '', '', '', 0, 0, 0, 0, 0, NULL, '');
");
$_SESSION['setup'][$value] = 1;
}
mysqli_close($db);
}
/*
if(exec("mysql --user='{$_SESSION['setup'][$configfile]['WFdbuser']}' --password='{$_SESSION['setup'][$configfile]['WFdbpass']}' --host='{$_SESSION['setup'][$configfile]['WFdbhost']}' --database='{$_SESSION['setup'][$configfile]['WFdbname']}' < '$value'", $sql_out, $sql_status)==2)
$error = "Konnte '$value' nicht ausf&uuml;hren";
}else
$error .= "Konnte '$value' nicht finden";
*/
}
}
}
}
// remove Readonly-Fields
$ro_prefix = "ro_";
foreach($_POST as $key=>$value) {
if(strlen($key)>strlen($ro_prefix) && substr($key,0,strlen($ro_prefix))==$ro_prefix){
unset($_SESSION['setup'][$configfile][substr($key,strlen($ro_prefix), strlen($key)-strlen($ro_prefix))]);
unset($_SESSION['setup'][$configfile][$key]);
}
}
if($error=='') {
header('Location: ./setup.php?step='.++$step);
exit;
}else
$page = str_replace('[MESSAGE]', "<div class=\"inputerror\">$error</div>", $page);
}else
$page = str_replace('[MESSAGE]', "<div class=\"inputerror\">$error</div>", $page);
}
$page = str_replace('[MESSAGE]','', $page);
echo $page;
if($step == 5 && stepFehler(5))
{
@unlink(__DIR__ . '/setup.conf.php');
@unlink(__DIR__ . '/setup-cli.php');
@unlink(__DIR__ . '/setup.css');
@unlink(__FILE__);
@rmdir(__DIR__);
}
function GenerateConfigFiles($output_folder)
{
if(!stepFehler(3)) {
return false;
}
$fehler = true;
foreach($_SESSION['setup'] as $file=>$vars) {
$fehler = false;
}
foreach($_SESSION['setup'] as $file=>$vars) {
if($file !== 'user.inc.php')
{
$fehler = true;
continue;
}
if(!is_dir($output_folder))
{
$fehler = true;
continue;
}
$out = "<?php\n";
$WFdbhost = '';
$WFdbname = '';
$WFdbpass = '';
$WFdbuser = '';
$WFuserdata = '';
foreach($vars as $key=>$value)
{
if(in_array($key, array('WFdbhost', 'WFdbname', 'WFdbuser','WFdbpass','WFuserdata'))) {
$$key = $value;
}
}
if($WFdbname == '' || $WFdbuser == '')
{
return false;
}
$db= mysqli_connect($WFdbhost,$WFdbuser,$WFdbpass);
if(!$db)
{
return false;
}
if(!mysqli_select_db($db,$WFdbname))
{
return false;
}
foreach($vars as $key=>$value)
{
if(!in_array($key, array('WFdbhost', 'WFdbname', 'WFdbuser','WFdbpass','WFuserdata'))) {
continue;
}
if($key === 'WFuserdata' && !is_dir($value))
{
$fehler = true;
continue;
}
if(strpos($key, 'WF') !== false){
if($value==='true' || $value==='false'){
$out .= '$this->' . $key . '=' . $value . ';' . "\n";
}
else{
$out .= '$this->' . $key . '=\'' . (str_replace('\'', '\\\'', str_replace('\\', '\\\\', $value))) . '\';' . "\n";
}
}
}
/*$out2 = "<?php\n";
$out2 .= " define('USEFPDF2',true);\r\n";
$out2 .= "?>";
if(!file_put_contents(dirname(__FILE__).'/../../conf/user_defined.php', $out2))$fehler = true;*/
if(!file_put_contents($output_folder.$file, $out)) {
$fehler = true;
}
}
return !$fehler;
}
function GenerateHtml($step, $setup)
{
if(!array_key_exists($step, $setup)) { return "<h2>Page doesnt exist</h2>"; }
$html = "";
if(array_key_exists('description',$setup[$step])) $html .= "<h2>{$setup[$step]['description']}</h2>";
if(array_key_exists('configfile',$setup[$step])) $html .= "<input type=\"hidden\" name=\"_CONFIGFILE\" value=\"{$setup[$step]['configfile']}\">";
if(array_key_exists('action',$setup[$step])) $html .= "<input type=\"hidden\" name=\"_ACTION\" value=\"{$setup[$step]['action']}\">";
$fields = '';
foreach($setup[$step]['fields'] as $key=>$value)
{
$name = $key;
$text = ((array_key_exists('text',$value)) ? $value['text'] : $value);
$type = ((array_key_exists('type',$value)) ? $value['type'] : "text");
$note = ((array_key_exists('note',$value)) ? $value['note'] : "");
$default = ((array_key_exists('default',$value)) ? $value['default'] : "");
$options = ((array_key_exists('options',$value)) ? $value['options'] : array());
$fvalue = ((array_key_exists('value',$value)) ? $value['value'] : "");
$readonly = ((array_key_exists('readonly',$value)) ? $value['readonly'] : "");
$sql = ((array_key_exists('sql',$value)) ? $value['sql'] : "");
$invisible = ((array_key_exists('invisible',$value)) ? $value['invisible'] : "");
if($readonly!="") $ro = "<input type=\"hidden\" name=\"ro_$name\" value=\"$name\">";
if($sql!="") $mysql = "<input type=\"hidden\" name=\"sql_$name\" value=\"$sql\">";
if($invisible=="")
{
if($type=='text'){
$input = "<input type=\"text\" name=\"$name\" value=\"$default\" placeholder=\"$text\">";
}
if($type=='password'){
$input = "<input type=\"password\" name=\"$name\" value=\"$default\" placeholder=\"$text\">";
}
if($type=='checkbox'){
$input = "<label><input type=\"checkbox\" name=\"$name\" value=\"$fvalue\">&nbsp;$text</label>";
}
if($type=='select') {
$opt_out = '';
foreach($options as $opt_value=>$opt_text){
$selected = (($default!="" && $default==$opt_value) ? 'selected' : '');
$opt_out .= "<option value=\"$opt_value\" $selected>$opt_text</option>";
}
$input = "<select name=\"$name\">$opt_out</select>";
}
$field = "<div class=\"row\"><div>{$input}{$ro}{$mysql}</div><div>$note</div></div>\n";
}else
$field = "<input type=\"hidden\" name=\"$name\" value=\"1\">{$ro}{$mysql}";
$fields .= $field;
}
$html .= "\n[MESSAGE]\n$fields\n[BUTTON]";
$page = HtmlTemplate($html, $step);
return $page;
}
function HtmlTemplate($html)
{
global $step;
// CSS inline einbinden; ansonsten wird die letzte Seite nicht korrekt angezeigt
// Auf der letzten Seite werden alle Dateien im setup-Order gelöscht.
$cssContent = file_get_contents(__DIR__ . '/setup.css');
return
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
<html><head>
<style type=\"text/css\">{$cssContent}</style>
<title>OpenXE Installer</title>
</head><body class=\"slide-{$step}\"><div id=\"main\"><div class=\"header\"><h1 class=\"headline\">OpenXE Installer</h1></div><div class=\"content\"><form action=\"\" method=\"POST\">
{$html}
</form></div>
<!--
<div class=\"footer\"><p>Nutzen Sie unseren <a href=\"https://shop.xentral.biz/sonstige/1-jahr-zugang-updateserver-open-source-version.html?c=164?c=164\" target=\"_blank\">Update-Server</a> um auch mit der Open-Source Version mit Updates versorgt zu sein.</p></div>
--!>
<div class=\"footer\"><p>
OpenXE is free open source software under AGPL/EGPL license, based on <a href=\"https://xentral.com\" target=\"_blank\">Xentral®</a> by Xentral&nbsp;ERP&nbsp;Software&nbsp;GmbH.</p></div>
</div></body></html>";
}
/**
* Determine under which linux user runs the webserver
*
* @return string
*/
function DetermineWebserverUser()
{
$username = @getenv('USERNAME') ?: @getenv('USER');
if ($username !== false && !empty($username)) {
return $username;
}
$username = $_SERVER['USERNAME'] ?: $_SERVER['USER'];
if (!empty($username)) {
return $username;
}
$username = trim(@shell_exec('whoami'));
if (!empty($username)) {
return $username;
}
return get_current_user(); // Eventuell falsch unter IIS
}
/**
* Determine the full path of the php binary
*
* @return string
*/
function DeterminePhpBinary()
{
if (!empty(PHP_BINDIR)) {
return PHP_BINDIR . '/php';
}
$binary = trim(@shell_exec('which php'));
if (!empty($binary)) {
return $binary;
}
return '/usr/bin/env php';
}
/**
* Determine the full path of the installation directory; without trailing slash
*
* @return string
*/
function DetermineInstallationDir()
{
$baseDir = null;
if (!empty(__FILE__)) {
$offset = strpos(__FILE__, '/www/setup/setup.php');
if ($offset !== false) {
$baseDir = substr_replace(__FILE__, '', $offset);
}
}
if (!empty($baseDir)) {
return $baseDir;
}
if (!empty($_SERVER['SCRIPT_FILENAME'])) {
$offset = strpos($_SERVER['SCRIPT_FILENAME'], '/www/setup/setup.php');
if ($offset !== false) {
$baseDir = substr_replace($_SERVER['SCRIPT_FILENAME'], '', $offset);
}
}
return $baseDir;
}
?>
<?php
session_start();
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
ini_set('display_errors', 1);
$config_file = 'setup.conf.php';
$output_folder = '../../conf/';
if(!is_file($config_file) ) { echo 'Config-File is missing'; return; }
include_once($config_file);
#########################################################################
$max_steps = count(array_filter($setup))+1;
$step = (($_GET['step']!='') ? $_GET['step'] : 1);
$submit = $_POST['_SUBMIT'];
$isSecure = false;
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
$isSecure = true;
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') {
$isSecure = true;
}
$REQUEST_PROTOCOL = $isSecure ? 'https' : 'http';
//$weburl = $REQUEST_PROTOCOL."://".$_SERVER['SERVER_ADDR'].":".$_SERVER['SERVER_PORT'].str_replace('setup/setup.php?step=5','',$_SERVER['REQUEST_URI'])."index.php?module=welcome&action=cronjob";
//$weburllink = $REQUEST_PROTOCOL."://".$_SERVER['SERVER_ADDR'].":".$_SERVER['SERVER_PORT'].str_replace('setup/setup.php?step=5','',$_SERVER['REQUEST_URI']);
if($_SERVER['SCRIPT_URI'] != '')
{
$weburl = str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$_SERVER['SCRIPT_URI'])."index.php?module=welcome&action=cronjob";
// $weburllink = str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$_SERVER['SCRIPT_URI']);
}elseif($_SERVER['REQUEST_URI'] != '' && $_SERVER['SERVER_ADDR']!='' && $_SERVER['SERVER_ADDR']!='::1' && strpos($_SERVER['SERVER_SOFTWARE'],"nginx")===false)
{
$weburl = (isset($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR']?$REQUEST_PROTOCOL."://".$_SERVER['SERVER_ADDR'].(isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443?':'.$_SERVER['SERVER_PORT']:''):'').str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$_SERVER['REQUEST_URI'])."index.php?module=welcome&action=cronjob";
// $weburllink = (isset($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR']?$REQUEST_PROTOCOL."://".$_SERVER['SERVER_ADDR'].(isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443?':'.$_SERVER['SERVER_PORT']:''):'').str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$_SERVER['REQUEST_URI']);
} elseif($_SERVER['SERVER_NAME']!="") //MAMP auf macos
{
$weburl = str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$REQUEST_PROTOCOL."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT'].$_SERVER['REQUESR_URI'].$_SERVER['SCRIPT_NAME'])."index.php?module=welcome&action=cronjob";
// $weburllink = str_replace(array('setup/setup.php?step=5','setup/setup.php'),array('',''),$REQUEST_PROTOCOL."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT'].$_SERVER['REQUESR_URI'].$_SERVER['SCRIPT_NAME']);
}
else{
$weburl = '../index.php?module=welcome&action=cronjob';
$weburllink = '../';
}
$weburllink = '../';
if($step>=$max_steps){
//GenerateConfigFiles($output_folder);
//if($config['postinstall']) PostInstall();
$webserverUser = DetermineWebserverUser();
$phpBinary = DeterminePhpBinary();
$baseDir = DetermineInstallationDir();
$cronjobStarterPath = $baseDir . '/cronjobs/starter2.php';
$cronjobLine = htmlspecialchars(sprintf('* * * * * %s %s > /dev/null 2>&1', $phpBinary, $cronjobStarterPath));
$page = HtmlTemplate(
"<h2>Setup erfolgreich beendet!</h2>
<p>Um den Prozessstarter nutzen zu k&ouml;nnen: Tragen Sie folgendes Script in ihrer crontab ein:</p>
<pre style=\"font-size:9pt\">php {$cronjobStarterPath}</pre>
<p>Am besten eignet sich ein Interval von einer Minute. Wichtig ist dass der Cronjob unter dem Benutzer des Webservers läuft.</p>
<br>
<div id=\"crontab\">
<h3>Anleitung Crontab einrichten</h3>
<ol>
<li>
<p>Nachfolgendes Kommando ausführen:</p>
<pre class=\"console\">sudo crontab -u {$webserverUser} -e</pre>
</li>
<li>
<p>Anschließend öffnet sich ein Editor. Dort folgende Zeile einfügen und die Datei speichern:</p>
<pre class=\"console\">{$cronjobLine}</pre>
</li>
<li>
<p>Nach dem Verlassen des Editors sollte diese Ausgabe als Bestätigung erscheinen:</p>
<pre class=\"console\">crontab: installing new crontab</pre>
</li>
</ol>
</div>
<br><br>
<center>
<a href=\"$weburllink\">Anmelden mit Benutzer: <i>admin</i> und Passwort: <i>admin</i></a>
<br><br>
Bitte nach der Installation das <a href=\"".$weburllink."index.php?module=upgrade\" target=\"_blank\">Datenbank-Upgrade</a> durchführen.</a>
</center>
");
}else{
$ok = true;
if($step == 1)
{
$setup[$step]['description'] = stepMessage($step);
$ok = stepFehler($step);
}else $ok = stepFehler($step);
$page = GenerateHtml($step, $setup);
if($ok){$page = str_replace('[BUTTON]', (($step<=$max_steps)?"<input type=\"submit\" name=\"_SUBMIT\" value=\"Weiter\" class=\"btn\">":""), $page);}else{$page = str_replace('[BUTTON]','',$page);}
}
if($submit!='') {
$configfile = $_POST['_CONFIGFILE'];
$action = $_POST['_ACTION'];
unset($_POST['_CONFIGFILE']);
unset($_POST['_ACTION']);
unset($_POST['_SUBMIT']);
$error = ((function_exists($action ?? '')) ? $action() : '');
if($configfile=='') $error .= "<br>'configfile' for this step is missing";
if($error=='') {
// Convert Fields to Session
foreach($_POST as $key=>$value)
$_SESSION['setup'][$configfile][$key] = $value;
if($step == 3)GenerateConfigFiles($output_folder);
if($step == 3)CreateUserdata();
if($step == 3)PostInstall();
// execute Sql-Files
$sql_prefix = "sql_";
foreach($_POST as $key=>$value) {
if(strlen($key)>strlen($sql_prefix) && substr($key,0,strlen($sql_prefix))==$sql_prefix &&
$_SESSION['setup'][$configfile][substr($key,strlen($sql_prefix), strlen($key)-strlen($sql_prefix))]!=''){
unset($_SESSION['setup'][$configfile][$key]);
if($value != '../../database/struktur.sql' && $value != '../../database/beispiel.sql')continue;
if(is_file($value)){
if(is_file(__DIR__.'/../../conf/user.inc.php'))
{
$import = file_get_contents($value);
$import = preg_replace ("%/\*(.*)\*/%Us", '', $import);
$import = preg_replace ("%^--(.*)\n%mU", '', $import);
$import = preg_replace ("%^$\n%mU", '', $import);
$db= mysqli_connect($_SESSION['setup'][$configfile]['WFdbhost'],$_SESSION['setup'][$configfile]['WFdbuser'],$_SESSION['setup'][$configfile]['WFdbpass']);
if($db)
{
if(mysqli_select_db($db,$_SESSION['setup'][$configfile]['WFdbname']))
{
mysqli_set_charset($db,"utf8");
mysqli_query($db,"SET SESSION SQL_MODE :=''");
//mysqli_real_escape_string($db,$import);
if($value == '../../database/struktur.sql')
{
// Clear target DB
mysqli_query($db,'SET foreign_key_checks = 0');
if ($result = mysqli_query($db,"SHOW TABLES"))
{
while($row = $result->fetch_array(MYSQLI_NUM))
{
mysqli_query($db,'DROP TABLE IF EXISTS '.$row[0]);
}
}
mysqli_query($db,'SET foreign_key_checks = 1');
}
$import = explode (";\n", $import);
foreach ($import as $imp){
if ($imp != '' && $imp != ' ' && trim($imp) != ''){
mysqli_query($db,$imp);
}
}
if(isset($_POST['BeispielTpl']) && $_POST['BeispielTpl'])
mysqli_query($db, "INSERT INTO `user` (`id`, `username`, `password`, `repassword`, `description`, `settings`, `parentuser`, `activ`, `type`, `adresse`, `fehllogins`, `standarddrucker`, `firma`, `logdatei`, `startseite`, `hwtoken`, `hwkey`, `hwcounter`, `motppin`, `motpsecret`, `passwordmd5`, `externlogin`, `projekt_bevorzugen`, `email_bevorzugen`, `projekt`, `rfidtag`, `vorlage`, `kalender_passwort`, `kalender_ausblenden`, `kalender_aktiv`, `gpsstechuhr`, `standardetikett`, `standardfax`, `internebezeichnung`, `hwdatablock`) VALUES
(3, 'demomitarbeiter', 'pllIX0pw7JU9c', 0, '', 'a:6:{s:16:\"pos_list_projekt\";s:1:\"0\";s:18:\"pos_list_kassierer\";s:1:\"0\";s:22:\"pos_list_kassierername\";s:1:\"0\";s:18:\"pos_list_lkadresse\";s:1:\"0\";s:18:\"lohnabrechnung_von\";s:0:\"\";s:18:\"lohnabrechnung_bis\";s:0:\"\";}', 0, 1, 'standard', 6, 0, 0, 1, '2015-10-26 16:01:23', '', 0, '', 0, '', '', '2ad71933e4b074c4671425c8e6b48021', 0, 0, 1, 0, '', '', '', 0, 0, 0, 0, 0, NULL, '');
");
$_SESSION['setup'][$value] = 1;
}
mysqli_close($db);
}
/*
if(exec("mysql --user='{$_SESSION['setup'][$configfile]['WFdbuser']}' --password='{$_SESSION['setup'][$configfile]['WFdbpass']}' --host='{$_SESSION['setup'][$configfile]['WFdbhost']}' --database='{$_SESSION['setup'][$configfile]['WFdbname']}' < '$value'", $sql_out, $sql_status)==2)
$error = "Konnte '$value' nicht ausf&uuml;hren";
}else
$error .= "Konnte '$value' nicht finden";
*/
}
}
}
}
// remove Readonly-Fields
$ro_prefix = "ro_";
foreach($_POST as $key=>$value) {
if(strlen($key)>strlen($ro_prefix) && substr($key,0,strlen($ro_prefix))==$ro_prefix){
unset($_SESSION['setup'][$configfile][substr($key,strlen($ro_prefix), strlen($key)-strlen($ro_prefix))]);
unset($_SESSION['setup'][$configfile][$key]);
}
}
if($error=='') {
header('Location: ./setup.php?step='.++$step);
exit;
}else
$page = str_replace('[MESSAGE]', "<div class=\"inputerror\">$error</div>", $page);
}else
$page = str_replace('[MESSAGE]', "<div class=\"inputerror\">$error</div>", $page);
}
$page = str_replace('[MESSAGE]','', $page);
echo $page;
if($step == 5 && stepFehler(5))
{
@unlink(__DIR__ . '/setup.conf.php');
@unlink(__DIR__ . '/setup-cli.php');
@unlink(__DIR__ . '/setup.css');
@unlink(__FILE__);
@rmdir(__DIR__);
}
function GenerateConfigFiles($output_folder)
{
if(!stepFehler(3)) {
return false;
}
$fehler = true;
foreach($_SESSION['setup'] as $file=>$vars) {
$fehler = false;
}
foreach($_SESSION['setup'] as $file=>$vars) {
if($file !== 'user.inc.php')
{
$fehler = true;
continue;
}
if(!is_dir($output_folder))
{
$fehler = true;
continue;
}
$out = "<?php\n";
$WFdbhost = '';
$WFdbname = '';
$WFdbpass = '';
$WFdbuser = '';
$WFuserdata = '';
foreach($vars as $key=>$value)
{
if(in_array($key, array('WFdbhost', 'WFdbname', 'WFdbuser','WFdbpass','WFuserdata'))) {
$$key = $value;
}
}
if($WFdbname == '' || $WFdbuser == '')
{
return false;
}
$db= mysqli_connect($WFdbhost,$WFdbuser,$WFdbpass);
if(!$db)
{
return false;
}
if(!mysqli_select_db($db,$WFdbname))
{
return false;
}
foreach($vars as $key=>$value)
{
if(!in_array($key, array('WFdbhost', 'WFdbname', 'WFdbuser','WFdbpass','WFuserdata'))) {
continue;
}
if($key === 'WFuserdata' && !is_dir($value))
{
$fehler = true;
continue;
}
if(strpos($key, 'WF') !== false){
if($value==='true' || $value==='false'){
$out .= '$this->' . $key . '=' . $value . ';' . "\n";
}
else{
$out .= '$this->' . $key . '=\'' . (str_replace('\'', '\\\'', str_replace('\\', '\\\\', $value))) . '\';' . "\n";
}
}
}
/*$out2 = "<?php\n";
$out2 .= " define('USEFPDF2',true);\r\n";
$out2 .= "?>";
if(!file_put_contents(dirname(__FILE__).'/../../conf/user_defined.php', $out2))$fehler = true;*/
if(!file_put_contents($output_folder.$file, $out)) {
$fehler = true;
}
}
return !$fehler;
}
function GenerateHtml($step, $setup)
{
if(!array_key_exists($step, $setup)) { return "<h2>Page doesnt exist</h2>"; }
$html = "";
if(array_key_exists('description',$setup[$step])) $html .= "<h2>{$setup[$step]['description']}</h2>";
if(array_key_exists('configfile',$setup[$step])) $html .= "<input type=\"hidden\" name=\"_CONFIGFILE\" value=\"{$setup[$step]['configfile']}\">";
if(array_key_exists('action',$setup[$step])) $html .= "<input type=\"hidden\" name=\"_ACTION\" value=\"{$setup[$step]['action']}\">";
$fields = '';
foreach($setup[$step]['fields'] as $key=>$value)
{
$name = $key;
$text = ((array_key_exists('text',$value)) ? $value['text'] : $value);
$type = ((array_key_exists('type',$value)) ? $value['type'] : "text");
$note = ((array_key_exists('note',$value)) ? $value['note'] : "");
$default = ((array_key_exists('default',$value)) ? $value['default'] : "");
$options = ((array_key_exists('options',$value)) ? $value['options'] : array());
$fvalue = ((array_key_exists('value',$value)) ? $value['value'] : "");
$readonly = ((array_key_exists('readonly',$value)) ? $value['readonly'] : "");
$sql = ((array_key_exists('sql',$value)) ? $value['sql'] : "");
$invisible = ((array_key_exists('invisible',$value)) ? $value['invisible'] : "");
if($readonly!="") $ro = "<input type=\"hidden\" name=\"ro_$name\" value=\"$name\">";
if($sql!="") $mysql = "<input type=\"hidden\" name=\"sql_$name\" value=\"$sql\">";
if($invisible=="")
{
if($type=='text'){
$input = "<input type=\"text\" name=\"$name\" value=\"$default\" placeholder=\"$text\">";
}
if($type=='password'){
$input = "<input type=\"password\" name=\"$name\" value=\"$default\" placeholder=\"$text\">";
}
if($type=='checkbox'){
$input = "<label><input type=\"checkbox\" name=\"$name\" value=\"$fvalue\">&nbsp;$text</label>";
}
if($type=='select') {
$opt_out = '';
foreach($options as $opt_value=>$opt_text){
$selected = (($default!="" && $default==$opt_value) ? 'selected' : '');
$opt_out .= "<option value=\"$opt_value\" $selected>$opt_text</option>";
}
$input = "<select name=\"$name\">$opt_out</select>";
}
$field = "<div class=\"row\"><div>{$input}{$ro}{$mysql}</div><div>$note</div></div>\n";
}else
$field = "<input type=\"hidden\" name=\"$name\" value=\"1\">{$ro}{$mysql}";
$fields .= $field;
}
$html .= "\n[MESSAGE]\n$fields\n[BUTTON]";
$page = HtmlTemplate($html, $step);
return $page;
}
function HtmlTemplate($html)
{
global $step;
// CSS inline einbinden; ansonsten wird die letzte Seite nicht korrekt angezeigt
// Auf der letzten Seite werden alle Dateien im setup-Order gelöscht.
$cssContent = file_get_contents(__DIR__ . '/setup.css');
return
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
<html><head>
<style type=\"text/css\">{$cssContent}</style>
<title>DBXE Installer</title>
</head><body class=\"slide-{$step}\"><div id=\"main\"><div class=\"header\"><h1 class=\"headline\">DB Installer</h1></div><div class=\"content\"><form action=\"\" method=\"POST\">
{$html}
</form></div>
<!--
<div class=\"footer\"><p>Nutzen Sie unseren <a href=\"https://shop.xentral.biz/sonstige/1-jahr-zugang-updateserver-open-source-version.html?c=164?c=164\" target=\"_blank\">Update-Server</a> um auch mit der Open-Source Version mit Updates versorgt zu sein.</p></div>
--!>
<div class=\"footer\"><p>
DBXE is free open source software under AGPL/EGPL license, based on OpenXE, <a href=\"https://xentral.com\" target=\"_blank\">Xentral®</a> by Xentral&nbsp;ERP&nbsp;Software&nbsp;GmbH.</p></div>
</div></body></html>";
}
/**
* Determine under which linux user runs the webserver
*
* @return string
*/
function DetermineWebserverUser()
{
$username = @getenv('USERNAME') ?: @getenv('USER');
if ($username !== false && !empty($username)) {
return $username;
}
$username = $_SERVER['USERNAME'] ?: $_SERVER['USER'];
if (!empty($username)) {
return $username;
}
$username = trim(@shell_exec('whoami'));
if (!empty($username)) {
return $username;
}
return get_current_user(); // Eventuell falsch unter IIS
}
/**
* Determine the full path of the php binary
*
* @return string
*/
function DeterminePhpBinary()
{
if (!empty(PHP_BINDIR)) {
return PHP_BINDIR . '/php';
}
$binary = trim(@shell_exec('which php'));
if (!empty($binary)) {
return $binary;
}
return '/usr/bin/env php';
}
/**
* Determine the full path of the installation directory; without trailing slash
*
* @return string
*/
function DetermineInstallationDir()
{
$baseDir = null;
if (!empty(__FILE__)) {
$offset = strpos(__FILE__, '/www/setup/setup.php');
if ($offset !== false) {
$baseDir = substr_replace(__FILE__, '', $offset);
}
}
if (!empty($baseDir)) {
return $baseDir;
}
if (!empty($_SERVER['SCRIPT_FILENAME'])) {
$offset = strpos($_SERVER['SCRIPT_FILENAME'], '/www/setup/setup.php');
if ($offset !== false) {
$baseDir = substr_replace($_SERVER['SCRIPT_FILENAME'], '', $offset);
}
}
return $baseDir;
}
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 KiB

After

Width:  |  Height:  |  Size: 545 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xml:space="preserve"
style="enable-background:new 0 0 1440 1024;"
viewBox="0 0 300 104"
y="0px"
x="0px"
id="Layer_1"
version="1.1"><metadata
id="metadata35"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs33" />
<style
id="style2"
type="text/css">
.st0{fill:#008AC2;}
.st1{fill:#6E6F72;}
</style>
<g
transform="matrix(0.5179558,0,0,0.5179558,-222.92818,-213.2424)"
id="g28">
<polygon
style="fill:#008ac2"
id="polygon4"
points="466.7,527.6 501.7,492.6 430.4,456.6 430.4,544.8 466.7,560.4 "
class="st0" />
<polygon
style="fill:#008ac2"
id="polygon6"
points="584.2,450.5 509.6,411.7 435,450.5 509.1,486.3 "
class="st0" />
<polygon
style="fill:#008ac2"
id="polygon8"
points="472.3,531.2 472.3,612.3 506,575.5 506,495.4 "
class="st0" />
<path
style="fill:#6e6f72"
id="path10"
d="m 567.1,483.3 c -30.8,0 -45.8,23.5 -45.8,46.9 0,23.4 14.5,45.9 45.8,45.9 31.3,0 45.4,-23 45.6,-46 0.3,-23.3 -14.9,-46.8 -45.6,-46.8 z m 0,77.4 c -21,0 -28.9,-15.6 -29.2,-30.3 -0.4,-15 8.3,-31.9 29.2,-31.9 21,0 29.4,16.8 29.1,31.8 -0.2,14.6 -8.1,30.4 -29.1,30.4 z"
class="st1" />
<path
style="fill:#6e6f72"
id="path12"
d="m 659.8,510.7 c -7.1,0 -15.5,3.1 -20.3,10 l -1,-10 H 624 V 601 h 15.5 v -33.6 c 4.4,6.9 14.2,8.9 20.8,8.9 20.1,0 31.6,-14.5 31.6,-32.8 0,-18.4 -12.8,-32.8 -32.1,-32.8 z m -1.2,50.6 c -10.5,0 -17.8,-8 -17.8,-17.8 0,-9.8 6.6,-17.8 17.8,-17.8 11.2,0 17.8,8 17.8,17.8 0,9.8 -7.2,17.8 -17.8,17.8 z"
class="st1" />
<path
style="fill:#6e6f72"
id="path14"
d="m 733.8,510.7 c -20.3,0 -33.3,13.6 -33.3,32.4 0,19.9 12.8,33 34.4,33 9.5,0 20.3,-3.3 26.9,-10.1 l -9.9,-9.7 c -3.6,3.6 -11.1,5.8 -16.8,5.8 -10.9,0 -17.7,-5.5 -18.7,-13.2 h 48.9 c 2.5,-25.3 -10.6,-38.2 -31.5,-38.2 z m -17.1,25.7 c 2.3,-8 9.2,-12.1 17.5,-12.1 8.9,0 15.3,4 16.3,12.1 z"
class="st1" />
<path
style="fill:#6e6f72"
id="path16"
d="m 812.4,510.7 c -7.9,0 -14.2,3.2 -20.6,9.6 l -1,-9.6 H 777 v 65.1 h 15.4 v -32.7 c 0,-9.7 6.5,-17.9 16,-17.9 9.9,0 15.1,7.4 15.1,17.1 v 33.5 H 839 v -33.6 c 0,-20.2 -11.8,-31.5 -26.6,-31.5 z"
class="st1" />
<path
style="fill:#008ac2"
id="path18"
d="m 1009.6,500.3 v -17 H 943 c 0,30.9 0,62 0,92.9 h 66.6 v -17.3 h -50 v -21 h 48.2 v -16.3 h -48.2 v -21.4 h 50 z"
class="st0" />
<polygon
style="fill:#008ac2"
id="polygon20"
points="911.7,576.1 931,576.2 931,574.5 909.1,541 897.9,554.7 911.7,576.1 "
class="st0" />
<rect
style="fill:#008ac2"
id="rect22"
height="0"
width="0"
class="st0"
y="485.10001"
x="932.40002" />
<polygon
style="fill:#008ac2"
id="polygon24"
points="912.1,483.3 900.2,501.4 901.3,503.1 902.9,505.4 909.4,515.4 931,484.5 931,483.3 914,483.3 912.1,483.3 "
class="st0" />
<polygon
style="fill:#008ac2"
id="polygon26"
points="871.5,483.3 871.4,483.3 851.9,483.3 851.9,484.6 866.5,506.9 881,529.2 881,529.2 881.1,529.2 881,529.3 851.9,573.5 851.9,573.5 851.9,576.2 868.9,576.2 869,576.2 872.6,571 887.4,548.5 890.5,543.7 900.7,528.2 900.7,528.1 891.6,514.1 891.3,513.7 "
class="st0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -1,51 +1,51 @@
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>OpenXE - Login</title>
<link id="shortcuticon" rel="shortcut icon" href="./themes/new/images/favicon/favicon.ico" type="image/x-icon">
<link id="favicon" rel="icon" href="./themes/new/images/favicon/favicon.ico" type="image/x-icon">
<link rel="icon" type="image/png" href="./themes/new/images/favicon/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="./themes/new/images/favicon/favicon-32x32.png" sizes="32x32">
<script type="text/javascript" src="./js/jquery/jquery-3.5.0.min.js"></script>
<script type="text/javascript" src="[JQUERYMIGRATESRC]"></script>
<script src="themes/new/js/scripts_login.js"></script>
<link rel="stylesheet" href="themes/new/css/normalize.min.css?v=5">
<link rel="stylesheet" href="themes/new/css/login_styles.css?v=3">
<link rel="stylesheet" href="themes/new/css/custom.css?v=3">
</head>
<body>
<div id="login-container">
<div id="login-slider-wrapper">
<div id="login-slider">
[LOGINSLIDER]
</div>
</div>
<div id="login-wrapper">
<img src="[TPLLOGOFIRMA]" heigth="72">
</img>
<div class="intro">
Willkommen bei OpenXE ERP.<br/>
Bitte gib Deinen Benutzernamen und Passwort ein!
</div>
<div [LOGINWARNING_VISIBLE] class="warning"><p>[LOGINWARNING_TEXT]</p></div>
[SPERRMELDUNGNACHRICHT]
[PAGE]
<div id="login-footer">
<div class="copyright">
&copy; [YEAR] by OpenXE-org & Xentral&nbsp;ERP&nbsp;Software&nbsp;GmbH.<br>
OpenXE is free open source software under AGPL/EGPL license, based on <a href="https://xentral.com" target="_blank">Xentral®</a>.<br>
<a href="https://github.com/OpenXE-org/OpenXE/commits/master">[XENTRALVERSION]</a>
</div>
</div>
</div>
</div>
</body>
</html>
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>DBXE - Login</title>
<link id="shortcuticon" rel="shortcut icon" href="./themes/new/images/favicon/favicon.ico" type="image/x-icon">
<link id="favicon" rel="icon" href="./themes/new/images/favicon/favicon.ico" type="image/x-icon">
<link rel="icon" type="image/png" href="./themes/new/images/favicon/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="./themes/new/images/favicon/favicon-32x32.png" sizes="32x32">
<script type="text/javascript" src="./js/jquery/jquery-3.5.0.min.js"></script>
<script type="text/javascript" src="[JQUERYMIGRATESRC]"></script>
<script src="themes/new/js/scripts_login.js"></script>
<link rel="stylesheet" href="themes/new/css/normalize.min.css?v=5">
<link rel="stylesheet" href="themes/new/css/login_styles.css?v=3">
<link rel="stylesheet" href="themes/new/css/custom.css?v=3">
</head>
<body>
<div id="login-container">
<div id="login-slider-wrapper">
<div id="login-slider">
[LOGINSLIDER]
</div>
</div>
<div id="login-wrapper">
<img src="[TPLLOGOFIRMA]" heigth="72">
</img>
<div class="intro">
Willkommen beim ERP von <b>[FIRMENNAME] </b><br/>
Bitte gib Deinen Benutzernamen und Passwort ein!
</div>
<div [LOGINWARNING_VISIBLE] class="warning"><p>[LOGINWARNING_TEXT]</p></div>
[SPERRMELDUNGNACHRICHT]
[PAGE]
<div id="login-footer">
<div class="copyright">
&copy; [YEAR] by DBXE & OpenXE-org & Xentral&nbsp;ERP&nbsp;Software&nbsp;GmbH.<br>
DBXE is a OS software under AGPL/EGPL license, based on Xentral® and OpenXE.<br>
<a href="https://repo.dbxe.de/dbxe/DBXE/commits/branch/master">[XENTRALVERSION]</a>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,34 +1,34 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self';">
<title>OpenXE - Passwort vergessen</title>
<link id="shortcuticon" rel="shortcut icon" href="./themes/new/images/favicon/favicon.ico" type="image/x-icon">
<link id="favicon" rel="icon" href="./themes/new/images/favicon/favicon.ico" type="image/x-icon">
<link rel="icon" type="image/png" href="./themes/new/images/favicon/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="./themes/new/images/favicon/favicon-32x32.png" sizes="32x32">
<script type="text/javascript" src="./js/jquery/jquery-3.5.0.min.js"></script>
<script type="text/javascript" src="[JQUERYMIGRATESRC]"></script>
<link rel="stylesheet" href="./themes/[THEME]/css/login.css?v=2">
</head>
<body>
<div class="login-wrapper">
<div class="loginbox">
<img id="logo" src="themes/new/images/openxe_logo.svg" width="100%">
</img>
[SPERRMELDUNGNACHRICHT]
[PAGE]
<div class="copyright">
&copy; [YEAR] OpenXE-org & Xentral ERP Software GmbH
</div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self';">
<title>DBXE - Passwort vergessen</title>
<link id="shortcuticon" rel="shortcut icon" href="./themes/new/images/favicon/favicon.ico" type="image/x-icon">
<link id="favicon" rel="icon" href="./themes/new/images/favicon/favicon.ico" type="image/x-icon">
<link rel="icon" type="image/png" href="./themes/new/images/favicon/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="./themes/new/images/favicon/favicon-32x32.png" sizes="32x32">
<script type="text/javascript" src="./js/jquery/jquery-3.5.0.min.js"></script>
<script type="text/javascript" src="[JQUERYMIGRATESRC]"></script>
<link rel="stylesheet" href="./themes/[THEME]/css/login.css?v=2">
</head>
<body>
<div class="login-wrapper">
<div class="loginbox">
<img id="logo" src="themes/new/images/openxe_logo.svg" width="100%">
</img>
[SPERRMELDUNGNACHRICHT]
[PAGE]
<div class="copyright">
&copy; [YEAR] DBXE & OpenXE-org & Xentral ERP Software GmbH
</div>
</div>
</div>
</body>
</html>

View File

@ -1,18 +1,19 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Security-Policy" content="default-src 'self';">
<title>OpenXE Login</title>
<link rel="stylesheet" href="themes/new/css/login.css?v=2">
</head>
<body>
<div class="permission-box">
<h1>OpenXE Login</h1>
<p class="error">Sie haben nicht das Recht auf diese Seite zugreifen zu d&uuml;rfen!</p>
<p><a href="BACK" class="btn btn-primary">Zur&uuml;ck zur vorherigen Seite</a></p>
<p><a href="index.php?module=welcome&action=logout" class="btn btn-secondary">Erneut einloggen</a></p>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Security-Policy" content="default-src 'self';">
<title>OpenXE Login</title>
<link rel="stylesheet" href="themes/new/css/login.css?v=2">
</head>
<body>
<div class="permission-box">
<h1>DBXE Login</h1>
<p class="error">Sie haben nicht das Recht auf diese Seite zugreifen zu d&uuml;rfen!</p>
<p><a href="BACK" class="btn btn-primary">Zur&uuml;ck zur vorherigen Seite</a></p>
<p><a href="index.php?module=welcome&action=logout" class="btn btn-secondary">Erneut einloggen</a></p>
<p>Sie benötigen diesen Zugriff? Bitten Sie um Freigabe unter zugriff@dbxe.de</p>
</div>
</body>
</html>

View File

@ -10,7 +10,7 @@
</svg>
</div>
<a class="logo-index" href="index.php" title="OpenXE">
<a class="logo-index" href="index.php" title="DBXE">
[SIDEBARLOGO]
</a>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xml:space="preserve"
style="enable-background:new 0 0 1440 1024;"
viewBox="0 0 410 104"
height="26"
width="115"
y="0px"
x="0px"
id="Layer_1"
version="1.1"
sodipodi:docname="sidebar_logo.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="9.1565217"
inkscape:cx="57.5"
inkscape:cy="13.050807"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g28" /><metadata
id="metadata35"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs33" />
<style
id="style2"
type="text/css">
.st0{fill:#ffffff;}
.st1{fill:#fffffE;}
</style>
<g
transform="matrix(0.5179558,0,0,0.5179558,-222.92818,-213.2424)"
id="g28">
<polygon
style="fill:#ffffff"
id="polygon4"
points="466.7,527.6 501.7,492.6 430.4,456.6 430.4,544.8 466.7,560.4 "
class="st0" />
<polygon
style="fill:#ffffff"
id="polygon6"
points="584.2,450.5 509.6,411.7 435,450.5 509.1,486.3 "
class="st0" />
<polygon
style="fill:#ffffff"
id="polygon8"
points="472.3,531.2 472.3,612.3 506,575.5 506,495.4 "
class="st0" />
<rect
style="fill:#ffffff"
id="rect22"
height="0"
width="0"
class="st0"
y="485.10001"
x="932.40002" />
<text
xml:space="preserve"
style="font-weight:500;font-size:123.563px;line-height:1.5;font-family:'AG Book Pro';-inkscape-font-specification:'AG Book Pro Medium';fill:#e20020;stroke-width:46.3214;stroke-linecap:round;stroke-linejoin:round"
x="527.25061"
y="576.20001"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'AG Book Pro';-inkscape-font-specification:'AG Book Pro Bold';fill:#ffffff;stroke-width:46.3214"
x="527.25061"
y="576.20001">dBXE</tspan></text></g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -400,6 +400,9 @@ class WidgetGenprojekt
$field = new HTMLInput("next_verbindlichkeit","text","","40","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("next_lieferantengutschrift","text","","40","","","","","","","","0","","");
$this->form->NewField($field);
$field = new HTMLInput("next_goodspostingdocument","text","","40","","","","","","","","0","","");
$this->form->NewField($field);

View File

@ -292,6 +292,7 @@
<tr><td>N&auml;chste Anfragenummer:</td><td>[NEXT_ANFRAGE][MSGNEXT_ANFRAGE]&nbsp;</td></tr>
<tr><td>N&auml;chste Proformarechnungsnummer:</td><td>[NEXT_PROFORMARECHNUNG][MSGNEXT_PROFORMARECHNUNG]&nbsp;</td></tr>
<tr><td>Nächste Verbindlichkeitsnummer:</td><td>[NEXT_VERBINDLICHKEIT][MSGNEXT_VERBINDLICHKEIT] </td></tr>
<tr><td>Nächste Lieferantengutschriftsnummer:</td><td>[NEXT_LIEFERANTENGUTSCHRIFT][MSGNEXT_LIEFERANTENGUTSCHRIFT] </td></tr>
<tr><td>Nächste Warenbuchungsbelegnummer:</td><td>[NEXT_GOODSPOSTINGDOCUMENT][MSGNEXT_GOODSPOSTINGDOCUMENT] </td></tr>
<tr><td>N&auml;chste Kundennummer:</td><td>[NEXT_KUNDENNUMMER][MSGNEXT_KUNDENNUMMER]&nbsp;</td></tr>
<tr><td>N&auml;chste Lieferantenummer:</td><td>[NEXT_LIEFERANTENNUMMER][MSGNEXT_LIEFERANTENNUMMER]&nbsp;</td></tr>

View File

@ -235,6 +235,9 @@ class WidgetProjekt extends WidgetGenProjekt
$field = new HTMLInput("next_verbindlichkeit","text","",40);
$field->readonly="readonly";
$this->form->NewField($field);
$field = new HTMLInput("next_lieferantengutschrift","text","",40);
$field->readonly="readonly";
$this->form->NewField($field);
$field = new HTMLInput("next_kundennummer","text","",40);
$field->readonly="readonly";
$this->form->NewField($field);