verbindlichkeit lock control

This commit is contained in:
OpenXE 2024-01-03 15:45:43 +01:00
parent 153c9652ee
commit e5393bb7de
6 changed files with 125 additions and 44 deletions

File diff suppressed because one or more lines are too long

View File

@ -2489,7 +2489,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer = '".$lieferant[0]."' AND lieferantennummer <> '' LIMIT 1"); $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer = '".$lieferant[0]."' AND lieferantennummer <> '' LIMIT 1");
} }
$beleg = str_replace('lieferanten','',$filtername); $beleg = str_replace('lieferanten','',$filtername);
$arr = $this->app->DB->SelectArr("SELECT CONCAT(id,' ',if(belegnr <> '',belegnr,'ENTWURF'),' ',lieferantennummer,' ',name) as name FROM $beleg WHERE (belegnr <> '') AND (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR lieferantennummer LIKE '$%term%') AND (status = 'versendet' OR status = 'freigegeben') $arr = $this->app->DB->SelectArr("SELECT CONCAT(belegnr,' ',lieferantennummer,' ',name) as name FROM $beleg WHERE (belegnr <> '') AND (belegnr LIKE '%$term%' OR name LIKE '%$term%' OR lieferantennummer LIKE '$%term%') AND (status = 'versendet' OR status = 'freigegeben')
".($adresse?" AND adresse = '$adresse' ":'')." ".$this->app->erp->ProjektRechte('projekt')." ".($adresse?" AND adresse = '$adresse' ":'')." ".$this->app->erp->ProjektRechte('projekt')."
ORDER by belegnr LIMIT 20" ); ORDER by belegnr LIMIT 20" );
$carr = !empty($arr)?count($arr):0; $carr = !empty($arr)?count($arr):0;

View File

@ -1,6 +1,6 @@
<div id="tabs"> <div id="tabs">
<ul> <ul>
<li><a href="#tabs-1">Details</a></li> <li><a href="#tabs-1">Verbindlichkeit</a></li>
<li><a href="#tabs-2">Positionen</a></li> <li><a href="#tabs-2">Positionen</a></li>
<li><a href="#tabs-3">Protokoll</a></li> <li><a href="#tabs-3">Protokoll</a></li>
</ul> </ul>

View File

@ -8,7 +8,7 @@
color: #636363;border: 1px solid #fff;padding: 0px; margin:0px; color: #636363;border: 1px solid #fff;padding: 0px; margin:0px;
} }
</style> </style>
<div style="float:left; width:49%; padding-right:1%;"> <div style="float:left; width:39%; padding-right:1%;">
<table width="100%" border="0"> <table width="100%" border="0">
<tr valign="top"> <tr valign="top">
<td width="150">Lieferant:</td> <td width="150">Lieferant:</td>
@ -53,7 +53,7 @@
</tr> </tr>
</table> </table>
</div> </div>
<div style="float:left; width:50%"> <div style="float:left; width:60%">
<div style="background-color:white"> <div style="background-color:white">
<h2 class="greyh2">Artikel</h2> <h2 class="greyh2">Artikel</h2>
<div style="padding:10px"> <div style="padding:10px">

View File

@ -55,16 +55,16 @@
<tr> <tr>
<td><input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />&nbsp;{|alle markieren|}</td> <td><input type="checkbox" id="auswahlalle" onchange="alleauswaehlen();" />&nbsp;{|alle markieren|}</td>
</tr> </tr>
<tr> <tr [SACHKONTOHIDDEN]>
<td>Sachkonto:&nbsp;<input type="text" id="positionen_sachkonto" name="positionen_sachkonto" value=""></td> <td>Sachkonto:&nbsp;<input type="text" id="positionen_sachkonto" name="positionen_sachkonto" value=""></td>
</tr> </tr>
<tr> <tr [SACHKONTOHIDDEN]>
<td><button [SAVEDISABLED] name="submit" value="positionen_sachkonto_speichern" class="ui-button-icon" style="width:100%;">Anpassen</button></td> <td><button name="submit" value="positionen_sachkonto_speichern" class="ui-button-icon" style="width:100%;">Anpassen</button></td>
</tr> </tr>
<tr [FREIGABEEINKAUFHIDDEN]> <tr [POSITIONHINZUFUEGENHIDDEN]>
<td>Steuersatz:&nbsp;<input type="text" id="positionen_steuersatz" name="positionen_steuersatz" value=""></td> <td>Steuersatz:&nbsp;<input type="text" id="positionen_steuersatz" name="positionen_steuersatz" value=""></td>
</tr> </tr>
<tr [FREIGABEEINKAUFHIDDEN]> <tr [POSITIONHINZUFUEGENHIDDEN]>
<td><button [SAVEDISABLED] name="submit" value="positionen_steuersatz_speichern" class="ui-button-icon" style="width:100%;">Anpassen</button></td> <td><button [SAVEDISABLED] name="submit" value="positionen_steuersatz_speichern" class="ui-button-icon" style="width:100%;">Anpassen</button></td>
</tr> </tr>
</table> </table>

View File

@ -25,7 +25,6 @@ class Verbindlichkeit {
$this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf"); $this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf");
$this->app->ActionHandler("positioneneditpopup", "verbindlichkeit_positioneneditpopup"); $this->app->ActionHandler("positioneneditpopup", "verbindlichkeit_positioneneditpopup");
$this->app->ActionHandler("freigabe", "verbindlichkeit_freigabe"); $this->app->ActionHandler("freigabe", "verbindlichkeit_freigabe");
$this->app->ActionHandler("schreibschutz", "verbindlichkeit_schreibschutz");
$this->app->ActionHandler("freigabeeinkauf", "verbindlichkeit_freigabeeinkauf"); $this->app->ActionHandler("freigabeeinkauf", "verbindlichkeit_freigabeeinkauf");
$this->app->ActionHandler("freigabebuchhaltung", "verbindlichkeit_freigabebuchhaltung"); $this->app->ActionHandler("freigabebuchhaltung", "verbindlichkeit_freigabebuchhaltung");
$this->app->ActionHandler("freigabebezahlt", "verbindlichkeit_freigabebezahlt"); $this->app->ActionHandler("freigabebezahlt", "verbindlichkeit_freigabebezahlt");
@ -532,14 +531,18 @@ class Verbindlichkeit {
$input['status'] = 'angelegt'; $input['status'] = 'angelegt';
} }
if (!empty($submit)) {
$einkauf_automatik_aus = false;
}
switch($submit) switch($submit)
{ {
case 'speichern': case 'speichern':
// Write to database // Write to database
// Add checks here // Add checks here
$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM verbindlichkeit WHERE id =".$id);
if ($schreibschutz) { $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM verbindlichkeit WHERE id =".$id)[0];
if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) {
$internebemerkung = $input['internebemerkung']; $internebemerkung = $input['internebemerkung'];
$projekt = $input['projekt']; $projekt = $input['projekt'];
$kostenstelle = $input['kostenstelle']; $kostenstelle = $input['kostenstelle'];
@ -555,7 +558,7 @@ class Verbindlichkeit {
$input['zahlbarbis'] = $this->app->erp->ReplaceDatum(true,$input['zahlbarbis'],true); // Parameters: Target db?, value, from form? $input['zahlbarbis'] = $this->app->erp->ReplaceDatum(true,$input['zahlbarbis'],true); // Parameters: Target db?, value, from form?
$input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true);
$input['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$input['kostenstelle']."'"); $input['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$input['kostenstelle']."'");
$input['projekt'] = $this->app->erp->ReplaceBestellung(true,$input['bestellung'],true); $input['bestellung'] = $this->app->erp->ReplaceBestellung(true,$input['bestellung'],true);
if(empty($input['projekt']) && !empty($input['adresse'])) { if(empty($input['projekt']) && !empty($input['adresse'])) {
$input['projekt'] = $this->app->erp->GetCreateProjekt($input['adresse']); $input['projekt'] = $this->app->erp->GetCreateProjekt($input['adresse']);
} }
@ -608,8 +611,8 @@ class Verbindlichkeit {
break; break;
case 'positionen_hinzufuegen': case 'positionen_hinzufuegen':
$freigabeeinkauf = $this->app->DB->Select("SELECT freigabe FROM verbindlichkeit WHERE id =".$id); $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM verbindlichkeit WHERE id =".$id)[0];
if ($freigabeeinkauf) { if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) {
break; break;
} }
@ -627,6 +630,40 @@ class Verbindlichkeit {
continue; continue;
} }
// Check available number
$sql = "
SELECT
IF(
pd.menge > COALESCE(vp.menge,0),
pd.menge - COALESCE(vp.menge,0),
0
) offen_menge
FROM
paketdistribution pd
LEFT JOIN(
SELECT
paketdistribution,
SUM(menge) AS menge
FROM
verbindlichkeit_position vp
GROUP BY
paketdistribution
) vp
ON
vp.paketdistribution = pd.id
WHERE pd.id = ".$paketdistribution."
";
$offen_menge = $this->app->DB->Select($sql);
if ($offen_menge == 0) {
echo("Abort ".$paketdistribution." ".gettype($offen_menge));
continue;
}
if ($menge > $offen_menge) {
$menge = $offen_menge;
}
$preis = $preise[$key]; $preis = $preise[$key];
$umsatzsteuer = $umsatzsteuern[$key]; $umsatzsteuer = $umsatzsteuern[$key];
$ein_artikel = $artikel[$key]; $ein_artikel = $artikel[$key];
@ -759,7 +796,6 @@ class Verbindlichkeit {
} }
// Summarize positions // Summarize positions
$sql = "SELECT * FROM verbindlichkeit_position WHERE verbindlichkeit = ".$id; $sql = "SELECT * FROM verbindlichkeit_position WHERE verbindlichkeit = ".$id;
$positionen = $this->app->DB->SelectArr($sql); $positionen = $this->app->DB->SelectArr($sql);
@ -776,7 +812,6 @@ class Verbindlichkeit {
Befreit: umsatzsteuer befreit, steursatz = -1 Befreit: umsatzsteuer befreit, steursatz = -1
Individuell: umsatzsteuer leer, steuersatz = wert Individuell: umsatzsteuer leer, steuersatz = wert
*/ */
foreach ($positionen as $position) { foreach ($positionen as $position) {
$tmpsteuersatz = null; $tmpsteuersatz = null;
@ -818,21 +853,22 @@ class Verbindlichkeit {
if ($pos_ok) { if ($pos_ok) {
if (!$verbindlichkeit_from_db['freigabe'] && !$einkauf_automatik_aus) { if (!$verbindlichkeit_from_db['freigabe'] && !$einkauf_automatik_aus) {
$this->app->DB->Update("UPDATE verbindlichkeit SET freigabe = 1 WHERE id = ".$id); if ($this->verbindlichkeit_freigabeeinkauf($id,"Verbindlichkeit automatisch freigegeben (Einkauf)")) {
$verbindlichkeit_from_db['freigabe'] = 1; $this->app->YUI->Message('success',"Verbindlichkeit automatisch freigegeben (Einkauf)");
$this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit automatisch freigegeben (Einkauf)"); $verbindlichkeit_from_db['freigabe'] = 1;
$this->app->YUI->Message('success',"Verbindlichkeit automatisch freigegeben (Einkauf)"); } else {
$this->app->YUI->Message('warning','Waren-/Leistungspr&uuml;fung (Einkauf) nicht abgeschlossen');
}
} }
$this->app->Tpl->Set('POSITIONENMESSAGE', '<div class="success">Positionen vollst&auml;ndig</div>'); $this->app->Tpl->Set('POSITIONENMESSAGE', '<div class="success">Positionen vollst&auml;ndig</div>');
} else { } else {
$this->app->Tpl->Set('POSITIONENMESSAGE', '<div class="warning">Positionen nicht vollst&auml;ndig. Bruttobetrag '.$verbindlichkeit_from_db['betrag'].', Summe Positionen (brutto) '.round($betrag_brutto,2).', Summe Positionen (netto) '.round($betrag_netto,2).'</div>'); $this->app->Tpl->Set('POSITIONENMESSAGE', '<div class="warning">Positionen nicht vollst&auml;ndig. Bruttobetrag '.$verbindlichkeit_from_db['betrag'].', Summe Positionen (brutto) '.round($betrag_brutto,2).', Differenz '.round(round($betrag_brutto,2)-$verbindlichkeit_from_db['betrag'],2).'</div>');
if ($verbindlichkeit_from_db['freigabe']) { if ($verbindlichkeit_from_db['freigabe']) {
$this->app->DB->Update("UPDATE verbindlichkeit SET freigabe = 0 WHERE id = ".$id); $this->app->DB->Update("UPDATE verbindlichkeit SET freigabe = 0 WHERE id = ".$id);
$verbindlichkeit_from_db['freigabe'] = 0; $verbindlichkeit_from_db['freigabe'] = 0;
$this->app->YUI->Message('warning',"Verbindlichkeit r&uuml;ckgesetzt (Einkauf)"); $this->app->YUI->Message('warning',"Verbindlichkeit r&uuml;ckgesetzt (Einkauf)");
} }
} }
$this->app->Tpl->Set('BETRAGDISABLED', 'disabled');
} }
/* /*
@ -846,11 +882,6 @@ class Verbindlichkeit {
*/ */
if ($verbindlichkeit_from_db['rechnungsfreigabe']) {
$this->app->Tpl->Set('SAVEDISABLED','disabled');
$this->app->Tpl->Set('MESSAGE',"<div class=\"warning\">Diese Verbindlichkeit ist schreibgesch&uuml;tzt und darf daher nicht mehr bearbeitet werden!&nbsp;<input type=\"button\" value=\"Schreibschutz entfernen\" onclick=\"if(!confirm('Soll der Schreibschutz f&uuml;r diese Verbindlichkeit wirklich entfernt werden?')) return false;else window.location.href='index.php?module=verbindlichkeit&action=ruecksetzenbuchhaltung&id=$id';\"></div>");
}
if (empty($verbindlichkeit_from_db['adresse'] || $verbindlichkeit_from_db['status'] == 'angelegt')) { if (empty($verbindlichkeit_from_db['adresse'] || $verbindlichkeit_from_db['status'] == 'angelegt')) {
$this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden');
$this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden');
@ -860,6 +891,7 @@ class Verbindlichkeit {
if ($verbindlichkeit_from_db['freigabe']) { if ($verbindlichkeit_from_db['freigabe']) {
$this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden');
$this->app->Tpl->Set('EINKAUFINFOHIDDEN','hidden'); $this->app->Tpl->Set('EINKAUFINFOHIDDEN','hidden');
$this->app->Tpl->Set('SAVEDISABLED','disabled');
$this->app->Tpl->Set('POSITIONHINZUFUEGENHIDDEN','hidden'); $this->app->Tpl->Set('POSITIONHINZUFUEGENHIDDEN','hidden');
} else { } else {
$this->app->Tpl->Set('RUECKSETZENEINKAUFHIDDEN','hidden'); $this->app->Tpl->Set('RUECKSETZENEINKAUFHIDDEN','hidden');
@ -954,7 +986,6 @@ class Verbindlichkeit {
$input['skonto'] = $this->app->Secure->GetPOST('skonto'); $input['skonto'] = $this->app->Secure->GetPOST('skonto');
$input['skontobis'] = $this->app->Secure->GetPOST('skontobis'); $input['skontobis'] = $this->app->Secure->GetPOST('skontobis');
$input['projekt'] = $this->app->Secure->GetPOST('projekt'); $input['projekt'] = $this->app->Secure->GetPOST('projekt');
$input['bezahlt'] = $this->app->Secure->GetPOST('bezahlt')?'1':'0';;
$input['zahlungsweise'] = $this->app->Secure->GetPOST('zahlungsweise'); $input['zahlungsweise'] = $this->app->Secure->GetPOST('zahlungsweise');
$input['eingangsdatum'] = $this->app->Secure->GetPOST('eingangsdatum'); $input['eingangsdatum'] = $this->app->Secure->GetPOST('eingangsdatum');
$input['rechnungsdatum'] = $this->app->Secure->GetPOST('rechnungsdatum'); $input['rechnungsdatum'] = $this->app->Secure->GetPOST('rechnungsdatum');
@ -1046,22 +1077,50 @@ class Verbindlichkeit {
$id = $this->app->Secure->GetGET('id'); $id = $this->app->Secure->GetGET('id');
$this->app->erp->BelegFreigabe('verbindlichkeit',$id); $this->app->erp->BelegFreigabe('verbindlichkeit',$id);
$this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben"); $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben");
$this->app->DB->Update("UPDATE verbindlichkeit SET schreibschutz = 1 WHERE id = ".$id); // $this->app->DB->Update("UPDATE verbindlichkeit SET schreibschutz = 1 WHERE id = ".$id);
$this->verbindlichkeit_edit(); $this->verbindlichkeit_edit();
} }
function verbindlichkeit_freigabeeinkauf($id = null) function verbindlichkeit_freigabeeinkauf($id = null, $text = null)
{ {
if (empty($id)) { if (empty($id)) {
$id = $this->app->Secure->GetGET('id'); $id = $this->app->Secure->GetGET('id');
$gotoedit = true; $gotoedit = true;
} }
$sql = "UPDATE verbindlichkeit SET freigabe = 1, schreibschutz = 1 WHERE id=".$id;
// Check wareneingang status
$sql = "SELECT
pa.id
FROM verbindlichkeit_position vp
INNER JOIN paketdistribution pd ON pd.id = vp.paketdistribution
INNER JOIN paketannahme pa ON pa.id = pd.paketannahme
WHERE
verbindlichkeit='$id'
AND
pa.status != 'abgeschlossen'
";
$check = $this->app->DB->SelectArr($sql);
if (!empty($check)) {
return(false);
}
$sql = "UPDATE verbindlichkeit SET freigabe = 1 WHERE id=".$id;
$this->app->DB->Update($sql); $this->app->DB->Update($sql);
$this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben (Einkauf)");
if (!$text) {
$text = "Verbindlichkeit freigegeben (Einkauf)";
}
$this->app->erp->BelegProtokoll("verbindlichkeit",$id,$text);
if ($gotoedit) { if ($gotoedit) {
$this->verbindlichkeit_edit(); $this->verbindlichkeit_edit();
} }
else {
return(true);
}
} }
function verbindlichkeit_freigabebuchhaltung($id = null) function verbindlichkeit_freigabebuchhaltung($id = null)
@ -1070,9 +1129,31 @@ class Verbindlichkeit {
$id = $this->app->Secure->GetGET('id'); $id = $this->app->Secure->GetGET('id');
$gotoedit = true; $gotoedit = true;
} }
$sql = "UPDATE verbindlichkeit SET rechnungsfreigabe = 1 WHERE freigabe = 1 AND id=".$id;
$this->app->DB->Update($sql); // Check accounting
$this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben (Buchhaltung)"); $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&auml;ndig');
} else {
$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)");
}
if ($gotoedit) { if ($gotoedit) {
$this->verbindlichkeit_edit(); $this->verbindlichkeit_edit();
} }
@ -1098,7 +1179,7 @@ class Verbindlichkeit {
$id = $this->app->Secure->GetGET('id'); $id = $this->app->Secure->GetGET('id');
$gotoedit = true; $gotoedit = true;
} }
$sql = "UPDATE verbindlichkeit SET freigabe = 0, schreibschutz = 0 WHERE id=".$id; $sql = "UPDATE verbindlichkeit SET freigabe = 0 WHERE id=".$id;
$this->app->DB->Update($sql); $this->app->DB->Update($sql);
$this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit r&uuml;ckgesetzt (Einkauf)"); $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit r&uuml;ckgesetzt (Einkauf)");
if ($gotoedit) { if ($gotoedit) {
@ -1134,7 +1215,7 @@ class Verbindlichkeit {
} }
} }
function verbindlichkeit_schreibschutz($id = null) /* function verbindlichkeit_schreibschutz($id = null)
{ {
if (empty($id)) { if (empty($id)) {
$id = $this->app->Secure->GetGET('id'); $id = $this->app->Secure->GetGET('id');
@ -1146,7 +1227,7 @@ class Verbindlichkeit {
if ($gotoedit) { if ($gotoedit) {
$this->verbindlichkeit_edit(); $this->verbindlichkeit_edit();
} }
} } */
public function verbindlichkeit_minidetail($parsetarget='',$menu=true) { public function verbindlichkeit_minidetail($parsetarget='',$menu=true) {
@ -1228,10 +1309,10 @@ class Verbindlichkeit {
vp.menge, vp.menge,
vp.preis, vp.preis,
vp.steuersatz, vp.steuersatz,
if (skv.sachkonto <> 0, if (skv.id <> 0,
CONCAT(skv.sachkonto,' ',skv.beschriftung), CONCAT(skv.sachkonto,' ',skv.beschriftung),
( (
if (skart.sachkonto <> 0, if (skart.id <> 0,
CONCAT(skart.sachkonto,' ',skart.beschriftung, ' (Artikel)'), CONCAT(skart.sachkonto,' ',skart.beschriftung, ' (Artikel)'),
CONCAT(skadr.sachkonto,' ',skadr.beschriftung, ' (Adresse)') CONCAT(skadr.sachkonto,' ',skadr.beschriftung, ' (Adresse)')
) )