mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-25 14:10:28 +01:00
334 lines
17 KiB
PHP
334 lines
17 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Copyright (c) 2022 OpenXE project
|
|
*/
|
|
|
|
use Xentral\Components\Database\Exception\QueryFailureException;
|
|
|
|
class Verbindlichkeit {
|
|
|
|
function __construct($app, $intern = false) {
|
|
$this->app = $app;
|
|
if ($intern)
|
|
return;
|
|
|
|
$this->app->ActionHandlerInit($this);
|
|
$this->app->ActionHandler("list", "verbindlichkeit_list");
|
|
$this->app->ActionHandler("create", "verbindlichkeit_edit"); // This automatically adds a "New" button
|
|
$this->app->ActionHandler("edit", "verbindlichkeit_edit");
|
|
$this->app->ActionHandler("delete", "verbindlichkeit_delete");
|
|
$this->app->ActionHandler("dateien", "verbindlichkeit_dateien");
|
|
$this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf");
|
|
$this->app->DefaultActionHandler("list");
|
|
$this->app->ActionHandlerListen($app);
|
|
}
|
|
|
|
public function Install() {
|
|
/* Fill out manually later */
|
|
}
|
|
|
|
static function TableSearch(&$app, $name, $erlaubtevars) {
|
|
switch ($name) {
|
|
case "verbindlichkeit_list":
|
|
$allowed['verbindlichkeit_list'] = array('list');
|
|
$heading = array('','','Belegnr','Adresse', 'Lieferant', 'RE-Nr', 'RE-Datum', 'Betrag (brutto)', 'Währung', 'Ziel','Skontoziel','Skonto','Monitor', 'Menü');
|
|
$width = array('1%','1%','10%'); // Fill out manually later
|
|
|
|
// columns that are aligned right (numbers etc)
|
|
// $alignright = array(4,5,6,7,8);
|
|
|
|
$findcols = array(
|
|
'v.id',
|
|
'v.id',
|
|
'v.id',
|
|
'a.name',
|
|
'a.lieferantennummer',
|
|
'v.rechnung',
|
|
'v.rechnungsdatum',
|
|
'v.betrag',
|
|
'v.waehrung',
|
|
'v.zahlbarbis',
|
|
'v.skontobis',
|
|
'v.skonto',
|
|
'v.status_beleg',
|
|
'v.id'
|
|
);
|
|
|
|
$searchsql = array(
|
|
'a.name',
|
|
'a.lieferantennummer',
|
|
'v.rechnung',
|
|
'v.internebemerkung'
|
|
);
|
|
|
|
$defaultorder = 1;
|
|
$defaultorderdesc = 0;
|
|
$alignright = array(8);
|
|
$sumcol = array(8);
|
|
|
|
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',v.id,'\" />') AS `auswahl`";
|
|
|
|
// $moreinfo = true; // Allow drop down details
|
|
// $moreinfoaction = "lieferschein"; // specify suffix for minidetail-URL to allow different minidetails
|
|
// $menucol = 11; // Set id col for moredata/menu
|
|
|
|
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=verbindlichkeit&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a> <a href=\"#\" onclick=DeleteDialog(\"index.php?module=verbindlichkeit&action=delete&id=%value%\");>" . "<img src=\"themes/{$app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"></a>" . "</td></tr></table>";
|
|
|
|
$sql = "SELECT SQL_CALC_FOUND_ROWS
|
|
v.id,
|
|
$dropnbox,
|
|
v.belegnr,
|
|
a.name,
|
|
a.lieferantennummer,
|
|
v.rechnung,
|
|
".$app->erp->FormatDate("v.rechnungsdatum").",
|
|
".$app->erp->FormatMenge('v.betrag',2).",
|
|
v.waehrung,
|
|
".$app->erp->FormatDate("v.zahlbarbis").",
|
|
IF(v.skonto <> 0,".$app->erp->FormatDate("v.skontobis").",''),
|
|
IF(v.skonto <> 0,CONCAT(".$app->erp->FormatMenge('v.skonto',0).",'%'),''),
|
|
".$app->YUI->IconsSQLVerbindlichkeit().",
|
|
v.id FROM verbindlichkeit v
|
|
LEFT JOIN adresse a ON v.adresse = a.id
|
|
|
|
";
|
|
|
|
$where = "1";
|
|
$count = "SELECT count(DISTINCT id) FROM verbindlichkeit WHERE $where";
|
|
// $groupby = "";
|
|
|
|
break;
|
|
}
|
|
|
|
$erg = false;
|
|
|
|
foreach ($erlaubtevars as $k => $v) {
|
|
if (isset($$v)) {
|
|
$erg[$v] = $$v;
|
|
}
|
|
}
|
|
return $erg;
|
|
}
|
|
|
|
function verbindlichkeit_list() {
|
|
$this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=list", "Übersicht");
|
|
$this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=create", "Neu anlegen");
|
|
|
|
$this->app->erp->MenuEintrag("index.php", "Zurück");
|
|
|
|
$this->app->YUI->TableSearch('TAB1', 'verbindlichkeit_list', "show", "", "", basename(__FILE__), __CLASS__);
|
|
$this->app->Tpl->Parse('PAGE', "verbindlichkeit_list.tpl");
|
|
}
|
|
|
|
public function verbindlichkeit_delete() {
|
|
$id = (int) $this->app->Secure->GetGET('id');
|
|
|
|
$this->app->DB->Delete("DELETE FROM `verbindlichkeit` WHERE `id` = '{$id}'");
|
|
$this->app->Tpl->Set('MESSAGE', "<div class=\"error\">Der Eintrag wurde gelöscht.</div>");
|
|
|
|
$this->verbindlichkeit_list();
|
|
}
|
|
|
|
/*
|
|
* Edit verbindlichkeit item
|
|
* If id is empty, create a new one
|
|
*/
|
|
|
|
function verbindlichkeit_edit() {
|
|
$id = $this->app->Secure->GetGET('id');
|
|
|
|
// Check if other users are editing this id
|
|
if($this->app->erp->DisableModul('artikel',$id))
|
|
{
|
|
return;
|
|
}
|
|
|
|
$this->app->Tpl->Set('ID', $id);
|
|
|
|
$this->verbindlichkeit_menu($id);
|
|
|
|
$input = $this->GetInput();
|
|
$submit = $this->app->Secure->GetPOST('submit');
|
|
|
|
if (empty($id)) {
|
|
// New item
|
|
$id = 'NULL';
|
|
}
|
|
|
|
if ($submit != '')
|
|
{
|
|
|
|
// Write to database
|
|
|
|
// Add checks here
|
|
|
|
// $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); // Parameters: Target db?, value, from form?
|
|
$input['adresse'] = $this->app->erp->ReplaceAdresse(true,$input['adresse'],true); // Parameters: Target db?, value, from form?
|
|
|
|
$columns = "id, ";
|
|
$values = "$id, ";
|
|
$update = "";
|
|
|
|
$fix = "";
|
|
|
|
foreach ($input as $key => $value) {
|
|
$columns = $columns.$fix.$key;
|
|
$values = $values.$fix."'".$value."'";
|
|
$update = $update.$fix.$key." = '$value'";
|
|
|
|
$fix = ", ";
|
|
}
|
|
|
|
// echo($columns."<br>");
|
|
// echo($values."<br>");
|
|
// echo($update."<br>");
|
|
|
|
$sql = "INSERT INTO verbindlichkeit (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update;
|
|
|
|
// echo($sql);
|
|
|
|
$this->app->DB->Update($sql);
|
|
|
|
if ($id == 'NULL') {
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"success\">Das Element wurde erfolgreich angelegt.</div>");
|
|
header("Location: index.php?module=verbindlichkeit&action=list&msg=$msg");
|
|
} else {
|
|
$this->app->Tpl->Set('MESSAGE', "<div class=\"success\">Die Einstellungen wurden erfolgreich übernommen.</div>");
|
|
}
|
|
}
|
|
|
|
|
|
// Load values again from database
|
|
$dropnbox = "'<img src=./themes/new/images/details_open.png class=details>' AS `open`, CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',v.id,'\" />') AS `auswahl`";
|
|
$result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS v.id, $dropnbox, v.belegnr, v.status_beleg, v.schreibschutz, v.rechnung, v.zahlbarbis, v.betrag, v.umsatzsteuer, v.ustid, v.summenormal, v.summeermaessigt, v.summesatz3, v.summesatz4, v.steuersatzname3, v.steuersatzname4, v.skonto, v.skontobis, v.skontofestsetzen, v.freigabe, v.freigabemitarbeiter, v.bestellung, v.adresse, v.projekt, v.teilprojekt, v.auftrag, v.status, v.bezahlt, v.kontoauszuege, v.firma, v.logdatei, v.bestellung1, v.bestellung1betrag, v.bestellung1bemerkung, v.bestellung1projekt, v.bestellung1kostenstelle, v.bestellung1auftrag, v.bestellung2, v.bestellung2betrag, v.bestellung2bemerkung, v.bestellung2kostenstelle, v.bestellung2auftrag, v.bestellung2projekt, v.bestellung3, v.bestellung3betrag, v.bestellung3bemerkung, v.bestellung3kostenstelle, v.bestellung3auftrag, v.bestellung3projekt, v.bestellung4, v.bestellung4betrag, v.bestellung4bemerkung, v.bestellung4kostenstelle, v.bestellung4auftrag, v.bestellung4projekt, v.bestellung5, v.bestellung5betrag, v.bestellung5bemerkung, v.bestellung5kostenstelle, v.bestellung5auftrag, v.bestellung5projekt, v.bestellung6, v.bestellung6betrag, v.bestellung6bemerkung, v.bestellung6kostenstelle, v.bestellung6auftrag, v.bestellung6projekt, v.bestellung7, v.bestellung7betrag, v.bestellung7bemerkung, v.bestellung7kostenstelle, v.bestellung7auftrag, v.bestellung7projekt, v.bestellung8, v.bestellung8betrag, v.bestellung8bemerkung, v.bestellung8kostenstelle, v.bestellung8auftrag, v.bestellung8projekt, v.bestellung9, v.bestellung9betrag, v.bestellung9bemerkung, v.bestellung9kostenstelle, v.bestellung9auftrag, v.bestellung9projekt, v.bestellung10, v.bestellung10betrag, v.bestellung10bemerkung, v.bestellung10kostenstelle, v.bestellung10auftrag, v.bestellung10projekt, v.bestellung11, v.bestellung11betrag, v.bestellung11bemerkung, v.bestellung11kostenstelle, v.bestellung11auftrag, v.bestellung11projekt, v.bestellung12, v.bestellung12betrag, v.bestellung12bemerkung, v.bestellung12projekt, v.bestellung12kostenstelle, v.bestellung12auftrag, v.bestellung13, v.bestellung13betrag, v.bestellung13bemerkung, v.bestellung13kostenstelle, v.bestellung13auftrag, v.bestellung13projekt, v.bestellung14, v.bestellung14betrag, v.bestellung14bemerkung, v.bestellung14kostenstelle, v.bestellung14auftrag, v.bestellung14projekt, v.bestellung15, v.bestellung15betrag, v.bestellung15bemerkung, v.bestellung15kostenstelle, v.bestellung15auftrag, v.bestellung15projekt, v.waehrung, v.zahlungsweise, v.eingangsdatum, v.buha_konto1, v.buha_belegfeld1, v.buha_betrag1, v.buha_konto2, v.buha_belegfeld2, v.buha_betrag2, v.buha_konto3, v.buha_belegfeld3, v.buha_betrag3, v.buha_konto4, v.buha_belegfeld4, v.buha_betrag4, v.buha_konto5, v.buha_belegfeld5, v.buha_betrag5, v.rechnungsdatum, v.rechnungsfreigabe, v.kostenstelle, v.beschreibung, v.sachkonto, v.art, v.verwendungszweck, v.dta_datei, v.frachtkosten, v.internebemerkung, v.ustnormal, v.ustermaessigt, v.uststuer3, v.uststuer4, v.betragbezahlt, v.bezahltam, v.klaerfall, v.klaergrund, v.skonto_erhalten, v.kurs, v.sprache, v.id, a.lieferantennummer, a.name AS adresse_name FROM verbindlichkeit v LEFT JOIN adresse a ON a.id = v.adresse"." WHERE v.id=$id");
|
|
|
|
foreach ($result[0] as $key => $value) {
|
|
$this->app->Tpl->Set(strtoupper($key), $value);
|
|
}
|
|
|
|
if (!empty($result[0])) {
|
|
$verbindlichkeit_from_db = $result[0];
|
|
}
|
|
|
|
|
|
/*
|
|
* Add displayed items later
|
|
*
|
|
|
|
$this->app->Tpl->Add('KURZUEBERSCHRIFT2', $email);
|
|
$this->app->Tpl->Add('EMAIL', $email);
|
|
$this->app->Tpl->Add('ANGEZEIGTERNAME', $angezeigtername);
|
|
$this->app->YUI->AutoComplete("artikel", "artikelnummer");
|
|
|
|
*/
|
|
|
|
$this->app->Tpl->Add('KURZUEBERSCHRIFT2', $verbindlichkeit_from_db['adresse_name']." ".$verbindlichkeit_from_db['rechnung']);
|
|
|
|
$sql = "SELECT " . $this->app->YUI->IconsSQLVerbindlichkeit() . " AS `icons` FROM verbindlichkeit v WHERE id=$id";
|
|
$icons = $this->app->DB->SelectArr($sql);
|
|
$this->app->Tpl->Add('STATUSICONS', $icons[0]['icons']);
|
|
|
|
$this->app->YUI->AutoComplete("adresse", "adresse");
|
|
|
|
$waehrungenselect = $this->app->erp->GetSelect($this->app->erp->GetWaehrung(), $verbindlichkeit_from_db['waehrung']);
|
|
$this->app->Tpl->Set('WAEHRUNG', $waehrungenselect);
|
|
|
|
$this->app->Tpl->Set('ADRESSE_ID', $verbindlichkeit_from_db['adresse']);
|
|
|
|
$this->app->Tpl->Set('ADRESSE', $this->app->erp->ReplaceAdresse(false,$verbindlichkeit_from_db['adresse'],false)); // Convert ID to form display
|
|
|
|
$file = urlencode("../../../../index.php?module=verbindlichkeit&action=inlinepdf&id=$id");
|
|
$iframe = "<iframe width=\"100%\" height=\"100%\" style=\"height:calc(100vh - 110px)\" src=\"./js/production/generic/web/viewer.html?file=$file\"></iframe>";
|
|
$this->app->Tpl->Set('INLINEPDF', $iframe);
|
|
|
|
$this->app->Tpl->Parse('PAGE', "verbindlichkeit_edit.tpl");
|
|
}
|
|
|
|
/**
|
|
* Get all paramters from html form and save into $input
|
|
*/
|
|
public function GetInput(): array {
|
|
$input = array();
|
|
$input['adresse'] = $this->app->Secure->GetPOST('adresse');
|
|
$input['rechnung'] = $this->app->Secure->GetPOST('rechnung');
|
|
$input['zahlbarbis'] = $this->app->Secure->GetPOST('zahlbarbis');
|
|
$input['betrag'] = $this->app->Secure->GetPOST('betrag');
|
|
$input['waehrung'] = $this->app->Secure->GetPOST('waehrung');
|
|
$input['skonto'] = $this->app->Secure->GetPOST('skonto');
|
|
$input['skontobis'] = $this->app->Secure->GetPOST('skontobis');
|
|
$input['projekt'] = $this->app->Secure->GetPOST('projekt');
|
|
$input['bezahlt'] = $this->app->Secure->GetPOST('bezahlt');
|
|
$input['zahlungsweise'] = $this->app->Secure->GetPOST('zahlungsweise');
|
|
$input['eingangsdatum'] = $this->app->Secure->GetPOST('eingangsdatum');
|
|
$input['rechnungsdatum'] = $this->app->Secure->GetPOST('rechnungsdatum');
|
|
$input['freigabe'] = $this->app->Secure->GetPOST('freigabe');
|
|
$input['rechnungsfreigabe'] = $this->app->Secure->GetPOST('rechnungsfreigabe');
|
|
$input['kostenstelle'] = $this->app->Secure->GetPOST('kostenstelle');
|
|
$input['sachkonto'] = $this->app->Secure->GetPOST('sachkonto');
|
|
$input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung');
|
|
return $input;
|
|
}
|
|
|
|
function verbindlichkeit_menu($id) {
|
|
|
|
$anzahldateien = $this->app->erp->AnzahlDateien("verbindlichkeit",$id);
|
|
if ($anzahldateien > 0) {
|
|
$anzahldateien = " (".$anzahldateien.")";
|
|
} else {
|
|
$anzahldateien="";
|
|
}
|
|
$this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=edit&id=$id", "Details");
|
|
$this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=list", "Zurück zur Übersicht");
|
|
$this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=dateien&id=$id", "Dateien".$anzahldateien);
|
|
}
|
|
|
|
function verbindlichkeit_dateien()
|
|
{
|
|
$id = $this->app->Secure->GetGET("id");
|
|
$this->verbindlichkeit_menu($id);
|
|
$this->app->Tpl->Add('UEBERSCHRIFT'," (Dateien)");
|
|
$this->app->YUI->DateiUpload('PAGE',"verbindlichkeit",$id);
|
|
}
|
|
|
|
function verbindlichkeit_inlinepdf() {
|
|
$id = $this->app->Secure->GetGET('id');
|
|
|
|
$file_attachments = $this->app->erp->GetDateiSubjektObjekt('%','verbindlichkeit',$id);
|
|
|
|
if (!empty($file_attachments)) {
|
|
|
|
// print_r($file_attachments);
|
|
|
|
// Try to merge all PDFs
|
|
$file_paths = array();
|
|
foreach ($file_attachments as $file_attachment) {
|
|
if ($this->app->erp->GetDateiEndung($file_attachment) == 'pdf') {
|
|
$file_paths[] = $this->app->erp->GetDateiPfad($file_attachment);
|
|
}
|
|
}
|
|
$pdfMerger = $this->app->Container->get('PdfMerger');
|
|
$mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf';
|
|
try {
|
|
$pdfMerger->merge($file_paths, $mergeOutputPath);
|
|
header('Content-type:application/pdf');
|
|
header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf');
|
|
readfile($mergeOutputPath);
|
|
$this->app->ExitXentral();
|
|
} catch (\Xentral\Components\Pdf\Exception\PdfComponentExceptionInterface $exception) {
|
|
// Just the first PDF
|
|
foreach ($file_attachments as $file_attachment) {
|
|
if ($this->app->erp->GetDateiEndung($file_attachment) == 'pdf') {
|
|
$file_contents = $this->app->erp->GetDatei($file_attachment);
|
|
header('Content-type:application/pdf');
|
|
header('Content-Disposition: attachment;filename=verbindlichkeit_'.$id.'.pdf');
|
|
echo($file_contents);
|
|
$this->app->ExitXentral();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$this->app->ExitXentral();
|
|
}
|
|
}
|