From 6a6aab43042813a4bd20b96366ffde7d8a1cc3fc Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Thu, 4 Jan 2024 13:13:13 +0100 Subject: [PATCH] verbindlichkeit mass processing, prevent approval without positions, get conditions from address --- www/pages/content/verbindlichkeit_edit.tpl | 2 +- www/pages/verbindlichkeit.php | 208 +++++++++++++++------ 2 files changed, 153 insertions(+), 57 deletions(-) diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl index 45a913b5..31547e41 100644 --- a/www/pages/content/verbindlichkeit_edit.tpl +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -1,7 +1,7 @@
diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index d3e70e5e..73e45a9c 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -429,7 +429,7 @@ class Verbindlichkeit { if (!empty($submit)) { $auswahl = $this->app->Secure->GetPOST('auswahl'); $aktion = $this->app->Secure->GetPOST('sel_aktion'); - + $selectedIds = []; if(!empty($auswahl)) { foreach($auswahl as $selectedId) { @@ -442,21 +442,30 @@ class Verbindlichkeit { switch ($aktion) { case 'freigabeeinkauf': foreach ($selectedIds as $id) { - $this->verbindlichkeit_freigabeeinkauf($id); + $result = $this->verbindlichkeit_freigabeeinkauf($id); + if ($result !== true) { + $this->app->YUI->Message('warning',$result); + } } break; case 'freigabebuchhaltung': - foreach ($selectedIds as $id) { - $this->verbindlichkeit_freigabebuchhaltung($id); + foreach ($selectedIds as $id) { + $result = $this->verbindlichkeit_freigabebuchhaltung($id); + if ($result !== true) { + $this->app->YUI->Message('warning',$result); + } } break; case 'bezahlt': foreach ($selectedIds as $id) { - $this->verbindlichkeit_freigabebezahlt($id); + $result = $this->verbindlichkeit_freigabebezahlt($id); + if ($result !== true) { + $this->app->YUI->Message('warning',$result); + } } break; } - } + } } $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=list", "Übersicht"); @@ -466,9 +475,6 @@ class Verbindlichkeit { $this->app->YUI->TableSearch('TAB1', 'verbindlichkeit_list', "show", "", "", basename(__FILE__), __CLASS__); -/* - - Prepared for later use... if($this->app->erp->RechteVorhanden('verbindlichkeit', 'freigabeeinkauf')){ $this->app->Tpl->Set('MANUELLFREIGABEEINKAUF', ''); @@ -481,7 +487,7 @@ class Verbindlichkeit { if($this->app->erp->RechteVorhanden('verbindlichkeit', 'freigabebezahlt')){ $this->app->Tpl->Set('ALSBEZAHLTMARKIEREN', ''); } -*/ + $this->app->User->SetParameter('table_verbindlichkeit_list_zahlbarbis', ''); $this->app->User->SetParameter('table_verbindlichkeit_list_skontobis', ''); @@ -564,15 +570,24 @@ class Verbindlichkeit { } if (!empty($input['adresse'])) { - $steuertyp = $this->app->DB->Select("SELECT ust_befreit FROM adresse WHERE id = ".$input['adresse']); + $adressdaten = $this->app->DB->SelectRow(" + SELECT + zahlungszieltagelieferant, + zahlungszieltageskontolieferant, + zahlungszielskontolieferant, + ust_befreit + FROM adresse WHERE id = ".$input['adresse'] + ); - if ($steuertyp > 0) { - $input['steuersatz_normal'] = '0'; - $input['steuersatz_ermaessigt'] = '0'; - } else { - $input['steuersatz_normal'] = $this->app->erp->Firmendaten("steuersatz_normal"); - $input['steuersatz_ermaessigt'] = $this->app->erp->Firmendaten("steuersatz_ermaessigt"); + + if ($input['zahlbarbis'] == '0000-00-00' && $input['rechnungsdatum'] != '0000-00-00' && !empty($adressdaten['zahlungszieltagelieferant'])) { + $input['zahlbarbis'] = date('Y-m-d',strtotime($input['rechnungsdatum']." + ".$adressdaten['zahlungszieltagelieferant']." days")); } + if ($input['skontobis'] == '0000-00-00' && $input['rechnungsdatum'] != '0000-00-00' && !empty($adressdaten['zahlungszieltageskontolieferant'])) { + $input['skontobis'] = date('Y-m-d',strtotime($input['rechnungsdatum']." + ".$adressdaten['zahlungszieltageskontolieferant']." days")); + $input['skonto'] = $adressdaten['zahlungszielskontolieferant']; + } + } } @@ -882,10 +897,13 @@ class Verbindlichkeit { */ - if (empty($verbindlichkeit_from_db['adresse'] || $verbindlichkeit_from_db['status'] == 'angelegt')) { - $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); + $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); // prevent manual setting + + if (empty($verbindlichkeit_from_db['adresse']) || $verbindlichkeit_from_db['status'] == 'angelegt') { $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); $this->app->Tpl->Set('FREIGABEBEZAHLTHIDDEN','hidden'); + $this->app->Tpl->Set('POSITIONHINZUFUEGENHIDDEN','hidden'); + $this->app->Tpl->Set('POSITIONENHIDDEN','hidden'); } if ($verbindlichkeit_from_db['freigabe']) { @@ -1081,6 +1099,7 @@ class Verbindlichkeit { $this->verbindlichkeit_edit(); } + // Returns true or error message function verbindlichkeit_freigabeeinkauf($id = null, $text = null) { if (empty($id)) { @@ -1088,8 +1107,18 @@ class Verbindlichkeit { $gotoedit = true; } - // Check wareneingang status + $error = false; + if (!$this->verbindlichkeit_is_freigegeben($id)) { + if ($gotoedit) { + $this->app->YUI->Message('warning','Verbindlichkeit nicht freigebeben'); + $error = true; + } else { + return('Verbindlichkeit nicht freigebeben '.$this->verbindlichkeit_get_belegnr($id)); + } + } + + // Check wareneingang status $sql = "SELECT pa.id FROM verbindlichkeit_position vp @@ -1098,23 +1127,26 @@ class Verbindlichkeit { WHERE verbindlichkeit='$id' AND - pa.status != 'abgeschlossen' - + pa.status = 'abgeschlossen' "; $check = $this->app->DB->SelectArr($sql); - if (!empty($check)) { - return(false); - } + if (empty($check)) { + if ($gotoedit) { + $this->app->YUI->Message('warning','Waren-/Leistungsprüfung (Einkauf) nicht abgeschlossen'); + } else { + return('Waren-/Leistungsprüfung (Einkauf) nicht abgeschlossen '.$this->verbindlichkeit_get_belegnr($id)); + } + } else { + $sql = "UPDATE verbindlichkeit SET freigabe = 1 WHERE id=".$id; + $this->app->DB->Update($sql); - $sql = "UPDATE verbindlichkeit SET freigabe = 1 WHERE id=".$id; - $this->app->DB->Update($sql); - - if (!$text) { - $text = "Verbindlichkeit freigegeben (Einkauf)"; + if (!$text) { + $text = "Verbindlichkeit freigegeben (Einkauf)"; + } + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,$text); } - $this->app->erp->BelegProtokoll("verbindlichkeit",$id,$text); if ($gotoedit) { $this->verbindlichkeit_edit(); } @@ -1128,27 +1160,53 @@ class Verbindlichkeit { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; + } + + $error = false; + + if (!$this->verbindlichkeit_is_freigegeben($id)) { + if ($gotoedit) { + $this->app->YUI->Message('warning','Verbindlichkeit nicht freigebeben'); + $error = true; + } else { + return('Verbindlichkeit nicht freigebeben '.$this->verbindlichkeit_get_belegnr($id)); + } } - // Check accounting - $sql = " - SELECT - vp.id - FROM verbindlichkeit_position vp - INNER JOIN artikel art ON art.id = vp.artikel - LEFT JOIN verbindlichkeit v ON v.id = vp.verbindlichkeit - LEFT JOIN adresse adr ON adr.id = v.adresse - LEFT JOIN kontorahmen skv ON skv.id = vp.kontorahmen - LEFT JOIN kontorahmen skart ON skart.id = art.kontorahmen - LEFT JOIN kontorahmen skadr ON skadr.id = adr.kontorahmen - WHERE verbindlichkeit='$id' - AND COALESCE(skv.id,0) = 0 AND COALESCE(skart.id,0) = 0 AND COALESCE(skadr.id,0) = 0 - "; - $check = $this->app->DB->SelectArr($sql); - - if (!empty($check)) { - $this->app->YUI->Message('error','Kontierung unvollständig'); - } else { + if (!$error) { + // Check accounting + $sql = " + SELECT + vp.id, + v.belegnr, + skv.id skv_id, + skart.id skart_id, + skadr.id skadr_id + FROM verbindlichkeit_position vp + INNER JOIN artikel art ON art.id = vp.artikel + LEFT JOIN verbindlichkeit v ON v.id = vp.verbindlichkeit + LEFT JOIN adresse adr ON adr.id = v.adresse + LEFT JOIN kontorahmen skv ON skv.id = vp.kontorahmen + LEFT JOIN kontorahmen skart ON skart.id = art.kontorahmen + LEFT JOIN kontorahmen skadr ON skadr.id = adr.kontorahmen + WHERE + verbindlichkeit='$id' + AND + ( + COALESCE(skv.id,0) = 0 OR COALESCE(skart.id,0) = 0 OR COALESCE(skadr.id,0) = 0 + ) + "; + if (empty($check)) { + if ($gotoedit) { + $this->app->YUI->Message('warning','Kontierung unvollständig'); + $error = true; + } else { + return('Kontierung unvollständig '.$this->verbindlichkeit_get_belegnr($id)); + } + } + } + + if (!$error) { $sql = "UPDATE verbindlichkeit SET rechnungsfreigabe = 1 WHERE freigabe = 1 AND id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben (Buchhaltung)"); @@ -1156,6 +1214,8 @@ class Verbindlichkeit { if ($gotoedit) { $this->verbindlichkeit_edit(); + } else { + return(true); } } @@ -1165,12 +1225,24 @@ class Verbindlichkeit { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } - $sql = "UPDATE verbindlichkeit SET bezahlt = 1 WHERE id=".$id; - $this->app->DB->Update($sql); - $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit als bezahlt markiert"); - if ($gotoedit) { - $this->verbindlichkeit_edit(); - } + + if (!$this->verbindlichkeit_is_freigegeben($id)) { + if ($gotoedit) { + $this->app->YUI->Message('warning','Verbindlichkeit nicht freigebeben'); + $error = true; + } else { + return('Verbindlichkeit nicht freigebeben '.$this->verbindlichkeit_get_belegnr($id)); + } + } + + if (!$error) { + $sql = "UPDATE verbindlichkeit SET bezahlt = 1 WHERE id=".$id; + $this->app->DB->Update($sql); + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit als bezahlt markiert"); + if ($gotoedit) { + $this->verbindlichkeit_edit(); + } + } } function verbindlichkeit_ruecksetzeneinkauf($id = null) @@ -1394,4 +1466,28 @@ class Verbindlichkeit { $this->app->Tpl->Parse($parsetarget,'verbindlichkeit_minidetail.tpl'); } + function verbindlichkeit_is_freigegeben($id) { + $sql = "SELECT + belegnr + FROM + verbindlichkeit + WHERE + id='$id' + AND + status IN ('freigegeben') + "; + + $check = $this->app->DB->SelectArr($sql); + if (empty($check)) { + return(false); + } else + { + return(true); + } + } + + function verbindlichkeit_get_belegnr($id) { + return($this->app->DB->Select("SELECT belegnr FROM verbindlichkeit WHERE id =".$id)); + } + }