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/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 @@
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/rechnung.php b/www/pages/rechnung.php
index 4e423c12..623160f4 100644
--- a/www/pages/rechnung.php
+++ b/www/pages/rechnung.php
@@ -1613,18 +1613,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')
@@ -1743,10 +1743,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 +1753,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 +1797,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 +1825,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 +2814,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 +2838,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 +2851,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 +2871,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..08ce1829 100644
--- a/www/widgets/templates/_gen/rechnung.tpl
+++ b/www/widgets/templates/_gen/rechnung.tpl
@@ -104,7 +104,9 @@
[MAHNWESENIF]
+
+