fibu_buchungen single with sachkonto

This commit is contained in:
OpenXE 2023-04-11 16:51:42 +02:00
parent 170a33687f
commit a43ac720b6
4 changed files with 112 additions and 40 deletions

View File

@ -45,7 +45,7 @@
{|Betrag|}: {|Betrag|}:
</td> </td>
<td> <td>
<input type="text" name="betrag" id="betrag" value="[BETRAG]" size="20"> <input type="numeric" name="betrag" id="betrag" value="[BETRAG]" size="20">
</td> </td>
</tr> </tr>
<tr> <tr>
@ -66,10 +66,10 @@
</tr> </tr>
<tr> <tr>
<td> <td>
{|Zeit|}: {|Datum|}:
</td> </td>
<td> <td>
[ZEIT] <input type="text" name="datum" id="datum" value="[DATUM]" size="20">
</td> </td>
</tr> </tr>
<tr> <tr>

View File

@ -24,16 +24,28 @@
<fieldset> <fieldset>
<table> <table>
<legend>Stapelverarbeitung</legend> <legend>Stapelverarbeitung</legend>
<tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;Alle markieren&nbsp;</td>
</tr>
<tr> <tr>
<td><input type="checkbox" value="1" name="override" form="buchungenform" />&nbsp;Mit Abweichung buchen&nbsp;</td> <td><input type="checkbox" value="1" name="override" form="buchungenform" />&nbsp;Mit Abweichung buchen&nbsp;</td>
</tr> </tr>
<tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;
<select form="buchungenform" id="sel_aktion" name="sel_aktion">
<option value="buchen">{|auf Ausgew&auml;hlte buchen|}</option>
<option value="buchen_diff_sachkonto">{|auf Ausgew&auml;hlte buchen, Gegenbeleg auf Sachkonto ausgleichen|}</option>
</select>&nbsp;
<input type="text" form="buchungenform" id="sachkonto" name="sachkonto" value="">
<button name="submit" form="buchungenform" value="BUCHEN" class="ui-button-icon">{|BUCHEN|}</button>
</td>
</tr>
<tr>
<form action="" method="post"> <form action="" method="post">
<td><button name="submit" value="neuberechnen" class="ui-button-icon" style="width:100%;">{|Buchungen neu berechnen|}</button></td></tr> <td>
<button name="submit" value="neuberechnen" class="ui-button-icon" style="width:100%;">
{|Buchungen neu berechnen|}
</button>
</td>
</form> </form>
<td><button name="submit" form = "buchungenform" value="BUCHEN" class="ui-button-icon" style="width:100%;">{|Markierte BUCHEN|}</button></td></tr> </tr>
</table> </table>
</fieldset> </fieldset>
</div> </div>

View File

@ -42,10 +42,9 @@
<tr> <tr>
<td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp; <td><input type="checkbox" value="1" id="autoalle" />&nbsp;alle markieren&nbsp;
<select form="buchungenform" id="sel_aktion" name="sel_aktion"> <select form="buchungenform" id="sel_aktion" name="sel_aktion">
<option value="">{|bitte w&auml;hlen|} ...</option>
<option value="vorschlag">{|auf Vorschl&auml;ge buchen|}</option> <option value="vorschlag">{|auf Vorschl&auml;ge buchen|}</option>
<option value="vorschlag_diff_sachkonto">{|auf Vorschl&auml;ge buchen, Gegenbeleg auf Sachkonto ausgleichen|}</option>
<option value="sachkonto">{|auf Sachkonto buchen|}</option> <option value="sachkonto">{|auf Sachkonto buchen|}</option>
<option value="vorschlag_diff_sachkonto">{|auf Vorschl&auml;ge buchen, Differenz auf Sachkonto|}</option>
</select>&nbsp; </select>&nbsp;
<input type="text" form="buchungenform" id="sachkonto" name="sachkonto" value=""> <input type="text" form="buchungenform" id="sachkonto" name="sachkonto" value="">
<button name="submit" form="buchungenform" value="BUCHEN" class="ui-button-icon">{|BUCHEN|}</button> <button name="submit" form="buchungenform" value="BUCHEN" class="ui-button-icon">{|BUCHEN|}</button>

View File

@ -142,11 +142,11 @@ class Fibu_buchungen {
case "fibu_buchungen_wahl": case "fibu_buchungen_wahl":
$allowed['fibu_buchungen_wahl'] = array('list'); $allowed['fibu_buchungen_wahl'] = array('list');
$heading = array('', '', 'Datum', 'Typ', 'Beleg', 'Von','Nach', 'Men&uuml;'); $heading = array('', '', 'Datum', 'Typ', 'Info', 'Von','Nach', 'Men&uuml;');
$width = array( '1%','1%','1%', '20%', '80%', '1%', '1%', '%1' ); $width = array( '1%','1%','1%', '20%', '80%', '1%', '1%', '%1' );
$findcols = array('f.id','f.id','f.typ'); $findcols = array('f.id','f.id','f.datum','f.typ','f.info','f.id','f.id','f.id');
$searchsql = array('f.buchungsart', 'f.typ', 'f.datum', 'f.doc_typ', 'f.doc_info'); $searchsql = array('f.typ','f.info', 'f.datum', 'f.parent_typ', 'f.parent_info');
$defaultorder = 1; $defaultorder = 1;
$defaultorderdesc = 0; $defaultorderdesc = 0;
@ -175,7 +175,7 @@ class Fibu_buchungen {
"; ";
$where = "1"; $where = "1";
$count = "SELECT count(DISTINCT id) FROM fibu_buchungen_alle WHERE $where"; $count = "SELECT count(id) FROM fibu_objekte";
// $groupby = ""; // $groupby = "";
break; break;
@ -465,10 +465,10 @@ class Fibu_buchungen {
$werte = array ( $werte = array (
'<input type="number" step="0.01" name="werte[]" value="', '<input type="number" step="0.01" name="werte[]" value="',
['sql' => 'COALESCE(-SUM(fba.betrag),0)'], ['sql' => 'COALESCE(-SUM(fba.betrag),0)'],
'" min="', /* '" min="',
['sql' => 'if(COALESCE(-SUM(fba.betrag),0) < 0,COALESCE(-SUM(fba.betrag),0),0)'], ['sql' => 'if(COALESCE(-SUM(fba.betrag),0) < 0,COALESCE(-SUM(fba.betrag),0),0)'],
'" max="', '" max="',
['sql' => 'if(COALESCE(-SUM(fba.betrag),0) < 0,0,COALESCE(-SUM(fba.betrag),0))'], ['sql' => 'if(COALESCE(-SUM(fba.betrag),0) < 0,0,COALESCE(-SUM(fba.betrag),0))'],*/
'"/>' '"/>'
); );
@ -616,10 +616,14 @@ class Fibu_buchungen {
$input['benutzer'] = $this->app->User->GetId(); $input['benutzer'] = $this->app->User->GetId();
$input['zeit'] = date("Y-m-d H:i"); $input['zeit'] = date("Y-m-d H:i");
$input['betrag'] = $this->app->erp->ReplaceBetrag(true,$input['betrag']); $input['betrag'] = $this->app->erp->ReplaceBetrag(true,$input['betrag']);
$input['zeit'] = date("Y-m-d H:i");
$input['internebemerkung'] = $this->app->DB->real_escape_string($input['internebemerkung']); $input['internebemerkung'] = $this->app->DB->real_escape_string($input['internebemerkung']);
if (empty($input['datum'])) {
$input['datum'] = date("Y-m-d");
} else {
$input['datum'] = $this->app->erp->ReplaceDatum(true,$input['datum'],true);
}
$columns = "id, "; $columns = "id, ";
$values = "$id, "; $values = "$id, ";
$update = ""; $update = "";
@ -663,6 +667,7 @@ class Fibu_buchungen {
".$this->app->erp->FormatDateTime('f.zeit','zeit').", ".$this->app->erp->FormatDateTime('f.zeit','zeit').",
f.internebemerkung, f.internebemerkung,
f.id, f.id,
".$this->app->erp->FormatDate('f.datum','datum').",
fvon.info AS von_info, fvon.info AS von_info,
fnach.info AS nach_info fnach.info AS nach_info
FROM FROM
@ -712,6 +717,9 @@ class Fibu_buchungen {
$this->app->Tpl->Set('WAEHRUNG',$this->app->erp->getSelectAsso($this->app->erp->GetWaehrung(), $result[0]['waehrung_von'])); $this->app->Tpl->Set('WAEHRUNG',$this->app->erp->getSelectAsso($this->app->erp->GetWaehrung(), $result[0]['waehrung_von']));
$this->app->YUI->DatePicker("datum");
$this->app->Tpl->Set('DATUM',$this->app->erp->ReplaceDatum(false,$result[0]['datum'],true));
$this->app->YUI->TableSearch('TAB1', 'fibu_buchungen_wahl', "show", "", "", basename(__FILE__), __CLASS__); $this->app->YUI->TableSearch('TAB1', 'fibu_buchungen_wahl', "show", "", "", basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE', "fibu_buchungen_edit.tpl"); $this->app->Tpl->Parse('PAGE', "fibu_buchungen_edit.tpl");
@ -731,7 +739,7 @@ class Fibu_buchungen {
$input['betrag'] = $this->app->Secure->GetPOST('betrag'); $input['betrag'] = $this->app->Secure->GetPOST('betrag');
$input['waehrung'] = $this->app->Secure->GetPOST('waehrung'); $input['waehrung'] = $this->app->Secure->GetPOST('waehrung');
$input['benutzer'] = $this->app->Secure->GetPOST('benutzer'); $input['benutzer'] = $this->app->Secure->GetPOST('benutzer');
$input['zeit'] = $this->app->Secure->GetPOST('zeit'); $input['datum'] = $this->app->Secure->GetPOST('datum');
$input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung'); $input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung');
@ -756,6 +764,12 @@ class Fibu_buchungen {
} }
function fibu_buchungen_buchen(string $von_typ, int $von_id, string $nach_typ, int $nach_id, $betrag, string $waehrung, $datum, string $internebemerkung) {
$sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','".$nach_typ."', '".$nach_id."', '".$datum."', '".$betrag."', '".$waehrung."', '".$this->app->User->GetID()."','".date("Y-m-d H:i")."', '".$internebemerkung."')";
$this->app->DB->Insert($sql);
}
function fibu_buchungen_zuordnen() { function fibu_buchungen_zuordnen() {
$submit = $this->app->Secure->GetPOST('submit'); $submit = $this->app->Secure->GetPOST('submit');
@ -773,8 +787,8 @@ class Fibu_buchungen {
$waehrungen = $this->app->Secure->GetPOST('waehrungen'); $waehrungen = $this->app->Secure->GetPOST('waehrungen');
$auswahl = $this->app->Secure->GetPOST('auswahl'); $auswahl = $this->app->Secure->GetPOST('auswahl');
$vorschlaege = $this->app->Secure->GetPOST('vorschlaege'); $vorschlaege = $this->app->Secure->GetPOST('vorschlaege');
$sachkonto = $this->app->Secure->GetPOST('sachkonto');
$aktion = $this->app->Secure->GetPOST('sel_aktion'); $aktion = $this->app->Secure->GetPOST('sel_aktion');
$sachkonto = $this->app->Secure->GetPOST('sachkonto');
$account_id = null; $account_id = null;
if (!empty($sachkonto)) { if (!empty($sachkonto)) {
@ -811,30 +825,34 @@ class Fibu_buchungen {
switch ($aktion) { switch ($aktion) {
case 'vorschlag': case 'vorschlag':
if ($doc_id) { if ($doc_id) {
$sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','".$doc_typ."', '".$doc_id."', '".$datum."', '".-$betrag."', '".$waehrung."', '".$this->app->User->GetID()."','".$input['zeit'] = date("Y-m-d H:i")."', '')"; // $sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','".$doc_typ."', '".$doc_id."', '".$datum."', '".-$betrag."', '".$waehrung."', '".$this->app->User->GetID()."','".date("Y-m-d H:i")."', '')";
// echo($sql."\n"); // echo($sql."\n");
$this->app->DB->Insert($sql); // $this->app->DB->Insert($sql);
$this->fibu_buchungen_buchen($von_typ, $von_id, $doc_typ, $doc_id, -$betrag, $waehrung, $datum, '');
} }
break; break;
case 'sachkonto': case 'sachkonto':
$sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','kontorahmen', '".$account_id."', '".$datum."', '".-$betrag."', '".$waehrung."', '".$this->app->User->GetID()."','".$input['zeit'] = date("Y-m-d H:i")."', '')"; // $sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','kontorahmen', '".$account_id."', '".$datum."', '".-$betrag."', '".$waehrung."', '".$this->app->User->GetID()."','".date("Y-m-d H:i")."', '')";
// echo($sql."\n"); // echo($sql."\n");
$this->app->DB->Insert($sql); // $this->app->DB->Insert($sql);
$this->fibu_buchungen_buchen($von_typ, $von_id, 'kontorahmen', $account_id, -$betrag, $waehrung, $datum, '');
break; break;
case 'vorschlag_diff_sachkonto': case 'vorschlag_diff_sachkonto':
if ($doc_id) { if ($doc_id) {
// Retrieve counter doc saldo
$doc_saldo = $this->app->erp->GetSaldoDokument($doc_id, $doc_typ); $doc_saldo = $this->app->erp->GetSaldoDokument($doc_id, $doc_typ);
$sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','".$doc_typ."', '".$doc_id."', '".$datum."', '".-$betrag."', '".$waehrung."', '".$this->app->User->GetID()."','".$input['zeit'] = date("Y-m-d H:i")."', '')"; // $sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','".$doc_typ."', '".$doc_id."', '".$datum."', '".-$betrag."', '".$waehrung."', '".$this->app->User->GetID()."','".date("Y-m-d H:i")."', '')";
// echo($sql."\n"); // echo($sql."\n");
$this->app->DB->Insert($sql); // $this->app->DB->Insert($sql);
$this->fibu_buchungen_buchen($von_typ, $von_id, $doc_typ, $doc_id, -$betrag, $waehrung, $datum, '');
} }
// Retrieve counter doc saldo
if (!empty($doc_saldo) && ($doc_saldo['waehrung'] == $waehrung) && ($account_id !== null)) { if (!empty($doc_saldo) && ($doc_saldo['waehrung'] == $waehrung) && ($account_id !== null)) {
$diff = $betrag+$doc_saldo['betrag']; $diff = $betrag+$doc_saldo['betrag'];
$sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$doc_typ."','".$doc_id."','kontorahmen', '".$account_id."', '".$datum."', '".-$diff."', '".$waehrung."', '".$this->app->User->GetID()."','".$input['zeit'] = date("Y-m-d H:i")."', '')"; // $sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$doc_typ."','".$doc_id."','kontorahmen', '".$account_id."', '".$datum."', '".-$diff."', '".$waehrung."', '".$this->app->User->GetID()."','".date("Y-m-d H:i")."', '')";
// echo($sql."\n"); // echo($sql."\n");
$this->app->DB->Insert($sql); // $this->app->DB->Insert($sql);
$this->fibu_buchungen_buchen($doc_typ, $doc_id, 'kontorahmen', $account_id, -$diff, $waehrung, $datum, '');
} else { } else {
$msg .= "<div class=\"warning\">Gegensaldo wurde nicht gebucht. ".count($doc_saldo)." ".$doc_saldo[0]['waehrung']."</div>"; $msg .= "<div class=\"warning\">Gegensaldo wurde nicht gebucht. ".count($doc_saldo)." ".$doc_saldo[0]['waehrung']."</div>";
} }
@ -842,7 +860,9 @@ class Fibu_buchungen {
} }
} // auswahl } // auswahl
} // foreach } // foreach
} // auswahl } else { // auswahl
$msg .= "<div class=\"warning\">Keine Posten ausgew&auml;hlt.</div>";
}
} // submit } // submit
$this->fibu_rebuild_tables(); $this->fibu_rebuild_tables();
@ -883,6 +903,14 @@ class Fibu_buchungen {
$von_id = (int) $von[1]; $von_id = (int) $von[1];
$this->app->User->SetParameter('fibu_buchungen_doc_typ', $von_typ); $this->app->User->SetParameter('fibu_buchungen_doc_typ', $von_typ);
$this->app->User->SetParameter('fibu_buchungen_doc_id', $von_id); $this->app->User->SetParameter('fibu_buchungen_doc_id', $von_id);
$aktion = $this->app->Secure->GetPOST('sel_aktion');
$sachkonto = $this->app->Secure->GetPOST('sachkonto');
$account_id = null;
if (!empty($sachkonto)) {
$sachkonto_kennung = explode(' ',$sachkonto)[0];
$account_id = $this->app->DB->SelectArr("SELECT id from kontorahmen WHERE sachkonto = '".$sachkonto_kennung."'")[0]['id'];
}
$this->app->erp->MenuEintrag("index.php?module=fibu_buchungen&action=zuordnen&typ=".$von_typ, "Zur&uuml;ck"); $this->app->erp->MenuEintrag("index.php?module=fibu_buchungen&action=zuordnen&typ=".$von_typ, "Zur&uuml;ck");
@ -893,6 +921,8 @@ class Fibu_buchungen {
$von_saldo = $von_row['saldo']; $von_saldo = $von_row['saldo'];
$von_waehrung = $von_row['waehrung']; $von_waehrung = $von_row['waehrung'];
$datum = $this->app->DB->SelectArr("SELECT datum FROM fibu_buchungen_alle WHERE typ='".$von_typ."' AND id = '".$von_id."'")[0]['datum']; // Get relevant date of source doc
if ($submit == 'BUCHEN') { if ($submit == 'BUCHEN') {
// Process multi action // Process multi action
$count_success = 0; $count_success = 0;
@ -933,16 +963,45 @@ class Fibu_buchungen {
$betrag = $werte[$key_ids]; $betrag = $werte[$key_ids];
switch ($aktion) {
case 'buchen':
if ($betrag != 0) { if ($betrag != 0) {
$sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','".$doc_typ."', '".$doc_id."', '".-$betrag."', '".$von_waehrung."', '".$this->app->User->GetID()."','". $input['zeit'] = date("Y-m-d H:i")."', '')"; // $sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','".$doc_typ."', '".$doc_id."', '".$datum."', '".-$betrag."', '".$von_waehrung."', '".$this->app->User->GetID()."','".date("Y-m-d H:i")."', '')";
$this->app->DB->Insert($sql); // echo($sql."\n");
// $this->app->DB->Insert($sql);
$this->fibu_buchungen_buchen($von_typ, $von_id, $doc_typ, $doc_id, -$betrag, $von_waehrung, $datum, '');
$count_success++; $count_success++;
} }
break;
case 'buchen_diff_sachkonto':
$doc_saldo = $this->app->erp->GetSaldoDokument($doc_id, $doc_typ);
if ($betrag != 0) {
// $sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('".$von_typ."','".$von_id."','".$doc_typ."', '".$doc_id."', '".$datum."', '".-$betrag."', '".$von_waehrung."', '".$this->app->User->GetID()."','".date("Y-m-d H:i")."', '')";
// echo($sql."\n");
// $this->app->DB->Insert($sql);
$this->fibu_buchungen_buchen($von_typ, $von_id, $doc_typ, $doc_id, -$betrag, $von_waehrung, $datum, '');
$count_success++;
}
if (!empty($doc_saldo) && ($doc_saldo['waehrung'] == $von_waehrung) && ($account_id !== null)) {
$diff = $betrag+$doc_saldo['betrag'];
// $sql = "INSERT INTO `fibu_buchungen` (`von_typ`, `von_id`, `nach_typ`, `nach_id`, `datum`, `betrag`, `waehrung`, `benutzer`, `zeit`, `internebemerkung`) VALUES ('kontorahmen','".$account_id."','".$doc_typ."', '".$doc_id."', '".$datum."', '".$diff."', '".$von_waehrung."', '".$this->app->User->GetID()."','".date("Y-m-d H:i")."', '')";
// echo($sql."\n");
// $this->app->DB->Insert($sql);
$this->fibu_buchungen_buchen($doc_typ, $doc_id, 'kontorahmen', $account_id, -$diff, $von_waehrung, $datum, '');
} else {
$msg .= "<div class=\"warning\">Gegensaldo wurde nicht gebucht.</div>";
}
break;
}
} }
} }
} }
$msg .= "<div class=\"info\">".$count_success." Buchung".(($count_success===1)?'':'en')." durchgef&uuml;hrt.</div>"; $msg .= "<div class=\"info\">".$count_success." Buchung".(($count_success===1)?'':'en')." durchgef&uuml;hrt.</div>";
$this->fibu_rebuild_tables(); $this->fibu_rebuild_tables();
} else {
$msg .= "<div class=\"warning\">Keine Posten ausgew&auml;hlt.</div>";
} }
} }
@ -963,6 +1022,8 @@ class Fibu_buchungen {
$this->app->Tpl->Set('MESSAGE', $msg); $this->app->Tpl->Set('MESSAGE', $msg);
} }
$this->app->YUI->AutoComplete('sachkonto', 'sachkonto');
$this->app->Tpl->Parse('PAGE', "fibu_buchungen_einzelzuordnen.tpl"); $this->app->Tpl->Parse('PAGE', "fibu_buchungen_einzelzuordnen.tpl");
} }
} }