diff --git a/phpwf/htmltags/class.form.php b/phpwf/htmltags/class.form.php index 221a477c..3b2317fd 100644 --- a/phpwf/htmltags/class.form.php +++ b/phpwf/htmltags/class.form.php @@ -194,6 +194,11 @@ class HTMLInput name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\" maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled}>"; break; + case "money": + $html = "id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\" + name=\"{$this->name}\" value=\"".preg_replace("/\"/",""",$this->value)."\" size=\"{$this->size}\" placeholder=\"{$this->placeholder}\" + maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>"; + break; } return $html; diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 157c08d3..3f0697cb 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -13811,6 +13811,20 @@ function SendPaypalFromAuftrag($auftrag, $test = false) } } + function ReplaceKonto($db,$value,$fromform = null) { + $value = $this->app->DB->real_escape_string($value); + + if ($db) { + $konto = explode(' ',$value)[0]; + $kontoid = $this->app->DB->Select("SELECT id FROM konten WHERE kurzbezeichnung = '$konto' LIMIT 1"); + return($kontoid); + } else { + $konto = $this->app->DB->Select("SELECT CONCAT(kurzbezeichnung,' ',bezeichnung) FROM konten WHERE id = '$value' LIMIT 1"); + return($konto); + } + } + + // @refactor FormHelper Komponente function ReplaceLieferant($db,$value,$fromform) { diff --git a/www/pages/ajax.php b/www/pages/ajax.php index 3a08c07e..c57e5204 100644 --- a/www/pages/ajax.php +++ b/www/pages/ajax.php @@ -4014,6 +4014,17 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku } break; break; + case "konto": + $cmd = $this->app->Secure->GetGET("cmd"); + + $arr = $this->app->DB->SelectArr(" + SELECT CONCAT(kurzbezeichnung,' ',bezeichnung) as name FROM konten + WHERE (kurzbezeichnung LIKE '%$term%' OR bezeichnung LIKE '%$term%') ORDER by kurzbezeichnung"); + + $carr = !empty($arr)?count($arr):0; + for($i = 0; $i < $carr; $i++) + $newarr[] = $arr[$i]['name']; + break; case "datevkonto": $arr = $this->app->DB->SelectArr("SELECT DISTINCT t.gegenkonto FROM ( (SELECT concat(datevkonto, ' ',bezeichnung) as gegenkonto FROM konten WHERE datevkonto <> 0 AND datevkonto <> '' AND aktiv = 1) diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php index 1436153c..df5f3517 100644 --- a/www/pages/auftrag.php +++ b/www/pages/auftrag.php @@ -6689,12 +6689,14 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '. public function AuftragList() { - // refresh all open items - $openids = $this->app->DB->SelectArr("SELECT id from auftrag WHERE status <> 'abgeschlossen'"); - foreach ($openids as $openid) { - $this->app->erp->AuftragAutoversandBerechnen($openid['id']); - } - + // refresh all open items if no cronjob is set + if (!$this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'autoversand_berechnung' AND aktiv = 1 LIMIT 1")) { + $openids = $this->app->DB->SelectArr("SELECT id from auftrag WHERE status <>'abgeschlossen' and status <>'storniert' and status <>'angelegt'"); + foreach ($openids as $openid) { + $this->app->erp->AuftragAutoversandBerechnen($openid['id']); + } + } + if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('auftrag', 'edit')) { $drucker = $this->app->Secure->GetPOST('seldrucker'); diff --git a/www/pages/content/firmendaten.tpl b/www/pages/content/firmendaten.tpl index 003b3c38..2ac2daea 100644 --- a/www/pages/content/firmendaten.tpl +++ b/www/pages/content/firmendaten.tpl @@ -1112,13 +1112,19 @@
{|Finanzbuchhaltung Einstellungen|} - - - - - -
Buchungen erzeugen ab Datum:Für die Nutzung mit dem Modul Buchhaltung-Buchungen (Zahlungseingang, Zahlungsstatus, Mahnwesen)
Konto für Rechnung-Skontobuchungen:Auf dieses Sachkonto werden Skontobuchungen mithilfe der Funktion "Zahlungsstatus berechnen" im Rechnungsmodul gebucht
+ Buchungen erzeugen ab Datum: + Für die Nutzung mit dem Modul Buchhaltung-Buchungen (Zahlungseingang, Zahlungsstatus, Mahnwesen) + + + Sachkonto für Rechnung-Skontobuchungen: + Auf dieses Sachkonto werden Skontobuchungen mithilfe der Funktion "Zahlungsstatus berechnen" im Rechnungsmodul gebucht + + + Geschäftskonto für Schnelleingabe: + Auf dieses Geschäftskonto werden Zahlungen mithilfe der Funktion "Schnelleingabe" im Rechnungsmodul gebucht + +
diff --git a/www/pages/content/mahnwesen_list.tpl b/www/pages/content/mahnwesen_list.tpl index c55980bd..4bbe9056 100644 --- a/www/pages/content/mahnwesen_list.tpl +++ b/www/pages/content/mahnwesen_list.tpl @@ -4,7 +4,7 @@
-
+
{|Filter|}
    diff --git a/www/pages/firmendaten.php b/www/pages/firmendaten.php index c8360255..d7d2d615 100644 --- a/www/pages/firmendaten.php +++ b/www/pages/firmendaten.php @@ -1044,7 +1044,7 @@ class Firmendaten { 'arbeitsnachweis_header','arbeitsnachweis_footer','provisionsgutschrift_header','provisionsgutschrift_footer','proformarechnung_header','proformarechnung_footer','eu_lieferung_vermerk','export_lieferung_vermerk' ,'wareneingang_kamera_waage','layout_iconbar','passwort','host','port','mailssl','signatur','email','absendername','bcc1','bcc2','bcc3' ,'firmenfarbe','name','strasse','plz','ort','steuernummer','projekt','steuer_positionen_export','tabsnavigationfarbe','tabsnavigationfarbeschrift' - ,"buchhaltung_berater","buchhaltung_mandant","buchhaltung_wj_beginn","buchhaltung_sachkontenlaenge", "fibu_buchungen_startdatum", "rechnung_skonto_kontorahmen" + ,"buchhaltung_berater","buchhaltung_mandant","buchhaltung_wj_beginn","buchhaltung_sachkontenlaenge", "fibu_buchungen_startdatum", "rechnung_skonto_kontorahmen", "rechnung_schnelleingabe_konto" ); if(isset($sql2a)){ @@ -1384,6 +1384,7 @@ class Firmendaten { $this->app->YUI->DatePicker('fibu_buchungen_startdatum'); $this->app->YUI->AutoComplete('rechnung_skonto_kontorahmen', 'sachkonto'); + $this->app->YUI->AutoComplete('rechnung_schnelleingabe_konto', 'konto'); $this->app->Tpl->Parse('PAGE','firmendaten.tpl'); } @@ -1853,8 +1854,7 @@ class Firmendaten { // Fibu $this->app->Tpl->Set('FIBU_BUCHUNGEN_STARTDATUM', $this->app->erp->ReplaceDatum(false,$data[0]['fibu_buchungen_startdatum'],false)); $this->app->Tpl->Set('RECHNUNG_SKONTO_KONTORAHMEN', $this->app->erp->ReplaceKontorahmen(false,$data[0]['rechnung_skonto_kontorahmen'])); - - + $this->app->Tpl->Set('RECHNUNG_SCHNELLEINGABE_KONTO', $this->app->erp->ReplaceKonto(false,$data[0]['rechnung_schnelleingabe_konto'])); } } @@ -2299,6 +2299,7 @@ class Firmendaten { $data['fibu_buchungen_startdatum'] = $this->app->erp->ReplaceDatum(true,$this->app->Secure->POST["fibu_buchungen_startdatum"],false); $data['rechnung_skonto_kontorahmen'] = $this->app->erp->ReplaceKontorahmen(true,$this->app->Secure->POST["rechnung_skonto_kontorahmen"]); + $data['rechnung_schnelleingabe_konto'] = $this->app->erp->ReplaceKonto(true,$this->app->Secure->POST["rechnung_schnelleingabe_konto"]); return $data; } diff --git a/www/pages/mahnwesen.php b/www/pages/mahnwesen.php index b93ca08a..61d48e44 100644 --- a/www/pages/mahnwesen.php +++ b/www/pages/mahnwesen.php @@ -14,7 +14,8 @@ class Mahnwesen { return; $this->app->ActionHandlerInit($this); - $this->app->ActionHandler("list", "mahnwesen_list"); + $this->app->ActionHandler("list", "mahnwesen_list"); + $this->app->ActionHandler("stufe_list", "mahnwesen_stufe_list"); $this->app->ActionHandler("create", "mahnwesen_edit"); // This automatically adds a "New" button $this->app->ActionHandler("edit", "mahnwesen_edit"); $this->app->ActionHandler("einstellungen", "mahnwesen_einstellungen"); @@ -40,6 +41,8 @@ class Mahnwesen { // columns that are aligned right (numbers etc) // $alignright = array(4,5,6,7,8); + $mahnwesen_stufe_filter = $this->app->DB->real_escape_string($this->app->User->GetParameter('mahnwesen_stufe_filter')); + $faellig_datum = "DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY)"; $faellig_tage = "DATEDIFF(CURRENT_DATE,DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY))"; $mahn_druck = "if(m.druck,'Ja','')"; @@ -56,6 +59,8 @@ class Mahnwesen { $menu = "
    " . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">" . "
    "; + $sql_tables = "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"; + $sql = "SELECT SQL_CALC_FOUND_ROWS r.id, $dropnbox, @@ -81,9 +86,13 @@ class Mahnwesen { 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 LEFT JOIN mahnwesen m ON r.mahnwesen = m.id"; + FROM ".$sql_tables; - $where = " r.belegnr <> ''"; + $where = " r.belegnr <> '' AND r.status <> 'storniert'"; + + if (!empty($mahnwesen_stufe_filter)) { + $where .= " AND m.id = '".$mahnwesen_stufe_filter."' AND r.versendet_mahnwesen "; + } // Toggle filters $this->app->Tpl->Add('JQUERYREADY', "$('#zu_mahnen').click( function() { fnFilterColumn1( 0 ); } );"); @@ -108,7 +117,7 @@ class Mahnwesen { } $more_data1 = $app->Secure->GetGET("more_data1"); - if ($more_data1 == 1) { + if ($more_data1 == 1 && empty($mahnwesen_stufe_filter)) { $where .= " AND NOT r.versendet_mahnwesen AND r.mahnwesen <> ''"; } else { } @@ -126,8 +135,7 @@ class Mahnwesen { } // END Toggle filters - - $count = "SELECT count(DISTINCT id) FROM rechnung r WHERE $where"; + $count = "SELECT count(DISTINCT r.id) FROM ".$sql_tables." WHERE $where"; // $groupby = ""; break; @@ -175,69 +183,14 @@ class Mahnwesen { } return $erg; } + + // For Tab-highlighting + function mahnwesen_stufe_list() { + $this->mahnwesen_list(); + } 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?module=mahnwesen&action=einstellungen", "Einstellungen"); - - 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('sel_aktion') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) { @@ -354,6 +307,101 @@ class Mahnwesen { } } // ende ausfuehren + // Refresh status + if($this->app->Secure->GetPOST('mahnstufe_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) { + $this->app->erp->rechnung_zahlstatus_berechnen(); + } + + // Create tabs + $sql = " + SELECT + r.id, + r.mahnwesen, + r.versendet_mahnwesen, + rid_mid.mahnwesen_neu, + rid_mid.name + FROM + rechnung r + INNER JOIN + ( + SELECT + id_tage.id, + m.id AS mahnwesen_neu, + m.name, + m.tage + 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 + ORDER BY rid_mid.tage + "; + $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); + } + } + + $menus = $this->app->DB->SelectArr(" + SELECT + m.id mahnung, + m.name, + SUM(if(r.versendet_mahnwesen = 1,1,0)) anzahl + FROM + mahnwesen m + LEFT JOIN rechnung r ON + m.id = r.mahnwesen + WHERE + r.id IS NULL OR + ( + r.zahlungsstatus <> 'bezahlt' AND + r.mahnwesen_gesperrt <> 1 + ) + GROUP BY + m.id + ORDER BY + m.tage ASC + "); + + foreach ($menus as $menu) { + $suffix = ""; + if ($menu['anzahl']) { + $suffix = " (".$menu['anzahl'].")"; + } + $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=stufe_list&stufe=".$menu['mahnung'], $this->app->DB->real_escape_string($menu['name']).$suffix); + } + if (!empty($msg)) { $this->app->Tpl->Set('MESSAGE', $msg); } @@ -364,6 +412,13 @@ class Mahnwesen { $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker'))); + $mahnwesen_stufe_filter = $this->app->Secure->GetGET('stufe'); + $this->app->User->SetParameter('mahnwesen_stufe_filter', $mahnwesen_stufe_filter); + if (!empty($mahnwesen_stufe_filter)) { + $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"Stufe: ".$this->app->DB->Select("SELECT name FROM mahnwesen WHERE id = ".$mahnwesen_stufe_filter." LIMIT 1")); + $this->app->Tpl->Set('ZU_MAHNEN_HIDDEN', 'hidden'); + } + $this->app->YUI->TableSearch('TAB1', 'mahnwesen_list', "show", "", "", basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('PAGE', "mahnwesen_list.tpl"); } diff --git a/www/pages/rechnung.php b/www/pages/rechnung.php index 4e423c12..5656ada0 100644 --- a/www/pages/rechnung.php +++ b/www/pages/rechnung.php @@ -1081,6 +1081,7 @@ class Rechnung extends GenRechnung $intern = true; $freigabe=$intern; } + $allowedFrm = true; $showDefault = true; $this->app->erp->CheckVertrieb($id,'rechnung'); @@ -1096,6 +1097,7 @@ class Rechnung extends GenRechnung if($belegnr=='') { $this->app->erp->BelegFreigabe('rechnung',$id); + $this->rechnung_zahlstatus_berechnen($id); if($intern) { return 1; } @@ -1119,7 +1121,7 @@ class Rechnung extends GenRechnung jetzt freigegeben werden?
"); } - + $this->RechnungMenu(); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } @@ -1613,18 +1615,18 @@ class Rechnung extends GenRechnung $invoiceArr = $this->app->DB->SelectRow( sprintf( - 'SELECT zahlungsweise,zahlungszieltage,dta_datei,status,schreibschutz FROM rechnung WHERE id= %d LIMIT 1', + 'SELECT zahlungsweise,zahlungszieltage,dta_datei,status,zahlungsstatus,schreibschutz FROM rechnung WHERE id= %d LIMIT 1', (int)$id ) ); $zahlungsweise= $invoiceArr['zahlungsweise']; $zahlungszieltage= $invoiceArr['zahlungszieltage']; + $zahlungsstatus= $invoiceArr['zahlungsstatus']; if($zahlungsweise==='rechnung' && $zahlungszieltage<1) { $this->app->Tpl->Add('MESSAGE',"
Hinweis: Fälligkeit auf \"sofort\", da Zahlungsziel in Tagen auf 0 Tage gesetzt ist!
"); } - $status= $invoiceArr['status']; $schreibschutz= $invoiceArr['schreibschutz']; if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a') @@ -1661,12 +1663,15 @@ class Rechnung extends GenRechnung $bonuspunkte = $rechnungarr['bonuspunkte'];//$this->app->DB->Select("SELECT bonuspunkte FROM rechnung WHERE id='$id' LIMIT 1"); $soll = $rechnungarr['soll'];//$this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1"); $projekt = $rechnungarr['projekt']; + + $skontosoll = $this->app->DB->Select("SELECT TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll FROM rechnung where id = '".$id."' LIMIT 1"); } $this->app->Tpl->Set('PUNKTE',""); $this->app->Tpl->Set('BONUSPUNKTE',""); $this->app->Tpl->Set('SOLL',"$soll".""); + $this->app->Tpl->Set('SKONTOSOLL',$skontosoll); if($schreibschutz!='1')// && $this->app->erp->RechteVorhanden("rechnung","schreibschutz")) { @@ -1743,10 +1748,7 @@ class Rechnung extends GenRechnung if($zahlungsweise==='vorkasse' || $zahlungsweise==='kreditkarte' || $zahlungsweise==='paypal' || $zahlungsweise==='bar') { $this->app->Tpl->Set('VORKASSE',''); } - - $ist = $this->app->erp->EUR($this->app->erp->GetSaldoDokument($id,'rechnung')['betrag']); - $this->app->Tpl->Set('ISTDB',$ist); - + if($schreibschutz=="1" && $this->app->erp->RechteVorhanden('rechnung','schreibschutz')) { $this->app->Tpl->Set('MESSAGE',"
Diese Rechnung ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! 
"); @@ -1756,15 +1758,20 @@ class Rechnung extends GenRechnung $this->app->erp->CommonReadonly(); } + if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('rechnung','manuellbezahltmarkiert') && $zahlungsstatus=="offen") + { + $this->app->erp->RemoveReadonly('bezahlt_am'); + $this->app->erp->RemoveReadonly('zahlbetrag'); + $this->app->erp->RemoveReadonly('zahlungsstatus'); + } + if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen')) { $this->app->erp->RemoveReadonly('mahnwesen_datum'); $this->app->erp->RemoveReadonly('mahnwesen_gesperrt'); $this->app->erp->RemoveReadonly('mahnwesen_internebemerkung'); - $this->app->erp->RemoveReadonly('zahlungsstatus'); $this->app->erp->RemoveReadonly('mahnwesenfestsetzen'); $this->app->erp->RemoveReadonly('mahnwesen'); - $this->app->erp->RemoveReadonly('bezahlt_am'); /* 'ist' should not be edited manually @@ -1795,9 +1802,9 @@ class Rechnung extends GenRechnung if($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen')) { - $mahnwesen_datum = $this->app->Secure->GetPOST('mahnwesen_datum'); $bezahlt_am = $this->app->Secure->GetPOST('bezahlt_am'); + $zahlbetrag = $this->app->Secure->GetPOST('zahlbetrag'); $mahnwesen_gesperrt = $this->app->Secure->GetPOST('mahnwesen_gesperrt'); $mahnwesen_internebemerkung = $this->app->Secure->GetPOST('mahnwesen_internebemerkung'); $zahlungsstatus = $this->app->Secure->GetPOST('zahlungsstatus'); @@ -1823,14 +1830,77 @@ class Rechnung extends GenRechnung /* if($mahnwesenfestsetzen=='1') {*/ - $this->app->DB->Update("UPDATE rechnung SET mahnwesen_internebemerkung='$mahnwesen_internebemerkung',zahlungsstatus='$zahlungsstatus',versendet_mahnwesen='$versendet', - mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum', mahnwesenfestsetzen='$mahnwesenfestsetzen',internebemerkung='$internebemerkung', - mahnwesen='$mahnwesen',skonto_gegeben='$skonto_gegeben',bezahlt_am='$bezahlt_am' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update(" + UPDATE rechnung SET + mahnwesen_internebemerkung='$mahnwesen_internebemerkung', + zahlungsstatus='$zahlungsstatus', + versendet_mahnwesen='$versendet', + mahnwesen_gesperrt='$mahnwesen_gesperrt', + mahnwesen_datum='$mahnwesen_datum', + mahnwesenfestsetzen='$mahnwesenfestsetzen', + internebemerkung='$internebemerkung' + WHERE id='$id' LIMIT 1"); /* } else { $this->app->DB->Update("UPDATE rechnung SET mahnwesen='$mahnwesen', mahnwesenfestsetzen='$mahnwesenfestsetzen', mahnwesen_internebemerkung='$mahnwesen_internebemerkung', mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum' WHERE id='$id' LIMIT 1"); }*/ } + if ($zahlungsstatus == 'bezahlt') { + $this->app->Tpl->Set('SCHNELLEINGABE_HIDDEN', 'hidden'); + $this->app->Tpl->Set('SCHNELLEINGABE_TOOLTIP_HIDDEN', 'hidden'); + } + + $saldo = $this->app->erp->GetSaldoDokument($id,'rechnung'); + if (empty($saldo)) { + $this->app->Tpl->Set('SCHNELLEINGABE_HIDDEN', 'hidden'); + $this->app->Tpl->Set('SCHNELLEINGABE_TOOLTIP_HIDDEN', 'hidden'); + } else { + $ist = $this->app->erp->EUR($saldo['betrag']); + $this->app->Tpl->Set('ISTDB',$ist); + if ($ist > $soll) { + $this->app->Tpl->addMessage('error','Rechnung ist überzahlt!'); + } + } + + $rechnung_schnelleingabe_konto = $this->app->erp->Firmendaten('rechnung_schnelleingabe_konto'); + + if (!empty($rechnung_schnelleingabe_konto)) { + $this->app->Tpl->Set('SCHNELLEINGABE_TOOLTIP_HIDDEN', 'hidden'); + if ($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','manuellbezahltmarkiert') && !empty($zahlbetrag)) { + if ($bezahlt_am == '0000-00-00') { + $bezahlt_am = date('Y-m-d'); + } + $sql = " + INSERT INTO kontoauszuege + ( + konto, + buchung, + importdatum, + buchungstext, + soll, + waehrung, + bearbeiter + ) + VALUES + ( + $rechnung_schnelleingabe_konto, + '$bezahlt_am', + '".date("Y-m-d")."', + 'Rechnung ".$nummer." Schnelleingabe', + $zahlbetrag, + 'EUR', + '".$this->app->User->GetName()."' + ) + "; + $this->app->DB->Insert($sql); + $kontoauszug = $this->app->DB->GetInsertID(); + $this->app->erp->fibu_buchungen_buchen("kontoauszuege",$kontoauszug, "rechnung", $id, -$zahlbetrag, 'EUR', $bezahlt_am, "Rechnung ".$nummer." Schnelleingabe"); + $this->rechnung_zahlstatus_berechnen($id); + } + } else { + $this->app->Tpl->Set('SCHNELLEINGABE_HIDDEN', 'hidden'); + } + if($status=='') $this->app->DB->Update("UPDATE rechnung SET status='angelegt' WHERE id='$id' LIMIT 1"); @@ -2749,9 +2819,14 @@ class Rechnung extends GenRechnung * Recalculate the payments status with skonto */ - function rechnung_zahlstatus_berechnen() { + function rechnung_zahlstatus_berechnen($rechnung_id = null) { // START RECALCULATE $this->app->erp->fibu_rebuild_tables(); + + if (!empty($rechnung_id)) { + $condition = " AND id = '".$rechnung_id."'"; + } + $offene_rechnungen = $this->app->DB->SelectArr(" SELECT id, soll, @@ -2768,9 +2843,9 @@ class Rechnung extends GenRechnung rechnung WHERE belegnr <> '' AND zahlungsstatus = 'offen' - "); + ".$condition); - foreach ($offene_rechnungen as $offene_rechnung) { + foreach ($offene_rechnungen as $offene_rechnung) { $saldo = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung'); if (!empty($saldo)) { if ($saldo['waehrung'] == $offene_rechnung['waehrung']) { @@ -2781,12 +2856,13 @@ class Rechnung extends GenRechnung // Check overall value if ($saldo['betrag'] == 0) { // ok -> will be marked as paid - } else if ($skontorelevante_zahlungen >= $offene_rechnung['skontosoll']) { + } else if (abs($skontorelevante_zahlungen-$offene_rechnung['skontosoll']) <= 0.01) { // 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'],date('Y-m-d'),''); + if (!empty($sachkonto)) { + $this->app->erp->fibu_buchungen_buchen('rechnung',$offene_rechnung['id'],'kontorahmen',$sachkonto,$offene_rechnung['soll']-$skontorelevante_zahlungen,$offene_rechnung['waehrung'],date('Y-m-d'),''); $offene_rechnung['ist'] = $offene_rechnung['soll']; + $saldo['betrag'] = 0; } else { } } else if ($offene_rechnung['faellig']) { @@ -2800,7 +2876,7 @@ class Rechnung extends GenRechnung SET ist = ".$saldo['betrag']."+soll, zahlungsstatus = IF(".$saldo['betrag']." = 0,'bezahlt','offen') - WHERE id=".$offene_rechnung['id']; + WHERE id=".$offene_rechnung['id']; $this->app->DB->Update($sql); } } diff --git a/www/widgets/_gen/widget.gen.rechnung.php b/www/widgets/_gen/widget.gen.rechnung.php index 0f20817b..d4f198d4 100644 --- a/www/widgets/_gen/widget.gen.rechnung.php +++ b/www/widgets/_gen/widget.gen.rechnung.php @@ -125,6 +125,9 @@ class WidgetGenrechnung $field = new HTMLInput("bezahlt_am","text","","10","","","","","","","","0","",""); $this->form->NewField($field); + $field = new HTMLInput("zahlbetrag","money","","10","","","","","","","","0","",""); + $this->form->NewField($field); + $field = new HTMLInput("ist","text","","10","","","","","","","","0","",""); $this->form->NewField($field); diff --git a/www/widgets/templates/_gen/rechnung.tpl b/www/widgets/templates/_gen/rechnung.tpl index d6ec54ff..2745e0b3 100644 --- a/www/widgets/templates/_gen/rechnung.tpl +++ b/www/widgets/templates/_gen/rechnung.tpl @@ -104,7 +104,9 @@
[MAHNWESENIF]
- {|Zahlungsstatus|} + + {|Zahlungsstatus|}  + @@ -119,15 +121,23 @@ - + + + + - @@ -135,6 +145,23 @@
{|Zahlungsstatus|}: {|SOLL|}: + [SOLL]
+ {|SKONTOSOLL|}: + + [SKONTOSOLL] +
{|FEHLT|}: + [ISTDB]
+
+
+ {|Schnelleingabe|} + + + + + + + + + +
{|Bezahlt am|}:[BEZAHLT_AM][MSGBEZAHLT_AM] +
{|Zahlbetrag|}:[ZAHLBETRAG][MSGZAHLBETRAG]
+
+
+ {|Mahnwesen|} diff --git a/www/widgets/widget.rechnung.php b/www/widgets/widget.rechnung.php index 01142b8b..26acf279 100644 --- a/www/widgets/widget.rechnung.php +++ b/www/widgets/widget.rechnung.php @@ -84,6 +84,7 @@ class WidgetRechnung extends WidgetGenRechnung $this->app->erp->AnzeigeAbweichendeBezeichnung("rechnung"); $this->form->ReplaceFunction("ist",$this,"ReplaceDecimal"); + $this->form->ReplaceFunction("zahlbetrag",$this,"ReplaceDecimal"); $this->form->ReplaceFunction("kurs",$this,"ReplaceBetrag"); $this->form->ReplaceFunction("skonto_gegeben",$this,"ReplaceDecimal");
{|Mahnstufe|}: