diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php
index 47a31003..a2288551 100644
--- a/phpwf/plugins/class.yui.php
+++ b/phpwf/plugins/class.yui.php
@@ -6551,13 +6551,24 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
// $columnfilter = true;
// SQL statement
- $sql = "SELECT SQL_CALC_FOUND_ROWS r.id,'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open,concat('')as auswahl, r.belegnr, DATE_FORMAT(r.datum,'%d.%m.%Y') as vom,
- if(r.kundennummer <> '',r.kundennummer,adr.kundennummer),
-
- CONCAT(" . $this->app->erp->MarkerUseredit("r.name", "r.useredittimestamp") . ", if(r.internebezeichnung!='',CONCAT('
',r.internebezeichnung,''),'')) as kunde,
- r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise, FORMAT(r.soll,2{$extended_mysql55} ) as soll, ifnull(r.waehrung,'EUR'),
- if(r.soll-r.ist+r.skonto_gegeben!=0 AND r.ist > 0 AND r.zahlungsstatus!='bezahlt','teilbezahlt',r.zahlungsstatus) as zahlung,
- if(r.soll-r.ist+r.skonto_gegeben!=0 AND r.ist > 0,FORMAT(r.ist-r.soll+r.skonto_gegeben,2{$extended_mysql55}),FORMAT((r.soll-r.ist+r.skonto_gegeben)*-1,2{$extended_mysql55})) as fehlt, if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status, ".(!empty($zusatzcols)?implode(', ',$zusatzcols).',':'')." r.id
+ $sql = "SELECT SQL_CALC_FOUND_ROWS
+ r.id,
+ 'app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' as open,
+ concat('') as auswahl,
+ r.belegnr,
+ DATE_FORMAT(r.datum,'%d.%m.%Y') as vom,
+ if(r.kundennummer <> '',r.kundennummer,adr.kundennummer),
+ CONCAT(" . $this->app->erp->MarkerUseredit("r.name", "r.useredittimestamp") . ", if(r.internebezeichnung!='',CONCAT('
',r.internebezeichnung,''),'')) as kunde,
+ r.land as land,
+ p.abkuerzung as projekt,
+ r.zahlungsweise as zahlungsweise,
+ FORMAT(r.soll,2{$extended_mysql55} ) as soll,
+ ifnull(r.waehrung,'EUR'),
+ if(r.soll-r.ist+r.skonto_gegeben!=0 AND r.ist > 0 AND r.zahlungsstatus!='bezahlt','teilbezahlt',r.zahlungsstatus) as zahlung,
+ if(r.soll-r.ist+r.skonto_gegeben!=0 AND r.ist > 0,FORMAT(r.ist-r.soll+r.skonto_gegeben,2{$extended_mysql55}),FORMAT((r.soll-r.ist+r.skonto_gegeben)*-1,2{$extended_mysql55})) as fehlt,
+ if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status,
+ ".(!empty($zusatzcols)?implode(', ',$zusatzcols).',':'')."
+ 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 ";
if(isset($parameter['artikel']) && !empty($parameter['artikel'])) {
$artikelid = $this->app->DB->Select("SELECT id FROM artikel where geloescht != 1 AND nummer != 'DEL' AND nummer != '' AND nummer = '".$this->app->DB->real_escape_string(reset(explode(' ',trim($parameter['artikel']))))."' LIMIT 1");
diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php
index afe6628d..15dfc44c 100644
--- a/www/lib/class.erpapi.php
+++ b/www/lib/class.erpapi.php
@@ -7088,6 +7088,7 @@ title: 'Abschicken',
$navarray['menu']['admin'][$menu]['sec'][] = array('Arbeitsnachweis','arbeitsnachweis','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Gutschrift / '.$this->Firmendaten("bezeichnungstornorechnung"),'gutschrift','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Proformarechnung','proformarechnung','list');
+ $navarray['menu']['admin'][$menu]['sec'][] = array('Kontoauszüge','kontoauszuege','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Abolauf','rechnungslauf','rechnungslauf');
$navarray['menu']['admin'][$menu]['sec'][] = array('Mahnwesen','mahnwesen','list');
@@ -36021,7 +36022,7 @@ function Firmendaten($field,$projekt="")
* Gutschrift -> Rechnung -> Auftrag OR Verbindlichkeit
* Results array of ids, types, belegnr
*/
- public function GetZahlungenAssociatedDocuments(int $id, string $type) : array {
+ public function GetZahlungenAssociatedDocuments(int $id, string $type, string $lastlevel = 'auftrag') : array {
$assocs = array(
array(
@@ -36056,6 +36057,11 @@ function Firmendaten($field,$projekt="")
// Go to highest level
$above = $assocs[array_search($type,array_column($assocs,'type'))]['above'];
while ($above) {
+
+ if ($type == $lastlevel) {
+ break;
+ }
+
$sql = "SELECT ".$above."id as id FROM ".$type." WHERE id = ".$id;
$above_id = $this->app->DB->SelectArr($sql)[0];
if (!empty($above)) {
@@ -36090,16 +36096,18 @@ function Firmendaten($field,$projekt="")
* Results array of payments with information
* Gutschrift -> Rechnungid, Rechnung -> Auftragid
*/
- public function GetZahlungen(int $id, string $type) : array {
+ public function GetZahlungen(int $id, string $type, bool $cascade = false, string $lastlevel = 'auftrag') : array {
- $documents = $this->GetZahlungenAssociatedDocuments($id, $type);
+ if ($cascade) {
+ $documents = $this->GetZahlungenAssociatedDocuments($id, $type, $lastlevel);
+ } else {
+ $documents = array(array('id' => $id, 'type' => $type));
+ }
if (empty($documents)) {
return(array());
}
-// print_r($documents);
-
$zahlungen = array();
$tables = array(
@@ -36148,9 +36156,44 @@ function Firmendaten($field,$projekt="")
return($zahlungen);
}
+ public function GetZahlung(int $id, string $type, bool $cascade = false, string $lastlevel = 'auftrag') {
+ $zahlungen = $this->GetZahlungen($id, $type, $cascade);
+ if (empty($zahlungen)) {
+ $zahlbetrag = 0;
+ } else {
+ $zahlbetrag = array_sum(array_column($zahlungen,'betrag'));
+ }
+ return($zahlbetrag);
+ }
+
/*
* Calculate the payment saldo of a document
+ * Auftrag: gesamtsumme, rechnung: soll, gutschrift: soll verbindlichkeit: betrag
*/
+ public function GetSaldoDokument($id, $type, string $lastlevel = 'auftrag') {
+
+ $zahlbetrag = $this->GetZahlung($id, $type, false);
+
+ $sollspalten = array(
+ 'auftrag' => 'gesamtsumme',
+ 'rechnung' => 'soll',
+ 'gutschrift' => 'soll',
+ 'verbindlichkeit' => 'betrag'
+ );
+
+ $sql = "SELECT ".$sollspalten[$type]." as sollbetrag FROM ".$type." WHERE id =".$id;
+
+// echo($sql);
+
+ $result = $this->app->DB->SelectArr($sql);
+
+ if (!empty($result)) {
+ $sollbetrag = $result[0]['sollbetrag'];
+ } else {
+ $sollbetrag = 0;
+ }
+ return($sollbetrag-$zahlbetrag);
+ }
public function ANABREGSNeuberechnen($id,$art,$force=false)
{
diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php
index 94e4a16c..5a336f42 100644
--- a/www/pages/auftrag.php
+++ b/www/pages/auftrag.php
@@ -3423,7 +3423,7 @@ class Auftrag extends GenAuftrag
{
$id = $this->app->Secure->GetGET('id');
- $zahlungen = $this->app->erp->GetZahlungen($id,'auftrag');
+ $zahlungen = $this->app->erp->GetZahlungen($id,'auftrag',true);
// print_r($zahlungen);
@@ -3451,6 +3451,17 @@ class Auftrag extends GenAuftrag
";
}
+
+ $saldo = $this->app->erp->GetSaldoDokument($id,'auftrag');
+
+ $result .= "
+