From 69172672b211b5dc2bbeb96e34fca4b9750b7b0a Mon Sep 17 00:00:00 2001
From: OpenXE <>
Date: Tue, 11 Apr 2023 15:20:40 +0200
Subject: [PATCH] fibu_buchhaltung belege zuordnen multi option
---
www/lib/class.erpapi.php | 6 +--
www/pages/content/fibu_buchungen_zuordnen.tpl | 23 ++++----
www/pages/fibu_buchungen.php | 54 +++++++++++++------
3 files changed, 53 insertions(+), 30 deletions(-)
diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php
index 02609f61..da7f2d1c 100644
--- a/www/lib/class.erpapi.php
+++ b/www/lib/class.erpapi.php
@@ -35973,7 +35973,7 @@ function Firmendaten($field,$projekt="")
* Auftrag: gesamtsumme, rechnung: soll, gutschrift: soll verbindlichkeit: betrag
* returns array(array(betrag, waehrung)) one line per waehrung
*/
- public function GetSaldenDokument($id, $type, string $cascadelevel = '') : array {
+ public function GetSaldenDokument(int $id, string $type, string $cascadelevel = '') : array {
if ($cascadelevel != '') {
$documents = $this->GetZahlungenAssociatedDocuments($id, $type, $cascadelevel);
@@ -36014,9 +36014,9 @@ function Firmendaten($field,$projekt="")
/*
* Calculate the payment amount of a document
* Auftrag: gesamtsumme, rechnung: soll, gutschrift: soll verbindlichkeit: betrag
- * returns array(array(betrag, waehrung)) or empty array
+ * returns array(betrag, waehrung) or empty array if multiple
*/
- public function GetSaldoDokument($id, $type) : array {
+ public function GetSaldoDokument(int $id, string $type) : array {
$sql = "
SELECT
diff --git a/www/pages/content/fibu_buchungen_zuordnen.tpl b/www/pages/content/fibu_buchungen_zuordnen.tpl
index d6777670..272722e0 100644
--- a/www/pages/content/fibu_buchungen_zuordnen.tpl
+++ b/www/pages/content/fibu_buchungen_zuordnen.tpl
@@ -40,7 +40,16 @@
diff --git a/www/pages/fibu_buchungen.php b/www/pages/fibu_buchungen.php
index cd23d33b..578d49d3 100644
--- a/www/pages/fibu_buchungen.php
+++ b/www/pages/fibu_buchungen.php
@@ -766,7 +766,7 @@ class Fibu_buchungen {
}
if ($submit == 'BUCHEN') {
-
+
// Process multi action
$ids = $this->app->Secure->GetPOST('ids');
$werte = $this->app->Secure->GetPOST('werte');
@@ -774,11 +774,12 @@ class Fibu_buchungen {
$auswahl = $this->app->Secure->GetPOST('auswahl');
$vorschlaege = $this->app->Secure->GetPOST('vorschlaege');
$sachkonto = $this->app->Secure->GetPOST('sachkonto');
+ $aktion = $this->app->Secure->GetPOST('sel_aktion');
- $sachkontoid = null;
+ $account_id = null;
if (!empty($sachkonto)) {
$sachkonto_kennung = explode(' ',$sachkonto)[0];
- $sachkontoid = $this->app->DB->SelectArr("SELECT id from kontorahmen WHERE sachkonto = '".$sachkonto_kennung."'")[0]['id'];
+ $account_id = $this->app->DB->SelectArr("SELECT id from kontorahmen WHERE sachkonto = '".$sachkonto_kennung."'")[0]['id'];
}
if (!empty($auswahl)) {
@@ -794,28 +795,51 @@ class Fibu_buchungen {
$von_id = (int) $von[1];
$betrag = $werte[$key_ids];
+
$waehrung = $waehrungen[$key_ids];
- $doc_id = null;
+ $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 ($sachkontoid) {
- $doc_typ = 'kontorahmen';
- $doc_id = $sachkontoid;
- } else if ($vorschlaege[$key_ids] != '_') {
+ $doc_id = null;
+ if ($vorschlaege[$key_ids] != '_') {
$doc = $vorschlaege[$key_ids];
$doc = explode('_',$doc);
$doc_typ = strtolower($doc[0]);
$doc_id = (int) $doc[1];
}
+ switch ($aktion) {
+ case 'vorschlag':
+ 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")."', '')";
+// echo($sql."\n");
+ $this->app->DB->Insert($sql);
+ }
+ break;
+ 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")."', '')";
+// echo($sql."\n");
+ $this->app->DB->Insert($sql);
+ break;
+ case 'vorschlag_diff_sachkonto':
+ if ($doc_id) {
+ $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")."', '')";
+// echo($sql."\n");
+ $this->app->DB->Insert($sql);
+ }
- $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 ($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")."', '')";
- $this->app->DB->Insert($sql);
-// echo($sql."\n");
- }
+ // Retrieve counter doc saldo
+ if (!empty($doc_saldo) && ($doc_saldo['waehrung'] == $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 ('".$doc_typ."','".$doc_id."','kontorahmen', '".$account_id."', '".$datum."', '".-$diff."', '".$waehrung."', '".$this->app->User->GetID()."','".$input['zeit'] = date("Y-m-d H:i")."', '')";
+// echo($sql."\n");
+ $this->app->DB->Insert($sql);
+ } else {
+ $msg .= "Gegensaldo wurde nicht gebucht. ".count($doc_saldo)." ".$doc_saldo[0]['waehrung']."
";
+ }
+ break;
+ }
} // auswahl
} // foreach
} // auswahl