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,
|
||||
FORMAT(r.soll,2{$extended_mysql55} ) as soll,
|
||||
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.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status,
|
||||
".(!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
|
||||
function ReplaceLieferant($db,$value,$fromform)
|
||||
{
|
||||
@ -36033,7 +36046,7 @@ function Firmendaten($field,$projekt="")
|
||||
* Auftrag: gesamtsumme, rechnung: soll, gutschrift: soll verbindlichkeit: betrag
|
||||
* 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 = "
|
||||
SELECT
|
||||
@ -36042,10 +36055,15 @@ function Firmendaten($field,$projekt="")
|
||||
FROM
|
||||
fibu_buchungen_alle
|
||||
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
|
||||
waehrung";
|
||||
|
||||
$result = $this->app->DB->SelectArr($sql);
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -1109,7 +1109,10 @@
|
||||
<legend>{|Finanzbuchhaltung Einstellungen|}</legend>
|
||||
<table width="100%">
|
||||
<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>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
@ -39,9 +39,13 @@
|
||||
<label for="rechnungenstorniert">{|Storniert|}</label>
|
||||
</li>
|
||||
</ul>
|
||||
<form method="post" action="#">
|
||||
<input type="submit" class="btnBlue" name="zahlungsstatus_berechnen" value="{|Zahlungsstatus berechnen|}" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
[MESSAGE]
|
||||
<form method="post" action="#">
|
||||
[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'
|
||||
,'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"
|
||||
,"buchhaltung_berater","buchhaltung_mandant","buchhaltung_wj_beginn","buchhaltung_sachkontenlaenge", "fibu_buchungen_startdatum", "rechnung_skonto_kontorahmen"
|
||||
);
|
||||
|
||||
if(isset($sql2a)){
|
||||
@ -1380,9 +1380,10 @@ class Firmendaten {
|
||||
$this->app->YUI->AutoComplete('steuersatz_normal','steuersatz',1);
|
||||
$this->app->YUI->AutoComplete('steuersatz_ermaessigt','steuersatz',1);
|
||||
|
||||
|
||||
$this->app->YUI->DatePicker('fibu_buchungen_startdatum');
|
||||
|
||||
$this->app->YUI->AutoComplete('rechnung_skonto_kontorahmen', 'sachkonto');
|
||||
|
||||
$this->app->Tpl->Parse('PAGE','firmendaten.tpl');
|
||||
}
|
||||
|
||||
@ -1849,6 +1850,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']));
|
||||
|
||||
|
||||
}
|
||||
@ -2292,6 +2294,7 @@ class Firmendaten {
|
||||
$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['rechnung_skonto_kontorahmen'] = $this->app->erp->ReplaceKontorahmen(true,$this->app->Secure->POST["rechnung_skonto_kontorahmen"]);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
@ -236,13 +236,6 @@ class Rechnung extends GenRechnung
|
||||
$this->app->Location->execute("index.php?module=rechnung&action=edit&id=$id&msg=$msg");
|
||||
}
|
||||
|
||||
function RechnungMahnwesen()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function RechnungLastschriftWdh()
|
||||
{
|
||||
|
||||
@ -2243,29 +2236,72 @@ class Rechnung extends GenRechnung
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} // ende ausfuehren
|
||||
|
||||
// refresh all open items
|
||||
$openids = $this->app->DB->SelectArr("SELECT id, waehrung from rechnung WHERE zahlungsstatus = 'offen'");
|
||||
if($this->app->Secure->GetPOST('zahlungsstatus_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) {
|
||||
|
||||
foreach ($openids as $openid) {
|
||||
$saldo = $this->app->erp->GetSaldoDokument($openid['id'],'rechnung');
|
||||
// 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'] == $openid['waehrung']) {
|
||||
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=".$openid['id'];
|
||||
WHERE id=".$offene_rechnung['id'];
|
||||
$this->app->DB->Update($sql);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->app->DB->Update("UPDATE rechnung SET ist = null WHERE id=".$openid['id']);
|
||||
$this->app->DB->Update("UPDATE rechnung SET ist = null WHERE id=".$offene_rechnung['id']);
|
||||
}
|
||||
}
|
||||
$this->app->erp->fibu_rebuild_tables();
|
||||
// END RECALCULATE
|
||||
|
||||
}
|
||||
|
||||
$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=create','Neue Rechnung anlegen');
|
||||
|
||||
if(strlen($backurl)>5){
|
||||
$this->app->erp->MenuEintrag("$backurl", 'Zurück');
|
||||
}
|
||||
@ -2765,4 +2800,6 @@ class Rechnung extends GenRechnung
|
||||
return($et->DisplayNew('return',""));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user