mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-14 20:17:14 +01:00
rechnung calculate payment status with skonto
This commit is contained in:
parent
06686a6020
commit
73725a31bb
@ -6576,7 +6576,7 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
|
|||||||
r.zahlungsweise as zahlungsweise,
|
r.zahlungsweise as zahlungsweise,
|
||||||
FORMAT(r.soll,2{$extended_mysql55} ) as soll,
|
FORMAT(r.soll,2{$extended_mysql55} ) as soll,
|
||||||
ifnull(r.waehrung,'EUR'),
|
ifnull(r.waehrung,'EUR'),
|
||||||
if(r.soll-r.ist=0 AND r.ist > 0 AND r.zahlungsstatus!='bezahlt','teilbezahlt',r.zahlungsstatus) as zahlung,
|
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.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,
|
if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status,
|
||||||
".(!empty($zusatzcols)?implode(', ',$zusatzcols).',':'')."
|
".(!empty($zusatzcols)?implode(', ',$zusatzcols).',':'')."
|
||||||
|
@ -13780,6 +13780,19 @@ function SendPaypalFromAuftrag($auftrag, $test = false)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ReplaceKontorahmen($db,$value,$fromform = null) {
|
||||||
|
$value = $this->app->DB->real_escape_string($value);
|
||||||
|
|
||||||
|
if ($db) {
|
||||||
|
$sachkonto = explode(' ',$value)[0];
|
||||||
|
$kontoid = $this->app->DB->Select("SELECT id FROM kontorahmen WHERE sachkonto = '$sachkonto' LIMIT 1");
|
||||||
|
return($kontoid);
|
||||||
|
} else {
|
||||||
|
$sachkonto = $this->app->DB->Select("SELECT CONCAT(sachkonto,' ',beschriftung) FROM kontorahmen WHERE id = '$value' LIMIT 1");
|
||||||
|
return($sachkonto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// @refactor FormHelper Komponente
|
// @refactor FormHelper Komponente
|
||||||
function ReplaceLieferant($db,$value,$fromform)
|
function ReplaceLieferant($db,$value,$fromform)
|
||||||
{
|
{
|
||||||
@ -36033,7 +36046,7 @@ function Firmendaten($field,$projekt="")
|
|||||||
* Auftrag: gesamtsumme, rechnung: soll, gutschrift: soll verbindlichkeit: betrag
|
* Auftrag: gesamtsumme, rechnung: soll, gutschrift: soll verbindlichkeit: betrag
|
||||||
* returns array(betrag, waehrung) or empty array if multiple
|
* returns array(betrag, waehrung) or empty array if multiple
|
||||||
*/
|
*/
|
||||||
public function GetSaldoDokument(int $id, string $type) : array {
|
public function GetSaldoDokument(int $id, string $type, string $buchungsart = '', string $datum_bis = '') : array {
|
||||||
|
|
||||||
$sql = "
|
$sql = "
|
||||||
SELECT
|
SELECT
|
||||||
@ -36042,10 +36055,15 @@ function Firmendaten($field,$projekt="")
|
|||||||
FROM
|
FROM
|
||||||
fibu_buchungen_alle
|
fibu_buchungen_alle
|
||||||
WHERE
|
WHERE
|
||||||
typ = '".$type."' AND id = ".$id."
|
typ = '".$type."'
|
||||||
|
AND
|
||||||
|
id = ".$id."
|
||||||
|
AND
|
||||||
|
(buchungsart = '".$buchungsart."' OR '".$buchungsart."' = '')
|
||||||
|
AND
|
||||||
|
(datum <= '".$datum_bis."' OR '".$datum_bis."' = '')
|
||||||
GROUP BY
|
GROUP BY
|
||||||
waehrung";
|
waehrung";
|
||||||
|
|
||||||
$result = $this->app->DB->SelectArr($sql);
|
$result = $this->app->DB->SelectArr($sql);
|
||||||
|
|
||||||
if (!empty($result)) {
|
if (!empty($result)) {
|
||||||
@ -36067,6 +36085,16 @@ function Firmendaten($field,$projekt="")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Refresh fibu buchung_alle tables
|
||||||
|
* using module fibu_buchungen
|
||||||
|
*/
|
||||||
|
public function fibu_rebuild_tables() {
|
||||||
|
$fibu_buchungen = $this->app->loadModule('fibu_buchungen', false);
|
||||||
|
if($fibu_buchungen !== null && method_exists($fibu_buchungen, 'fibu_buchungen_buchen')) {
|
||||||
|
return $fibu_buchungen->fibu_rebuild_tables();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function ANABREGSNeuberechnen($id,$art,$force=false)
|
public function ANABREGSNeuberechnen($id,$art,$force=false)
|
||||||
{
|
{
|
||||||
|
@ -1109,7 +1109,10 @@
|
|||||||
<legend>{|Finanzbuchhaltung Einstellungen|}</legend>
|
<legend>{|Finanzbuchhaltung Einstellungen|}</legend>
|
||||||
<table width="100%">
|
<table width="100%">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="300">Buchungen erzeugen ab Datum:</td><td colspan="3"><input type="text" id= "fibu_buchungen_startdatum" name="fibu_buchungen_startdatum" size="10" value="[FIBU_BUCHUNGEN_STARTDATUM]"></td>
|
<td width="300">Buchungen erzeugen ab Datum:</td><td colspan="3"><input type="text" id= "fibu_buchungen_startdatum" name="fibu_buchungen_startdatum" size="10" value="[FIBU_BUCHUNGEN_STARTDATUM]"><i>Für die Nutzung mit dem Modul Buchhaltung-Buchungen (Zahlungseingang, Zahlungsstatus, Mahnwesen)</i></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="300">Konto für Rechnung-Skontobuchungen:</td><td colspan="3"><input type="text" id= "rechnung_skonto_kontorahmen" name="rechnung_skonto_kontorahmen" size="10" value="[RECHNUNG_SKONTO_KONTORAHMEN]"><i>Auf dieses Sachkonto werden Skontobuchungen mithilfe der Funktion "Zahlungsstatus berechnen" im Rechnungsmodul gebucht</i></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
@ -39,9 +39,13 @@
|
|||||||
<label for="rechnungenstorniert">{|Storniert|}</label>
|
<label for="rechnungenstorniert">{|Storniert|}</label>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
<form method="post" action="#">
|
||||||
|
<input type="submit" class="btnBlue" name="zahlungsstatus_berechnen" value="{|Zahlungsstatus berechnen|}" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
[MESSAGE]
|
[MESSAGE]
|
||||||
<form method="post" action="#">
|
<form method="post" action="#">
|
||||||
[TAB1]
|
[TAB1]
|
||||||
|
@ -1043,7 +1043,7 @@ class Firmendaten {
|
|||||||
'arbeitsnachweis_header','arbeitsnachweis_footer','provisionsgutschrift_header','provisionsgutschrift_footer','proformarechnung_header','proformarechnung_footer','eu_lieferung_vermerk','export_lieferung_vermerk'
|
'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'
|
,'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'
|
,'firmenfarbe','name','strasse','plz','ort','steuernummer','projekt','steuer_positionen_export','tabsnavigationfarbe','tabsnavigationfarbeschrift'
|
||||||
,"buchhaltung_berater","buchhaltung_mandant","buchhaltung_wj_beginn","buchhaltung_sachkontenlaenge", "fibu_buchungen_startdatum"
|
,"buchhaltung_berater","buchhaltung_mandant","buchhaltung_wj_beginn","buchhaltung_sachkontenlaenge", "fibu_buchungen_startdatum", "rechnung_skonto_kontorahmen"
|
||||||
);
|
);
|
||||||
|
|
||||||
if(isset($sql2a)){
|
if(isset($sql2a)){
|
||||||
@ -1380,9 +1380,10 @@ class Firmendaten {
|
|||||||
$this->app->YUI->AutoComplete('steuersatz_normal','steuersatz',1);
|
$this->app->YUI->AutoComplete('steuersatz_normal','steuersatz',1);
|
||||||
$this->app->YUI->AutoComplete('steuersatz_ermaessigt','steuersatz',1);
|
$this->app->YUI->AutoComplete('steuersatz_ermaessigt','steuersatz',1);
|
||||||
|
|
||||||
|
|
||||||
$this->app->YUI->DatePicker('fibu_buchungen_startdatum');
|
$this->app->YUI->DatePicker('fibu_buchungen_startdatum');
|
||||||
|
|
||||||
|
$this->app->YUI->AutoComplete('rechnung_skonto_kontorahmen', 'sachkonto');
|
||||||
|
|
||||||
$this->app->Tpl->Parse('PAGE','firmendaten.tpl');
|
$this->app->Tpl->Parse('PAGE','firmendaten.tpl');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1849,6 +1850,7 @@ class Firmendaten {
|
|||||||
|
|
||||||
// Fibu
|
// Fibu
|
||||||
$this->app->Tpl->Set('FIBU_BUCHUNGEN_STARTDATUM', $this->app->erp->ReplaceDatum(false,$data[0]['fibu_buchungen_startdatum'],false));
|
$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']));
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -2292,7 +2294,8 @@ class Firmendaten {
|
|||||||
$data['buchhaltung_sachkontenlaenge'] = ($this->app->Secure->POST["buchhaltung_sachkontenlaenge"]);
|
$data['buchhaltung_sachkontenlaenge'] = ($this->app->Secure->POST["buchhaltung_sachkontenlaenge"]);
|
||||||
|
|
||||||
$data['fibu_buchungen_startdatum'] = $this->app->erp->ReplaceDatum(true,$this->app->Secure->POST["fibu_buchungen_startdatum"],false);
|
$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"]);
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,13 +236,6 @@ class Rechnung extends GenRechnung
|
|||||||
$this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg");
|
$this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg");
|
||||||
}
|
}
|
||||||
|
|
||||||
function RechnungMahnwesen()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function RechnungLastschriftWdh()
|
function RechnungLastschriftWdh()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -2243,29 +2236,72 @@ class Rechnung extends GenRechnung
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} // ende ausfuehren
|
||||||
|
|
||||||
|
if($this->app->Secure->GetPOST('zahlungsstatus_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) {
|
||||||
|
|
||||||
|
// START RECALCULATE
|
||||||
|
$this->app->erp->fibu_rebuild_tables();
|
||||||
|
$offene_rechnungen = $this->app->DB->SelectArr(" SELECT
|
||||||
|
id,
|
||||||
|
soll,
|
||||||
|
waehrung,
|
||||||
|
datum,
|
||||||
|
zahlungszieltage,
|
||||||
|
DATE_ADD(datum, INTERVAL zahlungszieltage DAY) as zieldatum,
|
||||||
|
CURRENT_DATE > DATE_ADD(datum, INTERVAL zahlungszieltage DAY) as faellig,
|
||||||
|
zahlungszielskonto,
|
||||||
|
TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll,
|
||||||
|
zahlungszieltageskonto,
|
||||||
|
DATE_ADD(datum, INTERVAL zahlungszieltageskonto DAY) as zieldatumskonto
|
||||||
|
FROM
|
||||||
|
rechnung
|
||||||
|
WHERE
|
||||||
|
belegnr <> ''
|
||||||
|
");
|
||||||
|
|
||||||
|
foreach ($offene_rechnungen as $offene_rechnung) {
|
||||||
|
$saldo = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung');
|
||||||
|
if (!empty($saldo)) {
|
||||||
|
if ($saldo['waehrung'] == $offene_rechnung['waehrung']) {
|
||||||
|
$offene_rechnung['ist'] = $offene_rechnung['soll']+$saldo['betrag'];
|
||||||
|
// Check for skonto
|
||||||
|
$skontorelevante_zahlungen = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung','zubuchung',$offene_rechnung['zieldatumskonto'])['betrag'];
|
||||||
|
$zielkonforme_zahlungen = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung','zubuchung',$offene_rechnung['zieldatum'])['betrag'];
|
||||||
|
// Check overall value
|
||||||
|
if ($saldo['betrag'] == 0) {
|
||||||
|
// ok -> will be marked as paid
|
||||||
|
} else if ($skontorelevante_zahlungen >= $offene_rechnung['skontosoll']) {
|
||||||
|
// 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','');
|
||||||
|
$offene_rechnung['ist'] = $offene_rechnung['soll'];
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
} else if ($offene_rechnung['faellig']) {
|
||||||
|
// Overdue
|
||||||
|
} else {
|
||||||
|
// Not due
|
||||||
|
}
|
||||||
|
// Update rechnung
|
||||||
|
$sql = "UPDATE
|
||||||
|
rechnung
|
||||||
|
SET
|
||||||
|
ist = ".$saldo['betrag']."+soll,
|
||||||
|
zahlungsstatus = IF(".$saldo['betrag']." = 0,'bezahlt','offen')
|
||||||
|
WHERE id=".$offene_rechnung['id'];
|
||||||
|
$this->app->DB->Update($sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->app->DB->Update("UPDATE rechnung SET ist = null WHERE id=".$offene_rechnung['id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->app->erp->fibu_rebuild_tables();
|
||||||
|
// END RECALCULATE
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// refresh all open items
|
|
||||||
$openids = $this->app->DB->SelectArr("SELECT id, waehrung from rechnung WHERE zahlungsstatus = 'offen'");
|
|
||||||
|
|
||||||
foreach ($openids as $openid) {
|
|
||||||
$saldo = $this->app->erp->GetSaldoDokument($openid['id'],'rechnung');
|
|
||||||
|
|
||||||
if (!empty($saldo)) {
|
|
||||||
if ($saldo['waehrung'] == $openid['waehrung']) {
|
|
||||||
$sql = "UPDATE
|
|
||||||
rechnung
|
|
||||||
SET
|
|
||||||
ist = ".$saldo['betrag']."+soll,
|
|
||||||
zahlungsstatus = IF(".$saldo['betrag']." = 0,'bezahlt','offen')
|
|
||||||
WHERE id=".$openid['id'];
|
|
||||||
$this->app->DB->Update($sql);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$this->app->DB->Update("UPDATE rechnung SET ist = null WHERE id=".$openid['id']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->app->Tpl->Set('UEBERSCHRIFT','Rechnungen');
|
$this->app->Tpl->Set('UEBERSCHRIFT','Rechnungen');
|
||||||
|
|
||||||
@ -2274,7 +2310,6 @@ class Rechnung extends GenRechnung
|
|||||||
|
|
||||||
$this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Übersicht');
|
$this->app->erp->MenuEintrag('index.php?module=rechnung&action=list','Übersicht');
|
||||||
$this->app->erp->MenuEintrag('index.php?module=rechnung&action=create','Neue Rechnung anlegen');
|
$this->app->erp->MenuEintrag('index.php?module=rechnung&action=create','Neue Rechnung anlegen');
|
||||||
|
|
||||||
if(strlen($backurl)>5){
|
if(strlen($backurl)>5){
|
||||||
$this->app->erp->MenuEintrag("$backurl", 'Zurück');
|
$this->app->erp->MenuEintrag("$backurl", 'Zurück');
|
||||||
}
|
}
|
||||||
@ -2765,4 +2800,6 @@ class Rechnung extends GenRechnung
|
|||||||
return($et->DisplayNew('return',""));
|
return($et->DisplayNew('return',""));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user