From 2c7f113d6b24860586016f32f6bfe15f045cc688 Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Tue, 13 Jun 2023 18:30:48 +0200
Subject: [PATCH] mahnwesen initial
---
upgrade/data/db_schema.json | 107 +++-
www/lib/class.erpapi.php | 162 +----
www/lib/dokumente/class.rechnung.php | 36 +-
www/pages/content/einstellungen.tpl | 4 +-
www/pages/content/mahnwesen_edit.tpl | 142 +++++
www/pages/content/mahnwesen_einstellungen.tpl | 10 +
www/pages/content/mahnwesen_list.tpl | 19 +-
www/pages/mahnwesen.php | 584 ++++++++++++------
www/pages/rechnung.php | 14 +-
www/widgets/_gen/widget.gen.rechnung.php | 11 +-
10 files changed, 710 insertions(+), 379 deletions(-)
create mode 100644 www/pages/content/mahnwesen_edit.tpl
create mode 100644 www/pages/content/mahnwesen_einstellungen.tpl
diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json
index 78c38e75..f8f2481b 100644
--- a/upgrade/data/db_schema.json
+++ b/upgrade/data/db_schema.json
@@ -28975,7 +28975,7 @@
},
{
"name": "bestellvorschlag",
- "collation": "utf8mb4_general_ci",
+ "collation": "utf8mb3_general_ci",
"type": "BASE TABLE",
"columns": [
{
@@ -39026,7 +39026,7 @@
},
{
"name": "fibu_buchungen",
- "collation": "utf8mb4_general_ci",
+ "collation": "utf8mb3_general_ci",
"type": "BASE TABLE",
"columns": [
{
@@ -39164,13 +39164,13 @@
},
{
"name": "fibu_buchungen_alle",
- "collation": "utf8mb4_general_ci",
+ "collation": "utf8mb3_general_ci",
"type": "BASE TABLE",
"columns": [
{
"Field": "buchungsart",
"Type": "varchar(9)",
- "Collation": "utf8mb4_general_ci",
+ "Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
@@ -39203,7 +39203,7 @@
{
"Field": "datum",
"Type": "varchar(10)",
- "Collation": "utf8mb4_general_ci",
+ "Collation": "utf8mb3_general_ci",
"Null": "YES",
"Key": "",
"Default": null,
@@ -39269,7 +39269,7 @@
{
"Field": "edit_module",
"Type": "varchar(15)",
- "Collation": "utf8mb4_general_ci",
+ "Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
@@ -39293,13 +39293,13 @@
},
{
"name": "fibu_objekte",
- "collation": "utf8mb4_general_ci",
+ "collation": "utf8mb3_general_ci",
"type": "BASE TABLE",
"columns": [
{
"Field": "datum",
"Type": "varchar(10)",
- "Collation": "utf8mb4_general_ci",
+ "Collation": "utf8mb3_general_ci",
"Null": "YES",
"Key": "",
"Default": null,
@@ -39310,7 +39310,7 @@
{
"Field": "typ",
"Type": "varchar(15)",
- "Collation": "utf8mb4_general_ci",
+ "Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
@@ -39343,7 +39343,7 @@
{
"Field": "parent_typ",
"Type": "varchar(7)",
- "Collation": "utf8mb4_general_ci",
+ "Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
@@ -39354,7 +39354,7 @@
{
"Field": "parent_id",
"Type": "varchar(11)",
- "Collation": "utf8mb4_general_ci",
+ "Collation": "utf8mb3_general_ci",
"Null": "NO",
"Key": "",
"Default": null,
@@ -101383,7 +101383,7 @@
},
{
"name": "subscription_cycle_job",
- "collation": "utf8mb4_general_ci",
+ "collation": "utf8mb3_general_ci",
"type": "BASE TABLE",
"columns": [
{
@@ -117603,6 +117603,89 @@
"Non_unique": ""
}
]
+ },
+ {
+ "name": "mahnwesen",
+ "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": "name",
+ "Type": "varchar(50)",
+ "Collation": "utf8mb3_general_ci",
+ "Null": "NO",
+ "Key": "",
+ "Default": null,
+ "Extra": "",
+ "Privileges": "select,insert,update,references",
+ "Comment": ""
+ },
+ {
+ "Field": "tage",
+ "Type": "int(11)",
+ "Collation": null,
+ "Null": "NO",
+ "Key": "",
+ "Default": null,
+ "Extra": "",
+ "Privileges": "select,insert,update,references",
+ "Comment": ""
+ },
+ {
+ "Field": "gebuehr",
+ "Type": "decimal(10,2)",
+ "Collation": null,
+ "Null": "NO",
+ "Key": "",
+ "Default": null,
+ "Extra": "",
+ "Privileges": "select,insert,update,references",
+ "Comment": ""
+ },
+ {
+ "Field": "mail",
+ "Type": "int(11)",
+ "Collation": null,
+ "Null": "NO",
+ "Key": "",
+ "Default": null,
+ "Extra": "",
+ "Privileges": "select,insert,update,references",
+ "Comment": ""
+ },
+ {
+ "Field": "druck",
+ "Type": "int(11)",
+ "Collation": null,
+ "Null": "NO",
+ "Key": "",
+ "Default": null,
+ "Extra": "",
+ "Privileges": "select,insert,update,references",
+ "Comment": ""
+ }
+ ],
+ "keys": [
+ {
+ "Key_name": "PRIMARY",
+ "Index_type": "BTREE",
+ "columns": [
+ "id"
+ ],
+ "Non_unique": ""
+ }
+ ]
}
],
"views": [
diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php
index 7fd43400..9a3315e6 100644
--- a/www/lib/class.erpapi.php
+++ b/www/lib/class.erpapi.php
@@ -5426,6 +5426,18 @@ title: 'Abschicken',
return $ret;
}
+ /*
+ * Replace {VARS} with texts given in array
+ * Input array(key => value)
+ */
+ function ParseVars(array $mapping, $text) {
+ foreach ($mapping as $key => $value) {
+ $text = str_replace('{'.strtoupper($key).'}',$value,$text);
+ }
+ return $text;
+ }
+
+
// @refactor Document Komponente
function CheckBearbeiter($id,$module)
{
@@ -14548,156 +14560,6 @@ function get_emails ($str)
else return false;
}
-
-// @refactor Mahnwesen Modul
-function MahnwesenBody($id,$als,$_datum=null,$sprache='')
-{
- if($id > 0)
- {
- $rechnungarr = $this->app->DB->SelectRow("SELECT r.*,DATE_FORMAT(datum,'%d.%m.%Y') as datum_de,DATE_FORMAT(mahnwesen_datum,'%d.%m.%Y') as mahnwesen_datum_de,r.mahnwesen_datum
- FROM rechnung AS r WHERE r.id=$id LIMIT 1");
- }
- if(empty($rechnungarr))
- {
- return '';
- }
-
- $adresse = $rechnungarr['adresse'];
- if($sprache==''){
- $sprache = $rechnungarr['sprache'];
- }
- if($sprache==''){
- $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1");
- }
- // OfferNo, customerId, OfferDate
-
- $kundennummer = $rechnungarr['kundennummer'];
- $projekt = $rechnungarr['projekt'];
- $auftrag= $rechnungarr['auftrag'];
- $buchhaltung= $rechnungarr['buchhaltung'];
- $lieferschein = $rechnungarr['lieferschein'];
- $lieferscheinid = $lieferschein;
- if($lieferscheinid){
- $lieferschein = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
- }else{
- $lieferschein = '';
- }
- $bestellbestaetigung = $rechnungarr['kundennummer'];
- $datum = $rechnungarr['datum_de'];
- $datum_sql = $rechnungarr['datum'];
- $belegnr = $rechnungarr['belegnr'];
- $doppel = $rechnungarr['doppel'];
- $freitext = $rechnungarr['freitext'];
- $ustid = $rechnungarr['ustid'];
- $soll = $rechnungarr['soll'];
- $ist = $rechnungarr['ist'];
- $land = $rechnungarr['land'];
- $mahnwesen_datum = $rechnungarr['mahnwesen_datum'];
- $mahnwesen_datum_deutsch = $rechnungarr['mahnwesen_datum_de'];
- $zahlungsweise = $rechnungarr['zahlungsweise'];
- $zahlungsstatus = $rechnungarr['zahlungsstatus'];
- $zahlungszieltage = $rechnungarr['zahlungszieltage'];
- $zahlungszieltageskonto = $rechnungarr['zahlungszieltageskonto'];
- $zahlungszielskonto = $rechnungarr['zahlungszielskonto'];
- $waehrung = $rechnungarr['waehrung'];
-
- $zahlungdatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltage DAY),'%d.%m.%Y') FROM rechnung WHERE id='$id' LIMIT 1");
-
- if($_datum!=null)
- {
- $mahnwesen_datum = $this->app->String->Convert($_datum,'%1.%2.%3','%3-%2-%1');
- $mahnwesen_datum_deutsch = $_datum;
- }
-
- $zahlungsweise = strtolower($zahlungsweise);
-
- if($als=='zahlungserinnerung')
- {
- $body = $this->GetGeschaeftsBriefText("MahnwesenZahlungserinnerung",$sprache,$projekt,"rechnung",$id);
- $tage = $this->GetKonfiguration('mahnwesen_m1_tage');
- }
- else if($als=='mahnung1')
- {
- $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung1",$sprache,$projekt,"rechnung",$id);
- $mahngebuehr = $this->GetKonfiguration('mahnwesen_m1_gebuehr');
- $tage = $this->GetKonfiguration('mahnwesen_m2_tage');
- }
- else if($als=='mahnung2')
- {
- $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung2",$sprache,$projekt,"rechnung",$id);
- $tage = $this->GetKonfiguration('mahnwesen_m3_tage');
- $mahngebuehr = $this->GetKonfiguration('mahnwesen_m2_gebuehr');
- }
- else if($als=='mahnung3')
- {
- $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung3",$sprache,$projekt,"rechnung",$id);
- $tage = $this->GetKonfiguration('mahnwesen_ik_tage');
- $mahngebuehr = $this->GetKonfiguration('mahnwesen_m3_gebuehr');
- }
- else if($als=='inkasso')
- {
- $body = $this->GetGeschaeftsBriefText("MahnwesenInkasso",$sprache,$projekt,"rechnung",$id);
- //$tage = $this->GetKonfiguration("mahnwesen_ik_tage");
- $tage = 3; //eigentlich vorbei
- $mahngebuehr = $this->GetKonfiguration('mahnwesen_ik_gebuehr');
- }
- else
- {
- $body = $this->app->erp->Beschriftung("dokument_anschreiben");
- }
-
- if($tage <=0) $tage = 0;
-
- $datummahnung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$mahnwesen_datum', INTERVAL $tage DAY),'%d.%m.%Y')");
- $datumrechnungzahlungsziel= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $zahlungszieltage DAY),'%d.%m.%Y')");
-
- $tage_ze = $zahlungszieltage + $this->GetKonfiguration('mahnwesen_m1_tage');
- $datumzahlungserinnerung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $tage_ze DAY),'%d.%m.%Y')");
-
- // checkstamp $this->CheckStamp("jhdskKUHsiusakiakuhsd"); // errechnet aus laufzeit und kundenid // wenn es nicht drinnen ist darf es nicht gehen
-
- if($mahngebuehr=='' || !is_numeric($mahngebuehr))
- $mahngebuehr = 0;
-
- //$offen= '11,23';
- $body = str_replace('{RECHNUNG}',$belegnr,$body);
- $body = str_replace('{BELEGNR}',$belegnr,$body);
- $body = str_replace('{DATUMRECHNUNG}',$datum,$body);
- $body = str_replace('{TAGE}',$tage,$body);
- $body = str_replace('{OFFEN}',$this->formatMoney($soll - $ist,$waehrung),$body);
- $body = str_replace('{SOLL}',$this->formatMoney($soll,$waehrung),$body);
- $body = str_replace('{SUMME}',$this->formatMoney($soll - $ist + $mahngebuehr,$waehrung),$body);
- $body = str_replace('{IST}',$this->formatMoney($ist,$waehrung),$body);
- $body = str_replace('{DATUM}',$datummahnung,$body);
- $body = str_replace('{MAHNGEBUEHR}',$this->formatMoney($mahngebuehr,$waehrung),$body);
- $body = str_replace('{OFFENMITMAHNGEBUEHR}',$this->formatMoney($mahngebuehr + $soll - $ist,$waehrung),$body);
- $body = str_replace('{MAHNDATUM}',$mahnwesen_datum_deutsch,$body);
-
-
- // Im Protokoll suchen Datum von Zahlungserinnerung, Mahnung 1, Mahnung 2, Mahnung 3
-
- $mahnung1 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$id'
- AND grund LIKE 'Mahnung1 versendet%' ORDER by Zeit DESC LIMIT 1");
-
- $mahnung2 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$id'
- AND grund LIKE 'Mahnung2 versendet%' ORDER by Zeit DESC LIMIT 1");
-
- $mahnung3 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$id'
- AND grund LIKE 'Mahnung3 versendet%' ORDER by Zeit DESC LIMIT 1");
-
- $body = str_replace('{DATUMMAHNUNG1}',$mahnung1,$body);
- $body = str_replace('{DATUMMAHNUNG2}',$mahnung2,$body);
- $body = str_replace('{DATUMMAHNUNG3}',$mahnung3,$body);
-
- $body = str_replace('{DATUMZAHLUNGSERINNERUNGFAELLIG}',$datumzahlungserinnerung,$body);
- $body = str_replace('{DATUMZAHLUNGSERINNERUNG}',$datumzahlungserinnerung,$body);
- $body = str_replace('{DATUMRECHNUNGZAHLUNGSZIEL}',$datumrechnungzahlungsziel,$body);
-
- $body = $this->ParseUserVars('rechnung',$id,$body);
-
- return $body;
-}
-
/**@deprecated */
function AufragZuDTA($auftrag,$rechnung="1")
{
diff --git a/www/lib/dokumente/class.rechnung.php b/www/lib/dokumente/class.rechnung.php
index b3b4af8e..c02c6c10 100644
--- a/www/lib/dokumente/class.rechnung.php
+++ b/www/lib/dokumente/class.rechnung.php
@@ -43,9 +43,9 @@ class RechnungPDF extends BriefpapierCustom {
parent::__construct($this->app,$projekt,$styleData);
}
- public function GetRechnung($id,$als="",$doppeltmp=0, $_datum = null)
+ public function GetRechnung($id, $titel_abw="",$doppeltmp=0, $_datum = null, $text_abw = '')
{
- $this->parameter = $als;
+
if($this->app->erp->Firmendaten("steuerspalteausblenden")=="1")
{
// pruefe ob es mehr als ein steuersatz gibt // wenn ja dann darf man sie nicht ausblenden
@@ -124,10 +124,10 @@ class RechnungPDF extends BriefpapierCustom {
$lieferschein = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1");
- if(empty($als) || $als === 'doppel') {
+ /* if(empty($als) || $als === 'doppel') {
$rechnungsnummeranzeigen = false;
}
- elseif(!empty($belegnr)){
+ else*/if(!empty($belegnr)){
$rechnungsnummeranzeigen = true;
}
$projektabkuerzung = $this->app->DB->Select(sprintf('SELECT abkuerzung FROM projekt WHERE id = %d', $projekt));
@@ -172,7 +172,7 @@ class RechnungPDF extends BriefpapierCustom {
$zahlungsweisetext = $this->app->erp->Zahlungsweisetext("rechnung",$id);
- if($doppel==1) $als = "doppel";
+// if($doppel==1) $als = "doppel";
if($belegnr=="" || $belegnr=="0") $belegnr = "- ".$this->app->erp->Beschriftung("dokument_entwurf");
else {
@@ -181,7 +181,7 @@ class RechnungPDF extends BriefpapierCustom {
}
$posanzeigen = true;
- if($als=="zahlungserinnerung")
+/* if($als=="zahlungserinnerung")
{
$this->doctypeOrig=$this->app->erp->Beschriftung("dokument_zahlungserinnerung")." ".(is_null($_datum)?$mahnwesen_datum:$_datum);
if($this->app->erp->GetKonfiguration("mahnwesen_ze_pos") === '0')$posanzeigen = false;
@@ -207,14 +207,12 @@ class RechnungPDF extends BriefpapierCustom {
if($this->app->erp->GetKonfiguration("mahnwesen_inkasso_pos") === '0')$posanzeigen = false;
}
else
- {
+ {*/
if($rechnungersatz)
$this->doctypeOrig=($this->app->erp->Beschriftung("bezeichnungrechnungersatz")?$this->app->erp->Beschriftung("bezeichnungrechnungersatz"):$this->app->erp->Beschriftung("dokument_rechnung"))." $belegnr";
else
$this->doctypeOrig=$this->app->erp->Beschriftung("dokument_rechnung")." $belegnr";
- }
-
-
+// }
$this->zusatzfooter = " (RE$belegnr)";
@@ -407,12 +405,12 @@ class RechnungPDF extends BriefpapierCustom {
- if($als!="" && $als!="doppel")
+/* if($als!="" && $als!="doppel")
{
$body = $this->app->erp->MahnwesenBody($id,$als,$_datum);
$footer =$this->app->erp->ParseUserVars("rechnung",$id, $this->app->erp->Beschriftung("rechnung_footer"));
}
- else {
+ else {*/
$body = $this->app->erp->Beschriftung("rechnung_header");
if($bodyzusatz!="") $body=$body."\r\n".$bodyzusatz;
$body = $this->app->erp->ParseUserVars("rechnung",$id,$body);
@@ -442,6 +440,14 @@ class RechnungPDF extends BriefpapierCustom {
$footer = $versandinfo."$freitext"."\r\n".$this->app->erp->ParseUserVars("rechnung",$id,$this->app->erp->Beschriftung("rechnung_footer").
"\r\n$steuer\r\n$zahlungsweisetext").$systemfreitext;
}
+// }
+
+ if ($titel_abw != '') {
+ $this->doctypeOrig = $titel_abw;
+ }
+
+ if ($text_abw != '') {
+ $body = $text_abw;
}
$this->setTextDetails(array(
@@ -686,10 +692,10 @@ class RechnungPDF extends BriefpapierCustom {
$tmp_name = str_replace(' ','',trim($this->recipient['enterprise']));
$tmp_name = str_replace('.','',$tmp_name);
- if($als=="" || $als=="doppel")
- $this->filename = $datum2."_RE".$belegnr.".pdf";
+ if($titel_abw != "")
+ $this->filename = $datum2."_RE".$belegnr."_INFO.pdf";
else
- $this->filename = $datum2."_MA".$belegnr.".pdf";
+ $this->filename = $datum2."_RE".$belegnr.".pdf";
$this->setBarcode($belegnr);
}
diff --git a/www/pages/content/einstellungen.tpl b/www/pages/content/einstellungen.tpl
index 66751f4a..99595060 100644
--- a/www/pages/content/einstellungen.tpl
+++ b/www/pages/content/einstellungen.tpl
@@ -68,13 +68,13 @@
|
|
[GREYLIEFERBEDINGUNGEN] |
- |
+ |
{|Versandarten|} |
{|Zahlungsweisen|} |
{|Lieferbedingungen|} |
- |
+ {|Mahnwesen|} |
diff --git a/www/pages/content/mahnwesen_edit.tpl b/www/pages/content/mahnwesen_edit.tpl
new file mode 100644
index 00000000..eb207ecf
--- /dev/null
+++ b/www/pages/content/mahnwesen_edit.tpl
@@ -0,0 +1,142 @@
+
+
diff --git a/www/pages/content/mahnwesen_einstellungen.tpl b/www/pages/content/mahnwesen_einstellungen.tpl
new file mode 100644
index 00000000..394c103a
--- /dev/null
+++ b/www/pages/content/mahnwesen_einstellungen.tpl
@@ -0,0 +1,10 @@
+
+
+
+ [MESSAGE]
+ [TAB1]
+ [TAB1NEXT]
+
+
diff --git a/www/pages/content/mahnwesen_list.tpl b/www/pages/content/mahnwesen_list.tpl
index c3e87d82..cc5772aa 100644
--- a/www/pages/content/mahnwesen_list.tpl
+++ b/www/pages/content/mahnwesen_list.tpl
@@ -10,6 +10,13 @@
[MESSAGE]
@@ -38,9 +46,10 @@
[ALSBEZAHLTMARKIEREN]
-
-
-
+
+
{|Drucker|}:
diff --git a/www/pages/mahnwesen.php b/www/pages/mahnwesen.php
index f4c7d88d..812d4508 100644
--- a/www/pages/mahnwesen.php
+++ b/www/pages/mahnwesen.php
@@ -16,8 +16,8 @@ class Mahnwesen {
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list", "mahnwesen_list");
$this->app->ActionHandler("create", "mahnwesen_edit"); // This automatically adds a "New" button
- $this->app->ActionHandler("edit", "mahnwesen_edit");
- $this->app->ActionHandler("delete", "mahnwesen_delete");
+ $this->app->ActionHandler("edit", "mahnwesen_edit");
+ $this->app->ActionHandler("einstellungen", "mahnwesen_einstellungen");
$this->app->DefaultActionHandler("list");
$this->app->ActionHandlerListen($app);
}
@@ -33,13 +33,16 @@ class Mahnwesen {
$extended_mysql55 = ",'de_DE'";
$allowed['mahnwesen_list'] = array('list');
- $heading = array('', '', 'Rechnung', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)', 'Währung', 'Zahlstatus', 'Differenz', 'Status','Mahnstufe','Mahn-Datum','Gemahnt','Sperre','Interne Bemerkung','Menü');
- $width = array('1%','1%','01%', '01%', '01%', '05%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '20%', '1%'); // Fill out manually later
+ $heading = array('', '', 'Rechnung', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)', 'Währung', 'Zahlstatus', 'Differenz', 'Status','Fällig am','Tage','Mahnstufe','Gemahnt','Mahn-Datum','Sperre','Interne Bemerkung','Menü');
+ $width = array('1%','1%','01%', '01%', '01%', '05%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '01%', '20%', '1%'); // Fill out manually later
// columns that are aligned right (numbers etc)
// $alignright = array(4,5,6,7,8);
- $findcols = array('r.id','r.id','r.belegnr', $app->erp->FormatDateShort('r.datum'), 'r.kundennummer','r.name', 'r.land','p.abkuerzung','r.zahlungsweise','r.soll','r.waehrung','r.zahlungsstatus','r.soll','r.status','r.mahnwesen');
+ $faellig_datum = $app->erp->FormatDateShort("DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY)");
+ $faellig_tage = "if(DATEDIFF(CURRENT_DATE,DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY)) > 0,DATEDIFF(CURRENT_DATE,DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY)),'')";
+
+ $findcols = array('r.id','r.id','r.belegnr', $app->erp->FormatDateShort('r.datum'), 'r.kundennummer','r.name', 'r.land','p.abkuerzung','r.zahlungsweise','r.soll','r.waehrung','r.zahlungsstatus','r.soll','r.status',$faellig_datum,$faellig_tage,'r.name');
$searchsql = array('belegnr', 'kunde', 'datum');
$defaultorder = 1;
@@ -64,21 +67,23 @@ class Mahnwesen {
r.zahlungsstatus as zahlung,
if(r.soll-r.ist!=0 AND r.ist > 0,FORMAT(r.ist-r.soll,2{$extended_mysql55}),FORMAT((r.soll-r.ist)*-1,2{$extended_mysql55})) as fehlt,
if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status,
- r.mahnwesen,
- ".$app->erp->FormatDateShort('mahnwesen_datum')." as datum,
- if(r.versendet_mahnwesen,'Ja',''),
+ ".$faellig_datum." as faellig_datum,
+ ".$faellig_tage." as faellig_tage,
+ m.name,
+ if(r.versendet_mahnwesen,'Ja','') as versendet_mahnwesen,
+ if(mahnwesen_datum <> '0000-00-00',".$app->erp->FormatDateShort('mahnwesen_datum').",'') as mahnwesen_datum,
if(r.mahnwesen_gesperrt,'Ja',''),
REPLACE(r.mahnwesen_internebemerkung,'\r\n','
'),
r.id
- FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid ";
+ FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid LEFT JOIN mahnwesen m ON r.mahnwesen = m.id";
$where = " r.belegnr <> ''";
// Toggle filters
- $this->app->Tpl->Add('JQUERYREADY', "$('#inkl_bezahlte').click( function() { fnFilterColumn1( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#inkl_gesperrte').click( function() { fnFilterColumn2( 0 ); } );");
-
- for ($r = 1;$r <= 2;$r++) {
+ $this->app->Tpl->Add('JQUERYREADY', "$('#zu_mahnen').click( function() { fnFilterColumn1( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#inkl_bezahlte').click( function() { fnFilterColumn2( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#inkl_gesperrte').click( function() { fnFilterColumn3( 0 ); } );");
+ for ($r = 1;$r <= 3;$r++) {
$this->app->Tpl->Add('JAVASCRIPT', '
function fnFilterColumn' . $r . ' ( i )
{
@@ -96,15 +101,19 @@ class Mahnwesen {
');
}
-
$more_data1 = $app->Secure->GetGET("more_data1");
if ($more_data1 == 1) {
+ $where .= " AND NOT r.versendet_mahnwesen AND r.mahnwesen <> ''";
+ } else {
+ }
+ $more_data2 = $app->Secure->GetGET("more_data2");
+ if ($more_data2 == 1) {
} else {
$where .= " AND r.zahlungsstatus <> 'bezahlt' ";
}
- $more_data2 = $app->Secure->GetGET("more_data2");
- if ($more_data2 == 1) {
+ $more_data3 = $app->Secure->GetGET("more_data3");
+ if ($more_data3 == 1) {
}
else {
$where .= " AND NOT r.mahnwesen_gesperrt ";
@@ -116,6 +125,39 @@ class Mahnwesen {
// $groupby = "";
break;
+ case "mahnwesen_einstellungen":
+ $allowed['mahnwesen_list'] = array('list');
+ $heading = array('', 'Tage', 'Name', 'Gebuehr', 'E-Mail', 'Druck', 'Menü');
+ $width = array('1%','1%','10%'); // Fill out manually later
+
+ // columns that are aligned right (numbers etc)
+ // $alignright = array(4,5,6,7,8);
+
+ $findcols = array('m.id', 'm.tage','m.name', 'm.gebuehr', 'm.mail','m.druck');
+ $searchsql = array('m.stufe','m.name','m.tage', 'm.gebuehr', 'm.versandmethode');
+
+ $defaultorder = 1;
+ $defaultorderdesc = 1;
+
+ $dropnbox = "'' AS `open`";
+
+ $menu = "";
+
+ $sql = "SELECT SQL_CALC_FOUND_ROWS
+ m.id,
+ $dropnbox,
+ m.tage,
+ m.name,
+ ".$this->app->erp->FormatMenge('m.gebuehr',2).",
+ if(m.mail,'Ja',''),
+ if(m.druck,'Ja',''),
+ m.id FROM mahnwesen m";
+
+ $where = "1";
+ $count = "SELECT count(DISTINCT id) FROM mahnwesen WHERE $where";
+ // $groupby = "";
+
+ break;
}
$erg = false;
@@ -131,12 +173,121 @@ class Mahnwesen {
function mahnwesen_list() {
$this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=list", "Übersicht");
// $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=create", "Neu anlegen");
- $this->app->erp->MenuEintrag("index.php", "Zurück");
+// $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=einstellungen", "Einstellungen");
- if($this->app->Secure->GetPOST('zahlungsstatus_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) {
+ if($this->app->Secure->GetPOST('mahnstufe_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) {
$this->app->erp->rechnung_zahlstatus_berechnen();
+
+ $sql = "
+ SELECT
+ r.id, r.mahnwesen, rid_mid.mahnwesen_neu
+ FROM
+ rechnung r
+ INNER JOIN
+ (
+ SELECT
+ id_tage.id,
+ m.id AS mahnwesen_neu
+ FROM
+ mahnwesen m
+ INNER JOIN(
+ SELECT
+ id,
+ MAX(tage) AS tage
+ FROM
+ (
+ SELECT
+ r.id,
+ m.tage
+ FROM
+ rechnung r
+ INNER JOIN mahnwesen m ON
+ DATEDIFF(
+ CURRENT_DATE,
+ DATE_ADD(
+ r.datum,
+ INTERVAL r.zahlungszieltage DAY
+ )
+ ) > m.tage
+ WHERE
+ r.zahlungsstatus = 'offen'
+ ORDER BY
+ `r`.`id` ASC
+ ) temp
+ GROUP BY
+ id
+ ) id_tage
+ ON
+ m.tage = id_tage.tage
+ ) rid_mid
+ ON r.id = rid_mid.id
+ ";
+ $offene_rechnungen = $this->app->DB->SelectArr($sql);
+
+ foreach ($offene_rechnungen as $offene_rechnung) {
+ if ($offene_rechnung['mahnwesen'] != $offene_rechnung['mahnwesen_neu']) {
+ $sql = "UPDATE rechnung set mahnwesen = ".$offene_rechnung['mahnwesen_neu'].", versendet_mahnwesen = 0 WHERE id = ".$offene_rechnung['id'];
+ $this->app->DB->Update($sql);
+ }
+ }
+
}
+ if($this->app->Secure->GetPOST('mahnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) {
+
+ // Process multi action
+ $auswahl = $this->app->Secure->GetPOST('auswahl');
+ $selectedIds = [];
+ if(!empty($auswahl)) {
+ foreach($auswahl as $selectedId) {
+ $selectedId = (int)$selectedId;
+ if($selectedId > 0) {
+ $selectedIds[] = $selectedId;
+ }
+ }
+
+ $mails = 0;
+ $drucke = 0;
+
+ foreach ($selectedIds as $rechnung_id) {
+
+ $mahnung = $this->MahnwesenMessage($rechnung_id);
+
+ if ($mahnung['druck']) {
+ $drucker = $this->app->Secure->GetPOST('seldrucker');
+ if($drucker > 0) {
+ $this->app->erp->BriefpapierHintergrundDisable($drucker);
+ } else {
+ $msg .= "Kein Drucker gewählt.
";
+ break;
+ }
+ if(class_exists('RechnungPDFCustom')) {
+ $Brief = new RechnungPDFCustom($this->app,$projekt);
+ }
+ else {
+ $Brief = new RechnungPDF($this->app,$projekt);
+ }
+ $Brief->GetRechnung($rechnung_id,$mahnung['betreff'],0,null,$mahnung['body']);
+ $tmpfile = $Brief->displayTMP();
+ $this->app->printer->Drucken($drucker,$tmpfile);
+ unlink($tmpfile);
+ $this->app->erp->RechnungProtokoll($rechnung_id,'Mahnung gedruckt');
+ $drucke++;
+ }
+
+ if ($mahnung['mail']) {
+ $this->app->erp->RechnungProtokoll($rechnung_id,'Mahnung versendet');
+ $mails++;
+ }
+
+ $sql = "UPDATE rechnung set mahnwesen_datum = CURRENT_DATE, versendet_mahnwesen = 1";
+ $this->app->DB->Update($sql);
+
+ }
+ $msg .= "$mails E-Mails versendet, $drucke Dokumente gedruckt.
";
+ }
+ }
+
if($this->app->Secure->GetPOST('sel_aktion') && $this->app->erp->RechteVorhanden('rechnung', 'edit'))
{
$drucker = $this->app->Secure->GetPOST('seldrucker');
@@ -162,161 +313,18 @@ class Mahnwesen {
case 'offen':
$this->app->DB->Update("UPDATE rechnung SET zahlungsstatus='offen',bezahlt_am = NULL, mahnwesen_internebemerkung=CONCAT(mahnwesen_internebemerkung,'\r\n','Manuell als bezahlt entfernt am ".date('d.m.Y')."') WHERE id IN (".implode(', ',$auswahl).')');
break;
- case 'mail':
- $auswahl = $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT id FROM rechnung WHERE belegnr <> '' AND id IN (%s)",
- implode(', ', $auswahl)
- )
- );
- foreach($auswahl as $v) {
- if(!$v) {
- continue;
- }
- $checkpapier = $this->app->DB->Select(
- "SELECT a.rechnung_papier FROM rechnung AS r
- LEFT JOIN adresse AS a ON r.adresse=a.id
- WHERE r.id='$v'
- LIMIT 1"
- );
- if($checkpapier!=1 &&
- $this->app->DB->Select(
- "SELECT r.id
- FROM rechnung AS r
- INNER JOIN adresse AS a ON r.adresse = a.id
- WHERE r.id = '$v' AND r.email <> '' OR a.email <> ''
- LIMIT 1"
- )
- ) {
- $this->app->erp->PDFArchivieren('rechnung', $v, true);
- $this->app->erp->Rechnungsmail($v);
- }
- else if($checkpapier && $drucker) {
- $this->app->erp->PDFArchivieren('rechnung', $v, true);
- $projekt = $this->app->DB->Select(
- "SELECT projekt FROM rechnung WHERE id='$v' LIMIT 1"
- );
- if(class_exists('RechnungPDFCustom')) {
- $Brief = new RechnungPDFCustom($this->app,$projekt);
- }
- else {
- $Brief = new RechnungPDF($this->app,$projekt);
- }
- $Brief->GetRechnung($v);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- $this->app->printer->Drucken($drucker,$tmpfile);
- unlink($tmpfile);
- }
- }
- break;
- case 'versendet':
- $auswahl = $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT id FROM rechnung WHERE belegnr <> '' AND id IN (%s)",
- implode(', ', $auswahl)
- )
- );
- foreach($auswahl as $v) {
- if($v) {
- $reArr = $this->app->DB->SelectRow(
- sprintf(
- "SELECT projekt,belegnr,status,usereditid,
- DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open`
- FROM rechnung WHERE id=%d LIMIT 1",
- $v
- )
- );
- if($reArr['belegnr'] === '' || ($reArr['open'] && $reArr['status'] === 'freigegeben')) {
- continue;
- }
- $this->markInvoiceAsClosed($v);
- }
- }
- break;
- case 'drucken':
- if($drucker) {
- $auswahl = $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT id FROM rechnung WHERE belegnr <> '' AND id IN (%s)",
- implode(', ', $auswahl)
- )
- );
- foreach($auswahl as $v) {
- $reArr = $this->app->DB->SelectRow(
- sprintf(
- "SELECT projekt,belegnr,status,usereditid,adresse,
- DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open`
- FROM rechnung WHERE id=%d LIMIT 1",
- $v
- )
- );
- if($reArr['belegnr'] === '' || ($reArr['open'] && $reArr['status'] === 'freigegeben')) {
- continue;
- }
- if($reArr['status'] === 'freigegeben') {
- $this->app->erp->RechnungNeuberechnen($v);
- }
- $projekt = $reArr['projekt'];//$this->app->DB->Select("SELECT projekt FROM rechnung WHERE id='$v' LIMIT 1");
- $this->app->erp->RechnungProtokoll($v,'Rechnung gedruckt');
- $this->app->DB->Update("UPDATE rechnung SET schreibschutz=1, versendet = 1 WHERE id = '$v' LIMIT 1");
- $this->app->DB->Update("UPDATE rechnung SET status='versendet' WHERE id = '$v' AND status!='storniert' LIMIT 1");
- $this->app->erp->PDFArchivieren('rechnung', $v, true);
- if(class_exists('RechnungPDFCustom')) {
- $Brief = new RechnungPDFCustom($this->app,$projekt);
- }
- else{
- $Brief = new RechnungPDF($this->app,$projekt);
- }
- $Brief->GetRechnung($v);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- $this->app->printer->Drucken($drucker,$tmpfile);
- $doctype = 'rechnung';
- $this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $reArr['adresse'], $aktion);
- @unlink($tmpfile);
- }
- }
- break;
- case 'pdf':
- $tmpfile = [];
- foreach($auswahl as $v) {
- $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id=$v LIMIT 1");
- if(class_exists('RechnungPDFCustom')) {
- $Brief = new RechnungPDFCustom($this->app,$projekt);
- }
- else {
- $Brief = new RechnungPDF($this->app,$projekt);
- }
- $Brief->GetRechnung($v);
- $tmpfile[] = $Brief->displayTMP();
- }
-
- if((!empty($tmpfile)?count($tmpfile):0) > 0) {
- try {
- /** @var PdfMerger $pdfMerger */
- $pdfMerger = $this->app->Container->get('PdfMerger');
- $mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf';
- $pdfMerger->merge($tmpfile, $mergeOutputPath);
-
- foreach($tmpfile as $key=>$value) {
- unlink($value);
- }
-
- header('Content-type:application/pdf');
- header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf');
- readfile($mergeOutputPath);
- $this->app->ExitXentral();
- } catch (PdfComponentExceptionInterface $exception) {
- echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage());
- $this->app->ExitXentral();
- }
- }
+ case 'mahnung_reset':
+ $sql = "UPDATE rechnung SET mahnwesen='', versendet_mahnwesen ='', mahnwesen_datum = '0000-00-00' WHERE id IN (".Implode(', ',$auswahl).')';
+ $this->app->DB->Update($sql);
break;
}
}
} // ende ausfuehren
+ if (!empty($msg)) {
+ $this->app->Tpl->Set('MESSAGE', $msg);
+ }
+
if($this->app->erp->RechteVorhanden('rechnung', 'manuellbezahltmarkiert')){
$this->app->Tpl->Set('ALSBEZAHLTMARKIEREN', '');
}
@@ -327,6 +335,16 @@ class Mahnwesen {
$this->app->Tpl->Parse('PAGE', "mahnwesen_list.tpl");
}
+ function mahnwesen_einstellungen() {
+ $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=einstellungen", "Übersicht");
+ $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=create", "Neu anlegen");
+ $this->app->erp->MenuEintrag("index.php?module=einstellungen&action=list", "Zurück");
+ $this->app->erp->Headlines('Mahnwesen Einstellungen');
+
+ $this->app->YUI->TableSearch('TAB1', 'mahnwesen_einstellungen', "show", "", "", basename(__FILE__), __CLASS__);
+ $this->app->Tpl->Parse('PAGE', "mahnwesen_einstellungen.tpl");
+ }
+
public function mahnwesen_delete() {
$id = (int) $this->app->Secure->GetGET('id');
@@ -353,7 +371,7 @@ class Mahnwesen {
$this->app->Tpl->Set('ID', $id);
$this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=edit&id=$id", "Details");
- $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=list", "Zurück zur Übersicht");
+ $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=einstellungen", "Zurück zur Übersicht");
$id = $this->app->Secure->GetGET('id');
$input = $this->GetInput();
$submit = $this->app->Secure->GetPOST('submit');
@@ -384,19 +402,18 @@ class Mahnwesen {
$fix = ", ";
}
+
// echo($columns."
");
// echo($values."
");
// echo($update."
");
$sql = "INSERT INTO mahnwesen (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update;
-// echo($sql);
-
$this->app->DB->Update($sql);
if ($id == 'NULL') {
$msg = $this->app->erp->base64_url_encode("Das Element wurde erfolgreich angelegt.
");
- header("Location: index.php?module=mahnwesen&action=list&msg=$msg");
+ header("Location: index.php?module=mahnwesen&action=einstellungen&msg=$msg");
} else {
$this->app->Tpl->Set('MESSAGE', "Die Einstellungen wurden erfolgreich übernommen.
");
}
@@ -404,8 +421,8 @@ class Mahnwesen {
// Load values again from database
- $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`";
- $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS m.id, $dropnbox, m.name, m.rest, m.test, m.id FROM mahnwesen m"." WHERE id=$id");
+ $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`";
+ $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS m.id, $dropnbox, m.stufe, m.name, m.tage, m.gebuehr, m.mail, m.druck, m.id FROM mahnwesen m"." WHERE id=$id");
foreach ($result[0] as $key => $value) {
$this->app->Tpl->Set(strtoupper($key), $value);
@@ -413,14 +430,16 @@ class Mahnwesen {
/*
* Add displayed items later
- *
+ *
$this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email);
$this->app->Tpl->Add('EMAIL', $email);
$this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
*/
-// $this->SetInput($input);
+ $this->app->Tpl->Set('MAIL', $result[0]['mail']?'checked':'');
+ $this->app->Tpl->Set('DRUCK', $result[0]['druck']?'checked':'');
+
$this->app->Tpl->Parse('PAGE', "mahnwesen_edit.tpl");
}
@@ -429,26 +448,215 @@ class Mahnwesen {
*/
public function GetInput(): array {
$input = array();
- //$input['EMAIL'] = $this->app->Secure->GetPOST('email');
-
$input['name'] = $this->app->Secure->GetPOST('name');
- $input['rest'] = $this->app->Secure->GetPOST('rest');
- $input['test'] = $this->app->Secure->GetPOST('test');
-
-
- return $input;
+ $input['stufe'] = $this->app->Secure->GetPOST('stufe');
+ $input['tage'] = $this->app->Secure->GetPOST('tage');
+ $input['gebuehr'] = $this->app->Secure->GetPOST('gebuehr');
+ $input['mail'] = $this->app->Secure->GetPOST('mail')?'1':'0';
+ $input['druck'] = $this->app->Secure->GetPOST('druck')?'1':'0';
+ return $input;
}
/*
* Set all fields in the page corresponding to $input
*/
function SetInput($input) {
- // $this->app->Tpl->Set('EMAIL', $input['email']);
-
$this->app->Tpl->Set('NAME', $input['name']);
- $this->app->Tpl->Set('REST', $input['rest']);
- $this->app->Tpl->Set('TEST', $input['test']);
-
+ $this->app->Tpl->Set('STUFE', $input['stufe']);
+ $this->app->Tpl->Set('TAGE', $input['tage']);
+ $this->app->Tpl->Set('GEBUEHR', $input['gebuehr']);
+ $this->app->Tpl->Set('MAIL', $input['mail']);
+ $this->app->Tpl->Set('DRUCK', $input['druck']);
+ }
+
+
+ /*
+ * Constuct the Mahnwesen message according to GeschÀftsbriefVorlage
+ * Returns Array (string betreff, string body, boolean mail, boolean druck)
+ */
+ function MahnwesenMessage($rechnung_id) {
+
+ $sql = "SELECT
+ r.*,
+ ".$this->app->erp->FormatDate('datum')." datum,
+ ".$this->app->erp->FormatDate('CURRENT_DATE')." heute,
+ m.name as mahn_name,
+ m.tage as mahn_tage,
+ m.gebuehr as mahn_gebuehr,
+ m.mail as mahn_mail,
+ m.druck as mahn_druck
+ FROM
+ rechnung r
+ INNER JOIN
+ mahnwesen m
+ ON
+ r.mahnwesen = m.id WHERE r.id = ".$rechnung_id." LIMIT 1";
+ $rechnungarr = $this->app->DB->SelectArr($sql)[0];
+
+ if (empty($rechnungarr)) {
+ return;
+ }
+
+ $adresse = $rechnungarr['adresse'];
+ if($sprache==''){
+ $sprache = $rechnungarr['sprache'];
+ }
+ if($sprache==''){
+ $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1");
+ }
+
+ $kundennummer = $rechnungarr['kundennummer'];
+ $projekt = $rechnungarr['projekt'];
+ $auftrag= $rechnungarr['auftrag'];
+ $buchhaltung= $rechnungarr['buchhaltung'];
+ $lieferschein = $rechnungarr['lieferschein'];
+ $lieferscheinid = $lieferschein;
+ if($lieferscheinid){
+ $lieferschein = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
+ }else{
+ $lieferschein = '';
+ }
+ $bestellbestaetigung = $rechnungarr['kundennummer'];
+ $datum = $rechnungarr['datum_de'];
+ $datum_sql = $rechnungarr['datum'];
+ $belegnr = $rechnungarr['belegnr'];
+ $doppel = $rechnungarr['doppel'];
+ $freitext = $rechnungarr['freitext'];
+ $ustid = $rechnungarr['ustid'];
+ $soll = $rechnungarr['soll'];
+ $ist = $rechnungarr['ist'];
+ $land = $rechnungarr['land'];
+ $mahnwesen_datum = $rechnungarr['mahnwesen_datum'];
+ $mahnwesen_datum_deutsch = $rechnungarr['mahnwesen_datum_de'];
+ $zahlungsweise = $rechnungarr['zahlungsweise'];
+ $zahlungsstatus = $rechnungarr['zahlungsstatus'];
+ $zahlungszieltage = $rechnungarr['zahlungszieltage'];
+ $zahlungszieltageskonto = $rechnungarr['zahlungszieltageskonto'];
+ $zahlungszielskonto = $rechnungarr['zahlungszielskonto'];
+ $waehrung = $rechnungarr['waehrung'];
+
+ $zahlungdatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltage DAY),'%d.%m.%Y') FROM rechnung WHERE id='$rechnung_id' LIMIT 1");
+
+ if($_datum!=null)
+ {
+ $mahnwesen_datum = $this->app->String->Convert($_datum,'%1.%2.%3','%3-%2-%1');
+ $mahnwesen_datum_deutsch = $_datum;
+ }
+
+ $zahlungsweise = strtolower($zahlungsweise);
+ /*
+ if($als=='zahlungserinnerung')
+ {
+ $body = $this->GetGeschaeftsBriefText("MahnwesenZahlungserinnerung",$sprache,$projekt,"rechnung",$rechnung_id);
+ $tage = $this->GetKonfiguration('mahnwesen_m1_tage');
+ }
+ else if($als=='mahnung1')
+ {
+ $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung1",$sprache,$projekt,"rechnung",$rechnung_id);
+ $mahngebuehr = $this->GetKonfiguration('mahnwesen_m1_gebuehr');
+ $tage = $this->GetKonfiguration('mahnwesen_m2_tage');
+ }
+ else if($als=='mahnung2')
+ {
+ $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung2",$sprache,$projekt,"rechnung",$rechnung_id);
+ $tage = $this->GetKonfiguration('mahnwesen_m3_tage');
+ $mahngebuehr = $this->GetKonfiguration('mahnwesen_m2_gebuehr');
+ }
+ else if($als=='mahnung3')
+ {
+ $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung3",$sprache,$projekt,"rechnung",$rechnung_id);
+ $tage = $this->GetKonfiguration('mahnwesen_ik_tage');
+ $mahngebuehr = $this->GetKonfiguration('mahnwesen_m3_gebuehr');
+ }
+ else if($als=='inkasso')
+ {
+ $body = $this->GetGeschaeftsBriefText("MahnwesenInkasso",$sprache,$projekt,"rechnung",$rechnung_id);
+ //$tage = $this->GetKonfiguration("mahnwesen_ik_tage");
+ $tage = 3; //eigentlich vorbei
+ $mahngebuehr = $this->GetKonfiguration('mahnwesen_ik_gebuehr');
+ }
+ else
+ {
+ $body = $this->app->erp->Beschriftung("dokument_anschreiben");
+ } */
+
+ $betreff = $this->app->erp->GetGeschaeftsBriefBetreff($rechnungarr['mahn_name'],$sprache,$projekt,"rechnung",$rechnung_id);
+ $body = $this->app->erp->GetGeschaeftsBriefText($rechnungarr['mahn_name'],$sprache,$projekt,"rechnung",$rechnung_id);
+
+ if (empty($betreff) || empty($body)) {
+ throw new QueryFailureException("Geschaeftsbrief-Vorlage nicht gefunden: ''".$rechnungarr['mahn_name']."'");
+ }
+
+ $offen = $this->app->erp->GetSaldoDokument($rechnung_id, 'rechnung');
+
+ if($tage <=0) $tage = 0;
+
+/* $datummahnung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$mahnwesen_datum', INTERVAL $tage DAY),'%d.%m.%Y')");
+ $datumrechnungzahlungsziel= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $zahlungszieltage DAY),'%d.%m.%Y')");
+
+ $tage_ze = $zahlungszieltage + $this->GetKonfiguration('mahnwesen_m1_tage');
+ $datumzahlungserinnerung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $tage_ze DAY),'%d.%m.%Y')");*/
+
+ // checkstamp $this->CheckStamp("jhdskKUHsiusakiakuhsd"); // errechnet aus laufzeit und kundenid // wenn es nicht drinnen ist darf es nicht gehen
+/*
+ if($mahngebuehr=='' || !is_numeric($mahngebuehr))
+ $mahngebuehr = 0;
+
+ //$offen= '11,23';
+ $body = str_replace('{RECHNUNG}',$belegnr,$body);
+ $body = str_replace('{BELEGNR}',$belegnr,$body);
+ $body = str_replace('{DATUMRECHNUNG}',$datum,$body);
+ $body = str_replace('{TAGE}',$tage,$body);
+ $body = str_replace('{OFFEN}',$this->app->erp->formatMoney(-$offen['betrag'],$offen['waehrung']),$body);
+ $body = str_replace('{SOLL}',$this->app->erp->formatMoney($soll,$waehrung),$body);
+ $body = str_replace('{SUMME}',$this->app->erp->formatMoney($soll - $ist + $mahngebuehr,$waehrung),$body);
+ $body = str_replace('{IST}',$this->app->erp->formatMoney($ist,$waehrung),$body);
+ $body = str_replace('{DATUM}',$datummahnung,$body);
+ $body = str_replace('{MAHNGEBUEHR}',$this->app->erp->formatMoney($mahngebuehr,$waehrung),$body);
+ $body = str_replace('{OFFENMITMAHNGEBUEHR}',$this->app->erp->formatMoney($mahngebuehr + $soll - $ist,$waehrung),$body);
+ $body = str_replace('{MAHNDATUM}',$mahnwesen_datum_deutsch,$body);
+
+
+ // Im Protokoll suchen Datum von Zahlungserinnerung, Mahnung 1, Mahnung 2, Mahnung 3
+
+ $mahnung1 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$rechnung_id'
+ AND grund LIKE 'Mahnung1 versendet%' ORDER by Zeit DESC LIMIT 1");
+
+ $mahnung2 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$rechnung_id'
+ AND grund LIKE 'Mahnung2 versendet%' ORDER by Zeit DESC LIMIT 1");
+
+ $mahnung3 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$rechnung_id'
+ AND grund LIKE 'Mahnung3 versendet%' ORDER by Zeit DESC LIMIT 1");
+
+ $body = str_replace('{DATUMMAHNUNG1}',$mahnung1,$body);
+ $body = str_replace('{DATUMMAHNUNG2}',$mahnung2,$body);
+ $body = str_replace('{DATUMMAHNUNG3}',$mahnung3,$body);
+
+ $body = str_replace('{DATUMZAHLUNGSERINNERUNGFAELLIG}',$datumzahlungserinnerung,$body);
+ $body = str_replace('{DATUMZAHLUNGSERINNERUNG}',$datumzahlungserinnerung,$body);
+ $body = str_replace('{DATUMRECHNUNGZAHLUNGSZIEL}',$datumrechnungzahlungsziel,$body);*/
+
+ $mapping = [
+ 'rechnung' => $belegnr,
+ 'belegnr' => $belegnr,
+ 'datum' => $datum_sql,
+ 'offen' => $this->app->erp->EUR(-$offen['betrag'])." ".$offen['waehrung'],
+ 'mahngebuehr' => $this->app->erp->EUR($rechnungarr['mahn_gebuehr']),
+ 'heute' => $rechnungarr['heute']
+ ];
+
+ $betreff = $this->app->erp->ParseVars($mapping,$betreff);
+ $body = $this->app->erp->ParseVars($mapping,$body);
+ $body = $this->app->erp->ParseUserVars('rechnung',$rechnung_id,$body);
+
+ return(array(
+ 'betreff' => $betreff,
+ 'body' => $body,
+ 'mail' => $rechnungarr['mahn_mail'] != 0,
+ 'druck' => $rechnungarr['mahn_druck'] != 0,
+ 'empfaenger' => $rechnungarr['email']
+ ));
+
}
}
diff --git a/www/pages/rechnung.php b/www/pages/rechnung.php
index 9f8415cc..9a753ac5 100644
--- a/www/pages/rechnung.php
+++ b/www/pages/rechnung.php
@@ -644,7 +644,11 @@ class Rechnung extends GenRechnung
if($auftragArr[0]['mahnwesen']=='') {
$auftragArr[0]['mahnwesen']='-';
}
+
$this->app->Tpl->Set('MAHNWESEN',$auftragArr[0]['mahnwesen']);
+
+ $this->app->Tpl->Set('MAHNWESEN','XXX');
+
if($auftragArr[0]['mahnwesen_datum']=='0000-00-00') {
$auftragArr[0]['mahnwesen_datum']='-';
}
@@ -889,7 +893,7 @@ class Rechnung extends GenRechnung
$tmp->Query("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit DESC",0,"");
$tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction");
-
+/*
$query = $this->app->DB->SelectArr("SELECT zeit,bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' ORDER by zeit");
if($query)
{
@@ -905,12 +909,12 @@ class Rechnung extends GenRechnung
{
$tmp2 = new EasyTable($this->app);
- $tmp2->Query("SELECT concat('app->Conf->WFconf[defaulttheme]}/images/pdf.svg\" border=\"0\">') as PDF, Date(zeit) as Datum, bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' AND zeit >= '".$zeit."' ORDER by zeit DESC");
+ $tmp2->Query("SELECT concat('app->Conf->WFconf['defaulttheme']}/images/pdf.svg\" border=\"0\">') as PDF, Date(zeit) as Datum, bearbeiter,grund FROM rechnung_protokoll WHERE rechnung='$id' AND zeit >= '".$zeit."' ORDER by zeit DESC");
$tmp2->DisplayNew('MAHNPROTOKOLL',"Protokoll","noAction");
}
- }
+ }*/
if(class_exists('RechnungPDFCustom'))
{
@@ -1940,7 +1944,7 @@ class Rechnung extends GenRechnung
' überein '
);
}
-
+
parent::RechnungEdit();
if($id > 0 && $this->app->DB->Select(
sprintf(
@@ -2780,7 +2784,7 @@ class Rechnung extends GenRechnung
// Skonto ok -> book difference
$sachkonto = $this->app->erp->Firmendaten('rechnung_skonto_kontorahmen');
if (!empty($sachkonto)) {
- $this->app->erp->fibu_buchungen_buchen('rechnung',$offene_rechnung['id'],'kontorahmen',$sachkonto,-$saldo['betrag'],$offene_rechnung['waehrung'],'CURRENT_DATE','');
+ $this->app->erp->fibu_buchungen_buchen('rechnung',$offene_rechnung['id'],'kontorahmen',$sachkonto,-$saldo['betrag'],$offene_rechnung['waehrung'],date('Y-m-d'),'');
$offene_rechnung['ist'] = $offene_rechnung['soll'];
} else {
}
diff --git a/www/widgets/_gen/widget.gen.rechnung.php b/www/widgets/_gen/widget.gen.rechnung.php
index 84170459..0f20817b 100644
--- a/www/widgets/_gen/widget.gen.rechnung.php
+++ b/www/widgets/_gen/widget.gen.rechnung.php
@@ -133,12 +133,19 @@ class WidgetGenrechnung
$field = new HTMLSelect("mahnwesen",0,"mahnwesen","","","0");
$field->AddOption('','');
- $field->AddOption('Zahlungserinnerung','zahlungserinnerung');
+/* $field->AddOption('Zahlungserinnerung','zahlungserinnerung');
$field->AddOption('Mahnung 1','mahnung1');
$field->AddOption('Mahnung 2','mahnung2');
$field->AddOption('Mahnung 3','mahnung3');
$field->AddOption('Inkasso','inkasso');
- $field->AddOption('Forderungsverlust','forderungsverlust');
+ $field->AddOption('Forderungsverlust','forderungsverlust');*/
+
+ $mahnstufen = $this->app->DB->SelectArr("Select name,id FROM mahnwesen ORDER BY tage DESC");
+
+ foreach ($mahnstufen as $mahnstufe) {
+ $field->AddOption($mahnstufe['name'],$mahnstufe['id']);
+ }
+
$this->form->NewField($field);
$field = new HTMLInput("mahnwesen_datum","text","","10","","","","","","","","0","","");