From 626c75bbc1673faca3a6a1bcda4f4d41ae96e466 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Sun, 26 Nov 2023 12:46:42 +0100 Subject: [PATCH 01/62] verbindlichkeit initial --- www/pages/content/verbindlichkeit_list.tpl | 10 + www/pages/verbindlichkeit.php | 392 +++++++++++++++++++++ 2 files changed, 402 insertions(+) create mode 100644 www/pages/content/verbindlichkeit_list.tpl create mode 100644 www/pages/verbindlichkeit.php diff --git a/www/pages/content/verbindlichkeit_list.tpl b/www/pages/content/verbindlichkeit_list.tpl new file mode 100644 index 00000000..394c103a --- /dev/null +++ b/www/pages/content/verbindlichkeit_list.tpl @@ -0,0 +1,10 @@ +
+ +
+ [MESSAGE] + [TAB1] + [TAB1NEXT] +
+
diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php new file mode 100644 index 00000000..bcddb1f3 --- /dev/null +++ b/www/pages/verbindlichkeit.php @@ -0,0 +1,392 @@ +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->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); + + $dropnbox = "'' AS `open`, CONCAT('') 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 = "
" . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
"; + + $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', "
Der Eintrag wurde gelöscht.
"); + + $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->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"); + $id = $this->app->Secure->GetGET('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? + + $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."
"); +// echo($values."
"); +// echo($update."
"); + + $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("
Das Element wurde erfolgreich angelegt.
"); + header("Location: index.php?module=verbindlichkeit&action=list&msg=$msg"); + } else { + $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
"); + } + } + + + // Load values again from database + $dropnbox = "'' AS `open`, CONCAT('') 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 FROM verbindlichkeit v"." WHERE id=$id"); + + foreach ($result[0] as $key => $value) { + $this->app->Tpl->Set(strtoupper($key), $value); + } + + /* + * 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->SetInput($input); + $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['EMAIL'] = $this->app->Secure->GetPOST('email'); + + $input['belegnr'] = $this->app->Secure->GetPOST('belegnr'); + $input['status_beleg'] = $this->app->Secure->GetPOST('status_beleg'); + $input['schreibschutz'] = $this->app->Secure->GetPOST('schreibschutz'); + $input['rechnung'] = $this->app->Secure->GetPOST('rechnung'); + $input['zahlbarbis'] = $this->app->Secure->GetPOST('zahlbarbis'); + $input['betrag'] = $this->app->Secure->GetPOST('betrag'); + $input['umsatzsteuer'] = $this->app->Secure->GetPOST('umsatzsteuer'); + $input['ustid'] = $this->app->Secure->GetPOST('ustid'); + $input['summenormal'] = $this->app->Secure->GetPOST('summenormal'); + $input['summeermaessigt'] = $this->app->Secure->GetPOST('summeermaessigt'); + $input['summesatz3'] = $this->app->Secure->GetPOST('summesatz3'); + $input['summesatz4'] = $this->app->Secure->GetPOST('summesatz4'); + $input['steuersatzname3'] = $this->app->Secure->GetPOST('steuersatzname3'); + $input['steuersatzname4'] = $this->app->Secure->GetPOST('steuersatzname4'); + $input['skonto'] = $this->app->Secure->GetPOST('skonto'); + $input['skontobis'] = $this->app->Secure->GetPOST('skontobis'); + $input['skontofestsetzen'] = $this->app->Secure->GetPOST('skontofestsetzen'); + $input['freigabe'] = $this->app->Secure->GetPOST('freigabe'); + $input['freigabemitarbeiter'] = $this->app->Secure->GetPOST('freigabemitarbeiter'); + $input['bestellung'] = $this->app->Secure->GetPOST('bestellung'); + $input['adresse'] = $this->app->Secure->GetPOST('adresse'); + $input['projekt'] = $this->app->Secure->GetPOST('projekt'); + $input['teilprojekt'] = $this->app->Secure->GetPOST('teilprojekt'); + $input['auftrag'] = $this->app->Secure->GetPOST('auftrag'); + $input['status'] = $this->app->Secure->GetPOST('status'); + $input['bezahlt'] = $this->app->Secure->GetPOST('bezahlt'); + $input['kontoauszuege'] = $this->app->Secure->GetPOST('kontoauszuege'); + $input['firma'] = $this->app->Secure->GetPOST('firma'); + $input['logdatei'] = $this->app->Secure->GetPOST('logdatei'); + $input['bestellung1'] = $this->app->Secure->GetPOST('bestellung1'); + $input['bestellung1betrag'] = $this->app->Secure->GetPOST('bestellung1betrag'); + $input['bestellung1bemerkung'] = $this->app->Secure->GetPOST('bestellung1bemerkung'); + $input['bestellung1projekt'] = $this->app->Secure->GetPOST('bestellung1projekt'); + $input['bestellung1kostenstelle'] = $this->app->Secure->GetPOST('bestellung1kostenstelle'); + $input['bestellung1auftrag'] = $this->app->Secure->GetPOST('bestellung1auftrag'); + $input['bestellung2'] = $this->app->Secure->GetPOST('bestellung2'); + $input['bestellung2betrag'] = $this->app->Secure->GetPOST('bestellung2betrag'); + $input['bestellung2bemerkung'] = $this->app->Secure->GetPOST('bestellung2bemerkung'); + $input['bestellung2kostenstelle'] = $this->app->Secure->GetPOST('bestellung2kostenstelle'); + $input['bestellung2auftrag'] = $this->app->Secure->GetPOST('bestellung2auftrag'); + $input['bestellung2projekt'] = $this->app->Secure->GetPOST('bestellung2projekt'); + $input['bestellung3'] = $this->app->Secure->GetPOST('bestellung3'); + $input['bestellung3betrag'] = $this->app->Secure->GetPOST('bestellung3betrag'); + $input['bestellung3bemerkung'] = $this->app->Secure->GetPOST('bestellung3bemerkung'); + $input['bestellung3kostenstelle'] = $this->app->Secure->GetPOST('bestellung3kostenstelle'); + $input['bestellung3auftrag'] = $this->app->Secure->GetPOST('bestellung3auftrag'); + $input['bestellung3projekt'] = $this->app->Secure->GetPOST('bestellung3projekt'); + $input['bestellung4'] = $this->app->Secure->GetPOST('bestellung4'); + $input['bestellung4betrag'] = $this->app->Secure->GetPOST('bestellung4betrag'); + $input['bestellung4bemerkung'] = $this->app->Secure->GetPOST('bestellung4bemerkung'); + $input['bestellung4kostenstelle'] = $this->app->Secure->GetPOST('bestellung4kostenstelle'); + $input['bestellung4auftrag'] = $this->app->Secure->GetPOST('bestellung4auftrag'); + $input['bestellung4projekt'] = $this->app->Secure->GetPOST('bestellung4projekt'); + $input['bestellung5'] = $this->app->Secure->GetPOST('bestellung5'); + $input['bestellung5betrag'] = $this->app->Secure->GetPOST('bestellung5betrag'); + $input['bestellung5bemerkung'] = $this->app->Secure->GetPOST('bestellung5bemerkung'); + $input['bestellung5kostenstelle'] = $this->app->Secure->GetPOST('bestellung5kostenstelle'); + $input['bestellung5auftrag'] = $this->app->Secure->GetPOST('bestellung5auftrag'); + $input['bestellung5projekt'] = $this->app->Secure->GetPOST('bestellung5projekt'); + $input['bestellung6'] = $this->app->Secure->GetPOST('bestellung6'); + $input['bestellung6betrag'] = $this->app->Secure->GetPOST('bestellung6betrag'); + $input['bestellung6bemerkung'] = $this->app->Secure->GetPOST('bestellung6bemerkung'); + $input['bestellung6kostenstelle'] = $this->app->Secure->GetPOST('bestellung6kostenstelle'); + $input['bestellung6auftrag'] = $this->app->Secure->GetPOST('bestellung6auftrag'); + $input['bestellung6projekt'] = $this->app->Secure->GetPOST('bestellung6projekt'); + $input['bestellung7'] = $this->app->Secure->GetPOST('bestellung7'); + $input['bestellung7betrag'] = $this->app->Secure->GetPOST('bestellung7betrag'); + $input['bestellung7bemerkung'] = $this->app->Secure->GetPOST('bestellung7bemerkung'); + $input['bestellung7kostenstelle'] = $this->app->Secure->GetPOST('bestellung7kostenstelle'); + $input['bestellung7auftrag'] = $this->app->Secure->GetPOST('bestellung7auftrag'); + $input['bestellung7projekt'] = $this->app->Secure->GetPOST('bestellung7projekt'); + $input['bestellung8'] = $this->app->Secure->GetPOST('bestellung8'); + $input['bestellung8betrag'] = $this->app->Secure->GetPOST('bestellung8betrag'); + $input['bestellung8bemerkung'] = $this->app->Secure->GetPOST('bestellung8bemerkung'); + $input['bestellung8kostenstelle'] = $this->app->Secure->GetPOST('bestellung8kostenstelle'); + $input['bestellung8auftrag'] = $this->app->Secure->GetPOST('bestellung8auftrag'); + $input['bestellung8projekt'] = $this->app->Secure->GetPOST('bestellung8projekt'); + $input['bestellung9'] = $this->app->Secure->GetPOST('bestellung9'); + $input['bestellung9betrag'] = $this->app->Secure->GetPOST('bestellung9betrag'); + $input['bestellung9bemerkung'] = $this->app->Secure->GetPOST('bestellung9bemerkung'); + $input['bestellung9kostenstelle'] = $this->app->Secure->GetPOST('bestellung9kostenstelle'); + $input['bestellung9auftrag'] = $this->app->Secure->GetPOST('bestellung9auftrag'); + $input['bestellung9projekt'] = $this->app->Secure->GetPOST('bestellung9projekt'); + $input['bestellung10'] = $this->app->Secure->GetPOST('bestellung10'); + $input['bestellung10betrag'] = $this->app->Secure->GetPOST('bestellung10betrag'); + $input['bestellung10bemerkung'] = $this->app->Secure->GetPOST('bestellung10bemerkung'); + $input['bestellung10kostenstelle'] = $this->app->Secure->GetPOST('bestellung10kostenstelle'); + $input['bestellung10auftrag'] = $this->app->Secure->GetPOST('bestellung10auftrag'); + $input['bestellung10projekt'] = $this->app->Secure->GetPOST('bestellung10projekt'); + $input['bestellung11'] = $this->app->Secure->GetPOST('bestellung11'); + $input['bestellung11betrag'] = $this->app->Secure->GetPOST('bestellung11betrag'); + $input['bestellung11bemerkung'] = $this->app->Secure->GetPOST('bestellung11bemerkung'); + $input['bestellung11kostenstelle'] = $this->app->Secure->GetPOST('bestellung11kostenstelle'); + $input['bestellung11auftrag'] = $this->app->Secure->GetPOST('bestellung11auftrag'); + $input['bestellung11projekt'] = $this->app->Secure->GetPOST('bestellung11projekt'); + $input['bestellung12'] = $this->app->Secure->GetPOST('bestellung12'); + $input['bestellung12betrag'] = $this->app->Secure->GetPOST('bestellung12betrag'); + $input['bestellung12bemerkung'] = $this->app->Secure->GetPOST('bestellung12bemerkung'); + $input['bestellung12projekt'] = $this->app->Secure->GetPOST('bestellung12projekt'); + $input['bestellung12kostenstelle'] = $this->app->Secure->GetPOST('bestellung12kostenstelle'); + $input['bestellung12auftrag'] = $this->app->Secure->GetPOST('bestellung12auftrag'); + $input['bestellung13'] = $this->app->Secure->GetPOST('bestellung13'); + $input['bestellung13betrag'] = $this->app->Secure->GetPOST('bestellung13betrag'); + $input['bestellung13bemerkung'] = $this->app->Secure->GetPOST('bestellung13bemerkung'); + $input['bestellung13kostenstelle'] = $this->app->Secure->GetPOST('bestellung13kostenstelle'); + $input['bestellung13auftrag'] = $this->app->Secure->GetPOST('bestellung13auftrag'); + $input['bestellung13projekt'] = $this->app->Secure->GetPOST('bestellung13projekt'); + $input['bestellung14'] = $this->app->Secure->GetPOST('bestellung14'); + $input['bestellung14betrag'] = $this->app->Secure->GetPOST('bestellung14betrag'); + $input['bestellung14bemerkung'] = $this->app->Secure->GetPOST('bestellung14bemerkung'); + $input['bestellung14kostenstelle'] = $this->app->Secure->GetPOST('bestellung14kostenstelle'); + $input['bestellung14auftrag'] = $this->app->Secure->GetPOST('bestellung14auftrag'); + $input['bestellung14projekt'] = $this->app->Secure->GetPOST('bestellung14projekt'); + $input['bestellung15'] = $this->app->Secure->GetPOST('bestellung15'); + $input['bestellung15betrag'] = $this->app->Secure->GetPOST('bestellung15betrag'); + $input['bestellung15bemerkung'] = $this->app->Secure->GetPOST('bestellung15bemerkung'); + $input['bestellung15kostenstelle'] = $this->app->Secure->GetPOST('bestellung15kostenstelle'); + $input['bestellung15auftrag'] = $this->app->Secure->GetPOST('bestellung15auftrag'); + $input['bestellung15projekt'] = $this->app->Secure->GetPOST('bestellung15projekt'); + $input['waehrung'] = $this->app->Secure->GetPOST('waehrung'); + $input['zahlungsweise'] = $this->app->Secure->GetPOST('zahlungsweise'); + $input['eingangsdatum'] = $this->app->Secure->GetPOST('eingangsdatum'); + $input['buha_konto1'] = $this->app->Secure->GetPOST('buha_konto1'); + $input['buha_belegfeld1'] = $this->app->Secure->GetPOST('buha_belegfeld1'); + $input['buha_betrag1'] = $this->app->Secure->GetPOST('buha_betrag1'); + $input['buha_konto2'] = $this->app->Secure->GetPOST('buha_konto2'); + $input['buha_belegfeld2'] = $this->app->Secure->GetPOST('buha_belegfeld2'); + $input['buha_betrag2'] = $this->app->Secure->GetPOST('buha_betrag2'); + $input['buha_konto3'] = $this->app->Secure->GetPOST('buha_konto3'); + $input['buha_belegfeld3'] = $this->app->Secure->GetPOST('buha_belegfeld3'); + $input['buha_betrag3'] = $this->app->Secure->GetPOST('buha_betrag3'); + $input['buha_konto4'] = $this->app->Secure->GetPOST('buha_konto4'); + $input['buha_belegfeld4'] = $this->app->Secure->GetPOST('buha_belegfeld4'); + $input['buha_betrag4'] = $this->app->Secure->GetPOST('buha_betrag4'); + $input['buha_konto5'] = $this->app->Secure->GetPOST('buha_konto5'); + $input['buha_belegfeld5'] = $this->app->Secure->GetPOST('buha_belegfeld5'); + $input['buha_betrag5'] = $this->app->Secure->GetPOST('buha_betrag5'); + $input['rechnungsdatum'] = $this->app->Secure->GetPOST('rechnungsdatum'); + $input['rechnungsfreigabe'] = $this->app->Secure->GetPOST('rechnungsfreigabe'); + $input['kostenstelle'] = $this->app->Secure->GetPOST('kostenstelle'); + $input['beschreibung'] = $this->app->Secure->GetPOST('beschreibung'); + $input['sachkonto'] = $this->app->Secure->GetPOST('sachkonto'); + $input['art'] = $this->app->Secure->GetPOST('art'); + $input['verwendungszweck'] = $this->app->Secure->GetPOST('verwendungszweck'); + $input['dta_datei'] = $this->app->Secure->GetPOST('dta_datei'); + $input['frachtkosten'] = $this->app->Secure->GetPOST('frachtkosten'); + $input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung'); + $input['ustnormal'] = $this->app->Secure->GetPOST('ustnormal'); + $input['ustermaessigt'] = $this->app->Secure->GetPOST('ustermaessigt'); + $input['uststuer3'] = $this->app->Secure->GetPOST('uststuer3'); + $input['uststuer4'] = $this->app->Secure->GetPOST('uststuer4'); + $input['betragbezahlt'] = $this->app->Secure->GetPOST('betragbezahlt'); + $input['bezahltam'] = $this->app->Secure->GetPOST('bezahltam'); + $input['klaerfall'] = $this->app->Secure->GetPOST('klaerfall'); + $input['klaergrund'] = $this->app->Secure->GetPOST('klaergrund'); + $input['skonto_erhalten'] = $this->app->Secure->GetPOST('skonto_erhalten'); + $input['kurs'] = $this->app->Secure->GetPOST('kurs'); + $input['sprache'] = $this->app->Secure->GetPOST('sprache'); + + + return $input; + } + } From bbf8b071c076a5f49b495701743da6b002e0ab2f Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Thu, 30 Nov 2023 19:39:11 +0100 Subject: [PATCH 02/62] Zwischenstand --- .../module_creator_php_template.txt | 13 +- www/lib/class.erpapi.php | 4 +- www/pages/_gen/adresse.php | 112 +++---- www/pages/ajax.php | 27 +- www/pages/content/verbindlichkeit_edit.tpl | 188 ++++++++++++ www/pages/verbindlichkeit.php | 281 +++++++----------- 6 files changed, 373 insertions(+), 252 deletions(-) create mode 100644 www/pages/content/verbindlichkeit_edit.tpl diff --git a/tools/module_creator/module_creator_php_template.txt b/tools/module_creator/module_creator_php_template.txt index 693723a0..51402e00 100644 --- a/tools/module_creator/module_creator_php_template.txt +++ b/tools/module_creator/module_creator_php_template.txt @@ -41,6 +41,10 @@ class PLACEHOLDER_MODULECLASSNAME { $defaultorder = 1; $defaultorderdesc = 0; + $aligncenter = array(); + $alignright = array(); + $numbercols = array(); + $sumcol = array(); $dropnbox = "PLACEHOLDER_DROPNBOX"; @@ -159,11 +163,17 @@ class PLACEHOLDER_MODULECLASSNAME { // Load values again from database $dropnbox = "PLACEHOLDER_DROPNBOX"; - $result = $this->app->DB->SelectArr("PLACEHOLDER_SQL_LIST"." WHERE id=$id"); + $result = $this->app->DB->SelectArr("PLACEHOLDER_SQL_LIST"." WHERE id=$id"); foreach ($result[0] as $key => $value) { $this->app->Tpl->Set(strtoupper($key), $value); } + + if (!empty($result)) { + $PLACEHOLDER_MODULENAME_from_db = $result[0]; + } else { + return; + } /* * Add displayed items later @@ -177,7 +187,6 @@ class PLACEHOLDER_MODULECLASSNAME { */ -// $this->SetInput($input); $this->app->Tpl->Parse('PAGE', "PLACEHOLDER_MODULENAME_edit.tpl"); } diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 22adef90..b26ef436 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -2676,7 +2676,7 @@ public function NavigationHooks(&$menu) // @refactor in Dateien Modul function AnzahlDateien($objekt,$id) { - return $this->app->DB->Select("SELECT COUNT(id) FROM datei_stichwoerter WHERE objekt='$objekt' AND parameter='$id'"); + return $this->app->DB->Select("SELECT COUNT(ds.id) FROM datei_stichwoerter ds INNER JOIN datei d ON d.id = ds.datei WHERE ds.objekt='$objekt' AND ds.parameter='$id' AND d.geloescht <> 1"); } @@ -37298,7 +37298,7 @@ function Firmendaten($field,$projekt="") function GetDateiSubjektObjekt($subjekt,$objekt,$parameter) { - $dateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE subjekt LIKE '$subjekt' AND objekt LIKE '$objekt' AND parameter='$parameter' GROUP by datei"); + $dateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter INNER JOIN datei d on d.id = datei WHERE subjekt LIKE '$subjekt' AND objekt LIKE '$objekt' AND parameter='$parameter' AND d.geloescht <> 1 GROUP by datei"); if(empty($dateien)) { return null; } diff --git a/www/pages/_gen/adresse.php b/www/pages/_gen/adresse.php index 1dbb44b8..bf3fe3f9 100644 --- a/www/pages/_gen/adresse.php +++ b/www/pages/_gen/adresse.php @@ -1,59 +1,59 @@ -app=&$app; - $this->app->ActionHandlerInit($this); - - $this->app->ActionHandler("create","AdresseCreate"); - $this->app->ActionHandler("edit","AdresseEdit"); - $this->app->ActionHandler("copy","AdresseCopy"); - $this->app->ActionHandler("list","AdresseList"); - $this->app->ActionHandler("delete","AdresseDelete"); - - $this->app->Tpl->Set("HEADING","Adresse"); //$this->app->ActionHandlerListen($app); - } - - function AdresseCreate(){ - $this->app->Tpl->Set("HEADING","Adresse (Anlegen)"); - $this->app->PageBuilder->CreateGen("adresse_create.tpl"); - } - - function AdresseEdit(){ - $this->app->Tpl->Set("HEADING","Adresse (Bearbeiten)"); - $this->app->PageBuilder->CreateGen("adresse_edit.tpl"); - } - - function AdresseCopy(){ - $this->app->Tpl->Set("HEADING","Adresse (Kopieren)"); - $this->app->PageBuilder->CreateGen("adresse_copy.tpl"); - } - - function AdresseDelete(){ - $this->app->Tpl->Set("HEADING","Adresse (Löschen)"); - $this->app->PageBuilder->CreateGen("adresse_delete.tpl"); - } - - function AdresseList(){ - $this->app->Tpl->Set("HEADING","Adresse (Übersicht)"); - $this->app->PageBuilder->CreateGen("adresse_list.tpl"); - } - -} -?> \ No newline at end of file +app=&$app; + $this->app->ActionHandlerInit($this); + + $this->app->ActionHandler("create","AdresseCreate"); + $this->app->ActionHandler("edit","AdresseEdit"); + $this->app->ActionHandler("copy","AdresseCopy"); + $this->app->ActionHandler("list","AdresseList"); + $this->app->ActionHandler("delete","AdresseDelete"); + + $this->app->Tpl->Set("HEADING","Adresse"); //$this->app->ActionHandlerListen($app); + } + + function AdresseCreate(){ + $this->app->Tpl->Set("HEADING","Adresse (Anlegen)"); + $this->app->PageBuilder->CreateGen("adresse_create.tpl"); + } + + function AdresseEdit(){ + $this->app->Tpl->Set("HEADING","Adresse (Bearbeiten)"); + $this->app->PageBuilder->CreateGen("adresse_edit.tpl"); + } + + function AdresseCopy(){ + $this->app->Tpl->Set("HEADING","Adresse (Kopieren)"); + $this->app->PageBuilder->CreateGen("adresse_copy.tpl"); + } + + function AdresseDelete(){ + $this->app->Tpl->Set("HEADING","Adresse (Löschen)"); + $this->app->PageBuilder->CreateGen("adresse_delete.tpl"); + } + + function AdresseList(){ + $this->app->Tpl->Set("HEADING","Adresse (Übersicht)"); + $this->app->PageBuilder->CreateGen("adresse_list.tpl"); + } + +} +?> diff --git a/www/pages/ajax.php b/www/pages/ajax.php index 7c9ae905..6eda4979 100644 --- a/www/pages/ajax.php +++ b/www/pages/ajax.php @@ -674,6 +674,7 @@ class Ajax { echo $str; exit; } + if(!empty($datei['parameter'])) { if($cmd === 'projekt') { if(!$this->app->erp->UserProjektRecht($datei['parameter'])) { @@ -707,8 +708,7 @@ class Ajax { } } } - //Rechte prüfen - + //Rechte prüfen $userdata = isset($this->app->Conf->WFuserdata) ?$this->app->Conf->WFuserdata :(str_replace('index.php', '', $_SERVER['SCRIPT_FILENAME']).'../userdata'); @@ -746,34 +746,17 @@ class Ajax { exit; break; case 'application/pdf': - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/pdf.svg'); + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/pdf.png'); header('Content-type: image/png'); echo $str; exit; break; - default: - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/pdf.svg'); - if(substr(strtolower($datei['dateiname']),-4) === '.gif'){ - header('Content-type: image/gif'); - echo $str; - exit; - } - if(substr(strtolower($datei['dateiname']),-4) === '.png'){ - header('Content-type: image/png'); - echo $str; - exit; - } - if(substr(strtolower($datei['dateiname']),-4) === '.jpg' - || substr(strtolower($datei['dateiname']),-4) === 'jpeg'){ - header('Content-type: image/jpg'); - echo $str; - exit; - } + default: break; } } } - + if(file_exists($cachefolder.'/'.$datei['id'].'_100_100')) { $type = is_file($path.'/'.$datei['id'])? false : mime_content_type($path.'/'.$datei['id']); if($type === false) { diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl new file mode 100644 index 00000000..5490fa4d --- /dev/null +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -0,0 +1,188 @@ +
+ + +
+ [MESSAGE] +
+ [FORMHANDLEREVENT] +
+
+
+
+
+
+
+
+
+ {|Verbindlichkeit [BELEGNR] Lf-Nr. [LIEFERANTENNUMMER]|} + [STATUSICONS] +
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {|Adresse|}: + + +
+ {|Rechnung|}: + + +
+ {|Rechnungsdatum|}: + + +
+ {|Betrag|}: + + + +
+ {|Zahlbarbis|}: + + +
+ {|Projekt|}: + + +
+ {|Eingangsdatum|}: + + +
+ {|Zahlungsweise|}: + + +
+ {|Skonto|}: + + +
+ {|Skontobis|}: + + +
+ {|Kostenstelle|}: + + +
+ {|Sachkonto|}: + + +
+ {|Waren-/Leistungsprüfung (Einkauf)|}: + + +
+ {|Rechnungseingangsprüfung (Buchhaltung)|}: + + +
+ {|Bezahlt|}: + + +
+ {|Internebemerkung|}: + + +
+
+
+
+
+
+
+
+
+
+
+ {|Vorschau|} + [INLINEPDF] +
+
+
+
+
+ +
+
+
+ diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index bcddb1f3..290b8231 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -18,6 +18,8 @@ class Verbindlichkeit { $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); } @@ -63,6 +65,7 @@ class Verbindlichkeit { $defaultorder = 1; $defaultorderdesc = 0; $alignright = array(8); + $sumcol = array(8); $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; @@ -143,9 +146,8 @@ class Verbindlichkeit { $this->app->Tpl->Set('ID', $id); - $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"); - $id = $this->app->Secure->GetGET('id'); + $this->verbindlichkeit_menu($id); + $input = $this->GetInput(); $submit = $this->app->Secure->GetPOST('submit'); @@ -162,6 +164,7 @@ class Verbindlichkeit { // 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, "; @@ -198,12 +201,17 @@ class Verbindlichkeit { // Load values again from database $dropnbox = "'' AS `open`, CONCAT('') 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 FROM verbindlichkeit v"." WHERE id=$id"); + $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 * @@ -211,12 +219,29 @@ class Verbindlichkeit { $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->SetInput($input); + $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 = ""; + $this->app->Tpl->Set('INLINEPDF', $iframe); + $this->app->Tpl->Parse('PAGE', "verbindlichkeit_edit.tpl"); } @@ -225,168 +250,84 @@ class Verbindlichkeit { */ public function GetInput(): array { $input = array(); - //$input['EMAIL'] = $this->app->Secure->GetPOST('email'); - - $input['belegnr'] = $this->app->Secure->GetPOST('belegnr'); - $input['status_beleg'] = $this->app->Secure->GetPOST('status_beleg'); - $input['schreibschutz'] = $this->app->Secure->GetPOST('schreibschutz'); - $input['rechnung'] = $this->app->Secure->GetPOST('rechnung'); - $input['zahlbarbis'] = $this->app->Secure->GetPOST('zahlbarbis'); - $input['betrag'] = $this->app->Secure->GetPOST('betrag'); - $input['umsatzsteuer'] = $this->app->Secure->GetPOST('umsatzsteuer'); - $input['ustid'] = $this->app->Secure->GetPOST('ustid'); - $input['summenormal'] = $this->app->Secure->GetPOST('summenormal'); - $input['summeermaessigt'] = $this->app->Secure->GetPOST('summeermaessigt'); - $input['summesatz3'] = $this->app->Secure->GetPOST('summesatz3'); - $input['summesatz4'] = $this->app->Secure->GetPOST('summesatz4'); - $input['steuersatzname3'] = $this->app->Secure->GetPOST('steuersatzname3'); - $input['steuersatzname4'] = $this->app->Secure->GetPOST('steuersatzname4'); - $input['skonto'] = $this->app->Secure->GetPOST('skonto'); - $input['skontobis'] = $this->app->Secure->GetPOST('skontobis'); - $input['skontofestsetzen'] = $this->app->Secure->GetPOST('skontofestsetzen'); - $input['freigabe'] = $this->app->Secure->GetPOST('freigabe'); - $input['freigabemitarbeiter'] = $this->app->Secure->GetPOST('freigabemitarbeiter'); - $input['bestellung'] = $this->app->Secure->GetPOST('bestellung'); - $input['adresse'] = $this->app->Secure->GetPOST('adresse'); - $input['projekt'] = $this->app->Secure->GetPOST('projekt'); - $input['teilprojekt'] = $this->app->Secure->GetPOST('teilprojekt'); - $input['auftrag'] = $this->app->Secure->GetPOST('auftrag'); - $input['status'] = $this->app->Secure->GetPOST('status'); - $input['bezahlt'] = $this->app->Secure->GetPOST('bezahlt'); - $input['kontoauszuege'] = $this->app->Secure->GetPOST('kontoauszuege'); - $input['firma'] = $this->app->Secure->GetPOST('firma'); - $input['logdatei'] = $this->app->Secure->GetPOST('logdatei'); - $input['bestellung1'] = $this->app->Secure->GetPOST('bestellung1'); - $input['bestellung1betrag'] = $this->app->Secure->GetPOST('bestellung1betrag'); - $input['bestellung1bemerkung'] = $this->app->Secure->GetPOST('bestellung1bemerkung'); - $input['bestellung1projekt'] = $this->app->Secure->GetPOST('bestellung1projekt'); - $input['bestellung1kostenstelle'] = $this->app->Secure->GetPOST('bestellung1kostenstelle'); - $input['bestellung1auftrag'] = $this->app->Secure->GetPOST('bestellung1auftrag'); - $input['bestellung2'] = $this->app->Secure->GetPOST('bestellung2'); - $input['bestellung2betrag'] = $this->app->Secure->GetPOST('bestellung2betrag'); - $input['bestellung2bemerkung'] = $this->app->Secure->GetPOST('bestellung2bemerkung'); - $input['bestellung2kostenstelle'] = $this->app->Secure->GetPOST('bestellung2kostenstelle'); - $input['bestellung2auftrag'] = $this->app->Secure->GetPOST('bestellung2auftrag'); - $input['bestellung2projekt'] = $this->app->Secure->GetPOST('bestellung2projekt'); - $input['bestellung3'] = $this->app->Secure->GetPOST('bestellung3'); - $input['bestellung3betrag'] = $this->app->Secure->GetPOST('bestellung3betrag'); - $input['bestellung3bemerkung'] = $this->app->Secure->GetPOST('bestellung3bemerkung'); - $input['bestellung3kostenstelle'] = $this->app->Secure->GetPOST('bestellung3kostenstelle'); - $input['bestellung3auftrag'] = $this->app->Secure->GetPOST('bestellung3auftrag'); - $input['bestellung3projekt'] = $this->app->Secure->GetPOST('bestellung3projekt'); - $input['bestellung4'] = $this->app->Secure->GetPOST('bestellung4'); - $input['bestellung4betrag'] = $this->app->Secure->GetPOST('bestellung4betrag'); - $input['bestellung4bemerkung'] = $this->app->Secure->GetPOST('bestellung4bemerkung'); - $input['bestellung4kostenstelle'] = $this->app->Secure->GetPOST('bestellung4kostenstelle'); - $input['bestellung4auftrag'] = $this->app->Secure->GetPOST('bestellung4auftrag'); - $input['bestellung4projekt'] = $this->app->Secure->GetPOST('bestellung4projekt'); - $input['bestellung5'] = $this->app->Secure->GetPOST('bestellung5'); - $input['bestellung5betrag'] = $this->app->Secure->GetPOST('bestellung5betrag'); - $input['bestellung5bemerkung'] = $this->app->Secure->GetPOST('bestellung5bemerkung'); - $input['bestellung5kostenstelle'] = $this->app->Secure->GetPOST('bestellung5kostenstelle'); - $input['bestellung5auftrag'] = $this->app->Secure->GetPOST('bestellung5auftrag'); - $input['bestellung5projekt'] = $this->app->Secure->GetPOST('bestellung5projekt'); - $input['bestellung6'] = $this->app->Secure->GetPOST('bestellung6'); - $input['bestellung6betrag'] = $this->app->Secure->GetPOST('bestellung6betrag'); - $input['bestellung6bemerkung'] = $this->app->Secure->GetPOST('bestellung6bemerkung'); - $input['bestellung6kostenstelle'] = $this->app->Secure->GetPOST('bestellung6kostenstelle'); - $input['bestellung6auftrag'] = $this->app->Secure->GetPOST('bestellung6auftrag'); - $input['bestellung6projekt'] = $this->app->Secure->GetPOST('bestellung6projekt'); - $input['bestellung7'] = $this->app->Secure->GetPOST('bestellung7'); - $input['bestellung7betrag'] = $this->app->Secure->GetPOST('bestellung7betrag'); - $input['bestellung7bemerkung'] = $this->app->Secure->GetPOST('bestellung7bemerkung'); - $input['bestellung7kostenstelle'] = $this->app->Secure->GetPOST('bestellung7kostenstelle'); - $input['bestellung7auftrag'] = $this->app->Secure->GetPOST('bestellung7auftrag'); - $input['bestellung7projekt'] = $this->app->Secure->GetPOST('bestellung7projekt'); - $input['bestellung8'] = $this->app->Secure->GetPOST('bestellung8'); - $input['bestellung8betrag'] = $this->app->Secure->GetPOST('bestellung8betrag'); - $input['bestellung8bemerkung'] = $this->app->Secure->GetPOST('bestellung8bemerkung'); - $input['bestellung8kostenstelle'] = $this->app->Secure->GetPOST('bestellung8kostenstelle'); - $input['bestellung8auftrag'] = $this->app->Secure->GetPOST('bestellung8auftrag'); - $input['bestellung8projekt'] = $this->app->Secure->GetPOST('bestellung8projekt'); - $input['bestellung9'] = $this->app->Secure->GetPOST('bestellung9'); - $input['bestellung9betrag'] = $this->app->Secure->GetPOST('bestellung9betrag'); - $input['bestellung9bemerkung'] = $this->app->Secure->GetPOST('bestellung9bemerkung'); - $input['bestellung9kostenstelle'] = $this->app->Secure->GetPOST('bestellung9kostenstelle'); - $input['bestellung9auftrag'] = $this->app->Secure->GetPOST('bestellung9auftrag'); - $input['bestellung9projekt'] = $this->app->Secure->GetPOST('bestellung9projekt'); - $input['bestellung10'] = $this->app->Secure->GetPOST('bestellung10'); - $input['bestellung10betrag'] = $this->app->Secure->GetPOST('bestellung10betrag'); - $input['bestellung10bemerkung'] = $this->app->Secure->GetPOST('bestellung10bemerkung'); - $input['bestellung10kostenstelle'] = $this->app->Secure->GetPOST('bestellung10kostenstelle'); - $input['bestellung10auftrag'] = $this->app->Secure->GetPOST('bestellung10auftrag'); - $input['bestellung10projekt'] = $this->app->Secure->GetPOST('bestellung10projekt'); - $input['bestellung11'] = $this->app->Secure->GetPOST('bestellung11'); - $input['bestellung11betrag'] = $this->app->Secure->GetPOST('bestellung11betrag'); - $input['bestellung11bemerkung'] = $this->app->Secure->GetPOST('bestellung11bemerkung'); - $input['bestellung11kostenstelle'] = $this->app->Secure->GetPOST('bestellung11kostenstelle'); - $input['bestellung11auftrag'] = $this->app->Secure->GetPOST('bestellung11auftrag'); - $input['bestellung11projekt'] = $this->app->Secure->GetPOST('bestellung11projekt'); - $input['bestellung12'] = $this->app->Secure->GetPOST('bestellung12'); - $input['bestellung12betrag'] = $this->app->Secure->GetPOST('bestellung12betrag'); - $input['bestellung12bemerkung'] = $this->app->Secure->GetPOST('bestellung12bemerkung'); - $input['bestellung12projekt'] = $this->app->Secure->GetPOST('bestellung12projekt'); - $input['bestellung12kostenstelle'] = $this->app->Secure->GetPOST('bestellung12kostenstelle'); - $input['bestellung12auftrag'] = $this->app->Secure->GetPOST('bestellung12auftrag'); - $input['bestellung13'] = $this->app->Secure->GetPOST('bestellung13'); - $input['bestellung13betrag'] = $this->app->Secure->GetPOST('bestellung13betrag'); - $input['bestellung13bemerkung'] = $this->app->Secure->GetPOST('bestellung13bemerkung'); - $input['bestellung13kostenstelle'] = $this->app->Secure->GetPOST('bestellung13kostenstelle'); - $input['bestellung13auftrag'] = $this->app->Secure->GetPOST('bestellung13auftrag'); - $input['bestellung13projekt'] = $this->app->Secure->GetPOST('bestellung13projekt'); - $input['bestellung14'] = $this->app->Secure->GetPOST('bestellung14'); - $input['bestellung14betrag'] = $this->app->Secure->GetPOST('bestellung14betrag'); - $input['bestellung14bemerkung'] = $this->app->Secure->GetPOST('bestellung14bemerkung'); - $input['bestellung14kostenstelle'] = $this->app->Secure->GetPOST('bestellung14kostenstelle'); - $input['bestellung14auftrag'] = $this->app->Secure->GetPOST('bestellung14auftrag'); - $input['bestellung14projekt'] = $this->app->Secure->GetPOST('bestellung14projekt'); - $input['bestellung15'] = $this->app->Secure->GetPOST('bestellung15'); - $input['bestellung15betrag'] = $this->app->Secure->GetPOST('bestellung15betrag'); - $input['bestellung15bemerkung'] = $this->app->Secure->GetPOST('bestellung15bemerkung'); - $input['bestellung15kostenstelle'] = $this->app->Secure->GetPOST('bestellung15kostenstelle'); - $input['bestellung15auftrag'] = $this->app->Secure->GetPOST('bestellung15auftrag'); - $input['bestellung15projekt'] = $this->app->Secure->GetPOST('bestellung15projekt'); - $input['waehrung'] = $this->app->Secure->GetPOST('waehrung'); - $input['zahlungsweise'] = $this->app->Secure->GetPOST('zahlungsweise'); - $input['eingangsdatum'] = $this->app->Secure->GetPOST('eingangsdatum'); - $input['buha_konto1'] = $this->app->Secure->GetPOST('buha_konto1'); - $input['buha_belegfeld1'] = $this->app->Secure->GetPOST('buha_belegfeld1'); - $input['buha_betrag1'] = $this->app->Secure->GetPOST('buha_betrag1'); - $input['buha_konto2'] = $this->app->Secure->GetPOST('buha_konto2'); - $input['buha_belegfeld2'] = $this->app->Secure->GetPOST('buha_belegfeld2'); - $input['buha_betrag2'] = $this->app->Secure->GetPOST('buha_betrag2'); - $input['buha_konto3'] = $this->app->Secure->GetPOST('buha_konto3'); - $input['buha_belegfeld3'] = $this->app->Secure->GetPOST('buha_belegfeld3'); - $input['buha_betrag3'] = $this->app->Secure->GetPOST('buha_betrag3'); - $input['buha_konto4'] = $this->app->Secure->GetPOST('buha_konto4'); - $input['buha_belegfeld4'] = $this->app->Secure->GetPOST('buha_belegfeld4'); - $input['buha_betrag4'] = $this->app->Secure->GetPOST('buha_betrag4'); - $input['buha_konto5'] = $this->app->Secure->GetPOST('buha_konto5'); - $input['buha_belegfeld5'] = $this->app->Secure->GetPOST('buha_belegfeld5'); - $input['buha_betrag5'] = $this->app->Secure->GetPOST('buha_betrag5'); - $input['rechnungsdatum'] = $this->app->Secure->GetPOST('rechnungsdatum'); - $input['rechnungsfreigabe'] = $this->app->Secure->GetPOST('rechnungsfreigabe'); - $input['kostenstelle'] = $this->app->Secure->GetPOST('kostenstelle'); - $input['beschreibung'] = $this->app->Secure->GetPOST('beschreibung'); - $input['sachkonto'] = $this->app->Secure->GetPOST('sachkonto'); - $input['art'] = $this->app->Secure->GetPOST('art'); - $input['verwendungszweck'] = $this->app->Secure->GetPOST('verwendungszweck'); - $input['dta_datei'] = $this->app->Secure->GetPOST('dta_datei'); - $input['frachtkosten'] = $this->app->Secure->GetPOST('frachtkosten'); - $input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung'); - $input['ustnormal'] = $this->app->Secure->GetPOST('ustnormal'); - $input['ustermaessigt'] = $this->app->Secure->GetPOST('ustermaessigt'); - $input['uststuer3'] = $this->app->Secure->GetPOST('uststuer3'); - $input['uststuer4'] = $this->app->Secure->GetPOST('uststuer4'); - $input['betragbezahlt'] = $this->app->Secure->GetPOST('betragbezahlt'); - $input['bezahltam'] = $this->app->Secure->GetPOST('bezahltam'); - $input['klaerfall'] = $this->app->Secure->GetPOST('klaerfall'); - $input['klaergrund'] = $this->app->Secure->GetPOST('klaergrund'); - $input['skonto_erhalten'] = $this->app->Secure->GetPOST('skonto_erhalten'); - $input['kurs'] = $this->app->Secure->GetPOST('kurs'); - $input['sprache'] = $this->app->Secure->GetPOST('sprache'); - - + $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(); + } +} From 57f0e2f6275492ea887e98f618204ac6b07eeac4 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Mon, 11 Dec 2023 22:17:28 +0100 Subject: [PATCH 03/62] verbindlichkeit added positionen with sachkonto --- phpwf/plugins/class.yui.php | 17 +- upgrade/data/db_schema.json | 13 +- .../object.gen.verbindlichkeit_position.php | 476 +++++++++--------- www/pages/ajax.php | 7 + www/pages/content/verbindlichkeit_edit.tpl | 12 +- www/pages/verbindlichkeit.php | 72 +++ .../widget.gen.verbindlichkeit_position.php | 255 +++++----- .../_gen/verbindlichkeit_position.tpl | 62 ++- .../widget.verbindlichkeit_position.php | 7 + 9 files changed, 524 insertions(+), 397 deletions(-) diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index ecf58f9c..5cf512ef 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -2563,7 +2563,7 @@ class YUI { $anzeigebrutto = true; } } - + $sortcol = ' b.sort '; $schreibschutz = !empty($docArr)?$docArr['schreibschutz']:$this->app->DB->Select("SELECT schreibschutz FROM $module WHERE id='$id'"); if(!$schreibschutz)$sortcol = " concat('',b.sort) as sort "; @@ -2853,7 +2853,20 @@ class YUI { LEFT JOIN artikel a ON a.id=b.artikel LEFT JOIN projekt p ON b.projekt=p.id WHERE b.$module='$id'"; - } else { + } + else if ($module == "verbindlichkeit") // OpenXE + { + $sql = "SELECT $sortcol, if(b.beschreibung!='', + if(CHAR_LENGTH(b.bezeichnung)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(CONCAT(b.bezeichnung,' *'),1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),CONCAT(b.bezeichnung,' *')), + if(CHAR_LENGTH(b.bezeichnung)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(b.bezeichnung,1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),b.bezeichnung)) + as Artikel, + p.abkuerzung as projekt, a.nummer as nummer, b.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum, trim(b.menge)+0 as menge, " . $this->FormatPreis($preiscell) . " as preis, CONCAT(k.sachkonto,' - ',k.beschriftung) AS sachkonto, b.id as id + FROM $table b + LEFT JOIN artikel a ON a.id=b.artikel LEFT JOIN projekt p ON b.projekt=p.id + LEFT JOIN kontorahmen k ON k.id = b.sachkonto + WHERE b.$module='$id'"; + } + else { $sql = null; $this->app->erp->RunHook('yui_position_sql', 3, $table, $id, $sql); if($sql === null){ diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json index 4526dc4a..0cdae6d1 100644 --- a/upgrade/data/db_schema.json +++ b/upgrade/data/db_schema.json @@ -104773,7 +104773,7 @@ }, { "Field": "adresse", - "Type": "int", + "Type": "int(11)", "Collation": null, "Null": "NO", "Key": "", @@ -111280,6 +111280,17 @@ "Extra": "", "Privileges": "select,insert,update,references", "Comment": "" + }, + { + "Field": "sachkonto", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": "0", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" } ], "keys": [ diff --git a/www/objectapi/mysql/_gen/object.gen.verbindlichkeit_position.php b/www/objectapi/mysql/_gen/object.gen.verbindlichkeit_position.php index 9c82d0a6..c88928ef 100644 --- a/www/objectapi/mysql/_gen/object.gen.verbindlichkeit_position.php +++ b/www/objectapi/mysql/_gen/object.gen.verbindlichkeit_position.php @@ -1,238 +1,244 @@ -app = $app; - } - - public function Select($id) - { - if(is_numeric($id)) - $result = $this->app->DB->SelectArr("SELECT * FROM `verbindlichkeit_position` WHERE (`id` = '$id')"); - else - return -1; - -$result = $result[0]; - - $this->id=$result['id']; - $this->verbindlichkeit=$result['verbindlichkeit']; - $this->sort=$result['sort']; - $this->artikel=$result['artikel']; - $this->projekt=$result['projekt']; - $this->bestellung=$result['bestellung']; - $this->nummer=$result['nummer']; - $this->bestellnummer=$result['bestellnummer']; - $this->waehrung=$result['waehrung']; - $this->einheit=$result['einheit']; - $this->vpe=$result['vpe']; - $this->bezeichnung=$result['bezeichnung']; - $this->umsatzsteuer=$result['umsatzsteuer']; - $this->status=$result['status']; - $this->beschreibung=$result['beschreibung']; - $this->lieferdatum=$result['lieferdatum']; - $this->steuersatz=$result['steuersatz']; - $this->steuertext=$result['steuertext']; - $this->preis=$result['preis']; - $this->menge=$result['menge']; - $this->kostenstelle=$result['kostenstelle']; - } - - public function Create() - { - $sql = "INSERT INTO `verbindlichkeit_position` (`id`,`verbindlichkeit`,`sort`,`artikel`,`projekt`,`bestellung`,`nummer`,`bestellnummer`,`waehrung`,`einheit`,`vpe`,`bezeichnung`,`umsatzsteuer`,`status`,`beschreibung`,`lieferdatum`,`steuersatz`,`steuertext`,`preis`,`menge`,`kostenstelle`) - VALUES(NULL,'{$this->verbindlichkeit}','{$this->sort}','{$this->artikel}','{$this->projekt}','{$this->bestellung}','{$this->nummer}','{$this->bestellnummer}','{$this->waehrung}','{$this->einheit}','{$this->vpe}','{$this->bezeichnung}','{$this->umsatzsteuer}','{$this->status}','{$this->beschreibung}','{$this->lieferdatum}','{$this->steuersatz}','{$this->steuertext}','{$this->preis}','{$this->menge}','{$this->kostenstelle}')"; - - $this->app->DB->Insert($sql); - $this->id = $this->app->DB->GetInsertID(); - } - - public function Update() - { - if(!is_numeric($this->id)) { - return -1; - } - - $sql = "UPDATE `verbindlichkeit_position` SET - `verbindlichkeit`='{$this->verbindlichkeit}', - `sort`='{$this->sort}', - `artikel`='{$this->artikel}', - `projekt`='{$this->projekt}', - `bestellung`='{$this->bestellung}', - `nummer`='{$this->nummer}', - `bestellnummer`='{$this->bestellnummer}', - `waehrung`='{$this->waehrung}', - `einheit`='{$this->einheit}', - `vpe`='{$this->vpe}', - `bezeichnung`='{$this->bezeichnung}', - `umsatzsteuer`='{$this->umsatzsteuer}', - `status`='{$this->status}', - `beschreibung`='{$this->beschreibung}', - `lieferdatum`='{$this->lieferdatum}', - `steuersatz`='{$this->steuersatz}', - `steuertext`='{$this->steuertext}', - `preis`='{$this->preis}', - `menge`='{$this->menge}', - `kostenstelle`='{$this->kostenstelle}' - WHERE (`id`='{$this->id}')"; - - $this->app->DB->Update($sql); - } - - public function Delete($id='') - { - if(is_numeric($id)) - { - $this->id=$id; - } - else - return -1; - - $sql = "DELETE FROM `verbindlichkeit_position` WHERE (`id`='{$this->id}')"; - $this->app->DB->Delete($sql); - - $this->id=''; - $this->verbindlichkeit=''; - $this->sort=''; - $this->artikel=''; - $this->projekt=''; - $this->bestellung=''; - $this->nummer=''; - $this->bestellnummer=''; - $this->waehrung=''; - $this->einheit=''; - $this->vpe=''; - $this->bezeichnung=''; - $this->umsatzsteuer=''; - $this->status=''; - $this->beschreibung=''; - $this->lieferdatum=''; - $this->steuersatz=''; - $this->steuertext=''; - $this->preis=''; - $this->menge=''; - $this->kostenstelle=''; - } - - public function Copy() - { - $this->id = ''; - $this->Create(); - } - - /** - Mit dieser Funktion kann man einen Datensatz suchen - dafuer muss man die Attribute setzen nach denen gesucht werden soll - dann kriegt man als ergebnis den ersten Datensatz der auf die Suche uebereinstimmt - zurueck. Mit Next() kann man sich alle weiteren Ergebnisse abholen - **/ - - public function Find() - { - //TODO Suche mit den werten machen - } - - public function FindNext() - { - //TODO Suche mit den alten werten fortsetzen machen - } - - /** Funktionen um durch die Tabelle iterieren zu koennen */ - - public function Next() - { - //TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer - } - - public function First() - { - //TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer - } - - /** dank dieser funktionen kann man die tatsaechlichen werte einfach - ueberladen (in einem Objekt das mit seiner klasse ueber dieser steht)**/ - - public function SetId($value) { $this->id=$value; } - public function GetId() { return $this->id; } - public function SetVerbindlichkeit($value) { $this->verbindlichkeit=$value; } - public function GetVerbindlichkeit() { return $this->verbindlichkeit; } - public function SetSort($value) { $this->sort=$value; } - public function GetSort() { return $this->sort; } - public function SetArtikel($value) { $this->artikel=$value; } - public function GetArtikel() { return $this->artikel; } - public function SetProjekt($value) { $this->projekt=$value; } - public function GetProjekt() { return $this->projekt; } - public function SetBestellung($value) { $this->bestellung=$value; } - public function GetBestellung() { return $this->bestellung; } - public function SetNummer($value) { $this->nummer=$value; } - public function GetNummer() { return $this->nummer; } - public function SetBestellnummer($value) { $this->bestellnummer=$value; } - public function GetBestellnummer() { return $this->bestellnummer; } - public function SetWaehrung($value) { $this->waehrung=$value; } - public function GetWaehrung() { return $this->waehrung; } - public function SetEinheit($value) { $this->einheit=$value; } - public function GetEinheit() { return $this->einheit; } - public function SetVpe($value) { $this->vpe=$value; } - public function GetVpe() { return $this->vpe; } - public function SetBezeichnung($value) { $this->bezeichnung=$value; } - public function GetBezeichnung() { return $this->bezeichnung; } - public function SetUmsatzsteuer($value) { $this->umsatzsteuer=$value; } - public function GetUmsatzsteuer() { return $this->umsatzsteuer; } - public function SetStatus($value) { $this->status=$value; } - public function GetStatus() { return $this->status; } - public function SetBeschreibung($value) { $this->beschreibung=$value; } - public function GetBeschreibung() { return $this->beschreibung; } - public function SetLieferdatum($value) { $this->lieferdatum=$value; } - public function GetLieferdatum() { return $this->lieferdatum; } - public function SetSteuersatz($value) { $this->steuersatz=$value; } - public function GetSteuersatz() { return $this->steuersatz; } - public function SetSteuertext($value) { $this->steuertext=$value; } - public function GetSteuertext() { return $this->steuertext; } - public function SetPreis($value) { $this->preis=$value; } - public function GetPreis() { return $this->preis; } - public function SetMenge($value) { $this->menge=$value; } - public function GetMenge() { return $this->menge; } - public function SetKostenstelle($value) { $this->kostenstelle=$value; } - public function GetKostenstelle() { return $this->kostenstelle; } - -} +app = $app; + } + + public function Select($id) + { + if(is_numeric($id)) + $result = $this->app->DB->SelectArr("SELECT * FROM `verbindlichkeit_position` WHERE (`id` = '$id')"); + else + return -1; + +$result = $result[0]; + + $this->id=$result['id']; + $this->verbindlichkeit=$result['verbindlichkeit']; + $this->sort=$result['sort']; + $this->artikel=$result['artikel']; + $this->projekt=$result['projekt']; + $this->bestellung=$result['bestellung']; + $this->nummer=$result['nummer']; + $this->bestellnummer=$result['bestellnummer']; + $this->waehrung=$result['waehrung']; + $this->einheit=$result['einheit']; + $this->vpe=$result['vpe']; + $this->bezeichnung=$result['bezeichnung']; + $this->umsatzsteuer=$result['umsatzsteuer']; + $this->status=$result['status']; + $this->beschreibung=$result['beschreibung']; + $this->lieferdatum=$result['lieferdatum']; + $this->steuersatz=$result['steuersatz']; + $this->steuertext=$result['steuertext']; + $this->preis=$result['preis']; + $this->menge=$result['menge']; + $this->kostenstelle=$result['kostenstelle']; + $this->sachkonto=$result['sachkonto']; + } + + public function Create() + { + $sql = "INSERT INTO `verbindlichkeit_position` (`id`,`verbindlichkeit`,`sort`,`artikel`,`projekt`,`bestellung`,`nummer`,`bestellnummer`,`waehrung`,`einheit`,`vpe`,`bezeichnung`,`umsatzsteuer`,`status`,`beschreibung`,`lieferdatum`,`steuersatz`,`steuertext`,`preis`,`menge`,`kostenstelle`) + VALUES(NULL,'{$this->verbindlichkeit}','{$this->sort}','{$this->artikel}','{$this->projekt}','{$this->bestellung}','{$this->nummer}','{$this->bestellnummer}','{$this->waehrung}','{$this->einheit}','{$this->vpe}','{$this->bezeichnung}','{$this->umsatzsteuer}','{$this->status}','{$this->beschreibung}','{$this->lieferdatum}','{$this->steuersatz}','{$this->steuertext}','{$this->preis}','{$this->menge}','{$this->kostenstelle}','{$this->sachkonto}')"; + + $this->app->DB->Insert($sql); + $this->id = $this->app->DB->GetInsertID(); + } + + public function Update() + { + if(!is_numeric($this->id)) { + return -1; + } + + $sql = "UPDATE `verbindlichkeit_position` SET + `verbindlichkeit`='{$this->verbindlichkeit}', + `sort`='{$this->sort}', + `artikel`='{$this->artikel}', + `projekt`='{$this->projekt}', + `bestellung`='{$this->bestellung}', + `nummer`='{$this->nummer}', + `bestellnummer`='{$this->bestellnummer}', + `waehrung`='{$this->waehrung}', + `einheit`='{$this->einheit}', + `vpe`='{$this->vpe}', + `bezeichnung`='{$this->bezeichnung}', + `umsatzsteuer`='{$this->umsatzsteuer}', + `status`='{$this->status}', + `beschreibung`='{$this->beschreibung}', + `lieferdatum`='{$this->lieferdatum}', + `steuersatz`='{$this->steuersatz}', + `steuertext`='{$this->steuertext}', + `preis`='{$this->preis}', + `menge`='{$this->menge}', + `kostenstelle`='{$this->kostenstelle}', + `sachkonto`='{$this->sachkonto}' + WHERE (`id`='{$this->id}')"; + + $this->app->DB->Update($sql); + } + + public function Delete($id='') + { + if(is_numeric($id)) + { + $this->id=$id; + } + else + return -1; + + $sql = "DELETE FROM `verbindlichkeit_position` WHERE (`id`='{$this->id}')"; + $this->app->DB->Delete($sql); + + $this->id=''; + $this->verbindlichkeit=''; + $this->sort=''; + $this->artikel=''; + $this->projekt=''; + $this->bestellung=''; + $this->nummer=''; + $this->bestellnummer=''; + $this->waehrung=''; + $this->einheit=''; + $this->vpe=''; + $this->bezeichnung=''; + $this->umsatzsteuer=''; + $this->status=''; + $this->beschreibung=''; + $this->lieferdatum=''; + $this->steuersatz=''; + $this->steuertext=''; + $this->preis=''; + $this->menge=''; + $this->kostenstelle=''; + $this->sachkonto=''; + } + + public function Copy() + { + $this->id = ''; + $this->Create(); + } + + /** + Mit dieser Funktion kann man einen Datensatz suchen + dafuer muss man die Attribute setzen nach denen gesucht werden soll + dann kriegt man als ergebnis den ersten Datensatz der auf die Suche uebereinstimmt + zurueck. Mit Next() kann man sich alle weiteren Ergebnisse abholen + **/ + + public function Find() + { + //TODO Suche mit den werten machen + } + + public function FindNext() + { + //TODO Suche mit den alten werten fortsetzen machen + } + + /** Funktionen um durch die Tabelle iterieren zu koennen */ + + public function Next() + { + //TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer + } + + public function First() + { + //TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer + } + + /** dank dieser funktionen kann man die tatsaechlichen werte einfach + ueberladen (in einem Objekt das mit seiner klasse ueber dieser steht)**/ + + public function SetId($value) { $this->id=$value; } + public function GetId() { return $this->id; } + public function SetVerbindlichkeit($value) { $this->verbindlichkeit=$value; } + public function GetVerbindlichkeit() { return $this->verbindlichkeit; } + public function SetSort($value) { $this->sort=$value; } + public function GetSort() { return $this->sort; } + public function SetArtikel($value) { $this->artikel=$value; } + public function GetArtikel() { return $this->artikel; } + public function SetProjekt($value) { $this->projekt=$value; } + public function GetProjekt() { return $this->projekt; } + public function SetBestellung($value) { $this->bestellung=$value; } + public function GetBestellung() { return $this->bestellung; } + public function SetNummer($value) { $this->nummer=$value; } + public function GetNummer() { return $this->nummer; } + public function SetBestellnummer($value) { $this->bestellnummer=$value; } + public function GetBestellnummer() { return $this->bestellnummer; } + public function SetWaehrung($value) { $this->waehrung=$value; } + public function GetWaehrung() { return $this->waehrung; } + public function SetEinheit($value) { $this->einheit=$value; } + public function GetEinheit() { return $this->einheit; } + public function SetVpe($value) { $this->vpe=$value; } + public function GetVpe() { return $this->vpe; } + public function SetBezeichnung($value) { $this->bezeichnung=$value; } + public function GetBezeichnung() { return $this->bezeichnung; } + public function SetUmsatzsteuer($value) { $this->umsatzsteuer=$value; } + public function GetUmsatzsteuer() { return $this->umsatzsteuer; } + public function SetStatus($value) { $this->status=$value; } + public function GetStatus() { return $this->status; } + public function SetBeschreibung($value) { $this->beschreibung=$value; } + public function GetBeschreibung() { return $this->beschreibung; } + public function SetLieferdatum($value) { $this->lieferdatum=$value; } + public function GetLieferdatum() { return $this->lieferdatum; } + public function SetSteuersatz($value) { $this->steuersatz=$value; } + public function GetSteuersatz() { return $this->steuersatz; } + public function SetSteuertext($value) { $this->steuertext=$value; } + public function GetSteuertext() { return $this->steuertext; } + public function SetPreis($value) { $this->preis=$value; } + public function GetPreis() { return $this->preis; } + public function SetMenge($value) { $this->menge=$value; } + public function GetMenge() { return $this->menge; } + public function SetKostenstelle($value) { $this->kostenstelle=$value; } + public function GetKostenstelle() { return $this->kostenstelle; } + public function SetSachkonto($value) { $this->sachkonto=$value; } + public function GetSachkonto() { return $this->sachkonto; } + +} diff --git a/www/pages/ajax.php b/www/pages/ajax.php index 6eda4979..231cfcca 100644 --- a/www/pages/ajax.php +++ b/www/pages/ajax.php @@ -2362,7 +2362,14 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku for($i = 0; $i < $carr; $i++) $newarr[] = $arr[$i]['name']; break; + case "sachkonto_aufwendungen": + $arr = $this->app->DB->SelectArr("SELECT CONCAT(sachkonto,' ',beschriftung) as name FROM kontorahmen + WHERE art = 1 AND (beschriftung LIKE '%$term%' OR sachkonto LIKE '%$term%' OR sachkonto LIKE '%$term2%' OR sachkonto LIKE '%$term3%' OR beschriftung LIKE '%$term2%' OR beschriftung LIKE '%$term3%') AND ausblenden!=1 $andprojekt ORDER by sachkonto"); + $carr = !empty($arr)?count($arr):0; + for($i = 0; $i < $carr; $i++) + $newarr[] = $arr[$i]['name']; + break; case "lieferbedingungen": $arr = $this->app->DB->SelectArr("SELECT CONCAT(lieferbedingungen) as name FROM lieferbedingungen WHERE (lieferbedingungen LIKE '%$term%' OR lieferbedingungen LIKE '%$term2%' OR lieferbedingungen LIKE '%$term3%') ORDER by lieferbedingungen"); diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl index 5490fa4d..83562c18 100644 --- a/www/pages/content/verbindlichkeit_edit.tpl +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -1,13 +1,8 @@
-
[MESSAGE]
@@ -184,5 +179,8 @@
+
+ [POS] +
diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index 290b8231..ac4de5e3 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -17,9 +17,12 @@ class Verbindlichkeit { $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("positionen", "verbindlichkeit_positionen"); $this->app->ActionHandler("delete", "verbindlichkeit_delete"); $this->app->ActionHandler("dateien", "verbindlichkeit_dateien"); $this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf"); + $this->app->ActionHandler("positioneneditpopup", "verbindlichkeit_positioneneditpopup"); + $this->app->DefaultActionHandler("list"); $this->app->ActionHandlerListen($app); } @@ -138,6 +141,8 @@ class Verbindlichkeit { function verbindlichkeit_edit() { $id = $this->app->Secure->GetGET('id'); + $this->app->YUI->AARLGPositionen(true); // create iframe with positionen action + // Check if other users are editing this id if($this->app->erp->DisableModul('artikel',$id)) { @@ -330,4 +335,71 @@ class Verbindlichkeit { } $this->app->ExitXentral(); } + + function verbindlichkeit_positionen() { + $this->app->YUI->AARLGPositionen(false); // Render positionen editable into iframe + } + + function verbindlichkeit_positioneneditpopup() { + $cmd = $this->app->Secure->GetGET('cmd'); + if($cmd === 'getopenaccordions') + { + $accordions = $this->app->Secure->GetPOST('accordions'); + $accordions = explode('*|*',$accordions); + foreach($accordions as $k => $v) + { + if(empty($v)) + { + unset($accordions[$k]); + }else{ + $accordions[$k] = 'verbindlichkeit_accordion'.$v; + } + } + $ret = []; + if(!empty($accordions)) + { + $accordions = $this->app->User->GetParameter($accordions); + if(!empty($accordions)) + { + foreach($accordions as $v) + { + if(!empty($v['value'])) + { + $ret['accordions'][] = str_replace('verbindlichkeit_accordion','',$v['name']); + } + } + } + } + echo json_encode($ret); + $this->app->ExitXentral(); + } + if($cmd === 'setaccordion') + { + $name = $this->app->Secure->GetPOST('name'); + $active = $this->app->Secure->GetPOST('active'); + $this->app->User->SetParameter('verbindlichkeit_accordion'.$name, $active); + echo json_encode(array('success'=>1)); + $this->app->ExitXentral(); + } + $id = $this->app->Secure->GetGET('id'); + $fmodul = $this->app->Secure->GetGET('fmodul'); + $artikel= $this->app->DB->Select("SELECT artikel FROM verbindlichkeit_position WHERE id='$id' LIMIT 1"); + + // nach page inhalt des dialogs ausgeben + $filename = 'widgets/widget.auftag_position_custom.php'; + if(is_file($filename)) + { + include_once $filename; + $widget = new WidgetVerbindlichkeit_positionCustom($this->app,'PAGE'); + } else { + $widget = new WidgetVerbindlichkeit_position($this->app,'PAGE'); + } + + $sid= $this->app->DB->Select("SELECT verbindlichkeit FROM verbindlichkeit_position WHERE id='$id' LIMIT 1"); + $widget->form->SpecialActionAfterExecute('close_refresh', + "index.php?module=verbindlichkeit&action=positionen&id=$sid&fmodul=$fmodul"); + $widget->Edit(); + $this->app->BuildNavigation=false; + } + } diff --git a/www/widgets/_gen/widget.gen.verbindlichkeit_position.php b/www/widgets/_gen/widget.gen.verbindlichkeit_position.php index efbd4856..8fe52cc0 100644 --- a/www/widgets/_gen/widget.gen.verbindlichkeit_position.php +++ b/www/widgets/_gen/widget.gen.verbindlichkeit_position.php @@ -1,129 +1,132 @@ -app = $app; - $this->parsetarget = $parsetarget; - $this->Form(); - } - - public function verbindlichkeit_positionDelete() - { - - $this->form->Execute("verbindlichkeit_position","delete"); - - $this->verbindlichkeit_positionList(); - } - - function Edit() - { - $this->form->Edit(); - } - - function Copy() - { - $this->form->Copy(); - } - - public function Create() - { - $this->form->Create(); - } - - public function Search() - { - $this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE"); - } - - public function Summary() - { - $this->app->Tpl->Set($this->parsetarget,"grosse Tabelle"); - } - - function Form() - { - $this->form = $this->app->FormHandler->CreateNew("verbindlichkeit_position"); - $this->form->UseTable("verbindlichkeit_position"); - $this->form->UseTemplate("verbindlichkeit_position.tpl",$this->parsetarget); - - $field = new HTMLInput("artikel","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - $this->form->AddMandatory("artikel","notempty","Pflichtfeld!","MSGARTIKEL"); - - $field = new HTMLInput("bezeichnung","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - $this->form->AddMandatory("bezeichnung","notempty","Pflichtfeld!","MSGBEZEICHNUNG"); - - $field = new HTMLInput("nummer","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLTextarea("beschreibung",5,30,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLInput("menge","text","","8","","","","","","","","0","",""); - $this->form->NewField($field); - $this->form->AddMandatory("menge","notempty","Pflichtfeld!","MSGMENGE"); - - $field = new HTMLInput("preis","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("waehrung","text","","15","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLSelect("umsatzsteuer",0,"umsatzsteuer","","","0"); - $field->AddOption('Standard',''); - $field->AddOption('Ermäßigt','ermaessigt'); - $field->AddOption('Befreit','befreit'); - $this->form->NewField($field); - - $field = new HTMLCheckbox("anderersteuersatz","","","","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("steuersatz","text","","15","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLTextarea("steuertext",3,50,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLInput("einheit","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("vpe","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("projekt","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("kostenstelle","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("lieferdatum","text","","15","","","","","","","","0","",""); - $this->form->NewField($field); - - - } - -} - -?> \ No newline at end of file +app = $app; + $this->parsetarget = $parsetarget; + $this->Form(); + } + + public function verbindlichkeit_positionDelete() + { + + $this->form->Execute("verbindlichkeit_position","delete"); + + $this->verbindlichkeit_positionList(); + } + + function Edit() + { + $this->form->Edit(); + } + + function Copy() + { + $this->form->Copy(); + } + + public function Create() + { + $this->form->Create(); + } + + public function Search() + { + $this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE"); + } + + public function Summary() + { + $this->app->Tpl->Set($this->parsetarget,"grosse Tabelle"); + } + + function Form() + { + $this->form = $this->app->FormHandler->CreateNew("verbindlichkeit_position"); + $this->form->UseTable("verbindlichkeit_position"); + $this->form->UseTemplate("verbindlichkeit_position.tpl",$this->parsetarget); + + $field = new HTMLInput("artikel","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + $this->form->AddMandatory("artikel","notempty","Pflichtfeld!","MSGARTIKEL"); + + $field = new HTMLInput("bezeichnung","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + $this->form->AddMandatory("bezeichnung","notempty","Pflichtfeld!","MSGBEZEICHNUNG"); + + $field = new HTMLInput("nummer","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLTextarea("beschreibung",5,30,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLInput("menge","text","","8","","","","","","","","0","",""); + $this->form->NewField($field); + $this->form->AddMandatory("menge","notempty","Pflichtfeld!","MSGMENGE"); + + $field = new HTMLInput("preis","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("waehrung","text","","15","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLSelect("umsatzsteuer",0,"umsatzsteuer","","","0"); + $field->AddOption('Standard',''); + $field->AddOption('Ermäßigt','ermaessigt'); + $field->AddOption('Befreit','befreit'); + $this->form->NewField($field); + + $field = new HTMLCheckbox("anderersteuersatz","","","","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("steuersatz","text","","15","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLTextarea("steuertext",3,50,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLInput("einheit","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("vpe","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("projekt","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("sachkonto","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("kostenstelle","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("lieferdatum","text","","15","","","","","","","","0","",""); + $this->form->NewField($field); + + + } + +} + +?> diff --git a/www/widgets/templates/_gen/verbindlichkeit_position.tpl b/www/widgets/templates/_gen/verbindlichkeit_position.tpl index 86803cbb..24c4ac26 100644 --- a/www/widgets/templates/_gen/verbindlichkeit_position.tpl +++ b/www/widgets/templates/_gen/verbindlichkeit_position.tpl @@ -25,31 +25,41 @@ $('#anderersteuersatz').click(function() { if (!$(this).is(':checked')) { });
-[FORMHANDLEREVENT] - - - - - - - - - - - - - - - - - - - -
{|Artikel-Nr|}:[ARTIKEL][MSGARTIKEL]
{|Beschreibung|}:[BEZEICHNUNG][MSGBEZEICHNUNG]
{|Artikel-Nr|}:[NUMMER][MSGNUMMER]
{|Beschreibung|}:[BESCHREIBUNG][MSGBESCHREIBUNG]
{|Menge|}:[MENGE][MSGMENGE]
{|Preis|}:[PREIS][MSGPREIS]
{|Währung|}:[WAEHRUNG][MSGWAEHRUNG] [WAEHRUNGSBUTTON]
{|Steuersatz|}:[UMSATZSTEUER][MSGUMSATZSTEUER]  - -[ANDERERSTEUERSATZ][MSGANDERERSTEUERSATZ] individuellen Steuersatz verwenden -
{|Rechtlicher Steuerhinweis|}: - [STEUERTEXT][MSGSTEUERTEXT] -
{|Einheit|}:[EINHEIT][MSGEINHEIT]
{|VPE|}:[VPE][MSGVPE]
{|Projekt|}:[PROJEKT][MSGPROJEKT]
{|Kostenstelle|}:[KOSTENSTELLE][MSGKOSTENSTELLE]
{|Lieferdatum|}:[LIEFERDATUM][MSGLIEFERDATUM]
+ [FORMHANDLEREVENT] + + + + + + + +
+ + + + + + + + + + + + + + +
{|Artikel-Nr|}:[ARTIKEL][MSGARTIKEL]
{|Beschreibung|}:[BEZEICHNUNG][MSGBEZEICHNUNG]
{|Artikel-Nr|}:[NUMMER][MSGNUMMER]
{|Beschreibung|}:[BESCHREIBUNG][MSGBESCHREIBUNG]
{|Menge|}:[MENGE][MSGMENGE]
{|Preis|}:[PREIS][MSGPREIS]
{|Währung|}:[WAEHRUNG][MSGWAEHRUNG] [WAEHRUNGSBUTTON]
{|Steuersatz|}:[UMSATZSTEUER][MSGUMSATZSTEUER]  + [ANDERERSTEUERSATZ][MSGANDERERSTEUERSATZ] individuellen Steuersatz verwenden +
{|Rechtlicher Steuerhinweis|}: + [STEUERTEXT][MSGSTEUERTEXT] +
{|Einheit|}:[EINHEIT][MSGEINHEIT]
{|VPE|}:[VPE][MSGVPE]
{|Lieferdatum|}:[LIEFERDATUM][MSGLIEFERDATUM]
+
+ + + + + +
{|Projekt|}:[PROJEKT][MSGPROJEKT]
{|Kostenstelle|}:[KOSTENSTELLE][MSGKOSTENSTELLE]
{|Sachkonto|}:[SACHKONTO][MSGSACHKONTO]
+
[WAEHRUNGSTABELLE] diff --git a/www/widgets/widget.verbindlichkeit_position.php b/www/widgets/widget.verbindlichkeit_position.php index e80d4dd7..23710a9b 100644 --- a/www/widgets/widget.verbindlichkeit_position.php +++ b/www/widgets/widget.verbindlichkeit_position.php @@ -24,6 +24,7 @@ class WidgetVerbindlichkeit_position extends WidgetGenVerbindlichkeit_position $this->app->YUI->AutoComplete("projekt","projektname",1); $this->app->YUI->AutoComplete("kostenstelle","kostenstelle",1); + $this->app->YUI->AutoComplete("sachkonto","sachkonto_aufwendungen",1); $this->app->YUI->AutoComplete("artikel","artikelnummer"); //$this->app->YUI->AutoComplete(AUTO,"artikel",array('nummer','name_de','warengruppe'),"nummer"); @@ -36,6 +37,7 @@ class WidgetVerbindlichkeit_position extends WidgetGenVerbindlichkeit_position $this->form->ReplaceFunction("menge",$this,"ReplaceMenge"); //$this->form->ReplaceFunction("geliefert",$this,"ReplaceMenge"); $this->form->ReplaceFunction("projekt",$this,"ReplaceProjekt"); + $this->form->ReplaceFunction("sachkonto",$this,"ReplaceSachkonto"); if($this->app->erp->Firmendaten("briefhtml")=="1") { @@ -79,6 +81,11 @@ class WidgetVerbindlichkeit_position extends WidgetGenVerbindlichkeit_position return $this->app->erp->ReplaceProjekt($db,$value,$fromform); } + function ReplaceSachkonto($db,$value,$fromform) + { + return $this->app->erp->ReplaceKontorahmen($db,$value,$fromform); + } + function ReplaceSteuersatz($db,$value,$fromform) { if($db) From 8664e16c559ccdcb74a1d71f4108d032c4929c9d Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 13 Dec 2023 18:27:08 +0100 Subject: [PATCH 04/62] zwischenstand verbindlichkeit status, forms, positions --- phpwf/htmltags/class.form.php | 716 +++++++++--------- phpwf/plugins/class.yui.php | 66 +- upgrade/data/db_schema.json | 66 ++ www/lib/class.erpapi.php | 1 + www/pages/content/verbindlichkeit_edit.tpl | 162 ++-- www/pages/verbindlichkeit.php | 142 +++- .../widget.gen.verbindlichkeit_position.php | 5 +- .../_gen/verbindlichkeit_position.tpl | 4 +- 8 files changed, 692 insertions(+), 470 deletions(-) diff --git a/phpwf/htmltags/class.form.php b/phpwf/htmltags/class.form.php index b4795197..221a477c 100644 --- a/phpwf/htmltags/class.form.php +++ b/phpwf/htmltags/class.form.php @@ -1,361 +1,361 @@ -action=$action; - $this->name=$name; - $this->method=$method; - $this->id=$id; - } - - function Set($value) - { - } - - function Get() - { - - } - - function GetClose() - { - } -} - - - -class HTMLTextarea -{ - var $name; - var $rows; - var $value; - var $cols; - var $id=""; - var $readonly=""; - var $disabled=""; - var $class; - - function __construct($name,$rows,$cols,$defvalue="",$id="",$readonly="",$disabled="",$class="") - { - $this->name = $name; - $this->rows = $rows; - $this->cols = $cols; - $this->class = $class; - $this->value = $defvalue; - $this->id = $id; - - if($id=="") - $this->id = $name; - - $this->readonly = $readonly; - $this->disabled = $disabled; - } - - function Get() - { - // TEMP ACHTUNG HIER IST MIST!!! - $value = $this->value; -/* - if(!defined('WFHTMLTextareabr') || !WFHTMLTextareabr)$value = preg_replace('//i', "\n", $value); - */ - // $value = str_replace("\\r\\n","\n",$value); - - $html = ""; - return $html; - } - - function GetClose() - { - } -} - - -/// fuer Datenfelder die mit in die Datenbank o.ae. kommen sollen, aber nicht durch den -/// user in irgendeiner art und weise gesehen und manipuliert werden koennen - -class BlindField -{ - var $name; - var $value; - - function __construct($name,$value) - { - $this->name = $name; - $this->value = $value; - } - function Get(){} - function GetClose(){} -} - - -class HTMLInput -{ - var $name; - var $type; - var $value; - var $dbvalue; - var $checkvalue; - var $onchange; - var $onclick; - var $defvalue; - var $size; - var $maxlength; - var $tabindex; - var $id=""; - var $readonly=""; - var $disabled=""; - var $placeholder=""; - var $class; - var $checked; - - function __construct($name,$type,$value,$size="",$maxlength="",$id="",$defvalue="",$checked="",$readonly="",$disabled="",$class="",$onclick="",$tabindex="",$placeholder="") - { - $this->name = $name; - $this->type = $type; - $this->value = $value; - $this->size = $size; - $this->maxlength = $maxlength; - $this->id = $id; - $this->readonly = $readonly; - $this->disabled = $disabled; - $this->class=$class; - $this->checked=$checked; - $this->tabindex=$tabindex; - $this->placeholder=$placeholder; - $this->defvalue=$defvalue; // if value is empty use this - $this->onclick=$onclick; - - } - - function Get() - { - if($this->id=="") $this->id = $this->name; - - switch($this->type) - { - case "text": - $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\" - name=\"{$this->name}\" value=\"".preg_replace("/\"/",""",$this->value)."\" size=\"{$this->size}\" placeholder=\"{$this->placeholder}\" - maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>"; - break; - case "password": - $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\" - name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\" - maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>"; - break; - case "checkbox": - $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\" - name=\"{$this->name}\" value=\"{$this->value}\" {$this->checked} onchange=\"{$this->onchange}\" onclick=\"{$this->onclick}\" - {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>"; - break; - case "radio": - - if($this->value==$this->defvalue) $this->checked="checked"; - - $tmpname = str_replace('_'.$this->defvalue,'',$this->name); - - $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\" - name=\"{$tmpname}\" value=\"{$this->defvalue}\" {$this->checked} onchange=\"{$this->onchange}\" - {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>"; - break; - case "submit": - $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" - name=\"{$this->name}\" value=\"{$this->value}\" - {$this->readonly} {$this->disabled}>"; - break; - case "hidden": - $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" - name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\" - maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled}>"; - break; - } - - return $html; - } - - function GetClose() - { - } -} - - - -class HTMLCheckbox extends HTMLInput -{ - function __construct($name,$value,$defvalue,$checkvalue="",$onclick="",$tabindex="") - { - - if($checkvalue!="") - $this->checkvalue=$checkvalue; - else - $this->checkvalue=$value; - - $this->name = $name; - $this->type = "checkbox"; - $this->checkradiovalue = isset($okvalue)?$okvalue:null; - $this->defvalue = $defvalue; - $this->value = $value; - $this->onclick= $onclick; - $this->tabindex= $tabindex; - $this->orgvalue = $value; - } - - - function Get() - { - if(($this->value=="" && $this->defvalue==$this->checkvalue)) { - } - if($this->checkvalue==$this->value) { - $this->checked="checked"; - } - if($this->value=="" && $this->defvalue!=$this->checkvalue) - $this->checked=""; - - $this->value = $this->checkvalue; - //$this->value=1; - return parent::Get(); - } - - function GetClose() - { - } - -}; - -class HTMLSelect -{ - var $name; - var $size; - var $id; - var $readonly; - var $disabled; - - var $options; - var $onchange; - var $selected; - var $tabindex; - - var $class; - - function __construct($name,$size,$id="",$readonly=false,$disabled=false,$tabindex="") - { - $this->name=$name; - $this->size=$size; - $this->id=$id; - $this->readonly=$readonly; - $this->disabled=$disabled; - $this->tabindex=$tabindex; - $this->class=""; - - if($id=="") - $this->id = $name; - } - - function AddOption($option,$value) - { - $this->options[] = array($option,$value); - } - - function AddOptionsDimensionalArray($values) - { - foreach($values as $key=>$value) - { - $this->options[] = array($value[wert],$value[schluessel]); - } - } - - - function AddOptionsAsocSimpleArray($values) - { - foreach($values as $key=>$value) - $this->options[] = array($value,$key); - } - - function AddOptionsSimpleArray($values) - { - if(is_array($values)) - { - foreach($values as $key=>$value) - { - if(!is_numeric($key)) - $this->options[] = array($value,$key); - else - $this->options[] = array($value,$value); - } - } - } - - function AddOptions($values) - { - $number=0; - if(count($values)>0) - { - foreach($values as $key=>$row) - foreach($row as $value) - { - if($number==0){ - $option=$value; - $number=1; - } - else { - $this->options[] = array($option,$value); - $number=0; - $option=""; - } - } - } - - } - - function Get() - { - $html = ""; - return $html; - } - - function GetClose() - { - } - -} - +action=$action; + $this->name=$name; + $this->method=$method; + $this->id=$id; + } + + function Set($value) + { + } + + function Get() + { + + } + + function GetClose() + { + } +} + + + +class HTMLTextarea +{ + var $name; + var $rows; + var $value; + var $cols; + var $id=""; + var $readonly=""; + var $disabled=""; + var $class; + + function __construct($name,$rows,$cols,$defvalue="",$id="",$readonly="",$disabled="",$class="") + { + $this->name = $name; + $this->rows = $rows; + $this->cols = $cols; + $this->class = $class; + $this->value = $defvalue; + $this->id = $id; + + if($id=="") + $this->id = $name; + + $this->readonly = $readonly; + $this->disabled = $disabled; + } + + function Get() + { + // TEMP ACHTUNG HIER IST MIST!!! + $value = $this->value; +/* + if(!defined('WFHTMLTextareabr') || !WFHTMLTextareabr)$value = preg_replace('//i', "\n", $value); + */ + // $value = str_replace("\\r\\n","\n",$value); + + $html = ""; + return $html; + } + + function GetClose() + { + } +} + + +/// fuer Datenfelder die mit in die Datenbank o.ae. kommen sollen, aber nicht durch den +/// user in irgendeiner art und weise gesehen und manipuliert werden koennen + +class BlindField +{ + var $name; + var $value; + + function __construct($name,$value) + { + $this->name = $name; + $this->value = $value; + } + function Get(){} + function GetClose(){} +} + + +class HTMLInput +{ + var $name; + var $type; + var $value; + var $dbvalue; + var $checkvalue; + var $onchange; + var $onclick; + var $defvalue; + var $size; + var $maxlength; + var $tabindex; + var $id=""; + var $readonly=""; + var $disabled=""; + var $placeholder=""; + var $class; + var $checked; + + function __construct($name,$type,$value,$size="",$maxlength="",$id="",$defvalue="",$checked="",$readonly="",$disabled="",$class="",$onclick="",$tabindex="",$placeholder="") + { + $this->name = $name; + $this->type = $type; + $this->value = $value; + $this->size = $size; + $this->maxlength = $maxlength; + $this->id = $id; + $this->readonly = $readonly; + $this->disabled = $disabled; + $this->class=$class; + $this->checked=$checked; + $this->tabindex=$tabindex; + $this->placeholder=$placeholder; + $this->defvalue=$defvalue; // if value is empty use this + $this->onclick=$onclick; + + } + + function Get() + { + if($this->id=="") $this->id = $this->name; + + switch($this->type) + { + case "text": + $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\" + name=\"{$this->name}\" value=\"".preg_replace("/\"/",""",$this->value)."\" size=\"{$this->size}\" placeholder=\"{$this->placeholder}\" + maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>"; + break; + case "password": + $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\" + name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\" + maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>"; + break; + case "checkbox": + $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\" + name=\"{$this->name}\" value=\"{$this->value}\" {$this->checked} onchange=\"{$this->onchange}\" onclick=\"{$this->onclick}\" + {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>"; + break; + case "radio": + + if($this->value==$this->defvalue) $this->checked="checked"; + + $tmpname = str_replace('_'.$this->defvalue,'',$this->name); + + $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\" + name=\"{$tmpname}\" value=\"{$this->defvalue}\" {$this->checked} onchange=\"{$this->onchange}\" + {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>"; + break; + case "submit": + $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" + name=\"{$this->name}\" value=\"{$this->value}\" + {$this->readonly} {$this->disabled}>"; + break; + case "hidden": + $html = "type}\" id=\"{$this->id}\" class=\"{$this->class}\" + name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\" + maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled}>"; + break; + } + + return $html; + } + + function GetClose() + { + } +} + + + +class HTMLCheckbox extends HTMLInput +{ + function __construct($name,$value,$defvalue,$checkvalue="",$onclick="",$tabindex="") + { + + if($checkvalue!="") + $this->checkvalue=$checkvalue; + else + $this->checkvalue=$value; + + $this->name = $name; + $this->type = "checkbox"; + $this->checkradiovalue = isset($okvalue)?$okvalue:null; + $this->defvalue = $defvalue; + $this->value = $value; + $this->onclick= $onclick; + $this->tabindex= $tabindex; + $this->orgvalue = $value; + } + + + function Get() + { + if(($this->value=="" && $this->defvalue==$this->checkvalue)) { + } + if($this->checkvalue==$this->value) { + $this->checked="checked"; + } + if($this->value=="" && $this->defvalue!=$this->checkvalue) + $this->checked=""; + + $this->value = $this->checkvalue; + //$this->value=1; + return parent::Get(); + } + + function GetClose() + { + } + +}; + +class HTMLSelect +{ + var $name; + var $size; + var $id; + var $readonly; + var $disabled; + + var $options; + var $onchange; + var $selected; + var $tabindex; + + var $class; + + function __construct($name,$size,$id="",$readonly=false,$disabled=false,$tabindex="") + { + $this->name=$name; + $this->size=$size; + $this->id=$id; + $this->readonly=$readonly; + $this->disabled=$disabled; + $this->tabindex=$tabindex; + $this->class=""; + + if($id=="") + $this->id = $name; + } + + function AddOption($option,$value) + { + $this->options[] = array($option,$value); + } + + function AddOptionsDimensionalArray($values) + { + foreach($values as $key=>$value) + { + $this->options[] = array($value[wert],$value[schluessel]); + } + } + + + function AddOptionsAsocSimpleArray($values) + { + foreach($values as $key=>$value) + $this->options[] = array($value,$key); + } + + function AddOptionsSimpleArray($values) + { + if(is_array($values)) + { + foreach($values as $key=>$value) + { + if(!is_numeric($key)) + $this->options[] = array($value,$key); + else + $this->options[] = array($value,$value); + } + } + } + + function AddOptions($values) + { + $number=0; + if(count($values)>0) + { + foreach($values as $key=>$row) + foreach($row as $value) + { + if($number==0){ + $option=$value; + $number=1; + } + else { + $this->options[] = array($option,$value); + $number=0; + $option=""; + } + } + } + + } + + function Get() + { + $html = ""; + return $html; + } + + function GetClose() + { + } + +} + diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index 5cf512ef..d01d209c 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -2855,16 +2855,60 @@ class YUI { } else if ($module == "verbindlichkeit") // OpenXE - { - $sql = "SELECT $sortcol, if(b.beschreibung!='', - if(CHAR_LENGTH(b.bezeichnung)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(CONCAT(b.bezeichnung,' *'),1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),CONCAT(b.bezeichnung,' *')), - if(CHAR_LENGTH(b.bezeichnung)>" . $this->app->erp->MaxArtikelbezeichnung() . ",CONCAT(SUBSTR(b.bezeichnung,1," . $this->app->erp->MaxArtikelbezeichnung() . "),'...'),b.bezeichnung)) - as Artikel, - p.abkuerzung as projekt, a.nummer as nummer, b.nummer as nummer, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum, trim(b.menge)+0 as menge, " . $this->FormatPreis($preiscell) . " as preis, CONCAT(k.sachkonto,' - ',k.beschriftung) AS sachkonto, b.id as id - FROM $table b - LEFT JOIN artikel a ON a.id=b.artikel LEFT JOIN projekt p ON b.projekt=p.id - LEFT JOIN kontorahmen k ON k.id = b.sachkonto - WHERE b.$module='$id'"; + { + $sql = " + SELECT + $sortcol, + IF( + b.beschreibung != '', + IF( + CHAR_LENGTH(b.bezeichnung) > " . $this->app->erp->MaxArtikelbezeichnung() . ", + CONCAT( + SUBSTR( + CONCAT(b.bezeichnung, ' *'), + 1, + " . $this->app->erp->MaxArtikelbezeichnung() . " + ), + '...' + ), + CONCAT(b.bezeichnung, ' *') + ), + IF( + CHAR_LENGTH(b.bezeichnung) > " . $this->app->erp->MaxArtikelbezeichnung() . ", + CONCAT( + SUBSTR( + b.bezeichnung, + 1, + " . $this->app->erp->MaxArtikelbezeichnung() . " + ), + '...' + ), + b.bezeichnung + ) + ) AS Artikel, + p.abkuerzung AS projekt, + a.nummer, + ".$this->app->erp->FormatDate('lieferdatum')." AS lieferdatum, + TRIM(b.menge) +0 AS menge, + " . $this->FormatPreis($preiscell) . " AS preis, + " . $this->FormatPreis($preiscell."*menge") . " AS Betrag, + CONCAT( + k.sachkonto, + ' - ', + k.beschriftung + ) AS sachkonto, + b.id AS id + FROM + $table b + LEFT JOIN artikel a ON + a.id = b.artikel + LEFT JOIN projekt p ON + b.projekt = p.id + LEFT JOIN kontorahmen k ON + k.id = b.sachkonto + WHERE + b.$module = '$id' + "; } else { $sql = null; @@ -14875,8 +14919,6 @@ source: "index.php?module=ajax&action=filter&filtername=' . $filter . $extendurl $table->headings[4] = 'Abr. bei Kd'; $table->headings[5] = 'sonst. MwSt'; // kann man auch umbenennen in Keine - - $table->headings[6] = 'MwSt'; $table->headings[7] = 'Kommentar'; $table->headings[8] = 'Bezahlt'; diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json index 0cdae6d1..28e41a5b 100644 --- a/upgrade/data/db_schema.json +++ b/upgrade/data/db_schema.json @@ -52371,6 +52371,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "nummer", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "PRI", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "bezeichnung", "Type": "varchar(255)", @@ -52382,6 +52393,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "beschreibung", + "Type": "varchar(255)", + "Collation": "utf8mb3_general_ci", + "Null": "NO", + "Key": "", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "projekt", "Type": "varchar(255)", @@ -108959,6 +108981,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "datum", + "Type": "date", + "Collation": null, + "Null": "YES", + "Key": "", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "status_beleg", "Type": "varchar(64)", @@ -110685,6 +110718,39 @@ "Extra": "", "Privileges": "select,insert,update,references", "Comment": "" + }, + { + "Field": "steuersatz_normal", + "Type": "decimal(5,2)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": "0", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, + { + "Field": "steuersatz_ermaessigt", + "Type": "decimal(5,2)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": "0", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, + { + "Field": "ust_befreit", + "Type": "int(1)", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": "0", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" } ], "keys": [ diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index b26ef436..cf79da0d 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -35375,6 +35375,7 @@ function Firmendaten($field,$projekt="") { case 'bestellung': case 'anfrage': + case 'verbindlichkeit': $aufwendung = true; break; } diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl index 83562c18..005111c2 100644 --- a/www/pages/content/verbindlichkeit_edit.tpl +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -9,16 +9,19 @@ [FORMHANDLEREVENT]
-
+
-
+
{|Verbindlichkeit [BELEGNR] Lf-Nr. [LIEFERANTENNUMMER]|} - [STATUSICONS] -
+ [STATUSICONS] +
+
+ +
@@ -27,14 +30,22 @@
-
+
+ + + + @@ -42,7 +53,7 @@ {|Rechnung|}: @@ -50,26 +61,82 @@ {|Rechnungsdatum|}: + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+ {|Status|}: + + +
{|Adresse|}: - +
- +
- +
+ {|Eingangsdatum|}: + + +
{|Betrag|}: - - + +
+ {|Betrag netto|}: + + +
{|Zahlbarbis|}: - + +
+ {|Skonto %|}: + +
+ {|Skontobis|}: + + +
+ {|Waren-/Leistungsprüfung (Einkauf)|}: + + +
+ {|Rechnungseingangsprüfung (Buchhaltung)|}: + + +
+ {|Bezahlt|}: + + +
{|Projekt|}: @@ -78,38 +145,6 @@
- {|Eingangsdatum|}: - - -
- {|Zahlungsweise|}: - - -
- {|Skonto|}: - - -
- {|Skontobis|}: - - -
{|Kostenstelle|}: @@ -117,45 +152,13 @@
- {|Sachkonto|}: - - -
- {|Waren-/Leistungsprüfung (Einkauf)|}: - - -
- {|Rechnungseingangsprüfung (Buchhaltung)|}: - - -
- {|Bezahlt|}: - - -
{|Internebemerkung|}: - +
@@ -166,7 +169,7 @@
-
+
{|Vorschau|} @@ -176,7 +179,6 @@
-
diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index ac4de5e3..a0d39f3e 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -1,7 +1,8 @@ app->ActionHandler("dateien", "verbindlichkeit_dateien"); $this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf"); $this->app->ActionHandler("positioneneditpopup", "verbindlichkeit_positioneneditpopup"); + $this->app->ActionHandler("freigabe", "verbindlichkeit_freigabe"); $this->app->DefaultActionHandler("list"); $this->app->ActionHandlerListen($app); @@ -35,7 +37,7 @@ class Verbindlichkeit { 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ü'); + $heading = array('','','Belegnr','Adresse', 'Lieferant', 'RE-Nr', 'RE-Datum', 'Betrag (brutto)', 'Währung', 'Ziel','Skontoziel','Skonto','Status','Monitor', 'Menü'); $width = array('1%','1%','10%'); // Fill out manually later // columns that are aligned right (numbers etc) @@ -54,6 +56,7 @@ class Verbindlichkeit { 'v.zahlbarbis', 'v.skontobis', 'v.skonto', + 'v.status', 'v.status_beleg', 'v.id' ); @@ -91,6 +94,7 @@ class Verbindlichkeit { ".$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).",'%'),''), + v.status, ".$app->YUI->IconsSQLVerbindlichkeit().", v.id FROM verbindlichkeit v LEFT JOIN adresse a ON v.adresse = a.id @@ -159,17 +163,30 @@ class Verbindlichkeit { if (empty($id)) { // New item $id = 'NULL'; + $input['status'] = 'angelegt'; } if ($submit != '') { - // Write to database - + // Write to database // Add checks here + $status = $this->app->DB->Select("SELECT status FROM verbindlichkeit WHERE id =".$id); - // $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? + if ($status != 'angelegt' && $id != 'NULL') { + $internebemerkung = $input['internebemerkung']; + unset($input); + $input['internebemerkung'] = $internebemerkung; + } else { + $input['adresse'] = $this->app->erp->ReplaceAdresse(true,$input['adresse'],true); // Parameters: Target db?, value, from form? + $input['rechnungsdatum'] = $this->app->erp->ReplaceDatum(true,$input['rechnungsdatum'],true); // Parameters: Target db?, value, from form? + $input['eingangsdatum'] = $this->app->erp->ReplaceDatum(true,$input['eingangsdatum'],true); // Parameters: Target db?, value, from form? + $input['skontobis'] = $this->app->erp->ReplaceDatum(true,$input['skontobis'],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['kostenstelle'] = $this->app->erp->ReplaceKostenstelle(true,$input['kostenstelle'],true); + $input['sachkonto'] = $this->app->erp->ReplaceKontorahmen(true,$input['sachkonto'],true); + } $columns = "id, "; $values = "$id, "; @@ -196,8 +213,9 @@ class Verbindlichkeit { $this->app->DB->Update($sql); if ($id == 'NULL') { + $id = $this->app->DB->GetInsertID(); $msg = $this->app->erp->base64_url_encode("
Das Element wurde erfolgreich angelegt.
"); - header("Location: index.php?module=verbindlichkeit&action=list&msg=$msg"); + header("Location: index.php?module=verbindlichkeit&action=edit&id=$id&msg=$msg"); } else { $this->app->Tpl->Set('MESSAGE', "
Die Einstellungen wurden erfolgreich übernommen.
"); } @@ -216,6 +234,49 @@ class Verbindlichkeit { $verbindlichkeit_from_db = $result[0]; } + // Summarize positions + + $sql = "SELECT * FROM verbindlichkeit_position WHERE verbindlichkeit = ".$id; + $positionen = $this->app->DB->SelectArr($sql); + + if (!empty($positionen)) { + $betrag_netto = 0; + $betrag_brutto = 0; + $steuer_normal = 0; + $steuer_ermaessigt = 0; + + /* + Normal: umsatzsteuer leer, steuersatz = leer + Ermäßigt: umsatzsteuer ermaessigt, steuersatz = -1 + Befreit: umsatzsteuer befreit, steursatz = -1 + Individuell: umsatzsteuer leer, steuersatz = wert + */ + + foreach ($positionen as $position) { + + $tmpsteuersatz = null; + $tmpsteuertext = null; + $erloes = null; + + // function GetSteuerPosition($typ, $posid,&$tmpsteuersatz = null, &$tmpsteuertext = null, &$erloes = null) + + $this->app->erp->GetSteuerPosition("verbindlichkeit",$position['id'],$tmpsteuersatz,$tmpsteuertext,$erloes); + + $position['steuersatz_berechnet'] = $tmpsteuersatz; + $position['steuertext_berechnet'] = $tmpsteuertext; + $position['steuererloes_berechnet'] = $erloes; + + $betrag_netto += ($position['menge']*$position['preis']); + $betrag_brutto += ($position['menge']*$position['preis'])*(1+($tmpsteuersatz/100)); + + } + + $this->app->Tpl->Set('BETRAGNETTO', $betrag_netto); + $this->app->Tpl->Set('BETRAGBRUTTO', round($betrag_brutto,2)); + + $this->app->Tpl->Set('BETRAGDISABLED', 'disabled'); + + } /* * Add displayed items later @@ -228,6 +289,23 @@ class Verbindlichkeit { */ + if ($verbindlichkeit_from_db['status'] != 'angelegt' && $id != 'NULL') { + $this->app->Tpl->Set('SAVEDISABLED','disabled'); + } + + $this->app->Tpl->Set('FREIGABECHECKED', $verbindlichkeit_from_db['freigabe']==1?"checked":""); + $this->app->Tpl->Set('RECHNUNGSFREIGABECHECKED', $verbindlichkeit_from_db['rechnungsfreigabe']==1?"checked":""); + $this->app->Tpl->Set('BEZAHLTCHECKED', $verbindlichkeit_from_db['bezahlt']==1?"checked":""); + + $this->app->Tpl->Set('RECHNUNGSDATUM',$this->app->erp->ReplaceDatum(false,$verbindlichkeit_from_db['rechnungsdatum'],false)); + $this->app->YUI->DatePicker("rechnungsdatum"); + $this->app->Tpl->Set('EINGANGSDATUM',$this->app->erp->ReplaceDatum(false,$verbindlichkeit_from_db['eingangsdatum'],false)); + $this->app->YUI->DatePicker("eingangsdatum"); + $this->app->Tpl->Set('SKONTOBIS',$this->app->erp->ReplaceDatum(false,$verbindlichkeit_from_db['skontobis'],false)); + $this->app->YUI->DatePicker("skontobis"); + $this->app->Tpl->Set('ZAHLBARBIS',$this->app->erp->ReplaceDatum(false,$verbindlichkeit_from_db['zahlbarbis'],false)); + $this->app->YUI->DatePicker("zahlbarbis"); + $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"; @@ -235,6 +313,12 @@ class Verbindlichkeit { $this->app->Tpl->Add('STATUSICONS', $icons[0]['icons']); $this->app->YUI->AutoComplete("adresse", "adresse"); + $this->app->YUI->AutoComplete("projekt", "projektname", 1); + $this->app->Tpl->Set('PROJEKT',$this->app->erp->ReplaceProjekt(false,$verbindlichkeit_from_db['projekt'],false)); + $this->app->YUI->AutoComplete("kostenstelle", "kostenstelle", 1); + $this->app->Tpl->Set('KOSTENSTELLE',$this->app->erp->ReplaceKostenstelle(false,$verbindlichkeit_from_db['kostenstelle'],false)); + $this->app->YUI->AutoComplete("sachkonto","sachkonto_aufwendungen",1); + $this->app->Tpl->Set('SACHKONTO',$this->app->erp->ReplaceKontorahmen(false,$verbindlichkeit_from_db['sachkonto'],false)); $waehrungenselect = $this->app->erp->GetSelect($this->app->erp->GetWaehrung(), $verbindlichkeit_from_db['waehrung']); $this->app->Tpl->Set('WAEHRUNG', $waehrungenselect); @@ -243,11 +327,17 @@ class Verbindlichkeit { $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 = ""; - $this->app->Tpl->Set('INLINEPDF', $iframe); + $anzahldateien = $this->app->erp->AnzahlDateien("verbindlichkeit",$id); + if ($anzahldateien > 0) { + $file = urlencode("../../../../index.php?module=verbindlichkeit&action=inlinepdf&id=$id"); + $iframe = ""; + $this->app->Tpl->Set('INLINEPDF', $iframe); + } else { + $this->app->Tpl->Set('INLINEPDF', 'Keine Dateien vorhanden.'); + } $this->app->Tpl->Parse('PAGE', "verbindlichkeit_edit.tpl"); + } /** @@ -263,12 +353,12 @@ class Verbindlichkeit { $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['bezahlt'] = $this->app->Secure->GetPOST('bezahlt')?'1':'0';; $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['freigabe'] = $this->app->Secure->GetPOST('freigabe')?'1':'0'; + $input['rechnungsfreigabe'] = $this->app->Secure->GetPOST('rechnungsfreigabe')?'1':'0'; $input['kostenstelle'] = $this->app->Secure->GetPOST('kostenstelle'); $input['sachkonto'] = $this->app->Secure->GetPOST('sachkonto'); $input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung'); @@ -283,9 +373,25 @@ class Verbindlichkeit { } else { $anzahldateien=""; } + + if ($id != 'NULL') { + $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=dateien&id=$id", "Dateien".$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); + + $invoiceArr = $this->app->DB->SelectRow("SELECT v.belegnr, a.name, v.status FROM verbindlichkeit v LEFT JOIN adresse a ON v.adresse = a.id WHERE v.id='$id' LIMIT 1"); + $belegnr = $invoiceArr['belegnr']; + $name = $invoiceArr['name']; + if($belegnr=='0' || $belegnr=='') { + $belegnr ='(Entwurf)'; + } + $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Rechnung $belegnr"); + $status = $invoiceArr['status']; + if ($status==='angelegt') { + $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=freigabe&id=$id",'Freigabe'); + } } function verbindlichkeit_dateien() @@ -402,4 +508,12 @@ class Verbindlichkeit { $this->app->BuildNavigation=false; } + function verbindlichkeit_freigabe() + { + $id = $this->app->Secure->GetGET('id'); + $this->app->erp->BelegFreigabe('verbindlichkeit',$id); + $this->verbindlichkeit_edit(); + } + + } diff --git a/www/widgets/_gen/widget.gen.verbindlichkeit_position.php b/www/widgets/_gen/widget.gen.verbindlichkeit_position.php index 8fe52cc0..71b00ae7 100644 --- a/www/widgets/_gen/widget.gen.verbindlichkeit_position.php +++ b/www/widgets/_gen/widget.gen.verbindlichkeit_position.php @@ -85,10 +85,7 @@ class WidgetGenverbindlichkeit_position $this->form->NewField($field); $this->form->AddMandatory("menge","notempty","Pflichtfeld!","MSGMENGE"); - $field = new HTMLInput("preis","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("waehrung","text","","15","","","","","","","","0","",""); + $field = new HTMLInput("preis","text","","40","","","","","","","","0","",""); $this->form->NewField($field); $field = new HTMLSelect("umsatzsteuer",0,"umsatzsteuer","","","0"); diff --git a/www/widgets/templates/_gen/verbindlichkeit_position.tpl b/www/widgets/templates/_gen/verbindlichkeit_position.tpl index 24c4ac26..a8923644 100644 --- a/www/widgets/templates/_gen/verbindlichkeit_position.tpl +++ b/www/widgets/templates/_gen/verbindlichkeit_position.tpl @@ -36,8 +36,8 @@ $('#anderersteuersatz').click(function() { if (!$(this).is(':checked')) { {|Artikel-Nr|}:[NUMMER][MSGNUMMER] {|Beschreibung|}:[BESCHREIBUNG][MSGBESCHREIBUNG] {|Menge|}:[MENGE][MSGMENGE] - {|Preis|}:[PREIS][MSGPREIS] - {|Währung|}:[WAEHRUNG][MSGWAEHRUNG] [WAEHRUNGSBUTTON] + {|Preis|}:[PREIS][MSGPREIS][WAEHRUNG] + {|Steuersatz|}:[UMSATZSTEUER][MSGUMSATZSTEUER]  [ANDERERSTEUERSATZ][MSGANDERERSTEUERSATZ] individuellen Steuersatz verwenden From fa9b572e3ee3250cdc069cb76c61f7ee558ac6c6 Mon Sep 17 00:00:00 2001 From: ibs Date: Fri, 15 Dec 2023 01:53:52 +0100 Subject: [PATCH 05/62] missing quotes added --- phpwf/plugins/class.mysql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpwf/plugins/class.mysql.php b/phpwf/plugins/class.mysql.php index f47f3f96..45aa4686 100644 --- a/phpwf/plugins/class.mysql.php +++ b/phpwf/plugins/class.mysql.php @@ -1230,7 +1230,7 @@ class DB{ $sql = "UPDATE `$tablename` SET "; foreach($ArrCols as $key=>$value) { if($key!=$pkname && (isset($ziel[$key]) || !$zielspalten)) { - $sqla[] = $key." = '".($escape?$this->real_escape_string($value):$value)."' "; + $sqla[] = "`".$key."` = '".($escape?$this->real_escape_string($value):$value)."' "; } } if(!empty($sqla)) { From bef8e0221746a2411ead571655223668d3c0db26 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Fri, 15 Dec 2023 19:03:16 +0100 Subject: [PATCH 06/62] api_accounts fillApiPermissions if empty --- www/pages/api.php | 28830 ++++++++++++++++++------------------ www/pages/api_account.php | 596 +- 2 files changed, 14716 insertions(+), 14710 deletions(-) diff --git a/www/pages/api.php b/www/pages/api.php index 4614fc56..d88f520d 100644 --- a/www/pages/api.php +++ b/www/pages/api.php @@ -1,14418 +1,14418 @@ - $value) { - if (substr($name, 0, 5) == 'HTTP_') { - $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; - } - } - return $headers; - } - } - - - if(!class_exists('SimpleXMLExtended')) { - class SimpleXMLExtended extends SimpleXMLElement - { - /** - * @param $cdata_text - */ - public function addCData($cdata_text) - { - $node = dom_import_simplexml($this); - $no = $node->ownerDocument; - $node->appendChild($no->createCDATASection($cdata_text)); - } - } - } - - class Api { - /** @var Application $app */ - var $app; - var $api_id; - var $uebertragung_account; - var $usejson; - var $usecdata; - var $datei_id; - var $lagerzahlenmonitor; - var $lagerzahlen; - - /** @var \Xentral\Modules\ApiAccount\Service\ApiAccountService */ - protected $apiAccountService; - - /** @var \Xentral\Modules\ApiAccount\Data\ApiAccountData */ - protected $apiAccount; - - /** @var array $bestBeforeBatchArticleStock */ - protected $bestBeforeBatchArticleStock; - - /** - * Api constructor. - * - * @param Application $app - * @param bool $intern - */ - public function __construct($app, $intern = false) { - -// header("Content-Type: text/html; charset=utf-8"); - - $this->app=$app; - $this->usejson = false; - $this->usecdata = false; - $this->api_id = 0; - $this->datei_id = 0; - $this->apiAccountService = $this->app->Container->get('ApiAccountService'); - - if($intern) { - return; - } - $this->app->ActionHandlerInit($this); - // eine alte Funktion - $this->app->ActionHandler("shopimages","ApiShopimages"); - - //Stechuhr - $this->app->ActionHandler("ServerTimeGet","ApiServerTimeGet"); - $this->app->ActionHandler("BenutzerGetRFID","ApiBenutzerGetRFID"); - $this->app->ActionHandler("BenutzerList","ApiBenutzerList"); - $this->app->ActionHandler("StechuhrStatusGet","ApiStechuhrStatusGet"); - $this->app->ActionHandler("StechuhrStatusSet","ApiStechuhrStatusSet"); - $this->app->ActionHandler("StechuhrSummary","ApiStechuhrSummary"); - - $this->app->ActionHandler("AdresseCreate","ApiAdresseCreate"); - $this->app->ActionHandler("AdresseEdit","ApiAdresseEdit"); - $this->app->ActionHandler("AdresseGet","ApiAdresseGet"); - - $this->app->ActionHandler("AnsprechpartnerCreate","ApiAnsprechpartnerCreate"); - $this->app->ActionHandler("AnsprechpartnerEdit","ApiAnsprechpartnerEdit"); - - $this->app->ActionHandler("LieferadresseCreate","ApiLieferadresseCreate"); - $this->app->ActionHandler("LieferadresseEdit","ApiLieferadresseEdit"); - - $this->app->ActionHandler("AdresseAboGruppeCreate","ApiAdresseAboGruppeCreate"); - $this->app->ActionHandler("AdresseAboGruppeEdit","ApiAdresseAboGruppeEdit"); - $this->app->ActionHandler("AdresseAboGruppeGet","ApiAdresseAboGruppeGet"); - $this->app->ActionHandler("AdresseAboGruppeList","ApiAdresseAboGruppeList"); - - $this->app->ActionHandler("AdresseAboArtikelCreate","ApiAdresseAboArtikelCreate"); - $this->app->ActionHandler("AdresseAboArtikelEdit","ApiAdresseAboArtikelEdit"); - $this->app->ActionHandler("AdresseAboArtikelGet","ApiAdresseAboArtikelGet"); - $this->app->ActionHandler("AdresseAboArtikelList","ApiAdresseAboArtikelList"); - - $this->app->ActionHandler("BerichteGet", "ApiBerichteGet"); - - $this->app->ActionHandler("ArtikelList", "ApiArtikelList"); - $this->app->ActionHandler("ArtikelStueckliste", "ApiArtikelStueckliste"); - - $this->app->ActionHandler("AuftragCreate","ApiAuftragCreate"); - $this->app->ActionHandler("AuftragEdit","ApiAuftragEdit"); - $this->app->ActionHandler("AuftragGet","ApiAuftragGet"); - - $this->app->ActionHandler("AngebotCreate","ApiAngebotCreate"); - $this->app->ActionHandler("AngebotEdit","ApiAngebotEdit"); - $this->app->ActionHandler("AngebotGet","ApiAngebotGet"); - - $this->app->ActionHandler("GutschriftGet","ApiGutschriftGet"); - $this->app->ActionHandler("GutschriftEdit","ApiGutschriftEdit"); - $this->app->ActionHandler("GutschriftCreate","ApiGutschriftCreate"); - - $this->app->ActionHandler("LieferscheinGet","ApiLieferscheinGet"); - $this->app->ActionHandler("LieferscheinEdit","ApiLieferscheinEdit"); - $this->app->ActionHandler("LieferscheinCreate","ApiLieferscheinCreate"); - - $this->app->ActionHandler("LieferscheinFreigabe", "ApiLieferscheinFreigabe"); - $this->app->ActionHandler("RechnungFreigabe", "ApiRechnungFreigabe"); - $this->app->ActionHandler("AuftragFreigabe", "ApiAuftragFreigabe"); - $this->app->ActionHandler("AngebotFreigabe", "ApiAngebotFreigabe"); - $this->app->ActionHandler("GutschriftFreigabe", "ApiGutschriftFreigabe"); - $this->app->ActionHandler("BestellungFreigabe", "ApiBestellungFreigabe"); - - $this->app->ActionHandler("AuftragAbschliessen", "ApiAuftragAbschliessen"); - $this->app->ActionHandler("RechnungVersendetMarkieren", "ApiRechnungVersendetMarkieren"); - $this->app->ActionHandler("RechnungAlsBezahltMarkieren", "ApiRechnungAlsBezahltMarkieren"); - - $this->app->ActionHandler("WeiterfuehrenAuftragZuRechnung", "ApiWeiterfuehrenAuftragZuRechnung"); - $this->app->ActionHandler("WeiterfuehrenRechnungZuGutschrift", "ApiWeiterfuehrenRechnungZuGutschrift"); - - $this->app->ActionHandler("RechnungVersenden", "ApiRechnungVersenden"); - $this->app->ActionHandler("AngebotVersenden", "ApiAngebotVersenden"); - $this->app->ActionHandler("GutschriftVersenden", "ApiGutschriftVersenden"); - $this->app->ActionHandler("AuftragVersenden", "ApiAuftragVersenden"); - $this->app->ActionHandler("LieferscheinVersenden", "ApiLieferscheinVersenden"); - $this->app->ActionHandler("ReisekostenVersenden", "ApiReisekostenVersenden"); - - $this->app->ActionHandler("AuftragArchivieren", "ApiAuftragArchivieren"); - $this->app->ActionHandler("AngebotArchivieren", "ApiAngebotArchivieren"); - $this->app->ActionHandler("LieferscheinArchivieren", "ApiLieferscheinArchivieren"); - $this->app->ActionHandler("RechnungArchivieren", "ApiRechnungArchivieren"); - $this->app->ActionHandler("GutschriftArchivieren", "ApiGutschriftArchivieren"); - - $this->app->ActionHandler("RetoureGet","ApiRetoureGet"); - $this->app->ActionHandler("RetoureEdit","ApiRetoureEdit"); - $this->app->ActionHandler("RetoureCreate","ApiRetoureCreate"); - - $this->app->ActionHandler("RechnungGet","ApiRechnungGet"); - $this->app->ActionHandler("RechnungEdit","ApiRechnungEdit"); - $this->app->ActionHandler("RechnungCreate","ApiRechnungCreate"); - - $this->app->ActionHandler("BestellungGet","ApiBestellungGet"); - $this->app->ActionHandler("BestellungEdit","ApiBestellungEdit"); - $this->app->ActionHandler("BestellungCreate","ApiBestellungCreate"); - - $this->app->ActionHandler("ArtikelCreate","ApiArtikelCreate"); - $this->app->ActionHandler("ArtikelEdit","ApiArtikelEdit"); - $this->app->ActionHandler("ArtikelGet","ApiArtikelGet"); - - $this->app->ActionHandler("ArtikelStuecklisteCreate", "ApiArtikelStuecklisteCreate"); - $this->app->ActionHandler("ArtikelStuecklisteEdit", "ApiArtikelStuecklisteEdit"); - $this->app->ActionHandler("ArtikelStuecklisteList", "ApiArtikelStuecklisteList"); - - $this->app->ActionHandler("BenutzerCreate","ApiBenutzerCreate"); - $this->app->ActionHandler("BenutzerEdit","ApiBenutzerEdit"); - $this->app->ActionHandler("BenutzerGet","ApiBenutzerGet"); - - $this->app->ActionHandler("SessionStart","ApiSessionStart"); - $this->app->ActionHandler("SessionClose","ApiSessionClose"); - - $this->app->ActionHandler("AdresseKontaktCreate","ApiAdresseKontaktCreate"); - $this->app->ActionHandler("AdresseKontaktEdit","ApiAdresseKontaktEdit"); - $this->app->ActionHandler("AdresseKontaktGet","ApiAdresseKontaktGet"); - $this->app->ActionHandler("AdresseKontaktList","ApiAdresseKontaktList"); - - $this->app->ActionHandler("AdresseListeGet","ApiAdresseListeGet"); - - $this->app->ActionHandler("GruppeCreate","ApiGruppeCreate"); - $this->app->ActionHandler("GruppeEdit","ApiGruppeEdit"); - $this->app->ActionHandler("GruppeGet","ApiGruppeGet"); - - $this->app->ActionHandler("GruppenList","ApiGruppenList"); - - $this->app->ActionHandler("PreiseEdit","ApiPreiseEdit"); - - $this->app->ActionHandler("ExportVorlageGet","ApiExportVorlageGet"); - $this->app->ActionHandler("AdresseAccountsGet","ApiAdresseAccountsGet"); - $this->app->ActionHandler("ArtikelkontingenteGet","ApiArtikelkontingenteGet"); - - $this->app->ActionHandler("MappingGet","ApiMappingGet"); - $this->app->ActionHandler("MappingSet","ApiMappingSet"); - - $this->app->ActionHandler("BelegeList","ApiBelegeList"); - $this->app->ActionHandler("ArtikelkategorienList","ApiArtikelkategorienList"); - - $this->app->ActionHandler("AccountList", "ApiAccountList"); - $this->app->ActionHandler("AdresseGruppenList", "ApiAdresseGruppenList"); - $this->app->ActionHandler("AccountLogin", "ApiAccountLogin"); - $this->app->ActionHandler("AccountCreate", "ApiAdresseAccountCreate"); - $this->app->ActionHandler("AccountEdit", "ApiAdresseAccountEdit"); - - $this->app->ActionHandler("DateiList", "ApiDateiList"); - $this->app->ActionHandler("DateiVorschau", "ApiDateiVorschau"); - $this->app->ActionHandler("DateiDownload", "ApiDateiDownload"); - $this->app->ActionHandler("DateiHeader", "ApiDateiHeader"); - - $this->app->ActionHandler("BelegPDF", "ApiBelegPDF"); - $this->app->ActionHandler("BelegPDFHeader", "ApiBelegPDFHeader"); - - $this->app->ActionHandler("ZeiterfassungGet", "ApiZeiterfassungGet"); - $this->app->ActionHandler("ZeiterfassungCreate", "ApiZeiterfassungCreate"); - $this->app->ActionHandler("ZeiterfassungEdit", "ApiZeiterfassungEdit"); - $this->app->ActionHandler("ZeiterfassungDelete", "ApiZeiterfassungDelete"); - - $this->app->ActionHandler("ProjektListe", "ApiProjektListe"); - $this->app->ActionHandler("ProjektGet", "ApiProjektGet"); - $this->app->ActionHandler("ProjektCreate", "ApiProjektCreate"); - $this->app->ActionHandler("ProjektEdit", "ApiProjektEdit"); - - $this->app->ActionHandler("AngebotZuAuftrag", "ApiAngebotZuAuftrag"); - $this->app->ActionHandler("AuftragZuRechnung", "ApiAuftragZuRechnung"); - $this->app->ActionHandler("Etikettendrucker", "ApiEtikettendrucker"); - $this->app->ActionHandler("Custom", "ApiCustom"); - - $this->app->ActionHandler("ApiXMLTest", "ApiXMLTest"); - - $allHeaders = getallheaders(); - if (isset($allHeaders['Accept']) && strpos($allHeaders['Accept'], 'json') !== false) { - $this->usejson = true; - } - - $this->CheckHash(); - - $this->app->ActionHandlerListen($app); - } - - public function Install() - { - $this->app->erp->CheckTable('api_permission'); - $this->app->erp->CheckColumn('key', 'varchar(255)', 'api_permission'); - $this->app->erp->CheckIndex('api_permission', 'key', true); - $this->app->erp->CheckColumn('group', 'varchar(255)', 'api_permission'); - $this->fillApiPermissions(); - - $this->app->erp->CheckColumn('permissions', 'text', 'api_account'); - $this->app->erp->CheckColumn('ishtmltransformation','TINYINT(1)','api_account','DEFAULT \'0\' NOT NULL'); - $this->migrateApiAccounts(); - $this->migrateApiAccountFromCompanyData(); - - $this->migrateNewActions(); - $this->renamePermissions(); - - } - - /** - * Migrate the old api account from company data - */ - protected function migrateApiAccountFromCompanyData(): void - { - $initKey = $this->app->erp->Firmendaten('api_initkey'); - $remoteDomain = $this->app->erp->Firmendaten('api_remotedomain'); - $eventUrl = $this->app->erp->Firmendaten('api_eventurl'); - $enable = $this->app->erp->Firmendaten('api_enable'); - $cleanUtf8 = $this->app->erp->Firmendaten('api_cleanutf8'); - $importWarteschlange = $this->app->erp->Firmendaten('api_importwarteschlange'); - $importWarteschlangeName = $this->app->erp->Firmendaten('api_importwarteschlange_name'); - $apiOhneHtmlUmwandlung = $this->app->erp->Firmendaten('apiohnehtmlumwandlung'); - - if(empty($remoteDomain)){ - return; - } - - $sql = "SELECT `id` FROM `api_account` WHERE remotedomain = '" . $remoteDomain . "'"; - $isExisting = $this->app->DB->Select($sql) > 0; - - if($isExisting){ - return; - } - - $availablePermissions = []; - foreach ($this->getGroupedPermissions() as $group => $permissions) { - $availablePermissions = array_merge($availablePermissions, $permissions); - } - - $sql = - "INSERT INTO `api_account` ( - `bezeichnung`, - `initkey`, - `importwarteschlange_name`, - `event_url`, - `remotedomain`, - `aktiv`, - `importwarteschlange`, - `cleanutf8`, - `uebertragung_account`, - `projekt`, - `is_legacy`, - `permissions`, - `ishtmltransformation` - ) VALUES ( - 'Migration - " . $remoteDomain . "', - '" . $initKey . "', - '" . $importWarteschlangeName . "', - '" . $eventUrl . "', - '" . $remoteDomain . "', - " . $enable . ", - " . $importWarteschlange . ", - " . $cleanUtf8 . ", - 0, - 0, - 0, - '" . json_encode($availablePermissions) ."', - " . $apiOhneHtmlUmwandlung . " - )"; - - $isInserted = (bool)$this->app->DB->Insert($sql); - - if($isInserted){ - $apiId = $this->app->DB->GetInsertID(); - - /** @var SystemConfigModule $systemConfig */ - $systemConfig = $this->app->Container->get('SystemConfigModule'); - $systemConfig->setValue('apiaccount','migratedapiid',$apiId); - - $this->app->erp->FirmendatenSet('api_initkey',''); - $this->app->erp->FirmendatenSet('api_remotedomain',''); - $this->app->erp->FirmendatenSet('api_eventurl',''); - $this->app->erp->FirmendatenSet('api_enable',0); - $this->app->erp->FirmendatenSet('api_cleanutf8',0); - $this->app->erp->FirmendatenSet('api_importwarteschlange',0); - $this->app->erp->FirmendatenSet('api_importwarteschlange_name',''); - $this->app->erp->FirmendatenSet('apiohnehtmlumwandlung',0); - - - $emptyValues = [ - 'api_initkey' => '', - 'api_remotedomain' => '', - 'api_eventurl' => '', - 'api_enable' => 0, - 'api_cleanutf8' => 0, - 'api_importwarteschlange' => 0, - 'api_importwarteschlange_name' => '', - 'apiohnehtmlumwandlung' => 0 - ]; - foreach ($emptyValues as $name => $emptyValue){ - $sql = "UPDATE `firmendaten_werte` SET `wert` = '".$emptyValue. "' WHERE `name` = '".$name."'"; - $this->app->DB->Update($sql); - } - } - } - - private function migrateNewActions() - { - $customActions = $this->getLegacyApiCustomActions(); - if(empty($customActions)) { - return; - } - $group = 'custom'; - $accounts = $this->app->DB->SelectPairs( - 'SELECT `id`, `permissions` FROM `api_account` WHERE `is_legacy` = 1' - ); - $accountsWithPermissions = []; - foreach($accounts as $accountId => $jsonEncodedPermissions) { - $permissionDecoded = json_decode($jsonEncodedPermissions, true)?:[]; - if(!in_array('standard_custom', $permissionDecoded)) { - continue; - } - - $accountsWithPermissions[$accountId] = $permissionDecoded; - } - - $hasAccountPermissionChanged = false; - foreach($customActions as $customAction) { - $permissionKey = 'standard_'.$customAction; - // check if permission exists in table - $result = $this->app->DB->Count("SELECT * FROM `api_permission` WHERE `key` = '$permissionKey'"); - if($result !== 0){ - continue; - } - // if it does not exist, insert it - $this->app->DB->InsertArr('api_permission', 'id', [ - 'key' => $permissionKey, - 'group' => $group - ]); - if(empty($accountsWithPermissions)) { - continue; - } - $hasAccountPermissionChanged = true; - foreach($accountsWithPermissions as $accountId => $permissions) { - $accountsWithPermissions[$accountId][] = $permissionKey; - } - } - - if(!$hasAccountPermissionChanged) { - return; - } - foreach($accountsWithPermissions as $accountId => $permissions) { - $this->app->DB->Update( - sprintf( - "UPDATE `api_account` SET `permissions` = '%s' WHERE `id` = %d", - $this->app->DB->real_escape_string(json_encode($permissions)), $accountId - ) - ); - } - } - - private function migrateApiAccounts() - { - $isMigrated = $this->app->DB->Query("SHOW COLUMNS FROM `api_account` LIKE 'is_legacy'")->num_rows > 0; - if(!$isMigrated){ - $availablePermissions = []; - foreach ($this->getGroupedPermissions() as $group => $permissions) { - $availablePermissions = array_merge($availablePermissions, $permissions); - } - $this->app->erp->CheckColumn('is_legacy', 'tinyint(1)', 'api_account',"DEFAULT '1' NOT NULL"); - $apiAccounts = $this->app->DB->SelectArr('SELECT * FROM `api_account`'); - foreach ($apiAccounts as $apiAccount){ - $this->app->DB->Update( - sprintf( - "UPDATE `api_account` SET `permissions` = '%s' WHERE `id` = %d", - json_encode($availablePermissions), - $apiAccount['id'] - ) - ); - } - $this->app->erp->UpdateColumn('is_legacy', 'tinyint(1)', 'api_account',"DEFAULT '0' NOT NULL"); - } - } - - private function getGroupedPermissions() - { - return [ - 'accounts' => [ - 'standard_accountlist', - 'standard_accountlogin', - 'standard_accountcreate', - 'standard_accountedit', - 'standard_adresseaccountsget', - ], - 'addresses' => [ - 'standard_adressecreate', - 'standard_adresseedit', - 'standard_adresseget', - 'standard_adresselisteget', - 'standard_adressegruppenget', - 'create_address', // /v1/adressen - POST - 'list_addresses', // /v1/adressen - GET - 'view_address', // /v1/adressen/{id:\d+} - GET - 'edit_address', // /v1/adressen/{id:\d+} - PUT - ], - 'address_types' => [ - 'create_address_type', // /v1/adresstyp - POST - 'list_address_types', // /v1/adresstyp - GET - 'view_address_type', // /v1/adresstyp/{id:\d+} - GET - 'edit_address_type', // /v1/adresstyp/{id:\d+} - PUT - ], - 'articles' => [ - 'standard_artikelcreate', - 'standard_artikeledit', - 'standard_artikelget', - 'standard_artikellist', - 'standard_artikelstueckliste', - 'standard_artikelstuecklistecreate', - 'standard_artikelstuecklisteedit', - 'standard_artikelstuecklistelist', - 'standard_artikelkontingenteget', - 'standard_preiseedit', - 'list_articles', // /v1/artikel - GET - 'view_article', // /v1/artikel/{id:\d+} - GET - ], - 'article_categories' => [ - 'standard_artikelkategorienlist', - 'create_article_category', // /v1/artikelkategorien - POST - 'list_article_categories', // /v1/artikelkategorien - GET - 'view_article_category', // /v1/artikelkategorien/{id:\d+} - GET - 'edit_article_category', // /v1/artikelkategorien/{id:\d+} - PUT - ], - 'contacts' => [ - 'standard_ansprechpartnercreate', - 'standard_ansprechpartneredit', - 'standard_adressekontaktcreate', - 'standard_adressekontaktedit', - 'standard_adressekontaktget', - 'standard_adressekontaktlist', - ], - 'countries' => [ - 'create_country', // /v1/laender - POST - 'list_countries', // /v1/laender - GET - 'view_country', // /v1/laender/{id:\d+} - GET - 'edit_country', // /v1/laender/{id:\d+} - PUT - ], - 'credit_memos' => [ - 'standard_gutschriftget', - 'standard_gutschriftedit', - 'standard_gutschriftcreate', - 'standard_gutschriftfreigabe', - 'standard_gutschriftversenden', - 'standard_gutschriftarchivieren', - 'list_credit_memos', // /v1/belege/gutschriften - GET - 'view_credit_memo', // /v1/belege/gutschriften/{id:\d+} - GET - ], - 'crm_documents' => [ - 'create_crm_document', // /v1/crmdokumente - POST - 'list_crm_documents', // /v1/crmdokumente - GET - 'view_crm_document', // /v1/crmdokumente/{id:\d+} - GET - 'edit_crm_document', // /v1/crmdokumente/{id:\d+} - PUT - 'delete_crm_document' // /v1/crmdokumente/{id:\d+} - DELETE - ], - 'delivery_addresses' => [ - 'standard_lieferadressecreate', - 'standard_lieferadresseedit', - 'create_delivery_address', // /v1/lieferadressen - POST - 'list_delivery_addresses', // /v1/lieferadressen - GET - 'view_delivery_address', // /v1/lieferadressen/{id:\d+} - GET - 'edit_delivery_address', // /v1/lieferadressen/{id:\d+} - PUT - 'delete_delivery_address', // /v1/lieferadressen/{id:\d+} - DELETE - ], - 'delivery_note' => [ - 'standard_lieferscheinget', - 'standard_lieferscheinedit', - 'standard_lieferscheincreate', - 'standard_lieferscheinfreigabe', - 'standard_lieferscheinversenden', - 'standard_lieferscheinarchivieren', - 'list_delivery_notes', // /v1/belege/lieferscheine - GET - 'view_delivery_note', // /v1/belege/lieferscheine/{id:\d+} - GET - ], - 'documents' => [ - 'standard_belegelist', - 'standard_belegpdf', - 'standard_belegpdfheader', - 'standard_mappingget', - 'standard_mappingset', - 'list_documents', // /v1/belege - GET - ], - 'document_actions' => [ - 'standard_angebotzuauftrag', - 'standard_auftragzurechnung', - 'standard_weiterfuehrenauftragzurechnung', - 'standard_weiterfuehrenrechnungzugutschrift' - ], - 'files' => [ - 'standard_dateilist', - 'standard_dateivorschau', - 'standard_dateidownload', - 'standard_dateiheader', - 'standard_shopimages', - 'create_file', // /v1/dateien - POST - 'list_files', // /v1/dateien - GET - 'view_file', // /v1/dateien/{id:\d+} - GET - 'handle_assets', // /assets/{assetfile} - ], - 'gobnav' => [ - 'handle_navision' // /v1/gobnavconnect - POST - ], - 'groups' => [ - 'standard_gruppecreate', - 'standard_gruppeedit', - 'standard_gruppeget', - 'standard_gruppenlist', - 'create_group', // /v1/gruppen - POST - 'list_groups', // /v1/gruppen - GET - 'view_group', // /v1/gruppen/{id:\d+} - GET - 'edit_group', // /v1/gruppen/{id:\d+} - PUT - ], - 'invoices' => [ - 'standard_rechnungget', - 'standard_rechnungedit', - 'standard_rechnungcreate', - 'standard_rechnungversenden', - 'standard_rechnungfreigabe', - 'standard_rechnungarchivieren', - 'standard_rechnungversendetmarkieren', - 'standard_rechnungalsbezahltmarkieren', - 'list_invoices', // /v1/belege/rechnungen - 'view_invoice', // /v1/belege/rechnungen/{id:\d+} - GET - 'delete_invoice' // /v1/belege/rechnungen/{id:\d+} - DELETE - ], - 'mobile_app' => [ - 'mobile_app_communication' // /v1/mobileapi/dashboard - ], - 'opentrans' => [ - 'handle_opentrans', // all /opentrans endpoints - ], - 'orders' => [ - 'standard_auftragcreate', - 'standard_auftragedit', - 'standard_auftragget', - 'standard_auftragfreigabe', - 'standard_auftragabschliessen', - 'standard_auftragversenden', - 'standard_auftragarchivieren', - 'list_orders', // /v1/belege/auftraege - GET - 'view_order' // /v1/belege/auftraege/{id:\d+} - GET - ], - 'payment_methods' => [ - 'create_payment_method', // /v1/zahlungsweisen - POST - 'list_payment_methods', // /v1/zahlungsweisen - GET - 'view_payment_method', // /v1/zahlungsweisen/{id:\d+} - GET - 'edit_payment_method', // /v1/zahlungsweisen/{id:\d+} - PUT - ], - 'projects' => [ - 'standard_projektliste', - 'standard_projektget', - 'standard_projektcreate', - 'standard_projektedit', - ], - 'properties' => [ - 'create_property', - 'list_property', - 'view_property', - 'edit_property', - 'delete_property', - ], - 'property_values' => [ - 'create_property_value', - 'list_property_value', - 'view_property_value', - 'edit_property_value', - 'delete_property_value', - ], - 'quotes' => [ - 'standard_angebotcreate', - 'standard_angebotedit', - 'standard_angebotget', - 'standard_angebotfreigabe', - 'standard_angebotversenden', - 'standard_angebotarchivieren', - 'list_quotes', // /v1/belege/angebote - GET - 'view_quote', // /v1/belege/angebote/{id:\d+} - GET - ], - 'reports' => [ - 'standard_exportvorlageget', - 'standard_berichteget', - 'view_report' // /v1/reports/{id:\d+}/download - ], - 'resubmissions' => [ - 'create_resubmission', // /v1/wiedervorlagen - POST - 'list_resubmissions', // /v1/wiedervorlagen - GET - 'view_resubmission', // /v1/wiedervorlagen/{id:\d+} - GET - 'edit_resubmission', // /v1/wiedervorlagen/{id:\d+} - PUT - ], - 'returns' => [ - 'standard_retoureget', - 'standard_retoureedit', - 'standard_retourecreate', - ], - 'scanned_documents' => [ - 'create_scanned_document', // /v1/docscan - POST - 'list_scanned_documents', // /v1/docscan - GET - 'view_scanned_document', // /v1/docscan/{id:\d+} - GET - ], - 'shipping_methods' => [ - 'create_shipping_method', // /v1/versandarten - POST - 'list_shipping_methods', // /v1/versandarten - GET - 'view_shipping_method', // /v1/versandarten/{id:\d+} - GET - 'edit_shipping_method', // /v1/versandarten/{id:\d+} - PUT - ], - 'shop_communication' => [ - 'communicate_with_shop' // all routes with /shopimport - ], - 'storage' => [ - 'view_storage_batch', // /v1/lagercharge - GET - 'view_storage_best_before', // /v1/lagermhd - GET - ], - 'subscriptions' => [ - 'standard_adresseaboartikelcreate', - 'standard_adresseaboartikeledit', - 'standard_adresseaboartikelget', - 'standard_adresseaboartikellist', - 'create_subscription', // /v1/aboartikel - POST - 'list_subscriptions', // v1/aboartikel - GET - 'view_subscription', // /v1/aboartikel/{id:\d+} - GET - 'edit_subscription', // /v1/aboartikel/{id:\d+} - PUT - 'delete_subscription', // /v1/aboartikel/{id:\d+} - DELETE - ], - 'subscription_groups' => [ - 'standard_adresseabogruppecreate', - 'standard_adresseabogruppeedit', - 'standard_adresseabogruppeget', - 'standard_adresseabogruppelist', - 'create_subscription_group', // /v1/abogruppen - POST - 'list_subscription_groups', // /v1/abogruppen - GET - 'view_subscription_group', // /v1/abogruppen/{id:\d+} - GET - 'edit_subscription_group', // /v1/abogruppen/{id:\d+} - PUT - ], - 'supply_orders' => [ - 'standard_bestellungget', - 'standard_bestellungedit', - 'standard_bestellungcreate', - 'standard_bestellungfreigabe', - ], - 'system_settings' => [ - 'standard_etikettendrucker', - 'standard_servertimeget' - ], - 'tax_rates' => [ - 'create_tax_rate', // /v1/steuersaetze - POST - 'list_tax_rates', // /v1/steuersaetze - GET - 'view_tax_rate', // /v1/steuersaetze/{id:\d+} - GET - 'edit_tax_rate', // /v1/steuersaetze/{id:\d+} - PUT - ], - 'employee_interactions' => [ - 'standard_stechuhrstatusget', - 'standard_stechuhrstatusset', - 'standard_stechuhrsummary', - 'standard_zeiterfassungget', - 'standard_zeiterfassungcreate', - 'standard_zeiterfassungedit', - 'standard_zeiterfassungdelete', - 'standard_reisekostenversenden', - 'standard_sessionstart', - 'standard_sessionclose', - ], - 'tracking_numbers' => [ - 'create_tracking_number', // /v1/trackingnummern - POST - 'list_tracking_numbers', // /v1/trackingnummern - GET - 'view_tracking_number', // /v1/trackingnummern/{id:\d+} - GET - 'edit_tracking_number', // /v1/trackingnummern/{id:\d+} - PUT - ], - 'users' => [ - 'standard_benutzercreate', - 'standard_benutzeredit', - 'standard_benutzerget', - 'standard_benutzerlist', - 'standard_benutzergetrfid', - ], - 'custom' => [ - 'standard_custom' - ] - ]; - } - - private function renamePermissions() - { - $hasLegacyPermissions = $this->app->DB->Count("SELECT `id` FROM `api_permission` WHERE `key` LIKE 'legacy_%'") > 0; - if(!$hasLegacyPermissions) { - return; - } - // rename permissions in api_permission table with extra condition if legacy and standard keys exist - $this->app->DB->Delete( - "DELETE `ap1` - FROM `api_permission` AS `ap1` - INNER JOIN `api_permission` AS `ap2` ON ap1.key = replace(ap2.key, 'standard_', 'legacy_') - WHERE ap1.key LIKE 'legacy_%' AND ap2.key LIKE 'standard_%'" - ); - $this->app->DB->Update( - "UPDATE `api_permission` - SET `key` = REPLACE(`key`, 'legacy_', 'standard_') - WHERE `key` LIKE 'legacy_%'" - ); - // rename permissions in api_account - $this->app->DB->Update( - "UPDATE `api_account` SET `permissions` = REPLACE(`permissions`, 'legacy_', 'standard_')" - ); - } - - /** - * @return array - */ - private function getLegacyApiCustomActions() - { - if(!is_file(__DIR__.'/api_custom.php')) { - return []; - } - - /** @var Benutzer $users **/ - $users = $this->app->loadModule('benutzer'); - $permissions = $users->getActionsFromFile(__DIR__.'/api_custom.php'); - if(empty($permissions)) { - return []; - } - - return $permissions; - } - - private function fillApiPermissions() - { - foreach ($this->getGroupedPermissions() as $group => $permissions){ - foreach ($permissions as $permission){ - // check if permission exists in table - $result = $this->app->DB->Count("SELECT * FROM `api_permission` WHERE `key` = '$permission'"); - if($result !== 0){ - continue; - } - // if it does not exist, insert it - $this->app->DB->InsertArr('api_permission', 'id', [ - 'key' => $permission, - 'group' => $group - ]); - } - } - } - - /** - * @param int $apiId - */ - public function setApiId($apiId) - { - $this->api_id = $apiId; - } - - function ApiXMLTest(){ - $xml_data = new SimpleXMLExtended(); - $test = array('adresse' => array( 'name' => 'mustermann', 'vorname' => 'max')); - echo $xml_data->asXML(); - echo "stop"; - $this->app->ExitXentral(); - } - - - /** - * returns Projekt ID - * - * @param string $value - * - * @return bool|int - */ - private function getProjektId($value) - { - if($value != ''){ - if($this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$value."' LIMIT 1")){ - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$value."' LIMIT 1"); - } - else if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$value."' LIMIT 1")){ - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$value."' LIMIT 1"); - } - return (int)$projekt; - } - - return false; - } - - /** - * returns Adresse ID - * - * @param string $value - * - * @return bool|int - */ - private function getAdressId($value) - { - if(!empty($value)){ - if(is_numeric($value)) - { - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE id = '".$value."' LIMIT 1"); - } - if(empty($adresse)) - { - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '".$value."' LIMIT 1"); - } - return (int)$adresse; - } - return false; - } - - /** loads email settings from firmendaten - * used in few requests to send documents - * - * @return void - */ - private function getEmailSettings() - { - $benutzername = $this->app->erp->Firmendaten('benutzername'); - $passwort = $this->app->erp->Firmendaten('passwort'); - $host = $this->app->erp->Firmendaten('host'); - $port = $this->app->erp->Firmendaten('port'); - $mailssl = $this->app->erp->Firmendaten('mailssl'); - $mailanstellesmtp = $this->app->erp->Firmendaten('mailanstellesmtp'); - $noauth = $this->app->erp->Firmendaten('noauth'); - - // mail - $this->app->mail = new PHPMailer($this->app); - $this->app->mail->CharSet = 'UTF-8'; - $this->app->mail->PluginDir = 'plugins/phpmailer/'; - - if($mailanstellesmtp == '1'){ - $this->app->mail->IsMail(); - }else{ - $this->app->mail->IsSMTP(); - - if($noauth == '1') { - $this->app->mail->SMTPAuth = false; - } else { - $this->app->mail->SMTPAuth = true; - } - - if($mailssl == 1){ - $this->app->mail->SMTPSecure = 'tls'; // sets the prefix to the servier - } - else if($mailssl == 2){ - $this->app->mail->SMTPSecure = 'ssl'; // sets the prefix to the servier - } - - $this->app->mail->Host = $host; - - $this->app->mail->Port = $port; // set the SMTP port for the GMAIL server - - $this->app->mail->Username = $benutzername; // GMAIL username - $this->app->mail->Password = $passwort; // GMAIL password - } - } - - function ApiServerTimeGet(){ - $this->XMLResponse(1,''.time().''); - $this->app->ExitXentral(); - } - - - - function ApiBenutzerGetRFID() - { - $xmldata = $this->XMLPost(); - if ($xmldata['rfid'] == '') { - $this->XMLResponse(5, "RFID fehlt"); - $this->app->ExitXentral(); - } - $rfid = $this->app->DB->real_escape_string($xmldata['rfid']); - $id = $this->app->DB->Select("SELECT id FROM user WHERE activ=1 AND rfidtag='$rfid' AND rfidtag!='' LIMIT 1"); - if($id > 0){ - $this->XMLResponse(1, $this->app->erp->XMLBenutzer($id)); - } - else{ - $this->XMLResponse(5, 'fehlerhafte RFID'); - } - $this->app->ExitXentral(); - } - - function ApiBenutzerList() - { - $user = $this->app->DB->SelectArr("SELECT id,adresse,rfidtag FROM user WHERE activ = 1"); - if($user) - { - $xmlstr = << - - -XML; - - $_xmlobj = new SimpleXMLExtended($xmlstr); - $items = $_xmlobj->AddChild('items'); - foreach($user as $value){ - $item = $items->AddChild('item'); - foreach($value as $key => $data){ - $item->AddChild($key,$data); - } - } - $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - $this->XMLResponse(1,$xml); - }else{ - $this->XMLResponse(8); - } - $this->app->ExitXentral(); - } - - function ApiStechuhrSummary() - { - $xmldata = $this->XMLPost(); - if ($xmldata['adresse'] == '') { - $this->XMLResponse(5, 'AdresssID fehlt'); - $this->app->ExitXentral(); - } - $id = $xmldata['adresse']; - $jahr = date("Y"); - $aktjahr = (int)date('Y'); - $vorjahr = $jahr-1; - - - $xmlstr = << - - -XML; - - $_xmlobj = new SimpleXMLElement($xmlstr); - $datum = date("Y", time()); - - $mitarbeiterzeiterfassung = $this->app->erp->LoadModul('mitarbeiterzeiterfassung'); - if($mitarbeiterzeiterfassung){ - $ueberstundenwerte = $mitarbeiterzeiterfassung->GetUeberstundenRaw($id); - $urlaub = $mitarbeiterzeiterfassung->GetRestUrlaub($id, date("Y", time()), true); - $mitarbeiterSollstunden = $mitarbeiterzeiterfassung->getSollstundenByAdresse($id); - } - - $items = $_xmlobj->AddChild("mitarbeiter_adresse",$id); - $items->addAttribute('type', 'documentary'); - $_xmlobj->AddChild("ZeitRequest",date("c")); - $_xmlobj->AddChild("UrlaubSoll",$urlaub['soll']); - $_xmlobj->AddChild("UrlaubIst",$urlaub['ist']); - - $_xmlobj->AddChild("UeberstundenMonat",$ueberstundenwerte['aktuell']); - $_xmlobj->AddChild("UeberstundenGesamt",$ueberstundenwerte['gesamt']); - - - $_xmlobj->AddChild("KW", date("N")); - $einzelauflistung = $_xmlobj->AddChild("Einzelauflistung"); - $arbeitswoche = $einzelauflistung->AddChild("Kalenderwoche"); - $kalenderwoche = $arbeitswoche->AddChild("KW",date("W")); - $wochentageKw = $this->wochentageinKW(date("d.m.Y")); - - - foreach($wochentageKw as $wochentag){ - // Hier brauch ich einfach die entsprechende Soll/Ist Arbeitszeit für den übergebenden Tag - $arbeitszeitensummary['sollaz'] = round($mitarbeiterSollstunden[$this->app->String->Convert($wochentag,'%1.%2.%3','%3-%2-%1')]['soll'] / 60,2); - $arbeitszeitensummary['istaz'] = round($mitarbeiterSollstunden[$this->app->String->Convert($wochentag,'%1.%2.%3','%3-%2-%1')]['ist'] / 60,2) ; - $arbeitszeiten = $arbeitswoche->AddChild("Arbeitstag"); - $arbeitszeiten->AddChild("Datum",$wochentag); - $arbeitszeiten->AddChild("ArbeitszeitSoll",$arbeitszeitensummary['sollaz']); - $arbeitszeiten->AddChild("ArbeitszeitIst",$arbeitszeitensummary['istaz']); - $arbeitsevents = $arbeitszeiten->AddChild("ArbeitsEvents"); - $status = $this->app->DB->SelectArr("Select status, TIME_FORMAT(datum,'%H:%i') as zeit from stechuhr where DATE_FORMAT(datum,'%d.%m.%Y')= '$wochentag' AND adresse = '$id' order by datum asc"); - foreach($status as $item){ - $arbeitsevent = $arbeitsevents->AddChild("Event"); - $arbeitseventtyp = $arbeitsevent->AddChild("typ", $item['status']); - $arbeitseventzeit = $arbeitsevent->AddChild("zeit", $item['zeit']); - - } - } - $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - $this->XMLResponse(1,$xml); - $this->app->ExitXentral(); - } - - - /** - * @param string $datumvalue - * - * @return mixed - */ - public function wochentageinKW($datumvalue){ - //aktueller Wochentag im Format d.m.Y in der KW - $basis = 7; // wochentage - $datum = new DateTime($datumvalue); - $wochentag = $datum->format("N"); - $datumBefore = new DateTime($datumvalue); - $datumAfter = new DateTime($datumvalue); - $tage[$wochentag] = $datum->format("d.m.Y"); - if($wochentag > 1) { - $counter = $wochentag - 1; - while ($counter > 0 ) { - $datumBefore->modify('-1 days'); - $tage[$counter] = $datumBefore->format("d.m.Y"); - $counter--; - } - } - $counter = $wochentag + 1; - while($counter <= $basis){ - $datumAfter->modify('+1 days'); - $tage[$counter] = $datumAfter->format("d.m.Y"); - $counter++; - } - ksort($tage); - - return $tage; - } - - - public function ApiStechuhrStatusGet() - { - - $xmldata = $this->XMLPost(); - if ($xmldata['adresse'] == '') { - $this->XMLResponse(5, "AdresssID fehlt"); - $this->app->ExitXentral(); - } - $adresse = $xmldata['adresse']; - $user = $xmldata['user']; - $status = $this->app->DB->SelectRow("Select status, REPLACE(REPLACE(ROUND(TIMESTAMPDIFF(MINUTE,datum,now()) / 60, 2),'-',''),'.','.') as seit,TIMESTAMPDIFF(HOUR,datum,now()) as dd, kommen from stechuhr where adresse = ".$adresse." order by datum desc limit 1"); - - $xmlstr = << - - -XML; - - $_xmlobj = new SimpleXMLElement($xmlstr); - $_xmlobj->AddChild("status",$status['status']); - $_xmlobj->AddChild("seit",$status['seit']); - $_xmlobj->AddChild("dd",$status['dd']); - $_xmlobj->AddChild("kommen",$status['kommen']); - $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - $this->XMLResponse(1,$xml); - - $this->app->ExitXentral(); - } - - function ApiStechuhrStatusSet() - { - - $xmldata = $this->XMLPost(); - if ($xmldata['cmd'] == '') { - $this->XMLResponse(5, "CMD fehlt"); - $this->app->ExitXentral(); - } - $cmd = $xmldata['cmd']; - $user = (int)$xmldata['user']; - if($user){ - $user = $this->app->DB->Select("SELECT id FROM user WHERE id='$user' and activ = '1' LIMIT 0,1"); - } - - if(!$user){ - $adresse = (int)$xmldata['adresse']; - if($adresse) { - $user = $this->app->DB->Select("SELECT id FROM user WHERE adresse='$adresse' and activ = '1' LIMIT 0,1"); - } - if(!$user){ - $this->XMLResponse(5, "Userid oder Adressid fehlerhaft"); - $this->app->ExitXentral(); - } - }else{ - $adresse = $this->app->DB->Select("SELECT adresse FROM user where id='$user' LIMIT 0,1"); - } - -// if($user == ''){ -// $user = $this->app->DB->Select("SELECT id FROM user WHERE adresese='$adresse' AND ") -// } - // wir schauen uns denn aktuellen status an um zu prüfen welche Set Meldungen möglich sind - $currentstatus = $this->app->DB->Select("Select status from stechuhr where adresse = ".$adresse." order by datum desc limit 1"); - - if($currentstatus === 'gehen'){ - // es darf nur der Status 'kommen' funktionieren - if($cmd !== 'kommen'){ - $this->XMLResponse(5, "Fehlerhafter Status wird uebergeben. Es darf aktuell nur der Status \"kommen\" übergeben werden."); - } - } - - if($currentstatus === 'kommen'){ - // es darf nur der Status 'gehen' und 'pausestart' funktionieren - if( ($cmd !== 'gehen') && ($cmd !== 'pausestart') ){ - $this->XMLResponse(5, "Fehlerhafter Status wird uebergeben. Es darf aktuell nur der Status \"gehen\" und \"pausestart\" übergeben werden."); - } - - } - - if($currentstatus === 'pausestart'){ - // es darf nur der Status 'gehen' und 'pausestart' funktionieren - if($cmd !== 'pausestop'){ - $this->XMLResponse(5, "Fehlerhafter Status wird uebergeben. Es darf aktuell nur der Status \"pausestop\" übergeben werden."); - } - } - - - $kommen = 1; - if($cmd==='pause' || $cmd==='pausestart' || $cmd==='gehen') { - $kommen=0; - } - $status = ''; - switch($cmd) - { - case 'pausestart': - case 'pausestop': - case 'kommen': - case 'gehen': - $status = $cmd; - break; - - } - if($status || $cmd === 'arbeit' || $cmd === 'pause') - { - $alterstatus = $this->app->DB->SelectArr("Select status, datum as seit, kommen from stechuhr where adresse = ".$adresse." order by datum desc limit 1"); - if($alterstatus) - { - $seit = $alterstatus[0]['seit']; - $altkommen = $alterstatus[0]['kommen']; - $alterstatus = $alterstatus[0]['status']; - } - if((!$alterstatus && $status === 'kommen') || - (!$alterstatus && $status === 'gehen') || - ($alterstatus === 'kommen' && $status !== 'kommen') || - ($alterstatus === 'gehen' && $status === 'kommen') || - ($alterstatus === 'pausestart' && $status === 'pausestop') || - ($alterstatus === 'pausestop' && $status === 'pausestart') || - ($alterstatus === 'pausestop' && $status === 'gehen') || - ($alterstatus === 'pausestart' && $status === 'gehen') || - ($cmd === 'arbeit') || - ($cmd === 'pause') - ) - { - if(!(!$status && $alterstatus && $altkommen == 1 && $kommen == 0 ) || $cmd === 'arbeit' || $cmd === 'pause') - { - if($status == '' && $kommen == 1 && $alterstatus === 'pausestart') { - $status = 'pausestop'; - } - if(($alterstatus === false || $alterstatus === 'gehen')&& $kommen == 1 && $status == '') { - $status = 'kommen'; - } - - $this->app->DB->Insert("INSERT INTO stechuhr (adresse,user,datum,kommen, status) - VALUES ('".$adresse."','".$user."',NOW(),'".$kommen."','".($status)."')"); - $insid = $this->app->DB->GetInsertID(); - } - } - } - $this->XMLResponse(1); - } - - function ApiProjektCreate() { - $xmldata = $this->XMLPost(); - if (($xmldata['name'] == '') || ($xmldata['abkuerzung'] == '')) { - $this->XMLResponse(5, "Name und/oder Abkürzung fehlt"); - $this->app->ExitXentral(); - } - - $name = $this->app->DB->real_escape_string($xmldata['name']); - $abkuerzung = $this->app->DB->real_escape_string($xmldata['abkuerzung']); - - //prüfen ob es die abkuerzung schon gibt - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($xmldata['abkuerzung'])."' LIMIT 1"); - if($projekt){ - $this->XMLResponse(5, "Abkürzung schon vorhanden. Bitte eine andere wählen."); - $this->app->ExitXentral(); - } - $this->app->DB->Insert("INSERT INTO projekt (id,name,abkuerzung) VALUES ('','".$name."','".$abkuerzung."')"); - - $xmldata['id'] = $this->app->DB->GetInsertID(); - - $this->ApiProjektEdit(true,$xmldata); - $this->XMLResponse(1, "".$xmldata['id'].""); - $this->app->ExitXentral(); - } - - public function ApiProjektEdit($internal=false,$data='') { - $xmldata = $this->XMLPost(); - if ($internal){ - $xmldata = $data; - $id = $this->app->DB->real_escape_string($xmldata['id']); - }else{ - if( $this->app->DB->real_escape_string($xmldata['id'] =='') && $this->app->DB->real_escape_string($xmldata['projekt'] == '') ){ - $this->XMLResponse(5,'ID oder Projekt muss gesetzt sein'); - } - if($xmldata['id'] != ''){ - $id = $this->app->DB->real_escape_string($xmldata['id']); - }else { - $id = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '" . $this->app->DB->real_escape_string($xmldata['projekt']) . "' LIMIT 1"); - } - } - if($id == ''){ - $this->XMLResponse(5,'falsche ID oder Projektkennung'); - } - - - unset($xmldata['id']); - unset($xmldata['projekt']); - - foreach ($xmldata as $key => $value) { - $insertKey = $this->app->DB->real_escape_string($key); - $insertValue = $this->app->DB->real_escape_string($value); - $this->app->DB->Update("UPDATE projekt SET $insertKey='".$insertValue."' WHERE id='$id' LIMIT 1"); - } - if($internal){ - return; - } - $this->XMLResponse(1); - - $this->app->ExitXentral(); - } - function ApiProjektListe() - { - $xml = $this->XMLPost(); - - $where = "geloescht <> 1"; - $offset = 0; - $limit = 1000000; - if(!empty($xml['offset'])) { - $offset = (int)$xml['offset']; - } - if($offset < 0) { - $offset = 0; - } - if(!empty($xml['limit'])) { - $limit = (int)$xml['limit']; - } - if($limit <= 0) { - $limit = 1; - } - - $xml_obj = $this->CreateXmlObj(); - $projekte = $this->app->DB->SelectArr("SELECT * FROM projekt WHERE $where ORDER by abkuerzung LIMIT $offset, $limit"); - if($projekte) - { - $this->AddToXMLObj($xml_obj, 'projekt', 'projekte',$projekte); - } - $this->XMLResponse(1,$xml_obj, true, false); - $this->app->ExitXentral(); - } - - function ApiProjektGet() - { - $xml = $this->XMLPost(); - $where = "geloescht <> 1"; - $offset = 0; - $limit = 1000000; - if(!empty($xml['offset']))$offset = (int)$xml['offset']; - if($offset < 0)$offset = 0; - if(!empty($xml['limit']))$limit = (int)$xml['limit']; - if($limit <= 0)$limit = 1; - if(!empty($xml['projekt'])) - { - if($this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$xml['projekt']."' LIMIT 1")){ - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$xml['projekt']."' LIMIT 1"); - } - if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$xml['projekt']."' LIMIT 1")){ - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$xml['projekt']."' LIMIT 1"); - } - $where .= " AND projekt = '".((int)$xml['projekt'])."' "; - }elseif(!empty($xml['abkuerzung'])) - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($xml['abkuerzung'])."' LIMIT 1"); - $where .= " AND projekt = '".(int)$projekt."' "; - } - $xml_obj = $this->CreateXmlObj(); - $projekte = $this->app->DB->SelectArr("SELECT p.* , '' as arbeitspakete FROM projekt p WHERE id = '$projekt' LIMIT 1"); - $this->AddToXMLObj($xml_obj, 'projekt', '',$projekte); - $arbeitspakete = $this->app->DB->SelectArr("SELECT * FROM arbeitspaket WHERE $where LIMIT $offset, $limit"); - if($arbeitspakete) - { - $this->AddToXMLObj($xml_obj, 'arbeitspaket', '',$arbeitspakete, $xml_obj->xml->projekt->arbeitspakete); - } - $this->XMLResponse(1,$xml_obj, true, false); - $this->app->ExitXentral(); - } - - - function ApiAnsprechpartnerCreate(){ - $xmldata = $this->XMLPost(); - - if (($xmldata['name'] == '') || ($xmldata['adresse'] == '')) { - $this->XMLResponse(5, "AdresseId oder Name fehlt"); - $this->app->ExitXentral(); - } - $newId = $this->app->erp->CreateAnsprechpartner($xmldata['adresse'],$xmldata); - $this->XMLResponse(1,"$newId"); - $this->app->ExitXentral(); - } - - function ApiAnsprechpartnerEdit(){ - $xmldata = $this->XMLPost(); - if ($xmldata['id'] == '') { - $this->XMLResponse(5, "AnsprechpartnerId fehlt"); - $this->app->ExitXentral(); - } - - $id = $xmldata['id']; - unset($xmldata['id']); - - foreach ($xmldata as $key => $value) { - $insertKey = $this->app->DB->real_escape_string($key); - $insertValue = $this->app->DB->real_escape_string($value); - - $this->app->DB->Update("UPDATE ansprechpartner SET $insertKey='".$insertValue."' WHERE id='$id' LIMIT 1"); - } - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - function ApiLieferadresseCreate(){ - $xmldata = $this->XMLPost(); - - if (($xmldata['name'] == '') || ($xmldata['adresse'] == '')) { - $this->XMLResponse(5, "AdresseId oder Name fehlt"); - $this->app->ExitXentral(); - } - $newId = $this->app->erp->CreateLieferadresse($xmldata['adresse'],$xmldata); - $this->XMLResponse(1,"$newId"); - $this->app->ExitXentral(); - } - - function ApiLieferadresseEdit(){ - $xmldata = $this->XMLPost(); - if ($xmldata['id'] == '') { - $this->XMLResponse(5, "LieferadresseId fehlt"); - $this->app->ExitXentral(); - } - - $id = $xmldata['id']; - unset($xmldata['id']); - - foreach ($xmldata as $key => $value) { - $insertKey = $this->app->DB->real_escape_string($key); - $insertValue = $this->app->DB->real_escape_string($value); - - $this->app->DB->Update("UPDATE lieferadressen SET $insertKey='".$insertValue."' WHERE id='$id' LIMIT 1"); - } - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - - function ApiAdresseAboArtikelCreate(){ - $xmldata = $this->XMLPost(); - - - $this->app->DB->Insert("INSERT INTO abrechnungsartikel (id,bezeichnung) - VALUES ('','NEUANLAGE')"); - - $xmldata['id'] = $this->app->DB->GetInsertID(); - $xmldata['neu'] = "true"; - $this->ApiAdresseAboArtikelEdit($xmldata); - $this->app->ExitXentral(); - } - - function ApiAdresseAboArtikelEdit($xmldata = false){ - - - // prüfen auf Mindestfelder - if($xmldata['neu'] != '') { - if (($xmldata['artikel'] == '') || ($xmldata['adresse'] == '')) { - $this->XMLResponse(5, "ArtikelId oder AdresseId fehlt"); - $this->app->ExitXentral(); - } - if (($xmldata['menge'] == '') || ($xmldata['menge'] == '0')) { - $this->XMLResponse(5, "Menge fehlt oder ist 0"); - $this->app->ExitXentral(); - } - $id = $xmldata['id']; - $adresse = $this->app->DB->real_escape_string($xmldata['adresse']); - }else{ - $xmldata = $this->XMLPost(); - if($xmldata['id'] == ''){ - $this->XMLResponse(5, "ID fehlt oder ist 0"); - $this->app->ExitXentral(); - } - $id = $xmldata['id']; - $adresse = $this->app->DB->Select("SELECT adresse FROM abrechnungsartikel WHERE id = '" . $id . "' LIMIT 1"); - } - - $artikel = $this->app->DB->real_escape_string($xmldata['artikel']); - $bezeichnung = $this->app->DB->real_escape_string($xmldata['bezeichnung']); - $nummer = $this->app->DB->real_escape_string($xmldata['nummer']); - - - if($xmldata['neu'] != '') { - if ($xmldata['angelegtamdatum'] == "") $angelegtamdatum = $this->app->String->Convert(date("d.m.Y"), '%1.%2.%3', '%3-%2-%1'); - // Feldvalidierung - if (!preg_match("(^abo$|^monat$|^monatx$|^jahr$|^wochen$|^einmalig$|^30tage$)", $xmldata['preisart'])) { - $this->XMLResponse(5, "fehlerhaftes Feld preisart => (abo|monat|monatx|jahr|wochen|einmalig)"); - $this->app->ExitXentral(); - } - if (!preg_match("(^rechnung$|^auftrag$)", $xmldata['dokument'])) { - $this->XMLResponse(5, "fehlerhaftes Feld dokument => (rechnung|auftrag)"); - $this->app->ExitXentral(); - } - } - if($xmldata['neu'] != '') { - //prüfen ob die ArtikelId auch ein Artikel ist - if ($this->app->DB->Select("SELECT id FROM artikel WHERE id = '" . $artikel . "' LIMIT 1")) { - $artikeldata = $this->app->DB->SelectArr("SELECT id,name_de,nummer FROM artikel WHERE id = '" . $artikel . "' LIMIT 1"); - } elseif ($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '" . $artikel . "' LIMIT 1")) { - $artikeldata = $this->app->DB->SelectArr("SELECT id,name_de,nummer FROM artikel WHERE nummer = '" . $artikel . "' LIMIT 1"); - } else { - $this->XMLResponse(5, "fehlerhafte ArtikelId"); - $this->app->ExitXentral(); - } - $sql['artikel'] = $artikeldata[0]['id']; - $sql['nummer'] = $artikeldata[0]['nummer']; - if ($xmldata['bezeichnung'] == "") { - // wir nehmen die Bezeichnung des Stammartikel - $sql['bezeichnung'] = $artikeldata[0]['name_de']; - } else { - $sql['bezeichnung'] = $xmldata['bezeichnung']; - } - }else{ - if($xmldata['bezeichnung'] != '') { - $sql['bezeichnung'] = $this->app->DB->real_escape_string($xmldata['bezeichnung']); - } - } - - if($xmldata['menge'] != '') { $sql['menge'] = $this->app->DB->real_escape_string($xmldata['menge']); } - if($xmldata['preis'] != '') { $sql['preis'] = str_replace(',','.',$this->app->DB->real_escape_string($xmldata['preis'])); } - if($xmldata['preisart'] != '') { $sql['preisart'] = $this->app->DB->real_escape_string($xmldata['preisart']); } - if($xmldata['sort'] != '') { $sql['sort'] = $this->app->DB->real_escape_string($xmldata['sort']); } - if($xmldata['lieferdatum'] != '') { $sql['lieferdatum'] = $this->app->DB->real_escape_string($xmldata['lieferdatum']); } - if($xmldata['neu'] != '') { - if ($angelegtamdatum != '') { $sql['angelegtam'] = $angelegtamdatum; } - } - if($xmldata['angelegtvon'] != '') { $sql['angelegtvon'] = $this->app->DB->real_escape_string($xmldata['angelegtvon']); } - if($xmldata['status'] != '') { $sql['status'] = $this->app->DB->real_escape_string($xmldata['status']); } - if($xmldata['projekt'] != '') { $sql['projekt'] = $this->app->DB->real_escape_string($xmldata['projekt']); } - if($xmldata['wiederholend'] != '') { $sql['wiederholend'] = $this->app->DB->real_escape_string($xmldata['wiederholend']); } - if($xmldata['zahlzyklus'] != '') { $sql['zahlzyklus'] = $this->app->DB->real_escape_string($xmldata['zahlzyklus']); } - if($xmldata['adresse'] != '') { $sql['adresse'] = $this->app->DB->real_escape_string($xmldata['adresse']); } - - if($xmldata['gruppe'] != '') { - $sql['gruppe'] = $this->app->DB->real_escape_string($xmldata['gruppe']); - } else { - // wir holen die erste Gruppe sofern es eine gibt - $sql['gruppe'] = $this->app->DB->Select("SELECT id FROM abrechnungsartikel_gruppe WHERE adresse = '" . $adresse . "' ORDER BY id LIMIT 1"); - - } - if($xmldata['dokument'] != '') { $sql['dokument'] = $this->app->DB->real_escape_string($xmldata['dokument']); } - if($xmldata['neu'] != '') { - if ($xmldata['waehrung'] != '') { - $sql['waehrung'] = $this->app->DB->real_escape_string($xmldata['waehrung']); - }else{ - $sql['waehrung'] = "EUR"; - } - } - - if($xmldata['startdatum'] != '') { $sql['startdatum'] = $this->app->String->Convert($xmldata['startdatum'],'%1.%2.%3','%3-%2-%1'); } - if($xmldata['enddatum'] != '') { $sql['enddatum'] = $this->app->String->Convert($xmldata['enddatum'],'%1.%2.%3','%3-%2-%1'); } - if($xmldata['abgerechnetbis'] != '') { $sql['abgerechnetbis'] = $this->app->String->Convert($xmldata['abgerechnetbis'],'%1.%2.%3','%3-%2-%1'); } - - // wir aktualisieren - foreach($sql as $key => $value) { - if(is_array($value)) { - $value = ''; - } - $this->app->DB->Update("UPDATE abrechnungsartikel SET $key='$value' WHERE id='$id' LIMIT 1"); - } - - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - function ApiAdresseAboArtikelGet($intern = false){ - $id = $this->app->Secure->GetGET("id"); - $adresse = $this->app->Secure->GetGET("adresse"); - $projekt = $this->app->Secure->GetGET("projekt"); - $xmldata = $this->XMLPost(); - - if($id=="")$id = $xmldata['id']; - if($adresse=="")$adresse = $xmldata['adresse']; - if($projekt=="")$projekt = $xmldata['projekt']; - - - if( ($id!="") && ($adresse!="") ) - { - if($projekt!="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); - $ArtikelDaten = $this->app->DB->SelectArr("SELECT id, bezeichnung, nummer, angelegtam, abgerechnetbis, enddatum, preis, rabatt, waehrung, menge, preisart, gruppe FROM abrechnungsartikel WHERE id='".$this->app->DB->real_escape_string($id)."' AND adresse='".$this->app->DB->real_escape_string($adresse)."' AND projekt='".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); - } else { - $ArtikelDaten = $this->app->DB->SelectArr("SELECT id, bezeichnung, nummer, angelegtam, abgerechnetbis, enddatum, preis, rabatt, waehrung, menge, preisart, gruppe FROM abrechnungsartikel WHERE id='".$this->app->DB->real_escape_string($id)."' AND adresse='".$this->app->DB->real_escape_string($adresse)."' LIMIT 1"); - } - } - //check - $id = $this->app->DB->Select("SELECT id FROM abrechnungsartikel WHERE id='".$this->app->DB->real_escape_string($id)."'AND adresse='".$this->app->DB->real_escape_string($adresse)."' LIMIT 1"); - - if($id > 0) - { - $xmlstr = << - - -XML; - $_xmlobj = new SimpleXMLExtended($xmlstr); -// $xmlobj = $_xmlobj->AddChild("xml"); - foreach($ArtikelDaten[0] as $key => $value){ - $_xmlobj->AddChild($key,$value); - } - $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - unset($_xmlobj); - $this->XMLResponse(1, $out); - } - else - { - if($intern) { - return false; - } - $this->XMLResponse(5); - } - $this->app->ExitXentral(); - } - - function ApiAdresseAboArtikelList($intern = false){ - $adresse = $this->app->Secure->GetGET("adresse"); - $projekt = $this->app->Secure->GetGET("projekt"); - $xmldata = $this->XMLPost(); - - if($adresse=="")$adresse = $xmldata['adresse']; - if($projekt=="")$projekt = $xmldata['projekt']; - - - if($adresse!="") - { - if($projekt!="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); - $gruppeArtikelDaten = $this->app->DB->SelectArr("SELECT id, bezeichnung, nummer, angelegtam, abgerechnetbis, enddatum, preis, rabatt, waehrung, menge, preisart, gruppe FROM abrechnungsartikel WHERE adresse='".$this->app->DB->real_escape_string($adresse)."' AND projekt='".$this->app->DB->real_escape_string($projekt)."'"); - } else { - $gruppeArtikelDaten = $this->app->DB->SelectArr("SELECT id, bezeichnung, nummer, angelegtam, abgerechnetbis, enddatum, preis, rabatt, waehrung, menge, preisart, gruppe FROM abrechnungsartikel WHERE adresse='".$this->app->DB->real_escape_string($adresse)."'"); - } - } - - //check - $id = $this->app->DB->Select("SELECT id FROM abrechnungsartikel WHERE adresse='".$this->app->DB->real_escape_string($adresse)."' LIMIT 1"); - - if($id > 0) - { - $xmlstr = << - - -XML; - $_xmlobj = new SimpleXMLExtended($xmlstr); - $items = $_xmlobj->AddChild("items"); - foreach($gruppeArtikelDaten as $value){ - $item = $items->AddChild("item"); - foreach($value as $key => $data){ - $item->AddChild($key,$data); - } - } - $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - unset($_xmlobj); - $this->XMLResponse(1, $out); - } - else - { - if($intern)return false; - $this->XMLResponse(5); - } - $this->app->ExitXentral(); - } - - function ApiAdresseAboGruppeCreate(){ - $xmldata = $this->XMLPost(); - // prüfen auf Mindestfelder - if( (!$xmldata['adresse']) || (!$xmldata['beschreibung']) ){ - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - $id = $this->app->DB->real_escape_string($xmldata['adresse']); - $beschreibung = $this->app->DB->real_escape_string($xmldata['beschreibung']); - $beschreibung2 = $this->app->DB->real_escape_string($xmldata['beschreibung2']); - $ansprechpartner = $this->app->DB->real_escape_string($xmldata['ansprechpartner']); - $extrarechnung = $this->app->DB->real_escape_string($xmldata['extrarechnung']); - $projekt = $this->app->DB->real_escape_string($xmldata['projekt']); - - - //prüfen wenn Projekt als Id übergeben wird ob es diese gibt - if($this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$projekt."' LIMIT 1")){ - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$projekt."' LIMIT 1"); - }elseif($this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$projekt."' LIMIT 1")){ - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$projekt."' LIMIT 1"); - } else{ - $projekt = ''; - } - - $sort = $this->app->DB->real_escape_string($xmldata['sort']); - $gruppensumme = $this->app->DB->real_escape_string($xmldata['gruppensumme']); - $rechnungadresse = $this->app->DB->real_escape_string($xmldata['rechnungadresse']); - - - $this->app->DB->Insert("INSERT INTO abrechnungsartikel_gruppe (id,beschreibung,beschreibung2,ansprechpartner,extrarechnung,projekt,adresse,sort,gruppensumme,rechnungadresse) - VALUES ( - '', - '$beschreibung', - '$beschreibung2', - '$ansprechpartner', - '$extrarechnung', - '$projekt', - '$id', - '$sort', - '$gruppensumme', - '$rechnungadresse' - ) "); - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - function ApiAdresseAboGruppeEdit(){ - - $xmldata = $this->XMLPost(); - // prüfen auf Mindestfelder - if(!$xmldata['id']){ - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - $projekt = $xmldata['projekt']; - - if($projectId = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$projekt."' LIMIT 1")){ - $xmldata['projekt'] = $projectId; - }elseif($projectId = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$projekt."' LIMIT 1")){ - $xmldata['projekt'] = $projectId; - } else{ - $xmldata['projekt'] = ''; - } - - $id = $xmldata['id']; - foreach($xmldata as $key=>$value) - { - if(is_array($value)) { - $value=''; - } - if($key!=="id"){ - $insertKey = $this->app->DB->real_escape_string($key); - $insertValue = $this->app->DB->real_escape_string($value); - $this->app->DB->Update("UPDATE abrechnungsartikel_gruppe SET $insertKey='$insertValue' WHERE id='$id' LIMIT 1"); - } - } - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - function ApiAdresseAboGruppeGet($intern = false){ - $id = $this->app->Secure->GetGET("id"); - $xmldata = $this->XMLPost(); - if($id=="")$id = $xmldata['id']; - - //check - $id = $this->app->DB->Select("SELECT id FROM abrechnungsartikel_gruppe WHERE id='".$this->app->DB->real_escape_string($id)."' LIMIT 1"); - if($id > 0) - { - $gruppeDaten = $this->app->DB->SelectArr("SELECT id, beschreibung, ansprechpartner, extrarechnung, gruppensumme, adresse, projekt, sort, rechnungadresse FROM abrechnungsartikel_gruppe WHERE id='".$this->app->DB->real_escape_string($id)."' LIMIT 1"); - - $xmlstr = << - - -XML; - $_xmlobj = new SimpleXMLExtended($xmlstr); -// $xmlobj = $_xmlobj->AddChild("xml"); - foreach($gruppeDaten[0] as $key => $value){ - $_xmlobj->AddChild($key,$value); - } - $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - unset($_xmlobj); - $this->XMLResponse(1, $out); - } - else - { - if($intern) { - return false; - } - $this->XMLResponse(5); - } - $this->app->ExitXentral(); - } - - function ApiAdresseAboGruppeList($intern = false){ - $adresse = $this->app->Secure->GetGET("adresse"); - $projekt = $this->app->Secure->GetGET("projekt"); - $xmldata = $this->XMLPost(); - - if($adresse=="")$adresse = $xmldata['adresse']; - if($projekt=="")$projekt = $xmldata['projekt']; - - - if($adresse!="") - { - if($projekt!="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); - $gruppeListDaten = $this->app->DB->SelectArr("SELECT id, beschreibung, ansprechpartner, extrarechnung, gruppensumme, adresse, projekt, sort, rechnungadresse FROM abrechnungsartikel_gruppe WHERE adresse='".$this->app->DB->real_escape_string($adresse)."' AND projekt='".$this->app->DB->real_escape_string($projekt)."'"); - } else { - $gruppeListDaten = $this->app->DB->SelectArr("SELECT id, beschreibung, ansprechpartner, extrarechnung, gruppensumme, adresse, projekt, sort, rechnungadresse FROM abrechnungsartikel_gruppe WHERE adresse='".$this->app->DB->real_escape_string($adresse)."'"); - } - } - - //check - $id = $this->app->DB->Select("SELECT id FROM abrechnungsartikel_gruppe WHERE adresse='".$this->app->DB->real_escape_string($adresse)."' LIMIT 1"); - - if($id > 0) - { - $xmlstr = << - - -XML; - $_xmlobj = new SimpleXMLExtended($xmlstr); - $items = $_xmlobj->AddChild("items"); - foreach($gruppeListDaten as $value){ - $item = $items->AddChild("item"); - foreach($value as $key => $data){ - $item->AddChild($key,$data); - } - } - $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - unset($_xmlobj); - $this->XMLResponse(1, $out); - } - else - { - if($intern) { - return false; - } - $this->XMLResponse(5); - } - $this->app->ExitXentral(); - } - - function ApiArtikelStuecklisteCreate() - { - - $xml = $this->XMLPost(); - if(isset($xml['stuecklistevonartikel']) && (isset($xml['items']) || isset($xml['item']))) - { - $projekt = isset($xml['projekt'])?$xml['projekt']:''; - if($projekt) - { - if(!(is_numeric($projekt) && $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$projekt."' LIMIT 1"))) - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); - } - } - $stuecklistevonartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht = 0 AND nummer = '".$this->app->DB->real_escape_string($xml['stuecklistevonartikel'])."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); - if($stuecklistevonartikel) - { - if(!isset($xml['items']))$xml['items'][0] = $xml['item']; - if(is_array($xml['items'])) - { - //alle bisherigen stuecklistenelemente des artikels loeschen - $this->app->DB->Update("UPDATE artikel SET stueckliste = 0 WHERE id = '$stuecklistevonartikel'"); - $this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel = '$stuecklistevonartikel'"); - - //baut gleiche arraystruktur wenn nur 1 artikel uebergeben wird - if(isset($xml['items']['item']['art'])){ - $arrayfuer1artikel = $xml['items']['item']; - $xml['items']['item'] = array(); - $xml['items']['item'][] = $arrayfuer1artikel; - } - - foreach($xml['items'] as $items => $item) - { - foreach($item as $key => $itemwerte) - { - $stuecklistenartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht = 0 AND nummer = '".$itemwerte['nummer']."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); - $stuecklisteitem = $this->app->DB->Select("SELECT id FROM stueckliste WHERE stuecklistevonartikel = '$stuecklistevonartikel' AND artikel = '$stuecklistenartikel' LIMIT 1"); - - if($stuecklisteitem){ - // update, id ist in $stuecklisteitem - } else { - // insert danach update - $this->app->DB->Insert("INSERT INTO stueckliste (id,artikel,stuecklistevonartikel) VALUES('','$stuecklistenartikel','$stuecklistevonartikel')"); - $stuecklisteitem = $this->app->DB->GetInsertID(); - } - - if($itemwerte['alternative'] != ''){ - $itemwerte['alternative'] = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht = 0 AND nummer = '".$itemwerte['alternative']."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); - } - - if(is_array($itemwerte)){ - foreach($itemwerte as $itemindex=>$itemwert){ - $this->app->DB->Update("UPDATE stueckliste SET $itemindex = '$itemwert' where id = '$stuecklisteitem'"); - } - } - } - } - $this->app->DB->Update("UPDATE artikel SET stueckliste = 1 WHERE id = '$stuecklistevonartikel' LIMIT 1"); - $this->ApiArtikelStuecklisteList($stuecklistevonartikel); - $this->app->ExitXentral(); - } - }else{ - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - }else{ - $this->XMLResponse(4); - $this->app->ExitXentral(); - } - } - - function ApiArtikelStuecklisteEdit($id = null, $intern = false) - { - if(!$id)$id = $this->app->Secure->GetGET("id"); - $this->ApiArtikelStuecklisteCreate(); - - } - - function ApiArtikelStuecklisteList($id = null, $intern = false) - { - if(!$id)$id = $this->app->Secure->GetGET("id"); - $xml = $this->XMLPost(); - if(!$id){ - $id= $xml['id']; - } - if($id == ''){ - $this->XMLResponse(5,"Fehlerhafte Artikelnummer"); - } - if(($id && $sl = $this->app->DB->SelectArr("SELECT s.id, s.stuecklistevonartikel, art.nummer as stuecklistevonartikelnummer, trim(s.menge)+0 as menge, s.art, - art2.nummer as artikelnummer, art3.nummer as alternativenummer,s.alternative - FROM stueckliste s - INNER JOIN artikel art ON art.id = s.stuecklistevonartikel - INNER JOIN artikel art2 ON art2.id = s.artikel - LEFT JOIN artikel art3 ON art3.id = s.alternative - WHERE s.stuecklistevonartikel = '$id'")) - || (isset($xml['stuecklistevonartikel']) && $sl = $this->app->DB->SelectArr("SELECT s.id, s.stuecklistevonartikel, art.nummer as stuecklistevonartikelnummer, trim(s.menge)+0 as menge, s.art, - art2.nummer as artikelnummer, art3.nummer as alternativenummer,s.alternative - FROM stueckliste s - INNER JOIN artikel art ON art.id = s.stuecklistevonartikel - INNER JOIN artikel art2 ON art2.id = s.artikel - LEFT JOIN artikel art3 ON art3.id = s.alternative WHERE s.stuecklistevonartikel = '".(int)$xml['stuecklistevonartikel']."'")) - || (isset($xml['stuecklistevonartikel']) && $sl = $this->app->DB->SelectArr("SELECT s.id, s.stuecklistevonartikel, art.nummer as stuecklistevonartikelnummer, trim(s.menge)+0 as menge, s.art, - art2.nummer as artikelnummer, art3.nummer as alternativenummer,s.alternative - FROM stueckliste s - INNER JOIN artikel art ON art.id = s.stuecklistevonartikel - INNER JOIN artikel art2 ON art2.id = s.artikel - LEFT JOIN artikel art3 ON art3.id = s.alternative - WHERE art.geloescht = 0 AND art.nummer = '".$xml['stuecklistevonartikel']."'")) - ) - { - $xmlstr = << - - -XML; - $_xmlobj = new SimpleXMLExtended($xmlstr); - - $xmlobj = $_xmlobj->AddChild('stueckliste',''); - if(isset($sl[0])) - { - $stuecklistevonartikelnummer = $xmlobj->AddChild('stuecklistevonartikelnummer'); - $stuecklistevonartikelnummer->value = $sl[0]['stuecklistevonartikelnummer']; - } - //$out = ''; - $i = 0; - $j = 0; - if($sl) - { - foreach($sl as $row) - { - $j++; - $artikelobj = $xmlobj->AddChild('item'); - foreach($row as $k2 => $v2) - { - if(!is_numeric($k2) && $k2 != 'stuecklistevonartikelnummer') - { - $_name = '_'.$k2; - $$_name = $artikelobj->AddChild($k2); - $$_name->value = $v2; - } - } - } - } - - $xmlobj->AddChild('anz_result',$j); - //$xmlobj->AddChild('anz_result',$sql); - $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - unset($_xmlobj); - $this->XMLResponse(1, $out); - $this->app->ExitXentral(); - } - $this->XMLResponse(5,"Artikelhat keine Stückliste"); - $this->app->ExitXentral(); - } - - function ApiArtikelkategorienList($intern = false) - { - $xml = $this->XMLPost(); - $api_id = isset($this->api_id)?$this->api_id:0; - $exakt = 0; - if(isset($xml['ID']))$xml['id'] = $xml['ID']; - if(isset($xml['ID_EXT']))$xml['id_ext'] = $xml['ID_EXT']; - if(isset($xml['BEZEICHNUNG']))$xml['bezeichnung'] = $xml['BEZEICHNUNG']; - if(isset($xml['EXAKT']))$xml['exakt'] = $xml['EXAKT']; - - $where = ''; - if($xml['id'])$where .= " AND ak.id = '".(int)$xml['id']."' "; - if($xml['id_ext'])$where .= " AND am.id_ext = '".$this->app->DB->real_escape_string($xml['id_ext'])."' "; - if($xml['bezeichnung']) - { - if($xml['exakt'] && $xml['exakt'] == 1) - { - $where .= " AND ak.bezeichnung like '".$this->app->DB->real_escape_string(base64_decode($xml['bezeichnung']))."' "; - }else{ - $where .= " AND ak.bezeichnung like '%".$this->app->DB->real_escape_string(base64_decode($xml['bezeichnung']))."%' "; - } - } - - $kategorien = $this->app->DB->SelectArr("SELECT ak.*, am.id_ext FROM artikelkategorien ak LEFT JOIN api_mapping am ON am.id_int = ak.id AND am.tabelle = 'artikelkategorien' WHERE geloescht <> 1 $where ORDER BY parent, bezeichnung"); - if($kategorien) - { - $out = ''; - foreach($kategorien as $kategorie) - { - $out .= ''; - foreach($kategorie as $k => $v) - { - $out .= '<'.$k.'>'.htmlspecialchars($v).''; - } - $out .= ''; - } - $out .= ''; - if ($intern == true) { - return $out; - } - $this->XMLResponse(1, $out); - $this->app->ExitXentral(); - } - if ($intern == true) { - return false; - } - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - - public function ApiDateiHeader() - { - $id = (int)$this->app->Secure->GetGET('id'); - if($id) - { - $datei = $this->app->DB->SelectArr("SELECT dv.id, ds.parameter FROM datei_version dv INNER JOIN datei_stichwoerter ds ON ds.datei = dv.datei WHERE dv.datei = '$id' ORDER BY dv.datei DESC, dv.version DESC LIMIT 1"); - if($datei) - { - $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); - $newid = $this->app->DB->Select("SELECT id FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); - - /*if($versionid>0) - $newid = $versionid;*/ - - $name = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE id='$newid' LIMIT 1"); - if(isset($this->app->Conf->WFuserdata)) - { - $path = $this->app->Conf->WFuserdata.'/dms/'.$this->app->Conf->WFdbname."/".$newid; - }else - $path = dirname(dirname(__DIR__)).'/userdata/dms/'.$this->app->Conf->WFdbname."/".$newid; - //$name=basename($path); - - //filenames in IE containing dots will screw up the - //filename unless we add this - - if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) - $name = preg_replace('/\./', '%2e', $name, substr_count($name, '.') - 1); - - $contenttype= $this->app->erp->content_type($name); - //required, or it might try to send the serving //document instead of the file - $res = "Content-Type: $contenttype\n"; - $res .= "Content-Length: " .(string)(filesize($path))."\n" ; - $name = $this->app->erp->Dateinamen($name); - $res .= 'Content-Disposition: attachment; filename="'.$name.'"'; - echo $res; - $this->app->ExitXentral(); - } - } - $this->app->ExitXentral(); - } - - function ApiBelegPDFHeader() - { - $id = (int)$this->app->Secure->GetGET('id'); - $beleg = (string)$this->app->Secure->GetGET('beleg'); - if(in_array($beleg, array('auftrag','angebot','rechnung','lieferschein','gutschrift','produktion','retoure'))) - { - if(!$this->app->DB->Select("SELECT id FROM $beleg WHERE id = '$id' LIMIT 1")) { - $this->app->ExitXentral(); - } - $this->app->erp->checkPDFClass($beleg); - $classcustom = ucfirst($beleg).'PDFCustom'; - $class = ucfirst($beleg).'PDF'; - if(class_exists($classcustom)) - { - $pdf = new $classcustom($this->app); - }elseif(class_exists($class)) - { - $pdf = new $class($this->app); - }else{ - $this->app->ExitXentral(); - } - $function = 'Get'.ucfirst($beleg); - if(method_exists($pdf, $function)) - { - $pdf->$function($id); - $res = "Content-type: application/pdf\n"; - $res .= 'Content-Disposition: attachment; filename="'.$pdf->filename.'"'; - echo $res; - $this->app->ExitXentral(); - } - } - $this->app->ExitXentral(); - } - - function ApiBelegPDF() - { - $id = (int)$this->app->Secure->GetGET('id'); - $beleg = (string)$this->app->Secure->GetGET('beleg'); - if(in_array($beleg, array('auftrag','angebot','rechnung','lieferschein','gutschrift','produktion','retoure'))) - { - if(!$this->app->DB->Select("SELECT id FROM $beleg WHERE id = '$id' LIMIT 1"))die('Beleg '.$id.' nicht gefunden'); - $this->app->erp->checkPDFClass($beleg); - $classcustom = ucfirst($beleg).'PDFCustom'; - $class = ucfirst($beleg).'PDF'; - if(class_exists($classcustom)) - { - $pdf = new $classcustom($this->app); - }elseif(class_exists($class)) - { - $pdf = new $class($this->app); - }else{ - echo "PDF-Klasse nicht gefunden"; - $this->app->ExitXentral(); - } - $function = 'Get'.ucfirst($beleg); - if(method_exists($pdf, $function)) - { - $pdf->$function($id); - $pdf->displayDocument($this->app->DB->Select("SELECT schreibschutz FROM $beleg WHERE id = '$id' LIMIT 1")); - } - }elseif($beleg != ''){ - echo "Belegart nicht erlaubt"; - }else{ - echo "Belegart nicht angegeben"; - } - $this->app->ExitXentral(); - } - - function ApiDateiDownload() - { - $id = (int)$this->app->Secure->GetGET('id'); - if($id) - { - $datei = $this->app->DB->SelectArr("SELECT dv.id, ds.parameter FROM datei_version dv INNER JOIN datei_stichwoerter ds ON ds.datei = dv.datei WHERE dv.datei = '$id' ORDER BY dv.datei DESC, dv.version DESC LIMIT 1"); - if($datei) { - $this->app->erp->SendDatei($id); - } - } - $this->app->ExitXentral(); - } - - function ApiDateiVorschau() - { - //$xml = $this->XMLPost(); - $datei = $this->app->Secure->GetGET('id'); - $cmd = $this->app->Secure->GetGet('cmd'); - $id = (int)$datei; - if($id) - { - $datei = $this->app->DB->SelectArr("SELECT dv.id, ds.parameter FROM datei_version dv INNER JOIN datei_stichwoerter ds ON ds.datei = dv.datei WHERE dv.datei = '$id' ORDER BY dv.datei DESC, dv.version DESC LIMIT 1"); - if(!$datei) - { - if ($this->app->erp->Firmendaten('iconset_dunkel')) { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); - } else { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); - } - header('Content-type: image/png'); - echo $str; - $this->app->ExitXentral(); - } - if($datei[0]['parameter']) - { - if($cmd === 'projekt') - { - if(!$this->app->erp->UserProjektRecht($datei[0]['parameter'])) - { - if ($this->app->erp->Firmendaten('iconset_dunkel')) { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); - } else { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); - } - header('Content-type: image/png'); - echo $str; - $this->app->ExitXentral(); - } - }else{ - $projekt = $this->app->DB->Select("SELECT projekt FROM $cmd WHERE id = '".$datei[0]['parameter']."' LIMIT 1"); - if(!$this->app->erp->UserProjektRecht($projekt)) - { - if ($this->app->erp->Firmendaten('iconset_dunkel')) { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); - } else { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); - } - header('Content-type: image/png'); - echo $str; - $this->app->ExitXentral(); - } - } - } - //Rechte prüfen - - $userdata = isset($this->app->Conf->WFuserdata)?$this->app->Conf->WFuserdata:str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME'])."../userdata"; - $path = $userdata."/dms/".$this->app->Conf->WFdbname; - $cachefolder = $path.'/cache'; - if(!file_exists($cachefolder.'/'.$datei[0]['id'].'_100_100')) - { - if(file_exists($path.'/'.$datei[0]['id'])) - { - $type = mime_content_type($path.'/'.$datei[0]['id']); - switch($type) - { - case 'image/jpg': - case 'image/jpeg': - $img = new image($this->app); - $str = $img->scaledPicByFileId($datei[0]['id'], 100, 100); - header('Content-type: image/jpg'); - echo $str; - $this->app->ExitXentral(); - break; - case 'image/png': - $img = new image($this->app); - $str = $img->scaledPicByFileId($datei[0]['id'], 100, 100); - header('Content-type: image/png'); - echo $str; - $this->app->ExitXentral(); - break; - case 'image/gif': - $img = new image($this->app); - $str = $img->scaledPicByFileId($datei[0]['id'], 100, 100); - header('Content-type: image/gif'); - echo $str; - $this->app->ExitXentral(); - break; - case 'application/pdf': - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/pdf.svg'); - header('Content-type: image/png'); - echo $str; - $this->app->ExitXentral(); - break; - } - } - } - - if(file_exists($cachefolder.'/'.$datei[0]['id'].'_100_100')) - { - $type = mime_content_type($path.'/'.$datei[0]['id']); - if(strpos($type,'image') !== false) - { - header('Content-type: '.$type); - $str = file_get_contents($cachefolder.'/'.$datei[0]['id'].'_100_100'); - echo $str; - $this->app->ExitXentral(); - } - }else{ - if ($this->app->erp->Firmendaten('iconset_dunkel')) { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); - } else { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); - } - header('Content-type: image/png'); - echo $str; - $this->app->ExitXentral(); - } - }else{ - if ($this->app->erp->Firmendaten('iconset_dunkel')) { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); - } else { - $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); - } - header('Content-type: image/png'); - echo $str; - } - $this->app->ExitXentral(); - } - - function ApiCustom() - { - $out = null; - $responsecode = 0; - $xml = $this->XMLPost(); - $apiid = $this->api_id; - $this->app->erp->RunHook('apicustom', 4, $apiid, $xml, $responsecode, $out); - $this->XMLResponse($responsecode, $out); - $this->app->ExitXentral(); - } - - public function ApiDateiList() - { - $xml = $this->XMLPost(); - $parameter = $xml['parameter']; - $objekt = $xml['objekt']; - $dateiliste = $this->app->DB->SelectArr( "SELECT d.titel, s.subjekt, v.version, v.ersteller, v.bemerkung, v.datum, d.id FROM - datei d LEFT JOIN datei_stichwoerter s ON d.id=s.datei LEFT JOIN datei_version v ON v.datei=d.id WHERE s.objekt LIKE '$objekt' AND s.parameter='$parameter' AND d.geloescht=0"); - - if($dateiliste) - { - $xml = $this->CreateXmlObj(); - foreach($dateiliste as $k => $datei) - { - $_datei = $xml->AddChild('Datei',''); - foreach($datei as $k2 => $row) - { - $_datei->AddChild($k2 ,$row); - } - } - $out = str_replace(array('','',"",''),array('','','',''),$xml->asXML()); - $this->XMLResponse(1, $out); - $this->app->ExitXentral(); - } - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - - function ApiAccountLogin() - { - $xml = $this->XMLPost(); - $user = $xml['user']; - $md5passwort = !empty($xml['md5passwort'])?$xml['md5passwort']:md5($xml['passwort']); - - $art = $xml['art']; - if(!empty($user) && !empty($md5passwort) && !empty($art)) - { - $acc = $this->app->DB->SelectArr("SELECT adr.*, aa.benutzername FROM adresse_accounts aa INNER JOIN adresse adr ON aa.adresse = adr.id WHERE adr.geloescht <> 1 AND aa.art = '".$this->app->DB->real_escape_string($art)."' AND aa.aktiv = 1 AND (aa.gueltig_bis = '0000-00-00' OR aa.gueltig_bis >= curdate() or isnull(aa.gueltig_bis)) AND (aa.gueltig_ab = '0000-00-00' OR isnull(gueltig_ab) OR gueltig_ab <= curdate()) AND aa.benutzername = '".$this->app->DB->real_escape_string($user)."' AND md5(aa.passwort) = '".$this->app->DB->real_escape_string($md5passwort)."' AND aa.art = '".$this->app->DB->real_escape_string($art)."' LIMIT 1"); - if($acc) - { - $xml = $this->CreateXmlObj(); - $xml->AddChild('name', $acc[0]['name']); - $xml->AddChild('adresse', $acc[0]['id']); - $xml->AddChild('benutzername', $acc[0]['benutzername']); - $out = str_replace(array('','',"",''),array('','','',''),$xml->asXML()); - $this->XMLResponse(1, $out); - $this->app->ExitXentral(); - } - } - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - - - function ApiBelegOhnePositionenList(){ - $xml = $this->XMLPost(); - $belegtypen = array('auftrag','rechnung','angebot','lieferschein','gutschrift','retoure'); - - //wir holen alle Projektdaten - $projekteData = $this->app->DB->SelectArr("SELECT id,abkuerzung FROM projekt"); - $projekte = array(); - foreach($projekteData as $value){ - $projekte[$value['id']] = $value['abkuerzung']; - } - - if(!in_array($xml['beleg'], $belegtypen)){ - $this->XMLResponse(5,"falsscher oder kein Belegtype im Feld beleg angegeben(auftrag,rechnung,angebot,lieferschein,gutschrift)"); - $this->app->ExitXentral(); - } - - $belegtype = $xml['beleg']; - - $sql = "SELECT - $belegtype.id AS id, - $belegtype.projekt AS projekt, - $belegtype.adresse AS adresse, - $belegtype.datum AS datum, - $belegtype.belegnr AS belegnr, - $belegtype.status AS status, - $belegtype.land AS land, - $belegtype.typ AS typ"; - - if($belegtype !== 'lieferschein' && $belegtype !== 'retoure'){ - $sql .= ", - $belegtype.umsatz_netto AS umsatz_netto, - $belegtype.erloes_netto AS erloes_netto, - $belegtype.deckungsbeitrag AS deckungsbeitrag, - $belegtype.provision_summe AS provision_summe, - $belegtype.gruppe AS gruppe - "; - } - $sql .= " FROM $belegtype"; - - if($xml['status'] != ''){ - $subwhere[] = "status = '" . $xml['status'] . "'"; - } - - if($xml['projekt'] != ''){ - if(!is_numeric($xml['projekt'])){ - $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xml['projekt']."' LIMIT 1"); - }else{ - $projektId = $xml['projekt']; - } - $subwhere[] = "projekt = '" . $projektId . "'"; - } - - if($xml['datum_von'] != ''){ - if(!strpos($xml['datum_von'],"-")) { - $datum_von = $this->app->String->Convert($xml['datum_von'], '%1.%2.%3', '%3-%2-%1'); - }else{ - $datum_von = $xml['datum_von']; - } - $subwhere[] = "datum >= '" . $datum_von . "'"; - } - - if($xml['datum_bis'] != ''){ - if(!strpos($xml['datum_bis'],"-")) { - $datum_bis = $this->app->String->Convert($xml['datum_bis'], '%1.%2.%3', '%3-%2-%1'); - }else{ - $datum_bis = $xml['datum_bis']; - } - $subwhere[] = "datum <= '" . $datum_bis . "'"; - } - - if($subwhere)$sql .= " WHERE ".implode(" AND ", $subwhere); - - if($xml['order'] != ''){ - $sql .= " ORDER BY " . $xml['order']['field']; - if($xml['order']['desc'] == '1'){ - $sql .= " DESC"; - } - if($xml['order']['asc'] == '1'){ - $sql .= " ASC"; - } - } - - if($xml['limit'] != '' && $xml['offset'] != ''){ - $sql .= " Limit " . $xml['offset'] . ", " . $xml['limit']; - } - $belege = $this->app->DB->SelectArr($sql); - - $xmlstr = << - - -XML; - $_xmlobj = new SimpleXMLExtended($xmlstr); - - $xmlobj = $_xmlobj->AddChild('beleg_list',''); - - foreach($belege as $beleg) { - $belegobj = $xmlobj->AddChild('beleg'); - $_belegobj = $belegobj->AddChild('id', $beleg['id']); - $_belegnr = $belegobj->AddChild('belegnr', $beleg['belegnr']); - $_projektid = $belegobj->AddChild('projektid',$beleg['projekt']); - $_projekt = $belegobj->AddChild('projekt',$projekte[$beleg['projekt']]); - $_adresse = $belegobj->AddChild('adresse',$beleg['adresse']); - $_datum = $belegobj->AddChild('datum',$beleg['datum']); - $_status = $belegobj->AddChild('status',$beleg['status']); - $_land = $belegobj->AddChild('land',$beleg['land']); - $_typ = $belegobj->AddChild('typ',$beleg['typ']); - - if($belegtype !== 'lieferschein' && $belegtype !== 'retoure'){ - $_umsatz_netto = $belegobj->AddChild('umsatz_netto',$beleg['umsatz_netto']); - $_erloes_netto = $belegobj->AddChild('erloes_netto',$beleg['erloes_netto']); - $_deckungsbeitrag = $belegobj->AddChild('deckungsbeitrag',$beleg['deckungsbeitrag']); - $_provision_summe = $belegobj->AddChild('provision_summe',$beleg['provision_summe']); - $_gruppe = $belegobj->AddChild('gruppe',$beleg['gruppe']); - } - } - - $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - unset($_xmlobj); - $this->XMLResponse(1, $out); - $this->app->ExitXentral(); - } - - - function ApiBelegeList() - { - $xml = $this->XMLPost(); - if($xml['ausgabe'] === 'belege'){ - $this->ApiBelegOhnePositionenList(); - $this->app->ExitXentral(); - } - $api_id = isset($this->api_id)?$this->api_id:0; - $adresse = false; - $belega = null; - $belegtypen = array('auftrag','rechnung','angebot','lieferschein','gutschrift','retoure'); - $join = ''; - $extraselect = ''; - $groupbyartikel = false; - if(isset($xml['groupbyartikel']) && $xml['groupbyartikel'])$groupbyartikel = true; - $groupbyposition = false; - if(isset($xml['groupbyposition']) && $xml['groupbyposition'])$groupbyposition = true; - $groupbyadresse = false; - if(isset($xml['groupbyadresse']) && $xml['groupbyadresse'])$groupbyadresse = true; - $groupbybeleg = false; - if(isset($xml['groupbybeleg']) && $xml['groupbybeleg'])$groupbybeleg = true; - $groupbybeleg2 = $groupbybeleg; - $groupbybeleg = false; - if(isset($xml['beleg'])) - { - if(is_array($xml['beleg'])) - { - foreach($xml['beleg'] as $_beleg) - { - if(in_array($_beleg, $belegtypen))$belega[] = $_beleg; - } - } - if(in_array($xml['beleg'], $belegtypen))$belega[] = $xml['beleg']; - } - - if(!$belega) - { - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - - $order = ''; - if(isset($xml['order'])){ - if(!isset($xml['order'][0])) - { - $xml['order'][0] = $xml['order']; - } - foreach($xml['order'] as $key => $sort) - { - $field = ''; - if(isset($sort['field'])) - { - switch(strtolower($sort['field'])) - { - case 'artikelkategorie': - $field = 'ak.bezeichnung'; - if($groupbyartikel)$field = 't.artikelkategoriebezeichnung'; - $join = " INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ "; - $extraselect = ' ,ak.bezeichnung as artikelkategoriebezeichnung '; - break; - case 'status': - case 'belegnr': - case 'datum': - if(!$groupbyartikel)$field = 'r.'.strtolower($sort['field']); - break; - case 'nummer': - if(!$groupbyartikel)$field = 'rp.'.strtolower($sort['field']); - if($groupbyartikel)$field = 't.'.strtolower($sort['field']); - break; - case 'menge': - if(!$groupbyartikel)$field = 'rp.'.strtolower($sort['field']); - if($groupbyartikel)$field = 'menge'; - break; - case 'preis': - case 'bezeichnung': - if(!$groupbyartikel)$field = 'rp.'.strtolower($sort['field']); - break; - case 'name': - case 'plz': - case 'ort': - case 'telefon': - case 'land': - case 'telefax': - case 'strasse': - if($groupbyadresse && $groupbyartikel)$field = 't.'.strtolower($sort['field']); - if(!$groupbyartikel)$field = 'r.'.strtolower($sort['field']); - break; - case 'name_de': - case 'name_en': - case 'anabregs_text': - case 'anabregs_text_en': - if($groupbyartikel)$field = 't.'.strtolower($sort['field']); - break; - case 'betrag': - case 'letztes_datum': - if($groupbyartikel)$field = strtolower($sort['field']); - break; - } - if(!empty($field)) - { - if(isset($sort['desc']) && $sort['desc'] == 1) - { - $field .= " DESC"; - } - if($order != '')$order .= ','; - $order .= $field; - } - } - } - } - if($order != '')$order = $order.','; - if(isset($xml['adresse'])) - { - $adresse = (int)$xml['adresse']; - }elseif(isset($xml['id_ext'])) - { - $adresse = $this->app->DB->Select("SELECT id_int FROM api_mapping WHERE api = '".$api_id."' AND tabelle = 'adresse' AND id_ext = '".$this->app->DB->real_escape_string($xml['id_ext'])."' LIMIT 1"); - } - if(true) - { - $filterkategoriename = false; - if(isset($xml['status'])) - { - $subwhere[] = " r.status like '".$this->app->DB->real_escape_string($xml['status'])."' "; - } - if(isset($xml['kategorie'])) - { - $subwhere[] = " a.typ = '".((int)$xml['kategorie'])."_kat' "; - } - if(isset($xml['kategoriename'])) - { - $field = 'ak.bezeichnung'; - $join = " INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ "; - $extraselect = ' ,ak.bezeichnung as artikelkategoriebezeichnung '; - $subwhere[] = " ak.bezeichnung like '".$this->app->DB->real_escape_string(base64_decode((string)$xml['kategoriename']))."' "; - $filterkategoriename = true; - } - if(isset($xml['datum_von'])) - { - $subwhere[] = "r.datum >= '".$this->app->DB->real_escape_string($xml['datum_von'])."' "; - } - if(isset($xml['datum_bis'])) - { - $subwhere[] = "r.datum <= '".$this->app->DB->real_escape_string($xml['datum_bis'])."' "; - } - - if(isset($xml['vertrieb'])) - { - $subwhere[] = " r.vertriebid = '".(int)$xml['vertrieb']."' "; - } - $limit = ''; - $offset = 0; - $_limit = 999999999; - if(isset($xml['limit'])) - { - if((int)$xml['limit'] > 0)$_limit = (int)$xml['limit']; - if(isset($xml['offset']) && (int)$xml['offset'] > 0) - { - $offset = (int)$xml['offset']; - //$limit = ' LIMIT '.(int)$xml['offset'].', '.(int)$xml['limit']; - }else{ - //$limit = ' LIMIT '.(int)$xml['limit']; - } - } - - $searchmode = ' OR '; - foreach($xml as $key => $filter) - { - $filterescaped = ''; - if(!is_array($filter))$filterescaped = $this->app->DB->real_escape_string($filter); - - switch(strtoupper($key)) - { - case 'SEARCHMODE': - if(strtoupper($filter) === 'AND') { - $searchmode = ' AND '; - } - if(strtoupper($filter) === 'OR') { - $searchmode = ' OR '; - } - break; - case 'EXAKT': - $exakt = true; - break; - case 'SEARCH': - - if(is_array($filter)) - { - - if(!isset($filter[0]))$filter[0] = $filter; - - foreach($filter as $_filter) - { - if(isset($_filter['SUCHE']))$_filter['suche'] = $_filter['SUCHE']; - if(isset($_filter['FIELD']))$_filter['field'] = $_filter['FIELD']; - if(isset($_filter['EXAKT']))$_filter['exakt'] = $_filter['EXAKT']; - if(isset($_filter['suche']) && isset($_filter['field'])) - { - if(isset($_filter['exakt']) && $_filter['exakt'] == 1) - { - $like = " LIKE '".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."' "; - }else{ - $like = " LIKE '%".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."%' "; - } - switch(strtolower($_filter['field'])) - { - case 'datum': - if(strpos('.',$like) !== false) - { - if(isset($_filter['exakt']) && $_filter['exakt'] == 1) - { - $like = " LIKE '".$this->app->DB->real_escape_string($this->app->String->Convert(base64_decode($_filter['suche']),"%1.%2.%3","%3-%2-%1"))."' "; - }else{ - $like = " LIKE '%".$this->app->DB->real_escape_string($this->app->String->Convert(base64_decode($_filter['suche']),"%1.%2.%3","%3-%2-%1"))."%' "; - } - $swhere[] = ' r.datum '.$like; - } - break; - case 'belegnr': - $swhere[] = ' r.belegnr '.$like; - break; - case 'nummer': - $swhere[] = ' a.'.strtolower($_filter['field']).' '.$like; - break; - case 'bezeichnung': - if($groupbyartikel) - { - if(strtolower($_filter['field']) == 'nummer') - { - - }else{ - $swhere[] = ' a.name_de '.$like; - } - }else{ - $swhere[] = ' rp.'.strtolower($_filter['field']).' '.$like; - } - break; - case 'name_de': - $swhere[] = ' a.name_de '.$like; - break; - case 'kategorieid': - if(isset($_filter['exakt']) && $_filter['exakt'] == 1) - { - $like = " LIKE '".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."_kat' "; - }else{ - $like = " LIKE '%".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."%_kat' "; - } - $swhere[] = ' a.typ '.$like; - break; - case 'kategoriename': - if(!isset($_filterkategoriename) || !$_filterkategoriename) - { - $join = " INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ "; - $extraselect = ' ,ak.bezeichnung as artikelkategoriebezeichnung '; - $swhere[] = ' ak.bezeichnung '.$like; - $_filterkategoriename = true; - } - break; - case 'name': - case 'plz': - case 'ort': - case 'strasse': - case 'kundennummer': - - if($groupbyadresse)$swhere[] = ' adr.'.strtolower($_filter['field']).' '.$like; - if(!$groupbyadresse)$swhere[] = ' r.'.strtolower($_filter['field']).' '.$like; - break; - break; - } - } - } - } - break; - } - } - - if(!empty($swhere))$subwhere[] = " (".implode( ' '.$searchmode.' ', $swhere).') '; - - $where = ""; - if($subwhere)$where = " AND ".implode(" AND ", $subwhere); - unset($belege); - $torder = trim($order,','); - if(!$torder)$torder = ' 1 '; - $groupbybelegsql = ""; - if($groupbybeleg)$groupbybelegsql = " ,t.id "; - if($groupbybeleg)$groupbybelegsql2 = " ,r.id "; - if($groupbyartikel) - { - if($groupbyadresse) - { - $sql = "SELECT t.adresse, t.name,t.strasse, t.plz, t.land, t.ort, t.kundennummer , t.aid, t.nummer, t.name_de, t.name_en, - t.anabregs_text, t.anabregs_text_en, t.artikelkategorie ,t.artikelkategoriebezeichnung , sum(t.menge) as menge, - sum(t.betrag) as betrag, max(t.letztes_datum) as letztes_datum FROM( "; - - foreach($belega as $beleg) - { - - $sqlb[] = " (SELECT adr.id as adresse, adr.name,adr.strasse, adr.plz, adr.land, adr.ort, adr.kundennummer , a.id as aid, a.nummer, a.name_de, a.name_en, a.anabregs_text, a.anabregs_text_en, a.typ as artikelkategorie ,ak.bezeichnung as artikelkategoriebezeichnung , sum(rp.menge) as menge, ".($beleg == 'gutschrift'?'-':'')."sum(rp.menge * (rp.preis*((100-rp.rabatt)/100) )) as betrag, max(r.datum) as letztes_datum FROM $beleg r INNER JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." INNER JOIN artikel a ON rp.artikel = a.id INNER JOIN adresse adr ON r.adresse = adr.id LEFT JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY adr.id, a.id $groupbybelegsql2) "; - - } - - $sql .= implode(" UNION ALL ",$sqlb).") t WHERE t.aid > 0 AND t.adresse > 0 GROUP BY t.aid, t.adresse ORDER BY $torder $limit"; - $_belege = $this->app->DB->SelectArr($sql); - - }else{ - - $sql = "SELECT t.aid, t.nummer, t.name_de, t.name_en, t.anabregs_text, t.anabregs_text_en, t.artikelkategorie ,t.artikelkategoriebezeichnung , t.menge,sum(t.betrag) as betrag, max(t.letztes_datum) as letztes_datum FROM( "; - - foreach($belega as $beleg) - { - - $sqlb[] = " (SELECT r.id as bid,r.datum,rp.sort, a.id as aid, a.nummer, a.name_de, a.name_en, a.anabregs_text, a.anabregs_text_en, a.typ as artikelkategorie ,ak.bezeichnung as artikelkategoriebezeichnung , sum(rp.menge) as menge, ".($beleg == 'gutschrift'?'-':'')."sum(rp.menge * (rp.preis*((100-rp.rabatt)/100) )) as betrag, max(r.datum) as letztes_datum FROM $beleg r INNER JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." INNER JOIN adresse adr ON r.adresse = adr.id INNER JOIN artikel a ON rp.artikel = a.id LEFT JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY a.id, adr.id $groupbybelegsql2) "; - - } - - $sql .= implode(" UNION ALL ",$sqlb).") t WHERE t.aid > 0 GROUP BY t.aid ORDER BY $torder $limit"; - - $_belege = $this->app->DB->SelectArr($sql); - } - if($_belege) - { - foreach($_belege as $k => $position) - { - //$position['preis'] = $position['menge'] * $position['preis'] * (1-$position['rabatt']/100); - $belege[] = $position; - unset($_belege[$k]); - } - } - }else{ - foreach($belega as $beleg) - { - if($groupbybeleg) - { - $sql = "SELECT '$beleg' as beleg ,r.adresse, r.name,r.plz,r.ort,r.strasse,r.land,r.ansprechpartner,r.datum,r.status as rstatus,r.belegnr,r.id as belegid, a.typ as artikelkategorie $extraselect FROM $beleg r LEFT JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." LEFT JOIN artikel a ON rp.artikel = a.id $join WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY r.id ORDER BY $order r.datum, rp.sort $limit "; - }else{ - $sql = "SELECT '$beleg' as beleg ,r.adresse, r.name,r.plz,r.ort,r.strasse,r.land,r.ansprechpartner,r.datum,r.status as rstatus,r.belegnr,r.id as belegid, rp.*, a.typ as artikelkategorie $extraselect FROM $beleg r LEFT JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." LEFT JOIN artikel a ON rp.artikel = a.id $join WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where ORDER BY $order r.datum, rp.sort $limit "; - } - $_belege = $this->app->DB->SelectArr($sql); - //$this->app->erp->LogFile(addslashes($this->app->DB->error())); - //$this->app->erp->LogFile(addslashes($sql)); - if($_belege) - { - foreach($_belege as $k => $position) - { - $position['status'] = $position['rstatus']; - unset($position['rstatus']); - $position['preis'] = $position['menge'] * $position['preis'] * (1-$position['rabatt']/100); - $belege[] = $position; - unset($_belege[$k]); - } - } - } - } - - - /* - foreach($belega as $beleg) - { - if($groupbyartikel) - { - if($groupbyadresse) - { - $_belege = $this->app->DB->SelectArr("SELECT '$beleg' as beleg, adr.id as adresse, adr.name,adr.strasse, adr.plz, adr.land, adr.ort, adr.kundennummer , a.id, a.nummer, a.name_de, a.name_en, a.anabregs_text, a.anabregs_text_en, a.typ as artikelkategorie ,ak.bezeichnung as artikelkategoriebezeichnung , sum(rp.menge) as menge, sum(rp.menge * (rp.preis*((100-rp.rabatt)/100) )) as betrag, max(r.datum) as letztes_datum FROM $beleg r INNER JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." INNER JOIN artikel a ON rp.artikel = a.id INNER JOIN adresse adr ON r.adresse = adr.id INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY a.id, adr.id ORDER BY $order r.datum, rp.sort $limit "); - - }else{ - $_belege = $this->app->DB->SelectArr("SELECT '$beleg' as beleg , a.id, a.nummer, a.name_de, a.name_en, a.anabregs_text, a.anabregs_text_en, a.typ as artikelkategorie ,ak.bezeichnung as artikelkategoriebezeichnung , sum(rp.menge) as menge, sum(rp.menge * (rp.preis*((100-rp.rabatt)/100) )) as betrag, max(r.datum) as letztes_datum FROM $beleg r INNER JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." INNER JOIN artikel a ON rp.artikel = a.id INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY a.id ORDER BY $order r.datum, rp.sort $limit "); - } - if($_belege) - { - foreach($_belege as $k => $position) - { - //$position['preis'] = $position['menge'] * $position['preis'] * (1-$position['rabatt']/100); - $belege[] = $position; - unset($_belege[$k]); - } - } - } - }*/ - -$xmlstr = << - - -XML; - $_xmlobj = new SimpleXMLExtended($xmlstr); - if($groupbyartikel) - { - $xmlobj = $_xmlobj->AddChild('artikel_list',''); - }else{ - $xmlobj = $_xmlobj->AddChild('beleg_list',''); - } - //$out = ''; - $i = 0; - $j = 0; - $anz_belegegesamt = -1; - $anz_belegeresult = 0; - $old_beleg = 0; - $old_beleggesamt = 0; - if($belege) - { - if($groupbyartikel) - { - foreach($belege as $position) - { - if($i >= $offset && $i < $_limit + $offset) - { - $j++; - $belegobj = $xmlobj->AddChild('artikel'); - $_belegobj = $belegobj->AddChild('id',''); - $_belegobj->value = $position['aid']; - $_nummer = $belegobj->AddChild('nummer',''); - $_nummer->value = $position['nummer']; - $_name_de = $belegobj->AddChild('name_de',''); - $_name_de->value = $position['name_de']; - $_menge = $belegobj->AddChild('menge',''); - $_menge->value = round($position['menge'],4); - $_betrag = $belegobj->AddChild('betrag',''); - $_betrag->value = $position['betrag']; - $_artikelkategorie = $belegobj->AddChild('artikelkategorie',''); - $_artikelkategorie->value = $position['artikelkategorie']; - $_letztes_datum = $belegobj->AddChild('letztes_datum',''); - $_letztes_datum->value = $position['letztes_datum']; - $_artikelkategoriebezeichnung = $belegobj->AddChild('artikelkategoriebezeichnung',''); - $_artikelkategoriebezeichnung->value = $position['artikelkategoriebezeichnung']; - if($groupbyadresse) - { - $_adresse = $belegobj->AddChild('adresse',''); - $_adresse->value = $position['adresse']; - $_kundennummer = $belegobj->AddChild('kundennummer',''); - $_kundennummer->value = $position['kundennummer']; - $_name = $belegobj->AddChild('name',''); - $_name->value = $position['name']; - $_ort = $belegobj->AddChild('ort',''); - $_ort->value = $position['ort']; - $_plz = $belegobj->AddChild('plz',''); - $_plz->value = $position['plz']; - $_strasse = $belegobj->AddChild('strasse',''); - $_strasse->value = $position['strasse']; - $_land = $belegobj->AddChild('land',''); - $_land->value = $position['land']; - } - } - $i++; - } - - }else{ - $old = 0; - foreach($belege as $position) - { - if($old_beleggesamt != $position['belegid'].$position['beleg']) - { - $anz_belegegesamt++; - $old_beleggesamt = $position['belegid'].$position['beleg']; - } - if(($groupbybeleg2?$anz_belegegesamt:$i) >= $offset && ($groupbybeleg2?$anz_belegegesamt:$i) < $_limit + $offset) - { - $j++; - if($groupbyposition || $old != $position['belegid'].$position['beleg']) - { - $anz_belegeresult++; - $belegobj = $xmlobj->AddChild($position['beleg']); - //if($old != 0)$out .= ''; - $old = $position['belegid'].$position['beleg']; - - //$out .= '<'.$position['beleg'].'>'; - - $_belegobj = $belegobj->AddChild('belegid',''); - $_belegobj->value = $position['belegid']; - $_plz = $belegobj->AddChild('plz',''); - $_plz->value = $position['plz']; - $_ort = $belegobj->AddChild('ort',''); - $_ort->value = $position['ort']; - $_strasse = $belegobj->AddChild('strasse',''); - $_strasse->value = $position['strasse']; - $_land = $belegobj->AddChild('land',''); - $_land->value = $position['land']; - $_ansprechpartner = $belegobj->AddChild('ansprechpartner',''); - $_ansprechpartner->value = $position['ansprechpartner']; - $_datum = $belegobj->AddChild('datum',''); - $_datum->value = $position['datum']; - $_belegnr = $belegobj->AddChild('belegnr',''); - $_belegnr->value = $position['belegnr']; - $_status = $belegobj->AddChild('status',''); - $_status->value = $position['status']; - $_adresse = $belegobj->AddChild('adresse',''); - $_adresse->value = $position['adresse']; - $_name = $belegobj->AddChild('name',''); - $_name->value = $position['name']; - //$out .= ''.$position['belegid'].''; - //$out .= ''.$position['datum'].''; - //$out .= ''.$position['belegnr'].''; - //$out .= ''.$position['status'].''; - //$out .= ''.$position['adresse'].''; - } - $_positionobj = $belegobj->AddChild('position',''); - //$out .= ''; - foreach($position as $k => $v) - { - $objn = $k.'_obj'; - $$objn = $_positionobj->AddChild($k,''); - $$objn->value = $v; - //$out .= '<'.$k.'>'.htmlspecialchars($v).''; - } - //$out .= ''; - } - $i++; - } - } - //$out .= ''; - } - $anz_belegegesamt++; - //$out .= ''.(!empty($belege)?count($belege):0).''.$j.''; - $xmlobj->AddChild('anz_gesamt',(!empty($belege)?count($belege):0)); - $xmlobj->AddChild('anz_result',$j); - if(!$groupbyartikel) - { - $xmlobj->AddChild('anz_belegegesamt',$anz_belegegesamt); - $xmlobj->AddChild('anz_belegeresult',$anz_belegeresult); - } - $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - unset($_xmlobj); - $this->XMLResponse(1, $out); - $this->app->ExitXentral(); - } - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - - function ApiGruppenList() - { - $gruppen = $this->app->DB->SelectArr("SELECT * FROM gruppen WHERE art like 'gruppe' "); - if($gruppen) - { - $out = ''; - foreach($gruppen as $gruppe) - { - $out .= ''; - foreach($gruppe as $k => $v ) - { - $out .= '<'.$k.'>'.$v.''; - } - $out .= ''; - } - $out .= ''; - $this->XMLResponse(1, $out); - $this->app->ExitXentral(); - } - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - - function ApiAdresseGruppenList() - { - $xml = $this->XMLPost(); - $api_id = isset($this->api_id)?$this->api_id:0; - if(isset($xml['adresse'])) - { - $adresse = (int)$xml['adresse']; - - }elseif(isset($xml['id_ext'])) - { - $adresse = $this->app->DB->Select("SELECT id_int FROM api_mapping WHERE api = '".$api_id."' AND tabelle = 'adresse' AND id_ext = '".$this->app->DB->real_escape_string($xml['id_ext'])."' LIMIT 1"); - } - if($adresse) - { - $gruppen = $this->app->DB->SelectArr("SELECT gr.id as gruppe, gr.name, am.id_int FROM adresse_rolle ar LEFT JOIN gruppen gr ON gr.id = ar.parameter LEFT JOIN api_mapping am ON am.id_int = gr.id AND am.tabelle = 'gruppen' WHERE ar.adresse = '$adresse' AND ar.subjekt like 'Mitglied' AND objekt like 'Gruppe'"); - if($gruppen) - { - $out = ''; - foreach($gruppen as $gruppe) - { - $out .= ''; - foreach($gruppe as $k => $v ) - { - $out .= '<'.$k.'>'.$v.''; - } - $out .= ''; - } - $out .= ''; - $this->XMLResponse(1, $out); - $this->app->ExitXentral(); - } - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - - - public function ApiAccountList() - { - $this->XMLPost(); - $api_id = isset($this->api_id)?$this->api_id:0; - if($api_id) - { - $url = $this->app->DB->Select("SELECT remotedomain FROM api_account WHERE id = '$api_id' LIMIT 1"); - $adresse = $this->app->Secure->GetGET('adresse'); - if(!empty($adresse)){ - $accounts = $this->app->DB->SelectArr("SELECT ac.adresse, ac.art, ac.benutzername,ac.passwort, ac.webid, am.id_ext, a.name, a.email FROM adresse_accounts ac INNER JOIN adresse a ON ac.adresse = a.id LEFT JOIN api_mapping am ON am.id_int = ac.adresse AND am.api = '$api_id' AND am.tabelle = 'adresse' WHERE ac.aktiv = 1 AND ac.url = '".$this->app->DB->real_escape_string($url)."' AND (ac.gueltig_bis <= now() or isnull(ac.gueltig_bis)) AND ac.adresse={$adresse}"); - }else{ - $accounts = $this->app->DB->SelectArr("SELECT ac.adresse, ac.art, ac.benutzername,ac.passwort, ac.webid, am.id_ext, a.name, a.email FROM adresse_accounts ac INNER JOIN adresse a ON ac.adresse = a.id LEFT JOIN api_mapping am ON am.id_int = ac.adresse AND am.api = '$api_id' AND am.tabelle = 'adresse' WHERE ac.aktiv = 1 AND ac.url = '".$this->app->DB->real_escape_string($url)."' AND (ac.gueltig_bis <= now() or isnull(ac.gueltig_bis))"); - } - if($error = $this->app->DB->error()) - { - $this->XMLResponse(1,''.$error.''); - } - if($accounts) - { - $out = ''; - foreach($accounts as $account) - { - $out .= ''; - foreach($account as $key => $value) - { - $out .= '<'.$key.'>'.(is_null($value)?'':$value).''; - } - $out .= ''; - } - $out .= ''; - $this->XMLResponse(1,$out); - $this->app->ExitXentral(); - } - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - $this->XMLResponse(3); - $this->app->ExitXentral(); - } - - function ApiMappingGet() - { - $xml = $this->XMLPost(); - $api_id = isset($this->api_id)?$this->api_id:0; - if(is_array($xml)) - { - $list = false; - if(isset($xml['list'])) - { - $list = $xml['list']; - }elseif($xml['LIST']) - { - $list = $xml['LIST']; - } - if(!$list) - { - $table = isset($xml['table'])?$xml['table']:(isset($xml['TABLE'])?$xml['TABLE']:''); - $id_int = isset($xml['id_int'])?$xml['id_int']:(isset($xml['ID_INT'])?$xml['ID_INT']:''); - $id_ext = isset($xml['id_ext'])?$xml['id_ext']:(isset($xml['ID_EXT'])?$xml['ID_EXT']:''); - if($table && (!empty($id_int) || !empty($id_ext))) - { - if(!empty($id_int)) - { - $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE tabelle = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_int = '".$this->app->DB->real_escape_string($id_int)."' AND api = '".$api_id."' LIMIT 1"); - }else{ - $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE tabelle = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_ext = '".$this->app->DB->real_escape_string($id_ext)."' AND api = '".$api_id."' LIMIT 1"); - } - if(empty($ergebnis)) - { - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - $this->XMLResponse(1,''.$ergebnis[0]['id_int'].''.$ergebnis[0]['id_ext'].''.$ergebnis[0]['tabelle'].'
'); - $this->app->ExitXentral(); - } - $this->XMLResponse(4); - $this->app->ExitXentral(); - } - $out = ''; - foreach($list as $k => $v) - { - $table = isset($v['table'])?$v['table']:(isset($v['TABLE'])?$v['TABLE']:''); - $id_int = isset($v['id_int'])?$v['id_int']:(isset($v['ID_INT'])?$v['ID_INT']:''); - $id_ext = isset($v['id_ext'])?$v['id_ext']:(isset($v['ID_EXT'])?$v['ID_EXT']:''); - if($table && (!empty($id_int) || !empty($id_ext))) - { - if(!empty($id_int)) - { - $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE table = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_int = '".$this->app->DB->real_escape_string($id_int)."' AND api = '".$api_id."' LIMIT 1"); - }else{ - $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE table = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_ext = '".$this->app->DB->real_escape_string($id_ext)."' AND api = '".$api_id."' LIMIT 1"); - } - if(!empty($ergebnis)) - { - $out .= ''.$ergebnis[0]['id_int'].''.$ergebnis[0]['id_ext'].''.$ergebnis[0]['tabelle'].'
'; - } - } - } - $out = '
'; - $this->XMLResponse(1,$out); - $this->app->ExitXentral(); - } - } - - function ApiMappingSet() - { - $xml = $this->XMLPost(); - $api_id = isset($this->api_id)?$this->api_id:0; - if(is_array($xml)) - { - $list = false; - if(isset($xml['list'])) - { - $list = $xml['list']; - }elseif($xml['LIST']) - { - $list = $xml['LIST']; - } - if(!$list) - { - $table = isset($xml['table'])?$xml['table']:(isset($xml['TABLE'])?$xml['TABLE']:''); - $id_int = isset($xml['id_int'])?$xml['id_int']:(isset($xml['ID_INT'])?$xml['ID_INT']:''); - $id_ext = isset($xml['id_ext'])?$xml['id_ext']:(isset($xml['ID_EXT'])?$xml['ID_EXT']:''); - if($table && (!empty($id_int) && !empty($id_ext))) - { - $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE tabelle = '".$this->app->DB->real_escape_string($table)."' AND id_int = '".$this->app->DB->real_escape_string($id_int)."' AND api = '".$api_id."' LIMIT 1"); - if(empty($ergebnis)) - { - $this->app->DB->Insert("INSERT INTO api_mapping (tabelle, id_int, id_ext, api) VALUES ('".$this->app->DB->real_escape_string($table)."','".$this->app->DB->real_escape_string($id_int)."','".$this->app->DB->real_escape_string($id_ext)."','".$api_id."')"); - if($insertid = $this->app->DB->GetInsertID()) - { - $this->XMLResponse(1,''.$id_int.''.$id_ext.''.$table.'
'.$insertid.''."INSERT INTO api_mapping (table, id_int, id_ext, api) VALUES ('".$this->app->DB->real_escape_string($table)."','".$this->app->DB->real_escape_string($id_int)."','".$this->app->DB->real_escape_string($id_ext)."','".$api_id."')".''); - $this->app->ExitXentral(); - } - $this->XMLResponse(0); - $this->app->ExitXentral(); - } - $this->app->DB->Update("UPDATE api_mapping SET id_ext = '".$this->app->DB->real_escape_string($id_ext)."' WHERE id = '".$ergebnis[0]['id']."' LIMIT 1"); - $this->XMLResponse(1,''.$id_int.''.$id_ext.''.$table.'
'); - $this->app->ExitXentral(); - } - $this->XMLResponse(4); - $this->app->ExitXentral(); - } - $out = ''; - foreach($list as $k => $v) - { - $table = isset($v['table'])?$v['table']:(isset($v['TABLE'])?$v['TABLE']:''); - $id_int = isset($v['id_int'])?$v['id_int']:(isset($v['ID_INT'])?$v['ID_INT']:''); - $id_ext = isset($v['id_ext'])?$v['id_ext']:(isset($v['ID_EXT'])?$v['ID_EXT']:''); - if($table && (!empty($id_int) && !empty($id_ext))) - { - if(!empty($id_int)) - { - $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE tabelle = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_int = '".$this->app->DB->real_escape_string($id_int)."' AND api = '".$api_id."' LIMIT 1"); - } - if(!empty($ergebnis)) - { - $this->app->DB->Update("UPDATE api_mapping SET id_ext = '".$this->app->DB->real_escape_string($id_ext)."' WHERE id = '".$ergebnis[0]['id']."' LIMIT 1"); - $out .= ''.$id_int.''.$id_ext.''.$table.'
'; - }else{ - $this->app->DB->Insert("INSERT INTO api_mapping (table, id_int, id_ext, api) VALUES ('".$this->app->DB->real_escape_string($table)."','".$this->app->DB->real_escape_string($id_int)."','".$this->app->DB->real_escape_string($id_ext)."','".$api_id."')"); - $out .= ''.$id_int.''.$id_ext.''.$table.'
'; - } - } - } - $out = '
'; - $this->XMLResponse(1,$out); - $this->app->ExitXentral(); - } - } - - // allgemeine funktionen - function CheckHash() - { - $hash = $this->app->Secure->GetGET("hash"); - $api_id = (int)$this->app->Secure->GetGET("api_id"); - - try{ - $apiAccount = $this->apiAccountService->getApiAccountById($api_id); - $this->api_id = $apiAccount->getId(); - }catch (ApiAccountNotFoundException $e){ - $this->XMLResponse(9); - $this->app->ExitXentral(); - } - - if($hash !== $this->generateHash($apiAccount->getRemoteDomain(),$apiAccount->getInitKey())){ - if($api_id === 0){ - $this->XMLResponse(9); - }else{ - $this->XMLResponse(2); - } - $this->app->ExitXentral(); - } - - $guard = new PermissionGuard($this->app->Container->get('Database'), (int)$this->api_id); - $guard->checkStandardApiAction($this->app->Secure->GetGET("action")); - } - - function generateHash($domain,$key) - { - $date = gmdate('dmY'); - $hash = ""; - - for($i = 0; $i <= 200; $i++) - $hash = sha1($hash . $key . $domain . $date); - - return $hash; - } - - function getBelege() - { - return array( - 'auftrag','rechnung','gutschrift','angebot','lieferschein','bestellung','produktion','retoure','verbindlichkeit' - ); - } - - function getTabellen() - { - return array('adresse','adresse_rolle','gruppen','adresse_kontakte','artikel','verkaufspreise','einkaufspreise','stueckliste'); - } - - /** - * @param string $typ - * @param int $id - * - * @return null|string - */ - public function GetPDF($typ, $id) - { - $id = (int)$id; - if(!$id) { - return null; - } - if(!in_array($typ, $this->getBelege())) { - return null; - } - $elemente = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM `%s` WHERE `id` = %d LIMIT 1', - $typ, $id - ) - ); - if(!$elemente) { - return null; - } - - if(!defined('FPDF_FONTPATH')){ - define('FPDF_FONTPATH','lib/pdf/font/'); - } - - if(!class_exists('FPDFWAWISION')){ - if(file_exists(dirname(dirname(__DIR__)).'/conf/user_defined.php')){ - include_once dirname(dirname(__DIR__)).'/conf/user_defined.php'; - } - /*if(!defined('USEFPDF3')) - { - define('USEFPDF3',true); - }*/ - if(defined('USEFPDF3') && USEFPDF3 && file_exists(dirname(__DIR__) . '/lib/pdf/fpdf_3.php')){ - require_once(dirname(__DIR__) . '/lib/pdf/fpdf_3.php'); - }elseif(defined('USEFPDF2') && USEFPDF2){ - if(file_exists(dirname(__DIR__) . '/lib/pdf/fpdf_2.php')){ - require_once(dirname(__DIR__) . '/lib/pdf/fpdf_2.php'); - }else{ - require_once(dirname(__DIR__) . '/lib/pdf/fpdf.php'); - } - }else{ - require_once(dirname(__DIR__) . '/lib/pdf/fpdf.php'); - } - } - require_once(dirname(__DIR__).'/lib/pdf/fpdf_final.php'); - - require_once(dirname(__DIR__)."/lib/dokumente/class.superfpdf.php"); - require_once(dirname(__DIR__)."/lib/dokumente/class.etikett.php"); - if(file_exists(dirname(__DIR__)."/lib/dokumente/class.briefpapier_custom.php")) - { - require_once(dirname(__DIR__)."/lib/dokumente/class.briefpapier_custom.php"); - }else{ - require_once(dirname(__DIR__)."/lib/dokumente/class.briefpapier.php"); - } - - if(file_exists(dirname(__DIR__)."/lib/class.image.php")) - { - require_once(dirname(__DIR__)."/lib/class.image.php"); - } - - require_once(dirname(__DIR__)."/lib/dokumente/class.dokumentenvorlage.php"); - if(file_exists("lib/dokumente/class.layoutvorlagen.php"))require_once("lib/dokumente/class.layoutvorlagen.php"); - require_once(dirname(__DIR__)."/lib/dokumente/class.sepamandat.php"); - require_once(dirname(__DIR__)."/lib/dokumente/class.dokuarbeitszeit.php"); - require_once(dirname(__DIR__)."/../phpwf/plugins/class.string.php"); - if(!isset($this->app->String))$this->app->String = new WawiString(); - $classname = ucfirst($typ).'PDF'; - $classnamecustom = $classname.'Custom'; - if(!class_exists($classname) && !class_exists($classnamecustom)) - { - if(file_exists(dirname(__DIR__).'/lib/dokumente/class.'.$typ.'_custom.php')) - { - include_once(dirname(__DIR__).'/lib/dokumente/class.'.$typ.'_custom.php'); - }elseif(file_exists(dirname(__DIR__).'/lib/dokumente/class.'.$typ.'.php')) - { - include_once(dirname(__DIR__).'/lib/dokumente/class.'.$typ.'.php'); - } - } - if(class_exists($classnamecustom)) - { - $Brief = new $classnamecustom($this->app,$elemente['projekt']); - } - elseif(class_exists($classname)){ - $Brief = new $classname($this->app,$elemente['projekt']); - } - else { - return null; - } - $funktionsname = 'Get'.ucfirst($typ); - if(method_exists($Brief, $funktionsname)) { - $Brief->$funktionsname($elemente['id']); - $Brief->renderDocument(); - return $Brief->output('','S'); - } - return null; - } - - /** - * @param string $file - * @param int $receiptdocumentId - * @param bool $append - * @param null|array $options - * - * @return bool - */ - public function createReceiptdocumentQsCsv($file, $receiptdocumentId, $append = false, $options = null) - { - if(empty($file) || empty($receiptdocumentId)) { - return false; - } - $file_ex = @is_file($file); - if(!$file_ex) { - $append = false; - } - $handle = @fopen($file, $append?'a':'w'); - if(empty($handle)) { - return false; - } - $noWrap = !empty($options['nowrap']); - foreach($this->generateQsCsvArr($receiptdocumentId) as $row) { - if($noWrap) { - foreach($row as $key => $col) { - if(!is_string($col)) { - continue; - } - $row[$key] = str_replace(["\r\n","\r","\n"],' ', $col); - } - } - @fputcsv($handle, $row, ';','"'); - } - @fclose($handle); - - return @file_exists($file); - } - - /** - * @param int $receiptdocumentId - * - * @return array - */ - public function generateQsCsvArr($receiptdocumentId) - { - $elemente_positionen = $this->app->DB->Query( - sprintf( - "SELECT r.document_number, b.belegnr AS bestellung, m2.id_ext AS receiptdocument_id_ext, - m.id_ext AS receiptdocument_position_id_ext,art.ean, art.gewicht, art.herstellernummer, art.altersfreigabe, - art.lagerartikel,r.status, r.status_qs, t.amount, t.amount_good, t.amount_bad, bp.menge, bp.geliefert - FROM receiptdocument_position t - INNER JOIN receiptdocument AS r ON t.receiptdocument_id = r.id - INNER JOIN `paketannahme` AS parc ON r.parcel_receipt_id = parc.id - INNER JOIN `paketdistribution` AS pd ON parc.id = pd.paketannahme - INNER JOIN bestellung_position AS bp ON pd.bestellung_position = bp.id - INNER JOIN bestellung AS b ON bp.bestellung = b.id - LEFT JOIN artikel art ON t.article_id = art.id - LEFT JOIN api_mapping m ON m.tabelle = 'receiptdocument_position' AND m.id_int = t.id - LEFT JOIN api_mapping m2 ON m2.tabelle = 'receiptdocument' AND m2.id_int = r.id - WHERE t.receiptdocument_id = %d ", - $receiptdocumentId - ) - ); - - $rows = [ - ['r.document_number', 'bestellung', 'receiptdocument_id_ext', - 'receiptdocument_position_id_ext','ean', 'gewicht', 'herstellernummer', 'altersfreigabe', - 'lagerartikel','status', 'status_qs', 'amount', 'amount_good', 'amount_bad', 'bp.menge', 'geliefert'] - ]; - if(!empty($elemente_positionen)) { - while($row = $this->app->DB->fetch_row($elemente_positionen)) { - $rows[] = $row; - } - $this->app->DB->free($elemente_positionen); - } - - return $rows; - } - - function ApiDataToXML($typ, $id, &$xml = null, $parameter = null) - { - $n = null; - $typ = strtolower($typ); - if($xml === null) { - $xml = $this->CreateXmlObj(); - } - - if(isset($parameter['briefpapier']) && $parameter['briefpapier'] == 1) { - $briefpapier = ''; - $briefpapier2 = ''; - $logo = ''; - $briefpapier_typ = $this->app->erp->Firmendaten('hintergrund'); - - if($briefpapier_typ==='logo') - { - $logo = $this->app->erp->Firmendaten('logo'); - } - else if($briefpapier_typ==='briefpapier') - { - $briefpapier = $this->app->erp->Firmendaten('briefpapier'); - - $briefpapier2vorhanden = $this->app->erp->Firmendaten('briefpapier2vorhanden'); - if($briefpapier2vorhanden > 0) - { - $briefpapier2 = $this->app->erp->Firmendaten('briefpapier2'); - } - } - if($briefpapier && !isset($xml->xml->briefpapier)){ - $this->AddToXMLObj($xml, 'briefpapier','', $briefpapier, $n, $erg); - } - if($briefpapier2 && !isset($xml->xml->briefpapier2)){ - $this->AddToXMLObj($xml, 'briefpapier2','', $briefpapier2, $n, $erg); - } - if($logo && !isset($xml->xml->logo)){ - $this->AddToXMLObj($xml, 'logo','', $logo, $n, $erg); - } - if($briefpapier_typ && !isset($xml->xml->briefpapier_typ)){ - $this->AddToXMLObj($xml, 'briefpapier_typ','', $briefpapier_typ, $n, $erg); - } - } - $typen = $this->getTabellen(); - $belege = $this->getBelege(); - if(in_array($typ, $typen)) { - $elemente = $this->app->DB->SelectArr( - "SELECT t.*, m.id_ext ".($typ==='bestellung'?",adr.kundennummerlieferant":'')." - FROM `$typ` AS `t` ".($typ=='bestellung'?" - LEFT JOIN `adresse` AS `adr` ON t.adresse = adr.id ":"")." - LEFT JOIN `api_mapping` AS `m` ON m.api = '".$this->api_id."' AND m.tabelle = '$typ' AND m.id_int = t.id - WHERE t.id = '".($id)."' - LIMIT 1" - ); - if($elemente) { - $this->AddToXMLObj($xml, $typ,$typ.'_list', $elemente, $n, $erg); - } - } - elseif(in_array($typ, $belege)) { - $typposition = $typ.'_position'; - $elemente = $this->app->DB->SelectArr("SELECT t.*, m.id_ext FROM $typ t LEFT JOIN api_mapping m ON m.api = '".$this->api_id."' AND m.tabelle = '$typ' AND m.id_int = t.id WHERE t.id = '".($id)."' LIMIT 1"); - - if($elemente) { - $elemente[0]['anzahluebertragungen'] = 1+(int)$this->app->DB->Select("SELECT anzahl_uebertragen FROM api_request WHERE uebertragung_account = '".$this->uebertragung_account."' and typ = '$typ' AND parameter1 = '$id' LIMIT 1"); - if(isset($parameter['pdf']) && $parameter['pdf'] == 1) { - $file = $this->GetPDF($typ, $id); - if(!empty($file)) { - $elemente[0]['pdf'] = base64_encode($file); - } - } - if(isset($parameter['gln_freifeld'])) { - $elemente[0]['gln_empfaenger'] = $this->app->DB->Select("SELECT freifeld".(int)$parameter['gln_freifeld']." FROM adresse WHERE id = '".$elemente[0]['adresse']."' LIMIT 1"); - } - if($typ === 'lieferschein' || $typ === 'retoure') { - $auftragsdaten = $elemente[0]['auftragid'] <= 0 ? null : $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id = '".$elemente[0]['auftragid']."' LIMIT 1"); - if($auftragsdaten) { - $elemente[0]['tatsaechlicheslieferdatum'] = $auftragsdaten[0]['tatsaechlicheslieferdatum']; - $elemente[0]['lieferdatum'] = $auftragsdaten[0]['lieferdatum']; - $elemente[0]['lieferdatumkw'] = $auftragsdaten[0]['lieferdatumkw']; - $elemente[0]['rechnung_name'] = $auftragsdaten[0]['name']; - $elemente[0]['auftrag_name'] = $auftragsdaten[0]['name']; - $elemente[0]['rechnung_anrede'] = $auftragsdaten[0]['anrede']; - $elemente[0]['auftrag_anrede'] = $auftragsdaten[0]['anrede']; - $elemente[0]['rechnung_strasse'] = $auftragsdaten[0]['strasse']; - $elemente[0]['auftrag_strasse'] = $auftragsdaten[0]['strasse']; - $elemente[0]['rechnung_adresszusatz'] = $auftragsdaten[0]['adresszusatz']; - $elemente[0]['auftrag_adresszusatz'] = $auftragsdaten[0]['adresszusatz']; - $elemente[0]['rechnung_ansprechpartner'] = $auftragsdaten[0]['ansprechpartner']; - $elemente[0]['auftrag_ansprechpartner'] = $auftragsdaten[0]['ansprechpartner']; - $elemente[0]['rechnung_abteilung'] = $auftragsdaten[0]['abteilung']; - $elemente[0]['auftrag_abteilung'] = $auftragsdaten[0]['abteilung']; - $elemente[0]['rechnung_unterabteilung'] = $auftragsdaten[0]['unterabteilung']; - $elemente[0]['auftrag_unterabteilung'] = $auftragsdaten[0]['unterabteilung']; - $elemente[0]['rechnung_bundesstaat'] = $auftragsdaten[0]['bundesstaat']; - $elemente[0]['auftrag_bundesstaat'] = $auftragsdaten[0]['bundesstaat']; - $elemente[0]['rechnung_plz'] = $auftragsdaten[0]['plz']; - $elemente[0]['auftrag_plz'] = $auftragsdaten[0]['plz']; - $elemente[0]['rechnung_ort'] = $auftragsdaten[0]['ort']; - $elemente[0]['auftrag_ort'] = $auftragsdaten[0]['ort']; - $elemente[0]['rechnung_land'] = $auftragsdaten[0]['land']; - $elemente[0]['auftrag_land'] = $auftragsdaten[0]['land']; - $elemente[0]['rechnung_gln'] = $auftragsdaten[0]['gln']; - $elemente[0]['auftrag_gln'] = $auftragsdaten[0]['gln']; - $elemente[0]['internet'] = $auftragsdaten[0]['internet']; - $elemente[0]['shopextid'] = $auftragsdaten[0]['shopextid']; - $elemente[0]['auftragextid'] = $this->GetExtIDFromIntID('auftrag',$elemente[0]['auftragid']); - } - - // wenn es eine eigene Rechnung bibt dann fuer die rechnunsdaten die infos da nehmen - $rechnungsdaten = $elemente[0]['auftragid'] <= 0 ? null : $this->app->DB->SelectArr("SELECT * FROM rechnung WHERE auftragid = '".$elemente[0]['auftragid']."' LIMIT 1"); - if($rechnungsdaten) - { - $elemente[0]['rechnung_name'] = $rechnungsdaten[0]['name']; - $elemente[0]['rechnung_anrede'] = $rechnungsdaten[0]['anrede']; - $elemente[0]['rechnung_strasse'] = $rechnungsdaten[0]['strasse']; - $elemente[0]['rechnung_adresszusatz'] = $rechnungsdaten[0]['adresszusatz']; - $elemente[0]['rechnung_ansprechpartner'] = $rechnungsdaten[0]['ansprechpartner']; - $elemente[0]['rechnung_abteilung'] = $rechnungsdaten[0]['abteilung']; - $elemente[0]['rechnung_unterabteilung'] = $rechnungsdaten[0]['unterabteilung']; - $elemente[0]['rechnung_plz'] = $rechnungsdaten[0]['plz']; - $elemente[0]['rechnung_ort'] = $rechnungsdaten[0]['ort']; - $elemente[0]['rechnung_bundesstaat'] = $rechnungsdaten[0]['bundesstaat']; - $elemente[0]['rechnung_land'] = $rechnungsdaten[0]['land']; - $elemente[0]['rechnung_gln'] = $rechnungsdaten[0]['gln']; - } - - - if($typ === 'lieferschein'){ - $tracking = (string)$this->app->DB->Select("SELECT tracking FROM versand WHERE lieferschein = '" . $elemente[0]['id'] . "' AND tracking <> '' AND lieferschein <> 0 ORDER by id DESC LIMIT 1"); - if($tracking !== '') { - $elemente[0]['tracking'] = $tracking; - } - } - } - if($typ === 'rechnung') { - $auftragsdaten = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id = '".$elemente[0]['auftragid']."' LIMIT 1"); - if($auftragsdaten) - { - $elemente[0]['tatsaechlicheslieferdatum'] = $auftragsdaten[0]['tatsaechlicheslieferdatum']; - $elemente[0]['lieferdatum'] = $auftragsdaten[0]['lieferdatum']; - $elemente[0]['lieferdatumkw'] = $auftragsdaten[0]['lieferdatumkw']; - $elemente[0]['liefername'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['liefername']:$auftragsdaten[0]['name']; - $elemente[0]['lieferstrasse'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['liefername']:$auftragsdaten[0]['strasse']; - $elemente[0]['lieferadresszusatz'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferadresszusatz']:$auftragsdaten[0]['adresszusatz']; - $elemente[0]['lieferansprechpartner'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferansprechpartner']:$auftragsdaten[0]['ansprechpartner']; - $elemente[0]['lieferabteilung'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferabteilung']:$auftragsdaten[0]['abteilung']; - $elemente[0]['lieferunterabteilung'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferunterabteilung']:$auftragsdaten[0]['unterabteilung']; - $elemente[0]['lieferplz'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferplz']:$auftragsdaten[0]['plz']; - $elemente[0]['lieferort'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferort']:$auftragsdaten[0]['ort']; - $elemente[0]['lieferland'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferland']:$auftragsdaten[0]['land']; - $elemente[0]['lieferbundesstaat'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferbundesstaat']:$auftragsdaten[0]['bundesstaat']; - } - $tracking = (string)$this->app->DB->Select("SELECT tracking FROM versand WHERE rechnung = '".$elemente[0]['id']."' AND tracking <> '' AND rechnung <> 0 ORDER by id DESC LIMIT 1"); - if($tracking !== '')$elemente[0]['tracking'] = $tracking; - - if($elemente[0]['lieferschein'] > 0){ - $lieferscheindaten = $this->app->DB->SelectArr("SELECT * FROM lieferschein WHERE id = '".$elemente[0]['lieferschein']."' LIMIT 1"); - if($lieferscheindaten) - { - $elemente[0]['liefername'] = $lieferscheindaten[0]['name']; - $elemente[0]['lieferstrasse'] = $lieferscheindaten[0]['strasse']; - $elemente[0]['lieferadresszusatz'] = $lieferscheindaten[0]['adresszusatz']; - $elemente[0]['lieferansprechpartner'] = $lieferscheindaten[0]['ansprechpartner']; - $elemente[0]['lieferabteilung'] = $lieferscheindaten[0]['abteilung']; - $elemente[0]['lieferunterabteilung'] = $lieferscheindaten[0]['unterabteilung']; - $elemente[0]['lieferplz'] = $lieferscheindaten[0]['plz']; - $elemente[0]['lieferort'] = $lieferscheindaten[0]['ort']; - $elemente[0]['lieferland'] = $lieferscheindaten[0]['land']; - $elemente[0]['lieferbundesstaat'] = $lieferscheindaten[0]['bundesstaat']; - $elemente[0]['lieferdatum'] = $lieferscheindaten[0]['datum']; - $elemente[0]['lieferschein'] = $lieferscheindaten[0]['belegnr']; - $elemente[0]['gln_lieferadresse'] = $lieferscheindaten[0]['gln']; - } - } - } - $lieferid = 0; - if($typ !== 'auftrag') - { - $lieferid = $this->app->DB->Select("SELECT lieferid FROM auftrag WHERE id = '".$elemente[0]['auftragid']."' LIMIT 1"); - }else{ - $lieferid = $auftragsdaten[0]['lieferid']; - } - if($lieferid && $elemente[0]['gln_lieferadresse']=="") - { - $gln_lieferadresse = $this->app->DB->Select("SELECT gln FROM lieferadressen WHERE id = '$lieferid' LIMIT 1"); - if($gln_lieferadresse)$elemente[0]['gln_lieferadresse'] = $gln_lieferadresse; - } - - $rabatt = 0; - $gebuehr = 0; - $summe = 0; - $summeR = 0; - $summeV = 0; - $totalR = 0; - $totalV = 0; - $elemente_positionen = $typ === 'verbindlichkeit' - ?null: - $this->app->DB->SelectArr( - "SELECT t.*, m.id_ext, art.ean, art.gewicht,art.herstellernummer, art.altersfreigabe, art.lagerartikel " - .($typ === 'bestellung'?(" ,art.nummer "):'')." - FROM `$typposition` AS `t` - LEFT JOIN `artikel` AS `art` ON t.artikel = art.id - LEFT JOIN `api_mapping` AS `m` ON m.tabelle = '$typposition' AND m.id_int = t.id - WHERE t.$typ = '".($elemente[0]['id'])."' " - ); - if($elemente_positionen) - { - if(isset($elemente_positionen[0]['preis'])) - { - foreach($elemente_positionen as $key => $value) - { - if($typ === 'bestellung' && $value['bestellnummer'] == '')$elemente_positionen[$key]['bestellnummer'] = $value['nummer']; - if($value['umsatzsteuer'] !== "ermaessigt") $value['umsatzsteuer'] = "normal"; - $netto_gesamt = $value['menge']*($value['preis']-($value['preis']/100*$value['rabatt'])); - $summe = $summe + $netto_gesamt; - - if(is_null($value['steuersatz']) || $value['steuersatz'] < 0) { - if ($value['umsatzsteuer'] == "" || $value['umsatzsteuer'] === "normal") { - $summeV = $summeV + (($netto_gesamt / 100) * $this->app->erp->GetSteuersatzNormal(false, $id, "rechnung")); - $totalV = $totalV + $netto_gesamt; - } elseif ($value['umsatzsteuer'] === 'befreit') { - - } else { - $summeR = $summeR + (($netto_gesamt / 100) * $this->app->erp->GetSteuersatzErmaessigt(false, $id, "rechnung")); - $totalR = $totalR + $netto_gesamt; - } - } - - if($value['preis'] < -0.0001) - { - $rabatt -= $netto_gesamt; - }else{ - $gebuehr_artikel = $this->app->DB->Select("SELECT gebuehr FROM artikel WHERE id = '".$value['artikel']."' LIMIT 1"); - if($gebuehr_artikel){ - $gebuehr += $netto_gesamt; - } - } - } - if($rabatt) - { - $elemente[0]['rabatt'] = round($rabatt,2); - }else $elemente[0]['rabatt'] = 0; - if($gebuehr) - { - $elemente[0]['gebuehr'] = round($gebuehr,2); - }else $elemente[0]['gebuehr'] = 0; - if($this->app->erp->RechnungMitUmsatzeuer($id)) - { - $elemente[0]['ust'] = round($summeR+$summeV,2); - $elemente[0]['ust_ermaessigt'] = round($summeR,2); - $elemente[0]['ust_normal'] = round($summeV,2); - - }else { - $elemente[0]['ust'] = 0; - } - } - } - if(isset($parameter['anhang_base64']) && $parameter['anhang_base64'] == 1) - { - $anhaenge = $this->app->DB->SelectArr("SELECT DISTINCT s.datei FROM - datei d INNER JOIN datei_stichwoerter s ON d.id=s.datei INNER JOIN datei_version v ON v.datei=d.id WHERE s.objekt LIKE '$typ' AND s.parameter = '$id'"); - if($anhaenge) - { - $elemente[0]['anhaenge'] = array(); - foreach($anhaenge as $v) - { - $datei = $this->app->erp->GetDatei($v['datei']); - if($datei != '') - { - $elemente[0]['anhaenge']['anhang'][] = array('datei'=>base64_encode($datei), 'name'=>$this->app->erp->GetDateiName($v['datei'])); - } - unset($datei); - } - } - }elseif(isset($parameter['anhaenge'])) - { - if(is_array($parameter['anhaenge']) && count($parameter['anhaenge']) > 0) - { - foreach($parameter['anhaenge'] as $v) - { - $elemente[0]['anhaenge']['anhang'][] = $v; - } - } - } - $this->AddToXMLObj($xml, $typ,$typ.'_list', $elemente, $n, $erg); - if($elemente_positionen) - { - $this->AddToXMLObj($xml, $typposition,$typposition.'_list', $elemente_positionen, $erg, $erg2); - } - } - } - elseif($typ === 'versand') { - $elemente = $this->app->DB->SelectArr("SELECT t.*, m.id_ext FROM $typ t LEFT JOIN api_mapping m ON m.api = '".$this->api_id."' AND m.tabelle = '$typ' AND m.id_int = t.id WHERE t.id = '".($id)."' LIMIT 1"); - if($elemente) { - $auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '".$elemente[0]['lieferschein']."' LIMIT 1"); - if($auftragid) { - $sprache = $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id = '$auftragid'"); - if($sprache != ''){ - $elemente[0]['tracking_sprache'] = $sprache; - } - $auftragextid = $this->app->DB->Select("SELECT id_ext FROM api_mapping m WHERE m.tabelle = 'auftrag' AND m.id_int = '".$auftragid."' AND api = '".$this->api_id."'"); - if($auftragextid){ - $elemente[0]['auftragextid'] = $auftragextid; - } - } - - $this->AddToXMLObj($xml, 'lieferschein','lieferschein_list', $elemente, $n, $erg); - } - } - elseif($typ === 'receiptdocumentqs') { - $typ = 'receiptdocument'; - $typposition = 'receiptdocument_position'; - $elemente = $this->app->DB->SelectArr( - "SELECT t.*, m.id_ext - FROM receiptdocument t - INNER JOIN `paketannahme` AS parc ON t.parcel_receipt_id = parc.id - LEFT JOIN api_mapping m ON m.api = '".$this->api_id."' AND m.tabelle = 'receiptdocument' AND m.id_int = t.id - WHERE t.id = '".($id)."' LIMIT 1"); - - if($elemente) { - $this->AddToXMLObj($xml, $typ,$typ.'_list', $elemente, $n, $erg); - $elemente_positionen = $this->app->DB->SelectArr( - "SELECT t.*, m.id_ext, art.ean, art.gewicht,art.herstellernummer, art.altersfreigabe, - art.lagerartikel, b.belegnr - FROM receiptdocument_position t - INNER JOIN receiptdocument AS r ON t.receiptdocument_id = r.id - INNER JOIN `paketannahme` AS parc ON r.parcel_receipt_id = parc.id - INNER JOIN `paketdistribution` AS pd ON parc.id = pd.paketannahme - INNER JOIN bestellung_position AS bp ON pd.bestellung_position = bp.id - INNER JOIN bestellung AS b ON bp.bestellung = b.id - LEFT JOIN artikel art ON t.article_id = art.id - LEFT JOIN api_mapping m ON m.tabelle = 'receiptdocument_position' AND m.id_int = t.id - WHERE t.receiptdocument_id = '".($elemente[0]['id'])."' "); - if($elemente_positionen) { - $this->AddToXMLObj($xml, $typposition,$typposition.'_list', $elemente_positionen, $erg, $erg2); - } - } - } - } - - function ParseXML($dateiname, $api = 0, $uebertragung = 0, $isfile = true) - { - $this->lagerzahlen = null; - $this->bestBeforeBatchArticleStock = []; - $api = (int)$api; - $uebertragung = (int)$uebertragung; - if(!$api && !$uebertragung){ - return false; - } - if(!$api){ - $api = $this->app->DB->Select("SELECT api FROM uebertragungen_account WHERE id = '$uebertragung' LIMIT 1"); - } - //if(!$api || !$this->app->DB->Select("SELECT id FROM uebertragungen_account WHERE id = '$uebertragung' AND aktiv = 1 AND typ = 'lokal' LIMIT 1"))return false; - //if(!$api)return false; - $this->api_id = $api; - $xml = $this->LoadFromXML($dateiname, $isfile); - if(!$xml) - { - if($uebertragung) - { - $obj = $this->app->erp->LoadModul('uebertragungen'); - if($obj) - { - $obj->datei_id = $this->datei_id; - if(!is_file($dateiname)) - { - $obj->AddUbertragungMonitorLog($uebertragung, $this->datei_id, 0, 'download_error','Datei konnte nicht heruntergeladen werden'); - }elseif('' === (string)file_get_contents($dateiname)) - { - $obj->AddUbertragungMonitorLog($uebertragung, $this->datei_id, 0, 'file_empty','Datei ist leer'); - }else{ - $obj->AddUbertragungMonitorLog($uebertragung, $this->datei_id, 0, 'xml_parseerror','XML konnte nicht geparsed werden'); - } - } - } - - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragung','datei','".$this->app->DB->real_escape_string($dateiname)."','xml_fehler','XML konnte nicht gelesen werden')"); - return false; - } - - if(!isset($xml->xml) && get_class($xml) !== 'stdClass') { - return false; - } - - if((get_class($xml) === 'stdClass' && (!empty($xml)?count($xml):0) > 0) || (isset($xml->xml) && (!empty($xml->xml)?count($xml->xml):0) > 0)) { - foreach($xml as $key0 => $value0) { - if($key0 === 'status') { - $status = &$value0; - break; - } - } - $ok = true; - if(isset($status)){ - if(isset($status->messageCode) && $status->messageCode != 1) { - $ok = false; - } - } - - foreach($xml as $key0 => $value0) { - if($key0 === 'xml'){ - $xml_inhalt = &$value0; - break; - } - } - - $typen = $this->getTabellen(); - foreach($typen as $v){ - $typen_list[] = $v.'_list'; - } - $belege = $this->getBelege(); - foreach($belege as $v){ - $belege_list[] = $v.'_list'; - } - if(isset($xml_inhalt)){ - foreach($xml_inhalt as $key => $value) { - if(in_array($key,$belege) || in_array($key,$typen)) { - $this->ParseTeilXML($key, $value, $uebertragung); - } - if(in_array($key,$belege_list) || in_array($key,$typen_list)){ - foreach($value as $key2 => $value2) { - if(!in_array($key2,$belege) && !in_array($key2,$typen)) { - continue; - } - $this->ParseTeilXML($key2, $value2, $uebertragung); - if(empty($this->app->User) || !method_exists($this->app->User,'GetID') || !$this->app->User->GetID()) { - $this->app->DB->Update( - "UPDATE `prozessstarter` - SET `letzteausfuerhung`=DATE_ADD(NOW(), INTERVAL 2 MINUTE), `mutex` = 1,`mutexcounter`=0 - WHERE `parameter` = 'api_uebertragungen'" - ); - } - } - } - if(empty($this->app->User) || !method_exists($this->app->User,'GetID') || !$this->app->User->GetID()) { - $this->app->DB->Update( - "UPDATE `prozessstarter` - SET `letzteausfuerhung`=DATE_ADD(NOW(), INTERVAL 2 MINUTE), `mutex` = 1,`mutexcounter`=0 - WHERE `parameter` = 'api_uebertragungen'" - ); - } - } - } - } - $this->lagerzahlen = null; - if((int)$uebertragung <= 0 || empty($this->bestBeforeBatchArticleStock)) { - $this->bestBeforeBatchArticleStock = []; - - return true; - } - $storageMethod = (string)$this->app->DB->Select( - "SELECT `storage_import_method` FROM `uebertragungen_account` WHERE `id` = {$uebertragung}" - ); - if($storageMethod === 'overwrite'){ - $this->updateStockByBestBeforeBatch(true); - } - if($storageMethod === 'overwritewithoutdelete'){ - $this->updateStockByBestBeforeBatch(false); - } - $this->bestBeforeBatchArticleStock = []; - - return true; - } - - /** - * @param int $articleId - * @param int $storageLocationId - * @param bool $isBestBefore - * @param bool $isBatch - */ - public function removeBestBeforeBatchesNotExistsInXML( - int $articleId, - int $storageLocationId, - bool $isBestBefore, - bool $isBatch - ): void - { - if(!$isBatch && !$isBestBefore) { - return; - } - if($articleId <= 0 || $storageLocationId <= 0) { - return; - } - if(empty($this->bestBeforeBatchArticleStock[$articleId])) { - return; - } - if(!isset($this->bestBeforeBatchArticleStock[$articleId][$storageLocationId])) { - return; - } - if($isBestBefore) { - $bestBefores = []; - foreach($this->bestBeforeBatchArticleStock[$articleId][$storageLocationId]['entries'] as $entry) { - if(!empty($entry['bestbefore'])) { - $bestBefore = $entry['bestbefore']; - if(strpos($bestBefore, '.') !== false) { - $bestBefore = $this->app->String->Convert(substr($bestBefore,0,10), '%1.%2.%3', '%3-%2-%1'); - } - if($isBatch) { - if(!isset($bestBefores[$bestBefore][(string)$entry['batch']])) { - $bestBefores[$bestBefore][(string)$entry['batch']] = 0; - } - $bestBefores[$bestBefore][(string)$entry['batch']] += $entry['quantity']; - } - else { - if(!isset($bestBefores[$bestBefore])) { - $bestBefores[$bestBefore] = 0; - } - $bestBefores[$bestBefore] += (float)$entry['quantity']; - } - } - } - - if($isBatch) { - $bestBeforeStocks = $this->app->DB->SelectArr( - "SELECT `mhddatum`, `charge`, `menge`, `id` - FROM `lager_mindesthaltbarkeitsdatum` - WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationId} - ORDER BY `mhddatum`, `charge`, `menge`" - ); - } - else { - $bestBeforeStocks = $this->app->DB->SelectArr( - "SELECT `mhddatum`, `menge`, `id` - FROM `lager_mindesthaltbarkeitsdatum` - WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationId} - ORDER BY `mhddatum`, `charge`, `menge`" - ); - } - if(empty($bestBeforeStocks)) { - return; - } - - foreach($bestBeforeStocks as $bestBeforeStock) { - if($bestBeforeStock['menge'] <= 0) { - $this->app->DB->Delete("DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = {$bestBeforeStock['id']}"); - continue; - } - if(!isset($bestBefores[$bestBeforeStock['mhddatum']])) { - $this->app->DB->Delete("DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = {$bestBeforeStock['id']}"); - $this->app->erp->MHDLog( - $articleId, $storageLocationId, 0, $bestBeforeStock['mhd'], $bestBeforeStock['menge'], 'API Korrektur' - ); - if($isBatch) { - $this->app->erp->ChargeAuslagernLog( - $articleId, $storageLocationId, $bestBeforeStock['charge'], $bestBeforeStock['menge'], 'API Korrektur' - ); - } - continue; - } - if($isBatch && !isset($bestBefores[$bestBeforeStock['mhddatum']][$bestBeforeStock['charge']])) { - $this->app->DB->Delete("DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = {$bestBeforeStock['id']}"); - $this->app->erp->MHDLog( - $articleId, $storageLocationId, 0, $bestBeforeStock['mhd'], $bestBeforeStock['menge'], 'API Korrektur' - ); - $this->app->erp->ChargeAuslagernLog( - $articleId, $storageLocationId, $bestBeforeStock['charge'], $bestBeforeStock['menge'], 'API Korrektur' - ); - continue; - } - } - } - elseif($isBatch) { - $batches = []; - foreach($this->bestBeforeBatchArticleStock[$articleId][$storageLocationId]['entries'] as $entry) { - $batch = $entry['batch']; - if(!isset($batches[$batch])) { - $batches[$batch] = 0; - } - $batches[$batch] += (float)$entry['quantity']; - } - $batchStocks = $this->app->DB->SelectArr( - "SELECT `charge`, `menge`, `id` - FROM `lager_charge` - WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationId} - ORDER BY `charge`, `menge`" - ); - if(empty($batchStocks)) { - return; - } - foreach($batchStocks as $batchStock) { - if($batchStock['menge'] <= 0) { - $this->app->DB->Delete("DELETE FROM `lager_charge` WHERE `id` = {$batchStock['id']}"); - continue; - } - if(!isset($batches[$batchStock['charge']])) { - $this->app->DB->Delete("DELETE FROM `lager_charge` WHERE `id` = {$batchStock['id']}"); - $this->app->erp->Chargenlog( - $articleId, $storageLocationId, 0, $batchStock['charge'], $batchStock['menge'], 'API Korrektur' - ); - } - } - } - } - - /** - * @param bool $deleteOtherStock - */ - public function updateStockByBestBeforeBatch(bool $deleteOtherStock = true): void - { - if(empty($this->bestBeforeBatchArticleStock)){ - return; - } - foreach ($this->bestBeforeBatchArticleStock as $articleId => $stocks) { - if(empty($articleId) || empty($stocks)){ - continue; - } - $article = $this->app->DB->SelectRow( - "SELECT `projekt`, `chargenverwaltung`, `mindesthaltbarkeitsdatum`, `seriennummern` - FROM `artikel` WHERE `id` = {$articleId} LIMIT 1" - ); - if(empty($article)){ - continue; - } - $projectId = $article['projekt']; - foreach ($stocks as $storageLocationIndex => $stockEntry) { - if(empty($storageLocationIndex)){ - continue; - } - if($deleteOtherStock){ - $this->removeBestBeforeBatchesNotExistsInXML( - (int)$articleId, - (int)$storageLocationIndex, - $article['mindesthaltbarkeitsdatum'] > 0, - $article['chargenverwaltung'] > 0 - ); - } - - if(!empty($article['mindesthaltbarkeitsdatum'])){ - $stock = (float)$this->app->DB->Select( - "SELECT SUM(`menge`) - FROM `lager_mindesthaltbarkeitsdatum` - WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationIndex} AND `menge` > 0" - ); - }elseif(!empty($article['chargenverwaltung'])){ - $stock = (float)$this->app->DB->Select( - "SELECT SUM(`menge`) - FROM `lager_charge` - WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationIndex} AND `menge` > 0" - ); - }else{ - continue; - } - $inStock = (float)$this->app->erp->ArtikelImLagerPlatz($articleId, $storageLocationIndex); - if(round($inStock, 4) === round($stock, 4)){ - continue; - } - if($inStock < $stock){ - $this->app->erp->LagerEinlagern( - $articleId, - $stock - $inStock, - $storageLocationIndex, - $projectId, - 'API Korrektur' - ); - continue; - } - $this->app->erp->LagerAuslagernRegal( - $articleId, $storageLocationIndex, $inStock - $stock, $projectId, 'API Korrektur' - ); - } - } - } - - /** - * @param string $tabelle - * @param int $id_int - * @param string $id_ext - * @param int $api - * - * @return bool - */ - public function AddMapping($tabelle, $id_int, $id_ext, $api = 0) - { - if(!$api){ - $api = $this->api_id; - } - $api = (int)$api; - if(!$api){ - return false; - } - $checkmapping = $this->app->DB->SelectArr("SELECT id, id_ext FROM api_mapping WHERE api = '$api' AND tabelle = '$tabelle' AND id_int = '$id_int' LIMIT 1"); - if($checkmapping) { - if($checkmapping[0]['id_ext'] == '') { - $this->app->DB->Update("UPDATE api_mapping SET id_ext = '".$this->app->DB->real_escape_string($id_ext)."' WHERE id = '".$checkmapping[0]['id']."' LIMIT 1"); - return true; - } - } - else{ - $this->app->DB->Insert("INSERT INTO api_mapping (id_int, tabelle, id_ext, api) VALUES ('$id_int','$tabelle','".$this->app->DB->real_escape_string($id_ext)."','$api')"); - return true; - } - - return false; - } - - function UpdateMappingXML($typ, &$xml) - { - $typen = $this->getTabellen(); - $belege = $this->getBelege(); - $is_beleg = in_array($typ, $belege); - $is_typ = false; - if(!$is_beleg){ - $is_typ = in_array($typ, $typen); - } - if(!$is_typ && !$is_beleg) { - return false; - } - - if(isset($xml->id_ext)) { - $id_ext = (string)$xml->id_ext; - if($id_ext != '') { - $id = 0; - if(isset($xml->id)){ - $id = (int)$xml->id; - } - if($id > 0) { - $this->AddMapping($typ, $id, $id_ext); - } - } - } - if(!$is_beleg) { - return true; - } - - if(!is_array($xml) && !is_object($xml)) { - return true; - } - if((!empty($xml)?count($xml):0) === 0) { - return true; - } - - foreach($xml as $key => $value) { - if($key == $typ.'_position_list'){ - if((is_array($value) || is_object($value)) && (!empty($value)?count($value):0) > 0) { - foreach($value as $key2 => $value2) { - if($key2 === $typ.'_position' && isset($value2->id_ext)) { - $id_ext2 = (string)$value2->id_ext; - if($id_ext2 != '') { - $id2 = 0; - if(isset($value2->id)){ - $id2 = (int)$value2->id; - } - if($id2 > 0) { - $this->AddMapping($typ.'_position', $id2, $id_ext2); - } - } - } - } - } - } - elseif($key === $typ.'_position' && isset($value->id_ext)) { - $id_ext2 = (string)$value->id_ext; - if($id_ext2 != '') { - $id2 = 0; - if(isset($value->id)) { - $id2 = (int)$value->id; - } - if($id2 > 0) { - $this->AddMapping($typ.'_position', $id2, $id_ext2); - } - } - } - } - - return true; - } - - public function GetIDFromFeld($typ, &$xml) - { - if(empty($typ)){ - return false; - } - - if(!is_object($xml) && !is_array($xml)) { - return false; - } - - if((!empty($xml)?count($xml):0) === 0) { - return false; - } - $id = 0; - - $id_ext = ''; - if(isset($xml->id_ext)){ - $id_ext = (string)$xml->id_ext; - } - if($id_ext != '') { - $id = (int)$this->app->DB->Select( - sprintf( - "SELECT id_int - FROM api_mapping - WHERE api = %d AND api != 0 AND tabelle = '%s' AND id_ext = '%s' AND id_int > 0 - LIMIT 1", - $this->api_id, $typ, $this->app->DB->real_escape_string($id_ext) - ) - ); - if($id) { - return $id; - } - } - if(isset($xml->id) && $typ !== 'artikel' && $typ !== 'auftrag' && $typ !== 'bestellung' && $typ !== 'versand'){ - if(in_array($typ, ['lieferschein', 'retoure','rechnung','gutschrift'])) { - $id = (int)$this->app->DB->Select(sprintf('SELECT `id` FROM `%s` WHERE `id` = %d LIMIT 1', $typ, (int)$xml->id)); - } - else{ - $id = (int)$xml->id; - } - } - if($id){ - return $id; - } - $projekt = $this->app->DB->Select( - sprintf( - 'SELECT projekt FROM api_account WHERE id = %d AND id != 0 LIMIT 1', - $this->api_id - ) - ); - $eigenernummernkreis = false; - if($projekt) { - $eigenernummernkreis = $this->app->DB->Select( - sprintf( - 'SELECT eigenernummernkreis FROM projekt WHERE id = %d LIMIT 1', - $projekt - ) - ); - } - switch($typ) { - case 'artikel': - //nummer - if(!empty($xml->nummer) && $xml->nummer != '') { - $nummer = trim((string)$xml->nummer); - if($nummer != '') { - if($eigenernummernkreis) { - $id = $this->app->DB->Select( - sprintf( - "SELECT id - FROM artikel - WHERE nummer <> 'DEL' AND nummer = '%s' AND nummer <> '' AND projekt = %d AND geloescht <> 1 - LIMIT 1", - $this->app->DB->real_escape_string($nummer), $projekt - ) - ); - } - else { - $id = $this->app->DB->Select( - sprintf( - "SELECT id - FROM artikel - WHERE nummer <> 'DEL' AND nummer = '%s' AND nummer <> '' AND geloescht <> 1 - LIMIT 1", - $this->app->DB->real_escape_string($nummer) - ) - ); - } - if($id) { - return $id; - } - } - } - - //ean - if(!empty($xml->ean) && $xml->ean != '') { - $ean = trim((string)$xml->ean); - if($ean != '') { - if($eigenernummernkreis) { - $id = $this->app->DB->Select( - sprintf( - "SELECT id - FROM artikel - WHERE nummer <> 'DEL' AND ean = '%s' AND projekt = %d AND geloescht <> 1 AND ean <> '' - ORDER BY intern_gesperrt - LIMIT 1", - $this->app->DB->real_escape_string($ean), $projekt - ) - ); - } - else { - $id = $this->app->DB->Select( - sprintf( - "SELECT id - FROM artikel - WHERE nummer <> 'DEL' AND ean = '%s' AND geloescht <> 1 AND ean <> '' - ORDER BY intern_gesperrt - LIMIT 1", - $this->app->DB->real_escape_string($ean) - ) - ); - } - if($id) { - return $id; - } - } - } - //herstellernummer - if(isset($xml->herstellernummer) && $xml->herstellernummer != '') { - $herstellernummer = trim((string)$xml->herstellernummer); - if($herstellernummer != '') { - if($eigenernummernkreis) { - $id = $this->app->DB->Select( - sprintf( - "SELECT id - FROM artikel - WHERE nummer <> 'DEL' AND herstellernummer = '%s' AND herstellernummer <> '' - AND projekt = %d AND geloescht <> 1 - ORDER BY intern_gesperrt - LIMIT 1", - $this->app->DB->real_escape_string($herstellernummer), $projekt - ) - ); - } - else{ - $id = $this->app->DB->Select( - sprintf( - "SELECT id - FROM artikel - WHERE nummer <> 'DEL' AND herstellernummer = '%s' AND herstellernummer <> '' - AND geloescht <> 1 - ORDER BY intern_gesperrt - LIMIT 1", - $this->app->DB->real_escape_string($herstellernummer) - ) - ); - } - if($id) { - return $id; - } - } - } - - if(!empty($this->uebertragung_account) && (!empty($xml->bestellnummer) || !empty($xml->nummer))) { - if( - $lieferant = $this->app->DB->Select( - 'SELECT adresselieferant FROM uebertragungen_account - WHERE lieferantenbestellnummer = 1 AND - id = '.$this->uebertragung_account - ) - ) { - $bestellnummer = trim(!empty($xml->bestellnummer)?(string)$xml->bestellnummer:(string)$xml->nummer); - $id = $this->app->DB->Select( - sprintf( - 'SELECT art.id - FROM einkaufspreise AS ek - INNER JOIN artikel AS art ON ek.artikel = art.id - WHERE ek.bestellnummer = \'%s\' AND ek.bestellnummer <> \'\' AND ek.adresse = %d AND - ( - IFNULL(ek.gueltig_bis,\'0000-00-00\') = \'0000-00-00\' OR - ek.gueltig_bis >= CURDATE() - ) - LIMIT 1', - $this->app->DB->real_escape_string($bestellnummer),$lieferant - ) - ); - if($id > 0) { - return $id; - } - } - } - break; - case 'lieferschein': - case 'retoure': - case 'rechnung': - case 'auftrag': - case 'gutschrift': - case 'angebot': - if(isset($xml->belegnr) && (string)$xml->belegnr != ''){ - $id = $this->app->DB->Select("SELECT id FROM $typ WHERE belegnr = '".$this->app->DB->real_escape_string((string)$xml->belegnr)."' LIMIT 1"); - } - if(!$id && ($typ === 'lieferschein' || $typ === 'retoure')) - { - if(!empty($xml->auftrag) && (string)$xml->auftrag != '') { - $auftragid = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr = '".$this->app->DB->real_escape_string((string)$xml->auftrag)."' LIMIT 1"); - if($auftragid) { - if($typ === 'lieferschein'){ - $id = $this->app->DB->Select("SELECT `id` FROM `lieferschein` WHERE `auftragid` = '$auftragid' AND `status` <> 'storniert' LIMIT 1"); - } - else { - $id = $this->app->DB->Select("SELECT `id` FROM `retoure` WHERE `auftragid` = '$auftragid' AND `status` <> 'storniert' LIMIT 1"); - } - } - } - } - if($id) { - return $id; - } - break; - case 'lieferschein_position': - case 'retoure_position': - case 'rechnung_position': - case 'auftrag_position': - case 'gutschrift_position': - case 'angebot_position': - $_ptyp = str_replace('_position','',$typ); - if(isset($xml->$_ptyp) && isset($xml->sort)) { - $id = $this->app->DB->Select("SELECT id FROM $typ WHERE $_ptyp = '".(int)$xml->$_ptyp."' AND sort = '".(int)$xml->sort."' AND $_ptyp != '0' AND sort != '0' LIMIT 1"); - if($id){ - return $id; - } - } - break; - case 'adresse': - if(isset($xml->kundennummer)) { - $kundennummer = (string)$xml->kundennummer; - if($kundennummer != '') { - if($eigenernummernkreis) { - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> '1' AND kundennummer = '".$this->app->DB->real_escape_string($kundennummer)."' AND projekt = '$projekt' LIMIT 1"); - } - else{ - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> '1' AND kundennummer = '".$this->app->DB->real_escape_string($kundennummer)."' LIMIT 1"); - } - if($id){ - return $id; - } - } - } - if(isset($xml->lieferantennummer)) { - $lieferantennummer = (string)$xml->lieferantennummer; - if($lieferantennummer != '') { - if($eigenernummernkreis) { - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> '1' AND lieferantennummer = '".$this->app->DB->real_escape_string($lieferantennummer)."' AND projekt = '$projekt' LIMIT 1"); - } - else{ - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> '1' AND lieferantennummer = '".$this->app->DB->real_escape_string($lieferantennummer)."' LIMIT 1"); - } - if($id){ - return $id; - } - } - } - break; - } - - return false; - } - - /** - * @param string $tabelle - * @param string $extid - * @param mixed $xml - * - * @return null|int - */ - public function GetFromExtID($tabelle, $extid, $xml = null) - { - if(!$this->uebertragung_account && !$this->api_id){ - return null; - } - if($xml && isset($xml->id) && isset($xml->belegnr) && isset($xml->name)) - { - $id = $this->app->DB->Select("SELECT id FROM $tabelle WHERE id = '".((int)$xml->id)."' AND belegnr = '".$this->app->DB->real_escape_string($xml->belegnr)."' AND name = '".$this->app->DB->real_escape_string($xml->name)."' LIMIT 1"); if($id){ - return $id; - } - } - return $this->app->DB->Select( - sprintf( - "SELECT id_int - FROM api_mapping - WHERE id_ext = '%s' AND tabelle = '%s' AND - ( - (uebertragung_account = %d AND uebertragung_account <> 0) OR - (api = %d AND uebertragung_account <> 0) - ) - ORDER BY %s DESC - LIMIT 1", - $this->app->DB->real_escape_string($extid), $tabelle,(int)$this->uebertragung_account, (int)$this->api_id, - ($this->uebertragung_account?' uebertragung_account ':' api ') - ) - ); - } - - /** - * @param string $tabelle - * @param int $id - * - * @return null|string - */ - public function GetExtIDFromIntID($tabelle, $id) - { - if(!$this->uebertragung_account && !$this->api_id){ - return null; - } - - return $this->app->DB->Select( - sprintf( - "SELECT id_ext - FROM api_mapping - WHERE id_int = %d AND tabelle = '%s' AND - ( - (uebertragung_account = %d AND uebertragung_account <> 0) AND - (api = %d AND uebertragung_account <> 0) - ) - ORDER BY %s DESC - LIMIT 1", - $id,$tabelle, $this->uebertragung_account, $this->api_id, - $this->uebertragung_account?' uebertragung_account ':' api ' - ) - ); - } - - /** - * @param string $tabelle - * @param int $intid - * @param string $extid - * - * @return bool - */ - public function SetExtIDMapping($tabelle, $intid, $extid) - { - if(!$this->uebertragung_account && !$this->api_id){ - return false; - } - $check = $this->GetFromExtID($tabelle, $extid); - if($check) { - return $check == $intid; - } - $this->app->DB->Insert( - sprintf( - "INSERT INTO `api_mapping` (`tabelle`, `id_ext`, `id_int`, `api`, `uebertragung_account`) - VALUES ('%s','%s',%d,%d,%d)", - $tabelle,$this->app->DB->real_escape_string($extid), $intid, $this->api_id, $this->uebertragung_account - ) - ); - return true; - } - - /** - * @param int $uebertragungen_account - * @param Uebertragungen $obj - * @param string $typ - * - * @return bool - */ - public function isAllowedToImport($uebertragungen_account, $obj, $typ) { - switch($typ) { - case 'auftrag': - case 'angebot': - if(!$this->app->DB->Select("SELECT auftrageingang FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")) - { - if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'notallowed' AND doctype = '$typ' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) LIMIT 1")){ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', ucfirst($typ).'-Eingang ist nicht aktiviert', '', '', '', $typ); - } - return false; - } - break; - case 'bestellung': - case 'produktion': - if(!$this->app->DB->Select("SELECT bestellungeingang FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")) - { - if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'notallowed' AND doctype = '$typ' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) LIMIT 1")){ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', ucfirst($typ).'-Eingang ist nicht aktiviert', '', '', '', $typ); - } - return false; - } - break; - case 'lieferschein': - if(!$this->app->DB->Select("SELECT trackingeingang FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")) - { - if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'notallowed' AND doctype = '$typ' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) LIMIT 1")){ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', 'Tracking-Eingang ist nicht aktiviert', '', '', '', $typ); - } - return false; - } - break; - case 'retoure': - if( - !$this->app->DB->Select( - sprintf( - 'SELECT `alldoctypes` FROM `uebertragungen_account` WHERE `id` = %d LIMIT 1', - $uebertragungen_account - ) - ) - ){ - if( - !$this->app->DB->Select( - sprintf( - "SELECT `id` - FROM `uebertragungen_monitor` - WHERE `uebertragungen_account` = %d - AND `datei` = %d AND `status` = 'notallowed' - AND `doctype` = '%s' - AND `zeitstempel` > DATE_SUB(now(), INTERVAL 1 HOUR) - LIMIT 1", - $uebertragungen_account, $this->datei_id, $typ - ) - ) - ){ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', ucfirst($typ).'-Eingang ist nicht aktiviert', '', '', '', $typ); - } - return false; - } - break; - } - - return true; - } - - /** - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - * @param int $id - */ - public function ParsePartXmlAricleWithId(&$xml, $uebertragungen_account, $obj, $id) - { - $artikelarr = ['id' => $id]; - $account = $this->app->DB->SelectRow( - sprintf( - 'SELECT updatearticles FROM uebertragungen_account WHERE id = %d LIMIT 1', - $uebertragungen_account - ) - ); - $updatearticles = !empty($account['updatearticles']); - if(!empty($xml->anlegen) && $updatearticles && !empty($xml->nummer) && !empty($xml->name_de)) { - if(!empty($this->app->stringcleaner)) { - $this->app->stringcleaner->XMLArray_clean($xml); - } - foreach($xml as $k => $v) { - if(empty($k) || $k === 'id' || $k === 'nummer' || is_numeric($k)) { - continue; - } - $vr = @reset($v); - if(is_numeric($vr) || is_string($vr)) { - $artikelarr[$k] = (string)$vr; - } - } - - //if(isset($xml->nummer))$artikelarr['nummer'] = (string)$xml->nummer; - if(isset($xml->ean))$artikelarr['ean'] = (string)$xml->ean; - if(isset($xml->herstellernummer))$artikelarr['herstellernummer'] = (string)$xml->herstellernummer; - if(isset($xml->name_de))$artikelarr['name_de'] = (string)$xml->name_de; - if(isset($xml->name_en))$artikelarr['name_en'] = (string)$xml->name_en; - if(isset($xml->anabregstext))$artikelarr['anabregstext'] = (string)$xml->anabregstext; - if(isset($xml->anabregstext_en))$artikelarr['anabregstext_en'] = (string)$xml->anabregstext_en; - if(isset($xml->uebersicht_de))$artikelarr['uebersicht_de'] = (string)$xml->uebersicht_de; - if(isset($xml->uebersicht_en))$artikelarr['uebersicht_en'] = (string)$xml->uebersicht_en; - if(isset($xml->kurztext_de))$artikelarr['kurztext_de'] = (string)$xml->kurztext_de; - if(isset($xml->kurztext_en))$artikelarr['kurztext_en'] = (string)$xml->kurztext_en; - if(isset($xml->lagerartikel))$artikelarr['lagerartikel'] = (string)$xml->lagerartikel; - - if(isset($xml->gewicht))$artikelarr['gewicht'] = (string)$xml->gewicht; - if(isset($xml->breite))$artikelarr['breite'] = (string)$xml->breite; - if(isset($xml->laenge))$artikelarr['laenge'] = (string)$xml->laenge; - if(isset($xml->hoehe))$artikelarr['hoehe'] = (string)$xml->hoehe; - - for($i = 1; $i <= 20; $i++) { - $name = 'freifeld'.$i; - if(isset($xml->$name)){ - $xml->$name = $this->app->Secure->CleanString($xml->$name, 'nohtml'); - $artikelarr[$name] = (string)$xml->$name; - } - } - $artikelid = $this->app->erp->InsertUpdateArtikel($artikelarr, true); - if($artikelid) { - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'artikel_ok', 'Artikel ' . (string)$xml->nummer . ' updated', '', '', '', 'artikel', $artikelid); - } - unset($artikelarr); - } - - if((isset($xml->lagerzahl) || isset($xml->mhdanzahl) || !empty($xml->mhd) || !empty($xml->charge)) && $this->app->DB->Select("SELECT lagerzahleneingang FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")) { - - $artArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT chargenverwaltung,seriennummern,mindesthaltbarkeitsdatum, lagerartikel FROM artikel WHERE id = %d', - $id - ) - ); - if(empty($artArr['lagerartikel'])) { - if($uebertragungen_account) { - $obj->AddUbertragungMonitorLog( - $uebertragungen_account, - $this->datei_id, - 0, - 'artikel_error', - 'Artikel ' . (string)$xml->nummer . ' ist kein Lagerartikel', - '', - '', - '', - 'artikel', - $id - ); - } - return; - } - if(!in_array((string)$artArr['seriennummern'], ['', 'keine', 'vomprodukt'])) { - if($uebertragungen_account) { - $obj->AddUbertragungMonitorLog( - $uebertragungen_account, - $this->datei_id, - 0, - 'artikel_error', - 'Artikel ' . (string)$xml->nummer . ' ist ein Seriennummern-Artikel', - '', - '', - '', - 'artikel', - $id - ); - } - return; - } - - $lagerzahl = isset($xml->lagerzahl)?str_replace(',','.',(string)$xml->lagerzahl):null; - $mhdanzahl = isset($xml->mhdanzahl)?str_replace(',','.',(string)$xml->mhdanzahl):null; - if(!empty($artArr['mindesthaltbarkeitsdatum']) && empty($xml->mhd) && ((float)$lagerzahl != 0 || (float)$mhdanzahl != 0)) { - if($uebertragungen_account) { - $obj->AddUbertragungMonitorLog( - $uebertragungen_account, - $this->datei_id, - 0, - 'artikel_error', - 'Artikel ' . (string)$xml->nummer . ': kein MHD angegeben', - '', - '', - '', - 'artikel', - $id - ); - } - return; - } - - if(empty($artArr['mindesthaltbarkeitsdatum']) && !empty($artArr['chargenverwaltung']) && empty($xml->charge) && (float)$lagerzahl != 0) { - if($uebertragungen_account) { - $obj->AddUbertragungMonitorLog( - $uebertragungen_account, - $this->datei_id, - 0, - 'artikel_error', - 'Artikel ' . (string)$xml->nummer . ': keine Charge angegeben', - '', - '', - '', - 'artikel', - $id - ); - } - return; - } - - //$lagerzahl = str_replace(',','.',isset($xml->lagerzahl)?(string)$xml->lagerzahl:$xml->mhdanzahl); - - $lager_platz_id = false; - $lagerplatz = false; - $lagerplatzignorieren = $this->app->DB->Select("SELECT lagerplatzignorieren FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); - - if(isset($xml->lager_platz) && !$lagerplatzignorieren) { - $lagerplatz = (string)$xml->lager_platz; - - $lagerplatz = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '".$this->app->DB->real_escape_string($lagerplatz)."' LIMIT 1"); - - $lager_platz_id = $lagerplatz; - if(!$lager_platz_id) { - $lagerplatz = $this->app->DB->Select("SELECT lager FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); - $lager_platz_id = $lagerplatz; - } - } - else { - if(!isset($xml->lager_platz)) { - $this->lagerzahlen[$uebertragungen_account][$id][isset($xml->lager_platz) && (string)$xml->lager_platz != ''?(string)$xml->lager_platz:'0'] = 0; - } - $lagerplatz = $this->app->DB->Select("SELECT lager FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); - $lager_platz_id = $lagerplatz; - } - $storageLocationIndex = (!$lagerplatzignorieren && isset($xml->lager_platz) && (string)$xml->lager_platz != '')?(string)$xml->lager_platz:'0'; - $storageLocationId = empty($lager_platz_id) ? 0 : (int)$lager_platz_id; - if(empty($this->lagerzahlen) - || empty($this->lagerzahlen[$uebertragungen_account]) - || empty($this->lagerzahlen[$uebertragungen_account][$id]) - || !isset($this->lagerzahlen[$uebertragungen_account][$id][(!$lagerplatzignorieren && isset($xml->lager_platz) && $xml->lager_platz != '')?(string)$xml->lager_platz:'0'])) { - $this->lagerzahlen[$uebertragungen_account][$id][(!$lagerplatzignorieren && isset($xml->lager_platz) && (string)$xml->lager_platz != '')?(string)$xml->lager_platz:'0'] = 0; - } - - if($lagerzahl !== null && round((float)str_replace(',','.',$lagerzahl),8) < 0) { - if($uebertragungen_account) { - $obj->AddUbertragungMonitorLog( - $uebertragungen_account, - $this->datei_id, - 0, - 'artikel_error', - 'Artikel ' . (string)$xml->nummer . ' Lagerzahl '.$lagerzahl.' kleiner als 0', - '', - '', - '', - 'artikel', - $id - ); - } - return; - } - if($lagerzahl !== null && $lagerzahl != '' - && (empty($artArr['chargenverwaltung']) || !isset($xml->charge)) - && (empty($artArr['mindesthaltbarkeitsdatum']) || !isset($xml->mhd)) - ) { - $lagerzahl = round((float)str_replace(',','.',$lagerzahl),8); - $this->lagerzahlen[$uebertragungen_account][$id][(!$lagerplatzignorieren && isset($xml->lager_platz) && (string)$xml->lager_platz != '')?(string)$xml->lager_platz:'0'] += $lagerzahl; - $lagerzahl = $this->lagerzahlen[$uebertragungen_account][$id][(!$lagerplatzignorieren && isset($xml->lager_platz) && (string)$xml->lager_platz != '')?(string)$xml->lager_platz:'0']; - if($lager_platz_id) { - $vorhanden = round((float)$this->app->DB->Select("SELECT IFNULL(sum(menge),0) FROM lager_platz_inhalt WHERE lager_platz = '$lager_platz_id' AND artikel = '$id'"),8); - } - else{ - $vorhanden = round((float)$this->app->erp->ArtikelAnzahlLager($id),8); - } - $projekt = (int)$this->app->DB->Select("SELECT projekt FROM artikel WHERE id = '$id' LIMIT 1"); - if(round($lagerzahl,8) > round($vorhanden,8)) { - - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$id' LIMIT 1"); - } - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id WHERE lpi.artikel = '$id' AND lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lpi.menge DESC LIMIT 1"); - } - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz lp WHERE lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lp.id ASC LIMIT 1"); - } - if($lagerplatz) { - $this->app->erp->LagerEinlagern($id,$lagerzahl - $vorhanden,$lagerplatz,$projekt,'API Korrektur',true); - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','artikel','$id','lagerzahl','$lagerzahl')"); - $this->lagerzahlenmonitor[$uebertragungen_account][$id] = $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', '', $lagerzahl, '', '', 'artikel', $id,(isset($this->lagerzahlenmonitor) && isset($this->lagerzahlenmonitor[$uebertragungen_account]) && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id]))?$this->lagerzahlenmonitor[$uebertragungen_account][$id]:0); - } - } - elseif(round($lagerzahl,8) < round($vorhanden,8)) { - $auslagern = $vorhanden - $lagerzahl; - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$id' LIMIT 1"); - } - if($lagerplatz) { - $bestand = round((float)$this->app->erp->ArtikelImLagerPlatz($id, $lagerplatz),8); - if($bestand >= $auslagern) { - $this->app->erp->LagerAuslagernRegal($id, $lagerplatz, $auslagern, $projekt,'API Korrektur',true ); - $auslagern = 0; - } - elseif($bestand > 0) { - $this->app->erp->LagerAuslagernRegal($id, $lagerplatz, $bestand, $projekt,'API Korrektur',true ); - $auslagern -= $bestand; - } - } - if($auslagern > 0 && !$lager_platz_id) { - $lagerplaetze = $this->app->DB->SelectArr("SELECT lp.id FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id WHERE lpi.artikel = '$id' AND lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lpi.menge DESC"); - if($lagerplaetze) { - foreach($lagerplaetze as $lagerplatz) { - $bestand = round((float)$this->app->erp->ArtikelImLagerPlatz($id, $lagerplatz['id']),8); - if($bestand >= $auslagern) { - $this->app->erp->LagerAuslagernRegal($id, $lagerplatz['id'], $auslagern, $projekt,'API Korrektur',true ); - $auslagern = 0; - } - elseif($bestand > 0) { - $this->app->erp->LagerAuslagernRegal($id, $lagerplatz['id'], $bestand, $projekt,'API Korrektur',true ); - $auslagern -= $bestand; - } - if($auslagern <= 0) { - break; - } - } - } - } - if($auslagern != $vorhanden - $lagerzahl) { - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','artikel','$id','lagerzahl','$lagerzahl')"); - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', '', $lagerzahl, '', '', 'artikel', $id); - } - } - } - $storageChanged = 0; - //MHD - if(!empty($artArr['mindesthaltbarkeitsdatum']) && isset($xml->mhd)) { - if(empty($this->bestBeforeBatchArticleStock[$id]) - || !isset($this->bestBeforeBatchArticleStock[$id][$storageLocationId]) - ) { - $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['stock'] = 0; - $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['entries'] = []; - } - - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$id' LIMIT 1"); - } - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id WHERE lpi.artikel = '$id' AND lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lpi.menge DESC LIMIT 1"); - } - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz lp WHERE lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lp.id ASC LIMIT 1"); - } - - if($lager_platz_id) { - $wawimhd = $this->app->DB->SelectArr( - "SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' AND lager_platz = '$lager_platz_id' order by mhddatum, menge desc" - ); - $chargenmhd = $this->app->DB->SelectArr( - "SELECT * FROM lager_charge WHERE artikel = '$id' AND lager_platz = '$lager_platz_id' order by charge, menge desc" - ); - } - else { - $wawimhd = null;//$this->app->DB->SelectArr("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' order by mhddatum"); - $chargenmhd = null;//$this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE artikel = '$id' order by charge, menge desc"); - if($wawimhd) { - $mhdohnelager = null;//$this->app->DB->SelectArr("SELECT mhddatum, sum(menge) as smenge FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' group by mhddatum order by mhddatum "); - } - if($chargenmhd) { - $chargenohnelager = null;//$this->app->DB->SelectArr("SELECT charge, sum(menge) as smenge FROM lager_charge WHERE artikel = '$id' group by charge order by charge "); - } - } - - $mhd = $xml->mhd; - if(!empty($mhd) && !is_string($mhd) && !is_numeric($mhd) && (!empty($mhd)?count($mhd):0) === 1 && empty($mhd->datum) - && empty($mhd->mhddatum) && empty($mhd->anzahl)) { - $mhd = reset($mhd); - } - if(isset($mhd->datum)) { - $mhddatum = json_decode(json_encode($mhd->datum), true); - } - elseif(isset($xml->mhddatum)) { - $mhddatum = json_decode(json_encode($xml->mhddatum), true); - if(is_string($mhddatum)) { - $mhddatum = [$mhddatum]; - } - } - elseif(is_string($mhd)) { - $mhddatum = [$mhd]; - } - $mhdanzahl = null; - $mhdcharge = null; - if(isset($mhd->anzahl)) { - $mhdanzahl = json_decode(json_encode($mhd->anzahl),true); - } - elseif(isset($xml->mhdanzahl) && is_string(json_decode(json_encode($xml->mhdanzahl),true))) { - $mhdanzahl = [json_decode(json_encode($xml->mhdanzahl),true)]; - } - elseif(isset($xml->mhdanzahl) && is_numeric((string)$xml->mhdanzahl)) { - $mhdanzahl = [(float)(string)$xml->mhdanzahl]; - } - elseif(isset($xml->lagerzahl) && is_numeric((string)$xml->lagerzahl)) { - $mhdanzahl = [(float)(string)$xml->lagerzahl]; - } - if(isset($mhd->charge)) { - $mhdcharge = json_decode(json_encode($mhd->charge),true); - } - elseif(isset($xml->charge) - && (is_string($xml->charge) || (!is_numeric($xml->charge) && (!empty($xml->charge)?count($xml->charge):0) === 1))) { - $mhdcharge = [(string)$xml->charge]; - } - - foreach($mhddatum as $kmhd => $m) { - $charge = ''; - $anzahl = 1; - if(isset($mhd->charge)) { - $charge = (string)$mhdcharge[$kmhd]; - } - elseif(isset($mhdcharge[$kmhd])) { - $charge = (string)$mhdcharge[$kmhd]; - } - if(isset($mhd->anzahl)) { - $anzahl = (int)$mhdanzahl[$kmhd]; - } - elseif(isset($mhdanzahl[$kmhd])) { - $anzahl = (int)$mhdanzahl[$kmhd]; - } - $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['stock'] += (float)$anzahl; - $datum = date('Y-m-d',strtotime( (string)$m)); - - $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['entries'][] = - [ - 'bestbefore' => $datum, 'batch' => $artArr['chargenverwaltung'] > 0 ? $charge : null, 'quantity' => $anzahl - ]; - - $chargenlager = null; - $found = false; - $foundcharge = false; - $lagerzahl = null; - if($wawimhd) { - if($lager_platz_id) { - $inBestBeforeStorage = 0.0; - $countBestBeforeEntries = 0; - foreach($wawimhd as $k => $v) { - if($v['mhddatum'] != $datum) { - continue; - } - if($artArr['chargenverwaltung'] > 0 && !empty($charge)){ - if((string)$charge !== (string)$v['charge']){ - continue; - } - } - $inBestBeforeStorage += (float)$v['menge']; - $countBestBeforeEntries++; - } - $toChange = round($anzahl - $inBestBeforeStorage,4); - if($inBestBeforeStorage > 0 && $toChange == 0) { - $found = true; - $foundcharge = true; - $anzahl = 0; - $inBestBeforeStorage = 0; - } - elseif($inBestBeforeStorage > 0 && round($inBestBeforeStorage, 4) != round($anzahl,4)){ - $toChange = round($anzahl - $inBestBeforeStorage,4); - foreach ($wawimhd as $k => $v) { - if($v['mhddatum'] == $datum){ - if($artArr['chargenverwaltung'] > 0 && !empty($charge)){ - if((string)$charge !== (string)$v['charge']){ - if((!empty($mhddatum)?count($mhddatum):0) === 1){ - unset($wawimhd[$k]); - } - continue; - } - } - $found = true; - $wawimhd[$k]['gefunden'] = true; - if($toChange < 0) { - if($v['menge'] <= -$toChange) { - $this->app->DB->Delete( - sprintf( - 'DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = %d', - $v['id'] - ) - ); - $this->app->erp->MHDLog( - $v['artikel'], $v['lager_platz'], 0, - $v['mhddatum'], $v['menge'], 'API Korrektur', '', 0, $v['charge'] - ); - $toChange += $v['menge']; - if(!empty($v['charge'])) { - if($this->app->erp->ChargeAuslagernLog( - $v['artikel'], $v['lager_platz'], $v['charge'], $v['menge'], 'API Korrektur' - )){ - $foundcharge = true; - } - } - $storageChanged -= $v['menge']; - continue; - } - if($v['menge'] > -$toChange) { - $this->app->DB->Update( - sprintf( - 'UPDATE `lager_mindesthaltbarkeitsdatum` SET `menge` = `menge` - %f WHERE `id` = %d', - -$toChange, $v['id'] - ) - ); - if(!empty($v['charge'])) { - if($this->app->erp->ChargeAuslagernLog( - $v['artikel'], $v['lager_platz'], $v['charge'], -$toChange, 'API Korrektur' - )) { - $foundcharge = true; - } - } - $storageChanged += $toChange; - $toChange = 0; - break; - } - } - - if($toChange > 0) { - $this->app->DB->Update( - sprintf( - 'UPDATE `lager_mindesthaltbarkeitsdatum` SET `menge` = `menge` + %f WHERE `id` = %d', - $toChange, $v['id'] - ) - ); - $this->app->erp->MHDLog( - $v['artikel'], $v['lager_platz'], 1, - $v['mhddatum'], $toChange, 'API Korrektur', '', 0, $v['charge'] - ); - if(!empty($v['charge'])){ - $this->app->erp->AddChargeLagerOhneBewegung( - $v['artikel'], $toChange, $v['lager_platz'], date('Y-m-d'), $v['charge'], 'API Korrektur' - ); - $foundcharge = true; - } - $storageChanged += $toChange; - $anzahl = 0; - $toChange = 0; - break; - } - } - } - } - /*if($chargenmhd && $charge) { - foreach($chargenmhd as $k => $v) { - if($v['charge'] == $charge) { - $foundcharge = true; - $chargenmhd[$k]['gefunden'] = true; - if($v['menge'] != $anzahl) { - $storageChanged += $v['menge'] - $anzahl; - $this->app->DB->Update( - "UPDATE lager_charge SET menge = '$anzahl' WHERE id = '".$v['id']."' LIMIT 1" - ); - - break; - } - } - } - }*/ - if(!$found && $anzahl > 0) { - $storageChanged += $anzahl; - $this->app->DB->Insert( - "INSERT INTO lager_mindesthaltbarkeitsdatum (artikel, datum, mhddatum, menge, lager_platz, charge) - values ('$id',now(),'$datum','$anzahl','$lager_platz_id','".$this->app->DB->real_escape_string($charge)."')" - ); - $this->app->erp->MHDLog($id, $lager_platz_id,1,$datum,$anzahl,'API Korrektur','',0,$charge); - } - if(!$foundcharge && $charge && $anzahl > 0) { - $this->app->DB->Insert( - "INSERT INTO lager_charge (artikel, datum, menge, lager_platz, charge) - values ('$id',now(),'$anzahl','$lager_platz_id','".$this->app->DB->real_escape_string($charge)."')" - ); - $this->app->erp->Chargenlog($id, $lager_platz_id,1,$charge,$anzahl,'API Korrektur','',0,$charge); - } - } - else { - if($mhdohnelager) { - foreach($mhdohnelager as $k => $v) { - if($v['mhddatum'] == $datum) { - $mhdohnelager[$k]['gefunden'] = true; - $found = true; - if($v['smenge'] < $anzahl) { - foreach($wawimhd as $k2 => $v2) { - if($v2['mhddatum'] == $datum) - { - $storageChanged += $anzahl - $v2['menge']; - $this->app->DB->Update( - "UPDATE lager_mindesthaltbarkeitsdatum - SET menge = $anzahl WHERE id = '".$v2['id']."' LIMIT 1" - ); - if($v2['menge'] < $anzahl) { - $this->app->erp->MHDLog( - $id, $v2['lager_platz'],1,$v2['mdhdatum'],abs($v2['menge'] < $anzahl),'API Korrektur','',0,$v2['charge'] - ); - } - elseif($anzahl < $v2['menge']) { - $this->app->erp->MHDLog( - $id, $v2['lager_platz'],0,$v2['mdhdatum'],abs($v2['menge'] < $anzahl),'API Korrektur','',0,$v2['charge'] - ); - } - if($charge) { - $hinzuf = $anzahl - $v['smenge']; - if(!isset($chargenlager[$v2['lager_platz'].'-'.$charge])) { - $chargenlager[$v2['lager_platz'].'-'.$charge] = 0; - } - $chargenlager[$v2['lager_platz'].'-'.$charge] += $hinzuf; - } - break; - } - } - } - elseif($v['smenge'] > $anzahl) { - $abzuziehen = $v['smenge'] - $anzahl; - foreach($wawimhd as $k2 => $v2) { - if($v2['menge'] > 0) { - if($abzuziehen > 0) { - if($abzuziehen >= $v2['menge']) { - $abzuziehen -= $v2['menge']; - $storageChanged -= $v2['menge']; - $this->app->DB->Delete( - "DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id = '".$v2['id']."' LIMIT 1" - ); - $this->app->erp->MHDLog( - $id, $v2['lager_platz'],0,$v2['mdhdatum'],$v2['menge'],'API Korrektur','',0,$v2['charge'] - ); - if(!isset($chargenlager[$v2['lager_platz'].'-'.$charge])) { - $chargenlager[$v2['lager_platz'].'-'.$charge] = 0; - } - $chargenlager[$v2['lager_platz'].'-'.$charge] -= $v2['menge']; - } - else { - $storageChanged -= $abzuziehen; - $this->app->DB->Update( - "UPDATE lager_mindesthaltbarkeitsdatum - SET menge = menge - $abzuziehen WHERE id = '".$v2['id']."' LIMIT 1" - ); - $this->app->erp->MHDLog($id, $v2['lager_platz'],0,$v2['mdhdatum'],$abzuziehen,'API Korrektur','',0,$v2['charge']); - if(!isset($chargenlager[$v2['lager_platz'].'-'.$charge])) { - $chargenlager[$v2['lager_platz'].'-'.$charge] = 0; - } - $chargenlager[$v2['lager_platz'].'-'.$charge] -= $abzuziehen; - $abzuziehen = 0; - break; - } - } - } - } - } - } - } - if(!$found && $anzahl > 0) { - $this->app->DB->Insert( - "INSERT INTO lager_mindesthaltbarkeitsdatum (artikel, datum, mhddatum, menge, lager_platz, charge) - values ('$id',now(),'$datum','$anzahl','$lager_platz_id','".$this->app->DB->real_escape_string($charge)."')"); - $this->app->erp->MHDLog($id, $lager_platz_id,1,$datum,$anzahl,'API Korrektur','',0,$charge); - if(!isset($chargenlager[$lager_platz_id.'-'.$charge])) { - $chargenlager[$lager_platz_id.'-'.$charge] = 0; - } - $chargenlager[$lager_platz_id.'-'.$charge] += $anzahl; - $storageChanged += $anzahl; - } - } - } - } - elseif($anzahl > 0) { - $this->app->DB->Insert( - "INSERT INTO lager_mindesthaltbarkeitsdatum (artikel, datum, mhddatum, menge, lager_platz, charge) - values ('$id',now(),'$datum','$anzahl','$lagerplatz','".$this->app->DB->real_escape_string($charge)."')" - ); - $this->app->erp->MHDLog($id, $lagerplatz,1,$datum,$anzahl,'API Korrektur','',0,$charge); - $storageChanged += $anzahl; - if(!isset($chargenlager[$lagerplatz.'-'.$charge])) { - $chargenlager[$lagerplatz.'-'.$charge] = 0; - } - $chargenlager[$lagerplatz.'-'.$charge] += $anzahl; - } - if(isset($chargenlager)) { - foreach($chargenlager as $kl => $vls) { - $vla = explode('-', $vls, 2); - $vl = $vla[0]; - $charge = ''; - if(isset($vla[1])) { - $charge = $vla[1]; - } - if($charge) { - if($vl < 0) { - if($chargenmhd) - { - $abzuziehen = -$vl; - foreach($chargenmhd as $vch) { - if($vch['lager_platz'] == $kl && $charge == $vch['charge']) { - if($vch['menge'] > $abzuziehen) { - $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $abzuziehen WHERE id = '".$vch['id']."' LIMIT 1"); - $this->app->erp->Chargenlog($id, $vch['lager_platz'],0,$vch['charge'], $abzuziehen,'API Korrektur'); - $abzuziehen = 0; - break; - } - if($vch['menge'] == $abzuziehen) { - $this->app->DB->Delete("DELETE FROM lager_charge id = '".$vch['id']."' LIMIT 1"); - $this->app->erp->Chargenlog($id, $vch['lager_platz'],0,$vch['charge'], $vch['menge'],'API Korrektur'); - break; - } - if($abzuziehen > 0) { - $this->app->DB->Delete("DELETE FROM lager_charge id = '".$vch['id']."' LIMIT 1"); - $this->app->erp->Chargenlog($id, $vch['lager_platz'],0,$vch['charge'], $vch['menge'],'API Korrektur'); - $abzuziehen -= $vch['menge']; - } - } - } - } - } - elseif($vl > 0) { - $hinzuf = $vl; - if($chargenmhd) { - foreach($chargenmhd as $vch) { - if($vch['lager_platz'] == $kl && $charge == $vch['charge']) { - $this->app->DB->Update( - "UPDATE lager_charge SET menge = menge + $vl WHERE id = '".$vch['id']."' LIMIT 1" - ); - $this->app->erp->Chargenlog($id, $vch['lager_platz'],1,$vch['charge'], $vl,'API Korrektur'); - $hinzuf = 0; - break; - } - } - } - if($hinzuf) { - $this->app->DB->Insert("INSERT INTO lager_charge (artikel, lager_platz, menge, charge) values ('$id','$kl','$hinzuf','$charge')"); - $this->app->erp->Chargenlog($id, $kl,1,$charge, $hinzuf,'API Korrektur'); - } - } - } - } - } - } - if(isset($wawimhd) && $lagerzahl !== null) { - if($lager_platz_id) { - foreach($wawimhd as $k => $v) { - if(!isset($v['gefunden'])) { - $storageChanged -= $v['menge']; - $this->app->DB->Delete( - "DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id = '".$v['id']."' LIMIT 1" - ); - $this->app->erp->MHDLog( - $v['artikel'],$v['lager_platz'],0, $v['mhddatum'], $v['menge'],'API Korrektur','',0,$v['charge'] - ); - if(!empty($v['charge'])){ - $this->app->erp->ChargeAuslagernLog( - $v['artikel'], - $v['lager_platz'], - $v['charge'], - $v['menge'], - 'API Korrektur' - ); - } - } - } - } - else{ - if($mhdohnelager) { - foreach($mhdohnelager as $k => $v) { - if(!isset($v['gefunden'])) { - $storageChanged -= $v['menge']; - $this->app->DB->Delete( - "DELETE FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' AND mhddatum = '".$v['mhddatum']."'" - ); - $this->app->erp->MHDLog( - $v['artikel'],$v['lager_platz'],0, $v['mhddatum'], $v['menge'],'API Korrektur','',0,$v['charge'] - ); - if(!empty($v['charge'])){ - $this->app->erp->ChargeAuslagernLog( - $v['artikel'],$v['lager_platz'],$v['charge'],$v['menge'],'API Korrektur' - ); - } - } - } - } - } - } - } - elseif(!empty($artArr['chargenverwaltung']) && isset($xml->charge)) { - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$id' LIMIT 1"); - } - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id WHERE lpi.artikel = '$id' AND lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lpi.menge DESC LIMIT 1"); - } - if(!$lagerplatz) { - $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz lp WHERE lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lp.id ASC LIMIT 1"); - } - - if($lager_platz_id) { - $wawicharge = $this->app->DB->SelectArr( - "SELECT * FROM lager_charge WHERE artikel = '$id' AND lager_platz = '$lager_platz_id' order by charge, menge desc" - ); - } - else { - $wawimhd = null;//$this->app->DB->SelectArr("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' order by mhddatum"); - $chargenlager = null;//$this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE artikel = '$id' order by charge, menge desc"); - if($wawimhd) { - $mhdohnelager = null;//$this->app->DB->SelectArr("SELECT mhddatum, sum(menge) as smenge FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' group by mhddatum order by mhddatum "); - } - if($chargenlager) { - $chargenohnelager = null;//$this->app->DB->SelectArr("SELECT charge, sum(menge) as smenge FROM lager_charge WHERE artikel = '$id' group by charge order by charge "); - } - } - $charge = $xml->charge; - if(!empty($charge) && !is_string($charge) && !is_numeric($charge) && (!empty($charge)?count($charge):0) === 1 && empty($charge->charge) - && empty($charge->anzahl)) { - $charge = reset($charge); - } - if(isset($charge->charge)) { - $charge = json_decode(json_encode($charge->charge), true); - } - elseif(is_string($charge)) { - $charge = [$charge]; - } - $chargeanzahl = null; - if(isset($charge->anzahl)) { - $chargeanzahl = json_decode(json_encode($charge->anzahl),true); - } - elseif(isset($xml->chargeanzahl) && is_string(json_decode(json_encode($xml->chargeanzahl),true))) { - $chargeanzahl = [json_decode(json_encode($xml->chargeanzahl),true)]; - } - elseif(isset($xml->chargeanzahl) && is_numeric((string)$xml->chargeanzahl)) { - $chargeanzahl = [(float)(string)$xml->chargeanzahl]; - } - elseif(isset($xml->lagerzahl)) { - $chargeanzahl = [(float)(string)$xml->lagerzahl]; - } - $chargen = $charge; - foreach($chargen as $kcharge => $c) { - $charge = ''; - $anzahl = 1; - if(isset($c->charge)){ - $charge = (string)$c->charge; - } - elseif(is_string($c)){ - $charge = (string)$c; - } - if(isset($c->anzahl)){ - $anzahl = (int)$c->anzahl; - }elseif(is_array($charge[$kcharge]) && isset($charge[$kcharge])){ - $anzahl = (int)$charge[$kcharge]; - } - elseif($chargeanzahl !== null) { - $anzahl = $chargeanzahl; - if(is_array($anzahl)) { - $anzahl = $anzahl[$kcharge]; - } - } - $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['stock'] += (float)$anzahl; - $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['entries'][] = - [ - 'batch' => $charge, 'quantity' => $anzahl - ]; - $chargenlager = null; - $found = false; - $foundcharge = false; - if($wawicharge){ - if($lager_platz_id){ - foreach ($wawicharge as $k => $v) { - if($v['charge'] == $charge) { - $found = true; - $wawicharge[$k]['gefunden'] = true; - if($v['menge'] != $anzahl) { - $storageChanged += (float)$anzahl - $v['menge']; - $this->app->DB->Update( - "UPDATE lager_charge SET menge = '$anzahl' WHERE id = '".$v['id']."' LIMIT 1" - ); - $this->app->erp->Chargenlog( - $v['artikel'], $v['lager_platz'],$anzahl > $v['menge']?1:0, - $v['charge'], abs($v['menge'] - $anzahl),'API Korrektur','',0 - ); - break; - } - } - } - } - } - if(!$found) { - $this->app->erp->AddChargeLagerOhneBewegung( - $id, $anzahl,$lager_platz_id,date('Y-m-d'),$charge,'API Korrektur' - ); - $storageChanged += (float)$anzahl; - } - $lagerzahl = null; - } - } - if($lagerzahl === null) { - if($storageChanged > 0) { - $this->app->erp->LagerEinlagern( - $id, $storageChanged, $lagerplatz, $projekt, 'API Korrektur', true - ); - $this->app->DB->Insert( - "INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) - VALUES ('$uebertragungen_account','artikel','$id','lagerzahl','$anzahl')" - ); - $this->lagerzahlenmonitor[$uebertragungen_account][$id] = - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', - '', $anzahl, '', '', 'artikel', $id, (isset($this->lagerzahlenmonitor) && - isset($this->lagerzahlenmonitor[$uebertragungen_account]) - && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id])) ? - $this->lagerzahlenmonitor[$uebertragungen_account][$id] : 0 - ); - } - elseif($storageChanged < 0) { - $this->app->erp->LagerAuslagernRegal($id,$lagerplatz, -$storageChanged, $projekt, 'API Korrektur', true); - $this->app->DB->Insert( - "INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) - VALUES ('$uebertragungen_account','artikel','$id','lagerzahl','$anzahl')" - ); - $this->lagerzahlenmonitor[$uebertragungen_account][$id] = - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', - '', $anzahl, '', '', 'artikel', $id, (isset($this->lagerzahlenmonitor) && - isset($this->lagerzahlenmonitor[$uebertragungen_account]) - && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id])) ? - $this->lagerzahlenmonitor[$uebertragungen_account][$id] : 0 - ); - } - } - elseif($storageChanged && (isset($xml->charge) || isset($xml->mhd))) { - if($storageChanged > 0) { - $this->app->erp->LagerEinlagern($id, $storageChanged,$lagerplatz,$projekt,'API Korrektur'); - $anzahl = $this->app->DB->Select( - sprintf( - 'SELECT trim(SUM(menge))+0 FROM lager_platz_inhalt WHERE artikel = %d AND lager_platz = %d ', - $id, $lagerplatz - ) - ); - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', - '', $anzahl, '', '', 'artikel', $id, (isset($this->lagerzahlenmonitor) && - isset($this->lagerzahlenmonitor[$uebertragungen_account]) - && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id])) ? - $this->lagerzahlenmonitor[$uebertragungen_account][$id] : 0 - ); - } - elseif($storageChanged < 0) { - $this->app->erp->LagerAuslagernRegal($id,$lagerplatz,abs($storageChanged),$projekt,'API Korrektur'); - $anzahl = $this->app->DB->Select( - sprintf( - 'SELECT trim(SUM(menge))+0 FROM lager_platz_inhalt WHERE artikel = %d AND lager_platz = %d ', - $id, $lagerplatz - ) - ); - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', - '', $anzahl, '', '', 'artikel', $id, (isset($this->lagerzahlenmonitor) && - isset($this->lagerzahlenmonitor[$uebertragungen_account]) - && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id])) ? - $this->lagerzahlenmonitor[$uebertragungen_account][$id] : 0 - ); - } - } - } - } - - /** - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - */ - public function ParsePartXmlAricleWithOutId(&$xml, $uebertragungen_account, $obj) { - $parameter1 = ''; - $meldung = 'Artikel '; - - $account = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM uebertragungen_account WHERE id = %d LIMIT 1', - $uebertragungen_account - ) - ); - $artikeleingang = !empty($account['artikeleingang']); - $lagerzahleneingang = !empty($account['lagerzahleneingang']); - $updatearticles = !empty($account['updatearticles']); - $logarticlenotfound = !empty($account['logarticlenotfound']); - if(!empty($xml->anlegen) && !empty($xml->nummer) && !empty($xml->name_de) && $artikeleingang) { - $artikelarr = array('projekt'=> $account['projekt']); - - if(!empty($this->app->stringcleaner)) { - $this->app->stringcleaner->XMLArray_clean($xml); - } - foreach($xml as $k => $v) { - if(empty($k) || $k === 'id' || $k === 'nummer' || is_numeric($k)) { - continue; - } - $vr = @reset($v); - if(is_numeric($vr) || is_string($vr)) { - $artikelarr[$k] = (string)$vr; - } - } - - if(isset($xml->nummer))$artikelarr['nummer'] = (string)$xml->nummer; - if(isset($xml->ean))$artikelarr['ean'] = (string)$xml->ean; - if(isset($xml->herstellernummer))$artikelarr['herstellernummer'] = (string)$xml->herstellernummer; - if(isset($xml->name_de))$artikelarr['name_de'] = (string)$xml->name_de; - if(isset($xml->name_en))$artikelarr['name_en'] = (string)$xml->name_en; - if(isset($xml->anabregstext))$artikelarr['anabregstext'] = (string)$xml->anabregstext; - if(isset($xml->anabregstext_en))$artikelarr['anabregstext_en'] = (string)$xml->anabregstext_en; - if(isset($xml->uebersicht_de))$artikelarr['uebersicht_de'] = (string)$xml->uebersicht_de; - if(isset($xml->uebersicht_en))$artikelarr['uebersicht_en'] = (string)$xml->uebersicht_en; - if(isset($xml->kurztext_de))$artikelarr['kurztext_de'] = (string)$xml->kurztext_de; - if(isset($xml->kurztext_en))$artikelarr['kurztext_en'] = (string)$xml->kurztext_en; - if(isset($xml->lagerartikel))$artikelarr['lagerartikel'] = (string)$xml->lagerartikel; - - if(isset($xml->gewicht))$artikelarr['gewicht'] = (string)$xml->gewicht; - if(isset($xml->breite))$artikelarr['breite'] = (string)$xml->breite; - if(isset($xml->laenge))$artikelarr['laenge'] = (string)$xml->laenge; - if(isset($xml->hoehe))$artikelarr['hoehe'] = (string)$xml->hoehe; - - for($i = 1; $i <= 20; $i++) { - $name = 'freifeld'.$i; - if(isset($xml->$name)){ - $xml->$name = $this->app->Secure->CleanString($xml->$name, 'nohtml'); - $artikelarr[$name] = (string)$xml->$name; - } - } - $artikelid = $this->app->erp->InsertUpdateArtikel($artikelarr, $updatearticles); - if($artikelid) { - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'artikel_ok', "Artikel " . (string)$xml->nummer . " angelegt", '', '', '', 'artikel', $artikelid); - } - elseif($updatearticles && $logarticlenotfound) { - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'artikel_error', 'Artikel ' . (string)$xml->nummer . ' nicht gefunden', '', '', '', 'artikel', 0); - } - unset($artikelarr); - } - elseif((isset($xml->lagerzahl) || isset($xml->mhdanzahl)) && $lagerzahleneingang) { - if(isset($xml->nummer)) { - if($parameter1 == '') { - $parameter1 = (string)$xml->nummer; - $meldung .= "mit Artikelnummer ".$parameter1." nicht gefunden"; - } - } - - if(isset($xml->ean)) { - if($parameter1 == '') { - $parameter1 = (string)$xml->ean; - $meldung .= "mit EAN ".$parameter1." nicht gefunden"; - } - } - if(isset($xml->herstellernummer)) { - if($parameter1 == '') { - $parameter1 = (string)$xml->herstellernummer; - $meldung .= "mit Herstellernumemr ".$parameter1." nicht gefunden"; - } - } - if($parameter1) { - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','artikel','".$this->app->DB->real_escape_string($parameter1)."','lagerzahl_fehler','".$this->app->DB->real_escape_string($meldung)."')"); - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_error', $meldung, $this->app->DB->real_escape_string($parameter1), '', '', 'artikel'); - } - } - elseif(isset($xml->anlegen) && $xml->anlegen && isset($xml->nummer) && $xml->nummer != '' && isset($xml->name_de) && $xml->name_de != '' && !$artikeleingang) { - if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'not_allowed' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) AND nachricht like 'Artikel-Eingang%' LIMIT 1")) { - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', 'Artikel-Eingang ist nicht aktiviert', '', '', '', 'artikel'); - } - } - elseif((isset($xml->lagerzahl) || isset($xml->mhdanzahl)) && !$lagerzahleneingang) { - if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'not_allowed' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) AND nachricht like 'Lagerzahlen-Eingang%' LIMIT 1")) { - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', 'Lagerzahlen-Eingang ist nicht aktiviert', '', '', '', 'artikel'); - } - } - } - - /** - * @param string $typ - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - */ - public function ParsePartXmlType($typ, &$xml, $uebertragungen_account, $obj) - { - $id = $this->GetIDFromFeld($typ, $xml); - if($id) { - switch($typ) { - case 'artikel': - $this->ParsePartXmlAricleWithId($xml, $uebertragungen_account, $obj, $id); - break; - } - } - else { - switch($typ) { - case 'artikel': - $this->ParsePartXmlAricleWithOutId($xml, $uebertragungen_account, $obj); - break; - } - } - } - - /** - * @param string $typ - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - */ - public function ParsePartXmlSupplierorderProductionWithoutId($typ, &$xml, $uebertragungen_account, $obj) - { - $isProduction = $typ === 'produktion'; - $lieferantok = false; - $neuerlieferant = false; - $adresselieferant = $this->app->DB->Select("SELECT adresselieferant FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); - if($adresselieferant && $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer <> '' AND geloescht = 0 AND id = '$adresselieferant' LIMIT 1")) - { - $adresse = $adresselieferant; - $lieferantok = true; - }else{ - if((empty($xml->lieferantennummer) && empty($xml->gln) ) || strtoupper((string)$xml->lieferantennummer) === 'NEW' || strtoupper((string)$xml->lieferantennummer) === 'NEU') { - if(isset($xml->name)) - { - $lieferantok = true; - $neuerlieferant = true; - }else{ - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','betellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Kein Lieferantenname angegeben')"); - } - }else{ - $adresse = null; - if(!empty($xml->adresse)){ - $adresse = $this->GetFromExtID('adresse', $xml->adresse); - } - if(!empty($adresse)){ - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE id = '$adresse' AND geloescht <> 1 AND lieferantennummer <> '' LIMIT 1"); - } - if(empty($adresse) && !empty($xml->gln)){ - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND gln <> '' AND gln = '".$this->app->DB->real_escape_string((string)$xml->gln)."' LIMIT 1"); - } - //if(!$adresse && !empty($xml->lieferantennummer))$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND lieferantennummer <> '' AND lieferantennummer = '".$this->app->DB->real_escape_string((string)$xml->lieferantennummer)."' LIMIT 1"); - if(empty($adresse) && !empty($xml->kundennummerlieferant)) - { - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND lieferantennummer <> '' AND lieferantennummer = '".$this->app->DB->real_escape_string((string)$xml->kundennummerlieferant)."' LIMIT 1"); - } - if(empty($adresse) && !empty($xml->adresse)) - { - $lieferantok = true; - $neuerlieferant = true; - } - if(!empty($adresse)){ - $lieferantok = true; - } - } - } - if($lieferantok) - { - $bestellung_positionen = null; - if(isset($xml->bestellung_position_list)) - { - if(isset($xml->bestellung_position_list->bestellung_position)) - { - $bestellung_positionen = &$xml->bestellung_position_list->bestellung_position; - } - - }elseif(isset($xml->bestellung_position)){ - $bestellung_positionen = &$xml->bestellung_position; - } - - if($bestellung_positionen) { - $artikelgefunden = true; - $artikelids = null; - $key = -1; - foreach($bestellung_positionen as $position) { - $key++; - if($artikelgefunden) - { - $_element1 = ''; - $_element2 = ''; - $_element3 = ''; - } - $_artikel = null; - if(!empty($position->artikel)) - { - $_artikel = $this->GetFromExtID('artikel', $xml->artikel); - if($_artikel) - { - $artikelids[$key] = $_artikel; - //$xml->artikelextid = $_artikel; - } - } - if(!$_artikel && !empty($position->ean)) - { - $_artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); - if(!$_artikel) - { - $_element1 = 'EAN: '.$position->ean; - }else { - $artikelids[$key] = $_artikel; - } - } - if(!$_artikel && !empty($position->herstellernummer)) - { - $_artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND herstellernummer <> '' AND herstellernummer = '".$this->app->DB->real_escape_string((string)$position->herstellernummer)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); - if(!$_artikel) - { - if($_element1 == '') - { - $_element1 = 'Herstellernummer: '.$position->herstellernummer; - }else{ - $_element2 = 'Herstellernummer: '.$position->herstellernummer; - } - }else { - $artikelids[$key] = $_artikel; - } - } - if(!$_artikel && !empty($position->bestellnummer)) - { - $_artikel = $this->app->DB->Select("SELECT e.artikel FROM `einkaufspreise` e INNER JOIN artikel a ON e.artikel = a.id WHERE e.bestellnummer <> '' AND e.bestellnummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' ORDER BY a.projekt = '$projekt' DESC LIMIT 1"); - if(!$_artikel){ - $_artikel = $this->app->DB->Select("SELECT id FROM `artikel` WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); - } - if(!$_artikel) - { - if($_element1 == '') - { - $_element1 = 'Bestellernummer: '.$position->bestellnummer; - }elseif($_element2 == ''){ - $_element2 = 'Bestellernummer: '.$position->bestellnummer; - }else{ - $_element3 = 'Bestellernummer: '.$position->bestellnummer; - } - }else { - $artikelids[$key] = $_artikel; - } - } - if(!$_artikel && !$this->app->DB->Select("SELECT artikelanlegen FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")){ - $artikelgefunden = false; - } - if(!$_artikel) { - if(!empty($position->bestellnummer)) - { - if(!$this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' LIMIT 1")) - { - $artikelgefunden = false; - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Artikelnummer ".$this->app->DB->real_escape_string((string)$position->nummer)." nicht gefunden')"); - break; - } - }elseif(!empty($position->ean)){ - if(!$this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' LIMIT 1")) - { - $artikelgefunden = false; - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','EAN ".$this->app->DB->real_escape_string((string)$position->ean)." nicht gefunden')"); - break; - } - }else{ - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Keine Artikelnummer gefunden')"); - break; - } - } - } - if($artikelgefunden) - { - $_typ =''; - $name = ''; - $abteilung = ''; - $unterabteilung = ''; - $ansprechpartner = ''; - $adresszusatz = ''; - $strasse = ''; - $land = $this->app->erp->Firmendaten('land'); - $plz = ''; - $ort = ''; - $email = ''; - $telefon = ''; - $telefax = ''; - $ustid = ''; - $partner = ''; - $bundesstaat = ''; - $projekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); - if(!empty($this->app->stringcleaner)) { - $this->app->stringcleaner->XMLArray_clean($xml); - } - - if(isset($xml->name))$name = (string)$xml->name; - if(isset($xml->anrede))$_typ = (string)$xml->anrede; - if(isset($xml->abteilung))$abteilung = (string)$xml->abteilung; - if(isset($xml->unterabteilung))$unterabteilung = (string)$xml->unterabteilung; - if(isset($xml->ansprechpartner))$ansprechpartner = (string)$xml->ansprechpartner; - if(isset($xml->adresszusatz))$adresszusatz = (string)$xml->adresszusatz; - if(isset($xml->strasse))$strasse = (string)$xml->strasse; - if(isset($xml->land))$land = (string)$xml->land; - if(isset($xml->bundesstaat))$bundesstaat = (string)$xml->bundesstaat; - if(isset($xml->plz))$plz = (string)$xml->plz; - if(isset($xml->ort))$ort = (string)$xml->ort; - if(isset($xml->email))$email = (string)$xml->email; - if(isset($xml->telefon))$telefon = (string)$xml->telefon; - if(isset($xml->telefax))$telefax = (string)$xml->telefax; - if(isset($xml->ustid))$ustid = (string)$xml->ustid; - if(isset($xml->partner))$partner = (string)$xml->partner; - if(isset($xml->projekt) && (!isset($xml->belegnr) || $xml->belegnr == '' || strtoupper($xml->belegnr) === 'NEW' || strtoupper($xml->belegnr) === 'NEU')) { - if((string)$xml->projekt != '') - { - $_projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE geloescht = 0 AND abkuerzung = '".$this->app->DB->real_escape_string((string)$xml->projekt)."' LIMIT 1"); - if($_projekt)$projekt = $_projekt; - } - if($land == '')$land = $this->app->erp->Projektdaten($projekt ,'land'); - } - if($land == '')$land = $this->app->erp->Firmendaten('land'); - if($neuerlieferant) - { - $adressearr = array('lieferantennummer'=>$this->app->erp->GetNextNummer('lieferantennummer',$projekt)); - $adressearr['typ'] = $_typ; - $adressearr['name'] = $name; - $adressearr['abteilung'] = $abteilung; - $adressearr['unterabteilung'] = $unterabteilung; - $adressearr['ansprechpartner'] = $ansprechpartner; - $adressearr['adresszusatz'] = $adresszusatz; - $adressearr['land'] = $land; - $adressearr['plz'] = $plz; - $adressearr['ort'] = $ort; - $adressearr['email'] = $email; - $adressearr['telefon'] = $telefon; - $adressearr['telefax'] = $telefax; - $adressearr['ustid'] = $ustid; - $adressearr['projekt'] = $projekt; - $adressearr['bundesstaat'] = $bundesstaat; - $adresse = $this->app->erp->InsertUpdateAdresse($adressearr); - if(isset($xml->adresse) && $xml->adresse != '') { - $this->SetExtIDMapping('adresse', $adresse, $xml->adresse); - } - unset($adressearr); - } - if($adresse) - { - if($isProduction) { - $bestellung = $this->app->erp->CreateProduktion(); - $belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM produktion WHERE id = '$bestellung' LIMIT 1"); - if($belegnr === '' || $belegnr === '0'){ - $belegnr = $this->app->erp->GetNextNummer('produktion',$projekt,$bestellung); - } - } - else{ - $bestellung = $this->app->erp->CreateBestellung(); - $belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id = '$bestellung' LIMIT 1"); - if($belegnr === '' || $belegnr === '0'){ - $belegnr = $this->app->erp->GetNextNummer('bestellung',$projekt,$bestellung); - } - } - - - if(isset($xml->belegnr) && $xml->belegnr != '' && strtoupper($xml->belegnr) !== 'NEW' && strtoupper($xml->belegnr) !== 'NEU'){ - $this->SetExtIDMapping($isProduction?'produktion':'bestellung', $bestellung, $xml->belegnr); - } - $this->app->erp->LoadBestellungStandardwerte($bestellung,$adresse); - - $auftragarr = null; - $auftragarr['belegnr'] = $belegnr; - $auftragarr['projekt'] = $projekt; - if($_typ)$auftragarr['typ'] = $_typ; - $auftragarr['name'] = $name; - $auftragarr['abteilung'] = $abteilung; - $auftragarr['unterabteilung'] = $unterabteilung; - $auftragarr['ansprechpartner'] = $ansprechpartner; - $auftragarr['strasse'] = $strasse; - $auftragarr['bundesstaat'] = $bundesstaat; - $auftragarr['land'] = $land; - $auftragarr['plz'] = $plz; - $auftragarr['ort'] = $ort; - $auftragarr['email'] = $email; - $auftragarr['telefon'] = $telefon; - $auftragarr['telefax'] = $telefax; - $auftragarr['ustid'] = $ustid; - if($isProduction && isset($xml->unterlistenexplodieren)) { - $auftragarr['unterlistenexplodieren'] = (string)$xml->unterlistenexplodieren; - } - if(isset($xml->abweichendelieferadresse))$auftragarr['abweichendelieferadresse'] = (string)$xml->abweichendelieferadresse; - if(isset($xml->bestellungsart))$auftragarr['bestellungsart'] = (string)$xml->bestellungsart; - if(isset($xml->bearbeiter))$auftragarr['bearbeiter'] = (string)$xml->bearbeiter; - if(isset($xml->datum))$auftragarr['datum'] = (string)$xml->datum; - if(isset($xml->lieferdatum))$auftragarr['lieferdatum'] = (string)$xml->lieferdatum; - foreach(['datum', 'lieferdatum'] as $dateField) { - if(!empty($auftragarr[$dateField]) && strpos($auftragarr[$dateField], '.') !== false) { - $auftragarr[$dateField] = $this->app->String->Convert($auftragarr[$dateField], '%1.%2.%3', '%3-%2-%1'); - } - } - if(isset($xml->ustid))$auftragarr['ustid'] = (string)$xml->ustid; - if(isset($xml->ust_befreit))$auftragarr['ust_befreit'] = (string)$xml->ust_befreit; - if(isset($xml->internet))$auftragarr['internet'] = (string)$xml->internet; - if(isset($xml->transaktionsnummer))$auftragarr['transaktionsnummer'] = (string)$xml->transaktionsnummer; - if(isset($xml->versandart))$auftragarr['versandart'] = (string)$xml->versandart; - if(isset($xml->vertrieb))$auftragarr['vertrieb'] = (string)$xml->vertrieb; - if(isset($xml->zahlungsweise))$auftragarr['zahlungsweise'] = (string)$xml->zahlungsweise; - if(isset($xml->freitext))$auftragarr['freitext'] = (string)$xml->freitext; - if(isset($xml->bank_inhaber))$auftragarr['bank_inhaber'] = (string)$xml->bank_inhaber; - if(isset($xml->bank_institut))$auftragarr['bank_institut'] = (string)$xml->bank_institut; - if(isset($xml->bank_blz))$auftragarr['bank_blz'] = (string)$xml->bank_blz; - if(isset($xml->bank_konto))$auftragarr['bank_konto'] = (string)$xml->bank_konto; - if(isset($xml->ansprechpartner))$auftragarr['ansprechpartner'] = (string)$xml->ansprechpartner; - if(isset($xml->liefername))$auftragarr['liefername'] = (string)$xml->liefername; - if(isset($xml->lieferland))$auftragarr['lieferland'] = (string)$xml->lieferland; - if(isset($xml->lieferstrasse))$auftragarr['lieferstrasse'] = (string)$xml->lieferstrasse; - if(isset($xml->lieferabteilung))$auftragarr['lieferabteilung'] = (string)$xml->lieferabteilung; - if(isset($xml->lieferunterabteilung))$auftragarr['lieferunterabteilung'] = (string)$xml->lieferunterabteilung; - if(isset($xml->lieferansprechpartner))$auftragarr['lieferansprechpartner'] = (string)$xml->lieferansprechpartner; - if(isset($xml->lieferort))$auftragarr['lieferort'] = (string)$xml->lieferort; - if(isset($xml->lieferbundesstaat))$auftragarr['lieferbundesstaat'] = (string)$xml->lieferbundesstaat; - if(isset($xml->lieferplz))$auftragarr['lieferplz'] = (string)$xml->lieferplz; - if(isset($xml->lieferadresszusatz))$auftragarr['lieferadresszusatz'] = (string)$xml->lieferadresszusatz; - - if(isset($xml->internebemerkung))$auftragarr['internebemerkung'] = (string)$xml->internebemerkung; - if(isset($xml->internebezeichnung))$auftragarr['internebezeichnung'] = (string)$xml->internebezeichnung; - - $auftragarr['status']='freigegeben'; - $auftragarr['projekt']=$projekt; - $auftragarr['zahlungszielskonto']=0; - if(isset($xml->gesamtsumme))$auftragarr['gesamtsumme'] = (float)str_replace(',','.',$xml->gesamtsumme); - $auftragarr = $this->formatDateFieldsToMysqlFormat($auftragarr); - $this->app->DB->UpdateArr($isProduction ? 'produktion' : 'bestellung', $bestellung, 'id', $auftragarr, true); - $key = -1; - foreach($bestellung_positionen as $position) - { - $key++; - $artikel = null; - if(!empty($artikelids) && isset($artikelids[$key])) { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '".$artikelids[$key]."' LIMIT 1"); - if($artikel) - { - if($isProduction) { - $newposid = $this->app->erp->AddArtikelProduktion($artikel, isset($position->menge) ? $position->menge : 1, $bestellung); - if(isset($position->preis) && $position->preis != 0) { - $this->app->DB->Update("UPDATE produktion_position SET preis = '".(float)$position->preis."' WHERE id = '$newposid'"); - } - if(isset($position->vpe) && $position->vpe != '') { - $this->app->DB->Update("UPDATE produktion_position SET vpe = '".(string)$position->vpe."' WHERE id = '$newposid'"); - } - } - else{ - $newposid = $this->app->erp->AddBestellungPosition($bestellung, 0, (isset($position->menge) ? $position->menge : 1), isset($auftragarr['datum']) ? $auftragarr['datum'] : date('Y-m-d'), - ((isset($position->beschreibung) && $position->beschreibung != '') ? (string)$position->beschreibung : ''), $artikel, - ((isset($position->einheit) && $position->einheit != '') ? (string)$position->einheit : ''), - ((isset($position->waehrung) && $position->waehrung != '') ? (string)$position->waehrung : '') - ); - if(isset($position->preis) && $position->preis != 0) { - $this->app->DB->Update("UPDATE bestellung_position SET preis = '".(float)$position->preis."' WHERE id = '$newposid'"); - } - if(isset($position->bestellnummer) && $position->bestellnummer != '') { - $this->app->DB->Update("UPDATE bestellung_position SET bestellnummer = '".(string)$position->bestellnummer."' WHERE id = '$newposid'"); - } - if(isset($position->vpe) && $position->vpe != '') { - $this->app->DB->Update("UPDATE bestellung_position SET vpe = '".(string)$position->vpe."' WHERE id = '$newposid'"); - } - } - /*$newposid = $this->app->erp->AddPositionManuellPreisNummer('bestellung',$bestellung, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), - (isset($position->menge)?$position->menge:1) , - (isset($position->name)? $position->name:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), - isset($position->preis)? str_replace(',','.',$position->preis):$this->app->erp->GetEinkaufspreis($artikel,(isset($position->menge)?$position->menge:1),$adresse) , - $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1") , - 0,0, - isset($xml->waehrung)?$xml->waehrung:'EUR'); */ - } - } - if(isset($position->bestellnummer) && !$artikel) - { - //$artikel = $this->app->DB->Select("SELECT e.artikel FROM `einkaufspreise` e INNER JOIN artikel a ON e.artikel = a.id WHERE e.bestellnummer <> '' AND e.bestellnummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' ORDER BY a.projekt = '$projekt' DESC LIMIT 1"); - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' LIMIT 1"); - if($isProduction) { - if($artikel) { - $newposid = $this->app->erp->AddArtikelProduktion($artikel, isset($position->menge) ? $position->menge : 1, $bestellung); - } - } else{ - $newposid = $this->app->erp->AddPositionManuellPreisNummer('bestellung', $bestellung, $projekt, $position->nummer, - (isset($position->menge) ? $position->menge : 1), - (isset($position->name) ? $position->name : $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), - isset($position->preis) ? str_replace(',', '.', $position->preis) : $this->app->erp->GetEinkaufspreis($artikel, (isset($position->menge) ? $position->menge : 1), $adresse), - $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"), - 0, 0, - isset($xml->waehrung) ? $xml->waehrung : 'EUR'); - } - } - if(!empty($position->ean) && !$artikel) - { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' LIMIT 1"); - if($artikel) - { - if($isProduction) { - $newposid = $this->app->erp->AddArtikelProduktion($artikel, isset($position->menge) ? $position->menge : 1, $bestellung); - } - else{ - $newposid = $this->app->erp->AddPositionManuellPreisNummer('bestellung', $bestellung, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), - (isset($position->menge) ? $position->menge : 1), - (isset($position->name) ? $position->name : $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), - isset($position->preis) ? str_replace(',', '.', $position->preis) : $this->app->erp->GetEinkaufspreis($artikel, (isset($position->menge) ? $position->menge : 1), $adresse), - $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"), - 0, 0, - isset($xml->waehrung) ? $xml->waehrung : 'EUR'); - } - } - - } - if(!empty($position->herstellernummer) && !$artikel) - { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND herstellernummer <> '' AND herstellernummer = '".$this->app->DB->real_escape_string((string)$position->herstellernummer)."' LIMIT 1"); - if($artikel) { - if($isProduction) { - $newposid = $this->app->erp->AddArtikelProduktion($artikel, isset($position->menge) ? $position->menge : 1, $bestellung); - } else{ - $newposid = $this->app->erp->AddPositionManuellPreisNummer('bestellung', $bestellung, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), - (isset($position->menge) ? $position->menge : 1), - (isset($position->name) ? $position->name : $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), - isset($position->preis) ? str_replace(',', '.', $position->preis) : $this->app->erp->GetEinkaufspreis($artikel, (isset($position->menge) ? $position->menge : 1), $adresse), - $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"), - 0, 0, - isset($xml->waehrung) ? $xml->waehrung : 'EUR'); - } - } - - } - - /*if($newposid > 0) - { - $this->app->erp->RunHook("beleg_afterinsertposition", 5, "auftrag",$auftrag,$artikel,(isset($position->menge)?$position->menge:1),$newposid); - }*/ - } - if($isProduction) { - $this->app->erp->AuftragExplodieren($bestellung, 'produktion'); - $this->app->erp->ProduktionEinzelnBerechnen($bestellung); - $this->app->erp->ProduktionNeuberechnen($bestellung); - } - else{ - $this->app->erp->BestellungNeuberechnen($bestellung); - } - - if(isset($xml->dateien)) { - foreach($xml->dateien as $datei) { - foreach($datei as $singledatei) { - $isfile = false; - $data = null; - if(is_file($singledatei->dateiname)){ - $type = mime_content_type(basename($singledatei->dateiname)); - if($type !== 'text/x-php' && $type !== 'text/php' && $type !== 'application/php' && $type !== 'application/x-php' && $type !== 'application/x-httpd-php' && $type !== 'application/x-httpd-php-source'){ - - if($singledatei->dateiinhalt == ''){ - $data = file_get_contents($singledatei->dateiname); - $isfile = true; - } - }else{ - $singledatei->dateiinhalt = ''; - } - } - if(empty($data)){ - if(!empty($singledatei->dateiinhalt)){ - $data = base64_decode($singledatei->dateiinhalt); - }else{ - $data = ''; - } - } - if($isfile){ - $name = $this->app->erp->GetTmp().basename($singledatei->dateiname); - }else{ - $name = $this->app->erp->GetTmp().$singledatei->dateiname; - } - - file_put_contents($name, $data); - - $pfad = $this->app->Conf->WFuserdata; - $pfad = rtrim($pfad); - $pfad .= '/dms/'; - - if(!file_exists($pfad)){ - if(!mkdir($pfad, 0777, true) && !is_dir($pfad)) - { - $this->app->erp->LogFile($pfad.' konnte nicht erstellt werden'); - } - } - - $speicherpfad = $pfad.$this->app->Conf->WFdbname; - - if(!file_exists($speicherpfad)) { - if(!mkdir($speicherpfad, 0777, true) && !is_dir($speicherpfad)) - { - $this->app->erp->LogFile($speicherpfad.' konnte nicht erstellt werden'); - } - } - - $fileid = $this->app->erp->CreateDatei( - $singledatei->dateiname, - !empty($singledatei->titel)?$singledatei->titel:$singledatei->dateiname, - !empty($singledatei->beschreibung)?(string)$singledatei->beschreibung:'', '', - $name, '',true,$speicherpfad - ); - $subjekt = !empty($singledatei->subjekt)?(string)$singledatei->subjekt:'Sonstige'; - $this->app->erp->AddDateiStichwort($fileid, $subjekt, $isProduction?'Produktion': 'Bestellung', $bestellung); - - if($isfile){ - rename($singledatei->dateiname, $singledatei->dateiname.'.del'); - } - } - } - } - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $isProduction?'produktion':'bestellung_ok', '', '', '', '', $isProduction?'produktion': 'bestellung', $bestellung); - $doctype = $isProduction?'produktion': 'bestellung'; - $this->app->erp->RunHook('transfer_document_incoming', 3, $uebertragungen_account, $doctype, $bestellung); - } - } - else { - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'bestellung_error', 'Artikel nicht gefunden', $this->app->DB->real_escape_string((string)$_element1), $this->app->DB->real_escape_string((string)$_element2), $this->app->DB->real_escape_string((string)$_element3), 'bestellung'); - } - } - else{ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'bestellung_error', 'Keine Artikel gefunden', $this->app->DB->real_escape_string(!empty($xml->belegnr)?(string)$xml->belegnr:''), '', '', 'bestellung'); - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Keine Positionen gefunden')"); - } - } - else{ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'bestellung_error', 'Lieferant gefunden', $this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid), '', '', 'bestellung'); - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Lieferantennummer ".$this->app->DB->real_escape_string((string)$xml->kundennummer)." nicht gefunden')"); - } - } - - /** - * @param array $documentArray - * - * @return array - */ - public function formatDateFieldsToMysqlFormat($documentArray) - { - if(!is_array($documentArray)) { - return $documentArray; - } - $dateCols = ['datum', 'lieferdatum', 'tatsaechlicheslieferdatum', ]; - foreach($documentArray as $key => $documentValue) { - if(!is_string($documentValue)) { - continue; - } - if(!in_array($key, $dateCols)) { - continue; - } - $documentValue = substr($documentValue, 0, 10); - if(strpos($documentValue, '.') === false) { - continue; - } - $documentArray[$key] = $this->app->String->Convert($documentValue, '%1.%2.%3', '%3-%2-%1'); - } - - return $documentArray; - } - - /** - * @param string $typ - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - */ - public function ParsePartXmlOrderOfferWithoutId($typ, &$xml, $uebertragungen_account, $obj) - { - $transferAccount = $this->app->DB->SelectRow( - sprintf( - 'SELECT `projekt`, `createarticleifnotexists`, `createarticleasstoragearticle` - FROM `uebertragungen_account` WHERE `id` = %d LIMIT 1', - $uebertragungen_account - ) - ); - $projekt = $transferAccount['projekt']; - $createArticleIfNotEmpty = !empty($transferAccount['createarticleifnotexists']); - $markAsStorageArticle = !empty($transferAccount['createarticleasstoragearticle']); - if(!$this->app->DB->Select("SELECT id FROM $typ WHERE shopextid = '".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."' AND projekt = '$projekt' AND shopextid <> ''") - && (!isset($xml->belegnr) || strtoupper($xml->belegnr) == 'NEW' || strtoupper($xml->belegnr) == 'NEU' || !$this->GetFromExtID($typ, $xml->belegnr))) - { - $auftragarr = []; - $order = null; - $addressFromDocument = null; - if($typ === 'retoure') { - if(isset($xml->auftragid)) { - $orderId = (string)$xml->auftragid; - if(!empty($orderId)) { - $order = $this->app->DB->SelectRow( - sprintf( - 'SELECT `id`, `belegnr`, `adresse` FROM `auftrag` WHERE `id` = %d', - $orderId - ) - ); - if(!empty($order)) { - $auftragarr['auftragid'] = $order['id']; - $auftragarr['auftrag'] = $order['belegnr']; - $addressFromDocument = $order['adresse']; - } - } - } - if(isset($xml->auftrag) && empty($auftragarr['auftragid'])) { - $orderNumber = (string)$xml->auftrag; - if(!empty($orderNumber)) { - $order = $this->app->DB->SelectRow( - sprintf( - "SELECT `belegnr`, `id`, `adresse` - FROM `auftrag` WHERE `belegnr` = '%s' - ORDER BY `projekt` = %d DESC - LIMIT 1", - $orderNumber, $projekt - ) - ); - if(!empty($order['belegnr'])) { - $auftragarr['auftrag'] = $order['belegnr']; - $auftragarr['auftragid'] = $order['id']; - $addressFromDocument = $order['adresse']; - } - } - } - if(isset($xml->lieferscheinid)) { - $deliveryNoteId = (string)$xml->lieferscheinid; - if(!empty($deliveryNoteId)) { - $deliveryNote = $this->app->DB->SelectRow( - sprintf( - 'SELECT `id`, `belegnr`, `adresse` FROM `lieferschein` WHERE `id` = %d', - $deliveryNoteId - ) - ); - if(!empty($deliveryNote)) { - $auftragarr['lieferscheinid'] = $deliveryNote['id']; - $auftragarr['lieferschein'] = $deliveryNote['belegnr']; - if(empty($addressFromDocument)) { - $addressFromDocument = $deliveryNote['adresse']; - } - } - } - } - if(isset($xml->lieferschein)) { - $deliveryNoteNumber = (string)$xml->lieferschein; - if(!empty($deliveryNoteNumber)) { - $deliveryNote = $this->app->DB->SelectRow( - sprintf( - "SELECT `belegnr`, `id`, `adresse` - FROM `lieferschein` WHERE `belegnr` = '%s' - ORDER BY `projekt` = %d DESC - LIMIT 1", - $deliveryNoteNumber, $projekt - ) - ); - if(!empty($deliveryNote['belegnr'])) { - $auftragarr['lieferschein'] = $deliveryNote['belegnr']; - $auftragarr['lieferscheinid'] = $deliveryNote['id']; - if(empty($addressFromDocument)) { - $addressFromDocument = $deliveryNote['adresse']; - } - } - } - } - } - if((int)$addressFromDocument > 0) { - $addressFromDocument = $this->app->DB->Select( - sprintf( - 'SELECT `id` FROM `adresse` WHERE `id` = %d AND `geloescht` = 0', - $addressFromDocument - ) - ); - } - //if(true) - //{ - $kundeok = false; - $neuerkunde = false; - if(isset($xml->kundennummer) && ( strtoupper((string)$xml->kundennummer) == 'NEW' || strtoupper((string)$xml->kundennummer) == 'NEU') && isset($xml->name)) - { - $neuerkunde = true; - $kundeok = true; - } - elseif(isset($xml->kundennummer) && ( strtoupper((string)$xml->kundennummer) == 'NEW' || strtoupper((string)$xml->kundennummer) == 'NEU')){ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ.'_error', "Auftrag enthält keinen Namen", $this->app->DB->real_escape_string((string)$xml->extid), '', '', $typ); - } - elseif((empty($xml->gln) )){ - if(isset($xml->name)) - { - if($this->app->DB->Select("SELECT kundennummernuebernehmen FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1") && isset($xml->kundennummer) && $xml->kundennummer != '') - { - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer <> '' AND kundennummer = '".$this->app->DB->real_escape_string((string)$xml->kundennummer)."' AND ifnull(geloescht,0) = 0 ORDER BY projekt = '$projekt' DESC LIMIT 1"); - }else { - $adresse = null; - } - if(empty($adresse)) - { - if(isset($xml->plz) && isset($xml->strasse) && isset($xml->ort) && isset($xml->email)) - { - $adresseprojekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '$uebertragungen_account' LIMIT 1"); - if($adresseprojekt) - { - $adresseprojekt = " and projekt = '$adresseprojekt' "; - }else{ - $adresseprojekt = ''; - } - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE name='".$this->app->DB->real_escape_string((string)$xml->name)."' AND email='".$this->app->DB->real_escape_string((string)$xml->email)."' - AND strasse='".$this->app->DB->real_escape_string((string)$xml->strasse)."' AND plz='".$this->app->DB->real_escape_string((string)$xml->plz)."' AND ort='".$this->app->DB->real_escape_string((string)$xml->ort)."' AND kundennummer <> '' AND geloescht!=1 $adresseprojekt LIMIT 1"); - $neuerkunde = true; - if($adresse) - { - $neuerkunde = false; - } - }else{ - $neuerkunde = true; - } - $kundeok = true; - }else{ - $neuerkunde = false; - $kundeok = true; - } - } - else{ - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Kein Kundenname angegeben')"); - } - if(empty($adresse) && (int)$addressFromDocument > 0) { - $neuerkunde = false; - $kundeok = true; - $adresse = $addressFromDocument; - } - } - else{ - if($this->app->DB->Select("SELECT kundennummernuebernehmen FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1") && isset($xml->kundennummer) && $xml->kundennummer != '') - { - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer <> '' AND kundennummer = '".$this->app->DB->real_escape_string((string)$xml->kundennummer)."' AND ifnull(geloescht,0) = 0 ORDER BY projekt = '$projekt' DESC LIMIT 1"); - }else { - $adresse = null; - } - if(!$adresse && !empty($xml->gln) && $xml->gln != ''){ - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND gln <> '' AND gln = '".$this->app->DB->real_escape_string((string)$xml->gln)."' LIMIT 1"); - } - if(!empty($xml->adresse)){ - $adresse = $this->GetFromExtID('adresse', $xml->adresse); - } - if(!$adresse && !empty($xml->adresse)) - { - $kundeok = true; - $neuerkunde = true; - } - //if(!empty($xml->kundennummer))$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND kundennummer <> '' AND kundennummer = '".$this->app->DB->real_escape_string((string)$xml->kundennummer)."' LIMIT 1"); - - if($adresse)$kundeok = true; - - if(empty($adresse) && (int)$addressFromDocument > 0) { - $neuerkunde = false; - $kundeok = true; - } - } - if($kundeok) - { - $auftrag_positionen = null; - $listname = $typ.'_position_list'; - $positionname = $typ.'_position'; - if(isset($xml->$listname)) - { - if(isset($xml->$listname->$positionname)) - { - $auftrag_positionen = &$xml->$listname->$positionname; - } - - }elseif(isset($xml->$positionname)){ - $auftrag_positionen = &$xml->$positionname; - } - - if($auftrag_positionen) - { - $artikelgefunden = true; - foreach($auftrag_positionen as $position) - { - $_artikel = null; - $ean = null; - $extArticleId = null; - $number = null; - if(isset($position->artikel) && $position->artikel != '') - { - $extArticleId = (string)$position->artikel; - $_artikel = $this->GetFromExtID('artikel', $xml->artikel); - if($_artikel) { - $xml->artikelextid = $_artikel; - } - } - if(!$_artikel && isset($position->ean) && $position->ean != '') - { - $ean = (string)$position->ean; - $_artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); - } - - if(!$_artikel && isset($position->nummer) && $position->nummer != '') - { - $number = (string)$position->nummer; - $_artikel = $this->app->DB->Select( - "SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '" - . $this->app->DB->real_escape_string((string)$position->nummer). - "' ORDER BY projekt = '$projekt' DESC LIMIT 1" - ); - $element1 = $position->nummer; - } - - if(!$_artikel && $createArticleIfNotEmpty) { - if(!empty($number) || !empty($extArticleId)) { - $newArticleArr = [ - 'projekt' => $projekt, - ]; - if(!empty($markAsStorageArticle)) { - $newArticleArr = [ - 'lagerartikel' => 1, - ]; - } - if(!empty($position->name)) { - $newArticleArr['name_de'] = (string)$position->name; - } - if($ean !== null) { - $newArticleArr['ean'] = $ean; - } - if($extArticleId === null) { - $newArticleArr['nummer'] = $number; - } - else { - $newArticleArr['nummer'] = $this->app->erp->GetNextNummer('artikel', $projekt); - } - - $_artikel = $this->app->erp->InsertUpdateArtikel($newArticleArr); - if($extArticleId !== null) { - $this->SetExtIDMapping('artikel', $_artikel, $extArticleId); - } - } - } - - if(!$_artikel) - { - $artikelgefunden = false; - if(!empty($position->nummer)) - { - if(!$this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->nummer)."' ORDER BY projekt = '$projekt' DESC LIMIT 1")) - { - $artikelgefunden = false; - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Artikelnummer ".$this->app->DB->real_escape_string((string)$position->nummer)." nicht gefunden')"); - break; - } - }elseif(!empty($position->ean)){ - if(!$this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' LIMIT 1")) - { - $artikelgefunden = false; - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','EAN ".$this->app->DB->real_escape_string((string)$position->ean)." nicht gefunden')"); - break; - } - }else{ - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Keine Artikelnummer gefunden')"); - break; - } - } - } - if($artikelgefunden) - { - $_typ =''; - $name = ''; - $abteilung = ''; - $unterabteilung = ''; - $ansprechpartner = ''; - $adresszusatz = ''; - $strasse = ''; - $land = $this->app->erp->Firmendaten('land'); - $plz = ''; - $ort = ''; - $email = ''; - $telefon = ''; - $telefax = ''; - $ustid = ''; - $partner = ''; - $bundesstaat = ''; - $projekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); - - if(!empty($this->app->stringcleaner)) - { - $this->app->stringcleaner->XMLArray_clean($xml); - } - - if(isset($xml->name))$name = (string)$xml->name; - if(isset($xml->anrede))$_typ = (string)$xml->anrede; - if(isset($xml->abteilung))$abteilung = (string)$xml->abteilung; - if(isset($xml->unterabteilung))$unterabteilung = (string)$xml->unterabteilung; - if(isset($xml->ansprechpartner))$ansprechpartner = (string)$xml->ansprechpartner; - if(isset($xml->adresszusatz))$adresszusatz = (string)$xml->adresszusatz; - if(isset($xml->strasse))$strasse = (string)$xml->strasse; - if(isset($xml->land))$land = (string)$xml->land; - if(isset($xml->bundesstaat))$bundesstaat = (string)$xml->bundesstaat; - if(isset($xml->plz))$plz = (string)$xml->plz; - if(isset($xml->ort))$ort = (string)$xml->ort; - if(isset($xml->email))$email = (string)$xml->email; - if(isset($xml->telefon))$telefon = (string)$xml->telefon; - if(isset($xml->telefax))$telefax = (string)$xml->telefax; - if(isset($xml->ustid))$ustid = (string)$xml->ustid; - if(isset($xml->partner))$partner = (string)$xml->partner; - if(isset($xml->projekt) && (!isset($xml->belegnr) || $xml->belegnr == '' || strtoupper($xml->belegnr) == 'NEW' || strtoupper($xml->belegnr) == 'NEU')) - { - if(is_numeric($this->projekt)){ - $projekt = (string)$xml->projekt; - } - if($land == ''){ - $land = $this->app->erp->Projektdaten($projekt ,'land'); - } - } - if($land == '') - { - $land = $this->app->erp->Firmendaten('land'); - } - if($neuerkunde) - { - $adresse = $this->app->erp->KundeAnlegen($_typ,$name,$abteilung, - $unterabteilung,$ansprechpartner,$adresszusatz,$strasse,$land,$plz,$ort,$email,$telefon,$telefax,$ustid,$partner,$projekt); - if($bundesstaat != ''){ - $this->app->DB->Update("UPDATE adresse SET bundesstaat = '".$this->app->DB->real_escape_string($bundesstaat)."' WHERE id = '$adresse' LIMIT 1"); - } - if(isset($xml->adresse) && $xml->adresse != '') - { - $this->SetExtIDMapping('adresse', $adresse, $xml->adresse); - } - } - if($adresse) { - $createname = 'Create'.ucfirst($typ); - $auftrag = $this->app->erp->$createname(); - $belegnr = (string)$this->app->DB->Select("SELECT `belegnr` FROM `$typ` WHERE `id` = '$auftrag' LIMIT 1"); - if($belegnr === '' || $belegnr === '0'){ - $belegnr = $this->app->erp->GetNextNummer($typ,$projekt,$auftrag); - } - if(isset($xml->belegnr) && $xml->belegnr != '' && strtoupper($xml->belegnr) != 'NEW' && strtoupper($xml->belegnr) != 'NEU'){ - $this->SetExtIDMapping($typ, $auftrag, $xml->belegnr); - } - $standardwertename = 'Load'.ucfirst($typ).'Standardwerte'; - $this->app->erp->$standardwertename($auftrag, $adresse); - if($typ === 'angebot' || $typ === 'auftrag'){ - $this->app->DB->Update( - "UPDATE `$typ` - SET `shopextid` = '" . $this->app->DB->real_escape_string(empty($xml->extid) ? '' : $xml->extid) . "' - WHERE `id` = '$auftrag' - LIMIT 1" - ); - } - $auftragarr['belegnr'] = $belegnr; - if($_typ) - { - $auftragarr['typ'] = $_typ; - } - if(!empty($name)) { - $auftragarr['name'] = $name; - $auftragarr['abteilung'] = $abteilung; - $auftragarr['unterabteilung'] = $unterabteilung; - $auftragarr['ansprechpartner'] = $ansprechpartner; - $auftragarr['strasse'] = $strasse; - $auftragarr['bundesstaat'] = $bundesstaat; - $auftragarr['land'] = $land; - $auftragarr['plz'] = $plz; - $auftragarr['ort'] = $ort; - } - if(!empty($email)){ - $auftragarr['email'] = $email; - } - if(!empty($telefon)){ - $auftragarr['telefon'] = $telefon; - } - if(!empty($telefax)){ - $auftragarr['telefax'] = $telefax; - } - if(isset($xml->abweichendelieferadresse))$auftragarr['abweichendelieferadresse'] = (string)$xml->abweichendelieferadresse; - if(isset($xml->art))$auftragarr['art'] = (string)$xml->art; - if(isset($xml->bearbeiter))$auftragarr['bearbeiter'] = (string)$xml->bearbeiter; - if(isset($xml->datum))$auftragarr['datum'] = (string)$xml->datum; - if(isset($xml->lieferdatum))$auftragarr['lieferdatum'] = (string)$xml->lieferdatum; - if(!empty($xml->tatsaechlicheslieferdatum))$auftragarr['tatsaechlicheslieferdatum'] = (string)$xml->tatsaechlicheslieferdatum; - if(!empty($xml->lieferdatumkw))$auftragarr['lieferdatumkw'] = (string)$xml->lieferdatumkw; - if(isset($xml->ustid))$auftragarr['ustid'] = (string)$xml->ustid; - if(isset($xml->ust_befreit))$auftragarr['ust_befreit'] = (string)$xml->ust_befreit; - if(isset($xml->internet))$auftragarr['internet'] = (string)$xml->internet; - if(isset($xml->transaktionsnummer))$auftragarr['transaktionsnummer'] = (string)$xml->transaktionsnummer; - if(isset($xml->versandart))$auftragarr['versandart'] = (string)$xml->versandart; - if(isset($xml->vertrieb))$auftragarr['vertrieb'] = (string)$xml->vertrieb; - if(isset($xml->zahlungsweise))$auftragarr['zahlungsweise'] = (string)$xml->zahlungsweise; - if(isset($xml->freitext))$auftragarr['freitext'] = (string)$xml->freitext; - if(isset($xml->bank_inhaber))$auftragarr['bank_inhaber'] = (string)$xml->bank_inhaber; - if(isset($xml->bank_institut))$auftragarr['bank_institut'] = (string)$xml->bank_institut; - if(isset($xml->bank_blz))$auftragarr['bank_blz'] = (string)$xml->bank_blz; - if(isset($xml->bank_konto))$auftragarr['bank_konto'] = (string)$xml->bank_konto; - if(isset($xml->vorabbezahltmarkieren))$auftragarr['vorabbezahltmarkieren'] = (string)$xml->vorabbezahltmarkieren; - $auftragarr['autoversand'] ='1'; - if(isset($xml->abweichendelieferadresse))$auftragarr['abweichendelieferadresse'] = (string)$xml->abweichendelieferadresse; - if(isset($xml->ansprechpartner))$auftragarr['ansprechpartner'] = (string)$xml->ansprechpartner; - if(isset($xml->liefername))$auftragarr['liefername'] = (string)$xml->liefername; - if(isset($xml->lieferbundesstaat))$auftragarr['lieferbundesstaat'] = (string)$xml->lieferbundesstaat; - if(isset($xml->lieferland))$auftragarr['lieferland'] = (string)$xml->lieferland; - if(isset($xml->lieferstrasse))$auftragarr['lieferstrasse'] = (string)$xml->lieferstrasse; - if(isset($xml->lieferabteilung))$auftragarr['lieferabteilung'] = (string)$xml->lieferabteilung; - if(isset($xml->lieferunterabteilung))$auftragarr['lieferunterabteilung'] = (string)$xml->lieferunterabteilung; - if(isset($xml->lieferansprechpartner))$auftragarr['lieferansprechpartner'] = (string)$xml->lieferansprechpartner; - if(isset($xml->lieferort))$auftragarr['lieferort'] = (string)$xml->lieferort; - if(isset($xml->lieferplz))$auftragarr['lieferplz'] = (string)$xml->lieferplz; - if(isset($xml->lieferadresszusatz))$auftragarr['lieferadresszusatz'] = (string)$xml->lieferadresszusatz; - if(isset($xml->packstation_inhaber))$auftragarr['packstation_inhaber'] = (string)$xml->packstation_inhaber; - if(isset($xml->packstation_station))$auftragarr['packstation_station'] = (string)$xml->packstation_station; - if(isset($xml->packstation_ident))$auftragarr['packstation_ident'] = (string)$xml->packstation_ident; - if(isset($xml->packstation_plz))$auftragarr['packstation_plz'] = (string)$xml->packstation_plz; - if(isset($xml->packstation_ort))$auftragarr['packstation_ort'] = (string)$xml->packstation_ort; - if(isset($xml->partnerid))$auftragarr['partnerid'] = (string)$xml->partnerid; - if(isset($xml->kennen))$auftragarr['kennen'] = (string)$xml->kennen; - - if(isset($xml->ihrebestellnummer))$auftragarr['ihrebestellnummer'] = (string)$xml->ihrebestellnummer; - if(isset($xml->internebemerkung))$auftragarr['internebemerkung'] = (string)$xml->internebemerkung; - if(isset($xml->internebezeichnung))$auftragarr['internebezeichnung'] = (string)$xml->internebezeichnung; - - $auftragarr['status']='freigegeben'; - $auftragarr['projekt']=$projekt; - $auftragarr['zahlungszielskonto']=0; - if(isset($xml->gesamtsumme)){ - $auftragarr['gesamtsumme'] = (float)str_replace(',','.',$xml->gesamtsumme); - } - $auftragarr = $this->formatDateFieldsToMysqlFormat($auftragarr); - $this->app->DB->UpdateArr($typ, $auftrag, 'id', $auftragarr, true); - $this->app->erp->Standardprojekt($typ, $auftrag); - - foreach($auftrag_positionen as $position) - { - $artikel = null; - $newposid = null; - if(isset($position->artikelextid)) - { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '".$this->app->DB->real_escape_string((string)$position->artikelextid)."' LIMIT 1"); - if($artikel) - { - $newposid = $this->app->erp->AddPositionManuellPreisNummer($typ,$auftrag, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), - (isset($position->menge)?$position->menge:1) , - (isset($position->name)? $position->name:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), - isset($position->preis)? str_replace(',','.',$position->preis):$this->app->erp->GetVerkaufspreis($artikel,(isset($position->menge)?$position->menge:1),$adresse) , - $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1") , - 0,0, - isset($xml->waehrung)?$xml->waehrung:'EUR'); - } - } - if(!empty($position->ean) && !$artikel) - { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' LIMIT 1"); - if($artikel) - { - $newposid = $this->app->erp->AddPositionManuellPreisNummer($typ,$auftrag, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), - (isset($position->menge)?$position->menge:1) , - (isset($position->name)? $position->name:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), - isset($position->preis)? str_replace(',','.',$position->preis):$this->app->erp->GetVerkaufspreis($artikel,(isset($position->menge)?$position->menge:1),$adresse) , - $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1") , - 0,0, - isset($xml->waehrung)?$xml->waehrung:'EUR'); - } - } - if(isset($position->nummer) && !$artikel) - { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->nummer)."' LIMIT 1"); - $newposid = $this->app->erp->AddPositionManuellPreisNummer($typ,$auftrag, $projekt, $position->nummer, - (isset($position->menge)?$position->menge:1) , - (isset($position->name)? $position->name:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), - isset($position->preis)? str_replace(',','.',$position->preis):$this->app->erp->GetVerkaufspreis($artikel,(isset($position->menge)?$position->menge:1),$adresse) , - $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1") , - 0,0, - isset($xml->waehrung)?$xml->waehrung:'EUR'); - - } - if(!empty($newposid)) - { - if($typ === 'auftrag'){ - if(!empty($position->lieferdatum)){ - $deliveryDate = (string)$position->lieferdatum; - - if(strpos($deliveryDate, '.') !== false) { - $deliveryDate = $this->app->String->Convert($deliveryDate, '%1.%2.%3', '%3-%2-%1'); - } - - $this->app->DB->Update("UPDATE auftrag_position SET lieferdatum = '" . $deliveryDate . "' WHERE id = $newposid LIMIT 1"); - } - if(!empty($position->lieferdatumkw)){ - $this->app->DB->Update("UPDATE auftrag_position SET lieferdatumkw = '" . $position->lieferdatumkw . "' WHERE id = $newposid LIMIT 1"); - } - } - - $artikelnummerkunde = !empty($position->kundenartikelnummer)?(string)$position->kundenartikelnummer:$this->app->DB->real_escape_string( - $this->app->DB->Select( - "SELECT kundenartikelnummer - FROM verkaufspreise - WHERE adresse='$adresse' AND artikel='$artikel' AND kundenartikelnummer!='' AND ab_menge <=". - (float)(isset($position->menge)?$position->menge:1)." - AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') - ORDER by ab_menge DESC - LIMIT 1" - )); - - if($artikelnummerkunde == ''){ - // Anzeige Artikel Nummer von Gruppe aus Verkaufspreis - $returnwaehrung = null; - $gruppevkresult = $this->app->erp->GetVerkaufspreis( - $artikel, - (isset($position->menge)?$position->menge:1), - $adresse, - isset($xml->waehrung)?$xml->waehrung:'EUR', - $returnwaehrung, - true - ); - if($gruppevkresult['kundenartikelnummer'] != ''){ - $artikelnummerkunde = $gruppevkresult['kundenartikelnummer']; - } - } - - if(!empty($artikelnummerkunde)) { - $this->app->DB->Update( - sprintf( - "UPDATE `%s` SET `artikelnummerkunde` = '%s' WHERE `id` = %d ", - $typ.'_position', - $this->app->DB->real_escape_string($artikelnummerkunde), - $newposid - ) - ); - } - $positionFieldsToUpdate = []; - if($typ === 'retoure') { - foreach( - [ - 'grund', - 'grundbeschreibung', - 'beschreibung', - 'seriennummer', - 'internerkommentar', - 'bemerkung', - 'lieferdatum', - ] as $positionField - ) { - if(isset($position->$positionField)) { - $positionFieldValue = (string)$position->$positionField; - if(!empty($positionFieldValue)) { - if($positionField === 'lieferdatum' && strpos($positionFieldValue, '.') !== false) { - $positionFieldValue = $this->app->String->Convert($positionFieldValue, '%1.%2.%3', '%3-%2-%1'); - } - $positionFieldsToUpdate[$positionField] = $positionFieldValue; - } - } - } - } - for($indexFreeField = 1; $indexFreeField <= 40; $indexFreeField++) { - $positionField = 'freifeld'.$indexFreeField; - if(isset($position->$positionField)) { - $positionFieldValue = (string)$position->$positionField; - if(!empty($positionFieldValue)) { - $positionFieldsToUpdate[$positionField] = $positionFieldValue; - } - } - } - if(!empty($positionFieldsToUpdate)) { - $this->app->DB->UpdateArr($typ .'_position', $newposid, 'id', $positionFieldsToUpdate, true); - } - } - /*if($newposid > 0) - { - $this->app->erp->RunHook("beleg_afterinsertposition", 5, "auftrag",$auftrag,$artikel,(isset($position->menge)?$position->menge:1),$newposid); - }*/ - } - - $this->app->erp->LoadSteuersaetzeWaehrung($auftrag,$typ); - - $this->app->DB->Update(" - UPDATE $typ a - INNER JOIN adresse adr ON a.lieferant = adr.id - SET a.lieferantkdrnummer = if(a.lieferantennummer <> '',a.lieferantennummer,adr.lieferantennummer) - WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 1 AND a.id = '$auftrag' - "); - $this->app->DB->Update(" - UPDATE $typ a - INNER JOIN adresse adr ON a.adresse = adr.id - SET a.lieferantkdrnummer = if(a.kundennummer <> '',a.kundennummer, adr.kundennummer) - WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 0 AND a.id = '$auftrag' - "); - - if($typ == 'auftrag') - { - $reservierung = $this->app->DB->Select("SELECT reservierung FROM projekt WHERE id='$projekt' LIMIT 1"); - if($reservierung>=1){ - $this->app->erp->AuftragReservieren($auftrag); - } - $this->app->erp->AuftragNeuberechnen($auftrag); - $this->app->erp->AuftragEinzelnBerechnen($auftrag); - }elseif($typ == 'angebot') - { - $this->app->erp->AngebotNeuberechnen($auftrag); - } - - if(isset($xml->dateien)) { - foreach($xml->dateien as $datei) - { - foreach($datei as $singledatei) - { - $isfile = false; - $data = null; - if(is_file($singledatei->dateiname)){ - $type = mime_content_type(basename($singledatei->dateiname)); - if($type != 'text/x-php' && $type != 'text/php' && $type != 'application/php' && $type != 'application/x-php' && $type != 'application/x-httpd-php' && $type != 'application/x-httpd-php-source'){ - - if($singledatei->dateiinhalt == ''){ - $data = file_get_contents($singledatei->dateiname); - //$singledatei->dateiinhalt = base64_encode($dateiinhalt); - $isfile = true; - } - }else{ - $singledatei->dateiinhalt = ''; - } - } - if(empty($data)) - { - if($singledatei->dateiinhalt == '') - { - $data = ''; - }else{ - $data = base64_decode($singledatei->dateiinhalt); - } - } - if($isfile){ - $name = $this->app->erp->GetTmp().basename($singledatei->dateiname); - }else{ - $name = $this->app->erp->GetTmp().$singledatei->dateiname; - } - - file_put_contents($name, $data); - - $pfad = $this->app->Conf->WFuserdata; - $pfad = rtrim($pfad); - $pfad .= '/dms/'; - - if(!file_exists($pfad) && !mkdir($pfad, 0777, true) && !is_dir($pfad)) - { - $this->app->erp->LogFile($pfad.' konnte nicht erstellt werden'); - } - - $speicherpfad = $pfad.$this->app->Conf->WFdbname; - - if(!file_exists($speicherpfad) && !mkdir($speicherpfad, 0777, true) && - !is_dir($speicherpfad)) - { - $this->app->erp->LogFile($speicherpfad.' konnte nicht erstellt werden'); - } - - $fileid = $this->app->erp->CreateDatei($singledatei->dateiname, !empty($singledatei->titel)?$singledatei->titel:$singledatei->dateiname, !empty($singledatei->beschreibung)?(string)$singledatei->beschreibung:'', '', $name, '',true,$speicherpfad); - $subjekt = !empty($singledatei->subjekt)?(string)$singledatei->subjekt:'Sonstige'; - $this->app->erp->AddDateiStichwort($fileid, $subjekt, ucfirst($typ), $auftrag); - - if($isfile){ - @rename($singledatei->dateiname, $singledatei->dateiname.'.del'); - } - } - } - } - if(!empty($obj)){ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_ok', ucfirst($typ) . ' angelegt', '', '', '', $typ, $auftrag); - $this->app->erp->RunHook('transfer_document_incoming', 3, $uebertragungen_account, $typ, $auftrag); - } - } - }else - { - if(!empty($obj)){ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_error', 'Artikel nicht gefunden', $this->app->DB->real_escape_string((string)$element1), '', '', $typ); - } - } - }else{ - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Keine Positionen gefunden')"); - if(!empty($obj)){ - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_error', ucfirst($typ) . ' enthält keine Positinen', $this->app->DB->real_escape_string((string)$xml->extid), '', '', $typ); - } - } - }else{ - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Kundennummer ".$this->app->DB->real_escape_string((string)$xml->kundennummer)." nicht gefunden')"); - } - //}else{ - //$this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','auftrag','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','auftrag_fehler','Keine Kundennummer angegeben')"); - //} - }else - { - if($this->app->DB->Select("SELECT id FROM $typ WHERE shopextid = '".$this->app->DB->real_escape_string((empty($xml->extid))?'':$xml->extid)."' AND projekt = '$projekt' AND shopextid <> ''")) - { - $element1 = 'Shopextid: '.$xml->extid; - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ.'_error', ucfirst($typ).' existiert bereits', $this->app->DB->real_escape_string((string)$element1), '', '', $typ, $id); - }elseif($this->GetFromExtID($typ, $xml->belegnr)){ - if(!empty($obj)){ - $__id = $this->GetFromExtID($typ, $xml->belegnr); - $__auftrag = $this->app->DB->Select("SELECT belegnr FROM $typ WHERE id = '$__id' LIMIT 1"); - $element1 = "Belegnr: " . $__auftrag; - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_error', ucfirst($typ) . ' existiert bereits', $this->app->DB->real_escape_string((string)$element1), '', '', $typ, $id); - } - }else{ - if(!empty($obj)){ - $element1 = 'Belegnr: ' . $xml->belegnr; - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_error', ucfirst($typ) . ' existiert bereits', $this->app->DB->real_escape_string((string)$element1), '', '', $typ, $id); - } - } - } - - } - - /** - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - */ - public function ParsePartXmlDeliverynoteWithoutId(&$xml, $uebertragungen_account, $obj) - { - if(isset($xml->tracking)) { - if(!empty($xml->belegnr)) { - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','lieferschein','".(string)$xml->belegnr."','tracking_fehler','Lieferschein ".(string)$xml->belegnr." nicht gefunden')"); - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'tracking_error', 'Lieferschein '.(string)$xml->belegnr." nicht gefunden", $this->app->DB->real_escape_string((string)$xml->belegnr), '', '', 'lieferschein'); - } - } - } - - /** - * @param string $typ - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - */ - public function ParsePartXmlDocumentWithoutId($typ, &$xml, $uebertragungen_account, $obj) - { - switch($typ) { - case 'bestellung': - case 'produktion': - $this->ParsePartXmlSupplierorderProductionWithoutId($typ, $xml, $uebertragungen_account, $obj); - break; - case 'auftrag': - case 'angebot': - case 'retoure': - $this->ParsePartXmlOrderOfferWithoutId($typ, $xml, $uebertragungen_account, $obj); - break; - - case 'lieferschein': - $this->ParsePartXmlDeliverynoteWithoutId($xml, $uebertragungen_account, $obj); - if(isset($xml->tracking)) { - if(!empty($xml->belegnr)) { - $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','lieferschein','".(string)$xml->belegnr."','tracking_fehler','Lieferschein ".(string)$xml->belegnr." nicht gefunden')"); - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'tracking_error', 'Lieferschein '.(string)$xml->belegnr." nicht gefunden", $this->app->DB->real_escape_string((string)$xml->belegnr), '', '', 'lieferschein'); - } - } - break; - } - } - - /** - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - * @param int $id - */ - public function ParsePartXmlDeliveryNoteTracking(&$xml, $uebertragungen_account, $obj, $id) - { - if(!isset($xml->tracking)){ - return; - } - $tracking = (string)$xml->tracking; - if($tracking == '') { - return; - } - $versand = ''; - if(isset($xml->versandart)) { - $versand = (string)$xml->versandart; - } - $tracking_link = null; - $sprache = null; - if(!empty($xml->tracking_sprache) && (string)$xml->tracking_sprache){ - $sprache = (string)$xml->tracking_sprache; - } - if(!empty($xml->tracking_link) && (string)$xml->tracking_link){ - $tracking_link = (string)$xml->tracking_link; - } - $this->addTrackingToDeliveryNote( - $obj, - $id, - $tracking, - $versand, - $sprache, - $tracking_link - ); - - unset($kg); - unset($adresse); - unset($projekt); - unset($tracking); - unset($versand); - $lieferschein_positionen = null; - if(isset($xml->lieferschein_position_list)) { - if(isset($xml->lieferschein_position_list->lieferschein_position)) { - $lieferschein_positionen = &$xml->lieferschein_position_list->lieferschein_position; - } - } - elseif(isset($xml->lieferschein_position)){ - $lieferschein_positionen = &$xml->lieferschein_position; - } - if($lieferschein_positionen) { - foreach($lieferschein_positionen as $position) { - if(isset($position->sort) && !isset($position->lieferschein)){ - $position->lieferschein = $id; - } - $id_pos = $this->GetIDFromFeld('lieferschein_position', $position); - if($id_pos && isset($position->geliefert)) { - $check = $this->app->DB->SelectRow( - "SELECT * FROM lieferschein_position WHERE id = '$id_pos' AND lieferschein = '$id' LIMIT 1" - ); - if($check) { - $geliefert = round((float)$position->geliefert,4); - if($check['menge'] >= $geliefert){ - $this->app->DB->Update("UPDATE lieferschein_position SET geliefert = '$geliefert' WHERE id = '$id_pos' LIMIT 1"); - } - } - } - } - } - else { - $this->app->DB->Update("UPDATE lieferschein_position SET geliefert = menge WHERE lieferschein = '$id'"); - } - $this->app->DB->Update("UPDATE lieferschein SET status = 'versendet' WHERE id = '$id' LIMIT 1"); - } - - /** - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - * @param int $id - */ - public function ParsePartXmlDeliveryNoteBestBefore(&$xml, $uebertragungen_account, $obj, $id) - { - $lieferschein_positionen = null; - if(isset($xml->lieferschein_position_list)) { - if(isset($xml->lieferschein_position_list->lieferschein_position)) { - $lieferschein_positionen = &$xml->lieferschein_position_list->lieferschein_position; - } - } - elseif(isset($xml->lieferschein_position)){ - $lieferschein_positionen = &$xml->lieferschein_position; - } - if(empty($lieferschein_positionen)) { - return; - } - $lastPosId = 0; - foreach($lieferschein_positionen as $position) { - if(isset($position->sort) && !isset($position->lieferschein)){ - $position->lieferschein = $id; - } - $id_pos = $this->GetIDFromFeld('lieferschein_position', $position); - if($lastPosId === $id_pos) { - continue; - } - $lastPosId = $id_pos; - if(!isset($position->mhd_charge_block)) { - continue; - } - $sCount = (!empty($position->mhd_charge_block)?count($position->mhd_charge_block):0); - if($sCount > 0) { - $bestBefores = []; - foreach($position->mhd_charge_block as $mhd) { - $bestBefore = ['bestbefore' => '', 'batch' => '', 'amount' => 0]; - if(isset($mhd->mhd)) { - $bestBefore['bestbefore'] = (string)$mhd->mhd; - } - if(isset($mhd->charge)) { - $bestBefore['batch'] = (string)$mhd->charge; - } - if(isset($mhd->anzahl)) { - $bestBefore['amount'] = (string)$mhd->anzahl; - } - elseif(isset($mhd->menge)) { - $bestBefore['amount'] = (string)$mhd->menge; - } - if(empty($bestBefore['bestbefore']) && empty($bestBefore['batch'])) { - continue; - } - $bestBefores[] = $bestBefore; - } - if(empty($bestBefores)) { - continue; - } - $posDb = $this->app->DB->SelectRow( - sprintf( - 'SELECT dnp.id, dnp.`artikel`, art.mindesthaltbarkeitsdatum, art.chargenverwaltung, - dnp.menge, dnp.explodiert_parent, dnp.menge - FROM `lieferschein_position` AS `dnp` - INNER JOIN `artikel` AS `art` ON dnp.artikel = art.id - WHERE `dnp`.id = %d', - $id_pos - ) - ); - if(empty($posDb)) { - continue; - } - if((!empty($bestBefores)?count($bestBefores):0) === 1 && empty($bestBefores[0]['amount'])) { - $bestBefores[0]['amount'] = $posDb['menge']; - } - $posDb['menge'] = $this->app->erp->ReplaceMenge(1, $posDb['menge'], 1); - if($posDb['menge'] <= 0) { - continue; - } - $isBestBeforeArticle = !empty($posDb['mindesthaltbarkeitsdatum']); - $isBatchArticle = $posDb['chargenverwaltung'] > 0; - if(!$isBestBeforeArticle && !$isBatchArticle) { - if(empty($posDb['explodiert_parent'])) { - continue; - } - if(!empty($posDb['explodiert_parent'])) { - $posDb = $this->app->DB->SelectRow( - sprintf( - 'SELECT dnp.id, dnp.`artikel`, art.mindesthaltbarkeitsdatum,art.`chargenverwaltung`, - dnp.menge, dnp.explodiert_parent, dnp.menge - FROM `lieferschein_position` AS `dnp` - INNER JOIN `artikel` AS `art` ON dnp.artikel = art.id - WHERE `dnp`.id = %d', - $posDb['explodiert_parent'] - ) - ); - $isBestBeforeArticle = !empty($posDb['mindesthaltbarkeitsdatum']); - $isBatchArticle = $posDb['chargenverwaltung'] > 0; - if(!$isBestBeforeArticle && !$isBatchArticle) { - continue; - } - } - } - if($isBestBeforeArticle && $isBatchArticle){ - $dbBestbefores = $this->app->DB->SelectFirstCols( - sprintf( - "SELECT CONCAT(`wert`,'|', `wert2`) - FROM `beleg_chargesnmhd` - WHERE `wert` != '' AND `type` = 'mhd' AND `doctype` = 'lieferschein' - AND `doctypeid` = %d AND `pos` = %d - GROUP BY `wert`", - $id, $posDb['id'] - ) - ); - } - elseif($isBestBeforeArticle) { - $dbBestbefores = $this->app->DB->SelectFirstCols( - sprintf( - "SELECT `wert` - FROM `beleg_chargesnmhd` - WHERE `wert` != '' AND `type` = 'mhd' AND `doctype` = 'lieferschein' - AND `doctypeid` = %d AND `pos` = %d - GROUP BY `wert`", - $id, $posDb['id'] - ) - ); - } - elseif($isBatchArticle) { - $dbBestbefores = $this->app->DB->SelectFirstCols( - sprintf( - "SELECT `wert` - FROM `beleg_chargesnmhd` - WHERE `wert` != '' AND `type` = 'charge' AND `doctype` = 'lieferschein' - AND `doctypeid` = %d AND `pos` = %d - GROUP BY `wert`", - $id, $posDb['id'] - ) - ); - } - if(empty($dbBestbefores)){ - $dbBestbefores = []; - } - foreach ($bestBefores as $bestBefore) { - if($isBestBeforeArticle && $isBatchArticle){ - $bestBeforeConcat = $bestBefore['bestbefore'] . '|' . $bestBefore['batch']; - } - elseif($isBestBeforeArticle){ - $bestBeforeConcat = $bestBefore['bestbefore']; - } - elseif($isBatchArticle){ - $bestBeforeConcat = $bestBefore['batch']; - } - - if(!in_array($bestBeforeConcat, $dbBestbefores)){ - if($isBestBeforeArticle && $isBatchArticle){ - $this->app->erp->CreateBelegPositionMHDCHARGESRN( - 'lieferschein', $id, $posDb['id'], 'mhd', $bestBefore['bestbefore'], $bestBefore['amount'], - 'charge', $bestBefore['batch'], 0, 'API Eingang' - ); - - $this->app->erp->CreateBelegPositionMHDCHARGESRN( - 'lieferschein', $id, $posDb['id'], 'charge', $bestBefore['batch'], $bestBefore['amount'], - '', '', 0, 'API Eingang' - ); - } - elseif($isBestBeforeArticle) { - $this->app->erp->CreateBelegPositionMHDCHARGESRN( - 'lieferschein', $id, $posDb['id'], 'mhd', $bestBefore['bestbefore'], $bestBefore['amount'], - '','', 0, 'API Eingang' - ); - } - elseif($isBatchArticle) { - $this->app->erp->CreateBelegPositionMHDCHARGESRN( - 'lieferschein', $id, $posDb['id'], 'charge', $bestBefore['batch'], $bestBefore['amount'], - '', '', 0, 'API Eingang' - ); - } - } - } - } - } - } - - - /** - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - * @param int $id - */ - public function ParsePartXmlDeliveryNoteSerials(&$xml, $uebertragungen_account, $obj, $id) - { - $lieferschein_positionen = null; - if(isset($xml->lieferschein_position_list)) { - if(isset($xml->lieferschein_position_list->lieferschein_position)) { - $lieferschein_positionen = &$xml->lieferschein_position_list->lieferschein_position; - } - } - elseif(isset($xml->lieferschein_position)){ - $lieferschein_positionen = &$xml->lieferschein_position; - } - if(empty($lieferschein_positionen)) { - return; - } - $lastPosId = 0; - foreach($lieferschein_positionen as $position) { - if(isset($position->sort) && !isset($position->lieferschein)){ - $position->lieferschein = $id; - } - $id_pos = $this->GetIDFromFeld('lieferschein_position', $position); - if($lastPosId === $id_pos) { - continue; - } - $lastPosId = $id_pos; - if(!isset($position->serial)) { - continue; - } - $sCount = (!empty($position->serial)?count($position->serial):0); - if($sCount > 0) { - $serials = []; - foreach($position->serial as $serial) { - $serials[] = (string)$serial; - } - $posDb = $this->app->DB->SelectRow( - sprintf( - 'SELECT dnp.id, dnp.`artikel`, art.seriennummern, dnp.menge, dnp.explodiert_parent - FROM `lieferschein_position` AS `dnp` - INNER JOIN `artikel` AS `art` ON dnp.artikel = art.id - WHERE `dnp`.id = %d', - $id_pos - ) - ); - if(empty($posDb)) { - continue; - } - if((string)$posDb['seriennummern'] === '' - || (string)$posDb['seriennummern'] === 'keine') { - if(empty($posDb['explodiert_parent'])) { - continue; - } - if(!empty($posDb['explodiert_parent'])) { - $posDb = $this->app->DB->SelectRow( - sprintf( - 'SELECT dnp.id, dnp.`artikel`, art.seriennummern, dnp.menge, dnp.explodiert_parent - FROM `lieferschein_position` AS `dnp` - INNER JOIN `artikel` AS `art` ON dnp.artikel = art.id - WHERE `dnp`.id = %d', - $id_pos - ) - ); - if((string)$posDb['seriennummern'] === '' - || (string)$posDb['seriennummern'] === 'keine') { - continue; - } - } - } - $dbSerials = $this->app->DB->SelectFirstCols( - sprintf( - "SELECT `wert` - FROM `beleg_chargesnmhd` - WHERE `wert` != '' AND `type` = 'sn' AND `doctype` = 'lieferschein' - AND `doctypeid` = %d AND `pos` = %d - GROUP BY `wert`", - $id, $posDb['id'] - ) - ); - foreach($serials as $serial) { - if(!in_array($serial, $dbSerials)) { - $this->app->erp->CreateBelegPositionMHDCHARGESRN( - 'lieferschein',$id,$posDb['id'],'sn',$serial,1,'','',0,'API Eingang' - ); - $dbSerials[] = $serial; - } - } - } - } - } - - /** - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - * @param int $id - */ - public function ParsePartXmlDeliveryNoteWithId(&$xml, $uebertragungen_account, $obj, $id) - { - if(isset($xml->tracking)){ - $this->ParsePartXmlDeliveryNoteTracking($xml, $uebertragungen_account, $obj, $id); - } - $this->ParsePartXmlDeliveryNoteBestBefore($xml, $uebertragungen_account, $obj, $id); - $this->ParsePartXmlDeliveryNoteSerials($xml, $uebertragungen_account, $obj, $id); - } - - /** - * @param string $typ - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - * @param int $id - */ - public function ParsePartXmlDocumentWithId($typ, &$xml, $uebertragungen_account, $obj, $id) - { - switch($typ) { - case 'auftrag': - case 'angebot': - case 'bestellung': - case 'produktion': - $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ.'_error', ucfirst($typ).' existiert bereits', $this->app->DB->real_escape_string(!empty($xml->belegnr)?(string)$xml->belegnr:$id), '', '', $typ, $id); - break; - case 'lieferschein': - $this->ParsePartXmlDeliveryNoteWithId($xml, $uebertragungen_account, $obj, $id); - break; - } - } - - /** - * @param string $typ - * @param $xml - * @param int $uebertragungen_account - * @param Uebertragungen $obj - */ - public function ParsePartXmlDocument($typ, &$xml, $uebertragungen_account, $obj) - { - if($typ !== 'auftrag' && $typ !== 'angebot' && $typ !== 'bestellung' && $typ !== 'produktion') { - $id = $this->GetIDFromFeld($typ, $xml); - } - elseif(isset($xml->belegnr) && strtoupper((string)$xml->belegnr) !== 'NEW' && strtoupper((string)$xml->belegnr) !== 'NEU'){ - $id = $this->GetFromExtID($typ, $xml->belegnr, $xml); - } - else { - $id = null; - } - if(!$id && $typ === 'lieferschein' && isset($xml->auftragextid) && $xml->auftragextid != "") { - $projekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '$uebertragungen_account' LIMIT 1"); - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); - if($eigenernummernkreis) { - $auftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr = '".$this->app->DB->real_escape_string($xml->auftragextid)."' AND projekt = '$projekt' LIMIT 1"); - } - else{ - $auftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr = '".$this->app->DB->real_escape_string($xml->auftragextid)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); - } - if($auftrag) { - $id = $this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid = '$auftrag' AND status <> 'stoniert' AND belegnr != '' LIMIT 1"); - if(!$id && !$this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid = '$auftrag' LIMIT 1")) { - $id = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($auftrag); - if($id) { - $this->app->erp->BelegFreigabe('lieferschein', $id); - $this->app->DB->Update("UPDATE lieferschein SET status = 'versendet' AND schreibschutz = 1 WHERE id = '$id' LIMIT 1"); - } - } - } - } - if($id) { - $this->ParsePartXmlDocumentWithId($typ, $xml, $uebertragungen_account, $obj, $id); - } - else{ - //Beleg nicht gefunden - $this->ParsePartXmlDocumentWithoutId($typ, $xml, $uebertragungen_account, $obj); - } - } - - /** - * @param $typ - * @param $xml - * @param $uebertragungen_account - */ - public function ParseTeilXML($typ, &$xml, $uebertragungen_account) - { - $typen = $this->getTabellen(); - $belege = $this->getBelege(); - $is_beleg = in_array($typ, $belege); - $is_typ = false; - - if($uebertragungen_account) { - /** @var Uebertragungen $obj */ - $obj = $this->app->erp->LoadModul('uebertragungen'); - if($obj) { - $obj->datei_id = $this->datei_id; - } - } - if($uebertragungen_account) { - if(!$this->isAllowedToImport($uebertragungen_account, $obj, $typ)){ - return; - } - } - - if(!$is_beleg){ - $is_typ = in_array($typ, $typen); - } - if(!$is_typ && !$is_beleg) { - return; - } - - $this->UpdateMappingXML($typ, $xml); - - if($is_beleg) { - $this->ParsePartXmlDocument($typ, $xml, $uebertragungen_account, $obj); - } - elseif($is_typ) { - $this->ParsePartXmlType($typ, $xml, $uebertragungen_account, $obj); - } - } - - /** - * @param int $deliveryNoteId - * @param string $tracking - * @param string $deliveryType - * @param string $language - * @param string $trackingLink - * - * @return bool|int - */ - public function createShipmentByDeliveryNote($deliveryNoteId, $tracking, $deliveryType = '', $language = '', $trackingLink = '') - { - $deliveryNote = $this->app->DB->SelectRow( - sprintf( - 'SELECT adresse,projekt,auftragid, versandart FROM lieferschein WHERE id = %d LIMIT 1', - $deliveryNoteId - ) - ); - if(empty($deliveryNote)) { - return false; - } - $addressId = $deliveryNote['adresse']; - $projectId = $deliveryNote['projekt']; - $orderId = $deliveryNote['auftragid']; - - if($deliveryType == '') { - $deliveryType = $deliveryNote['versandart']; - } - $kg = $this->app->erp->VersandartMindestgewicht($deliveryNoteId); - - //$tracking = $this->app->erp->TrackingNummerAnpassen($projekt,$tracking); - $tracking = $this->app->DB->real_escape_string($tracking); - - if($deliveryType === 'versandunternehmen'){ - $deliveryType = (string)$this->app->erp->Firmendaten('versandart'); - } - $versandid = false; - if( - !$this->app->DB->Select( - sprintf( - "SELECT id FROM versand WHERE tracking = '%s' AND lieferschein = %d LIMIT 1", - $tracking, $deliveryNoteId - ) - ) - ) { - $keinetrackingmail = 0; - if($orderId) { - $keinetrackingmail = (int)$this->app->DB->Select( - sprintf( - "SELECT keinetrackingmail FROM auftrag WHERE id = %d LIMIT 1", $orderId - ) - ); - } - $versandid = $this->app->DB->Select( - sprintf( - "SELECT id - FROM versand - WHERE lieferschein = %d AND tracking = '' - ORDER BY weitererlieferschein, improzessuser - LIMIT 1", - $deliveryNoteId - ) - ); - if($versandid) { - $this->app->DB->Update( - sprintf( - "UPDATE versand - SET versandunternehmen = '%s', versandart = '%s', tracking = '%s', tracking_link = '%s', - versendet_am = NOW(), abgeschlossen = 1, lieferschein = %d, freigegeben = 1, firma = 1, adresse = %d, - projekt = %d, gewicht = %f, paketmarkegedruckt = 1, anzahlpakete = 1, keinetrackingmail = %d, - improzessuser = 0, improzess = 0 - WHERE id = %d", - $deliveryType, $deliveryType, $tracking, $trackingLink , - (int)$deliveryNoteId, (int)$addressId, - (int)$projectId, (float)$kg, $keinetrackingmail, - $versandid - ) - ); - if($this->app->DB->affected_rows() > 0) { - return $versandid; - } - } - - $this->app->DB->Insert( - sprintf( - "INSERT INTO versand (versandunternehmen,versandart, tracking, tracking_link, - versendet_am,abgeschlossen,lieferschein, freigegeben,firma, - adresse,projekt,gewicht,paketmarkegedruckt,anzahlpakete,keinetrackingmail, - logdatei,versender,bearbeiter,download,rechnung) - VALUES ('%s','%s','%s','%s', - NOW(),1,%d, 1,1, - %d,%d,%f,1,1,%d,NOW(),'','',0,0) ", - $deliveryType, $deliveryType, $tracking, $trackingLink , - (int)$deliveryNoteId, - (int)$addressId, (int)$projectId, (float)$kg, $keinetrackingmail - ) - ); - $versandid = $this->app->DB->GetInsertID(); - } - - return $versandid; - } - - /** - * @param Uebertragungen $transferobject - * @param int $deliveryNoteId - * @param string $tracking - * @param string $deliveryType - * @param string $language - * @param string $trackingLink - */ - public function addTrackingToDeliveryNote( - $transferobject, - $deliveryNoteId, - $tracking, - $deliveryType = '', - $language = '', - $trackingLink = '' - ) { - $versandid = $this->createShipmentByDeliveryNote( - $deliveryNoteId, - $tracking, - $deliveryType, - $language, - $trackingLink - ); - if(empty($versandid)) { - return; - } - - $deliveryNote = $this->app->DB->SelectRow( - sprintf( - 'SELECT adresse, projekt, auftragid, versandart FROM lieferschein WHERE id = %d LIMIT 1', - $deliveryNoteId - ) - ); - - if(empty($deliveryNote)) { - return; - } - if(!empty($this->uebertragung_account) && !empty($deliveryType) && $deliveryType !== $deliveryNote['versandart']) { - if(!empty( - $this->app->DB->Select( - "SELECT `update_shipping_method` - FROM `uebertragungen_account` - WHERE `id` = {$this->uebertragung_account}" - ) - ) - ) { - $shippingMethodEscaped = $this->app->DB->real_escape_string($deliveryType); - $isShippingMethodExists = !empty( - $this->app->DB->Select( - "SELECT `id` FROM `versandarten` WHERE `aktiv` = 1 AND `type` = '{$shippingMethodEscaped}' LIMIT 1" - )); - if($isShippingMethodExists) { - $this->app->DB->Update( - "UPDATE `lieferschein` SET `versandart` = '$shippingMethodEscaped' WHERE `id` = {$deliveryNoteId}" - ); - $deliveryNote['versandart'] = $deliveryType; - } - } - } - - $orderId = $deliveryNote['auftragid']; - - if($transferobject) { - if($orderId) { - $this->app->erp->AuftragProtokoll($orderId, 'Rückmeldung durch Übertragenmodul'); - } - $this->app->erp->LieferscheinProtokoll($deliveryNoteId,'Rückmeldung durch Übertragenmodul'); - } - - $tranferRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT trackingmail, autoshopexport FROM uebertragungen_account WHERE id = %d LIMIT 1', - $this->uebertragung_account - ) - ); - - if(!empty($this->app->remote) && (empty($transferobject) || !empty($tracking) || empty($tranferRow['autoshopexport']))) { - $this->app->erp->VersandAbschluss($versandid); - } - $tracking_link = null; - $sprache = null; - if(!empty($language)){ - $sprache = $language; - } - if(!empty($trackingLink)){ - $tracking_link = $trackingLink; - } - if(!empty($sprache)){ - $sprache = strtolower(trim($sprache)); - } - if($sprache === 'english'){ - $sprache = 'englisch'; - } - if(empty($sprache)) { - $sprache = $this->app->DB->Select( - sprintf('SELECT sprache FROM lieferschein WHERE id = %d LIMIT 1',$deliveryNoteId) - ); - if(empty($sprache) && $orderId){ - $sprache = $this->app->DB->Select( - sprintf('SELECT sprache FROM auftrag WHERE id = %d LIMIT 1', $orderId) - ); - } - } - if($tranferRow['trackingmail']) { - $this->app->erp->Versandmail($versandid, $tracking_link, $sprache, $tracking, true); - } - /** @var Versanderzeugen $objVersanderzeugen */ - $objVersanderzeugen = $this->app->erp->LoadModul('versanderzeugen'); - if($objVersanderzeugen && method_exists($objVersanderzeugen,'CheckKommissionierungByLieferschein')) { - $objVersanderzeugen->CheckKommissionierungByLieferschein($deliveryNoteId); - } - //Rechnungsmail - $invoceId= $this->app->DB->Select( - sprintf( - "SELECT id FROM rechnung where auftragid = %d and status <> 'storniert' LIMIT 1", - $orderId - ) - ); - if(!$invoceId && $this->app->DB->Select( - sprintf( - 'SELECT rechnunganlegen FROM uebertragungen_account WHERE id = %d LIMIT 1', - (int)$this->uebertragung_account - ) - )) - { - $invoceId = $this->app->erp->WeiterfuehrenAuftragZuRechnung($orderId); - $this->app->erp->BelegFreigabe('rechnung', $invoceId); - $invoiceDocument = 'rechnung'; - $transferAccountId = (int)$this->uebertragung_account; - $this->app->erp->RunHook( - 'transfer_document_incoming', 3, $transferAccountId, $invoiceDocument, $invoceId - ); - } - if($this->app->DB->Select( - sprintf( - "SELECT rechnungmail FROM uebertragungen_account WHERE id = %d LIMIT 1", - (int)$this->uebertragung_account - ) - )) - { - if($invoceId && (int)$this->app->DB->Select( - sprintf( - "SELECT count(id) FROM versand WHERE tracking <> '' AND lieferschein = %d", - $deliveryNoteId - ) - ) < 2) - { - if($this->app->DB->Select(sprintf("SELECT soll FROM rechnung WHERE id = %d LIMIT 1", $invoceId)) > 0){ - $this->app->erp->Rechnungsmail($invoceId); - } - } - } - $element1 = $tracking; - if($transferobject) { - $transferobject->AddUbertragungMonitorLog( - $this->uebertragung_account, - $this->datei_id, - 0, - 'tracking_ok', - '', - $element1, - '', - '', - 'versand', - $versandid - ); - } - $this->app->DB->Insert( - sprintf( - "INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) - VALUES (%d,'lieferschein',%d,'tracking','%s')", - (int)$this->uebertragung_account,(int)$deliveryNoteId,$tracking - ) - ); - } - - function LoadFromXML($dateiname, $isfile = true) - { - if(!$isfile || is_file($dateiname)) - { - if($isfile) - { - $content = file_get_contents($dateiname); - }else{ - $content = $dateiname; - } - $xml = @simplexml_load_string($content,null, LIBXML_NOCDATA);// true, true, $action); - if($xml === false || is_null($xml)) - { - $xml = json_decode($content); - } - return $xml; - } - return false; - } - - /** - * @param string $string - * - * @return string - */ - public function EntferneSteuerzeichen($string) - { - $len = strlen($string); - $out = ''; - for($i = 0; $i < $len; $i++) { - $ord = ord($string[$i]); - if($ord != 127 && ($ord > 31 || $ord == 13 || $ord == 10 || $ord == 9)) { - $out .= $string[$i]; - } - } - - return $out; - } - - public function SaveXML(&$xml, $dateiname, $action = '', $tag = '') - { - if(!$dateiname) { - return false; - } - if(!$xml) { - return false; - } - - $content = $this->XMLResponse(1,$xml, true, true, $action); - if(empty($content)) { - return false; - } - - if(strpos($dateiname,'/') === false) { - $dateiname = rtrim($this->app->Config->WFuserdata,'/').'/'.$dateiname; - } - $folder = dirname($dateiname); - if($folder !== '.' && !is_dir($folder) && !mkdir($folder,0700,true) && !is_dir($folder)) { - $this->app->erp->LogFile($folder.' konnte nicht erstellt werden'); - } - $content = $this->EntferneSteuerzeichen($content); - if(!empty($tag)) { - $content = str_replace($tag,$tag."\n",$content); - } - - $erg = file_put_contents($dateiname, $content); - return $erg !== false; - } - - function CreateXmlObj() - { -$xmlstr = << - - -XML; - return new SimpleXMLExtended($xmlstr); - } - - public function ApiZeiterfassungEdit($id = null) - { - $xml = $this->XMLPost(); - if(!$id) - { - $id = (int)$this->app->Secure->GetGET('id'); - } - if(!empty($xml['id'])) - { - $id = (int)$xml['id']; - } - if(!$id) - { - $this->XMLResponse(5); - } - if($id && $zeiterfassungen = $this->app->DB->SelectArr("SELECT * FROM zeiterfassung WHERE id = '$id' LIMIT 1")) - { - foreach($xml as $k => $v) - { - if($k != 'id' && array_key_exists($k,$zeiterfassungen[0])) - { - if(($k != 'von' || $v != '') && ($k != 'bis' || $v != '')) - { - $arr[] = " $k = '".$this->app->DB->real_escape_string($v)."' "; - }else{ - $arr[] = " $k = '0000-00-00' "; - } - } - if($k !== 'id' && $k === 'mitarbeiternummer'){ - $mitarbeiterid = $this->app->DB->Select("SELECT id FROM adresse where mitarbeiternummer = '".$this->app->DB->real_escape_string($v)."' AND mitarbeiternummer <> '' AND geloescht=0 LIMIT 1"); - if($mitarbeiterid){ - $arr[] = " adresse = '$mitarbeiterid' "; - } - } - } - if(isset($arr)) - { - $this->app->DB->Update("UPDATE zeiterfassung SET ".implode(', ',$arr)." WHERE id = '$id' LIMIT 1"); - } - $this->XMLResponse(1); - }else{ - $this->XMLResponse(8); - } - $this->app->ExitXentral(); - } - - public function ApiZeiterfassungDelete() - { - $xml = $this->XMLPost(); - $id = (int)$this->app->Secure->GetGET('id'); - if(!empty($xml['id'])) - { - $id = (int)$xml['id']; - } - if($id && $this->app->DB->Select("SELECT id FROM zeiterfassung WHERE id = '$id' LIMIT 1")) - { - $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id = '$id' LIMIT 1"); - $this->XMLResponse(1); - }else{ - $this->XMLResponse(8); - } - $this->app->ExitXentral(); - } - - public function ApiZeiterfassungCreate() - { - $xml = $this->XMLPost(); - if((!empty($xml['mitarbeiternummer']) || !empty($xml['adresse'])) && !empty($xml['aufgabe']) && !empty($xml['von']) && !empty($xml['bis'])) - { - $this->app->DB->Insert("INSERT INTO zeiterfassung (id) values ('')"); - $id = $this->app->DB->GetInsertID(); - if($id) - { - $this->ApiZeiterfassungEdit($id); - }else{ - $this->XMLResponse(5); - } - }else{ - $this->XMLResponse(5); - } - $this->app->ExitXentral(); - } - - public function ApiZeiterfassungGet() - { - $xml = $this->XMLPost(); - $where = "1"; - $offset = 0; - $limit = 1000000; - if(!empty($xml['offset']))$offset = (int)$xml['offset']; - if($offset < 0)$offset = 0; - if(!empty($xml['limit']))$limit = (int)$xml['limit']; - if($limit <= 0)$limit = 1; - if(!empty($xml['adresse'])) - { - $where .= " AND adresse = '".((int)$xml['adresse'])."' "; - }elseif(!empty($xml['kundennummer'])) - { - $projekt = 0; - if(!empty($xml['projekt'])) - { - if(is_numeric($xml['projekt'])) - { - $projekt = (int)$xml['projekt']; - }else{ - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($xml['projekt'])."' LIMIT 1"); - } - } - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer <> '' AND geloescht <> 1 AND kundennummer = '".$this->app->DB->real_escape_string($xml['kundennummer'])."' ".(!empty($xml['projekt'])?" AND projekt = '$projekt' ":'')." LIMIT 1 "); - $where .= " AND adresse = '$adresse' "; - } - if(!empty($xml['von'])) - { - if(strlen($xml['von'] > 11)) - { - $where .= "AND ((von != '0000-00-00' AND von >= '".$this->app->DB->real_escape_string($xml['von'])."') OR (bis != '0000-00-00' AND bis >= '".$this->app->DB->real_escape_string($xml['von'])."') ) "; - }else{ - $where .= "AND ((von != '0000-00-00' AND date(von) >= '".$this->app->DB->real_escape_string($xml['von'])."') OR (bis != '0000-00-00' AND date(bis) >= '".$this->app->DB->real_escape_string($xml['von'])."') ) "; - } - } - if(!empty($xml['bis'])) - { - if(strlen($xml['bis'] > 11)) - { - $where .= "AND ((von != '0000-00-00' AND von <= '".$this->app->DB->real_escape_string($xml['bis'])."') OR (bis != '0000-00-00' AND bis <= '".$this->app->DB->real_escape_string($xml['bis'])."') ) "; - }else{ - $where .= "AND ((von != '0000-00-00' AND date(von) <= '".$this->app->DB->real_escape_string($xml['bis'])."') OR (bis != '0000-00-00' AND date(bis) <= '".$this->app->DB->real_escape_string($xml['bis'])."') ) "; - } - } - $xml_obj = $this->CreateXmlObj(); - $zeiterfassungen = $this->app->DB->SelectArr("SELECT * FROM zeiterfassung WHERE $where LIMIT $offset, $limit"); - if($zeiterfassungen) - { - $this->AddToXMLObj($xml_obj, 'zeiterfassung', 'zeiterfassungen',$zeiterfassungen); - } - - $this->XMLResponse(1,$xml_obj, true, false); - $this->app->ExitXentral(); - } - - function ReplaceUmlauteArray(&$arr, $lvl = 0) - { - if($lvl > 10) { - return; - } - if(is_array($arr)) { - foreach($arr as $elk => $elv) { - $this->ReplaceUmlauteArray($arr[$elk], $lvl + 1); - } - } - elseif(is_string($arr)) { - $arr = str_replace( - array('ü','ö','ä','Ü','Ö','Ä','ß'), - array('ü','ö','ä','Ü','Ö','Ä','ß'), - $arr - ); - } - } - - function AddElements(&$xml, $array,$name, $lvl = 0) - { - if($lvl > 10) { - return; - } - if(!is_array($array)){ - return; - } - $first = true; - foreach($array as $k => $v) { - if(is_numeric($k)) { - if(is_array($v)) { - if($first) { - if(isset($xml->$name)) { - $this->AddElements($xml->$name, $v, $name, $lvl+1); - } - else{ - $child = $xml->AddChild($name,''); - $this->AddElements($child, $v, $name, $lvl+1); - } - } - else{ - $child = $xml->AddChild($name,''); - $this->AddElements($child, $v, $name, $lvl+1); - } - } - else{ - $xml->AddChild($name, $v); - } - } - else{ - if(is_array($v)) { - if($k != $name) - { - $parent = $xml->AddChild($name, ''); - $name = $k; - $this->AddElements($parent, $v, $k, $lvl+1); - //$child = $parent->AddChild($k, ''); - } - else{ - $child = $xml->AddChild($k, ''); - $this->AddElements($child, $v, $k, $lvl+1); - } - } - else{ - if(isset($xml->$k)) { - $xml->$k = $v; - } - else{ - $child = $xml->AddChild($k, $v); - } - } - } - $first = false; - } - } - - function AddToXMLObj(&$xml_obj, $elementname, $parentelementname, $data, &$toelment = null, &$erg = null) - { - $this->ReplaceUmlauteArray($data); - - if($toelment === null) { - if($xml_obj === null) { - $xml_obj = $this->CreateXmlObj(); - } - if(!isset($xml_obj->xml)) - { - $xml_obj->AddChild('xml',''); - } - if(is_array($data)) - { - if($parentelementname) - { - if(isset($xml_obj->xml->$parentelementname)) - { - $parent = $xml_obj->xml->$parentelementname; - }else{ - $parent = $xml_obj->xml->AddChild($parentelementname,''); - } - foreach($data as $k => $c) - { - $child = $parent->AddChild($elementname, ''); - if(is_array($c)) - { - foreach($c as $key => $value) - { - if(is_array($value)) - { - $this->AddElements($child, $value, is_numeric($key)?$elementname:$key); - }else{ - $child->$key = $value; - } - } - } - } - $erg = $child; - } - else{ - if(isset($data[0])) { - foreach($data as $k => $c) { - $child = $xml_obj->xml->AddChild($elementname, ''); - if(is_array($c)) { - foreach($c as $key => $value) { - $child->$key = $value; - } - } - } - $erg = $child; - } - else{ - $child = $xml_obj->xml->AddChild($elementname, ''); - foreach($data as $key => $value) { - $child->$key = $value; - } - $erg = $child; - } - } - } - else{ - $child = $xml_obj->xml->AddChild($elementname, $data); - $erg = $child; - } - } - else{ - if(is_array($data)) - { - if($parentelementname) - { - if(isset($toelment->$parentelementname)) - { - $parent = $toelment->$parentelementname; - }else{ - $parent = $toelment->AddChild($parentelementname,''); - } - foreach($data as $k => $c) - { - $child = $parent->AddChild($elementname, ''); - if(is_array($c)) - { - foreach($c as $key => $value) - { - $child->$key = $value; - } - } - $erg = $child; - } - } - else{ - if(isset($data[0])) - { - foreach($data as $k => $c) - { - $child = $toelment->AddChild($elementname, ''); - if(is_array($c)) - { - foreach($c as $key => $value) - { - $child->$key = $value; - } - } - $erg = $child; - } - }else{ - $toelment->$elementname = $data; - $erg = $toelment->$elementname; - } - } - }else{ - $child = $toelment->AddChild($elementname, $data); - $erg = $child; - } - } - } - - function XmlToJSON($xml) - { - $simplexml = simplexml_load_string($xml, null, LIBXML_NOCDATA); - $array = $this->ObjectToArray($simplexml); - - return json_encode($array); - } - - function ObjectToArray($object) - { - $array = (array)$object; - if (empty($array)) { - return ''; - } - - foreach ($array as $key => $value) { - if (is_object($value) || is_array($value)) { - $array[$key] = $this->ObjectToArray($value); - } - } - - return $array; - } - - function XMLResponse($messagecode,$xml_inside="", $xml_obj = false, $return = false, $action = '') - { - - if(!$action) - { - if(isset($this->app->Secure)) { - $action = $this->app->Secure->GetGET("action"); - } - } - if($xml_obj) - { - if(!isset($xml_inside->status))$status = $xml_inside->AddChild('status',''); - if(!isset($xml_inside->status->action))$xml_inside->status->AddChild('action',$action); - if(!isset($xml_inside->status->message))$xml_inside->status->AddChild('message',utf8_encode($this->MessageCode($messagecode))); - if(!isset($xml_inside->status->messageCode))$xml_inside->status->AddChild('messageCode',$messagecode); - if($return) - { - if($this->usejson) - { - return $this->XmlToJSON($xml_inside->asXML()); - }else - return $xml_inside->asXML(); - } - if($this->usejson) - { - header('Content-Type: application/json; charset=utf-8'); - echo $this->XmlToJSON($xml_inside->asXML()); - }else { - header('Content-Type: application/xml; charset=utf-8'); - echo $xml_inside->asXML(); - } - $this->app->ExitXentral(); - } - - // if further xml is given - $append = ""; - if($xml_inside!="") - { - //$md5sum = md5($xml_inside); - - //$append = ''.$md5sum.''; - if($this->usejson) { - $append .=''.$xml_inside.''; - }else - $append .=''.$xml_inside.''; - } - - if($this->usejson) { - header('Content-Type: application/json; charset=utf-8'); - echo $this->XmlToJSON(" - - - $action - " . utf8_encode($this->MessageCode($messagecode)) . " - " . $messagecode . " - - " . $append . " - "); - - } - else{ - header('Content-Type: application/xml; charset=utf-8'); - - echo " - - - $action - " . utf8_encode($this->MessageCode($messagecode)) . " - " . $messagecode . " - - " . $append . " - "; - } - $this->app->ExitXentral(); - } - - /** - * @param mixed $arr - * @param bool $escape - * - * @return void - */ - public function XMLCleanUTF8( &$arr, $escape = false, $isHtmlTransformation = false ): void - { - if(empty($arr) || !is_array($arr)) { - return; - } - - foreach ($arr as $idx => $value) { - if (is_array($value)) { - $this->XMLCleanUTF8($arr[$idx], $escape, $isHtmlTransformation); - continue; - } - if (!is_string($value)) { - continue; - } - if($escape) { - $arr[$idx] = $this->app->DB->real_escape_string($value); - continue; - } - - $arr[$idx] = $this->app->erp->ConvertForDBUTF8($value, true, $isHtmlTransformation); - } - } - - - function XMLClean( &$arr, $isHtmlTransformation = false ) { - if($arr && is_array($arr)) { - foreach ($arr as $idx => $value) { - if (is_array($value)) $this->XMLClean($arr[$idx], $isHtmlTransformation); - else { - if (is_string($value)) { - if (mb_detect_encoding($value, 'UTF-8, ISO-8859-1') === 'UTF-8') - $arr[$idx] = $this->app->erp->ConvertForDB($value, true, $isHtmlTransformation); - else - $arr[$idx] = $this->app->erp->ConvertForDBUTF8($value, true, $isHtmlTransformation); - } - } - } - } - } - - function XMLPostPlain() - { - $xml = $this->app->Secure->POST["xml"]; - - if($this->app->Secure->GetGET('cdata')) - { - $this->usecdata = true; - } - if($this->app->Secure->GetGET('json')) - { - $this->usejson = true; - } - /* - //$xml = $this->app->Secure->GetPOST("xml"); - $xml = mysqli_real_escape_string($this->app->DB->connection,$this->app->Secure->POST["xml"]); - $xml = str_replace('','',$xml); - $xml = str_replace('>\n','>',$xml); - $xml = str_replace('\"','"',$xml); - $xml = str_replace(' ','',$xml); - //$xml = str_replace('&','&',$xml); - */ - - $deXml = simplexml_load_string($xml, null - , LIBXML_NOCDATA); - if($deXml === false && $xml) - { - $deXml = json_decode($xml, true); - if($deXml)$this->usejson = true; - } - if(isset($deXml->xml) && isset($deXml->xml->cdata) && $deXml->xml->cdata) - { - $this->usecdata = true; - } - elseif(isset($deXml->cdata) && $deXml->cdata)$this->usecdata = true; - if($this->usejson)$this->usecdata = true; - return $deXml; - } - - function XMLPost() - { - if(isset($this->app->Secure->POST['xml'])) { - $xml = $this->app->Secure->POST['xml']; - } - elseif(isset($this->app->Secure->POST['json'])) - { - $xml = $this->app->Secure->POST['json']; - } - else { - $xml = ''; - } - - /* - //$xml = $this->app->Secure->GetPOST("xml"); - $xml = mysqli_real_escape_string($this->app->DB->connection,$this->app->Secure->POST["xml"]); - $xml = str_replace('','',$xml); - $xml = str_replace('>\n','>',$xml); - $xml = str_replace('\"','"',$xml); - $xml = str_replace(' ','',$xml); - //$xml = str_replace('&','&',$xml); - */ - - $deXml = simplexml_load_string($xml, null - , LIBXML_NOCDATA); - if($deXml === false && $xml) - { - $deXml = json_decode($xml, true); - if($deXml)$this->usejson = true; - } - if($this->app->Secure->GetGET('json')) - { - $this->usejson = true; - } - $deJson = json_encode($deXml); - $xml_array = json_decode($deJson,TRUE); - if(isset($xml_array['cdata']) && $xml_array['cdata']) - { - $this->usecdata = true; - }elseif(isset($xml_array['xml']) && isset($xml_array['xml']['cdata']) && $xml_array['xml']['cdata']) - { - $this->usecdata = true; - } - if($this->app->Secure->GetGET('cdata')) - { - $this->usecdata = true; - } - if($this->usejson)$this->usecdata = true; - - try { - $api_cleanutf8 = $this->getApiAccount()->isCleanUtf8Active(); - $isHtmlTransformation = $this->getApiAccount()->isHtmlTransformationActive(); - } catch (ApiAccountNotFoundException $e){ - $api_cleanutf8 = false; - $isHtmlTransformation = false; - } - - - if(isset($xml_array['xml'])) { - $tmp = $xml_array['xml']; - }elseif($this->usejson) { - $tmp = $xml_array; - } - - $action = $this->app->Secure->GetGET('action'); - - if(in_array($action, - [ - 'AuftragEdit', - 'AuftragCreate', - 'BestellungEdit', - 'BestellungCreate', - 'AngebotCreate', - 'AngebotEdit', - 'LieferscheinCreate', - 'LieferscheinEdit', - 'RetoureCreate', - 'RetoureEdit', - 'RechnungCreate', - 'RechnungEdit', - 'GutschriftCreate', - 'GutschriftEdit' - ] - )) - { - if($api_cleanutf8 == true){ - $this->XMLCleanUTF8($tmp, false, $isHtmlTransformation); - } - else{ - $this->XMLClean($tmp, $isHtmlTransformation); - } - } - else if(in_array($action, ['AdresseEdit','AdresseCreate','AdresseGet'])) - { - if($api_cleanutf8 == true){ - $this->XMLCleanUTF8($tmp, true,$isHtmlTransformation); - } - else{ - $this->XMLClean($tmp, $isHtmlTransformation); - } - } - else if(in_array($action, ['ArtikelEdit', 'ArtikelCreate','ArtikelGet'])) - { - if($api_cleanutf8 == true){ - $this->XMLCleanUTF8($tmp, false, $isHtmlTransformation); - } - else{ - $this->XMLClean($tmp, $isHtmlTransformation); - } - } - else if(in_array($action, ['GruppeEdit','GruppeCreate'])) - { - if($api_cleanutf8 == true){ - $this->XMLCleanUTF8($tmp, false, $isHtmlTransformation); - } - else{ - $this->XMLClean($tmp, $isHtmlTransformation); - } - } - else{ - if($action==='ArtikelList') { - return $tmp; - } - $this->XMLClean($tmp); - } - return $tmp; - } - - function MessageCode($messagecode) - { - switch($messagecode) - { - case 1: $message = "OK"; break; - case 2: $message = "Wrong Hash"; break; - case 3: $message = "Wrong number of GET parameters"; break; - case 4: $message = "Wrong XML data structure for method"; break; - case 5: $message = "Invalid key (id)"; break; - case 6: $message = "Wrong md5sum"; break; - case 7: $message = "Username exists already"; break; - case 8: $message = "Data not found"; break; - case 9: $message = "Wrong or no api_id provided. (https://community.xentral.com/hc/de/articles/360017436919-API-Dokumentation#toc-0)"; break; - default: $message = "Unknown message code"; - } - return $message; - } - - function ApiAdresseCreate($internal=false) - { - $xmldata = $this->XMLPost(); - // anlegen der adresse - if($xmldata['name']!="" && !is_array($xmldata['name'])) - { - //adresse anlegen - $xmldata['strasse'] = $xmldata['strasse']." ".$xmldata['hausnummer']; - if($xmldata['strasse_hausnummer']!="" && !is_array($xmldata['strasse_hausnummer'])) $xmldata['strasse'] = $xmldata['strasse_hausnummer']; - - $xmldata['email'] = str_replace(" ","",$xmldata['email']); - - switch($xmldata['typ']) - { - case "mr": $xmldata['typ']="herr"; break; - case "mr.": $xmldata['typ']="herr"; break; - case "ms": $xmldata['typ']="frau"; break; - case "mrs": $xmldata['typ']="frau"; break; - case "mrs.": $xmldata['typ']="frau"; break; - } - - if($xmldata['firma']!="" && !is_array($xmldata['firma'])) - { - if($xmldata['vorname']!="" && !is_array($xmldata['vorname'])) - $xmldata['ansprechpartner']=$xmldata['vorname']." ".$xmldata['name']; - else - $xmldata['ansprechpartner']=$xmldata['name']; - $xmldata['name']=$xmldata['firma']; - $xmldata['typ']='firma'; - } else - { - if($xmldata['vorname']!="" && !is_array($xmldata['vorname'])) - $xmldata['name']=$xmldata['vorname']." ".$xmldata['name']; - } - - } - - $id = $this->app->erp->CreateAdresse($xmldata['name']); - - //kundennummer=1 bedeutet gleiche Rolle Kunde anlegen - if($xmldata['projekt']!="" && !is_array($xmldata['projekt'])){ - $xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='" . $xmldata['projekt'] . "' LIMIT 1"); - } - else{ - $xmldata['projekt'] = $this->app->erp->GetStandardProjekt(); - } - - $tmp_data_adresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$id' LIMIT 1"); - - if(strtoupper($xmldata['kundennummer'])==='NEW' || strtoupper($xmldata['kundennummer'])==='NEU') - { - $xmldata['kundennummer'] = $this->app->erp->GetNextKundennummer($xmldata['projekt'],$tmp_data_adresse); - $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_kundennummer","Kundennummer ".$xmldata['kundennummer']." erhalten"); - } - - if(strtoupper($xmldata['lieferantennummer'])==='NEW' || strtoupper($xmldata['lieferantennummer'])==='NEU') - { - $xmldata['lieferantennummer'] = $this->app->erp->GetNextLieferantennummer($xmldata['projekt'],$tmp_data_adresse); - $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_lieferantennummer","Lieferantennummer ".$xmldata['lieferantennummer']." erhalten"); - } - - if($xmldata['porto_preis']!="" && $xmldata['porto_artikelid']!="" && !is_array($xmldata['porto_preis'])) - $this->app->erp->AddVerkaufspreis($xmldata['porto_artikelid'],1,$id,$xmldata['porto_preis']); - - - foreach($xmldata as $key=>$value) - { - if(is_array($value)) { - $value=''; - } - if($key==='sonstiges') { - $value = strip_tags(html_entity_decode($value)); - } - if($key==='rabattinformation') { - $value = html_entity_decode($value); - } - if($key === 'geburtsdatum' && strpos($value,'.') !== false) { - $value = $this->app->String->Convert($value,'%1.%2.%3','%3-%2-%1'); - } - if($key!=='id'){ - $this->app->DB->Update("UPDATE adresse SET $key='$value' WHERE id='$id' LIMIT 1"); - } - } - - // Wenn Kundennummer vorhanden sofort Lieferant anlegen - if($xmldata['kundennummer']!="" && !is_array($xmldata['kundennummer'])) - $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $xmldata['projekt'] ); - - if($xmldata['lieferantennummer']!="" && !is_array($xmldata['lieferantennummer'])) - $this->app->erp->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $xmldata['projekt'] ); - - if($xmldata['verband']!="" && !is_array($xmldata['verband'])) - $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Gruppe", $xmldata['verband']); - - if($xmldata['liefername']!="" && !is_array($xmldata['liefername'])) - { - $xmldata['liefername'] = $xmldata['liefervorname']." ".$xmldata['liefername']; - $xmldata['lieferstrasse'] = $xmldata['lieferstrasse']." ".$xmldata['lieferhausnummer']; - - if($xmldata['lieferfirma']!="" && !is_array($xmldata['lieferfirma'])) - { - $xmldata['lieferadresszusatz']=$xmldata['liefervorname']." ".$xmldata['liefername']; - $xmldata['liefername']=$xmldata['lieferfirma']; $xmldata['liefertyp']='firma'; - } - - $xmldata['liefername'] = trim($xmldata['liefername']); - $xmldata['lieferstrasse'] = trim($xmldata['lieferstrasse']); - $xmldata['lieferadresszusatz'] = trim($xmldata['lieferadresszusatz']); - - if(is_array($xmldata['lieferabteilung'])) $xmldata['lieferabteilung'] = ""; - if(is_array($xmldata['lieferunterabteilung'])) $xmldata['lieferunterabteilung'] = ""; - if(is_array($xmldata['lieferland'])) $xmldata['lieferland'] = ""; - if(is_array($xmldata['lieferstrasse'])) $xmldata['lieferstrasse'] = ""; - if(is_array($xmldata['lieferort'])) $xmldata['lieferort'] = ""; - if(is_array($xmldata['lieferplz'])) $xmldata['lieferplz'] = ""; - if(is_array($xmldata['liefertelefon'])) $xmldata['liefertelefon'] = ""; - if(is_array($xmldata['liefertelefax'])) $xmldata['liefertelefax'] = ""; - if(is_array($xmldata['lieferemail'])) $xmldata['lieferemail'] = ""; - if(is_array($xmldata['lieferansprechpartner'])) $xmldata['lieferansprechpartner'] = ""; - if(is_array($xmldata['liefertyp'])) $xmldata['liefertyp'] = ""; - if(is_array($xmldata['lieferadresszusatz'])) $xmldata['lieferadresszusatz'] = ""; - - $this->app->DB->Insert("INSERT INTO lieferadressen - (id,name,abteilung,unterabteilung,land,strasse,ort,plz,telefon,telefax,email,ansprechpartner,adresse,typ,adresszusatz,standardlieferadresse) - VALUES ('','{$xmldata['liefername']}','{$xmldata['lieferabteilung']}','{$xmldata['lieferunterabteilung']}', - '{$xmldata['lieferland']}','{$xmldata['lieferstrasse']}','{$xmldata['lieferort']}', - '{$xmldata['lieferplz']}','{$xmldata['liefertelefon']}','{$xmldata['liefertelefax']}','{$xmldata['lieferemail']}', - '{$xmldata['lieferansprechpartner']}','$id','{$xmldata['liefertyp']}','{$xmldata['lieferadresszusatz']}',1)"); - } - - if(!empty($xmldata['dateien']) && is_array($xmldata['dateien'])) - { - $this->AddFiles($xmldata['dateien'], 'adresse', $id); - } - - if($xmldata['lieferantennummer']=="") - { - if($internal) return $xmldata['kundennummer']; - $this->XMLResponse(1,"$id".$xmldata['kundennummer'].""); - } else { - if($internal) return $xmldata['lieferantennummer']; - $this->XMLResponse(1,"$id".$xmldata['lieferantennummer'].""); - } - $this->app->ExitXentral(); - } - - function ApiAdresseEdit($intern = false) - { - $xmldata = $this->XMLPost(); - if(isset($xmldata['adresse'])) - { - if(is_array($xmldata['adresse']) && isset($xmldata['adresse'][0])) - { - }else{ - $xmldata['adresse'][0] = $xmldata['adresse']; - } - foreach($xmldata['adresse'] as $_key => $_xmldata) - { - - $id = 0; - $kundennummer = ''; - $projekt = 0; - if(isset($_xmldata['id']))$id = (int)$_xmldata['id']; - if(isset($_xmldata['kundennummer']))$kundennummer = $this->app->DB->real_escape_string($_xmldata['kundennummer']); - if(isset($_xmldata['projekt']))$projekt = (int)$_xmldata['projekt']; - - if($kundennummer!="") - { - if($projekt !="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND projekt='$projekt' LIMIT 1"); - } else { - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' LIMIT 1"); - } - } - if($id) - { - if($_xmldata['porto_preis']!="" && $_xmldata['porto_artikelid']!="" && !is_array($_xmldata['porto_preis'])) - $this->app->erp->AddVerkaufspreis($_xmldata['porto_artikelid'],1,$id,$_xmldata['porto_preis']); - - if($_xmldata['projekt']!="" && !is_array($_xmldata['projekt']) && !is_numeric($_xmldata['projekt'])) - $_xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$_xmldata['projekt']."' LIMIT 1"); - - $tmp_data_adresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$id' LIMIT 1"); - - if(strtoupper($_xmldata['kundennummer'])==='NEW' || strtoupper($_xmldata['kundennummer'])==='NEU') - { - - $_xmldata['kundennummer'] = $this->app->erp->GetNextKundennummer($_xmldata['projekt'],$tmp_data_adresse); - $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_kundennummer","Kundennummer ".$_xmldata['kundennummer']." erhalten"); - } - - if(strtoupper($_xmldata['lieferantennummer'])==='NEW' || strtoupper($_xmldata['lieferantennummer'])==='NEU') - { - $_xmldata['lieferantennummer'] = $this->app->erp->GetNextLieferantennummer($_xmldata['projekt'],$tmp_data_adresse); - $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_lieferantennummer","Lieferantennummer ".$_xmldata['lieferantennummer']." erhalten"); - } - - if($_xmldata['kundennummer']!="" && !is_array($_xmldata['kundennummer'])) - $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $_xmldata['projekt'] ); - - if($_xmldata['lieferantennummer']!="" && !is_array($_xmldata['lieferantennummer'])) - $this->app->erp->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $_xmldata['projekt'] ); - - if($_xmldata['verband']!="" && !is_array($_xmldata['verband'])) - { - if($this->app->erp->GetVerband($id)!=$_xmldata['verband']) - { - // alle verbaende loeschen - $this->app->DB->Update("UPDATE adresse_rolle ad LEFT JOIN gruppen g - ON g.id=ad.parameter SET ad.bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE ad.objekt='Gruppe' AND g.art='verband' - AND ad.adresse='$id'"); - } - $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Gruppe", $_xmldata['verband']); - } - else - { - // alle verbaende loeschen - $this->app->DB->Update("UPDATE adresse_rolle ad LEFT JOIN gruppen g - ON g.id=ad.parameter SET ad.bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE ad.objekt='Gruppe' AND g.art='verband' - AND ad.adresse='$id'"); - } - foreach($_xmldata as $key=>$value) { - if(is_array($value)) { - $value=''; - } - if($key==='sonstiges') { - $value = strip_tags(html_entity_decode($value)); - } - if($key==='rabattinformation') { - $value = html_entity_decode($value); - } - if($key === 'geburtsdatum' && strpos($value,'.') !== false) { - $value = $this->app->String->Convert($value,'%1.%2.%3','%3-%2-%1'); - } - if($key!=='id'){ - $this->app->DB->Update("UPDATE adresse SET $key='$value' WHERE id='$id' LIMIT 1"); - } - } - } - } - if(!empty($xmldata['dateien']) && is_array($xmldata['dateien'])) - { - $this->AddFiles($xmldata['dateien'], 'adresse', $id); - } - if($intern){ - return $id; - } - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - $id = $this->app->Secure->GetGET("id"); - $kundennummer = $this->app->Secure->GetGET("kundennummer"); - - if(strtoupper($xmldata['kundennummer'])==="NEW" || strtoupper($xmldata['kundennummer'])==="NEU") - { - - $xmldata['kundennummer'] = $this->app->erp->GetNextKundennummer($xmldata['projekt'],$id); - $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_kundennummer","Kundennummer ".$xmldata['kundennummer']." erhalten"); - } - - if(strtoupper($xmldata['lieferantennummer'])==="NEW" || strtoupper($xmldata['lieferantennummer'])==="NEU") - { - $xmldata['lieferantennummer'] = $this->app->erp->GetNextLieferantennummer($xmldata['projekt'],$id); - $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_lieferantennummer","Lieferantennummer ".$xmldata['lieferantennummer']." erhalten"); - } - - $projekt = $this->app->Secure->GetGET("projekt"); - - if($kundennummer!="") - { - if($projekt!="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND projekt='$projekt' LIMIT 1"); - } else { - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' LIMIT 1"); - } - } - - // Key gibt es nicht - if($id <= 0) - { - - if($intern)return false; - $this->XMLResponse(5); - } - - - - if($xmldata['porto_preis']!="" && $xmldata['porto_artikelid']!="" && !is_array($xmldata['porto_preis'])) - $this->app->erp->AddVerkaufspreis($xmldata['porto_artikelid'],1,$id,$xmldata['porto_preis']); - - if($xmldata['projekt']!="" && !is_array($xmldata['projekt'])) - $xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['projekt']."' LIMIT 1"); - - if($xmldata['kundennummer']!="" && !is_array($xmldata['kundennummer'])) - $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $xmldata['projekt'] ); - - if($xmldata['lieferantennummer']!="" && !is_array($xmldata['lieferantennummer'])) - $this->app->erp->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $xmldata['projekt'] ); - - if($xmldata['verband']!="" && !is_array($xmldata['verband'])) - { - if($this->app->erp->GetVerband($id)!=$xmldata['verband']) - { - // alle verbaende loeschen - $this->app->DB->Update("UPDATE adresse_rolle ad LEFT JOIN gruppen g - ON g.id=ad.parameter SET ad.bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE ad.objekt='Gruppe' AND g.art='verband' - AND ad.adresse='$id'"); - } - $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Gruppe", $xmldata['verband']); - } - else - { - // alle verbaende loeschen - $this->app->DB->Update("UPDATE adresse_rolle ad LEFT JOIN gruppen g - ON g.id=ad.parameter SET ad.bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE ad.objekt='Gruppe' AND g.art='verband' - AND ad.adresse='$id'"); - } - - foreach($xmldata as $key=>$value) - { - if(is_array($value)){ - $value=''; - } - if($key==='sonstiges') { - $value = strip_tags(html_entity_decode($value)); - } - if($key==='rabattinformation') { - $value = html_entity_decode($value); - } - if($key!=='id'){ - $this->app->DB->Update("UPDATE adresse SET $key='$value' WHERE id='$id' LIMIT 1"); - } - } - if(!empty($xmldata['dateien']) && is_array($xmldata['dateien'])) - { - $this->AddFiles($xmldata['dateien'], 'adresse', $id); - } - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - function ApiAdresseGet($intern = false,$id="") - { - if($id=="") - $id = $this->app->Secure->GetGET("id"); - $kundennummer = $this->app->Secure->GetGET("kundennummer"); - $projekt = $this->app->Secure->GetGET("projekt"); - - - $xmldata = $this->XMLPost(); - - if($id=="" && isset($xmldata['id']))$id = $xmldata['id']; - if($kundennummer=="" && isset($xmldata['kundennummer']))$kundennummer = $xmldata['kundennummer']; - if($projekt=="" && isset($xmldata['projekt']))$projekt = $xmldata['projekt']; - - if($kundennummer!="") - { - if($projekt!="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND projekt='$projekt' LIMIT 1"); - } else { - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' LIMIT 1"); - } - } - - //check - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$id' LIMIT 1"); - - if($id > 0) - { - if($intern) { - return $this->app->erp->XMLAdresse($id); - } - $this->XMLResponse(1,$this->app->erp->XMLAdresse($id)); - $this->app->ExitXentral(); - } - if($intern) { - return false; - } - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - function ApiAngebotCreate($intern = false) - { - return $this->ApiBelegCreate($intern, 'angebot'); - } - - public function ApiAuftragCreate($intern = false, $doctype = 'auftrag') { - return $this->ApiBelegCreate($intern, $doctype); - } - - public function ApiBelegCreate($intern = false, $doctype = 'auftrag') - { - if(!in_array($doctype, array('angebot', 'gutschrift', 'lieferschein', 'rechnung','bestellung','retoure'))){ - $doctype = 'auftrag'; - } - $xmldata = $this->XMLPost(); - // wenn gleich eine neue Adresse mitangelegt werden soll - if($doctype === 'bestellung'){ - if(strtoupper($xmldata['lieferantennummer']) === 'NEW' || strtoupper($xmldata['lieferantennummer']) === 'NEU'){ - $xmldata['lieferantennummer'] = $this->ApiAdresseCreate(true); - } - $adresse = 0; - if(!empty($xmldata['lieferantennummer'])){ - $adresse = $this->app->DB->Select( - sprintf( - "SELECT id FROM adresse WHERE lieferantennummer='%s' AND lieferantennummer <> '' AND IFNULL(geloescht,0) = 0 LIMIT 1", - $xmldata['lieferantennummer'] - ) - ); - } - if(!$adresse && !empty($xmldata['kundennummerlieferant'])) { - $adresse = $this->app->DB->Select( - sprintf( - "SELECT id FROM adresse - WHERE kundennummer='%s' AND lieferantennummer <> '' AND IFNULL(geloescht,0) = 0 LIMIT 1", - $xmldata['kundennummerlieferant'] - ) - ); - } - - }else{ - if(strtoupper($xmldata['kundennummer']) === 'NEW' || strtoupper($xmldata['kundennummer']) === 'NEU' || $xmldata['kundennummer'] == '' || !isset($xmldata['kundennummer'])){ - $xmldata['kundennummer'] = $this->ApiAdresseCreate(true); - } - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['kundennummer']."' AND kundennummer <> '' LIMIT 1"); - } - - // anlegen der adresse - - - if($adresse <= 0) - { - if($intern) { - return false; - } - $this->XMLResponse(5,'address not found'); - $this->app->ExitXentral(); - } - - switch ($doctype) { - case 'angebot': - $id = $this->app->erp->CreateAngebot($adresse); - $this->app->erp->LoadAngebotStandardwerte($id,$adresse); - break; - - case 'gutschrift': - $id = $this->app->erp->CreateGutschrift($adresse); - $this->app->erp->LoadGutschriftStandardwerte($id,$adresse); - break; - - case 'lieferschein': - $id = $this->app->erp->CreateLieferschein($adresse); - $this->app->erp->LoadLieferscheinStandardwerte($id,$adresse); - break; - - case 'retoure': - $id = $this->app->erp->CreateRetoure($adresse); - $this->app->erp->LoadRetoureStandardwerte($id,$adresse); - break; - - case 'rechnung': - $id = $this->app->erp->CreateRechnung($adresse); - $this->app->erp->LoadRechnungStandardwerte($id,$adresse); - break; - - case 'bestellung': - $this->app->erp->LogFile($adresse); - $id = $this->app->erp->CreateBestellung($adresse); - $this->app->erp->LoadBestellungStandardwerte($id,$adresse); - break; - default: - $id = $this->app->erp->CreateAuftrag($adresse); - $this->app->erp->LoadAuftragStandardwerte($id,$adresse); - break; - } - - $xmldata['belegnr'] = (string)$this->app->DB->Select("SELECT belegnr FROM $doctype WHERE id = '$id' LIMIT 1"); - if($xmldata['belegnr'] === '' || $xmldata['belegnr'] === '0'){$xmldata['belegnr'] = $this->app->erp->GetNextNummer($doctype,$xmldata['projekt'],$id);} - if($doctype === 'bestellung') - { - $xmldata['lieferantkdrnummer'] = $xmldata['lieferantennummer']; - }else{ - $xmldata['lieferantkdrnummer'] = $xmldata['kundennummer']; - } - if($doctype==='auftrag'){ - $this->app->DB->Update("UPDATE $doctype SET lieferantkdrnummer='" . $xmldata['lieferantkdrnummer'] . "' WHERE id='" . $id . "' LIMIT 1"); - } - if($doctype === 'bestellung') - { - if(!empty($xmldata['lieferantennummer'])){ - $this->app->DB->Update("UPDATE $doctype SET lieferantennummer='" . $xmldata['lieferantennummer'] . "' WHERE id='" . $id . "' LIMIT 1"); - } - }else{ - $this->app->DB->Update("UPDATE $doctype SET kundennummer='" . $xmldata['kundennummer'] . "' WHERE id='" . $id . "' LIMIT 1"); - } - - if($xmldata['shopextid']=='' || $xmldata['shopextid']==0){ - $xmldata['shopextid'] = 1; - } - if($xmldata['projekt']==''){ - $xmldata['projekt'] = $this->app->DB->Select( - sprintf( - 'SELECT pr.abkuerzung - FROM `%s` AS b - INNER JOIN adresse AS adr ON b.adresse = adr.id - INNER JOIN projekt AS pr ON adr.projekt = pr.id AND pr.geloescht <> 1 - WHERE b.id = %d', - $doctype, $id - ) - ); - if($xmldata['projekt']=='' && $doctype === 'auftrag') { - $xmldata['projekt'] = $this->app->DB->Select( - sprintf( - "SELECT pr.abkuerzung - FROM `auftrag` AS b - INNER JOIN adresse AS adr ON b.adresse = adr.id AND b.lieferantenauftrag = 0 - INNER JOIN adresse_rolle AS ar on adr.id = ar.adresse AND ar.subjekt = 'Kunde' AND ar.objekt = 'Projekt' - AND (IFNULL(ar.bis,'0000-00-00') = '0000-00-00' OR ar.bis >= CURDATE()) - INNER JOIN projekt AS pr ON ar.parameter = pr.id AND pr.geloescht <> 1 - WHERE b.id = %d - ORDER BY ar.id - LIMIT 1", - $id - ) - ); - } - if($xmldata['projekt']=='') { - $xmldata['projekt'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='" . $this->app->erp->Firmendaten("projekt") . "' LIMIT 1"); - } - } - - $this->app->DB->Update("UPDATE $doctype SET belegnr='".$xmldata['belegnr']."' WHERE id='".$id."' LIMIT 1"); - if(!isset($xmldata['status'])){ - $xmldata['status'] = 'freigegeben'; - } - $this->app->DB->Update("UPDATE $doctype SET status='freigegeben' WHERE id='".$id."' AND (status = 'angelegt' OR status = '') LIMIT 1"); - $this->ApiBelegEdit(true,$id, $doctype, $xmldata); - if($intern){ - return $id; - } - $this->XMLResponse(1,"$id".$xmldata['belegnr'].''); - - $this->app->ExitXentral(); - } - - /** - * @param bool $intern - * @param null $id - * - * @return array|bool - */ - public function ApiGutschriftFreigabe($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - $ret = $this->ApiBelegFreiabe('gutschrift', $id); - if(!$intern) { - if(!empty($ret)) { - if(!empty($ret['error'])) { - $this->XMLResponse($ret['error']); - } - $this->XMLResponse(1,"$id".$ret['belegnr'].''); - } - } - - return $ret; - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiRechnungVersenden($intern = false, $id = null) - { - return $this->ApiBelegVersenden($intern, $id, 'rechnung'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiAuftragVersenden($intern = false, $id = null) - { - return $this->ApiBelegVersenden($intern, $id, 'auftrag'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiAngebotVersenden($intern = false, $id = null) - { - return $this->ApiBelegVersenden($intern, $id, 'angebot'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiGutschriftVersenden($intern = false, $id = null) - { - return $this->ApiBelegVersenden($intern, $id, 'gutschrift'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiLieferscheinVersenden($intern = false, $id = null) - { - return $this->ApiBelegVersenden($intern, $id, 'lieferschein'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiReisekostenVersenden($intern = false, $id = null) - { - return $this->ApiBelegVersenden($intern, $id, 'reisekosten'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiAuftragArchivieren($intern = false, $id = null) - { - return $this->ApiBelegArchivieren($intern, $id, 'auftrag'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiRechnungArchivieren($intern = false, $id = null) - { - return $this->ApiBelegArchivieren($intern, $id, 'rechnung'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiAngebotArchivieren($intern = false, $id = null) - { - return $this->ApiBelegArchivieren($intern, $id, 'angebot'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiLieferscheinArchivieren($intern = false, $id = null) - { - return $this->ApiBelegArchivieren($intern, $id, 'lieferschein'); - } - - /** - * @param bool $intern - * @param null $id - * - * @return int - */ - public function ApiGutschriftArchivieren($intern = false, $id = null) - { - return $this->ApiBelegArchivieren($intern, $id, 'gutschrift'); - } - - /** - * @param bool $intern - * @param int $id - * @param string $doctype - * - * @return int - */ - public function ApiBelegArchivieren($intern, $id, $doctype) - { - if($id==''){ - $id = $this->getIdFromData(); - } - - if($id <= 0){ - if(!$intern){ - $this->XMLResponse(5); - } - else { - return 5; - } - } - $projectId = $this->app->DB->Select( - sprintf( - 'SELECT projekt FROM `%s` WHERE id = %d LIMIT 1', - $doctype, $id - ) - ); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - $class = ucfirst($doctype).'PDFCustom'; - if(!class_exists($class)) { - $class = ucfirst($doctype).'PDF'; - } - if(!class_exists($class)) { - if(!$intern){ - $this->XMLResponse(5); - } - else { - return 5; - } - } - - $pdf = new $class($this->app, $projectId); - $method = 'Get'.ucfirst($doctype); - if(!method_exists($pdf, $method)) { - if(!$intern){ - $this->XMLResponse(5); - } - else { - return 5; - } - } - $pdf->$method($id); - $tmpfile = $pdf->displayTMP(); - $pdf->ArchiviereDocument(); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - $pdf = new $class($this->app, $projectId); - $pdf->$method($id); - $tmpfile = $pdf->displayTMP(); - $pdf->ArchiviereDocument(1); - $this->app->DB->Update(sprintf('UPDATE `%s` SET schreibschutz=1 WHERE id=%d', $doctype, $id)); - unlink($tmpfile); - if(!$intern){ - $this->XMLResponse(1, ''.$id.''); - } - - return 1; - } - - /** - * @param string $doctype - * @param int $doctypeId - * @param array $xmldata - * - * @return int - */ - public function ApiBelegVersenden($intern, $id, $doctype) - { - if($id==''){ - $id = $this->getIdFromData(); - } - - if($id <= 0){ - if(!$intern){ - $this->XMLResponse(5); - } - else { - return 5; - } - } - $xmldata = $this->XMLPost(); - $type = !empty($xmldata['versandart'])?$xmldata['versandart']:$xmldata['art']; - $printer = !empty($xmldata['drucker'])?$xmldata['drucker']:$xmldata['email']; - if(!in_array($doctype, ['rechnung','angebot','auftrag','gutschrift','lieferschein','reisekosten'])) { - if(!$intern){ - $this->XMLResponse(5); - } - else { - return 5; - } - } - - if($type!=='email' && $type!=='brief'){ - if(!$intern){ - $this->XMLResponse(5); - } - else { - return 5; - } - } - $this->getEmailSettings(); - $this->app->erp->BelegVersand($doctype, $id, $type, $printer); - - if(!$intern){ - $this->XMLResponse(1, ''.$id.''); - } - - return 1; - } - - /** - * @param bool $intern - * @param null|int $id - */ - public function ApiWeiterfuehrenRechnungZuGutschrift($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - - if($id <= 0){ - if(!$intern){ - $this->XMLResponse(5); - } - else { - return; - } - } - $returnOrderId = $this->app->erp->WeiterfuehrenRechnungZuGutschrift($id); - if(empty($returnOrderId)) { - if(!$intern){ - $this->XMLResponse(5); - } - } - if(!$intern){ - $this->XMLResponse(1, '' . $returnOrderId . ''); - } - } - - /** - * @param bool $intern - * @param null|int $id - */ - public function ApiWeiterfuehrenAuftragZuRechnung($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - - if($id <= 0){ - if(!$intern){ - $this->XMLResponse(5); - } - else { - return; - } - } - $invoiceId = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id); - if(empty($invoiceId)) { - if(!$intern){ - $this->XMLResponse(5); - } - } - if(!$intern){ - $this->XMLResponse(1, '' . $invoiceId . ''); - } - } - - /** - * @param bool $intern - * @param null|int $id - * - * @return bool - */ - public function ApiRechnungVersendetMarkieren($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - if(empty($id)) { - if($intern) { - return false; - } - $this->XMLResponse(5); - } - /** @var Rechnung $obj */ - $obj = $this->app->erp->LoadModul('rechnung'); - if(empty($obj)) { - $ok = false; - } - else{ - $ok = $obj->markInvoiceAsClosed(); - } - if(!$intern) { - if($ok) { - $this->XMLResponse(1, ''.$id.''); - } - else { - $this->XMLResponse(5); - } - } - - return $ok; - } - - /** - * @param bool $intern - * @param null|int $id - * - * @return array - */ - public function ApiAuftragAbschliessen($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - /** @var Auftrag $obj */ - $obj = $this->app->erp->LoadModul('auftrag'); - $ret = $obj->closeOrder($id); - if(!$intern){ - if(!empty($ret['error'])){ - $this->XMLResponse(5); - } - $this->XMLResponse(1, ''.$id.''); - } - - return $ret; - } - - /** - * @param bool $intern - * @param null|int $id - * - * @return array - */ - public function ApiRechnungAlsBezahltMarkieren($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - /** @var Rechnung $obj */ - $obj = $this->app->erp->LoadModul('rechnung'); - $ret = $obj->setManualPayed($id); - if(!$intern){ - if(!empty($ret['error'])){ - $this->XMLResponse(5); - } - $this->XMLResponse(1, ''.$id.''); - } - - return $ret; - } - - /** - * @param bool $intern - * @param null $id - * - * @return array|bool - */ - public function ApiAngebotFreigabe($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - $ret = $this->ApiBelegFreiabe('angebot', $id); - if(!$intern) { - if(!empty($ret)) { - if(!empty($ret['error'])) { - $this->XMLResponse($ret['error']); - } - $this->XMLResponse(1,"$id".$ret['belegnr'].''); - } - } - - return $ret; - } - - /** - * @param bool $intern - * @param null $id - * - * @return array|bool - */ - public function ApiBestellungFreigabe($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - $ret = $this->ApiBelegFreiabe('bestellung', $id); - if(!$intern) { - if(!empty($ret)) { - if(!empty($ret['error'])) { - $this->XMLResponse($ret['error']); - } - $this->XMLResponse(1,"$id".$ret['belegnr'].''); - } - } - - return $ret; - } - - /** - * @param bool $intern - * @param null $id - * - * @return array|bool - */ - public function ApiRechnungFreigabe($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - $ret = $this->ApiBelegFreiabe('rechnung', $id); - if(!$intern) { - if(!empty($ret)) { - if(!empty($ret['error'])) { - $this->XMLResponse($ret['error']); - } - $this->XMLResponse(1,"$id".$ret['belegnr'].''); - } - } - - return $ret; - } - - /** - * @return array|mixed|string - */ - protected function getIdFromData() - { - $id = $this->app->Secure->GetGET('id'); - if(empty($id)) { - $xmldata = $this->XMLPost(); - if(is_array($xmldata) && !empty($xmldata['id'])) { - $id = $xmldata['id']; - } - } - - return $id; - } - - /** - * @param bool $intern - * @param null $id - * - * @return array|bool - */ - public function ApiAuftragFreigabe($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - - $ret = $this->ApiBelegFreiabe('auftrag', $id); - if(!$intern) { - if(!empty($ret)) { - if(!empty($ret['error'])) { - $this->XMLResponse($ret['error']); - } - $this->XMLResponse(1,"$id".$ret['belegnr'].''); - } - } - - return $ret; - } - - /** - * @param bool $intern - * @param null $id - * - * @return array|bool - */ - public function ApiLieferscheinFreigabe($intern = false, $id = null) - { - if($id==''){ - $id = $this->getIdFromData(); - } - $ret = $this->ApiBelegFreiabe('lieferschein', $id); - if(!$intern) { - if(!empty($ret)) { - if(!empty($ret['error'])) { - $this->XMLResponse($ret['error']); - } - $this->XMLResponse(1,"$id".$ret['belegnr'].''); - } - } - - return $ret; - } - - /** - * @param string $typ - * @param int $id - * - * @return bool|array - */ - public function ApiBelegFreiabe($typ, $id) - { - if($id <= 0) { - return ['error' => 5]; - } - if(!in_array($typ, ['auftrag','angebot','rechnung','gutschrift','lieferschein','bestellung'])) { - return ['error' => 5]; - } - - $row = $this->app->DB->SelectRow( - sprintf( - "SELECT id, belegnr, status - FROM `%s` - WHERE id = %d - LIMIT 1", - $typ, $id - ) - ); - if(empty($row)) { - return ['error' => 8]; - } - - if(in_array($row['status'], ['storniert','abgeschlossen','versendet'])) { - return ['error' => 8]; - } - $this->app->erp->BelegFreigabe($typ, $id); - - return ['id' => $id, 'belegnr' => $this->app->DB->Select(sprintf('SELECT belegnr FROM `%s` WHERE id = %d', $typ, $id))]; - } - - function ApiEtikettendrucker($intern=false) - { - $xmldata = $this->XMLPost(); - - // id pruefen - if($xmldata['etikett'] <= 0) - { - if($intern) { - return false; - } - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - //$xmldata['kennung'] - $xmldata['etikett']=(isset($xmldata['etikett'])?$xmldata['etikett']:""); - $xmldata['anzahl']=(isset($xmldata['anzahl']) && $xmldata['anzahl'] > 0?$xmldata['anzahl']:1); - $xmldata['tabelle']=(isset($xmldata['tabelle'])?$xmldata['tabelle']:""); - $xmldata['id']=(isset($xmldata['id'])?$xmldata['id']:""); - $xmldata['drucker']=(isset($xmldata['drucker'])?$xmldata['drucker']:""); - - $tmp = array(); - if(isset($xmldata['parameter']) && is_array($xmldata['parameter'])) - { - foreach($xmldata['parameter'] as $keyname=>$value) - $tmp[$keyname] = $value; - } - - $this->app->erp->EtikettenDrucker($xmldata['etikett'],$xmldata['anzahl'],$xmldata['tabelle'],$xmldata['id'],$tmp,"",$xmldata['drucker']); - - if($intern) { - return true; - } - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - function ApiAuftragZuRechnung($intern=false,$id="") - { - if($id=="") - $id = $this->app->Secure->GetGET("id"); - $xmldata = $this->XMLPost(); - if($id==""){ - $id= $xmldata['id']; - } - // id pruefen - $id = $this->app->DB->Select("SELECT id FROM auftrag WHERE id='".(int)$id."' LIMIT 1"); - if($id <= 0) - { - if($intern) { - return false; - } - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - if(!class_exists('FormHandler')) - { - include_once(__DIR__ ."/../../phpwf/plugins/class.formhandler.php"); - $this->app->FormHandler = new FormHandler($this->app); - }else{ - if(empty($this->app->FormHandler))$this->app->FormHandler = new FormHandler($this->app); - } - $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id); - if($intern) { - return $rechnung; - } - $this->XMLResponse(1,$this->ApiRechnungGet(true, $rechnung)); - $this->app->ExitXentral(); - } - - function ApiAngebotZuAuftrag($intern=false,$id="") - { - if($id=="") - $id = $this->app->Secure->GetGET("id"); - $xmldata = $this->XMLPost(); - if($id==""){ - $id= $xmldata['id']; - } - // id pruefen - $id = $this->app->DB->Select("SELECT id FROM angebot WHERE id='".(int)$id."' LIMIT 1"); - if($id <= 0) - { - if($intern) { - return false; - } - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - if(!class_exists('FormHandler')) - { - include_once(__DIR__ ."/../../phpwf/plugins/class.formhandler.php"); - $this->app->FormHandler = new FormHandler($this->app); - }else{ - if(empty($this->app->FormHandler))$this->app->FormHandler = new FormHandler($this->app); - } - $auftrag = $this->app->erp->WeiterfuehrenAngebotZuAuftrag($id); - if($intern) { - return $auftrag; - } - $this->XMLResponse(1,$this->ApiAuftragGet(true, $auftrag)); - $this->app->ExitXentral(); - } - - public function ApiAngebotEdit($intern=false,$id='') - { - return $this->ApiBelegEdit($intern, $id, 'angebot'); - } - - public function ApiAuftragEdit($intern=false,$id='', $doctype = 'auftrag', $xmldata = null) - { - return $this->ApiBelegEdit($intern,$id, $doctype, $xmldata); - } - - public function ApiBelegEdit($intern=false,$id='', $doctype = 'auftrag', $xmldata = null) - { - if($id==''){ - $id = $this->app->Secure->GetGET('id'); - } - - - if(empty($xmldata)){ - $xmldata = $this->XMLPost(); - } - - if(!$intern && $doctype === 'auftrag' && isset($xmldata['belegnr']) && (strtoupper($xmldata['belegnr']) === 'NEW' || strtoupper($xmldata['belegnr']) === 'NEU')) - { - $this->ApiAuftragCreate(); - } - - if($id==''){ - $id = $xmldata['id']; - } - - if(empty($id) && !empty($xmldata['belegnr'])){ - $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE belegnr='".$this->app->DB->real_escape_string($xmldata['belegnr'])."' LIMIT 1"); - } - - // id pruefen - $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE id='".(int)$id."' LIMIT 1"); - - if($id <= 0) - { - if($intern){ - return false; - } - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - // anlegen der adresse - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id='".$id."' LIMIT 1"); - if($adresse <= 0) - { - if($intern){ - return false; - } - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - if($xmldata['status']!=='angelegt' && $xmldata['status']!=='freigegeben' && - $xmldata['status']!=='abgeschlossen' && $xmldata['status']!=='storniert'){ - $xmldata['status'] = 'angelegt'; - } - - //if($xmldata['status']=="freigegeben") - // $xmldata['status']="angelegt"; - - //kundennummer=1 bedeutet gleiche Rolle Kunde anlegen - if($xmldata['projekt']!='' && !is_array($xmldata['projekt'])){ - $xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='" . $xmldata['projekt'] . "' LIMIT 1"); - } - - if($xmldata['projekt'] <=0){ - $xmldata['projekt'] = $this->app->erp->ImportGetStandardProjekt(); - } - - // schaue ob kundennummer angebene ist und mache Load - if($doctype !== 'bestellung'){ - if($xmldata['kundennummer'] != '' && strtoupper($xmldata['kundennummer']) !== 'NEW' && - strtoupper($xmldata['kundennummer']) !== 'NEU' && !is_array($xmldata['kundennummer'])){ - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='" . $xmldata['kundennummer'] . "' LIMIT 1"); - $_funktion = 'Load' . ucfirst($doctype) . 'Standardwerte'; - if(method_exists($this->app->erp, $_funktion)){ - $this->app->erp->$_funktion($id, $adresse); - } - //$this->app->erp->LoadAuftragStandardwerte($id,$adresse); - }else{ - if($xmldata['land'] == ''){ - $xmldata['land'] = 'DE'; - } - } - } else{ - if($xmldata['lieferantennummer'] != '' && strtoupper($xmldata['lieferantennummer']) !== 'NEW' && - strtoupper($xmldata['lieferantennummer']) !== 'NEU' && !is_array($xmldata['kundennummer'])){ - if(!$adresse){ - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='" . $xmldata['lieferantennummer'] . "' LIMIT 1"); - } - $_funktion = 'Load' . ucfirst($doctype) . 'Standardwerte'; - if(method_exists($this->app->erp, $_funktion)){ - $this->app->erp->$_funktion($id, $adresse); - } - //$this->app->erp->LoadAuftragStandardwerte($id,$adresse); - }else{ - if($xmldata['land'] == ''){ - $xmldata['land'] = 'DE'; - } - } - } - - - $this->app->DB->Delete("DELETE FROM $doctype"."_position WHERE $doctype='$id'"); - - if($xmldata['status']==''){ - $xmldata['status'] = 'freigegeben'; - } - - // updat alle felde die angeben wurden sind - - $doctypeArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM `%s` WHERE id = %d LIMIT 1',$doctype,$id - ) - ); - $doctypeKeys = array_keys($doctypeArr); - foreach($xmldata as $key=>$value) - { - if(is_array($value)){ - $value=''; - } - if($key!=='id'){ - if(!in_array($key,$doctypeKeys)) { - continue; - } - $this->app->DB->Update("UPDATE $doctype SET $key='$value' WHERE id='$id' LIMIT 1"); - } - } - - if(isset($xmldata['artikelliste']['position']['menge'])) - { - $tmp = $xmldata['artikelliste']['position']; - unset($xmldata['artikelliste']['position']); - $xmldata['artikelliste']['position'][0] = $tmp; - }elseif(!isset($xmldata['artikelliste']['position'][0])) - { - $tmp = $xmldata['artikelliste']['position']; - unset($xmldata['artikelliste']['position']); - $xmldata['artikelliste']['position'][0] = $tmp; - } - // alle positionen der reihe nach - - $cposition = isset($xmldata['artikelliste']['position'])?count($xmldata['artikelliste']['position']):0; - for($i=0;$i<$cposition;$i++) - { - $projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); - if(!empty($xmldata['artikelliste']['position'][$i]['nummer'])){ - if($projektid > 0){ - $positionid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='" . $xmldata['artikelliste']['position'][$i]['nummer'] . "' AND projekt='" . $projektid . "' LIMIT 1"); - }else{ - $positionid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='" . $xmldata['artikelliste']['position'][$i]['nummer'] . "' LIMIT 1"); - } - }elseif($doctype === 'bestellung' && !empty($xmldata['artikelliste']['position'][$i]['bestellnummer'])) { - $positionid = $this->app->DB->Select(sprintf( - 'SELECT artikel FROM einkaufspreise WHERE adresse = %d AND bestellnummer = \'%s\'', - $adresse,$this->app->DB->real_escape_string($xmldata['artikelliste']['position'][$i]['bestellnummer']) - ) - ); - } - - $xmldata['artikelliste']['position'][$i]['menge'] = str_replace(',','.',$xmldata['artikelliste']['position'][$i]['menge']); - - if($xmldata['artikelliste']['position'][$i]['waehrung']=='' || is_array($xmldata['artikelliste']['position'][$i]['waehrung'])){ - $xmldata['artikelliste']['position'][$i]['waehrung'] = 'EUR'; - } - - if($doctype === 'bestellung'){ - $bezeichnungcol = 'bezeichnunglieferant'; - }else{ - $bezeichnungcol = 'bezeichnung'; - } - - if($positionid <= 0) - { - //TODO den Artikel gibt es in der datenbank nicht! - if($doctype === 'bestellung' && empty($xmldata['artikelliste']['position'][$i]['bezeichnung']) && !empty($xmldata['artikelliste']['position'][$i]['bezeichnunglieferant'])) - { - $felder['name_de'] = $xmldata['artikelliste']['position'][$i]['bezeichnunglieferant']; - }else{ - $felder['name_de'] = $xmldata['artikelliste']['position'][$i]['bezeichnung']; - } - $felder['anabregs_text'] = $xmldata['artikelliste']['position'][$i]['beschreibung']; - if($doctype === 'bestellung' && empty($xmldata['artikelliste']['position'][$i]['nummer']) && !empty($xmldata['artikelliste']['position'][$i]['bestellnummer'])){ - $felder['nummer'] = $xmldata['artikelliste']['position'][$i]['bestellnummer']; - }else{ - $felder['nummer'] = $xmldata['artikelliste']['position'][$i]['nummer']; - } - $felder['lagerartikel'] = 1; - if($projektid > 0){ - $felder['projekt'] = $projektid; - } - else{ - $felder['projekt'] = $this->app->erp->GetStandardProjekt(); - } - - $positionid = $this->app->erp->AddArtikel($felder); - $tmpartikelid = $positionid; - } else { - $xmldata['artikelliste']['position'][$i]['artikel'] = $positionid; - $tmpartikelid = $positionid; - // wenn key == nummer alles laden und kopieren wenn felder leer - if($doctype === 'bestellung' && !empty($xmldata['artikelliste']['position'][$i]['nummer']) && empty($xmldata['artikelliste']['position'][$i]['bestellnummer'])) - { - $xmldata['artikelliste']['position'][$i]['bestellnummer'] = $xmldata['artikelliste']['position'][$i]['nummer']; - } - if($doctype === 'bestellung' && !empty($xmldata['artikelliste']['position'][$i]['bezeichnung']) && empty($xmldata['artikelliste']['position'][$i]['bezeichnunglieferant'])) - { - $xmldata['artikelliste']['position'][$i]['bezeichnunglieferant'] = $xmldata['artikelliste']['position'][$i]['bezeichnung']; - } - if($xmldata['artikelliste']['position'][$i][$bezeichnungcol]==''){ - $xmldata['artikelliste']['position'][$i][$bezeichnungcol] = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='" . $positionid . "' LIMIT 1"); - } - - if($xmldata['artikelliste']['position'][$i][$bezeichnungcol]==''){ - $xmldata['artikelliste']['position'][$i][$bezeichnungcol] = $this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='" . $positionid . "' LIMIT 1"); - } - - if($xmldata['artikelliste']['position'][$i]['preis']==''){ - if($doctype === 'bestellung'){ - $originalwaehrung = null; - $originalpreis = null; - $xmldata['artikelliste']['position'][$i]['preis'] = $this->app->erp->GetEinkaufspreisWaehrung($positionid, $xmldata['artikelliste']['position'][$i]['menge'], $xmldata['artikelliste']['position'][$i]['waehrung'], $originalwaehrung, $originalpreis, $adresse); - }else{ - $xmldata['artikelliste']['position'][$i]['preis'] = $this->app->erp->GetVerkaufspreis($positionid, $xmldata['artikelliste']['position'][$i]['menge'], - $adresse, $xmldata['artikelliste']['position'][$i]['waehrung']); - } - } - } - - $this->app->DB->Insert("INSERT INTO $doctype"."_position (id,$doctype,sort,artikel) VALUES ('','".$id."','".($i+1)."','".$positionid."')"); - $positionid= $this->app->DB->GetInsertID(); - $this->app->erp->RunHook('beleg_afterinsertposition', 5, $doctype,$id,$tmpartikelid,$xmldata['artikelliste']['position'][$i]['menge'],$positionid); - - // anpassen der felder - $posArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM `%s` WHERE id = %d LIMIT 1', - $doctype.'_position', $positionid - ) - ); - $posKeys = array_keys($posArr); - foreach($xmldata['artikelliste']['position'][$i] as $key=>$value) - { - if(is_array($value)){ - $value=''; - } - if($key!=='id'){ - if(!in_array($key, $posKeys)) { - continue; - } - $this->app->DB->Update("UPDATE $doctype" . "_position SET $key='$value' WHERE id='$positionid' LIMIT 1"); - } - } - if($doctype === 'bestellung' && !empty($tmpartikelid) && !empty($positionid)) { - $this->app->DB->Update( - sprintf( - 'UPDATE bestellung_position AS bp - INNER JOIN artikel AS art ON bp.artikel = art.id - SET bp.bestellnummer = art.nummer - WHERE bp.bestellnummer = \'\' AND bp.id = %d - ', - (int)$positionid - ) - ); - - $this->app->DB->Update( - sprintf( - 'UPDATE bestellung_position AS bp - INNER JOIN artikel AS art ON bp.artikel = art.id - SET bp.bezeichnunglieferant = art.name_de - WHERE bp.bezeichnunglieferant = \'\' AND bp.id = %d - ', - (int)$positionid - ) - ); - } - - $artikelnummerkunde = !empty($xmldata['artikelliste']['position'][$i]['kundenartikelnummer'])?$xmldata['artikelliste']['position'][$i]['kundenartikelnummer']:$this->app->DB->real_escape_string( - $this->app->DB->Select( - "SELECT kundenartikelnummer - FROM verkaufspreise WHERE adresse='$adresse' AND artikel='$tmpartikelid' AND kundenartikelnummer!='' AND ab_menge <=". - (float)$xmldata['artikelliste']['position'][$i]['menge']." - AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') - ORDER by ab_menge DESC - LIMIT 1" - )); - - if($artikelnummerkunde == ''){ - // Anzeige Artikel Nummer von Gruppe aus Verkaufspreis - $gruppevkresult = $this->app->erp->GetVerkaufspreis($tmpartikelid, $xmldata['artikelliste']['position'][$i]['menge'], $adresse, $xmldata['artikelliste']['position'][$i]['waehrung'], $returnwaehrung, true); - if($gruppevkresult['kundenartikelnummer'] != ''){ - $artikelnummerkunde = $gruppevkresult['kundenartikelnummer']; - } - } - - if(!empty($artikelnummerkunde)) { - $this->app->DB->Update( - sprintf( - "UPDATE `%s` SET artikelnummerkunde = '%s' WHERE id = %d ", - $doctype.'_position', - $this->app->DB->real_escape_string($artikelnummerkunde), - $positionid - ) - ); - } - } - $_funktion = ucfirst($doctype).'Neuberechnen'; - if(method_exists($this->app->erp, $_funktion)){ - $this->app->erp->$_funktion($id); - } - - $xmldata['belegnr'] = $this->app->DB->Select("SELECT belegnr FROM $doctype WHERE id='".$id."' LIMIT 1"); - if(!empty($xmldata['dateien']) && is_array($xmldata['dateien'])) - { - $this->AddFiles($xmldata['dateien'], $doctype, $id); - } - if($intern) { - return $id; - } - $this->XMLResponse(1,"$id".$xmldata['belegnr'].''); - $this->app->ExitXentral(); - } - - /** - * Create Files from XML - * @param array $files Array of files - * @param string $doctype - * @param int $doctypeid - */ - protected function AddFiles($files, $doctype, $doctypeid) - { - if(empty($doctype) || empty($doctypeid) || empty($files)) - { - return; - } - foreach($files as $file) - { - if(empty($file['dateiname'])) - { - continue; - } - - $isfile = false; - $data = null; - if(is_file($file['dateiname'])){ - $type = mime_content_type(basename($file['dateiname'])); - if($type != 'text/x-php' && $type != 'text/php' && $type != 'application/php' && $type != 'application/x-php' && $type != 'application/x-httpd-php' && $type != 'application/x-httpd-php-source'){ - if(empty($file['dateiinhalt'])){ - $data = file_get_contents($file['dateiname']); - //$singledatei->dateiinhalt = base64_encode($dateiinhalt); - $isfile = true; - } - }else{ - $file['dateiinhalt'] = ''; - } - } - if(empty($data)) - { - if(empty($file['dateiinhalt'])) - { - $data = ''; - }else{ - $data = base64_decode($file['dateiinhalt']); - } - } - if(empty($data)) - { - continue; - } - if($isfile){ - $name = $this->app->erp->GetTmp().basename($file['dateiname']); - }else{ - $name = $this->app->erp->GetTmp().$file['dateiname']; - } - - file_put_contents($name, $data); - - $pfad = $this->app->Conf->WFuserdata; - $pfad = rtrim($pfad); - $pfad .= '/dms/'; - - if(!file_exists($pfad) && !mkdir($pfad, 0777, true) && !is_dir($pfad)) - { - $this->app->erp->LogFile($pfad.' konnte nicht erstellt werden'); - } - - $speicherpfad = $pfad.$this->app->Conf->WFdbname; - - if(!file_exists($speicherpfad) && !mkdir($speicherpfad, 0777, true) && - !is_dir($speicherpfad)) - { - $this->app->erp->LogFile($speicherpfad.' konnte nicht erstellt werden'); - } - - $fileid = $this->app->erp->CreateDatei($file['dateiname'], !empty($file['titel'])?$file['titel']:$file['dateiname'], !empty($file['beschreibung'])?(string)$file['beschreibung']:'', '', $name, '',true,$speicherpfad); - $subjekt = !empty($file['subjekt'])?(string)$file['subjekt']:'Sonstige'; - if($doctype == 'adresse'){ - $doctype = 'Adressen'; - } - $this->app->erp->AddDateiStichwort($fileid, $subjekt, $doctype, $doctypeid); - } - } - - function ApiAngebotGet($intern = false, $id = null) - { - return $this->ApiBelegGet($intern, $id, 'angebot'); - } - - function ApiAuftragGet($intern = false, $id = null, $doctype = 'auftrag') - { - return $this->ApiBelegGet($intern, $id, 'auftrag'); - } - - - - - function ApiBelegGet($intern = false, $id = null, $doctype = 'auftrag') - { - if(!$id)$id = $this->app->Secure->GetGET("id"); - $belegnr = $this->app->Secure->GetGET("belegnr"); - $projekt= $this->app->Secure->GetGET("projekt"); - - $xmldata = $this->XMLPost(); - if(is_array($xmldata) && !empty($xmldata)){ - $id = $xmldata['id']; - $belegnr = $xmldata['belegnr']; - $projekt= $xmldata['projekt']; - } - if($belegnr!="") - { - if($projekt!="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE belegnr='$belegnr' AND projekt='$projekt' LIMIT 1"); - } else { - $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE belegnr='$belegnr' LIMIT 1"); - } - } - - //check - $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE id='$id' LIMIT 1"); - - if($id > 0) - { - if($intern) { - return $this->app->erp->XMLAuftrag($id, $doctype); - } - $this->XMLResponse(1,$this->app->erp->XMLAuftrag($id, $doctype)); - $this->app->ExitXentral(); - } - - if($intern) { - return false; - } - $this->XMLResponse(5, "".ucfirst($doctype)." nicht gefunden"); - - $this->app->ExitXentral(); - } - - function ApiGutschriftGet($intern = false, $id = null) - { - return $this->ApiBelegGet($intern, $id, 'gutschrift'); - } - - function ApiGutschriftEdit($intern=false,$id="") - { - return $this->ApiBelegEdit($intern, $id, 'gutschrift'); - } - - function ApiGutschriftCreate($intern = false) - { - return $this->ApiBelegCreate($intern, 'gutschrift'); - } - - function ApiLieferscheinGet($intern = false, $id = null) - { - return $this->ApiBelegGet($intern, $id, 'lieferschein'); - } - - function ApiLieferscheinEdit($intern=false,$id="") - { - return $this->ApiBelegEdit($intern, $id, 'lieferschein'); - } - - function ApiLieferscheinCreate($intern = false) - { - return $this->ApiBelegCreate($intern, 'lieferschein'); - } - - function ApiRetoureGet($intern = false, $id = null) - { - return $this->ApiBelegGet($intern, $id, 'retoure'); - } - - function ApiRetoureEdit($intern=false,$id="") - { - return $this->ApiBelegEdit($intern, $id, 'retoure'); - } - - function ApiRetoureCreate($intern = false) - { - return $this->ApiBelegCreate($intern, 'retoure'); - } - - function ApiRechnungGet($intern = false, $id = null) - { - return $this->ApiBelegGet($intern, $id, 'rechnung'); - } - - function ApiRechnungEdit($intern=false,$id="") - { - return $this->ApiBelegEdit($intern, $id, 'rechnung'); - } - - function ApiRechnungCreate($intern = false) - { - return $this->ApiBelegCreate($intern, 'rechnung'); - } - - function ApiBestellungGet($intern = false, $id = null) - { - return $this->ApiBelegGet($intern, $id, 'bestellung'); - } - - function ApiBestellungEdit($intern=false,$id="") - { - return $this->ApiBelegEdit($intern, $id, 'bestellung'); - } - - function ApiBestellungCreate($intern = false) - { - return $this->ApiBelegCreate($intern, 'bestellung'); - } - - - function ApiArtikelCreate($internal = false) - { - $xmldata = $this->XMLPost(); - // anlegen der adresse - $felder = array(); - if($xmldata['name_de']!="" && !is_array($xmldata['name_de'])) { - $id = $this->app->erp->AddArtikel($felder); - } else { - if ($internal) { - return false; - } - $this->XMLResponse(5); - } - - //kundennummer=1 bedeutet gleiche Rolle Kunde anlegen - if($xmldata['projekt']!="" && !is_array($xmldata['projekt'])){ - $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['projekt']."' LIMIT 1"); - if(empty($projektId)){ - $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE id='".(int)$xmldata['projekt']."' LIMIT 1"); - } - $xmldata['projekt'] = $projektId; - }else{ - $xmldata['projekt'] = $this->app->erp->GetStandardProjekt(); - } - - if(strtoupper($xmldata['nummer'])=="NEW" || strtoupper($xmldata['nummer'])=="NEU" || $xmldata['nummer']=="") - $xmldata['nummer'] = $this->app->erp->GetNextArtikelnummer($xmldata['typ'],1,$xmldata['projekt']); - - if($xmldata['lager_platz']!="" && !is_array($xmldata['lager_platz'])) - { - $lagerid = $this->app->DB->Select("SELECT MIN(id) FROM lager WHERE geloescht!='1'"); - if($lagerid<=0) - { - $this->app->DB->Insert("INSERT INTO lager (id,bezeichnung,firma) VALUES ('','Hauptlager',1)"); - $lagerid = $this->app->DB->GetInsertID(); - } - $xmldata['lager_platz'] = $this->app->erp->CreateLagerplatz($lagerid,$xmldata['lager_platz'],$firma="1"); - - if($xmldata['lager_menge'] > 0) - { - $menge = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$id' AND lager_platz='".$xmldata['lager_platz']."'"); - if($menge != $xmldata['lager_menge']) - { - $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE artikel='$id' AND lager_platz='".$xmldata['lager_platz']."'"); - $this->app->erp->LagerEinlagern($id,$xmldata['lager_menge'],$xmldata['lager_platz'],$xmldata['projekt'],"XML Importtool Anpassung"); - } - } - $xmldata['lagerartikel']=1; - } - - if($xmldata['aktiv']=="1") $xmldata['inaktiv']=0; - if($xmldata['aktiv']=="0"|| (array_key_exists('aktiv', $xmldata) && $xmldata['aktiv']=="")) $xmldata['inaktiv']=1; - - if($xmldata['inaktiv']=="1") { - $xmldata['intern_gesperrtgrund']="Artikel inaktiv"; - $xmldata['intern_gesperrt']="1"; - } - - if($xmldata['variante_von_nummer']!="" && !is_array($xmldata['variante_von_nummer'])) { - // pruefen ob es einen echte id ist - $xmldata['variante_von'] = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$xmldata['variante_von_nummer']."' AND nummer!='' LIMIT 1"); - if($xmldata['variante_von'] > 0) - $xmldata['variante']=1; - } - - if(!empty($xmldata['typ_ext']))$typ_ext = (int)$xmldata['typ_ext']; - if(isset($typ_ext) && $typ_ext)$typ_ext = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$typ_ext' LIMIT 1"); - if(isset($typ_ext) && $typ_ext) - { - $xmldata['typ'] = $typ_ext.'_kat'; - unset($xmldata['typ_ext']); - }elseif(isset($xmldata['typ']) && strpos($xmldata['typ'],'_kat') && !empty($xmldata['artikelkategorie'])) - { - $kategorie = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung = '".$this->app->DB->real_escape_string($xmldata['artikelkategorie'])."' LIMIT 1"); - if($kategorie) - { - $xmldata['typ'] = $kategorie.'_kat'; - unset($xmldata['artikelkategorie']); - } - } - - $this->app->DB->Update("UPDATE artikel SET logdatei=now() WHERE id='$id' LIMIT 1"); - - foreach($xmldata as $key=>$value) - { - if(is_array($value))$value=""; - if(is_array($value))$value=""; - if($key=="beschreibung_de") $value = html_entity_decode($value); - if($key=="beschreibung_en") $value = html_entity_decode($value); - if($key=="uebersicht_de") $value = html_entity_decode($value); - if($key=="uebersicht_en") $value = html_entity_decode($value); - if($key=="links_de") $value = html_entity_decode($value); - if($key=="links_en") $value = html_entity_decode($value); - if($key=="startseite_de") $value = html_entity_decode($value); - if($key=="startseite_en") $value = html_entity_decode($value); - if($key=="katalogtext_de") $value = html_entity_decode($value); - if($key=="katalogtext_de") $value = html_entity_decode($value); - if($key=="internerkommentar") $value = strip_tags(html_entity_decode($value)); - - - if($key!="id") - $this->app->DB->Update("UPDATE artikel SET $key='$value' WHERE id='$id' LIMIT 1"); - } - // alle positionen der reihe nach - if($xmldata['stueckliste_artikel']['artikel']['menge'] > 0) - { - $tmp = $xmldata['stueckliste_artikel']['artikel']; - $xmldata['stueckliste_artikel']['artikel']= null; - $xmldata['stueckliste_artikel']['artikel'][0] = $tmp; - } - - $cliste = isset($xmldata['stueckliste_artikel']['artikel'])?count($xmldata['stueckliste_artikel']['artikel']):0; - for($i=0;$i<$cliste;$i++) - { - //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); - $artikel = $id; - $menge = $xmldata['stueckliste_artikel']['artikel'][$i]['menge']; - $xmldata['stueckliste_artikel']['artikel'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['stueckliste_artikel']['artikel'][$i]['projekt']."' LIMIT 1"); - - if($xmldata['stueckliste_artikel']['artikel'][$i]['projekt']!="" && !is_array($xmldata['stueckliste_artikel']['artikel'][$i]['projekt'])) - $stuecklisteartikel = $this->app->DB->Select("SELECT id FROM adresse WHERE nummer='".$xmldata['stueckliste_artikel']['artikel'][$i]['nummer']."' AND projekt='".$xmldata['stueckliste_artikel']['artikel'][$i]['projekt']."' LIMIT 1"); - else - $stuecklisteartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$xmldata['stueckliste_artikel']['artikel'][$i]['nummer']."' LIMIT 1"); - - $this->app->DB->Insert("INSERT INTO stueckliste (id,sort,artikel,stuecklistevonartikel,menge) VALUES ('','".($i+1)."','$stuecklisteartikel','$artikel','$menge')"); - } - - // eiinkaufspreise - if($xmldata['einkaufspreise']['staffelpreis']['ab_menge'] > 0 || $xmldata['einkaufspreise']['staffelpreis']['preis'] > 0) - { - $tmp = $xmldata['einkaufspreise']['staffelpreis']; - $xmldata['einkaufspreise']['staffelpreis']= null; - $xmldata['einkaufspreise']['staffelpreis'][0] = $tmp; - } - - $cliste = isset($xmldata['einkaufspreise']['staffelpreis'])?count($xmldata['einkaufspreise']['staffelpreis']):0; - for($i=0;$i<$cliste;$i++) - { - //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); - $artikel = $id; - $abmenge = $xmldata['einkaufspreise']['staffelpreis'][$i]['ab_menge']; - $xmldata['einkaufspreise']['staffelpreis'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); - - if($xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['projekt'])) - { - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' - AND lieferantennummer!='' AND projekt='".$xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); - - } - else - { - if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer'])) - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' - AND lieferantennummer!='' LIMIT 1"); - - } - - if($adresse <=0) - { - if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname'])) - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE name='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']."' AND name!='' LIMIT 1"); - - } - - if($adresse <=0) - { - if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']=="") - $xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']="Lieferant"; - - $adresse = $this->app->erp->CreateAdresse($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname'],$firma="1"); - - //wenn lieferanennummer vorhanden dann diese verwenden - if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer'])) - $this->app->DB->Update("UPDATE adresse SET lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' WHERE id='$adresse' LIMIT 1"); - - $this->app->erp->AddRolleZuAdresse($adresse, "Lieferant", "von", "Projekt", $xmldata['projekt'] ); - } - - - $bestellnummer = $xmldata['einkaufspreise']['staffelpreis'][$i]['bestellnummer']; - $bezeichnunglieferant = $xmldata['einkaufspreise']['staffelpreis'][$i]['bezeichnunglieferant']; - if(is_array($bestellnummer))$bestellnummer=""; - - if($bezeichnunglieferant=="") - $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); - if(is_array($bezeichnunglieferant) || $bezeichnunglieferant=="" )$bezeichnunglieferant=$xmldata['name_de']; - - $preis = str_replace(',','.',$xmldata['einkaufspreise']['staffelpreis'][$i]['preis']); - $waehrung = $xmldata['einkaufspreise']['staffelpreis'][$i]['waehrung']; - if(is_array($waehrung) || $waehrung=="")$waehrung="EUR"; - - $this->app->erp->AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); - } - - - if($xmldata['verkaufspreise']['staffelpreis']['ab_menge'] > 0) - { - $tmp = $xmldata['verkaufspreise']['staffelpreis']; - $xmldata['verkaufspreise']['staffelpreis']= null; - $xmldata['verkaufspreise']['staffelpreis'][0] = $tmp; - } - // alle positionen der reihe nach - $cstaffelpreise = isset($xmldata['verkaufspreise']['staffelpreis'])?count($xmldata['verkaufspreise']['staffelpreis']):0; - for($i=0;$i<$cstaffelpreise;$i++) - { - $artikel = $id; - $abmenge = $xmldata['verkaufspreise']['staffelpreis'][$i]['ab_menge']; - $xmldata['verkaufspreise']['staffelpreis'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); - - - if($xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']!="" && !is_array($xmldata['verkaufspreise']['staffelpreis'][$i]['projekt'])) - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']."' AND projekt='".$xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); - else - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']."' LIMIT 1"); - - if($xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']=="") - $adresse = 0; - else { - // kunde gibt es nicht - if($adresse <=0) - continue; - } - - if($xmldata['verkaufspreise']['staffelpreis'][$i]['gruppe']>0) - $gruppe = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='".$xmldata['verkaufspreise']['staffelpreis'][$i]['gruppe']."' LIMIT 1"); - else $gruppe = 0; - - $preis = str_replace(',','.',$xmldata['verkaufspreise']['staffelpreis'][$i]['preis']); - $waehrung = $xmldata['verkaufspreise']['staffelpreis'][$i]['waehrung']; - if(is_array($waehrung) || is_array($waehrung)) $waehrung = "EUR"; - - - //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); - if($gruppe > 0) - $this->app->erp->AddVerkaufspreisGruppe($artikel,$abmenge,$gruppe,$preis,$waehrung); - else - $this->app->erp->AddVerkaufspreis($artikel,$abmenge,$adresse,$preis,$waehrung); - } - - $xmldata['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); - if($internal) { - return $xmldata['nummer']; - } - - $this->XMLResponse(1,"$id".$xmldata['nummer'].""); - $this->app->ExitXentral(); - } - - - function ApiArtikelEdit($intern = false) - { - $id = $this->app->Secure->GetGET("id"); - $nummer = $this->app->Secure->GetGET("nummer"); - $projekt = $this->app->Secure->GetGET("projekt"); - $xmldata = $this->XMLPost(); - if($nummer=="" && !empty($xmldata['nummer'])) - $nummer = $xmldata['nummer']; - - if(!empty($xmldata['id_ext']))$id_ext = (int)$xmldata['id_ext']; - if(!empty($xmldata['typ_ext']))$typ_ext = (int)$xmldata['typ_ext']; - if(isset($id_ext) && $id_ext)$id_ext = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht != 1 AND id = '$id_ext' LIMIT 1"); - if(isset($typ_ext) && $typ_ext)$typ_ext = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$typ_ext' LIMIT 1"); - if(isset($typ_ext) && $typ_ext) - { - $xmldata['typ'] = $typ_ext.'_kat'; - unset($xmldata['typ_ext']); - }elseif(isset($xmldata['typ']) && strpos($xmldata['typ'],'_kat') && !empty($xmldata['artikelkategorie'])) - { - $kategorie = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung = '".$this->app->DB->real_escape_string($xmldata['artikelkategorie'])."' LIMIT 1"); - if($kategorie) - { - $xmldata['typ'] = $kategorie.'_kat'; - unset($xmldata['artikelkategorie']); - } - } - if(isset($id_ext) && $id_ext) - { - $id = $id_ext; - }else{ - if($nummer!="") - { - if($projekt!="") - { - $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - if(empty($projektId)){ - $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE id='".(int)$projekt."' LIMIT 1"); - } - $projekt = $projektId; - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND projekt='$projekt' LIMIT 1"); - } else { - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' LIMIT 1"); - } - } - } - - // Key gibt es nicht - if($id <= 0) { - if ($intern == true) { - return false; - } - $this->XMLResponse(5); - } - - //kundennummer=1 bedeutet gleiche Rolle Kunde anlegen - if($xmldata['projekt']!="" && !is_array($xmldata['projekt'])) - $xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['projekt']."' LIMIT 1"); - - - // TODO wenn juststueckliste ist es nie ein lager artikel - if($xmldata['juststueckliste']=="1") - { - $xmldata['lagerartikel']=0; - $xmldata['lager_platz']=""; - $xmldata['lager_menge'] = 0; - } - - - if($xmldata['lager_platz']!="" && !is_array($xmldata['lager_platz'])) - { - $lagerid = $this->app->DB->Select("SELECT MIN(id) FROM lager WHERE geloescht!='1'"); - if($lagerid<=0) - { - $this->app->DB->Insert("INSERT INTO lager (id,bezeichnung,firma) VALUES ('','Hauptlager',1)"); - $lagerid = $this->app->DB->GetInsertID(); - } - - $xmldata['lager_platz'] = $this->app->erp->CreateLagerplatz($lagerid,$xmldata['lager_platz'],$firma="1"); - if($xmldata['lager_menge'] > 0) - { - $menge = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$id' AND lager_platz='".$xmldata['lager_platz']."'"); - if($menge != $xmldata['lager_menge']) - { - $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE artikel='$id' AND lager_platz='".$xmldata['lager_platz']."'"); - $this->app->erp->LagerEinlagern($id,$xmldata['lager_menge'],$xmldata['lager_platz'],$xmldata['projekt'],"XML Importtool Anpassung"); - } - } - $xmldata['lagerartikel']=1; - } - - if($xmldata['aktiv']=="1") $xmldata['inaktiv']=0; - if($xmldata['aktiv']=="0"|| (array_key_exists('aktiv', $xmldata) && $xmldata['aktiv']=="")) $xmldata['inaktiv']=1; - - if($xmldata['inaktiv']=="1") { - $xmldata['intern_gesperrtgrund']="Artikel inaktiv"; - $xmldata['intern_gesperrt']="1"; - } - - if($xmldata['variante_von_nummer']!="" && !is_array($xmldata['variante_von_nummer'])) { - // pruefen ob es einen echte id ist - $xmldata['variante_von'] = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$xmldata['variante_von_nummer']."' AND nummer!='' LIMIT 1"); - if($xmldata['variante_von'] > 0) - $xmldata['variante']=1; - } - - $this->app->DB->Update("UPDATE artikel SET logdatei=now() WHERE id='$id' LIMIT 1"); - - foreach($xmldata as $key=>$value) - { - if(is_array($value))$value=""; - if($key=="beschreibung_de") $value = html_entity_decode($value); - if($key=="beschreibung_en") $value = html_entity_decode($value); - if($key=="uebersicht_de") $value = html_entity_decode($value); - if($key=="uebersicht_en") $value = html_entity_decode($value); - if($key=="links_de") $value = html_entity_decode($value); - if($key=="links_en") $value = html_entity_decode($value); - if($key=="startseite_de") $value = html_entity_decode($value); - if($key=="startseite_en") $value = html_entity_decode($value); - if($key=="katalogtext_de") $value = html_entity_decode($value); - if($key=="katalogtext_de") $value = html_entity_decode($value); - if($key=="internerkommentar") $value = strip_tags(html_entity_decode($value)); - - if($key!="id") - $this->app->DB->Update("UPDATE artikel SET $key='$value' WHERE id='$id' LIMIT 1"); - } - - if($xmldata['stueckliste_artikel']['artikel']['menge'] > 0) - { - $tmp = $xmldata['stueckliste_artikel']['artikel']; - $xmldata['stueckliste_artikel']['artikel']= NULL; - $xmldata['stueckliste_artikel']['artikel'][0] = $tmp; - } - - if(count($xmldata['stueckliste_artikel']['artikel']) > 0) - $this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel='".$id."'"); - - $cartikel = isset($xmldata['stueckliste_artikel']['artikel'])?count($xmldata['stueckliste_artikel']['artikel']):0; - for($i=0;$i<$cartikel;$i++) - { - //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); - $artikel = $id; - $menge = $xmldata['stueckliste_artikel']['artikel'][$i]['menge']; - $xmldata['stueckliste_artikel']['artikel'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['stueckliste_artikel']['artikel'][$i]['projekt']."' LIMIT 1"); - - if($xmldata['stueckliste_artikel']['artikel'][$i]['projekt']!="" && !is_array($xmldata['stueckliste_artikel']['artikel'][$i]['projekt'])) - $stuecklisteartikel = $this->app->DB->Select("SELECT id FROM adresse WHERE nummer='".$xmldata['stueckliste_artikel']['artikel'][$i]['nummer']."' AND projekt='".$xmldata['stueckliste_artikel']['artikel'][$i]['projekt']."' LIMIT 1"); - else - $stuecklisteartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$xmldata['stueckliste_artikel']['artikel'][$i]['nummer']."' LIMIT 1"); - - $this->app->DB->Insert("INSERT INTO stueckliste (id,sort,artikel,stuecklistevonartikel,menge) VALUES ('','".($i+1)."','$stuecklisteartikel','$artikel','$menge')"); - } - - if($xmldata['einkaufspreise']['staffelpreis']['ab_menge'] > 0 || $xmldata['einkaufspreise']['staffelpreis']['preis'] > 0) - { - $tmp = $xmldata['einkaufspreise']['staffelpreis']; - $xmldata['einkaufspreise']['staffelpreis']= NULL; - $xmldata['einkaufspreise']['staffelpreis'][0] = $tmp; - } - - $this->app->erp->SetzteSperreAPIArtikelPreise($id); - $cstaffelpreise = isset($xmldata['einkaufspreise']['staffelpreis'])?count($xmldata['einkaufspreise']['staffelpreis']):0; - for($i=0;$i<$cstaffelpreise;$i++) - { - //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); - $artikel = $id; - // Markierung fuer SPerrung aller nicht uebegebenen Preise - - $abmenge = $xmldata['einkaufspreise']['staffelpreis'][$i]['ab_menge']; - $xmldata['einkaufspreise']['staffelpreis'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); - - if($xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['projekt'])) - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' - AND projekt='".$xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']."' AND lieferantennummer!='' LIMIT 1"); - else - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' - AND lieferantennummer!='' LIMIT 1"); - - if($adresse <=0) - { - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE name='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']."' AND name!='' LIMIT 1"); - } - - if($adresse <=0) - { - if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']=="") - $xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']="Lieferant"; - - $adresse = $this->app->erp->CreateAdresse($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname'],$firma="1"); - // wenn lieferantennummer vorhanden dann diese verwenden - if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer'])) - $this->app->DB->Update("UPDATE adresse SET lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' WHERE id='$adresse' LIMIT 1"); - - $this->app->erp->AddRolleZuAdresse($adresse, "Lieferant", "von", "Projekt", $xmldata['projekt'] ); - } - - - - $bestellnummer = $xmldata['einkaufspreise']['staffelpreis'][$i]['bestellnummer']; - $bezeichnunglieferant = $xmldata['einkaufspreise']['staffelpreis'][$i]['bezeichnunglieferant']; - if(is_array($bestellnummer))$bestellnummer=""; - - if($bezeichnunglieferant=="") - $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); - - - $preis = str_replace(',','.',$xmldata['einkaufspreise']['staffelpreis'][$i]['preis']); - $waehrung = $xmldata['einkaufspreise']['staffelpreis'][$i]['waehrung']; - if(is_array($waehrung) || $waehrung=="") - $waehrung="EUR"; - - $this->app->erp->AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); - } - - if($xmldata['verkaufspreise']['staffelpreis']['ab_menge'] > 0) - { - $tmp = $xmldata['verkaufspreise']['staffelpreis']; - $xmldata['verkaufspreise']['staffelpreis']= NULL; - $xmldata['verkaufspreise']['staffelpreis'][0] = $tmp; - } - - // alle positionen der reihe nach - $cstaffelpreise = isset($xmldata['verkaufspreise']['staffelpreis'])?count($xmldata['verkaufspreise']['staffelpreis']):0; - for($i=0;$i<$cstaffelpreise;$i++) - { - $artikel = $id; - $abmenge = $xmldata['verkaufspreise']['staffelpreis'][$i]['ab_menge']; - $xmldata['verkaufspreise']['staffelpreis'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); - - if($xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']!="" && !is_array($xmldata['verkaufspreise']['staffelpreis'][$i]['projekt'])) - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']."' AND projekt='".$xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); - else - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']."' LIMIT 1"); - - $preis = str_replace(',','.',$xmldata['verkaufspreise']['staffelpreis'][$i]['preis']); - $waehrung = $xmldata['verkaufspreise']['staffelpreis'][$i]['waehrung']; - if(is_array($waehrung) || $waehrung=="") $waehrung = "EUR"; - $kundenartikelnummer = $xmldata['verkaufspreise']['staffelpreis'][$i]['kundenartikelnummer']; - - if($xmldata['verkaufspreise']['staffelpreis'][$i]['geloescht']=="1") $geloescht = 1; - else $geloescht = 0; - - if($xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']=="") - $adresse = 0; - else { - // kunde gibt es nicht - if($adresse <=0) - continue; - } - - // pruefe ob es diesen Preis schon gibt? wenn nicht lege einen neuen an ... - // $projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); - - if($xmldata['verkaufspreise']['staffelpreis'][$i]['gruppe']>0) - $gruppe = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='".$xmldata['verkaufspreise']['staffelpreis'][$i]['gruppe']."' LIMIT 1"); - else $gruppe = 0; - - if($gruppe > 0) - $this->app->erp->AddVerkaufspreisGruppe($artikel,$abmenge,$gruppe,$preis,$waehrung); - else - $this->app->erp->AddVerkaufspreis($artikel,$abmenge,$adresse,$preis,$waehrung); - - //deaktiviere alle alten preise von dem Artikel - } - $this->app->erp->EntferneSperreAPIArtikelPreise($id); - - if ($intern == true) { - return true; - } - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - - function ApiArtikelGet($intern = false, $id="") - { - if($id=="") - $id = $this->app->Secure->GetGET("id"); - $nummer = $this->app->Secure->GetGET("nummer"); - $projekt = $this->app->Secure->GetGET("projekt"); - - $xmldata = $this->XMLPost(); - - if($nummer=="") $nummer = $xmldata["nummer"]; - if($id=="") $id = $xmldata["id"]; - if($projekt=="") $projekt = $xmldata["projekt"]; - - if($nummer!="") - { - if($projekt!="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND projekt='$projekt' LIMIT 1"); - } else { - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' LIMIT 1"); - } - } - //check - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$id' LIMIT 1"); - - - if($id > 0) { - if ($intern == true) { - return $this->app->erp->XMLArtikel($id); - } - $this->XMLResponse(1, $this->app->erp->XMLArtikel($id)); - $this->app->ExitXentral(); - } - if ($intern == true) { - return false; - } - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - - function ApiBenutzerCreate() - { - $xmldata = $this->XMLPost(); - // pruefe ob es adresse gibt - $adressecheck = $this->app->DB->Select("SELECT id FROM adresse WHERE id='".$xmldata["adresse"]."' LIMIT 1"); - if($adressecheck <=0) - $this->XMLResponse(5); - - // pruefe ob es username gibt - $usercheck = $this->app->DB->Select("SELECT id FROM user WHERE username='".$xmldata["username"]."' LIMIT 1"); - if($usercheck > 0) - $this->XMLResponse(5); - - // pruefe ob ein Passwort uebertragen wird - if($xmldata["password"] == ""){ - $this->XMLResponse(5,"kein Passwort übergeben"); - } - - $felder = $xmldata; - - if($felder['type']!="admin") - { - $rechtevorlage = $felder['type']; - $felder['vorlage']=$rechtevorlage; - $felder['type']="standard"; - } - - $id = $this->app->erp->CreateBenutzer($felder); - foreach($xmldata as $key=>$value) - { - if(is_array($value))$value=""; - - if($key=="sonstiges") $value = strip_tags(html_entity_decode($value)); - if($key!="id") { - if($key=="password") { - $this->app->DB->Update("UPDATE `user` SET `passwordmd5` = MD5('$value') WHERE `id` = '$id' LIMIT 1"); - $this->app->DB->Update("UPDATE `user` SET `password` = '' WHERE `id` = '$id' LIMIT 1"); - } else { - $this->app->DB->Update("UPDATE `user` SET $key='$value' WHERE `id` = '$id' LIMIT 1"); - } - } - - } - if(empty($xmldata['passwordunenescaped']) && empty($xmldata['passwordsha512']))$this->app->DB->Update("UPDATE `user` SET salt = '', passwordsha512 = '' WHERE id = '$id' LIMIT 1"); - - $this->app->erp->AbgleichBenutzerVorlagen(); - $this->XMLResponse(1,"$id"); - $this->app->ExitXentral(); - } - - - - function ApiBenutzerEdit() - { - $xmldata = $this->XMLPost(); - if($xmldata['id'] != ''){ - $id = $xmldata['id']; - }else{ - $id = $this->app->Secure->GetGET("id"); - } - - - $usercheck = $this->app->DB->Select("SELECT id FROM `user` WHERE id='".$id."' LIMIT 1"); - // User gibt es nicht - if($usercheck <= 0) - $this->XMLResponse(5); - - $xmldata = $this->XMLPost(); - $usernamecheck = $this->app->DB->Select("SELECT id FROM `user` WHERE username='".$xmldata["username"]."' AND id!='".$id."' LIMIT 1"); - // Username hat schon jemand anders - if($usernamecheck > 0) - $this->XMLResponse(6); - - if($xmldata['type']!="admin") - { - $rechtevorlage = $xmldata['type']; - $xmldata['vorlage']=$rechtevorlage; - $xmldata['type']="standard"; - } - - foreach($xmldata as $key=>$value) - { - if(is_array($value))$value=""; - if($key=="sonstiges") $value = strip_tags(html_entity_decode($value)); - if($key!="id") - $this->app->DB->Update("UPDATE `user` SET $key='$value' WHERE id='$id' LIMIT 1"); - } - - if(empty($xmldata['passwordunenescaped']) && empty($xmldata['passwordsha512']) && !empty($xmldata['passwordmd5']))$this->app->DB->Update("UPDATE `user` SET salt = '', passwordsha512 = '' WHERE id = '$id' LIMIT 1"); - - $this->app->erp->AbgleichBenutzerVorlagen(); - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - function ApiBenutzerGet() - { - $xmldata = $this->XMLPost(); - if($xmldata['id'] != ''){ - $id = $xmldata['id']; - }else{ - $id = $this->app->Secure->GetGET("id"); - } - - - //checl - $id = $this->app->DB->Select("SELECT id FROM user WHERE id='$id' LIMIT 1"); - - if($id > 0){ - $this->XMLResponse(1, $this->app->erp->XMLBenutzer($id)); - $this->app->ExitXentral(); - } - - $this->XMLResponse(5); - - $this->app->ExitXentral(); - } - - function ApiPreiseEdit() - { - $xmldata = $this->XMLPostPlain(); - - foreach ($xmldata->xml->artikel as $artikel){ - if($artikel->id > 0) - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikel->id' LIMIT 1"); - else if ($artikel->nummer!="") - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$artikel->nummer."' LIMIT 1"); - - if($id<=0) continue; - $this->app->erp->SetzteSperreAPIArtikelPreise($id); - - foreach ($artikel->verkaufspreise as $vk) { - foreach ($vk->staffelpreis as $staffelpreis) { - - if($staffelpreis->kundennummer!="") - $staffelpreis->adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$staffelpreis->kundennummer."' LIMIT 1"); - if($staffelpreis->gruppe > 0) - $this->app->erp->AddVerkaufspreisGruppe($id,$staffelpreis->ab_menge,$staffelpreis->gruppe,$staffelpreis->preis); - else if($staffelpreis->adresse > 0) - $this->app->erp->AddVerkaufspreis($id,$staffelpreis->ab_menge,$staffelpreis->adresse,$staffelpreis->preis); - else if($staffelpreis->kundennummer=="" && $staffelpreis->adresse <= 0) - $this->app->erp->AddVerkaufspreis($id,$staffelpreis->ab_menge,0,$staffelpreis->preis); - } - } - - // test - foreach ($artikel->einkaufspreise as $ek) { - foreach ($ek->staffelpreis as $staffelpreis) { - - $lieferantadresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$staffelpreis->lieferantennummer."' AND lieferantennummer!='' LIMIT 1"); - if($lieferantadresse > 0) - { - $this->app->erp->AddEinkaufspreis($id,$staffelpreis->ab_menge,$lieferantadresse,$staffelpreis->bestellnummer,$staffelpreis->bezeichnunglieferant, - $staffelpreis->preis,$staffelpreis->waehrung); - } - } - } - - $this->app->erp->EntferneSperreAPIArtikelPreise($id); - } - - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - - function ApiSessionStart() - { - - $xmldata = $this->XMLPost(); - - $sessionid = $xmldata['sessionID']; - $userID = $xmldata['userID']; - $validSession = $xmldata['isValidSession']; - - if($validSession=="1") - $this->app->DB->Insert("INSERT INTO useronline (user_id,login,sessionid,time) VALUES ('$userID','1','$sessionid',NOW())"); - - $this->XMLResponse(1); - // Eintrag anlegen in useronline - // class.acl.php erweitern, wenn diese merkt das externer login war dann session freischalten ... - $this->app->ExitXentral(); - } - - - function ApiSessionClose() - { - $xmldata = $this->XMLPost(); - - $sessionid = $xmldata['sessionID']; - - $this->app->DB->Delete("DELETE FROM useronline WHERE sessionid='$sessionid' LIMIT 1"); - - $this->XMLResponse(1); - // loeschen aktiver login - $this->app->ExitXentral(); - } - - - function ApiAdresseKontaktCreate() - { - $id = $this->app->Secure->GetGET("id"); - $kundennummer = $this->app->Secure->GetGET("kundennummer"); - $projekt = $this->app->Secure->GetGET("projekt"); - - - $xmldata = $this->XMLPost(); - if($id=="" && $kundennummer=="") - { - if($xmldata["kundennummer"]!="" && !is_array($xmldata["kundennummer"])) - $kundennummer = $xmldata["kundennummer"]; - else - $id = $xmldata["adresse"]; - } - if($kundennummer!="") - { - if($projekt!="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND projekt='$projekt' LIMIT 1"); - } else { - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' LIMIT 1"); - } - } - - // Key gibt es nicht - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$id' LIMIT 1"); - if($id <= 0){ - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - $bezeichnung = $xmldata["bezeichnung"]; - $kontakt = $xmldata["kontakt"]; - $this->app->DB->Insert("INSERT INTO adresse_kontakte (id,adresse,bezeichnung,kontakt) VALUES ('','$id','$bezeichnung','$kontakt')"); - - $id = $this->app->DB->GetInsertID(); - - $this->XMLResponse(1,"$id"); - $this->app->ExitXentral(); - } - - - function ApiAdresseKontaktEdit() - { - $id = $this->app->Secure->GetGET("id"); - if($id==''){ - $xmldata = $this->XMLPost(); - $id = $xmldata['id']; - } - $id = $this->app->DB->Select("SELECT id FROM adresse_kontakte WHERE id='$id' LIMIT 1"); - // Key gibt es nicht - if($id <= 0){ - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - $xmldata = $this->XMLPost(); - - foreach($xmldata as $key=>$value) - { - if(is_array($value)) { - $value=''; - } - if($key!='id'){ - $this->app->DB->Update("UPDATE adresse_kontakte SET $key='$value' WHERE id='$id' LIMIT 1"); - } - } - - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - function ApiAdresseKontaktList() - { - $id = (int)$this->app->Secure->GetGET("id"); - if(!$id){ - $xmldata = $this->XMLPost(); - if($xmldata['id']){ - $id = $xmldata['id']; - } - } - - - if(!$this->app->DB->Select("SELECT id FROM adresse WHERE id = '$id' AND geloescht <> 1 LIMIT 1")) - { - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - $kontakte = $this->app->DB->SelectArr("SELECT * FROM adresse_kontakte WHERE adresse = '$id' ORDER BY bezeichnung"); - if($kontakte) - { - $xmlstr = << - - -XML; - $_xmlobj = new SimpleXMLExtended($xmlstr); - $xmlobj = $_xmlobj->AddChild('kontakte',''); - $xmlobj->AddChild('anz_gesamt',(!empty($kontakte)?count($kontakte):0)); - $xmlobj->AddChild('anz_result',(!empty($kontakte)?count($kontakte):0)); - //$sxe->addAttribute('type', 'documentary'); - - foreach($kontakte as $kontakt) - { - $kobj = $xmlobj->AddChild('kontakt',''); - foreach($kontakt as $k => $v) - { - $valobj = $kobj->AddChild($k, (string)$v); - } - } - - $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - $this->XMLResponse(1,$xml); - $this->app->ExitXentral(); - } - $this->XMLResponse(8); - $this->app->ExitXentral(); - } - - function ApiAdresseKontaktGet() - { - $id = (int)$this->app->Secure->GetGET("id"); - if(!$id){ - $xmldata = $this->XMLPost(); - if($xmldata['id']){ - $id = $xmldata['id']; - } - } - - //checl - $id = $this->app->DB->Select("SELECT id FROM adresse_kontakte WHERE id='$id' LIMIT 1"); - if($id > 0){ - $this->XMLResponse(1, $this->app->erp->XMLAdresseKontakt($id)); - $this->app->ExitXentral(); - } - - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - function ApiAdresseListeGet($intern = false) - { - $xmldata = $this->XMLPost(); - $exakt = false; - $filterspalten = array('email','name','plz','ort','kundennummer','land','strasse','abteilung','unterabteilung','id'); - $limit = ''; - $_limit = 999999999; - $offset = 0; - if(isset($xmldata['limit'])) - { - $_limit = $xmldata['limit']; - if(isset($xmldata['offset'])) - { - $offset = $xmldata['offset']; - //$limit = ' LIMIT '.(int)$xmldata['offset'].', '.(int)$xmldata['limit']; - }else{ - //$limit = ' LIMIT '.(int)$xmldata['limit']; - } - } - - if(!empty($xmldata['gruppen'])) - { - if(isset($xmldata['gruppen']['kennziffer'])) - { - if(!is_array($xmldata['gruppen']['kennziffer'])) - { - $gruppen[0] = $xmldata['gruppen']['kennziffer']; - }else{ - foreach($xmldata['gruppen']['kennziffer'] as $k => $gruppe) - { - $gruppen[] = $gruppe; - } - } - } - } - - $sumjoin = ''; - $sumwhere = ''; - $sumspalten = ''; - $re = false; - $gu = false; - $be = false; - $ab = false; - $an = false; - $filterkategorie = false; - - $bvertrieb = 0; - if($xmldata && is_array($xmldata)) - { - foreach($xmldata as $key => $filter) - { - $filterescaped = ''; - if(!is_array($filter))$filterescaped = $this->app->DB->real_escape_string($filter); - switch(strtoupper($key)) - { - case 'VERTRIEB': - $bvertrieb = (int)$filter; - break; - case 'KATEGORIE': - $filterkategorie = (int)$filter; - break; - } - } - } - - if(isset($xmldata['summierung'])) - { - if(isset($xmldata['summierung']['beleg'])) - { - if(!is_array($xmldata['summierung']['beleg']) || !isset($xmldata['summierung']['beleg'][0])) - { - $belegea[0] = $xmldata['summierung']['beleg']; - }else{ - $belegea = $xmldata['summierung']['beleg']; - } - foreach($belegea as $beleg) - { - switch($beleg) - { - case 'rechnung': - if(!$re) - { - $re = true; - $sumspalten .= ', (SELECT sum(re.umsatz_netto) FROM rechnung re WHERE re.adresse = adr.id '.($bvertrieb?" AND re.vertriebid = '".$bvertrieb."' ":''); - $sumjoin .= ' LEFT JOIN rechnung re ON re.adresse = adr.id '; - $skat = ''; - if($filterkategorie)$skat = ' , (SELECT rear.id FROM rechnung re2 INNER JOIN rechnung_position rep2 ON re2.id = rep2.rechnung INNER JOIN artikel rear ON rep2.artikel = rear.id WHERE re2.adresse = adr.id AND rear.typ = \''.$filterkategorie.'_kat\' '; - //if($sumwhere != '')$sumwhere .= ' AND '; - if(isset($xmldata['status'])) - { - $sumspalten .= " AND re.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - $skat .= " AND re2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - //$sumwhere .= " (isnull(re.id) OR (re.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - }else{ - $sumspalten .= " AND re.status != 'storniert' AND re.status <> 'angelegt' "; - $skat .= " AND re2.status != 'storniert' AND re2.status <> 'angelegt' "; - //$sumwhere .= " (isnull(re.id) OR (re.status != 'storniert' AND re.status <> 'angelegt' "; - } - if(isset($xmldata['datumvon'])) - { - $sumspalten .= " AND re.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - $skat .= " AND re2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - //$sumwhere .= " AND re.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - } - if(isset($xmldata['datumbis'])) - { - $sumspalten .= " AND re.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - $skat .= " AND re2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - //$sumwhere .= " AND re.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - } - //$sumwhere .= "))"; - - $sumspalten .= ') as rechnung_umsatz_netto'; - if($filterkategorie)$skat .= ' LIMIT 1) as re_iskat '; - if($filterkategorie)$sumspalten .= $skat; - } - break; - case 'gutschrift': - if(!$gu) - { - $gu = true; - $sumspalten .= ', (SELECT sum(gu.umsatz_netto) FROM gutschrift gu WHERE gu.adresse = adr.id '.($bvertrieb?" AND gu.vertriebid = '".$bvertrieb."' ":''); - //$sumspalten .= ', sum(gu.soll) as gutschrift_soll'; - $sumjoin .= ' LEFT JOIN gutschrift gu ON gu.adresse = adr.id '; - $skat = ''; - if($filterkategorie)$skat = ' , (SELECT guar.id FROM gutschrift gu2 INNER JOIN gutschrift_position gup2 ON gu2.id = gup2.gutschrift INNER JOIN artikel guar ON gup2.artikel = guar.id WHERE gu2.adresse = adr.id AND guar.typ = \''.$filterkategorie.'_kat\' '; - //if($sumwhere != '')$sumwhere .= ' AND '; - if(isset($xmldata['status'])) - { - $sumspalten .= " AND gu.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - $skat .= " AND gu2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - //$sumwhere .= " (isnull(gu.id) OR (gu.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - }else{ - $sumspalten .= " AND gu.status != 'storniert' AND gu.status <> 'angelegt' "; - $skat .= " AND gu2.status != 'storniert' AND gu2.status <> 'angelegt' "; - //$sumwhere .= " (isnull(gu.id) OR (gu.status != 'storniert' AND gu.status <> 'angelegt' "; - } - if(isset($xmldata['datumvon'])) - { - $sumspalten .= " AND gu.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - $skat .= " AND gu2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - //$sumwhere .= " AND gu.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - } - if(isset($xmldata['datumbis'])) - { - $sumspalten .= " AND gu.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - $skat .= " AND gu2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - //$sumwhere .= " AND gu.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - } - //$sumwhere .= "))"; - $sumspalten .= ') as gutschrift_umsatz_netto'; - if($filterkategorie)$skat .= ' LIMIT 1) as gu_iskat '; - if($filterkategorie)$sumspalten .= $skat; - } - break; - case 'bestellung': - if(!$be) - { - $be = true; - //$sumspalten .= ', sum(be.gesamtsumme) as bestellung_gesamtsumme'; - $sumspalten .= ', (SELECT sum(be.gesamtsumme) FROM bestellung be WHERE be.adresse = adr.id '; - $sumjoin .= ' LEFT JOIN bestellung be ON be.adresse = adr.id '; - $skat = ''; - if($filterkategorie)$skat = ' , (SELECT bear.id FROM bestellung be2 INNER JOIN bestellung_position bep2 ON be2.id = bep2.bestellung INNER JOIN artikel bear ON bep2.artikel = bear.id WHERE be2.adresse = adr.id AND bear.typ = \''.$filterkategorie.'_kat\' '; - //if($sumwhere != '')$sumwhere .= ' AND '; - if(isset($xmldata['status'])) - { - $sumspalten .= " AND be.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - $skat .= " AND be2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - //$sumwhere .= " (isnull(be.id) OR (be.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - }else{ - $sumspalten .= " AND be.status != 'storniert' AND be.status <> 'angelegt' "; - $skat .= " AND be2.status != 'storniert' AND be2.status <> 'angelegt' "; - //$sumwhere .= " (isnull(be.id) OR (be.status != 'storniert' AND be.status <> 'angelegt' "; - } - if(isset($xmldata['datumvon'])) - { - $sumspalten .= " AND be.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - $skat .= " AND be2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - //$sumwhere .= " AND be.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - } - if(isset($xmldata['datumbis'])) - { - $sumspalten .= " AND be.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - $skat .= " AND be2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - //$sumwhere .= " AND be.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - } - //$sumwhere .= "))"; - $sumspalten .= ') as bestellung_gesamtsumme '; - if($filterkategorie)$skat .= ' LIMIT 1) as be_iskat '; - if($filterkategorie)$sumspalten .= $skat; - } - break; - case 'auftrag': - if(!$ab) - { - $ab = true; - $sumspalten .= ', (SELECT sum(ab.umsatz_netto) FROM auftrag ab WHERE ab.adresse = adr.id '.($bvertrieb?" AND re.vertriebid = '".$bvertrieb."' ":''); - //$sumspalten .= ', sum(ab.gesamtsumme) as auftrag_gesamtsumme'; - $sumjoin .= ' LEFT JOIN auftrag ab ON ab.adresse = adr.id '; - $skat = ''; - if($filterkategorie)$skat = ' , (SELECT abar.id FROM auftrag ab2 INNER JOIN auftrag_position abp2 ON ab2.id = abp2.auftrag INNER JOIN artikel abar ON abp2.artikel = abar.id WHERE ab2.adresse = adr.id AND abar.typ = \''.$filterkategorie.'_kat\' '; - //if($sumwhere != '')$sumwhere .= ' AND '; - if(isset($xmldata['status'])) - { - $sumspalten .= " AND ab.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - $skat .= " AND ab2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - //$sumwhere .= " (isnull(ab.id) OR (ab.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - }else{ - $sumspalten .= " AND ab.status != 'storniert' AND ab.status <> 'angelegt' "; - $skat .= " AND ab2.status != 'storniert' AND ab2.status <> 'angelegt' "; - //$sumwhere .= " (isnull(ab.id) OR (ab.status != 'storniert' AND ab.status <> 'angelegt' "; - } - if(isset($xmldata['datumvon'])) - { - $sumspalten .= " AND ab.datum <= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - $skat .= " AND ab2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - //$sumwhere .= " AND ab.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - } - if(isset($xmldata['datumbis'])) - { - $sumspalten .= " AND ab.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - $skat .= " AND ab2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - //$sumwhere .= " AND ab.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - } - //$sumwhere .= "))"; - $sumspalten .= ') as auftrag_umsatz_netto '; - if($filterkategorie)$skat .= ' LIMIT 1) as ab_iskat '; - if($filterkategorie)$sumspalten .= $skat; - } - break; - case 'angebot': - if(!$an) - { - $an = true; - $sumspalten .= ', (SELECT sum(an.umsatz_netto) FROM angebot an WHERE an.adresse = adr.id '.($bvertrieb?" AND an.vertriebid = '".$bvertrieb."' ":''); - //$sumspalten .= ', sum(an.gesamtsumme) as angebot_gesamtsumme'; - $sumjoin .= ' LEFT JOIN angebot an ON an.adresse = adr.id '; - $skat = ''; - if($filterkategorie)$skat = ' , (SELECT anar.id FROM angebot an2 INNER JOIN angebot_position an2 ON an2.id = anp2.auftrag INNER JOIN artikel anar ON anp2.artikel = anar.id WHERE an2.adresse = adr.id AND anar.typ = \''.$filterkategorie.'_kat\' '; - //if($sumwhere != '')$sumwhere .= ' AND '; - if(isset($xmldata['status'])) - { - //$sumwhere .= " (isnull(an.id) OR (an.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - $sumspalten .= " AND an.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - $skat .= " AND an2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; - }else{ - //$sumwhere .= " (isnull(an.id) OR (an.status != 'storniert' AND an.status <> 'angelegt' "; - $sumspalten .= " AND an.status != 'storniert' AND an.status <> 'angelegt' "; - $skat .= " AND an2.status != 'storniert' AND an2.status <> 'angelegt' "; - } - if(isset($xmldata['datumvon'])) - { - $sumspalten .= " AND an.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - $skat .= " AND an2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - //$sumwhere .= " AND an.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; - } - if(isset($xmldata['datumbis'])) - { - $sumspalten .= " AND an.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - $skat .= " AND an2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - //$sumwhere .= " AND an.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; - } - //$sumwhere .= "))"; - $sumspalten .= ') as angebot_umsatz_netto '; - if($filterkategorie)$skat .= ' LIMIT 1) as an_iskat '; - if($filterkategorie)$sumspalten .= $skat; - } - break; - } - } - /* - if($sumwhere != '') - { - - if($re) - { - $sumwherea[] = " not isnull(re.id) "; - } - if($gu) - { - $sumwherea[] = " not isnull(gu.id) "; - } - if($ab) - { - $sumwherea[] = " not isnull(ab.id) "; - } - if($an) - { - $sumwherea[] = " not isnull(an.id) "; - } - if($be) - { - $sumwherea[] = " not isnull(be.id) "; - } - - $sumwhere .= " AND ( ".implode(" OR ",$sumwherea)." ) "; - }*/ - } - } - - //if($sumwhere != '')$sumwhere = ' AND ('.$sumwhere.') '; - $sumwhere = ''; - $sumjoin = ''; - $searchmode = ' AND '; - if($xmldata && is_array($xmldata)) - { - foreach($xmldata as $key => $filter) - { - $filterescaped = ''; - if(!is_array($filter))$filterescaped = $this->app->DB->real_escape_string($filter); - switch(strtoupper($key)) - { - case 'EXAKT': - $exakt = true; - break; - case 'SEARCHMODE': - if(strtoupper($filter) == 'AND')$searchmode = ' AND '; - if(strtoupper($filter) == 'OR')$searchmode = ' OR '; - break; - case 'SEARCH': - - if(is_array($filter)) - { - if(isset($filter[0])) - { - foreach($filter as $k => $_filter) - { - if(isset($_filter['SUCHE']))$_filter['suche'] = $_filter['SUCHE']; - if(isset($_filter['FIELD']))$_filter['field'] = $_filter['FIELD']; - if(isset($_filter['EXAKT']))$_filter['exakt'] = $_filter['EXAKT']; - if(isset($_filter['suche']) && isset($_filter['field']) && in_array(strtolower($_filter['field']),$filterspalten)) - { - if(isset($_filter['exakt']) && $_filter['exakt'] == 1) - { - if(strtolower($_filter['field']) == 'id') - { - $swhere[] = " adr.".$_filter['field']." LIKE '".$this->app->DB->real_escape_string((int)($_filter['suche']))."' "; - }else - $swhere[] = " adr.".$_filter['field']." LIKE '".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."' "; - }else{ - if(strtolower($_filter['field']) == 'id') - { - $swhere[] = " adr.".$_filter['field']." LIKE '%".$this->app->DB->real_escape_string((int)($_filter['suche']))."%' "; - } - else - $swhere[] = " adr.".$_filter['field']." LIKE '%".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."%' "; - } - } - } - }else{ - if(isset($filter['SUCHE']))$filter['suche'] = $filter['SUCHE']; - if(isset($filter['FIELD']))$filter['field'] = $filter['FIELD']; - if(isset($filter['EXAKT']))$filter['exakt'] = $filter['EXAKT']; - if(isset($filter['suche']) && isset($filter['field']) && in_array(strtolower($filter['field']),$filterspalten)) - { - if(strtolower($filter['field']) == 'id') - { - if(isset($filter['exakt']) && $filter['exakt'] == 1) - { - $swhere[] = " adr.".$filter['field']." LIKE '".$this->app->DB->real_escape_string((int)($filter['suche']))."' "; - }else{ - $swhere[] = " adr.".$filter['field']." LIKE '%".$this->app->DB->real_escape_string((int)($filter['suche']))."%' "; - } - - }else{ - if(isset($filter['exakt']) && $filter['exakt'] == 1) - { - $swhere[] = " adr.".$filter['field']." LIKE '".$this->app->DB->real_escape_string(base64_decode($filter['suche']))."' "; - }else{ - $swhere[] = " adr.".$filter['field']." LIKE '%".$this->app->DB->real_escape_string(base64_decode($filter['suche']))."%' "; - } - } - } - } - }else{ - $suchbegriff = $this->app->DB->real_escape_string(base64_decode($filterescaped)); - } - - //$subwhere[] = " (adr.name like '%$filterescaped%' OR adr.plz like '%$filterescaped%' OR adr.ort like '%$filterescaped%' OR adr.kundennummer like '%$filterescaped%') "; - - break; - case 'SUCHSPALTE': - //if($filterescaped)$customsearch[] = $filterescaped; - break; - case 'VERTRIEB': - $subwhere[] = " adr.vertrieb = '".(int)$filter."' "; - break; - case 'EXT': - $filter_ext = $filter; - break; - case 'ID': - if(is_array($filter) && isset($filter[0])) - { - foreach($filter as $k => $_filter) - { - $subwhere[] = " adr.id = '".(int)$_filter."' "; - } - }else - $subwhere[] = " adr.id = '".(int)$filter."' "; - break; - } - } - } - - - if(isset($suchbegriff) || !empty($swhere)) - { - if(empty($swhere)) - { - foreach($filterspalten as $f) - { - $swhere[] = " adr.".$f." like '".($exakt?'':"%").($suchbegriff).($exakt?'':"%")."' "; - } - $subwhere[] = ' ('.implode(' '.$searchmode.' ', $swhere).') '; - }else{ - /*foreach($customsearch as $f) - { - if(in_array($f, $filterspalten))$swhere[] = " adr.".$f." like '".($exakt?'':"%").($suchbegriff).($exakt?'':"%")."' "; - }*/ - if(!empty($swhere))$subwhere[] = " (".implode(' '.$searchmode.' ', $swhere).') '; - } - } - $where = '1'; - if(!empty($subwhere))$where = implode(' '.$searchmode.' ',$subwhere); - - - $order = ''; - if(isset($xmldata['order'])){ - if(!isset($xml['order'][0])) - { - $xmldata['order'][0] = $xmldata['order']; - } - foreach($xmldata['order'] as $key => $sort) - { - $field = ''; - if(isset($sort['field'])) - { - switch(strtolower($sort['field'])) - { - case 'gruppenname': - case 'kennziffer': - if($gruppen)$field = 'gr.name'; - break; - - case 'name': - case 'plz': - case 'ort': - case 'telefon': - case 'telefax': - case 'ansprechpartner': - case 'typ': - case 'strasse': - case 'land': - case 'email': - case 'kundennummer': - case 'lieferantennummer': - $field = 'adr.'.strtolower($sort['field']); - break; - } - if(!empty($field)) - { - if(isset($sort['desc']) && $sort['desc'] == 1) - { - $field .= " DESC"; - } - if($order != '')$order .= ','; - $order .= $field; - } - } - } - } - if($order != '')$order = $order.','; - - if(isset($gruppen)) - { - $where .= " AND (gr.kennziffer = '".implode("' OR gr.kennziffer = '",$gruppen). "') AND (ar.bis = '0000-00-00' OR ar.bis >= date(now())) "; - if(isset($filter_ext)) - { - if(strtolower($filter_ext) == 'ja') - { - $where .= " AND not isnull(am.id) "; - }elseif(strtolower($filter_ext) == 'nein') - { - $where .= " AND isnull(am.id) "; - } - $sql = "SELECT adr.*, gr.kennziffer, gr.name as gruppenname,am.id_ext $sumspalten FROM adresse adr LEFT JOIN api_mapping am ON am.id_int = adr.id AND am.tabelle = 'adresse' INNER JOIN adresse_rolle ar ON adr.id = ar.adresse AND ar.objekt like 'gruppe' INNER JOIN gruppen gr ON gr.id = ar.parameter $sumjoin WHERE $where $sumwhere ORDER BY $order adr.name, adr.id $limit"; - $adressen = $this->app->DB->Query($sql); - - }else{ - $sql = "SELECT adr.*, gr.kennziffer, gr.name as gruppenname $sumspalten FROM adresse adr INNER JOIN adresse_rolle ar ON adr.id = ar.adresse AND ar.objekt like 'gruppe' INNER JOIN gruppen gr ON gr.id = ar.parameter $sumjoin WHERE $where $sumwhere ORDER BY $order adr.name, adr.id $limit"; - $adressen = $this->app->DB->Query($sql); - - } - } - else{ - if(isset($filter_ext)) - { - if(strtolower($filter_ext) == 'ja' || $filter_ext === '1' || $filter_ext === 1) - { - $where .= " AND not isnull(am.id) "; - }elseif(strtolower($filter_ext) == 'nein' || $filter_ext === '0' || $filter_ext === 0) - { - $where .= " AND isnull(am.id) "; - } - $sql = "SELECT adr.*,am.id_ext $sumspalten FROM adresse adr LEFT JOIN api_mapping am ON am.id_int = adr.id AND am.tabelle = 'adresse' $sumjoin WHERE $where $sumwhere ORDER BY $order adr.name, adr.id $limit"; - $adressen = $this->app->DB->Query($sql); - - }else{ - $sql = "SELECT adr.* $sumspalten FROM adresse adr $sumjoin WHERE $where $sumwhere ORDER BY $order adr.name, adr.id $limit"; - $adressen = $this->app->DB->Query($sql); - - } - } - error_log($sql . "\r\n", 3, "/var/www/html/debug.log"); - if($adressen) - { - -$xmlstr = << - - -XML; - $_xmlobj = new SimpleXMLExtended($xmlstr); - $xmlobj = $_xmlobj->AddChild('adressen',''); - //$sxe->addAttribute('type', 'documentary'); - - - - $xml = ''; - $anz_gesamt = 0; - $anz_result = 0; - $i = 0; - $gesamt_umsatz = 0; - $anzeige_umsatz = 0; - while($adresse = $this->app->DB->Fetch_Array($adressen)) - { - - $do = true; - if($re && $gu) - { - - if(isset($xmldata['umsatzvon'])) - { - if((float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto'] < (float)$xmldata['umsatzvon'])$do = false; - } - if(isset($xmldata['umsatzbis'])) - { - if((float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto'] > (float)$xmldata['umsatzbis'])$do = false; - } - }elseif($re) - { - if(isset($xmldata['umsatzvon'])) - { - if((float)$adresse['rechnung_umsatz_netto'] < (float)$xmldata['umsatzvon'])$do = false; - } - if(isset($xmldata['umsatzbis'])) - { - if((float)$adresse['rechnung_umsatz_netto'] > (float)$xmldata['umsatzbis'])$do = false; - } - } - if($filterkategorie && $do) - { - $do2 = false; - if($re && $adresse['re_iskat'])$do2 = true; - if($gu && $adresse['gu_iskat'])$do2 = true; - if($be && $adresse['be_iskat'])$do2 = true; - if($ab && $adresse['ab_iskat'])$do2 = true; - if($an && $adresse['an_iskat'])$do2 = true; - if(!$do2)$do = false; - } - if($do && $re && $gu) - { - $gesamt_umsatz += (float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto']; - } - if($do && $i >= $offset && $i < $offset+$_limit) - { - $anzeige_umsatz += (float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto']; - $adrobj = $xmlobj->AddChild('adresse',''); - //$xml .= ''; - $RowKeys = array_keys($adresse); - $RowValues = array_values($adresse); - $cRowKeys = (!empty($RowKeys)?count($RowKeys):0); - for($k = 1; $k < $cRowKeys;$k+=2) - { - if($RowKeys[$k] !== 're_iskat' && $RowKeys[$k] !== 'gu_iskat' && $RowKeys[$k] !== 'be_iskat' && $RowKeys[$k] !== 'ab_iskat' && $RowKeys[$k] !== 'an_iskat') - { - if($RowKeys[$k] === 'rechnung_umsatz_netto' || $RowKeys[$k] === 'gutschrift_umsatz_netto' || $RowKeys[$k] === 'bestellung_umsatz_netto' || $RowKeys[$k] === 'auftrag_umsatz_netto' || $RowKeys[$k] === 'angebot_umsatz_netto') - $RowValues[$k] = number_format((float)$this->GetPlainText($RowValues[$k]),2,'.',''); - $valobj = $adrobj->AddChild($RowKeys[$k],''); - if($this->usecdata) - { - if ((string)$this->GetPlainText($RowValues[$k]) != '')$valobj->addCData($RowValues[$k]); - }else { - if ((string)$this->GetPlainText($RowValues[$k]) != '') $valobj->value = (string)$this->app->erp->GetPlainText($RowValues[$k]); - } - } - //$xml .= '<'.$RowKeys[$k].'>'.(string)$this->app->erp->GetPlainText($RowValues[$k]).''; - } - //$xml .= ''; - $anz_result++; - } - if($do)$i++; - } - $xmlobj->AddChild('anz_gesamt',$i); - $xmlobj->AddChild('anz_result',$anz_result); - if($re && $gu) - { - $xmlobj->AddChild('anzeige_umsatz',number_format($anzeige_umsatz,2,'.','')); - $xmlobj->AddChild('gesamt_umsatz',number_format($gesamt_umsatz,2,'.','')); - } - $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); - unset($_xmlobj); - - }else{ - $xml = '00'; - if($this->app->DB->error()) - { - $xml .= '' .$this->GetPlainText($this->app->DB->error()).''; - } - } - //$xml .= $xmldata; - if ($intern != false) { - return $xml; - } - $this->XMLResponse(1,$xml); - $this->app->ExitXentral(); - } - - - function ApiGruppeCreate() - { - $id = $this->app->Secure->GetGET("id"); - - $xmldata = $this->XMLPost(); - - $this->app->DB->Insert("INSERT INTO gruppen (id) VALUES ('')"); - - $id = $this->app->DB->GetInsertID(); - - $this->ApiGruppeEdit($id,true); - - $this->XMLResponse(1,"$id"); - $this->app->ExitXentral(); - } - - - function ApiGruppeEdit($id="",$internal=false) - { - $xmldata = $this->XMLPost(); - $id = $xmldata['id']; - if($id <=0) - $id = $this->app->Secure->GetGET("id"); - - $id = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='$id' LIMIT 1"); - // Key gibt es nicht - if($id <= 0) - $this->XMLResponse(5); - - $xmldata = $this->XMLPost(); - - if($xmldata['porto_preis']!="" && $xmldata['porto_artikelid']!="" && !is_array($xmldata['porto_preis'])) - { - $this->app->erp->AddVerkaufspreisGruppe($xmldata['porto_artikelid'],1,$id,$xmldata['porto_preis']); - } - - foreach($xmldata as $key=>$value) - { - if(is_array($value)) { - $value=''; - } - if($key==='internebemerkung') { - $value = html_entity_decode($value); - } - if($key!=='id'){ - $this->app->DB->Update("UPDATE gruppen SET $key='$value' WHERE id='$id' LIMIT 1"); - } - } - - if($internal){ - return $id; - } - - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - - public function ApiGruppeGet() - { - $xmldata = $this->XMLPost(); - if($xmldata['id'] == '') { - $id = $this->app->Secure->GetGET("id"); - }else{ - $id =$xmldata['id']; - } - //checl - $id = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='$id' LIMIT 1"); - - if($id > 0){ - $this->XMLResponse(1, $this->app->erp->XMLGruppe($id, $this->usecdata)); - $this->app->ExitXentral(); - } - - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - - // alte funktion - public function ApiShopimages() - { - $artikel = $this->app->Secure->GetGET("artikel"); - $number = $this->app->Secure->GetGET("number"); - $datei = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel'"); - if($number <= 0) $number = 1; - - $datei = $datei[$number-1]['datei']; - - $mimetype = mime_content_type($this->app->erp->GetDateiPfad($datei)); - // Wir werden eine PDF Datei ausgeben - header('Content-type: '.$mimetype); - echo $this->app->erp->GetDatei($datei); - $this->app->ExitXentral(); - } - - public function ApiExportVorlageGet() - { - $id = $this->app->Secure->GetGET("id"); - $projekt = $this->app->Secure->GetGET("projekt"); - $von = $this->app->Secure->GetGET("von"); - $bis = $this->app->Secure->GetGET("bis"); - - if($id!="") - { - if($projekt!="") - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); - } - } - - //check - $id = $this->app->DB->Select("SELECT id FROM exportvorlage WHERE id='$id' AND apifreigabe=1 LIMIT 1"); - - $filter['projekt']=$projekt; - $filter['von']=$von; - $filter['bis']=$bis; - - if($id > 0){ - $this->XMLResponse(1, $this->app->erp->XMLExportVorlage($id, $filter, $this->usecdata)); - $this->app->ExitXentral(); - } - - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - public function ApiBerichteGet() - { - $id = $this->app->Secure->GetGET("id"); - - $xmldata = $this->XMLPost(); - if($id=="") $id = $xmldata['id']; - - $id = $this->app->DB->Select("SELECT id FROM berichte WHERE id='$id' LIMIT 1"); - - if($id > 0){ - $this->XMLResponse(1, $this->app->erp->XMLBerichte($id, $this->usecdata)); - $this->app->ExitXentral(); - } - $this->XMLResponse(5); - $this->app->ExitXentral(); - } - - public function ApiArtikelList($intern = false) - { - $xmldata = $this->XMLPost(); - $keys = array_keys($xmldata); - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.* FROM artikel a"; - if($xmldata['kategorie'] != ''){ - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.*,ak.bezeichnung FROM artikel a"; - $tabellenkuerzel = "a."; - $sql .= " inner join artikelkategorien ak on ak.id = SUBSTRING_INDEX(a.typ,'_',1)"; - } - $wherevorhanden = false; - $ckeys = (!empty($keys)?count($keys):0); - for($i=0; $i<$ckeys; $i++){ - if( ($keys[$i] != "order") && ($keys[$i] != "field") && ($keys[$i] != "limit") && ($keys[$i] != "offset") ){ - $this->app->DB->Select("SELECT '" . $keys[$i] . "' FROM artikel LIMIT 1"); - if ($this->app->DB->error() == '') { - if ($wherevorhanden == false) { - if($keys[$i] == 'kategorie'){ - // schauen ob mehrere kategorien - if(is_array($xmldata[$keys[$i]])){ - $sql .= " WHERE ("; - foreach($xmldata[$keys[$i]] as $katvalue){ - if(is_numeric($katvalue)){ - $sql .= " ak.id = '" . $katvalue . "' OR "; - } else { - $sql .= " ak.bezeichnung LIKE '%" . $katvalue . "%' OR "; - } - } - $sql = rtrim($sql, " OR"); - $sql .= " ) "; - - }else{ - if(is_numeric($xmldata[$keys[$i]])){ - $sql .= " WHERE ak.id = '" . $xmldata[$keys[$i]] . "' AND "; - } else { - $sql .= " WHERE ak.bezeichnung LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; - } - } - } else { - $sql .= " WHERE " . $tabellenkuerzel.$keys[$i] . " LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; - } - - $wherevorhanden = true; - } else { - if($keys[$i] === 'kategorie') { - $sql .= "ak.bezeichnung LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; - }elseif($keys[$i] === 'nummer') { - if(is_array($xmldata[$keys[$i]])) { - - } else{ - $sql .= $tabellenkuerzel . $keys[$i] . " LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; - } - } else{ - $sql .= $tabellenkuerzel.$keys[$i] . " LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; - } - } - } - } - } - $sql = trim($sql); - $sql = rtrim($sql, " AND"); - - if (array_key_exists('order', $xmldata)) { - if (is_array($xmldata['order'])) { - $orderkeys = array_keys($xmldata['order']); - if (array_key_exists('field', $xmldata['order'])) { - if ($xmldata['order']['field'] != "") { - $this->app->DB->Select("SELECT " . $xmldata['order']['field'] . " FROM artikel LIMIT 1"); - if ($this->app->DB->error() == '') { - if ($xmldata['order']['desc'] == 0 || $xmldata['order']['desc'] == "") { - $sql .= " ORDER BY " . $tabellenkuerzel . $xmldata['order']['field'] . " ASC"; - } elseif ($xmldata['order']['desc'] == 1) { - $sql .= " ORDER BY " . $tabellenkuerzel . $xmldata['order']['field'] . " DESC"; - } - } - } - - } - } - - if (array_key_exists('limit', $xmldata)) { - if ($xmldata['limit'] > 0) { - if (array_key_exists('offset', $xmldata)) { - if ($xmldata['offset'] != "") { - $sql .= " LIMIT " . $xmldata['offset'] . ", " . $xmldata['limit']; - } else { - $sql .= " LIMIT " . $xmldata['limit']; - } - } else { - $sql .= " LIMIT " . $xmldata['limit']; - } - } - } - } - - $ergebnis = $this->app->DB->SelectArr($sql); - $anz_gesamt = $this->app->DB->Select("SELECT FOUND_ROWS()"); - if(!is_array($ergebnis)){ - $this->XMLResponse(1,$sql); - } - - $output = ""; - - if((!empty($ergebnis)?count($ergebnis):0)>0) - { - $output .= ""; - - $cergebnis = (!empty($ergebnis)?count($ergebnis):0); - for($i=0;$i<$cergebnis;$i++) - { - $output .= ""; - - foreach($ergebnis[$i] as $key=>$value){ - if($this->usecdata) { - $output .= "<$key>"; - }else{ - $output .= "<$key>" . htmlspecialchars($value) . ""; - } - } - $output .= ""; - } - $output .= "".$anz_gesamt.""; - $output .= "".(!empty($ergebnis)?count($ergebnis):0).""; - $output .= "".$sql.""; - $output .= ""; - } - - if($output != ""){ - if ($intern != false) { - return $output; - } - $this->XMLResponse(1, $output); - $this->app->ExitXentral(); - } - if ($intern != false) { - return false; - } - $this->XMLResponse(4); - $this->app->ExitXentral(); - } - - public function ApiArtikelStueckliste() - { - $xmldata = $this->XMLPost(); - - $keys = array_keys($xmldata); - - //$this->app->erp->LogFile(print_r($xmldata, 1)); - - $mineininserterfolgreich = false; - - if(array_key_exists('stuecklistevonartikel', $xmldata)){ - $artikelvorhanden = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$xmldata['stuecklistevonartikel']."' LIMIT 1"); - if($artikelvorhanden != ""){ - $altestueckliste = $this->app->DB->SelectArr("SELECT id FROM stueckliste WHERE stuecklistevonartikel = '$artikelvorhanden'"); - if(array_key_exists('items', $xmldata)){ - if(is_array($xmldata['items'])){ - if($xmldata['items']['item'][1] != ""){ - $stuecklistearray = $xmldata['items']['item']; - }else{ - $stuecklistearray = $xmldata['items']; - } - foreach($stuecklistearray as $key=>$value){ - if(array_key_exists('stuecklistemenge', $value)){ - $stuecklistemenge = str_replace(',', '.', $value['stuecklistemenge']); - if($stuecklistemenge > 0){ - if(array_key_exists('nummer', $value)){ - $nummervorhanden = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$value['nummer']."' LIMIT 1"); - if($nummervorhanden != ""){ - //hier optional - if(array_key_exists('stuecklisteart', $value) && !is_array($value['stuecklisteart'])){//standard et - $stuecklisteart = $value['stuecklisteart']; - if($stuecklisteart != "et" && $stuecklisteart != "it" && $stuecklisteart != "bt"){ - $stuecklisteart = "et"; - }else{ - $stuecklisteart = $value['stuecklisteart']; - } - if($stuecklisteart == ""){ - $stuecklisteart = "et"; - } - }else{ - $stuecklisteart = "et"; - } - if(array_key_exists('stuecklistealternative', $value) && !is_array($value['stuecklistealternative'])){ - $stuecklistealternative = $value['stuecklistealternative']; - if($stuecklistealternative == ""){ - $stuecklistealternative = "0"; - }else{ - $alternativevorhanden = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$stuecklistealternative' LIMIT 1"); - if($alternativevorhanden != ""){ - $stuecklistealternative = $alternativevorhanden; - }else{ - $stuecklistealternative = 0; - } - } - }else{ - $stuecklistealternative = "0"; - } - if(array_key_exists('stuecklistereferenz', $value) && !is_array($value['stuecklistereferenz'])){ - $stuecklistereferenz = $value['stuecklistereferenz']; - if($stuecklistereferenz == ""){ - $stuecklistereferenz = ""; - } - }else{ - $stuecklistereferenz = ""; - } - if(array_key_exists('stuecklistelayer', $value) && !is_array($value['stuecklistelayer'])){//standard Top - if($value['stuecklistelayer'] != "Top" && $value['$stuecklistelayer'] != "Bottom"){ - $stuecklistelayer = "Top"; - }else{ - $stuecklistelayer = $value['stuecklistelayer']; - } - if($stuecklistelayer == ""){ - $stuecklistelayer = "Top"; - } - }else{ - $stuecklistelayer = "Top"; - } - if(array_key_exists('stuecklisteplatzierung', $value) && !is_array($value['stuecklisteplatzierung'])){//standard DP - if($value['stuecklisteplatzierung'] != "DP" && $value['$stuecklisteplatzierung'] != "DNP"){ - $stuecklisteplatzierung = "DP"; - }else{ - $stuecklisteplatzierung = $value['stuecklisteplatzierung']; - } - if($stuecklisteplatzierung == ""){ - $stuecklisteplatzierung = "DP"; - } - }else{ - $stuecklisteplatzierung = "DP"; - } - if(array_key_exists('stuecklistewert', $value) && !is_array($value['stuecklistewert'])){ - $stuecklistewert = $value['stuecklistewert']; - if($stuecklistewert == ""){ - $stuecklistewert = ""; - } - }else{ - $stuecklistewert = ""; - } - if(array_key_exists('stuecklistebauform', $value) && !is_array($value['stuecklistebauform'])){ - $stuecklistebauform = $value['stuecklistebauform']; - if($stuecklistebauform == ""){ - $stuecklistebauform = ""; - } - }else{ - $stuecklistebauform = ""; - } - if(array_key_exists('stuecklistezachse', $value) && !is_array($value['stuecklistezachse'])){ - $stuecklistezachse = $value['stuecklistezachse']; - if($stuecklistezachse == ""){ - $stuecklistezachse = ""; - } - }else{ - $stuecklistezachse = ""; - } - if(array_key_exists('stuecklistexposition', $value) && !is_array($value['stuecklistexposition'])){ - $stuecklistexposition = $value['stuecklistexposition']; - if($stuecklistexposition == ""){ - $stuecklistexposition = ""; - } - }else{ - $stuecklistexposition = ""; - } - if(array_key_exists('stuecklisteyposition', $value) && !is_array($value['stuecklisteyposition'])){ - $stuecklisteyposition = $value['stuecklisteyposition']; - if($stuecklisteyposition == ""){ - $stuecklisteyposition = ""; - } - }else{ - $stuecklisteyposition = ""; - } - - $this->app->DB->Insert("INSERT INTO stueckliste (artikel, referenz, place, layer, stuecklistevonartikel, - menge, firma, wert, bauform, alternative, zachse, xpos, ypos, art) - VALUES ('$nummervorhanden', '$stuecklistereferenz', '$stuecklisteplatzierung', '$stuecklistelayer', '$artikelvorhanden', - '$stuecklistemenge', 1, '$stuecklistewert', '$stuecklistebauform', '$stuecklistealternative', '$stuecklistezachse', '$stuecklistexposition', '$stuecklisteyposition', '$stuecklisteart')"); - - if(!$this->app->DB->error()){ - $this->app->DB->Update("UPDATE artikel SET stueckliste = 1 WHERE id = '$artikelvorhanden'"); - $mineininserterfolgreich = true; - } - - }else{ - $this->XMLResponse(4); - } - } - }else{ - $this->XMLResponse(4); - } - } - } - - if($mineininserterfolgreich == true){ - foreach($altestueckliste as $key2=>$value2){ - $this->app->DB->Delete("DELETE FROM stueckliste WHERE id = '".$value2['id']."'"); - } - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - } - } - }else{ - $this->XMLResponse(4); - } - }else{ - $this->XMLResponse(4); - } - } - - - public function ApiAdresseAccountsGet() - { - $xmldata = $this->XMLPost(); - $id = $this->app->Secure->GetGET("id"); - $art = $this->app->Secure->GetGET("art"); - if($xmldata['id']!=''){ - $id = $xmldata['id']; - } - if($xmldata['art']!=''){ - $art = $xmldata['art'];} else{$art = '%%'; - } - $filter['art']=$art; - $filter['id']=$id; - if($id > 0 ) { - $this->XMLResponse(1, $this->app->erp->XMLAdresseAccounts($filter, $this->usecdata)); - } else { - $this->XMLResponse(5); - } - $this->app->ExitXentral(); - } - - public function ApiAdresseAccountCreate() - { - $xmldata = $this->XMLPost(); - - if($xmldata['adresse'] == '' || is_array($xmldata['adresse']) || $xmldata['bezeichnung'] == '' || is_array($xmldata['bezeichnung'])){ - $this->XMLResponse(5, "Adress-ID und/oder Bezeichnung fehlt"); - $this->app->ExitXentral(); - } - - $newId = $this->app->erp->CreateAccount($xmldata['adresse'],$xmldata); - $this->XMLResponse(1,"$newId"); - $this->app->ExitXentral(); - } - - public function ApiAdresseAccountEdit(){ - - $id = $this->app->Secure->GetGET("id"); - if($id==''){ - $xmldata = $this->XMLPost(); - $id = $xmldata['id']; - } - $id = $this->app->DB->Select("SELECT id FROM adresse_accounts WHERE id='$id' LIMIT 1"); - - // Key gibt es nicht - if($id <= 0){ - $this->XMLResponse(5); - } - - $xmldata = $this->XMLPost(); - - foreach($xmldata as $key=>$value) - { - if(is_array($value)) - { - $value=''; - } - if($key!=="id"){ - if($key === "gueltig_ab" || $key === "gueltig_bis"){ - if($value == "" || $value == "0000-00-00" || $value === "00.00.0000"){ - $value = '0000-00-00'; - }else{ - $value = date('Y-m-d',strtotime($value)); - } - } - $this->app->DB->Update("UPDATE adresse_accounts SET $key='$value' WHERE id='$id' LIMIT 1"); - } - } - - $this->XMLResponse(1); - $this->app->ExitXentral(); - } - - public function ApiArtikelkontingenteGet() - { - $xmldata = $this->XMLPost(); - if(is_array($xmldata) && !empty($xmldata)){ - $filter = $xmldata; - }else{ - $filter['id'] = $this->app->Secure->GetGET("id"); - $filter['projekt'] = $this->app->Secure->GetGET("projekt"); - $filter['nummer'] = $this->app->Secure->GetGET("nummer"); - $filter['von'] = $this->app->Secure->GetGET("von"); - $filter['bis'] = $this->app->Secure->GetGET("bis"); - } - - if($filter['nummer']!="" || $filter['id']!=""){ - $this->XMLResponse(1, $this->app->erp->XMLArtikelkontingente($filter, $this->usecdata)); - } - else{ - $this->XMLResponse(5); - } - $this->app->ExitXentral(); - } - - protected function getApiAccount(){ - if(!$this->apiAccount){ - $this->apiAccount = $this->apiAccountService->getApiAccountById($this->api_id); - } - - return $this->apiAccount; - } - - public function EventAPIAdd($eventname,$parameter,$module,$action,$kommentar='', $api = 0) - { - $module_call_from = isset($this->app->Secure)?$this->app->Secure->GetGET('module'):''; - - try { - $apiaktiv = $this->getApiAccount()->isActive(); - } catch (ApiAccountNotFoundException $e){ - $apiaktiv = false; - } - - - if($module_call_from !=='api') - { - $uebertragungen = $this->app->DB->SelectArr("select a.id FROM api_account a INNER JOIN uebertragungen_account u ON a.id = u.api AND a.aktiv=1 AND u.aktiv = 1 INNER JOIN uebertragungen_event_einstellungen e ON u.id = e.uebertragung_account AND e.aktiv = 1 WHERE e.eventname = '$eventname' group by a.id"); - - if($uebertragungen) - { - foreach($uebertragungen as $uebertragung) - { - $aacount = $uebertragung['id']; - if($aacount){ - $this->app->DB->Insert("INSERT INTO event_api (id,cachetime,eventname,parameter,retries,module,action,kommentar,api) - VALUES ('',NOW(),'$eventname','$parameter','0','$module','$action','$kommentar','$aacount')"); - $tmpid = $this->app->DB->GetInsertID(); - $this->EventCall($tmpid); - } - } - } - } - - if($apiaktiv === true && $module_call_from !== 'api') - { - $this->app->DB->Insert("INSERT INTO event_api (cachetime,eventname,parameter,retries,module,action,kommentar,api) - VALUES (NOW(),'$eventname','$parameter','0','$module','$action','$kommentar','$api')"); - $tmpid = $this->app->DB->GetInsertID(); - $this->EventCall($tmpid); - } else { - return false; - } - - return null; - } - - /** - * @param int $id - * - * @return bool - */ - public function EventCall($id) - { - $eventApiArr = $id <= 0?null:$this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM `event_api` WHERE `id` = %d LIMIT 1', - $id - ) - ); - - if(empty($eventApiArr)) { - return false; - } - - $eventname = $eventApiArr['eventname']; - $parameter = $eventApiArr['parameter']; - $module = $eventApiArr['module']; - $action = $eventApiArr['action']; - $api = $eventApiArr['api']; - - switch($module) - { - case "adresse": - $xml = $this->app->erp->XMLAdresse($parameter); - break; - - case "artikel": - $xml = $this->app->erp->XMLArtikel($parameter, $api); - break; - - case "auftrag": - $xml = $this->app->erp->XMLAuftrag($parameter); - break; - - case "gruppe": - $xml = $this->app->erp->XMLGruppe($parameter); - break; - - case "adresse_kontakt": - $xml = $this->app->erp->XMLAdresseKontakt($parameter); - break; - - default: - $this->app->DB->Delete("DELETE FROM event_api WHERE id='$id' LIMIT 1"); - return false; - } - - $hash = $this->generateHashFromApi($api); - //$result = $this->EventSendRequest($eventname,$xml,$hash,"&id=".$parameter); - //Hack - $result_body = null; - $result = $this->EventSendRequest($eventname,$xml,$hash,"&id=".$parameter,$result_body, $api); - switch($eventname) { - case "EventArtikelCreate": - if($api && $parameter) - { - if(isset($result_body['xml']['id']) && $result_body['xml']['id']!="") - { - $this->app->DB->Insert("INSERT INTO api_mapping (tabelle, id_int, id_ext, api, zeitstempel) VALUES ('artikel','$parameter','".$this->app->DB->real_escape_string($result_body['xml']['id'])."','$api',now())"); - } - } - break; - case "EventAuftragEdit": - //print_r($result_body); - if(isset($result_body['xml']['belegnr']) && $result_body['xml']['belegnr']!="") - { - $this->app->DB->Update("UPDATE auftrag SET belegnr='".$result_body['xml']['belegnr']."' WHERE id='".$parameter."' AND id > 0 LIMIT 1"); - $this->app->DB->Delete("DELETE FROM event_api WHERE id='$id' LIMIT 1"); - } - break; - default: - $result = true; - } - - if($result===false) { - $this->app->DB->Update("UPDATE event_api SET retries=retries+1 WHERE id='$id' LIMIT 1"); - return false; - } - $this->app->DB->Delete("DELETE FROM event_api WHERE id='$id' LIMIT 1"); - - return true; - } - - public function EventSendRequest($methodname,$xml,$hash,$parameter='',&$result_body='', $api = 0) - { - try { - $url = $this->getApiAccount()->getEventUrl(); - } catch (ApiAccountNotFoundException $e){ - return false; - } - - if($url == ''){ - return false; - } - - $xml =' - - - '.$methodname.' - - '.$xml.' - '; - - if(strpos($url,'?') === false){ - $url = $url.'?hash='.$hash.$parameter; - } else{ - $url = $url.'&hash='.$hash.$parameter; - } - if(strpos($url,'module=api') === false){ - $url .= '&module=api'; - } - $url .= '&action='.substr($methodname,5); - $data = array('xml' => $xml); - - // use key 'http' even if you send the request to https://... - $options = array( - 'http' => array( - 'header' => "Content-type: application/x-www-form-urlencoded\r\n", - 'method' => 'POST', - 'content' => http_build_query($data), - ), - ); - $context = stream_context_create($options); - $result = file_get_contents($url, false, $context); - - if($result===false) { - return false; - } - - $deXml = simplexml_load_string($result); - $deJson = json_encode($deXml); - $xml_array = json_decode($deJson,TRUE); - - $result_body = $xml_array; - if(isset($xml_array['xml']['status']['messageCode'])){ - $xml_array['xml']['status']['messageCode'] = strtolower($xml_array['xml']['status']['messageCode']); - return $xml_array['xml']['status']['messageCode'] == 0; - } - - return false; - } - - /** - * @param string $initKey - * @param string $remoteDomain - * - * @return string - */ - public function generateHashFromDomainAndKey($initKey, $remoteDomain) - { - $date = gmdate('dmY'); - - $hash = ''; - - for($i = 0; $i <= 200; $i++) { - $hash = sha1($hash . $initKey . $remoteDomain . $date); - } - - return $hash; - } - - /** - * @param int $id - * - * @return string - */ - public function generateHashFromApi($id = 0) - { - try { - $initKey = $this->getApiAccount()->getInitKey(); - $remoteDomain = $this->getApiAccount()->getRemoteDomain(); - } catch (ApiAccountNotFoundException $e){ - $initKey = ''; - $remoteDomain = ''; - } - - return $this->generateHashFromDomainAndKey($initKey, $remoteDomain); - } - - public function GetPlainText($string) - { - $string = str_replace('NONBLOCKINGZERO','',$string); - return htmlspecialchars(trim(html_entity_decode($string, ENT_QUOTES, 'UTF-8'))); - } - - - public function XMLGruppe($id, $cdata = false) - { - if($id > 0){ - $arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM gruppen WHERE id=%d LIMIT 1',$id)); - } - if(empty($arr)){ - return ''; - } - $result = ''; - foreach($arr as $key=>$value) { - if(is_array($value)){ - $value=''; - } - if($cdata && $value != '' && !is_numeric($value)) { - $result .= "<" . $key . ">"; - }else{ - $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; - } - } - return $result; - } - - public function XMLAdresseKontakt($id, $cdata = false) - { - if($id > 0){ - $address_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM adresse_kontakte WHERE id=%d LIMIT 1', $id)); - } - if(empty($address_arr)){ - return ''; - } - $result = ''; - foreach($address_arr as $key=>$value) - { - if(is_array($value)){ - $value=''; - } - if($cdata && $value != '' && !is_numeric($value)) { - $result .= "<" . $key . ">"; - }else{ - $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; - } - } - return $result; - } - - - public function XMLAdresse($id, $cdata = false) - { - if($id > 0){ - $address_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM adresse WHERE id=%d LIMIT 1',$id)); - } - if(empty($address_arr)){ - return ''; - } - $result = ''; - foreach($address_arr as $key=>$value) { - if(is_array($value)){ - $value=''; - } - if($cdata && $value != '' && !is_numeric($value)) { - $result .= "<" . $key . ">"; - }else{ - $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; - } - } - return $result; - } - - public function XMLAuftrag($id, $doctype = 'auftrag', $cdata = false) - { - if($id > 0 && !empty($doctype)){ - $order_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM `%s` WHERE id=%d LIMIT 1',$doctype,$id)); - } - if(empty($order_arr)){ - return ''; - } - $result = ''; - - foreach($order_arr as $key=>$value) - { - if(is_array($value)){ - $value=''; - } - if($cdata && $value != '' && !is_numeric($value)) { - $result .= "<" . $key . ">"; - }else{ - $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; - } - } - - if (in_array($doctype, array('gutschrift', 'rechnung'))) { - $sqlExplodiertParent = 'AND ap.explodiert_parent_artikel<=0'; - } - else if ($doctype==="bestellung") - { - $sqlExplodiertParent =''; - } - else { - $sqlExplodiertParent = 'AND ap.explodiert_parent<=0'; - } - $order_arr = $this->app->DB->SelectArr("SELECT ap.*, art.ean FROM $doctype"."_position ap LEFT JOIN artikel art ON ap.artikel = art.id WHERE ap.$doctype='$id' {$sqlExplodiertParent} ORDER by ap.sort"); - - $result .=''; - $corder_arr = !empty($order_arr)?count($order_arr):0; - for($i=0;$i<$corder_arr;$i++) - { - $result .=''; - foreach($order_arr[$i] as $key=>$value) - { - if(is_array($value)){ - $value=''; - } - if($cdata && $value != '' && !is_numeric($value)) { - $result .= "<" . $key . ">"; - }else{ - $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; - } - - } - $result .=''; - } - $result .=''; - return $result; - } - - public function XMLBenutzer($id, $cdata = false) - { - if($id > 0){ - $address_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM user WHERE id=%d LIMIT 1',$id)); - } - if(empty($address_arr)) - { - return ''; - } - $result = ''; - foreach($address_arr as $key=>$value) - { - if(is_array($value))$value=''; - if($key==='startseite') - $result .='<'.$key.'>'.$this->app->erp->base64_url_encode($value).''; - else { - if($cdata && $value != '' && !is_numeric($value)) { - $result .= '<' . $key . '>'; - }else { - $result .= '<' . $key . '>' . $this->GetPlainText($value) . ''; - } - } - } - return $result; - } - - public function XMLAdresseAccounts($filter=array(), $cdata = false) - { - if(!empty($filter['id'])){ - $sql = "SELECT * FROM adresse_accounts WHERE adresse='" . $filter['id'] . "' AND art LIKE '" . $filter['art'] . "' AND aktiv=1"; - $result = $this->app->DB->SelectArr($sql); - } - if(empty($result)) - { - return ''; - } - $output =''; - foreach($result as $account) - { - $output .=''; - foreach($account as $key=>$value) - { - if($cdata && $value != '' && !is_numeric($value)) - { - $output .= sprintf('<%1$s>', $key, $value); - }else - $output .= sprintf('<%1$s>%2$s', $key, $value); - } - $output .=''; - } - $output .=''; - return $output; - } - - public function XMLBerichte($id, $cdata = false){ - if($id > 0){ - $result = $this->app->DB->SelectRow(sprintf('SELECT * FROM berichte WHERE id = %d LIMIT 1', $id)); - } - if(empty($result) || empty($result['struktur'])) - { - return ''; - } - - $rows = $this->app->DB->SelectArr($result['struktur']); - $output =''; - if(!empty($rows)) { - foreach($rows as $row) { - $output .=''; - foreach($row as $key=>$value) - { - if($cdata && $value != '' && !is_numeric($value)) { - $output .= "<" . $key . ">"; - }else{ - $output .= "<" . $key . ">" . $this->GetPlainText($value) . ""; - } - } - $output .=''; - } - } - $output .=''; - return $output; - } - - public function XMLArtikelkontingente($filter=array(), $cdata = false) - { - if($filter['id']=='') - { - if($filter['projekt']!='') - { - $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$filter['projekt']."' AND abkuerzung!=''"); - if($projekt > 0){ - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='" . $filter['nummer'] . "' AND projekt = $projekt AND nummer!='' LIMIT 1"); - }else{ - $artikel = 0; - } - } else { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$filter['nummer']."' AND nummer!='' LIMIT 1"); - } - } else { - $artikel = $filter['id']; - } - if($artikel > 0){ - $artikel = $this->app->DB->Select(sprintf('SELECT id FROM artikel WHERE id = %d LIMIT 1', $artikel)); - } - if($artikel <= 0) - { - return ''; - } - - if($filter['von']!='') - { - $fall = 1; - $result = $this->app->DB->SelectArr("SELECT SUM(ap.menge) as gebucht, - if(ak.menge IS NULL,(SELECT ak2.menge FROM artikelkontingente ak2 WHERE (ak2.datum='1970-01-01' OR ak2.datum='0000-00-00' OR ak2.datum IS NULL) AND ak2.artikel=ap.artikel),ak.menge) - as menge, - if(a.lieferdatum ='0000-00-00' OR a.lieferdatum is NULL, a.datum, a.lieferdatum) as datum - FROM auftrag_position ap - LEFT JOIN auftrag a ON a.id=ap.auftrag - LEFT JOIN artikelkontingente ak ON ak.artikel=ap.artikel AND if(a.lieferdatum ='0000-00-00' OR a.lieferdatum is NULL, a.datum, a.lieferdatum)=ak.datum - WHERE - if(a.lieferdatum ='0000-00-00' OR a.lieferdatum is NULL, - (a.datum >='".$filter['von']."' AND a.datum <='".$filter['bis']."'),(a.lieferdatum >='".$filter['von']."' AND a.lieferdatum <='".$filter['bis']."')) - AND a.status='freigegeben' - AND ap.artikel='$artikel' GROUP by 3 ORDER by 3"); - } - else { - $fall = 2; - $result = $this->app->DB->SelectArr("SELECT * FROM artikelkontingente ak WHERE ak.artikel='$artikel' AND (datum >= DATE_FORMAT(NOW(),'%Y-%m-%d') OR datum='0000-00-00' OR datum='1970-01-01')"); - } - - if(empty($result)) - { - return ''; - } - - $output = ''; - foreach($result as $artikelkontigent) { - $output .=''; - foreach($artikelkontigent as $key=>$value) - { - if($key==='datum') { - $value=str_replace('1970-01-01','0000-00-00',$value); - } - - if($key!=='id' && $key!=='artikel') - { - if($cdata && $value != '' && !is_numeric($value)) { - $output .= '<' . $key . '>'; - }else{ - $output .= '<' . $key . '>' . $this->GetPlainText($value) . ''; - } - } - if($key==='datum' && $fall==2) - { - $gebucht = $this->app->DB->Select(sprintf('SELECT SUM(ap.menge) - FROM auftrag_position AS ap - INNER JOIN auftrag a ON a.id=ap.auftrag - WHERE a.lieferdatum=\'%s\' AND a.status=\'freigegeben\' AND ap.artikel= %d ',$value, $artikel)); - if($gebucht <=0) { - $gebucht = 0; - } - $output .=''.$gebucht.''; - } - } - $output .=''; - } - $output .=''; - - return $output; - } - - public function XMLExportVorlage($id,$filter=array(), $cdata = false) - { - /** @var Exportvorlage $tmp */ - $tmp = $this->app->erp->LoadModul('exportvorlage'); - $csv = $tmp->ExportvorlageExport(true,$id,$filter); - - $csv_array = preg_split ('/$\R?^/m', $csv); - - if($id > 0){ - $vorlageArr = $this->app->DB->SelectRow(sprintf('SELECT exporttrennzeichen, exporterstezeilenummer,exportdatenmaskierung FROM exportvorlage WHERE id= %d LIMIT 1', $id)); - } - if(!empty($vorlageArr)) - { - $exporttrennzeichen = $vorlageArr['exporttrennzeichen']; - $exportdatenmaskierung = $vorlageArr['exportdatenmaskierung']; - $exporterstezeilenummer = $vorlageArr['exporterstezeilenummer']; - }else{ - $exporttrennzeichen = ''; - $exportdatenmaskierung = ''; - $exporterstezeilenummer = ''; - } - - if($exporttrennzeichen==='semikolon') { - $exporttrennzeichen=';'; - } - else if($exporttrennzeichen==='komma') { - $exporttrennzeichen=','; - } - else if($exporttrennzeichen==='tab') { - $exporttrennzeichen="\t"; - } - else { - $exporttrennzeichen=';'; - } - - if($exportdatenmaskierung==='gaensefuesschen') { - $exportdatenmaskierung='"'; - } else { - $exportdatenmaskierung=''; - } - - $output = ''; - $field_name = []; - $counter = 0; - if(!empty($csv_array)){ - foreach ($csv_array as $row) { - $fields = explode($exporttrennzeichen, $row); - if($counter == 0){ - foreach ($fields as $value) { - if($exportdatenmaskierung != ''){ - $value = str_replace($exportdatenmaskierung, '', $value); - } - $field_name[] = $value; - } - }else{ - $output .= ''; - foreach($field_name as $field_index => $fieldValue) { - $value = str_replace('"', '', $fields[$field_index]); - if($cdata && $value != '' && !is_numeric($value)){ - $output .= '<' . $field_name[$field_index] . '>\r\n"; - }else{ - $output .= '<' . $field_name[$field_index] . '>' . $value . '\r\n"; - } - } - $output .= ''; - } - $counter++; - } - } - return ''.$output.''; - } - - public function XMLArtikel($id, $api = 0) - { - if($id > 0){ - $artikel_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM artikel WHERE id=%d LIMIT 1',$id)); - } - $result = ''; - if(!empty($artikel_arr)){ - foreach ($artikel_arr as $key => $value) { - if($key !== 'usereditid' && $key !== 'useredittimestamp'){ - if(is_array($value)){ - $value = ''; - } - if($key === 'id' && $api){ - $extid = $this->app->DB->Select("SELECT id_ext FROM api_mapping WHERE tabelle = 'artikel' AND id_int = '$id' AND api = '$api' LIMIT 1"); - if($extid){ - $result .= '' . $this->GetPlainText($extid) . ''; - } - } - if($key === 'projekt') $value = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$value' LIMIT 1"); - $result .= '<' . $key . '>' . $this->GetPlainText($value) . ""; - if($key === 'typ'){ - if(strpos($value, '_kat') !== false){ - $kategorie = (int)str_replace('_kat', '', $value); - $bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM artikelkategorien WHERE id = '" . $kategorie . "' LIMIT 1"); - if($bezeichnung){ - $result .= '' . $this->GetPlainText($bezeichnung) . ''; - $extid = $this->app->DB->Select("SELECT id_ext FROM api_mapping WHERE tabelle = 'artikelkategorien' AND id_int = '$kategorie' AND api = '$api' LIMIT 1"); - if($extid){ - $result .= '' . $this->GetPlainText($extid) . ''; - } - } - } - } - - } - } - } - // Lagerbestand - $summe = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz WHERE lpi.artikel='$id' AND lp.sperrlager!=1"); - $reserviert = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$id'");// AND datum >= NOW()"); - $auftraege = $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel LEFT JOIN auftrag auf ON auf.id=ap.auftrag WHERE a.id='$id' AND a.lagerartikel=1 AND auf.status='freigegeben'"); - $liefern= $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap, auftrag aa, artikel a WHERE a.id=ap.artikel AND aa.id = ap.auftrag AND a.id='$id' AND a.lagerartikel=1 AND aa.status='freigegeben'"); - $reserviert_im_versand = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$id' AND objekt='lieferschein'"); - $berechnet = $summe - $auftraege - $reserviert_im_versand; - $verkaufte = $auftraege + $reserviert_im_versand; - - $rest = $summe - $liefern; - if($reserviert=='') { - $reserviert =0; - } - if($liefern <=0) { - $liefern=0; - } - - if($rest > 0) { - $verfuegbar = (string)$rest; - } else { - $verfuegbar = '0'; - } - - $verkaufbare = $this->app->erp->ArtikelAnzahlVerkaufbar($id); - $summe = round($summe, $this->app->erp->GetLagerNachkommastellen()); - $reserviert = round($reserviert ,$this->app->erp->GetLagerNachkommastellen()); - $liefern = round($liefern ,$this->app->erp->GetLagerNachkommastellen()); - $verkaufte = round($verkaufte ,$this->app->erp->GetLagerNachkommastellen()); - $berechnet = round($berechnet ,$this->app->erp->GetLagerNachkommastellen()); - $verkaufbare = round($verkaufbare ,$this->app->erp->GetLagerNachkommastellen()); - - $result .= "$summe"; - $result .= "$reserviert"; - $result .= "$liefern"; - $result .= "$verkaufte"; - $result .= "$berechnet"; - $result .= "$verkaufbare"; - - // stueckliste - if($artikel_arr['stueckliste']=='1'){ - $arr_stueckliste = $this->app->DB->SelectArr(sprintf('SELECT * FROM stueckliste WHERE stuecklistevonartikel=%d',$id)); - if(!empty($arr_stueckliste)){ - $result .= ''; - foreach($arr_stueckliste as $stuecklisteKey => $stuecklisteRow) { - $artikelArr = $this->app->DB->SelectRow(sprintf('SELECT nummer, projekt - FROM artikel WHERE id = %d LIMIT 1', $stuecklisteRow['artikel'])); - if(!empty($artikelArr)) - { - $arr_stueckliste[$stuecklisteKey]['nummer'] = $artikelArr['nummer']; - $projekt = $artikelArr['projekt']; - if($projekt > 0) - { - $arr_stueckliste[$stuecklisteKey]['projekt'] = $this->app->DB->Select( - sprintf('SELECT abkuerzung - FROM projekt - WHERE id = %d LIMIT 1', $projekt)); - }else{ - $arr_stueckliste[$stuecklisteKey]['projekt'] = ''; - } - }else{ - $arr_stueckliste[$stuecklisteKey]['nummer'] = ''; - $arr_stueckliste[$stuecklisteKey]['projekt'] = ''; - } - $result .= ''; - $result .= '' . $arr_stueckliste[$stuecklisteKey]['menge'] . ''; - $result .= '' . $arr_stueckliste[$stuecklisteKey]['nummer'] . ''; - $result .= '' . $arr_stueckliste[$stuecklisteKey]['artikel'] . ''; - $result .= '' . $arr_stueckliste[$stuecklisteKey]['projekt'] . ''; - $result .= ""; - } - $result .= ''; - } - } - // einkaufspreise - $arr_einkauf = $this->app->DB->SelectArr("SELECT * FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis >= NOW() OR gueltig_bis='0000-00-00')"); - if(!empty($arr_einkauf)) - { - $result .=''; - foreach($arr_einkauf as $einkaufKey => $einkaufValue) { - if($einkaufValue['adresse'] > 0){ - $adresseArr = $this->app->DB->SelectRow(sprintf( - 'SELECT projekt, lieferantennummer FROM adresse WHERE id = %d ', $einkaufValue['adresse'] - )); - }else{ - $adresseArr = null; - } - if(!empty($adresseArr)) - { - $einkaufValue['lieferantennummer'] = $adresseArr['lieferantennummer']; - $einkaufValue['projekt'] = $adresseArr['projekt']; - }else{ - $einkaufValue['lieferantennummer'] = ''; - $einkaufValue['projekt'] = 0; - } - if($einkaufValue['projekt'] > 0) - { - $einkaufValue['projekt'] = $this->app->DB->SelectRow(sprintf('SELECT projekt FROM adresse WHERE id= %d LIMIT 1', $einkaufValue['projekt'])); - }else{ - $einkaufValue['projekt'] = ''; - } - - $result .=''; - $result .=''.$einkaufValue['ab_menge'].''; - $result .=''.$einkaufValue['preis'].''; - $result .=''.$einkaufValue['waehrung'].''; - $result .=''.$einkaufValue['lieferantennummer'].''; - $result .=''.$einkaufValue['projekt'].''; - $result .=''.$this->GetPlainText($einkaufValue['bestellnummer']).''; - $result .=''.$this->GetPlainText($einkaufValue['bezeichnunglieferant']).''; - $result .=''; - } - $result .=''; - } - - // verkaufspreise - $arr_verkauf = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise WHERE artikel='$id' AND (gueltig_bis >= NOW() OR gueltig_bis='0000-00-00' ) AND geloescht!='1'"); - if(!empty($arr_verkauf)) - { - $result .=''; - foreach($arr_verkauf as $verkaufValue) { - if($einkaufValue['adresse'] > 0){ - $adresseArr = $this->app->DB->SelectRow(sprintf( - 'SELECT projekt, lieferantennummer FROM adresse WHERE id = %d ', $verkaufValue['adresse'] - )); - }else{ - $adresseArr = null; - } - if(!empty($adresseArr)) - { - $verkaufValue['lieferantennummer'] = $adresseArr['lieferantennummer']; - $verkaufValue['projekt'] = $adresseArr['projekt']; - }else{ - $verkaufValue['lieferantennummer'] = ''; - $verkaufValue['projekt'] = 0; - } - if($verkaufValue['projekt'] > 0) - { - $verkaufValue['projekt'] = $this->app->DB->SelectRow(sprintf('SELECT projekt FROM adresse WHERE id= %d LIMIT 1', $einkaufValue['projekt'])); - }else{ - $verkaufValue['projekt'] = ''; - } - $arr_verkauf[$i]['kundennummer'] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='".$arr_verkauf[$i]['adresse']."' LIMIT 1"); - $arr_verkauf[$i]['projekt'] = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='".$arr_verkauf[$i]['adresse']."' LIMIT 1"); - $arr_verkauf[$i]['projekt'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr_verkauf[$i]['projekt']."' LIMIT 1"); - - $result .=''; - $result .=''.$verkaufValue['ab_menge'].''; - $result .=''.$verkaufValue['preis'].''; - $result .=''.$verkaufValue['vpe'].''; - if($verkaufValue['vpe_menge'] > 0){ - $result .= '' . $verkaufValue['vpe_menge'] . ''; - } - - $result .=''.$verkaufValue['waehrung'].''; - - if($verkaufValue['kundennummer']!='') - { - $result .=''.$verkaufValue['kundennummer'].''; - $result .=''.$verkaufValue['projekt'].''; - if($verkaufValue['kundenartikelnummer']!=''){ - $result .= '' . $verkaufValue['kundenartikelnummer'] . ''; - } - } - $result .=''; - } - $result .=''; - } - return $result; - } - - - public function BelegeimportAusfuehren($idliste = null, $uebertragungen = false) - { - $ret = null; - $erlaubtebelege = array( - 'auftrag', - 'lieferschein', - 'rechnung', - 'gutschrift', - 'angebot', - 'preisanfrage', - 'bestellung', - 'produktion', - 'proformarechnung', - 'retoure' - ); - $belege = $this->app->DB->SelectArr('SELECT * - FROM belegeimport - WHERE '.($idliste?' id in ('.implode(', ',$idliste).') ':"userid='".$this->app->User->GetID()."'").' - ORDER BY art, beleg_hauptbelegnr, beleg_belegnr,artikel_sort, id'); - if($belege) { - if($uebertragungen) { - $transferData = $this->app->DB->SelectRow( - sprintf( - 'SELECT `api`, `projekt`,`auftrageingang`,`bestellungeingang`, `createproduction`, `ownaddress`, - `createarticleifnotexists`, `createarticleasstoragearticle` - FROM `uebertragungen_account` - WHERE `id` = %d - LIMIT 1', - $uebertragungen - ) - ); - $this->uebertragung_account = $uebertragungen; - $this->api_id = $transferData['api']; - $projekt = $transferData['projekt']; - $ret = null; - if(empty($transferData['alldoctypes'])) { - $erlaubtebelege = array(); - if($transferData['auftrageingang']) { - $erlaubtebelege[] = 'auftrag'; - $erlaubtebelege[] = 'angebot'; - } - if($transferData['bestellungeingang']) { - $erlaubtebelege[] = 'bestellung'; - $erlaubtebelege[] = 'produktion'; - } - } - } - $aktbelegart = false; - $aktbelegnr = false; - $aktbelegid = false; - $hauptbelegnr = false; - //Für Belegstatus "angelegt", um die Belegnr entfernen zu können - $erstelltebelegeids = array(); - $erstelltebelegeNichtAngelegtids = []; - foreach($belege as $beleg) { - if(!empty($beleg['art'])) { - $beleg['art'] = trim(strtolower($beleg['art'])); - } - if($beleg['art'] && $beleg['beleg_belegnr'] && in_array($beleg['art'],$erlaubtebelege)) { - if($beleg['art'] != $aktbelegart || $beleg['beleg_belegnr'] != $aktbelegnr) - { - $projekt = !empty($beleg['projekt'])?$beleg['projekt']:0; - if(empty($projekt)) { - $projekt = !empty($beleg['beleg_projekt'])?$beleg['beleg_projekt']:0; - } - $aktbelegnr = $beleg['beleg_belegnr']; - $hauptbelegnr = $beleg['beleg_hauptbelegnr']; - $aktbelegart = $beleg['art']; - $aktbelegid = false; - $alteadresse = $beleg['adresse']; - if($beleg['adresse'] && $uebertragungen) { - $beleg['adresse'] = $this->GetFromExtID('adresse', $beleg['adresse']); - } - if(!$beleg['adresse'] && $uebertragungen && $beleg['beleg_lieferantennummer'] != '' && ($beleg['art'] === 'bestellung' || $beleg['art'] === 'produktion')) { - $beleg['adresse'] = $this->app->DB->Select( - sprintf( - 'SELECT id - FROM adresse - WHERE lieferantennummer <> \'\' AND lieferantennummer = \'%s\' AND IFNULL(geloescht,0) = 0 - ORDER BY projekt = %d DESC - LIMIT 1', - $this->app->DB->real_escape_string($beleg['beleg_lieferantennummer']), (int)$beleg['projekt'] - ) - ); - } - - if($uebertragungen && !empty($beleg['adresse']) && $beleg['art'] === 'bestellung' - && !empty($transferData['createproduction']) && $beleg['adresse'] == $transferData['ownaddress'] - ) { - $beleg['art'] = 'produktion'; - } - - if($uebertragungen) { - $hauptbelegnr = $this->GetFromExtID($beleg['art'], $hauptbelegnr); - if($hauptbelegnr != '')$hauptbelegnr = $this->app->DB->Select("SELECT belegnr - FROM '".$beleg['art']."' WHERE id = '$hauptbelegnr' LIMIT 1"); - if(!$beleg['beleg_projekt']) { - $beleg['beleg_projekt'] = $projekt; - } - } - - if($uebertragungen && !$beleg['adresse'] && $beleg['art'] === 'produktion' && !empty($beleg['beleg_auftragid'])){ - $beleg['adresse'] = $this->app->DB->Select( - sprintf( - 'SELECT adresse FROM auftrag WHERE id = %d LIMIT 1', $beleg['beleg_auftragid'] - ) - ); - } - - if(!$beleg['adresse'] && $uebertragungen) { - $adresseprojekt = ''; - if($projekt) { - $adresseprojekt = " AND projekt = '$projekt' "; - } - if(in_array($beleg['art'], - array('auftrag','lieferschein','rechnung','gutschrift','angebot','produktion','retoure') - )) { - $beleg['adresse'] = $this->app->DB->Select("SELECT id FROM adresse - WHERE name='".$this->app->DB->real_escape_string($beleg['beleg_name'])."' - AND email='".$this->app->DB->real_escape_string($beleg['beleg_email'])."' - AND strasse='".$this->app->DB->real_escape_string((string)$beleg['beleg_strasse'])."' - AND plz='".$this->app->DB->real_escape_string((string)$beleg['beleg_plz'])."' - AND ort='".$this->app->DB->real_escape_string((string)$beleg['beleg_ort'])."' - AND kundennummer <> '' AND geloescht!=1 $adresseprojekt LIMIT 1"); - } - else { - $beleg['adresse'] = $this->app->DB->Select("SELECT id FROM adresse - WHERE name='". - $this->app->DB->real_escape_string($beleg['beleg_name'])."' - AND email='".$this->app->DB->real_escape_string($beleg['beleg_email'])."' - AND strasse='".$this->app->DB->real_escape_string((string)$beleg['beleg_strasse'])."' - AND plz='".$this->app->DB->real_escape_string((string)$beleg['beleg_plz'])."' - AND ort='".$this->app->DB->real_escape_string((string)$beleg['beleg_ort'])."' - AND lieferantennummer <> '' AND geloescht!=1 $adresseprojekt LIMIT 1"); - } - if($beleg['beleg_kundennummer'] == '' && $beleg['adresse']) { - $beleg['beleg_kundennummer'] = $this->app->DB->Select("SELECT kundennummer - FROM adresse WHERE id = '".$beleg['adresse']."' LIMIT 1"); - } - } - $belegKundennummer = !empty($beleg['beleg_kundennummer'])?$beleg['beleg_kundennummer']:''; - if(empty($belegKundennummer)) { - $belegKundennummer = !empty($beleg['kundennummer'])?$beleg['kundennummer']:''; - } - if(strtoupper((string)$belegKundennummer) === 'NEU' || strtoupper($belegKundennummer) === 'NEW') { - $beleg['adresse'] = 0; - } - - if(!$beleg['adresse']) { - if(in_array($beleg['art'],array('auftrag','lieferschein','rechnung','gutschrift','angebot', 'produktion'))) { - $adr['kundennummer'] = $beleg['beleg_kundennummer']; - if((string)$adr['kundennummer'] === '' || strtoupper((string)$adr['kundennummer']) === 'NEU' || - strtoupper($adr['kundennummer']) === 'NEW') { - $adr['kundennummer'] = $this->app->erp->GetNextKundennummer($beleg['beleg_projekt']); - } - }else{ - $adr['lieferantennummer'] = $this->app->erp->GetNextLieferantennummer($beleg['beleg_projekt']); - } - if(!$beleg['beleg_projekt'])$beleg['beleg_projekt'] = $this->app->erp->Firmendaten('projekt'); - $adr['name'] = $beleg['beleg_name']; - $adr['abteilung'] = $beleg['beleg_abteilung']; - $adr['unterabteilung'] = $beleg['beleg_unterabteilung']; - $adr['adresszusatz'] = $beleg['beleg_adresszusatz']; - $adr['ansprechpartner'] = $beleg['beleg_ansprechpartner']; - $adr['telefon'] = $beleg['beleg_telefon']; - $adr['adresszusatz'] = $beleg['beleg_adresszusatz']; - $adr['email'] = $beleg['beleg_email']; - $adr['land'] = $beleg['beleg_land']; - if($adr['land']=="") { - $adr['land'] = $this->app->erp->Firmendaten("land"); - $beleg['beleg_land'] = $adr['land']; - } - $adr['strasse'] = $beleg['beleg_strasse']; - $adr['plz'] = $beleg['beleg_plz']; - $adr['ort'] = $beleg['beleg_ort']; - $adr['lieferbedingung'] = $beleg['beleg_lieferbedingung']; - $adr['projekt'] = $beleg['beleg_projekt']; - - $beleg['adresse'] = $this->app->erp->InsertUpdateAdresse($adr); - if($alteadresse && $alteadresse != $beleg['adresse']) - { - $this->SetExtIDMapping('adresse', $beleg['adresse'], $alteadresse); - } - unset($adr); - } - if($beleg['adresse']) - { - if($uebertragungen) - { - $check = $this->GetFromExtID($beleg['art'], $beleg['beleg_belegnr']); - }else{ - $check = $this->app->DB->Select("SELECT id FROM ".$beleg['art']." - WHERE belegnr = '".$this->app->DB->real_escape_string($beleg['beleg_belegnr'])."' LIMIT 1"); - } - if(!$check) - { - $methode = 'Create'.ucfirst($beleg['art']); - $methodeLoad = 'Load'.ucfirst($beleg['art']).'Standardwerte'; - if(method_exists($this->app->erp, $methode)) - { - $check = $this->app->erp->$methode($beleg['adresse']); - if($uebertragungen) - { - $beleg['id'] = $check; - $ret[] = $beleg; - } - if(method_exists($this->app->erp, $methodeLoad)){ - $this->app->erp->$methodeLoad($check, $beleg['adresse']); - } - - if($beleg['status'] !== 'angelegt') - { - if($beleg['beleg_belegnr']==='NEU' || $beleg['beleg_belegnr']==='NEW' || $beleg['beleg_belegnr']=='' || - $beleg['beleg_belegnr']==='ENTWURF' || !isset($beleg['beleg_belegnr']) || $uebertragungen) { - $beleg['beleg_belegnr'] = $this->app->erp->GetNextNummer($beleg['art'],$beleg['beleg_projekt'],$check); - } - }else { - $beleg['beleg_belegnr'] = ''; - } - - if($check) - { - $adressArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM adresse WHERE id = %d LIMIT 1', - $beleg['adrese'] - ) - ); - - if(!$beleg['beleg_projekt']) { - $beleg['beleg_projekt'] = $this->app->DB->Select("SELECT projekt - FROM adresse - WHERE id = '".$beleg['adresse']."' - LIMIT 1"); - } - - if($beleg['beleg_projekt'] && - $beleg['beleg_projekt'] != $this->app->DB->Select("SELECT projekt - FROM ".$beleg['art']." - WHERE id = '$check' LIMIT 1")) - { - $this->app->DB->Update("UPDATE ".$beleg['art']." SET projekt = '".$beleg['beleg_projekt']."' - WHERE id = '$check' LIMIT 1"); - if($beleg['art'] === 'auftrag') - { - $standardlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '".$beleg['beleg_projekt']."' LIMIT 1"); - if($standardlager)$this->app->DB->Update("UPDATE auftrag SET standardlager = '$standardlager' - WHERE id = '$check' LIMIT 1"); - if($this->app->erp->StandardZahlungsweise($beleg['beleg_projekt'])==="rechnung") - { - $this->app->DB->Update("UPDATE auftrag - set zahlungsweise = '".$this->app->erp->StandardZahlungsweise($beleg['beleg_projekt'])."', - zahlungszieltage = '".$this->app->erp->ZahlungsZielTage($beleg['beleg_projekt'])."', - zahlungszieltageskonto = '".$this->app->erp->ZahlungsZielTageSkonto($beleg['beleg_projekt'])."', - zahlungszielskonto = '".$this->app->erp->ZahlungsZielSkonto($beleg['beleg_projekt'])."' - WHERE id = '$check' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE auftrag - set zahlungsweise = '".$this->app->erp->StandardZahlungsweise($beleg['beleg_projekt'])."', - zahlungszieltage = '0', zahlungszieltageskonto = '0', zahlungszielskonto = '0' - WHERE id = '".$check."' LIMIT 1"); - } - } - $this->app->erp->LoadSteuersaetzeWaehrung($check,$beleg['art'],$beleg['beleg_projekt']); - } - - $teillieferungvon = false; - if($hauptbelegnr) - { - $teillieferungvon = $this->app->DB->Select("SELECT id - FROM auftrag - WHERE belegnr = '".$this->app->DB->real_escape_string($hauptbelegnr)."' - LIMIT 1"); - if($teillieferungvon) - { - $teillieferungnummer= $this->app->DB->Select("SELECT MAX(teillieferungnummer) FROM auftrag WHERE teillieferungvon='$teillieferungvon'"); - $teillieferungnummer++; - $this->app->DB->Update("UPDATE ".$beleg['art']." - SET teillieferungvon = '".$teillieferungvon."',teillieferungnummer='$teillieferungnummer' - WHERE id = '$check' LIMIT 1"); - } - } - - $fields_fromdb = array('name','strasse','ort','land','plz'); - foreach($fields_fromdb as $fieldname) - { - if($beleg['beleg_'.$fieldname]=='') { - $beleg['beleg_'.$fieldname] = $this->app->DB->Select("SELECT ".$fieldname." - FROM adresse - WHERE id='".$beleg['adresse']."' - LIMIT 1"); - } - } - - $belegArt = $beleg['art']; - - if($beleg['beleg_status']) { - $this->app->DB->Update("UPDATE ".$belegArt." - SET status = '".$this->app->DB->real_escape_string($beleg['beleg_status'])."' WHERE id = '$check' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE ".$belegArt." - SET status = '".$this->app->DB->real_escape_string($beleg['status'])."' WHERE id = '$check' LIMIT 1"); - } - if($beleg['beleg_datum']) - { - $this->app->DB->Update("UPDATE ".$belegArt." - SET datum = '".$this->app->DB->real_escape_string($beleg['beleg_datum'])."' WHERE id = '$check' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE ".$belegArt." - SET datum = now() WHERE id = '$check' AND datum = '0000-00-00' LIMIT 1"); - } - if($beleg['beleg_lieferdatum']) - { - if($belegArt === 'bestellung') { - $this->app->DB->Update("UPDATE bestellung - SET gewuenschteslieferdatum = '" . $this->app->DB->real_escape_string($beleg['beleg_lieferdatum']) . "' WHERE id = '$check' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE " . $belegArt . " - SET lieferdatum = '" . $this->app->DB->real_escape_string($beleg['beleg_lieferdatum']) . "' WHERE id = '$check' LIMIT 1"); - } - } - if($beleg['beleg_tatsaechlicheslieferdatum']) - { - $this->app->DB->Update("UPDATE ".$belegArt." - SET tatsaechlicheslieferdatum = '".$this->app->DB->real_escape_string($beleg['beleg_tatsaechlicheslieferdatum'])."' WHERE id = '$check' LIMIT 1"); - } - if($beleg['beleg_art']) - { - $this->app->DB->Update("UPDATE ".$belegArt." - SET art = '".$this->app->DB->real_escape_string($beleg['beleg_art'])."' WHERE id = '$check' LIMIT 1"); - } - - if($beleg['beleg_versandart']) - { - $this->app->DB->Update("UPDATE ".$belegArt." SET versandart = '".$this->app->DB->real_escape_string($beleg['beleg_versandart'])."' WHERE id = '$check' LIMIT 1"); - } - if($beleg['beleg_zahlungsweise']) - { - $this->app->DB->Update("UPDATE ".$belegArt." SET zahlungsweise = '".$this->app->DB->real_escape_string($beleg['beleg_zahlungsweise'])."' WHERE id = '$check' LIMIT 1"); - } - $this->app->DB->Update("UPDATE ".$belegArt." SET belegnr = '".$this->app->DB->real_escape_string($beleg['beleg_belegnr'])."' WHERE id = '$check' LIMIT 1"); - if(empty($beleg['kundennummer']) && $beleg['art'] !== 'bestellung') { - $beleg['kundennummer'] = $adressArr['kundennummer']; - } - if(empty($beleg['beleg_name'])) { - $beleg['beleg_name'] = $adressArr['name']; - $beleg['beleg_plz'] = $adressArr['plz']; - $beleg['beleg_ort'] = $adressArr['ort']; - $beleg['beleg_land'] = $adressArr['land']; - $beleg['beleg_abteilung'] = $adressArr['abteilung']; - $beleg['beleg_unterabteilung'] = $adressArr['unterabteilung']; - $beleg['beleg_adresszusatz'] = $adressArr['adresszusatz']; - } - $this->app->DB->Update("UPDATE ".$belegArt." SET name = '".$this->app->DB->real_escape_string($beleg['beleg_name'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET abteilung = '".$this->app->DB->real_escape_string($beleg['beleg_abteilung'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET unterabteilung = '".$this->app->DB->real_escape_string($beleg['beleg_unterabteilung'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET strasse = '".$this->app->DB->real_escape_string($beleg['beleg_strasse'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET plz = '".$this->app->DB->real_escape_string($beleg['beleg_plz'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET ort = '".$this->app->DB->real_escape_string($beleg['beleg_ort'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET land = '".$this->app->DB->real_escape_string($beleg['beleg_land'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET email = '".$this->app->DB->real_escape_string($beleg['beleg_email'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET telefon = '".$this->app->DB->real_escape_string($beleg['beleg_telefon'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET adresszusatz = '".$this->app->DB->real_escape_string($beleg['beleg_adresszusatz'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET kundennummer = '".$this->app->DB->real_escape_string($beleg['beleg_kundennummer'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET adresse = '".$this->app->DB->real_escape_string($beleg['adresse'])."' WHERE id = '$check' LIMIT 1"); - - $this->app->DB->Update("UPDATE ".$belegArt." SET internebemerkung = '".$this->app->DB->real_escape_string($beleg['beleg_internebemerkung'])."' WHERE id = '$check' LIMIT 1"); - $this->app->DB->Update("UPDATE ".$belegArt." SET internebezeichnung = '".$this->app->DB->real_escape_string($beleg['beleg_internebezeichnung'])."' WHERE id = '$check' LIMIT 1"); - if($belegArt !== 'bestellung') { - $this->app->DB->Update("UPDATE " . $belegArt . " SET aktion = '" . $this->app->DB->real_escape_string($beleg['beleg_aktion']) . "' WHERE id = '$check' LIMIT 1"); - } - if($belegArt === 'bestellung') { - $this->app->DB->Update("UPDATE ".$belegArt." SET lieferantennummer = '".$this->app->DB->real_escape_string($beleg['beleg_lieferantennummer'])."' WHERE id = '$check' LIMIT 1"); - } - $this->app->DB->Update("UPDATE ".$belegArt." SET freitext = '".$this->app->DB->real_escape_string($beleg['beleg_freitext'])."' WHERE id = '$check' LIMIT 1"); - if($belegArt !== 'bestellung'){ - $this->app->DB->Update("UPDATE " . $belegArt . " SET ihrebestellnummer = '" . $this->app->DB->real_escape_string($beleg['beleg_ihrebestellnummer']) . "' WHERE id = '$check' LIMIT 1"); - } - $this->app->DB->Update("UPDATE ".$belegArt." SET lieferbedingung = '".$this->app->DB->real_escape_string($beleg['beleg_lieferbedingung'])."' WHERE id = '$check' LIMIT 1"); - if($belegArt === 'produktion') { - $this->app->DB->Update( - sprintf( - 'UPDATE produktion SET unterlistenexplodieren = %d WHERE id = %d LIMIT 1', - $beleg['beleg_unterlistenexplodieren'], $check - ) - ); - if(!empty($beleg['beleg_auftragid'])) { - $this->app->DB->Update( - sprintf( - 'UPDATE produktion SET auftragid = %d WHERE id = %d LIMIT 1', - $beleg['beleg_auftragid'], $check - ) - ); - $datumauslieferung = $this->app->DB->Select( - sprintf( - 'SELECT datumauslieferung FROM produktion WHERE id = %d', $check - ) - ); - IF($datumauslieferung == '' || $datumauslieferung === '0000-00-00') { - $datumauslieferung = $this->app->DB->Select( - sprintf( - 'SELECT lieferdatum FROM auftrag WHERE id = %d', $beleg['beleg_auftragid'] - ) - ); - IF($datumauslieferung == '' || $datumauslieferung === '0000-00-00') { - $datumauslieferung = $this->app->DB->Select( - sprintf( - 'SELECT datum FROM auftrag WHERE id = %d', $beleg['beleg_auftragid'] - ) - ); - } - if($datumauslieferung != '' && $datumauslieferung !== '0000-00-00') { - $this->app->DB->Update( - sprintf( - "UPDATE produktion SET datumauslieferung = '%s' WHERE id = %d", - $datumauslieferung, $check - ) - ); - } - } - } - } - } - } - } - if($check) - { - $aktbelegid = $check; - if($beleg['status'] === 'angelegt'){ - //Merken der Belegids für nachträgliches löschen der Belegnummern aus der Angebotstabelle - $erstelltebelegeids[$check] = $beleg['art']; - } else { - $erstelltebelegeNichtAngelegtids[$check] = $beleg['art']; - } - } - } - } - if($aktbelegid && ($beleg['artikel'] || $beleg['artikel_nummer'])) { - if(!$beleg['artikel']) { - $beleg['artikel'] = $this->app->DB->Select("SELECT id - FROM artikel - WHERE nummer = '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."' and geloescht <> 1 - ORDER BY projekt = '".$beleg['beleg_projekt']."' DESC - LIMIT 1"); - if(!$beleg['artikel'] && isset($beleg['artikel_ean']) && $beleg['artikel_ean'] != '') { - $beleg['artikel'] = $this->app->DB->Select("SELECT id - FROM artikel - WHERE ean = '".$this->app->DB->real_escape_string($beleg['artikel_ean'])."' AND ean <> '' and geloescht <> 1 - ORDER BY projekt = '".$beleg['beleg_projekt']."' DESC - LIMIT 1"); - } - } - if(!$beleg['artikel']) { - $art['nummer'] = $beleg['artikel_nummer']; - if(isset($beleg['artikel_ean']) && $beleg['artikel_ean'] != '') { - $art['ean'] = $beleg['artikel_ean']; - } - $art['projekt'] = $beleg['beleg_projekt']; - $art['name_de'] = $beleg['artikel_bezeichnung']; - $art['anabregs_text'] = $beleg['artikel_bezeichnung']; - if($beleg['artikel_umsatzsteuer'] === 'ermaessigt') { - $art['umsatzsteuer'] = $beleg['artikel_umsatzsteuer']; - } - $art['einheit'] = $beleg['artikel_einheit']; - $art['zolltarifnummer'] = $beleg['artikel_zolltarifnummer']; - $art['herkunftsland'] = $beleg['artikel_herkunftsland']; - if(!empty($uebertragungen) - && !empty($transferData['createarticleifnotexists']) - && !empty($transferData['createarticleasstoragearticle']) - ) { - $art['lagerartikel'] = 1; - } - $beleg['artikel'] = $this->app->erp->InsertUpdateArtikel($art); - unset($art); - } - if($beleg['artikel']) - { - if(empty($beleg['artikel_nummer'])) { - $beleg['artikel_nummer'] = $this->app->DB->Select( - sprintf( - 'SELECT nummer FROM artikel WHERE id = %d LIMIT 1', - $beleg['artikel'] - ) - ); - } - - if(empty($beleg['artikel_bezeichnung'])) { - $article = $this->app->DB->SelectRow( - sprintf( - 'SELECT art.name_de, art.name_en, art.`anabregs_text_en`, art.anabregs_text - FROM `artikel` AS `art` WHERE art.id = %d', - $beleg['artikel'] - ) - ); - $sprache = $this->app->DB->Select( - sprintf( - 'SELECT `sprache` FROM `%s` WHERE `id` = %d LIMIT 1', - $aktbelegart, $aktbelegid - ) - ); - if(empty($sprache)) { - $sprache = $this->app->DB->Select( - sprintf( - 'SELECT `sprache` FROM `adresse` WHERE `id` = %d LIMIT 1', - $beleg['adresse'] - ) - ); - } - if($sprache !== 'deutsch' && $sprache != '' && strtolower($sprache) !== 'de') { - if(!empty($article['name_en'])) { - $beleg['artikel_bezeichnung'] = $article['name_en']; - if(!empty($aricle['anabregs_text_en'])) { - $beleg['artikel_beschreibung'] = $aricle['anabregs_text_en']; - } - } - } - if(empty($beleg['artikel_bezeichnung'])){ - $beleg['artikel_bezeichnung'] = $aricle['name_de']; - } - } - elseif($uebertragungen > 0) { - $article = $this->app->DB->SelectRow( - sprintf( - 'SELECT art.name_de, art.name_en, art.`anabregs_text_en`, art.anabregs_text - FROM `artikel` AS `art` WHERE art.id = %d', - $beleg['artikel'] - ) - ); - if(!empty($article['name_en']) && $beleg['artikel_bezeichnung'] !== $article['name_en']) { - $sprache = $this->app->DB->Select( - sprintf( - 'SELECT `sprache` FROM `%s` WHERE `id` = %d LIMIT 1', - $aktbelegart, $aktbelegid - ) - ); - if(empty($sprache)) { - $sprache = $this->app->DB->Select( - sprintf( - 'SELECT `sprache` FROM `adresse` WHERE `id` = %d LIMIT 1', - $beleg['adresse'] - ) - ); - } - if($sprache !== 'deutsch' && $sprache != '' && strtolower($sprache) !== 'de') { - $beleg['artikel_bezeichnung'] = $article['name_en']; - if(!empty($article['anabregs_text_en'])) { - $beleg['artikel_beschreibung'] = $article['anabregs_text_en']; - } - } - } - } - $belegpos = false; - switch($aktbelegart) - { - case 'auftrag': - $belegpos = $this->app->erp->AddAuftragPositionManuell($aktbelegid, $beleg['artikel'], - ($beleg['artikel_preis']/$beleg['artikel_preisfuermenge']), $beleg['artikel_menge'], - $beleg['artikel_bezeichnung'],$beleg['artikel_beschreibung']); - if(!$belegpos) { - $belegpos = $this->app->DB->GetInsertID(); - } - - if($teillieferungvon) - { - if(!$this->app->DB->Select("SELECT porto FROM artikel WHERE id = '".$beleg['artikel']."' LIMIT 1")) - { - $checkhauptartikel = $this->app->DB->SelectArr("SELECT id, menge, sort - FROM auftrag_position - WHERE artikel = '".$beleg['artikel']."' AND auftrag = '$teillieferungvon' - ORDER BY sort, menge = '".$beleg['menge']."' DESC, menge > '".$beleg['menge']."' DESC"); - if($checkhauptartikel) - { - foreach($checkhauptartikel as $k => $v) - { - if($beleg['artikel_menge'] > 0) - { - if($v['menge'] > $beleg['artikel_menge']) - { - $this->app->DB->Update("UPDATE auftrag_position SET menge = menge - ".$beleg['artikel_menge']." - WHERE id = '".$v['id']."' LIMIT 1"); - $beleg['artikel_menge'] = 0; - }else{ - $this->app->DB->Delete("DELETE FROM auftrag_position WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Update("UPDATE auftrag_position SET sort = sort - 1 - WHERE auftrag = '$teillieferungvon' AND sort > '".$v['sort']."'"); - $beleg['artikel_menge'] -= $v['menge']; - } - } - } - $checkmengen = $this->app->DB->Select("SELECT ap.id FROM auftrag_position ap.left - join artikel a on ap.artikel = a.id WHERE ap.auftrag = '$teillieferungvon' AND a.porto <> 1 LIMIT 1"); - if(!$checkmengen) { - $this->app->DB->Update("UPDATE auftrag SET status = 'abgeschlossen' - WHERE id = '$teillieferungvon' LIMIT 1"); - } - $this->app->erp->ANABREGSNeuberechnen($teillieferungvon,$aktbelegart); - } - } - } - if($beleg['artikel_rabatt']) { - $this->app->DB->Update("UPDATE auftrag_position SET rabatt = '".$beleg['artikel_rabatt']."' - WHERE id = '$belegpos' LIMIT 1"); - } - if($beleg['artikel_waehrung']) { - $this->app->DB->Update("UPDATE auftrag_position - SET waehrung = '".$this->app->DB->real_escape_string($beleg['artikel_waehrung'])."' - WHERE id = '$belegpos' LIMIT 1"); - } - - break; - case 'rechnung': - $belegpos = $this->app->erp->AddRechnungPositionManuell($aktbelegid, $beleg['artikel'], - ($beleg['artikel_preis']/$beleg['artikel_preisfuermenge']),$beleg['artikel_menge'],$beleg['artikel_bezeichnung'], - $beleg['artikel_bezeichnung'],$beleg['artikel_waehrung']); - if(!$belegpos) { - $belegpos = $this->app->DB->GetInsertID(); - } - - if($beleg['artikel_rabatt'])$this->app->DB->Update("UPDATE rechnung_position - SET rabatt = '".$beleg['artikel_rabatt']."' WHERE id = '$belegpos' LIMIT 1"); - - break; - case 'gutschrift': - $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM gutschrift_position WHERE gutschrift = '$aktbelegid'"); - - $this->app->DB->Insert("INSERT INTO gutschrift_position (gutschrift, artikel, sort, - preis, menge, waehrung, rabatt, bezeichnung,beschreibung) - values ('".$aktbelegid."','".$beleg['artikel']."','".$sort."', - '".($beleg['artikel_preis']/$beleg['artikel_preisfuermenge'])."','".$beleg['artikel_menge']."', - '".$this->app->DB->real_escape_string($beleg['artikel_waehrung'])."','".$beleg['artikel_rabatt']."', - '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."')"); - - $belegpos = $this->app->DB->GetInsertID(); - break; - case 'bestellung': - $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM bestellung_position WHERE bestellung = '$aktbelegid'"); - - $umsatzsteuer = $beleg['artikel_umsatzsteuer'] === 'ermaessigt'?'ermaessigt':''; - $datum = $this->app->DB->Select("SELECT datum FROM bestellung WHERE id = '$aktbelegid' LIMIT 1"); - - $einkauf = $this->app->erp->Einkaufspreis($beleg['artikel'],$beleg['artikel_menge'],$beleg['adresse']); - - if(!empty($einkauf)){ - $bestellnummer = $this->app->DB->Select( - sprintf( - 'SELECT e.bestellnummer FROM `einkaufspreise` AS `e` WHERE e.id = %d', - $einkauf - ) - ); - $bestellnummer = $this->app->DB->real_escape_string($bestellnummer); - } - - if(empty($bestellnummer)){ - $bestellnummer = $this->app->DB->real_escape_string($beleg['artikel_nummer']); - } - - $this->app->DB->Insert( - sprintf( - "INSERT INTO bestellung_position (bestellung,artikel,bezeichnunglieferant,bestellnummer,menge,preis, - waehrung, sort,lieferdatum, umsatzsteuer, status,projekt, beschreibung) - VALUES (%d,%d,'%s','%s',%f,%f, - '%s',%d,'%s','%s', - 'angelegt','%s','%s')", - (int)$aktbelegid, - (int)$beleg['artikel'], - $this->app->DB->real_escape_string($beleg['artikel_bezeichnung']), - $bestellnummer, - (float)$beleg['artikel_menge'], - (float)($beleg['artikel_preis']/$beleg['artikel_preisfuermenge']), - $this->app->DB->real_escape_string($beleg['artikel_waehrung']), - $sort,$datum,$umsatzsteuer, - $this->app->DB->real_escape_string($beleg['artikel_bezeichnung']), - $this->app->DB->real_escape_string($beleg['artikel_beschreibung']) - ) - ); - - $belegpos = $this->app->DB->GetInsertID(); - break; - case 'angebot': - $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM angebot_position WHERE angebot = '$aktbelegid'"); - - $umsatzsteuer = $beleg['artikel_umsatzsteuer'] === 'ermaessigt'?'ermaessigt':''; - $datum = $this->app->DB->Select("SELECT datum FROM angebot WHERE id = '$aktbelegid' LIMIT 1"); - - $this->app->DB->Insert("INSERT INTO angebot_position (angebot,artikel,beschreibung,bezeichnung,nummer,menge,preis, - waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) - VALUES ($aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."', - '".$beleg['artikel_menge']."','".($beleg['artikel_preis']/$beleg['artikel_preisfuermenge'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_waehrung'])."','$sort','$datum','$umsatzsteuer','angelegt', - '$projekt','')"); - - $belegpos = $this->app->DB->GetInsertID(); - break; - case 'lieferschein': - $datum = '0000-00-00'; - $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM lieferschein_position WHERE lieferschein = '$aktbelegid'"); - - $this->app->DB->Insert("INSERT INTO lieferschein_position (lieferschein,artikel,beschreibung,bezeichnung,nummer,menge, - sort,lieferdatum, status,projekt) - VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."', - '$sort','$datum','angelegt','$projekt')"); - - $belegpos = $this->app->DB->GetInsertID(); - break; - case 'retoure': - $datum = '0000-00-00'; - $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM retoure_position WHERE retoure = '$aktbelegid'"); - - $this->app->DB->Insert("INSERT INTO retoure_position (retoure,artikel,beschreibung,bezeichnung,nummer,menge, - sort,lieferdatum, projekt) - VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."', - '$sort','$datum','$projekt')"); - - $belegpos = $this->app->DB->GetInsertID(); - break; - case 'preisanfrage': - $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM preisanfrage_position WHERE preisanfrage= '$aktbelegid'"); - $datum = $this->app->DB->Select("SELECT datum FROM preisanfrage WHERE id = '$aktbelegid' LIMIT 1"); - $this->app->DB->Insert("INSERT INTO preisanfrage_position (preisanfrage,artikel,beschreibung,bezeichnung,nummer,menge, - sort,lieferdatum, status,projekt) - VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."', - '$sort','$datum','angelegt','$projekt')"); - - $belegpos = $this->app->DB->GetInsertID(); - - break; - case 'proformarechnung': - $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM proformarechnung_position WHERE proformarechnung = '$aktbelegid'"); - $datum = $this->app->DB->Select("SELECT datum FROM proformarechnung WHERE id = '$aktbelegid' LIMIT 1"); - $umsatzsteuer = $beleg['artikel_umsatzsteuer'] === 'ermaessigt'?'ermaessigt':''; - $this->app->DB->Insert("INSERT INTO proformarechnung_position (proformarechnung,artikel,beschreibung,bezeichnung, - nummer,menge, sort,lieferdatum, status,projekt,umsatzsteuer) - VALUES ($aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."','$sort', - '$datum','angelegt','$projekt','$umsatzsteuer')"); - - $belegpos = $this->app->DB->GetInsertID(); - break; - case 'produktion': - $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM produktion_position WHERE produktion= '$aktbelegid'"); - $datum = $this->app->DB->Select("SELECT datum FROM produktion WHERE id = '$aktbelegid' LIMIT 1"); - $this->app->DB->Insert("INSERT INTO produktion_position (produktion,artikel,beschreibung,bezeichnung,nummer,menge, - sort,lieferdatum, status,projekt) - VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', - '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."','$sort', - '$datum','angelegt','$projekt')"); - - $belegpos = $this->app->DB->GetInsertID(); - $already_new_item_is_bom = $this->app->DB->Select( - sprintf('SELECT stueckliste FROM artikel WHERE id=%d AND produktion=1', - $beleg['artikel'] - ) - ); - $already = $this->app->DB->Select( - sprintf( - 'SELECT id FROM produktion_position WHERE produktion=%d AND explodiert=1 LIMIT 1', - $aktbelegid - ) - ); - - if(!$already || !$already_new_item_is_bom) { - /** @var Produktion $objProduction */ - $objProduction = $this->app->erp->LoadModul('produktion'); - if(!empty($objProduction) && method_exists($objProduction, 'addArbeitsanweisungenFunktionsprotokoll')) { - $objProduction->addArbeitsanweisungenFunktionsprotokoll($aktbelegid,$belegpos, $beleg['artikel']); - } - } - if(!empty($objProduction)){ - $this->app->erp->AuftragExplodieren($aktbelegid, 'produktion'); - $objProduction->ProduktionEinzelnBerechnen($aktbelegid); - $objProduction->ProduktionNeuberechnen($aktbelegid); - } - break; - default: - break; - } - if($belegpos) - { - $artikelnummerkunde = $this->app->DB->real_escape_string( - $this->app->DB->Select( - "SELECT kundenartikelnummer - FROM verkaufspreise - WHERE adresse='".$beleg['beleg_adresse']."' AND artikel='".$beleg['artikel']."' - AND kundenartikelnummer!='' AND ab_menge <=". - (float)$beleg['artikel_menge']." - AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') - ORDER by ab_menge DESC - LIMIT 1" - )); - - if($artikelnummerkunde == ''){ - // Anzeige Artikel Nummer von Gruppe aus Verkaufspreis - $returnwaehrung = null; - $gruppevkresult = $this->app->erp->GetVerkaufspreis( - $beleg['artikel'], - (float)$beleg['artikel_menge'], - $beleg['adresse'], - !empty($beleg['artikel_waehrung'])?$beleg['artikel_waehrung']:'EUR', - $returnwaehrung, - true - ); - if($gruppevkresult['kundenartikelnummer'] != ''){ - $artikelnummerkunde = $gruppevkresult['kundenartikelnummer']; - } - } - - if(!empty($artikelnummerkunde)) { - $this->app->DB->Update( - sprintf( - "UPDATE `%s` SET artikelnummerkunde = '%s' WHERE id = %d ", - $aktbelegart.'_position', - $this->app->DB->real_escape_string($artikelnummerkunde), - $belegpos - ) - ); - } - - - $felder = array('artikelnummerkunde','herkunftsland','zolltarifnummer','einheit','lieferdatum'); - for($i = 1; $i <= 20; $i++) { - $felder[] = 'freifeld'.$i; - } - foreach($felder as $feld) - { - $this->app->DB->Update("UPDATE ".$aktbelegart."_position - SET $feld = '".$this->app->DB->real_escape_string($beleg['artikel_'.$feld])."' - WHERE id = '$belegpos' LIMIT 1"); - } - $this->app->erp->ANABREGSNeuberechnen($aktbelegid,$aktbelegart); - $this->app->DB->Delete("DELETE FROM belegeimport WHERE id = '".$beleg['id']."' LIMIT 1"); - } - } - } - } - } - foreach ($erstelltebelegeids as $belegid => $belegart) { - //Nachträgliches löschen aller Belegnummern aus den Angeboten wenn Status == angelegt - $this->app->DB->Update("UPDATE " . $belegart . " SET belegnr = '' WHERE id = '$belegid' LIMIT 1"); - } - foreach ($erstelltebelegeNichtAngelegtids as $belegid => $belegart) { - if($this->app->DB->Select( - sprintf(' - SELECT id - FROM `%s` - WHERE id = %d AND (status = \'freigegeben\' OR status = \'abgeschlossen\' OR status = \'versendet\') AND belegnr = \'\' - ', $belegart, $belegid - ) - ) - ){ - $this->app->erp->BelegFreigabe($belegart, $belegid); - } - } - $msg = $this->app->erp->base64_url_encode("
Die Belege wurden importiert!
"); - }else{ - $msg = $this->app->erp->base64_url_encode("
Keine Belege zum Importieren gefunden!
"); - } - if($uebertragungen) { - return $ret; - } - if($idliste) { - return !empty($belege)?count($belege):0; - } - return $msg; - } - - public function BelegeimportDatei($_datei = null, $uebertragungen = false) - { - $ret = null; - $_projekt = 0; - if($uebertragungen) { - $_projekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '$uebertragungen' LIMIT 1"); - } - if($_datei === null) - { - //$this->app->erp->BelegeimportMenu(); - //$this->app->YUI->TableSearch('TAB1','belegeimport_list', 'show','','',basename(__FILE__), __CLASS__); - - $art = $this->app->Secure->GetPOST("art"); - $status = $this->app->Secure->GetPOST("status"); - $datei = (int)$this->app->Secure->GetGET('datei'); - }else{ - $ret = null; - $art = ''; - $datei = $_datei; - $status = 'angelegt'; - } - if($uebertragungen) { - $api = $this->app->DB->Select("SELECT api FROM uebertragungen_account WHERE id = '$uebertragungen' LIMIT 1"); - } - $row = 1; - if($_datei === null) - { - $art = $this->app->Secure->GetPOST("art"); - $status = $this->app->Secure->GetPOST("status"); - $datei = (int)$this->app->Secure->GetGET('datei'); - }else{ - $ret = null; - $art = ''; - $datei = $_datei; - $status = 'angelegt'; - } - - if($datei || (!empty($_FILES['datei']) && !empty($_FILES['datei']['tmp_name']))) - { - if ( - ($handle = fopen( - $_datei === null?(isset($_FILES['datei'])?$_FILES['datei']['tmp_name']:$this->app->erp->GetDateiPfad($datei)):$datei, - 'r') - ) !== FALSE - ) { - $vkpreisex = false; - $artikel_bezeichnung = false; - $beleg_datum = false; - $menge = false; - $beleg_art = false; - $beleg_nr_parent = 0; - $oldbeleg_belegnr = ''; - $fields = []; - $csvseparator = $this->app->DB->Select( - sprintf( - 'SELECT csvseparator FROM uebertragungen_account WHERE id = %d', - $uebertragungen - ) - ); - if(empty($csvseparator)) { - $csvseparator = ';'; - } - while (($data = fgetcsv($handle, 0, $csvseparator,'"')) !== FALSE) { - $num = (!empty($data)?count($data):0); - //echo "

$num Felder in Zeile $row:

\n"; - - if($row > 1){ - if($_datei !== null) { - $status = 'angelegt'; - } - for ($c=0; $c < $num; $c++){ - if($fields[$c] === 'art' && $data[$c]) { - $art = trim(strtolower($data[$c])); - } - } - $this->app->DB->Insert("INSERT INTO belegeimport (userid,status,art) VALUES ('".($_datei === null?$this->app->User->GetID():0)."','$status','$art')"); - $rowid = $this->app->DB->GetInsertID(); - if($uebertragungen) { - $this->app->DB->Update("UPDATE belegeimport SET beleg_projekt = '$_projekt' WHERE id = '$rowid' LIMIT 1"); - } - $ret[] = $rowid; - } - $preis = 0; - $preisfuermenge = 1; - $projekt = $_projekt; - $tmpartikelid = 0; - $tmpadresseid = 0; - for ($c=0; $c < $num; $c++){ - if($row==1){ - $fields[$c]=$this->app->DB->real_escape_string($data[$c]); - if($fields[$c] === 'artikel_preis')$vkpreisex = str_replace(',','.',$c); - if($fields[$c] === 'artikel_menge')$menge = str_replace(',','.',$c); - if($fields[$c] === 'artikel_bezeichnung')$artikel_bezeichnung = $c; - if($fields[$c] === 'beleg_datum')$beleg_datum = $c; - if($fields[$c] === 'beleg_art')$beleg_art = $c; - }else{ - switch($fields[$c]) - { - case 'beleg_status': - if(in_array($data[$c],['angelegt','freigegeben','storniert','abgeschlossen','gestartet','versendet'])) { - $status = $data[$c]; - - } - - break; - case 'beleg_belegnr': - - if($uebertragungen && ($data[$c] != '' && $data[$c] == $oldbeleg_belegnr)) - { - $data[$c] = 'PARENT'; - }elseif($uebertragungen && $oldbeleg_belegnr != $data[$c] && $data[$c] !== 'NEW' && $data[$c] !== 'PARENT') - { - $oldbeleg_belegnr = $data[$c]; - } - - if(($data[$c] !== 'PARENT' && $status === 'angelegt') || $data[$c] == ''){ - $data[$c] = "NEW"; - } - - if($data[$c] === 'PARENT'){ - if($beleg_nr_parent){ - //Übernimm Belegnummer der vorherigen Zeile - $data[$c] = $beleg_nr_parent; - }else{ - //Falls vor dieser PARENT Zeile kein Eintrag vorhanden ist soll sie als NEW betrachtet werden - $data[$c] = 'NEW'; - } - } - - - if($data[$c] === 'NEW'){ - if($status === 'angelegt'){ - //Neue Entwurfsbelegnummer - $data[$c] = 'ENTWURF_'.$rowid.'_'; - }else{ - //suche nächste freie Belegnummer falls NEW oder leere Belegnummer - $data[$c] = $this->app->erp->GetNextNummer($art); - } - $oldbeleg_belegnr = $data[$c]; - } - //Merke die aktuelle Belegnummer falls der nächste Eintrag PARENT ist - $beleg_nr_parent = $data[$c]; - break; - - case 'beleg_projekt': - if((!is_numeric($data[$c]) || strpos($data[$c],'.') !== false) && $data[$c]) - { - $data[$c] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($data[$c])."' LIMIT 1"); - if($data[$c]) { - $projekt = $data[$c]; - } - } - break; - - case 'artikel': - if($uebertragungen && $api) - { - if(!$tmpartikelid) - { - $tmpartikelid = $this->app->DB->Select( - "SELECT id_int - FROM api_mapping - WHERE id_ext = '%s' AND id_ext != '' AND id_int <> 0 AND tabelle = 'artikel' AND api = %d - LIMIT 1", - $data[$c], (int)$api - ); - if($tmpartikelid > 0) { - $this->app->DB->Update("UPDATE belegeimport SET artikel='$tmpartikelid' WHERE id='".$rowid."' LIMIT 1"); - } - } - } - break; - - case 'artikel_nummer': - if(!$tmpartikelid) { - $tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$this->app->DB->real_escape_string($data[$c])."' AND nummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1"); - } - if($tmpartikelid > 0) { - $this->app->DB->Update("UPDATE belegeimport SET artikel='$tmpartikelid' WHERE id='".$rowid."' LIMIT 1"); - } - break; - - case 'artikel_ean': - if(!$tmpartikelid)$tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='".$this->app->DB->real_escape_string($data[$c])."' AND ean != '' AND nummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1"); - if($tmpartikelid > 0) { - $this->app->DB->Update("UPDATE belegeimport SET artikel='$tmpartikelid' WHERE id='".$rowid."' LIMIT 1"); - } - break; - - case 'adresse': - if($uebertragungen && $api) - { - $tmpadresseid = (int)$data[$c]; - } - break; - - case 'beleg_kundennummer': - if(!$tmpadresseid) - { - $tmpadresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$this->app->DB->real_escape_string($data[$c])."' AND kundennummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1"); - if($tmpadresseid > 0) { - $this->app->DB->Update("UPDATE belegeimport SET adresse='$tmpadresseid' WHERE id='".$rowid."' LIMIT 1"); - } - else $tmpadresseid = 0; - } - if($data[$c]=='') { - $data[$c] = 'NEW'; - } - break; - case 'beleg_lieferantennummer': - if(!$tmpadresseid) - { - $tmpadresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$this->app->DB->real_escape_string($data[$c])."' AND lieferantennummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1"); - if($tmpadresseid > 0) { - $this->app->DB->Update("UPDATE belegeimport SET adresse='$tmpadresseid' WHERE id='".$rowid."' LIMIT 1"); - } - else $tmpadresseid = 0; - } - if($data[$c]=='') { - $data[$c] = 'NEW'; - } - break; - - case 'beleg_datum': - if(strpos($data[$c],'.') !== false) - { - $datuma = explode('.',$data[$c]); - if((!empty($datuma)?count($datuma):0) == 3) - { - if(strlen($datuma[2]) == 2) - { - $curryear = date("Y")-2000; - if((int)$datuma[2] <= $curryear) - { - $data[$c] = $datuma[0].'.'.$datuma[1].'.20'.$datuma[2]; - }else{ - $data[$c] = $datuma[0].'.'.$datuma[1].'.19'.$datuma[2]; - } - } - } - $data[$c] = date('Y-m-d',strtotime($data[$c])); - } - break; - - case 'beleg_lieferdatum': - if(strpos($data[$c],'.') !== false) - { - $datuma = explode('.',$data[$c]); - if((!empty($datuma)?count($datuma):0) == 3) - { - if(strlen($datuma[2]) == 2) - { - $curryear = date("Y")-2000; - if((int)$datuma[2] <= $curryear) - { - $data[$c] = $datuma[0].'.'.$datuma[1].'.20'.$datuma[2]; - }else{ - $data[$c] = $datuma[0].'.'.$datuma[1].'.19'.$datuma[2]; - } - } - } - $data[$c] = date('Y-m-d',strtotime($data[$c])); - } - break; - - case 'beleg_tatsaechlicheslieferdatum': - if(strpos($data[$c],'.') !== false) - { - $datuma = explode('.',$data[$c]); - if((!empty($datuma)?count($datuma):0) == 3) - { - if(strlen($datuma[2]) == 2) - { - $curryear = date("Y")-2000; - if((int)$datuma[2] <= $curryear) - { - $data[$c] = $datuma[0].'.'.$datuma[1].'.20'.$datuma[2]; - }else{ - $data[$c] = $datuma[0].'.'.$datuma[1].'.19'.$datuma[2]; - } - } - } - $data[$c] = date('Y-m-d',strtotime($data[$c])); - } - break; - - case 'artikel_lieferdatum': - if(strpos($data[$c],'.') !== false) - { - $datuma = explode('.',$data[$c]); - if((!empty($datuma)?count($datuma):0) == 3) - { - if(strlen($datuma[2]) == 2) - { - $curryear = date("Y")-2000; - if((int)$datuma[2] <= $curryear) - { - $data[$c] = $datuma[0].'.'.$datuma[1].'.20'.$datuma[2]; - }else{ - $data[$c] = $datuma[0].'.'.$datuma[1].'.19'.$datuma[2]; - } - } - } - $data[$c] = date('Y-m-d',strtotime($data[$c])); - } - break; - - case 'artikel_preis': - $preis = str_replace(',','.',$data[$c]); - if ($preisfuermenge == 0) { - $preisfuermenge =1; - } - $data[$c] = $preis / $preisfuermenge; - break; - case 'artikel_preisfuermenge': - $preisfuermenge = str_replace(',','.',$data[$c]); - if ($preisfuermenge == 0) { - $preisfuermenge =1; - } - $data['artikel_preis'] = $preis / $preisfuermenge; - break; - case 'artikel_rabatt': - case 'artikel_menge': - $data[$c] = str_replace(',','.',$data[$c]); - break; - - } - if(isset($fields[$c]) && $fields[$c]) - { - $this->app->DB->Update("UPDATE belegeimport SET ".$fields[$c]." = '".$this->app->DB->real_escape_string($data[$c])."' WHERE id='".$rowid."' LIMIT 1"); - } - if(!empty($status)) { - $this->app->DB->Update( - sprintf( - "UPDATE belegeimport SET status = '%s' WHERE id = %d", - $this->app->DB->real_escape_string($status), $rowid - ) - ); - } - - } - //echo $data[$c] . "
\n"; - } - - if($row > 1){ - if($menge === false) - { - $this->app->DB->Update("UPDATE belegeimport SET artikel_menge = 1 WHERE id='".$rowid."' LIMIT 1"); - } - if($beleg_datum === false) - { - $this->app->DB->Update("UPDATE belegeimport SET beleg_datum = now() WHERE id = '".$rowid."' LIMIT 1"); - } - if($tmpadresseid && $beleg_art === false) - { - $arttmp = $this->app->DB->Select("SELECT art FROM adresse WHERE id = '$tmpadresseid' LIMIT 1"); - if($arttmp) { - $this->app->DB->Update("UPDATE belegeimport SET beleg_art = '".$this->app->DB->real_escape_string($arttmp)."' WHERE id = '".$rowid."' LIMIT 1"); - } - } - if( $tmpartikelid) - { - if($vkpreisex === false) - { - $this->app->DB->Update("UPDATE belegeimport SET artikel_preis = '".$this->app->erp->GetVerkaufspreis($tmpartikelid,($menge === false?1: ($data[$menge]>0?$data[$menge]:1)),$tmpadresseid )."' WHERE id = '".$rowid."' LIMIT 1"); - } - if($artikel_bezeichnung === false) - { - $this->app->DB->Update("UPDATE belegeimport SET artikel_bezeichnung = '".$this->app->DB->real_escape_string($this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$tmpartikelid' LIMIT 1" ))."' WHERE id = '".$rowid."' LIMIT 1"); - } - } - if(!$data[$menge]){ - //Artikel mit Menge 0 entfernen - $this->app->DB->Update("DELETE FROM belegeimport WHERE id='".$rowid."'"); - } - } - - $row++; - } - fclose($handle); - } - } - return $ret; - } - } + $value) { + if (substr($name, 0, 5) == 'HTTP_') { + $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; + } + } + return $headers; + } + } + + + if(!class_exists('SimpleXMLExtended')) { + class SimpleXMLExtended extends SimpleXMLElement + { + /** + * @param $cdata_text + */ + public function addCData($cdata_text) + { + $node = dom_import_simplexml($this); + $no = $node->ownerDocument; + $node->appendChild($no->createCDATASection($cdata_text)); + } + } + } + + class Api { + /** @var Application $app */ + var $app; + var $api_id; + var $uebertragung_account; + var $usejson; + var $usecdata; + var $datei_id; + var $lagerzahlenmonitor; + var $lagerzahlen; + + /** @var \Xentral\Modules\ApiAccount\Service\ApiAccountService */ + protected $apiAccountService; + + /** @var \Xentral\Modules\ApiAccount\Data\ApiAccountData */ + protected $apiAccount; + + /** @var array $bestBeforeBatchArticleStock */ + protected $bestBeforeBatchArticleStock; + + /** + * Api constructor. + * + * @param Application $app + * @param bool $intern + */ + public function __construct($app, $intern = false) { + +// header("Content-Type: text/html; charset=utf-8"); + + $this->app=$app; + $this->usejson = false; + $this->usecdata = false; + $this->api_id = 0; + $this->datei_id = 0; + $this->apiAccountService = $this->app->Container->get('ApiAccountService'); + + if($intern) { + return; + } + $this->app->ActionHandlerInit($this); + // eine alte Funktion + $this->app->ActionHandler("shopimages","ApiShopimages"); + + //Stechuhr + $this->app->ActionHandler("ServerTimeGet","ApiServerTimeGet"); + $this->app->ActionHandler("BenutzerGetRFID","ApiBenutzerGetRFID"); + $this->app->ActionHandler("BenutzerList","ApiBenutzerList"); + $this->app->ActionHandler("StechuhrStatusGet","ApiStechuhrStatusGet"); + $this->app->ActionHandler("StechuhrStatusSet","ApiStechuhrStatusSet"); + $this->app->ActionHandler("StechuhrSummary","ApiStechuhrSummary"); + + $this->app->ActionHandler("AdresseCreate","ApiAdresseCreate"); + $this->app->ActionHandler("AdresseEdit","ApiAdresseEdit"); + $this->app->ActionHandler("AdresseGet","ApiAdresseGet"); + + $this->app->ActionHandler("AnsprechpartnerCreate","ApiAnsprechpartnerCreate"); + $this->app->ActionHandler("AnsprechpartnerEdit","ApiAnsprechpartnerEdit"); + + $this->app->ActionHandler("LieferadresseCreate","ApiLieferadresseCreate"); + $this->app->ActionHandler("LieferadresseEdit","ApiLieferadresseEdit"); + + $this->app->ActionHandler("AdresseAboGruppeCreate","ApiAdresseAboGruppeCreate"); + $this->app->ActionHandler("AdresseAboGruppeEdit","ApiAdresseAboGruppeEdit"); + $this->app->ActionHandler("AdresseAboGruppeGet","ApiAdresseAboGruppeGet"); + $this->app->ActionHandler("AdresseAboGruppeList","ApiAdresseAboGruppeList"); + + $this->app->ActionHandler("AdresseAboArtikelCreate","ApiAdresseAboArtikelCreate"); + $this->app->ActionHandler("AdresseAboArtikelEdit","ApiAdresseAboArtikelEdit"); + $this->app->ActionHandler("AdresseAboArtikelGet","ApiAdresseAboArtikelGet"); + $this->app->ActionHandler("AdresseAboArtikelList","ApiAdresseAboArtikelList"); + + $this->app->ActionHandler("BerichteGet", "ApiBerichteGet"); + + $this->app->ActionHandler("ArtikelList", "ApiArtikelList"); + $this->app->ActionHandler("ArtikelStueckliste", "ApiArtikelStueckliste"); + + $this->app->ActionHandler("AuftragCreate","ApiAuftragCreate"); + $this->app->ActionHandler("AuftragEdit","ApiAuftragEdit"); + $this->app->ActionHandler("AuftragGet","ApiAuftragGet"); + + $this->app->ActionHandler("AngebotCreate","ApiAngebotCreate"); + $this->app->ActionHandler("AngebotEdit","ApiAngebotEdit"); + $this->app->ActionHandler("AngebotGet","ApiAngebotGet"); + + $this->app->ActionHandler("GutschriftGet","ApiGutschriftGet"); + $this->app->ActionHandler("GutschriftEdit","ApiGutschriftEdit"); + $this->app->ActionHandler("GutschriftCreate","ApiGutschriftCreate"); + + $this->app->ActionHandler("LieferscheinGet","ApiLieferscheinGet"); + $this->app->ActionHandler("LieferscheinEdit","ApiLieferscheinEdit"); + $this->app->ActionHandler("LieferscheinCreate","ApiLieferscheinCreate"); + + $this->app->ActionHandler("LieferscheinFreigabe", "ApiLieferscheinFreigabe"); + $this->app->ActionHandler("RechnungFreigabe", "ApiRechnungFreigabe"); + $this->app->ActionHandler("AuftragFreigabe", "ApiAuftragFreigabe"); + $this->app->ActionHandler("AngebotFreigabe", "ApiAngebotFreigabe"); + $this->app->ActionHandler("GutschriftFreigabe", "ApiGutschriftFreigabe"); + $this->app->ActionHandler("BestellungFreigabe", "ApiBestellungFreigabe"); + + $this->app->ActionHandler("AuftragAbschliessen", "ApiAuftragAbschliessen"); + $this->app->ActionHandler("RechnungVersendetMarkieren", "ApiRechnungVersendetMarkieren"); + $this->app->ActionHandler("RechnungAlsBezahltMarkieren", "ApiRechnungAlsBezahltMarkieren"); + + $this->app->ActionHandler("WeiterfuehrenAuftragZuRechnung", "ApiWeiterfuehrenAuftragZuRechnung"); + $this->app->ActionHandler("WeiterfuehrenRechnungZuGutschrift", "ApiWeiterfuehrenRechnungZuGutschrift"); + + $this->app->ActionHandler("RechnungVersenden", "ApiRechnungVersenden"); + $this->app->ActionHandler("AngebotVersenden", "ApiAngebotVersenden"); + $this->app->ActionHandler("GutschriftVersenden", "ApiGutschriftVersenden"); + $this->app->ActionHandler("AuftragVersenden", "ApiAuftragVersenden"); + $this->app->ActionHandler("LieferscheinVersenden", "ApiLieferscheinVersenden"); + $this->app->ActionHandler("ReisekostenVersenden", "ApiReisekostenVersenden"); + + $this->app->ActionHandler("AuftragArchivieren", "ApiAuftragArchivieren"); + $this->app->ActionHandler("AngebotArchivieren", "ApiAngebotArchivieren"); + $this->app->ActionHandler("LieferscheinArchivieren", "ApiLieferscheinArchivieren"); + $this->app->ActionHandler("RechnungArchivieren", "ApiRechnungArchivieren"); + $this->app->ActionHandler("GutschriftArchivieren", "ApiGutschriftArchivieren"); + + $this->app->ActionHandler("RetoureGet","ApiRetoureGet"); + $this->app->ActionHandler("RetoureEdit","ApiRetoureEdit"); + $this->app->ActionHandler("RetoureCreate","ApiRetoureCreate"); + + $this->app->ActionHandler("RechnungGet","ApiRechnungGet"); + $this->app->ActionHandler("RechnungEdit","ApiRechnungEdit"); + $this->app->ActionHandler("RechnungCreate","ApiRechnungCreate"); + + $this->app->ActionHandler("BestellungGet","ApiBestellungGet"); + $this->app->ActionHandler("BestellungEdit","ApiBestellungEdit"); + $this->app->ActionHandler("BestellungCreate","ApiBestellungCreate"); + + $this->app->ActionHandler("ArtikelCreate","ApiArtikelCreate"); + $this->app->ActionHandler("ArtikelEdit","ApiArtikelEdit"); + $this->app->ActionHandler("ArtikelGet","ApiArtikelGet"); + + $this->app->ActionHandler("ArtikelStuecklisteCreate", "ApiArtikelStuecklisteCreate"); + $this->app->ActionHandler("ArtikelStuecklisteEdit", "ApiArtikelStuecklisteEdit"); + $this->app->ActionHandler("ArtikelStuecklisteList", "ApiArtikelStuecklisteList"); + + $this->app->ActionHandler("BenutzerCreate","ApiBenutzerCreate"); + $this->app->ActionHandler("BenutzerEdit","ApiBenutzerEdit"); + $this->app->ActionHandler("BenutzerGet","ApiBenutzerGet"); + + $this->app->ActionHandler("SessionStart","ApiSessionStart"); + $this->app->ActionHandler("SessionClose","ApiSessionClose"); + + $this->app->ActionHandler("AdresseKontaktCreate","ApiAdresseKontaktCreate"); + $this->app->ActionHandler("AdresseKontaktEdit","ApiAdresseKontaktEdit"); + $this->app->ActionHandler("AdresseKontaktGet","ApiAdresseKontaktGet"); + $this->app->ActionHandler("AdresseKontaktList","ApiAdresseKontaktList"); + + $this->app->ActionHandler("AdresseListeGet","ApiAdresseListeGet"); + + $this->app->ActionHandler("GruppeCreate","ApiGruppeCreate"); + $this->app->ActionHandler("GruppeEdit","ApiGruppeEdit"); + $this->app->ActionHandler("GruppeGet","ApiGruppeGet"); + + $this->app->ActionHandler("GruppenList","ApiGruppenList"); + + $this->app->ActionHandler("PreiseEdit","ApiPreiseEdit"); + + $this->app->ActionHandler("ExportVorlageGet","ApiExportVorlageGet"); + $this->app->ActionHandler("AdresseAccountsGet","ApiAdresseAccountsGet"); + $this->app->ActionHandler("ArtikelkontingenteGet","ApiArtikelkontingenteGet"); + + $this->app->ActionHandler("MappingGet","ApiMappingGet"); + $this->app->ActionHandler("MappingSet","ApiMappingSet"); + + $this->app->ActionHandler("BelegeList","ApiBelegeList"); + $this->app->ActionHandler("ArtikelkategorienList","ApiArtikelkategorienList"); + + $this->app->ActionHandler("AccountList", "ApiAccountList"); + $this->app->ActionHandler("AdresseGruppenList", "ApiAdresseGruppenList"); + $this->app->ActionHandler("AccountLogin", "ApiAccountLogin"); + $this->app->ActionHandler("AccountCreate", "ApiAdresseAccountCreate"); + $this->app->ActionHandler("AccountEdit", "ApiAdresseAccountEdit"); + + $this->app->ActionHandler("DateiList", "ApiDateiList"); + $this->app->ActionHandler("DateiVorschau", "ApiDateiVorschau"); + $this->app->ActionHandler("DateiDownload", "ApiDateiDownload"); + $this->app->ActionHandler("DateiHeader", "ApiDateiHeader"); + + $this->app->ActionHandler("BelegPDF", "ApiBelegPDF"); + $this->app->ActionHandler("BelegPDFHeader", "ApiBelegPDFHeader"); + + $this->app->ActionHandler("ZeiterfassungGet", "ApiZeiterfassungGet"); + $this->app->ActionHandler("ZeiterfassungCreate", "ApiZeiterfassungCreate"); + $this->app->ActionHandler("ZeiterfassungEdit", "ApiZeiterfassungEdit"); + $this->app->ActionHandler("ZeiterfassungDelete", "ApiZeiterfassungDelete"); + + $this->app->ActionHandler("ProjektListe", "ApiProjektListe"); + $this->app->ActionHandler("ProjektGet", "ApiProjektGet"); + $this->app->ActionHandler("ProjektCreate", "ApiProjektCreate"); + $this->app->ActionHandler("ProjektEdit", "ApiProjektEdit"); + + $this->app->ActionHandler("AngebotZuAuftrag", "ApiAngebotZuAuftrag"); + $this->app->ActionHandler("AuftragZuRechnung", "ApiAuftragZuRechnung"); + $this->app->ActionHandler("Etikettendrucker", "ApiEtikettendrucker"); + $this->app->ActionHandler("Custom", "ApiCustom"); + + $this->app->ActionHandler("ApiXMLTest", "ApiXMLTest"); + + $allHeaders = getallheaders(); + if (isset($allHeaders['Accept']) && strpos($allHeaders['Accept'], 'json') !== false) { + $this->usejson = true; + } + + $this->CheckHash(); + + $this->app->ActionHandlerListen($app); + } + + public function Install() + { + $this->app->erp->CheckTable('api_permission'); + $this->app->erp->CheckColumn('key', 'varchar(255)', 'api_permission'); + $this->app->erp->CheckIndex('api_permission', 'key', true); + $this->app->erp->CheckColumn('group', 'varchar(255)', 'api_permission'); + $this->fillApiPermissions(); + + $this->app->erp->CheckColumn('permissions', 'text', 'api_account'); + $this->app->erp->CheckColumn('ishtmltransformation','TINYINT(1)','api_account','DEFAULT \'0\' NOT NULL'); + $this->migrateApiAccounts(); + $this->migrateApiAccountFromCompanyData(); + + $this->migrateNewActions(); + $this->renamePermissions(); + + } + + /** + * Migrate the old api account from company data + */ + protected function migrateApiAccountFromCompanyData(): void + { + $initKey = $this->app->erp->Firmendaten('api_initkey'); + $remoteDomain = $this->app->erp->Firmendaten('api_remotedomain'); + $eventUrl = $this->app->erp->Firmendaten('api_eventurl'); + $enable = $this->app->erp->Firmendaten('api_enable'); + $cleanUtf8 = $this->app->erp->Firmendaten('api_cleanutf8'); + $importWarteschlange = $this->app->erp->Firmendaten('api_importwarteschlange'); + $importWarteschlangeName = $this->app->erp->Firmendaten('api_importwarteschlange_name'); + $apiOhneHtmlUmwandlung = $this->app->erp->Firmendaten('apiohnehtmlumwandlung'); + + if(empty($remoteDomain)){ + return; + } + + $sql = "SELECT `id` FROM `api_account` WHERE remotedomain = '" . $remoteDomain . "'"; + $isExisting = $this->app->DB->Select($sql) > 0; + + if($isExisting){ + return; + } + + $availablePermissions = []; + foreach ($this->getGroupedPermissions() as $group => $permissions) { + $availablePermissions = array_merge($availablePermissions, $permissions); + } + + $sql = + "INSERT INTO `api_account` ( + `bezeichnung`, + `initkey`, + `importwarteschlange_name`, + `event_url`, + `remotedomain`, + `aktiv`, + `importwarteschlange`, + `cleanutf8`, + `uebertragung_account`, + `projekt`, + `is_legacy`, + `permissions`, + `ishtmltransformation` + ) VALUES ( + 'Migration - " . $remoteDomain . "', + '" . $initKey . "', + '" . $importWarteschlangeName . "', + '" . $eventUrl . "', + '" . $remoteDomain . "', + " . $enable . ", + " . $importWarteschlange . ", + " . $cleanUtf8 . ", + 0, + 0, + 0, + '" . json_encode($availablePermissions) ."', + " . $apiOhneHtmlUmwandlung . " + )"; + + $isInserted = (bool)$this->app->DB->Insert($sql); + + if($isInserted){ + $apiId = $this->app->DB->GetInsertID(); + + /** @var SystemConfigModule $systemConfig */ + $systemConfig = $this->app->Container->get('SystemConfigModule'); + $systemConfig->setValue('apiaccount','migratedapiid',$apiId); + + $this->app->erp->FirmendatenSet('api_initkey',''); + $this->app->erp->FirmendatenSet('api_remotedomain',''); + $this->app->erp->FirmendatenSet('api_eventurl',''); + $this->app->erp->FirmendatenSet('api_enable',0); + $this->app->erp->FirmendatenSet('api_cleanutf8',0); + $this->app->erp->FirmendatenSet('api_importwarteschlange',0); + $this->app->erp->FirmendatenSet('api_importwarteschlange_name',''); + $this->app->erp->FirmendatenSet('apiohnehtmlumwandlung',0); + + + $emptyValues = [ + 'api_initkey' => '', + 'api_remotedomain' => '', + 'api_eventurl' => '', + 'api_enable' => 0, + 'api_cleanutf8' => 0, + 'api_importwarteschlange' => 0, + 'api_importwarteschlange_name' => '', + 'apiohnehtmlumwandlung' => 0 + ]; + foreach ($emptyValues as $name => $emptyValue){ + $sql = "UPDATE `firmendaten_werte` SET `wert` = '".$emptyValue. "' WHERE `name` = '".$name."'"; + $this->app->DB->Update($sql); + } + } + } + + private function migrateNewActions() + { + $customActions = $this->getLegacyApiCustomActions(); + if(empty($customActions)) { + return; + } + $group = 'custom'; + $accounts = $this->app->DB->SelectPairs( + 'SELECT `id`, `permissions` FROM `api_account` WHERE `is_legacy` = 1' + ); + $accountsWithPermissions = []; + foreach($accounts as $accountId => $jsonEncodedPermissions) { + $permissionDecoded = json_decode($jsonEncodedPermissions, true)?:[]; + if(!in_array('standard_custom', $permissionDecoded)) { + continue; + } + + $accountsWithPermissions[$accountId] = $permissionDecoded; + } + + $hasAccountPermissionChanged = false; + foreach($customActions as $customAction) { + $permissionKey = 'standard_'.$customAction; + // check if permission exists in table + $result = $this->app->DB->Count("SELECT * FROM `api_permission` WHERE `key` = '$permissionKey'"); + if($result !== 0){ + continue; + } + // if it does not exist, insert it + $this->app->DB->InsertArr('api_permission', 'id', [ + 'key' => $permissionKey, + 'group' => $group + ]); + if(empty($accountsWithPermissions)) { + continue; + } + $hasAccountPermissionChanged = true; + foreach($accountsWithPermissions as $accountId => $permissions) { + $accountsWithPermissions[$accountId][] = $permissionKey; + } + } + + if(!$hasAccountPermissionChanged) { + return; + } + foreach($accountsWithPermissions as $accountId => $permissions) { + $this->app->DB->Update( + sprintf( + "UPDATE `api_account` SET `permissions` = '%s' WHERE `id` = %d", + $this->app->DB->real_escape_string(json_encode($permissions)), $accountId + ) + ); + } + } + + private function migrateApiAccounts() + { + $isMigrated = $this->app->DB->Query("SHOW COLUMNS FROM `api_account` LIKE 'is_legacy'")->num_rows > 0; + if(!$isMigrated){ + $availablePermissions = []; + foreach ($this->getGroupedPermissions() as $group => $permissions) { + $availablePermissions = array_merge($availablePermissions, $permissions); + } + $this->app->erp->CheckColumn('is_legacy', 'tinyint(1)', 'api_account',"DEFAULT '1' NOT NULL"); + $apiAccounts = $this->app->DB->SelectArr('SELECT * FROM `api_account`'); + foreach ($apiAccounts as $apiAccount){ + $this->app->DB->Update( + sprintf( + "UPDATE `api_account` SET `permissions` = '%s' WHERE `id` = %d", + json_encode($availablePermissions), + $apiAccount['id'] + ) + ); + } + $this->app->erp->UpdateColumn('is_legacy', 'tinyint(1)', 'api_account',"DEFAULT '0' NOT NULL"); + } + } + + private function getGroupedPermissions() + { + return [ + 'accounts' => [ + 'standard_accountlist', + 'standard_accountlogin', + 'standard_accountcreate', + 'standard_accountedit', + 'standard_adresseaccountsget', + ], + 'addresses' => [ + 'standard_adressecreate', + 'standard_adresseedit', + 'standard_adresseget', + 'standard_adresselisteget', + 'standard_adressegruppenget', + 'create_address', // /v1/adressen - POST + 'list_addresses', // /v1/adressen - GET + 'view_address', // /v1/adressen/{id:\d+} - GET + 'edit_address', // /v1/adressen/{id:\d+} - PUT + ], + 'address_types' => [ + 'create_address_type', // /v1/adresstyp - POST + 'list_address_types', // /v1/adresstyp - GET + 'view_address_type', // /v1/adresstyp/{id:\d+} - GET + 'edit_address_type', // /v1/adresstyp/{id:\d+} - PUT + ], + 'articles' => [ + 'standard_artikelcreate', + 'standard_artikeledit', + 'standard_artikelget', + 'standard_artikellist', + 'standard_artikelstueckliste', + 'standard_artikelstuecklistecreate', + 'standard_artikelstuecklisteedit', + 'standard_artikelstuecklistelist', + 'standard_artikelkontingenteget', + 'standard_preiseedit', + 'list_articles', // /v1/artikel - GET + 'view_article', // /v1/artikel/{id:\d+} - GET + ], + 'article_categories' => [ + 'standard_artikelkategorienlist', + 'create_article_category', // /v1/artikelkategorien - POST + 'list_article_categories', // /v1/artikelkategorien - GET + 'view_article_category', // /v1/artikelkategorien/{id:\d+} - GET + 'edit_article_category', // /v1/artikelkategorien/{id:\d+} - PUT + ], + 'contacts' => [ + 'standard_ansprechpartnercreate', + 'standard_ansprechpartneredit', + 'standard_adressekontaktcreate', + 'standard_adressekontaktedit', + 'standard_adressekontaktget', + 'standard_adressekontaktlist', + ], + 'countries' => [ + 'create_country', // /v1/laender - POST + 'list_countries', // /v1/laender - GET + 'view_country', // /v1/laender/{id:\d+} - GET + 'edit_country', // /v1/laender/{id:\d+} - PUT + ], + 'credit_memos' => [ + 'standard_gutschriftget', + 'standard_gutschriftedit', + 'standard_gutschriftcreate', + 'standard_gutschriftfreigabe', + 'standard_gutschriftversenden', + 'standard_gutschriftarchivieren', + 'list_credit_memos', // /v1/belege/gutschriften - GET + 'view_credit_memo', // /v1/belege/gutschriften/{id:\d+} - GET + ], + 'crm_documents' => [ + 'create_crm_document', // /v1/crmdokumente - POST + 'list_crm_documents', // /v1/crmdokumente - GET + 'view_crm_document', // /v1/crmdokumente/{id:\d+} - GET + 'edit_crm_document', // /v1/crmdokumente/{id:\d+} - PUT + 'delete_crm_document' // /v1/crmdokumente/{id:\d+} - DELETE + ], + 'delivery_addresses' => [ + 'standard_lieferadressecreate', + 'standard_lieferadresseedit', + 'create_delivery_address', // /v1/lieferadressen - POST + 'list_delivery_addresses', // /v1/lieferadressen - GET + 'view_delivery_address', // /v1/lieferadressen/{id:\d+} - GET + 'edit_delivery_address', // /v1/lieferadressen/{id:\d+} - PUT + 'delete_delivery_address', // /v1/lieferadressen/{id:\d+} - DELETE + ], + 'delivery_note' => [ + 'standard_lieferscheinget', + 'standard_lieferscheinedit', + 'standard_lieferscheincreate', + 'standard_lieferscheinfreigabe', + 'standard_lieferscheinversenden', + 'standard_lieferscheinarchivieren', + 'list_delivery_notes', // /v1/belege/lieferscheine - GET + 'view_delivery_note', // /v1/belege/lieferscheine/{id:\d+} - GET + ], + 'documents' => [ + 'standard_belegelist', + 'standard_belegpdf', + 'standard_belegpdfheader', + 'standard_mappingget', + 'standard_mappingset', + 'list_documents', // /v1/belege - GET + ], + 'document_actions' => [ + 'standard_angebotzuauftrag', + 'standard_auftragzurechnung', + 'standard_weiterfuehrenauftragzurechnung', + 'standard_weiterfuehrenrechnungzugutschrift' + ], + 'files' => [ + 'standard_dateilist', + 'standard_dateivorschau', + 'standard_dateidownload', + 'standard_dateiheader', + 'standard_shopimages', + 'create_file', // /v1/dateien - POST + 'list_files', // /v1/dateien - GET + 'view_file', // /v1/dateien/{id:\d+} - GET + 'handle_assets', // /assets/{assetfile} + ], + 'gobnav' => [ + 'handle_navision' // /v1/gobnavconnect - POST + ], + 'groups' => [ + 'standard_gruppecreate', + 'standard_gruppeedit', + 'standard_gruppeget', + 'standard_gruppenlist', + 'create_group', // /v1/gruppen - POST + 'list_groups', // /v1/gruppen - GET + 'view_group', // /v1/gruppen/{id:\d+} - GET + 'edit_group', // /v1/gruppen/{id:\d+} - PUT + ], + 'invoices' => [ + 'standard_rechnungget', + 'standard_rechnungedit', + 'standard_rechnungcreate', + 'standard_rechnungversenden', + 'standard_rechnungfreigabe', + 'standard_rechnungarchivieren', + 'standard_rechnungversendetmarkieren', + 'standard_rechnungalsbezahltmarkieren', + 'list_invoices', // /v1/belege/rechnungen + 'view_invoice', // /v1/belege/rechnungen/{id:\d+} - GET + 'delete_invoice' // /v1/belege/rechnungen/{id:\d+} - DELETE + ], + 'mobile_app' => [ + 'mobile_app_communication' // /v1/mobileapi/dashboard + ], + 'opentrans' => [ + 'handle_opentrans', // all /opentrans endpoints + ], + 'orders' => [ + 'standard_auftragcreate', + 'standard_auftragedit', + 'standard_auftragget', + 'standard_auftragfreigabe', + 'standard_auftragabschliessen', + 'standard_auftragversenden', + 'standard_auftragarchivieren', + 'list_orders', // /v1/belege/auftraege - GET + 'view_order' // /v1/belege/auftraege/{id:\d+} - GET + ], + 'payment_methods' => [ + 'create_payment_method', // /v1/zahlungsweisen - POST + 'list_payment_methods', // /v1/zahlungsweisen - GET + 'view_payment_method', // /v1/zahlungsweisen/{id:\d+} - GET + 'edit_payment_method', // /v1/zahlungsweisen/{id:\d+} - PUT + ], + 'projects' => [ + 'standard_projektliste', + 'standard_projektget', + 'standard_projektcreate', + 'standard_projektedit', + ], + 'properties' => [ + 'create_property', + 'list_property', + 'view_property', + 'edit_property', + 'delete_property', + ], + 'property_values' => [ + 'create_property_value', + 'list_property_value', + 'view_property_value', + 'edit_property_value', + 'delete_property_value', + ], + 'quotes' => [ + 'standard_angebotcreate', + 'standard_angebotedit', + 'standard_angebotget', + 'standard_angebotfreigabe', + 'standard_angebotversenden', + 'standard_angebotarchivieren', + 'list_quotes', // /v1/belege/angebote - GET + 'view_quote', // /v1/belege/angebote/{id:\d+} - GET + ], + 'reports' => [ + 'standard_exportvorlageget', + 'standard_berichteget', + 'view_report' // /v1/reports/{id:\d+}/download + ], + 'resubmissions' => [ + 'create_resubmission', // /v1/wiedervorlagen - POST + 'list_resubmissions', // /v1/wiedervorlagen - GET + 'view_resubmission', // /v1/wiedervorlagen/{id:\d+} - GET + 'edit_resubmission', // /v1/wiedervorlagen/{id:\d+} - PUT + ], + 'returns' => [ + 'standard_retoureget', + 'standard_retoureedit', + 'standard_retourecreate', + ], + 'scanned_documents' => [ + 'create_scanned_document', // /v1/docscan - POST + 'list_scanned_documents', // /v1/docscan - GET + 'view_scanned_document', // /v1/docscan/{id:\d+} - GET + ], + 'shipping_methods' => [ + 'create_shipping_method', // /v1/versandarten - POST + 'list_shipping_methods', // /v1/versandarten - GET + 'view_shipping_method', // /v1/versandarten/{id:\d+} - GET + 'edit_shipping_method', // /v1/versandarten/{id:\d+} - PUT + ], + 'shop_communication' => [ + 'communicate_with_shop' // all routes with /shopimport + ], + 'storage' => [ + 'view_storage_batch', // /v1/lagercharge - GET + 'view_storage_best_before', // /v1/lagermhd - GET + ], + 'subscriptions' => [ + 'standard_adresseaboartikelcreate', + 'standard_adresseaboartikeledit', + 'standard_adresseaboartikelget', + 'standard_adresseaboartikellist', + 'create_subscription', // /v1/aboartikel - POST + 'list_subscriptions', // v1/aboartikel - GET + 'view_subscription', // /v1/aboartikel/{id:\d+} - GET + 'edit_subscription', // /v1/aboartikel/{id:\d+} - PUT + 'delete_subscription', // /v1/aboartikel/{id:\d+} - DELETE + ], + 'subscription_groups' => [ + 'standard_adresseabogruppecreate', + 'standard_adresseabogruppeedit', + 'standard_adresseabogruppeget', + 'standard_adresseabogruppelist', + 'create_subscription_group', // /v1/abogruppen - POST + 'list_subscription_groups', // /v1/abogruppen - GET + 'view_subscription_group', // /v1/abogruppen/{id:\d+} - GET + 'edit_subscription_group', // /v1/abogruppen/{id:\d+} - PUT + ], + 'supply_orders' => [ + 'standard_bestellungget', + 'standard_bestellungedit', + 'standard_bestellungcreate', + 'standard_bestellungfreigabe', + ], + 'system_settings' => [ + 'standard_etikettendrucker', + 'standard_servertimeget' + ], + 'tax_rates' => [ + 'create_tax_rate', // /v1/steuersaetze - POST + 'list_tax_rates', // /v1/steuersaetze - GET + 'view_tax_rate', // /v1/steuersaetze/{id:\d+} - GET + 'edit_tax_rate', // /v1/steuersaetze/{id:\d+} - PUT + ], + 'employee_interactions' => [ + 'standard_stechuhrstatusget', + 'standard_stechuhrstatusset', + 'standard_stechuhrsummary', + 'standard_zeiterfassungget', + 'standard_zeiterfassungcreate', + 'standard_zeiterfassungedit', + 'standard_zeiterfassungdelete', + 'standard_reisekostenversenden', + 'standard_sessionstart', + 'standard_sessionclose', + ], + 'tracking_numbers' => [ + 'create_tracking_number', // /v1/trackingnummern - POST + 'list_tracking_numbers', // /v1/trackingnummern - GET + 'view_tracking_number', // /v1/trackingnummern/{id:\d+} - GET + 'edit_tracking_number', // /v1/trackingnummern/{id:\d+} - PUT + ], + 'users' => [ + 'standard_benutzercreate', + 'standard_benutzeredit', + 'standard_benutzerget', + 'standard_benutzerlist', + 'standard_benutzergetrfid', + ], + 'custom' => [ + 'standard_custom' + ] + ]; + } + + private function renamePermissions() + { + $hasLegacyPermissions = $this->app->DB->Count("SELECT `id` FROM `api_permission` WHERE `key` LIKE 'legacy_%'") > 0; + if(!$hasLegacyPermissions) { + return; + } + // rename permissions in api_permission table with extra condition if legacy and standard keys exist + $this->app->DB->Delete( + "DELETE `ap1` + FROM `api_permission` AS `ap1` + INNER JOIN `api_permission` AS `ap2` ON ap1.key = replace(ap2.key, 'standard_', 'legacy_') + WHERE ap1.key LIKE 'legacy_%' AND ap2.key LIKE 'standard_%'" + ); + $this->app->DB->Update( + "UPDATE `api_permission` + SET `key` = REPLACE(`key`, 'legacy_', 'standard_') + WHERE `key` LIKE 'legacy_%'" + ); + // rename permissions in api_account + $this->app->DB->Update( + "UPDATE `api_account` SET `permissions` = REPLACE(`permissions`, 'legacy_', 'standard_')" + ); + } + + /** + * @return array + */ + private function getLegacyApiCustomActions() + { + if(!is_file(__DIR__.'/api_custom.php')) { + return []; + } + + /** @var Benutzer $users **/ + $users = $this->app->loadModule('benutzer'); + $permissions = $users->getActionsFromFile(__DIR__.'/api_custom.php'); + if(empty($permissions)) { + return []; + } + + return $permissions; + } + + function fillApiPermissions() + { + foreach ($this->getGroupedPermissions() as $group => $permissions){ + foreach ($permissions as $permission){ + // check if permission exists in table + $result = $this->app->DB->Count("SELECT * FROM `api_permission` WHERE `key` = '$permission'"); + if($result !== 0){ + continue; + } + // if it does not exist, insert it + $this->app->DB->InsertArr('api_permission', 'id', [ + 'key' => $permission, + 'group' => $group + ]); + } + } + } + + /** + * @param int $apiId + */ + public function setApiId($apiId) + { + $this->api_id = $apiId; + } + + function ApiXMLTest(){ + $xml_data = new SimpleXMLExtended(); + $test = array('adresse' => array( 'name' => 'mustermann', 'vorname' => 'max')); + echo $xml_data->asXML(); + echo "stop"; + $this->app->ExitXentral(); + } + + + /** + * returns Projekt ID + * + * @param string $value + * + * @return bool|int + */ + private function getProjektId($value) + { + if($value != ''){ + if($this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$value."' LIMIT 1")){ + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$value."' LIMIT 1"); + } + else if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$value."' LIMIT 1")){ + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$value."' LIMIT 1"); + } + return (int)$projekt; + } + + return false; + } + + /** + * returns Adresse ID + * + * @param string $value + * + * @return bool|int + */ + private function getAdressId($value) + { + if(!empty($value)){ + if(is_numeric($value)) + { + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE id = '".$value."' LIMIT 1"); + } + if(empty($adresse)) + { + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '".$value."' LIMIT 1"); + } + return (int)$adresse; + } + return false; + } + + /** loads email settings from firmendaten + * used in few requests to send documents + * + * @return void + */ + private function getEmailSettings() + { + $benutzername = $this->app->erp->Firmendaten('benutzername'); + $passwort = $this->app->erp->Firmendaten('passwort'); + $host = $this->app->erp->Firmendaten('host'); + $port = $this->app->erp->Firmendaten('port'); + $mailssl = $this->app->erp->Firmendaten('mailssl'); + $mailanstellesmtp = $this->app->erp->Firmendaten('mailanstellesmtp'); + $noauth = $this->app->erp->Firmendaten('noauth'); + + // mail + $this->app->mail = new PHPMailer($this->app); + $this->app->mail->CharSet = 'UTF-8'; + $this->app->mail->PluginDir = 'plugins/phpmailer/'; + + if($mailanstellesmtp == '1'){ + $this->app->mail->IsMail(); + }else{ + $this->app->mail->IsSMTP(); + + if($noauth == '1') { + $this->app->mail->SMTPAuth = false; + } else { + $this->app->mail->SMTPAuth = true; + } + + if($mailssl == 1){ + $this->app->mail->SMTPSecure = 'tls'; // sets the prefix to the servier + } + else if($mailssl == 2){ + $this->app->mail->SMTPSecure = 'ssl'; // sets the prefix to the servier + } + + $this->app->mail->Host = $host; + + $this->app->mail->Port = $port; // set the SMTP port for the GMAIL server + + $this->app->mail->Username = $benutzername; // GMAIL username + $this->app->mail->Password = $passwort; // GMAIL password + } + } + + function ApiServerTimeGet(){ + $this->XMLResponse(1,''.time().''); + $this->app->ExitXentral(); + } + + + + function ApiBenutzerGetRFID() + { + $xmldata = $this->XMLPost(); + if ($xmldata['rfid'] == '') { + $this->XMLResponse(5, "RFID fehlt"); + $this->app->ExitXentral(); + } + $rfid = $this->app->DB->real_escape_string($xmldata['rfid']); + $id = $this->app->DB->Select("SELECT id FROM user WHERE activ=1 AND rfidtag='$rfid' AND rfidtag!='' LIMIT 1"); + if($id > 0){ + $this->XMLResponse(1, $this->app->erp->XMLBenutzer($id)); + } + else{ + $this->XMLResponse(5, 'fehlerhafte RFID'); + } + $this->app->ExitXentral(); + } + + function ApiBenutzerList() + { + $user = $this->app->DB->SelectArr("SELECT id,adresse,rfidtag FROM user WHERE activ = 1"); + if($user) + { + $xmlstr = << + + +XML; + + $_xmlobj = new SimpleXMLExtended($xmlstr); + $items = $_xmlobj->AddChild('items'); + foreach($user as $value){ + $item = $items->AddChild('item'); + foreach($value as $key => $data){ + $item->AddChild($key,$data); + } + } + $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + $this->XMLResponse(1,$xml); + }else{ + $this->XMLResponse(8); + } + $this->app->ExitXentral(); + } + + function ApiStechuhrSummary() + { + $xmldata = $this->XMLPost(); + if ($xmldata['adresse'] == '') { + $this->XMLResponse(5, 'AdresssID fehlt'); + $this->app->ExitXentral(); + } + $id = $xmldata['adresse']; + $jahr = date("Y"); + $aktjahr = (int)date('Y'); + $vorjahr = $jahr-1; + + + $xmlstr = << + + +XML; + + $_xmlobj = new SimpleXMLElement($xmlstr); + $datum = date("Y", time()); + + $mitarbeiterzeiterfassung = $this->app->erp->LoadModul('mitarbeiterzeiterfassung'); + if($mitarbeiterzeiterfassung){ + $ueberstundenwerte = $mitarbeiterzeiterfassung->GetUeberstundenRaw($id); + $urlaub = $mitarbeiterzeiterfassung->GetRestUrlaub($id, date("Y", time()), true); + $mitarbeiterSollstunden = $mitarbeiterzeiterfassung->getSollstundenByAdresse($id); + } + + $items = $_xmlobj->AddChild("mitarbeiter_adresse",$id); + $items->addAttribute('type', 'documentary'); + $_xmlobj->AddChild("ZeitRequest",date("c")); + $_xmlobj->AddChild("UrlaubSoll",$urlaub['soll']); + $_xmlobj->AddChild("UrlaubIst",$urlaub['ist']); + + $_xmlobj->AddChild("UeberstundenMonat",$ueberstundenwerte['aktuell']); + $_xmlobj->AddChild("UeberstundenGesamt",$ueberstundenwerte['gesamt']); + + + $_xmlobj->AddChild("KW", date("N")); + $einzelauflistung = $_xmlobj->AddChild("Einzelauflistung"); + $arbeitswoche = $einzelauflistung->AddChild("Kalenderwoche"); + $kalenderwoche = $arbeitswoche->AddChild("KW",date("W")); + $wochentageKw = $this->wochentageinKW(date("d.m.Y")); + + + foreach($wochentageKw as $wochentag){ + // Hier brauch ich einfach die entsprechende Soll/Ist Arbeitszeit für den übergebenden Tag + $arbeitszeitensummary['sollaz'] = round($mitarbeiterSollstunden[$this->app->String->Convert($wochentag,'%1.%2.%3','%3-%2-%1')]['soll'] / 60,2); + $arbeitszeitensummary['istaz'] = round($mitarbeiterSollstunden[$this->app->String->Convert($wochentag,'%1.%2.%3','%3-%2-%1')]['ist'] / 60,2) ; + $arbeitszeiten = $arbeitswoche->AddChild("Arbeitstag"); + $arbeitszeiten->AddChild("Datum",$wochentag); + $arbeitszeiten->AddChild("ArbeitszeitSoll",$arbeitszeitensummary['sollaz']); + $arbeitszeiten->AddChild("ArbeitszeitIst",$arbeitszeitensummary['istaz']); + $arbeitsevents = $arbeitszeiten->AddChild("ArbeitsEvents"); + $status = $this->app->DB->SelectArr("Select status, TIME_FORMAT(datum,'%H:%i') as zeit from stechuhr where DATE_FORMAT(datum,'%d.%m.%Y')= '$wochentag' AND adresse = '$id' order by datum asc"); + foreach($status as $item){ + $arbeitsevent = $arbeitsevents->AddChild("Event"); + $arbeitseventtyp = $arbeitsevent->AddChild("typ", $item['status']); + $arbeitseventzeit = $arbeitsevent->AddChild("zeit", $item['zeit']); + + } + } + $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + $this->XMLResponse(1,$xml); + $this->app->ExitXentral(); + } + + + /** + * @param string $datumvalue + * + * @return mixed + */ + public function wochentageinKW($datumvalue){ + //aktueller Wochentag im Format d.m.Y in der KW + $basis = 7; // wochentage + $datum = new DateTime($datumvalue); + $wochentag = $datum->format("N"); + $datumBefore = new DateTime($datumvalue); + $datumAfter = new DateTime($datumvalue); + $tage[$wochentag] = $datum->format("d.m.Y"); + if($wochentag > 1) { + $counter = $wochentag - 1; + while ($counter > 0 ) { + $datumBefore->modify('-1 days'); + $tage[$counter] = $datumBefore->format("d.m.Y"); + $counter--; + } + } + $counter = $wochentag + 1; + while($counter <= $basis){ + $datumAfter->modify('+1 days'); + $tage[$counter] = $datumAfter->format("d.m.Y"); + $counter++; + } + ksort($tage); + + return $tage; + } + + + public function ApiStechuhrStatusGet() + { + + $xmldata = $this->XMLPost(); + if ($xmldata['adresse'] == '') { + $this->XMLResponse(5, "AdresssID fehlt"); + $this->app->ExitXentral(); + } + $adresse = $xmldata['adresse']; + $user = $xmldata['user']; + $status = $this->app->DB->SelectRow("Select status, REPLACE(REPLACE(ROUND(TIMESTAMPDIFF(MINUTE,datum,now()) / 60, 2),'-',''),'.','.') as seit,TIMESTAMPDIFF(HOUR,datum,now()) as dd, kommen from stechuhr where adresse = ".$adresse." order by datum desc limit 1"); + + $xmlstr = << + + +XML; + + $_xmlobj = new SimpleXMLElement($xmlstr); + $_xmlobj->AddChild("status",$status['status']); + $_xmlobj->AddChild("seit",$status['seit']); + $_xmlobj->AddChild("dd",$status['dd']); + $_xmlobj->AddChild("kommen",$status['kommen']); + $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + $this->XMLResponse(1,$xml); + + $this->app->ExitXentral(); + } + + function ApiStechuhrStatusSet() + { + + $xmldata = $this->XMLPost(); + if ($xmldata['cmd'] == '') { + $this->XMLResponse(5, "CMD fehlt"); + $this->app->ExitXentral(); + } + $cmd = $xmldata['cmd']; + $user = (int)$xmldata['user']; + if($user){ + $user = $this->app->DB->Select("SELECT id FROM user WHERE id='$user' and activ = '1' LIMIT 0,1"); + } + + if(!$user){ + $adresse = (int)$xmldata['adresse']; + if($adresse) { + $user = $this->app->DB->Select("SELECT id FROM user WHERE adresse='$adresse' and activ = '1' LIMIT 0,1"); + } + if(!$user){ + $this->XMLResponse(5, "Userid oder Adressid fehlerhaft"); + $this->app->ExitXentral(); + } + }else{ + $adresse = $this->app->DB->Select("SELECT adresse FROM user where id='$user' LIMIT 0,1"); + } + +// if($user == ''){ +// $user = $this->app->DB->Select("SELECT id FROM user WHERE adresese='$adresse' AND ") +// } + // wir schauen uns denn aktuellen status an um zu prüfen welche Set Meldungen möglich sind + $currentstatus = $this->app->DB->Select("Select status from stechuhr where adresse = ".$adresse." order by datum desc limit 1"); + + if($currentstatus === 'gehen'){ + // es darf nur der Status 'kommen' funktionieren + if($cmd !== 'kommen'){ + $this->XMLResponse(5, "Fehlerhafter Status wird uebergeben. Es darf aktuell nur der Status \"kommen\" übergeben werden."); + } + } + + if($currentstatus === 'kommen'){ + // es darf nur der Status 'gehen' und 'pausestart' funktionieren + if( ($cmd !== 'gehen') && ($cmd !== 'pausestart') ){ + $this->XMLResponse(5, "Fehlerhafter Status wird uebergeben. Es darf aktuell nur der Status \"gehen\" und \"pausestart\" übergeben werden."); + } + + } + + if($currentstatus === 'pausestart'){ + // es darf nur der Status 'gehen' und 'pausestart' funktionieren + if($cmd !== 'pausestop'){ + $this->XMLResponse(5, "Fehlerhafter Status wird uebergeben. Es darf aktuell nur der Status \"pausestop\" übergeben werden."); + } + } + + + $kommen = 1; + if($cmd==='pause' || $cmd==='pausestart' || $cmd==='gehen') { + $kommen=0; + } + $status = ''; + switch($cmd) + { + case 'pausestart': + case 'pausestop': + case 'kommen': + case 'gehen': + $status = $cmd; + break; + + } + if($status || $cmd === 'arbeit' || $cmd === 'pause') + { + $alterstatus = $this->app->DB->SelectArr("Select status, datum as seit, kommen from stechuhr where adresse = ".$adresse." order by datum desc limit 1"); + if($alterstatus) + { + $seit = $alterstatus[0]['seit']; + $altkommen = $alterstatus[0]['kommen']; + $alterstatus = $alterstatus[0]['status']; + } + if((!$alterstatus && $status === 'kommen') || + (!$alterstatus && $status === 'gehen') || + ($alterstatus === 'kommen' && $status !== 'kommen') || + ($alterstatus === 'gehen' && $status === 'kommen') || + ($alterstatus === 'pausestart' && $status === 'pausestop') || + ($alterstatus === 'pausestop' && $status === 'pausestart') || + ($alterstatus === 'pausestop' && $status === 'gehen') || + ($alterstatus === 'pausestart' && $status === 'gehen') || + ($cmd === 'arbeit') || + ($cmd === 'pause') + ) + { + if(!(!$status && $alterstatus && $altkommen == 1 && $kommen == 0 ) || $cmd === 'arbeit' || $cmd === 'pause') + { + if($status == '' && $kommen == 1 && $alterstatus === 'pausestart') { + $status = 'pausestop'; + } + if(($alterstatus === false || $alterstatus === 'gehen')&& $kommen == 1 && $status == '') { + $status = 'kommen'; + } + + $this->app->DB->Insert("INSERT INTO stechuhr (adresse,user,datum,kommen, status) + VALUES ('".$adresse."','".$user."',NOW(),'".$kommen."','".($status)."')"); + $insid = $this->app->DB->GetInsertID(); + } + } + } + $this->XMLResponse(1); + } + + function ApiProjektCreate() { + $xmldata = $this->XMLPost(); + if (($xmldata['name'] == '') || ($xmldata['abkuerzung'] == '')) { + $this->XMLResponse(5, "Name und/oder Abkürzung fehlt"); + $this->app->ExitXentral(); + } + + $name = $this->app->DB->real_escape_string($xmldata['name']); + $abkuerzung = $this->app->DB->real_escape_string($xmldata['abkuerzung']); + + //prüfen ob es die abkuerzung schon gibt + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($xmldata['abkuerzung'])."' LIMIT 1"); + if($projekt){ + $this->XMLResponse(5, "Abkürzung schon vorhanden. Bitte eine andere wählen."); + $this->app->ExitXentral(); + } + $this->app->DB->Insert("INSERT INTO projekt (id,name,abkuerzung) VALUES ('','".$name."','".$abkuerzung."')"); + + $xmldata['id'] = $this->app->DB->GetInsertID(); + + $this->ApiProjektEdit(true,$xmldata); + $this->XMLResponse(1, "".$xmldata['id'].""); + $this->app->ExitXentral(); + } + + public function ApiProjektEdit($internal=false,$data='') { + $xmldata = $this->XMLPost(); + if ($internal){ + $xmldata = $data; + $id = $this->app->DB->real_escape_string($xmldata['id']); + }else{ + if( $this->app->DB->real_escape_string($xmldata['id'] =='') && $this->app->DB->real_escape_string($xmldata['projekt'] == '') ){ + $this->XMLResponse(5,'ID oder Projekt muss gesetzt sein'); + } + if($xmldata['id'] != ''){ + $id = $this->app->DB->real_escape_string($xmldata['id']); + }else { + $id = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '" . $this->app->DB->real_escape_string($xmldata['projekt']) . "' LIMIT 1"); + } + } + if($id == ''){ + $this->XMLResponse(5,'falsche ID oder Projektkennung'); + } + + + unset($xmldata['id']); + unset($xmldata['projekt']); + + foreach ($xmldata as $key => $value) { + $insertKey = $this->app->DB->real_escape_string($key); + $insertValue = $this->app->DB->real_escape_string($value); + $this->app->DB->Update("UPDATE projekt SET $insertKey='".$insertValue."' WHERE id='$id' LIMIT 1"); + } + if($internal){ + return; + } + $this->XMLResponse(1); + + $this->app->ExitXentral(); + } + function ApiProjektListe() + { + $xml = $this->XMLPost(); + + $where = "geloescht <> 1"; + $offset = 0; + $limit = 1000000; + if(!empty($xml['offset'])) { + $offset = (int)$xml['offset']; + } + if($offset < 0) { + $offset = 0; + } + if(!empty($xml['limit'])) { + $limit = (int)$xml['limit']; + } + if($limit <= 0) { + $limit = 1; + } + + $xml_obj = $this->CreateXmlObj(); + $projekte = $this->app->DB->SelectArr("SELECT * FROM projekt WHERE $where ORDER by abkuerzung LIMIT $offset, $limit"); + if($projekte) + { + $this->AddToXMLObj($xml_obj, 'projekt', 'projekte',$projekte); + } + $this->XMLResponse(1,$xml_obj, true, false); + $this->app->ExitXentral(); + } + + function ApiProjektGet() + { + $xml = $this->XMLPost(); + $where = "geloescht <> 1"; + $offset = 0; + $limit = 1000000; + if(!empty($xml['offset']))$offset = (int)$xml['offset']; + if($offset < 0)$offset = 0; + if(!empty($xml['limit']))$limit = (int)$xml['limit']; + if($limit <= 0)$limit = 1; + if(!empty($xml['projekt'])) + { + if($this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$xml['projekt']."' LIMIT 1")){ + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$xml['projekt']."' LIMIT 1"); + } + if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$xml['projekt']."' LIMIT 1")){ + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$xml['projekt']."' LIMIT 1"); + } + $where .= " AND projekt = '".((int)$xml['projekt'])."' "; + }elseif(!empty($xml['abkuerzung'])) + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($xml['abkuerzung'])."' LIMIT 1"); + $where .= " AND projekt = '".(int)$projekt."' "; + } + $xml_obj = $this->CreateXmlObj(); + $projekte = $this->app->DB->SelectArr("SELECT p.* , '' as arbeitspakete FROM projekt p WHERE id = '$projekt' LIMIT 1"); + $this->AddToXMLObj($xml_obj, 'projekt', '',$projekte); + $arbeitspakete = $this->app->DB->SelectArr("SELECT * FROM arbeitspaket WHERE $where LIMIT $offset, $limit"); + if($arbeitspakete) + { + $this->AddToXMLObj($xml_obj, 'arbeitspaket', '',$arbeitspakete, $xml_obj->xml->projekt->arbeitspakete); + } + $this->XMLResponse(1,$xml_obj, true, false); + $this->app->ExitXentral(); + } + + + function ApiAnsprechpartnerCreate(){ + $xmldata = $this->XMLPost(); + + if (($xmldata['name'] == '') || ($xmldata['adresse'] == '')) { + $this->XMLResponse(5, "AdresseId oder Name fehlt"); + $this->app->ExitXentral(); + } + $newId = $this->app->erp->CreateAnsprechpartner($xmldata['adresse'],$xmldata); + $this->XMLResponse(1,"$newId"); + $this->app->ExitXentral(); + } + + function ApiAnsprechpartnerEdit(){ + $xmldata = $this->XMLPost(); + if ($xmldata['id'] == '') { + $this->XMLResponse(5, "AnsprechpartnerId fehlt"); + $this->app->ExitXentral(); + } + + $id = $xmldata['id']; + unset($xmldata['id']); + + foreach ($xmldata as $key => $value) { + $insertKey = $this->app->DB->real_escape_string($key); + $insertValue = $this->app->DB->real_escape_string($value); + + $this->app->DB->Update("UPDATE ansprechpartner SET $insertKey='".$insertValue."' WHERE id='$id' LIMIT 1"); + } + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + function ApiLieferadresseCreate(){ + $xmldata = $this->XMLPost(); + + if (($xmldata['name'] == '') || ($xmldata['adresse'] == '')) { + $this->XMLResponse(5, "AdresseId oder Name fehlt"); + $this->app->ExitXentral(); + } + $newId = $this->app->erp->CreateLieferadresse($xmldata['adresse'],$xmldata); + $this->XMLResponse(1,"$newId"); + $this->app->ExitXentral(); + } + + function ApiLieferadresseEdit(){ + $xmldata = $this->XMLPost(); + if ($xmldata['id'] == '') { + $this->XMLResponse(5, "LieferadresseId fehlt"); + $this->app->ExitXentral(); + } + + $id = $xmldata['id']; + unset($xmldata['id']); + + foreach ($xmldata as $key => $value) { + $insertKey = $this->app->DB->real_escape_string($key); + $insertValue = $this->app->DB->real_escape_string($value); + + $this->app->DB->Update("UPDATE lieferadressen SET $insertKey='".$insertValue."' WHERE id='$id' LIMIT 1"); + } + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + + function ApiAdresseAboArtikelCreate(){ + $xmldata = $this->XMLPost(); + + + $this->app->DB->Insert("INSERT INTO abrechnungsartikel (id,bezeichnung) + VALUES ('','NEUANLAGE')"); + + $xmldata['id'] = $this->app->DB->GetInsertID(); + $xmldata['neu'] = "true"; + $this->ApiAdresseAboArtikelEdit($xmldata); + $this->app->ExitXentral(); + } + + function ApiAdresseAboArtikelEdit($xmldata = false){ + + + // prüfen auf Mindestfelder + if($xmldata['neu'] != '') { + if (($xmldata['artikel'] == '') || ($xmldata['adresse'] == '')) { + $this->XMLResponse(5, "ArtikelId oder AdresseId fehlt"); + $this->app->ExitXentral(); + } + if (($xmldata['menge'] == '') || ($xmldata['menge'] == '0')) { + $this->XMLResponse(5, "Menge fehlt oder ist 0"); + $this->app->ExitXentral(); + } + $id = $xmldata['id']; + $adresse = $this->app->DB->real_escape_string($xmldata['adresse']); + }else{ + $xmldata = $this->XMLPost(); + if($xmldata['id'] == ''){ + $this->XMLResponse(5, "ID fehlt oder ist 0"); + $this->app->ExitXentral(); + } + $id = $xmldata['id']; + $adresse = $this->app->DB->Select("SELECT adresse FROM abrechnungsartikel WHERE id = '" . $id . "' LIMIT 1"); + } + + $artikel = $this->app->DB->real_escape_string($xmldata['artikel']); + $bezeichnung = $this->app->DB->real_escape_string($xmldata['bezeichnung']); + $nummer = $this->app->DB->real_escape_string($xmldata['nummer']); + + + if($xmldata['neu'] != '') { + if ($xmldata['angelegtamdatum'] == "") $angelegtamdatum = $this->app->String->Convert(date("d.m.Y"), '%1.%2.%3', '%3-%2-%1'); + // Feldvalidierung + if (!preg_match("(^abo$|^monat$|^monatx$|^jahr$|^wochen$|^einmalig$|^30tage$)", $xmldata['preisart'])) { + $this->XMLResponse(5, "fehlerhaftes Feld preisart => (abo|monat|monatx|jahr|wochen|einmalig)"); + $this->app->ExitXentral(); + } + if (!preg_match("(^rechnung$|^auftrag$)", $xmldata['dokument'])) { + $this->XMLResponse(5, "fehlerhaftes Feld dokument => (rechnung|auftrag)"); + $this->app->ExitXentral(); + } + } + if($xmldata['neu'] != '') { + //prüfen ob die ArtikelId auch ein Artikel ist + if ($this->app->DB->Select("SELECT id FROM artikel WHERE id = '" . $artikel . "' LIMIT 1")) { + $artikeldata = $this->app->DB->SelectArr("SELECT id,name_de,nummer FROM artikel WHERE id = '" . $artikel . "' LIMIT 1"); + } elseif ($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '" . $artikel . "' LIMIT 1")) { + $artikeldata = $this->app->DB->SelectArr("SELECT id,name_de,nummer FROM artikel WHERE nummer = '" . $artikel . "' LIMIT 1"); + } else { + $this->XMLResponse(5, "fehlerhafte ArtikelId"); + $this->app->ExitXentral(); + } + $sql['artikel'] = $artikeldata[0]['id']; + $sql['nummer'] = $artikeldata[0]['nummer']; + if ($xmldata['bezeichnung'] == "") { + // wir nehmen die Bezeichnung des Stammartikel + $sql['bezeichnung'] = $artikeldata[0]['name_de']; + } else { + $sql['bezeichnung'] = $xmldata['bezeichnung']; + } + }else{ + if($xmldata['bezeichnung'] != '') { + $sql['bezeichnung'] = $this->app->DB->real_escape_string($xmldata['bezeichnung']); + } + } + + if($xmldata['menge'] != '') { $sql['menge'] = $this->app->DB->real_escape_string($xmldata['menge']); } + if($xmldata['preis'] != '') { $sql['preis'] = str_replace(',','.',$this->app->DB->real_escape_string($xmldata['preis'])); } + if($xmldata['preisart'] != '') { $sql['preisart'] = $this->app->DB->real_escape_string($xmldata['preisart']); } + if($xmldata['sort'] != '') { $sql['sort'] = $this->app->DB->real_escape_string($xmldata['sort']); } + if($xmldata['lieferdatum'] != '') { $sql['lieferdatum'] = $this->app->DB->real_escape_string($xmldata['lieferdatum']); } + if($xmldata['neu'] != '') { + if ($angelegtamdatum != '') { $sql['angelegtam'] = $angelegtamdatum; } + } + if($xmldata['angelegtvon'] != '') { $sql['angelegtvon'] = $this->app->DB->real_escape_string($xmldata['angelegtvon']); } + if($xmldata['status'] != '') { $sql['status'] = $this->app->DB->real_escape_string($xmldata['status']); } + if($xmldata['projekt'] != '') { $sql['projekt'] = $this->app->DB->real_escape_string($xmldata['projekt']); } + if($xmldata['wiederholend'] != '') { $sql['wiederholend'] = $this->app->DB->real_escape_string($xmldata['wiederholend']); } + if($xmldata['zahlzyklus'] != '') { $sql['zahlzyklus'] = $this->app->DB->real_escape_string($xmldata['zahlzyklus']); } + if($xmldata['adresse'] != '') { $sql['adresse'] = $this->app->DB->real_escape_string($xmldata['adresse']); } + + if($xmldata['gruppe'] != '') { + $sql['gruppe'] = $this->app->DB->real_escape_string($xmldata['gruppe']); + } else { + // wir holen die erste Gruppe sofern es eine gibt + $sql['gruppe'] = $this->app->DB->Select("SELECT id FROM abrechnungsartikel_gruppe WHERE adresse = '" . $adresse . "' ORDER BY id LIMIT 1"); + + } + if($xmldata['dokument'] != '') { $sql['dokument'] = $this->app->DB->real_escape_string($xmldata['dokument']); } + if($xmldata['neu'] != '') { + if ($xmldata['waehrung'] != '') { + $sql['waehrung'] = $this->app->DB->real_escape_string($xmldata['waehrung']); + }else{ + $sql['waehrung'] = "EUR"; + } + } + + if($xmldata['startdatum'] != '') { $sql['startdatum'] = $this->app->String->Convert($xmldata['startdatum'],'%1.%2.%3','%3-%2-%1'); } + if($xmldata['enddatum'] != '') { $sql['enddatum'] = $this->app->String->Convert($xmldata['enddatum'],'%1.%2.%3','%3-%2-%1'); } + if($xmldata['abgerechnetbis'] != '') { $sql['abgerechnetbis'] = $this->app->String->Convert($xmldata['abgerechnetbis'],'%1.%2.%3','%3-%2-%1'); } + + // wir aktualisieren + foreach($sql as $key => $value) { + if(is_array($value)) { + $value = ''; + } + $this->app->DB->Update("UPDATE abrechnungsartikel SET $key='$value' WHERE id='$id' LIMIT 1"); + } + + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + function ApiAdresseAboArtikelGet($intern = false){ + $id = $this->app->Secure->GetGET("id"); + $adresse = $this->app->Secure->GetGET("adresse"); + $projekt = $this->app->Secure->GetGET("projekt"); + $xmldata = $this->XMLPost(); + + if($id=="")$id = $xmldata['id']; + if($adresse=="")$adresse = $xmldata['adresse']; + if($projekt=="")$projekt = $xmldata['projekt']; + + + if( ($id!="") && ($adresse!="") ) + { + if($projekt!="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); + $ArtikelDaten = $this->app->DB->SelectArr("SELECT id, bezeichnung, nummer, angelegtam, abgerechnetbis, enddatum, preis, rabatt, waehrung, menge, preisart, gruppe FROM abrechnungsartikel WHERE id='".$this->app->DB->real_escape_string($id)."' AND adresse='".$this->app->DB->real_escape_string($adresse)."' AND projekt='".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); + } else { + $ArtikelDaten = $this->app->DB->SelectArr("SELECT id, bezeichnung, nummer, angelegtam, abgerechnetbis, enddatum, preis, rabatt, waehrung, menge, preisart, gruppe FROM abrechnungsartikel WHERE id='".$this->app->DB->real_escape_string($id)."' AND adresse='".$this->app->DB->real_escape_string($adresse)."' LIMIT 1"); + } + } + //check + $id = $this->app->DB->Select("SELECT id FROM abrechnungsartikel WHERE id='".$this->app->DB->real_escape_string($id)."'AND adresse='".$this->app->DB->real_escape_string($adresse)."' LIMIT 1"); + + if($id > 0) + { + $xmlstr = << + + +XML; + $_xmlobj = new SimpleXMLExtended($xmlstr); +// $xmlobj = $_xmlobj->AddChild("xml"); + foreach($ArtikelDaten[0] as $key => $value){ + $_xmlobj->AddChild($key,$value); + } + $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + unset($_xmlobj); + $this->XMLResponse(1, $out); + } + else + { + if($intern) { + return false; + } + $this->XMLResponse(5); + } + $this->app->ExitXentral(); + } + + function ApiAdresseAboArtikelList($intern = false){ + $adresse = $this->app->Secure->GetGET("adresse"); + $projekt = $this->app->Secure->GetGET("projekt"); + $xmldata = $this->XMLPost(); + + if($adresse=="")$adresse = $xmldata['adresse']; + if($projekt=="")$projekt = $xmldata['projekt']; + + + if($adresse!="") + { + if($projekt!="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); + $gruppeArtikelDaten = $this->app->DB->SelectArr("SELECT id, bezeichnung, nummer, angelegtam, abgerechnetbis, enddatum, preis, rabatt, waehrung, menge, preisart, gruppe FROM abrechnungsartikel WHERE adresse='".$this->app->DB->real_escape_string($adresse)."' AND projekt='".$this->app->DB->real_escape_string($projekt)."'"); + } else { + $gruppeArtikelDaten = $this->app->DB->SelectArr("SELECT id, bezeichnung, nummer, angelegtam, abgerechnetbis, enddatum, preis, rabatt, waehrung, menge, preisart, gruppe FROM abrechnungsartikel WHERE adresse='".$this->app->DB->real_escape_string($adresse)."'"); + } + } + + //check + $id = $this->app->DB->Select("SELECT id FROM abrechnungsartikel WHERE adresse='".$this->app->DB->real_escape_string($adresse)."' LIMIT 1"); + + if($id > 0) + { + $xmlstr = << + + +XML; + $_xmlobj = new SimpleXMLExtended($xmlstr); + $items = $_xmlobj->AddChild("items"); + foreach($gruppeArtikelDaten as $value){ + $item = $items->AddChild("item"); + foreach($value as $key => $data){ + $item->AddChild($key,$data); + } + } + $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + unset($_xmlobj); + $this->XMLResponse(1, $out); + } + else + { + if($intern)return false; + $this->XMLResponse(5); + } + $this->app->ExitXentral(); + } + + function ApiAdresseAboGruppeCreate(){ + $xmldata = $this->XMLPost(); + // prüfen auf Mindestfelder + if( (!$xmldata['adresse']) || (!$xmldata['beschreibung']) ){ + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + $id = $this->app->DB->real_escape_string($xmldata['adresse']); + $beschreibung = $this->app->DB->real_escape_string($xmldata['beschreibung']); + $beschreibung2 = $this->app->DB->real_escape_string($xmldata['beschreibung2']); + $ansprechpartner = $this->app->DB->real_escape_string($xmldata['ansprechpartner']); + $extrarechnung = $this->app->DB->real_escape_string($xmldata['extrarechnung']); + $projekt = $this->app->DB->real_escape_string($xmldata['projekt']); + + + //prüfen wenn Projekt als Id übergeben wird ob es diese gibt + if($this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$projekt."' LIMIT 1")){ + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$projekt."' LIMIT 1"); + }elseif($this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$projekt."' LIMIT 1")){ + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$projekt."' LIMIT 1"); + } else{ + $projekt = ''; + } + + $sort = $this->app->DB->real_escape_string($xmldata['sort']); + $gruppensumme = $this->app->DB->real_escape_string($xmldata['gruppensumme']); + $rechnungadresse = $this->app->DB->real_escape_string($xmldata['rechnungadresse']); + + + $this->app->DB->Insert("INSERT INTO abrechnungsartikel_gruppe (id,beschreibung,beschreibung2,ansprechpartner,extrarechnung,projekt,adresse,sort,gruppensumme,rechnungadresse) + VALUES ( + '', + '$beschreibung', + '$beschreibung2', + '$ansprechpartner', + '$extrarechnung', + '$projekt', + '$id', + '$sort', + '$gruppensumme', + '$rechnungadresse' + ) "); + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + function ApiAdresseAboGruppeEdit(){ + + $xmldata = $this->XMLPost(); + // prüfen auf Mindestfelder + if(!$xmldata['id']){ + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + $projekt = $xmldata['projekt']; + + if($projectId = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$projekt."' LIMIT 1")){ + $xmldata['projekt'] = $projectId; + }elseif($projectId = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$projekt."' LIMIT 1")){ + $xmldata['projekt'] = $projectId; + } else{ + $xmldata['projekt'] = ''; + } + + $id = $xmldata['id']; + foreach($xmldata as $key=>$value) + { + if(is_array($value)) { + $value=''; + } + if($key!=="id"){ + $insertKey = $this->app->DB->real_escape_string($key); + $insertValue = $this->app->DB->real_escape_string($value); + $this->app->DB->Update("UPDATE abrechnungsartikel_gruppe SET $insertKey='$insertValue' WHERE id='$id' LIMIT 1"); + } + } + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + function ApiAdresseAboGruppeGet($intern = false){ + $id = $this->app->Secure->GetGET("id"); + $xmldata = $this->XMLPost(); + if($id=="")$id = $xmldata['id']; + + //check + $id = $this->app->DB->Select("SELECT id FROM abrechnungsartikel_gruppe WHERE id='".$this->app->DB->real_escape_string($id)."' LIMIT 1"); + if($id > 0) + { + $gruppeDaten = $this->app->DB->SelectArr("SELECT id, beschreibung, ansprechpartner, extrarechnung, gruppensumme, adresse, projekt, sort, rechnungadresse FROM abrechnungsartikel_gruppe WHERE id='".$this->app->DB->real_escape_string($id)."' LIMIT 1"); + + $xmlstr = << + + +XML; + $_xmlobj = new SimpleXMLExtended($xmlstr); +// $xmlobj = $_xmlobj->AddChild("xml"); + foreach($gruppeDaten[0] as $key => $value){ + $_xmlobj->AddChild($key,$value); + } + $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + unset($_xmlobj); + $this->XMLResponse(1, $out); + } + else + { + if($intern) { + return false; + } + $this->XMLResponse(5); + } + $this->app->ExitXentral(); + } + + function ApiAdresseAboGruppeList($intern = false){ + $adresse = $this->app->Secure->GetGET("adresse"); + $projekt = $this->app->Secure->GetGET("projekt"); + $xmldata = $this->XMLPost(); + + if($adresse=="")$adresse = $xmldata['adresse']; + if($projekt=="")$projekt = $xmldata['projekt']; + + + if($adresse!="") + { + if($projekt!="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); + $gruppeListDaten = $this->app->DB->SelectArr("SELECT id, beschreibung, ansprechpartner, extrarechnung, gruppensumme, adresse, projekt, sort, rechnungadresse FROM abrechnungsartikel_gruppe WHERE adresse='".$this->app->DB->real_escape_string($adresse)."' AND projekt='".$this->app->DB->real_escape_string($projekt)."'"); + } else { + $gruppeListDaten = $this->app->DB->SelectArr("SELECT id, beschreibung, ansprechpartner, extrarechnung, gruppensumme, adresse, projekt, sort, rechnungadresse FROM abrechnungsartikel_gruppe WHERE adresse='".$this->app->DB->real_escape_string($adresse)."'"); + } + } + + //check + $id = $this->app->DB->Select("SELECT id FROM abrechnungsartikel_gruppe WHERE adresse='".$this->app->DB->real_escape_string($adresse)."' LIMIT 1"); + + if($id > 0) + { + $xmlstr = << + + +XML; + $_xmlobj = new SimpleXMLExtended($xmlstr); + $items = $_xmlobj->AddChild("items"); + foreach($gruppeListDaten as $value){ + $item = $items->AddChild("item"); + foreach($value as $key => $data){ + $item->AddChild($key,$data); + } + } + $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + unset($_xmlobj); + $this->XMLResponse(1, $out); + } + else + { + if($intern) { + return false; + } + $this->XMLResponse(5); + } + $this->app->ExitXentral(); + } + + function ApiArtikelStuecklisteCreate() + { + + $xml = $this->XMLPost(); + if(isset($xml['stuecklistevonartikel']) && (isset($xml['items']) || isset($xml['item']))) + { + $projekt = isset($xml['projekt'])?$xml['projekt']:''; + if($projekt) + { + if(!(is_numeric($projekt) && $this->app->DB->Select("SELECT id FROM projekt WHERE id = '".$projekt."' LIMIT 1"))) + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($projekt)."' LIMIT 1"); + } + } + $stuecklistevonartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht = 0 AND nummer = '".$this->app->DB->real_escape_string($xml['stuecklistevonartikel'])."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); + if($stuecklistevonartikel) + { + if(!isset($xml['items']))$xml['items'][0] = $xml['item']; + if(is_array($xml['items'])) + { + //alle bisherigen stuecklistenelemente des artikels loeschen + $this->app->DB->Update("UPDATE artikel SET stueckliste = 0 WHERE id = '$stuecklistevonartikel'"); + $this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel = '$stuecklistevonartikel'"); + + //baut gleiche arraystruktur wenn nur 1 artikel uebergeben wird + if(isset($xml['items']['item']['art'])){ + $arrayfuer1artikel = $xml['items']['item']; + $xml['items']['item'] = array(); + $xml['items']['item'][] = $arrayfuer1artikel; + } + + foreach($xml['items'] as $items => $item) + { + foreach($item as $key => $itemwerte) + { + $stuecklistenartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht = 0 AND nummer = '".$itemwerte['nummer']."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); + $stuecklisteitem = $this->app->DB->Select("SELECT id FROM stueckliste WHERE stuecklistevonartikel = '$stuecklistevonartikel' AND artikel = '$stuecklistenartikel' LIMIT 1"); + + if($stuecklisteitem){ + // update, id ist in $stuecklisteitem + } else { + // insert danach update + $this->app->DB->Insert("INSERT INTO stueckliste (id,artikel,stuecklistevonartikel) VALUES('','$stuecklistenartikel','$stuecklistevonartikel')"); + $stuecklisteitem = $this->app->DB->GetInsertID(); + } + + if($itemwerte['alternative'] != ''){ + $itemwerte['alternative'] = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht = 0 AND nummer = '".$itemwerte['alternative']."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); + } + + if(is_array($itemwerte)){ + foreach($itemwerte as $itemindex=>$itemwert){ + $this->app->DB->Update("UPDATE stueckliste SET $itemindex = '$itemwert' where id = '$stuecklisteitem'"); + } + } + } + } + $this->app->DB->Update("UPDATE artikel SET stueckliste = 1 WHERE id = '$stuecklistevonartikel' LIMIT 1"); + $this->ApiArtikelStuecklisteList($stuecklistevonartikel); + $this->app->ExitXentral(); + } + }else{ + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + }else{ + $this->XMLResponse(4); + $this->app->ExitXentral(); + } + } + + function ApiArtikelStuecklisteEdit($id = null, $intern = false) + { + if(!$id)$id = $this->app->Secure->GetGET("id"); + $this->ApiArtikelStuecklisteCreate(); + + } + + function ApiArtikelStuecklisteList($id = null, $intern = false) + { + if(!$id)$id = $this->app->Secure->GetGET("id"); + $xml = $this->XMLPost(); + if(!$id){ + $id= $xml['id']; + } + if($id == ''){ + $this->XMLResponse(5,"Fehlerhafte Artikelnummer"); + } + if(($id && $sl = $this->app->DB->SelectArr("SELECT s.id, s.stuecklistevonartikel, art.nummer as stuecklistevonartikelnummer, trim(s.menge)+0 as menge, s.art, + art2.nummer as artikelnummer, art3.nummer as alternativenummer,s.alternative + FROM stueckliste s + INNER JOIN artikel art ON art.id = s.stuecklistevonartikel + INNER JOIN artikel art2 ON art2.id = s.artikel + LEFT JOIN artikel art3 ON art3.id = s.alternative + WHERE s.stuecklistevonartikel = '$id'")) + || (isset($xml['stuecklistevonartikel']) && $sl = $this->app->DB->SelectArr("SELECT s.id, s.stuecklistevonartikel, art.nummer as stuecklistevonartikelnummer, trim(s.menge)+0 as menge, s.art, + art2.nummer as artikelnummer, art3.nummer as alternativenummer,s.alternative + FROM stueckliste s + INNER JOIN artikel art ON art.id = s.stuecklistevonartikel + INNER JOIN artikel art2 ON art2.id = s.artikel + LEFT JOIN artikel art3 ON art3.id = s.alternative WHERE s.stuecklistevonartikel = '".(int)$xml['stuecklistevonartikel']."'")) + || (isset($xml['stuecklistevonartikel']) && $sl = $this->app->DB->SelectArr("SELECT s.id, s.stuecklistevonartikel, art.nummer as stuecklistevonartikelnummer, trim(s.menge)+0 as menge, s.art, + art2.nummer as artikelnummer, art3.nummer as alternativenummer,s.alternative + FROM stueckliste s + INNER JOIN artikel art ON art.id = s.stuecklistevonartikel + INNER JOIN artikel art2 ON art2.id = s.artikel + LEFT JOIN artikel art3 ON art3.id = s.alternative + WHERE art.geloescht = 0 AND art.nummer = '".$xml['stuecklistevonartikel']."'")) + ) + { + $xmlstr = << + + +XML; + $_xmlobj = new SimpleXMLExtended($xmlstr); + + $xmlobj = $_xmlobj->AddChild('stueckliste',''); + if(isset($sl[0])) + { + $stuecklistevonartikelnummer = $xmlobj->AddChild('stuecklistevonartikelnummer'); + $stuecklistevonartikelnummer->value = $sl[0]['stuecklistevonartikelnummer']; + } + //$out = ''; + $i = 0; + $j = 0; + if($sl) + { + foreach($sl as $row) + { + $j++; + $artikelobj = $xmlobj->AddChild('item'); + foreach($row as $k2 => $v2) + { + if(!is_numeric($k2) && $k2 != 'stuecklistevonartikelnummer') + { + $_name = '_'.$k2; + $$_name = $artikelobj->AddChild($k2); + $$_name->value = $v2; + } + } + } + } + + $xmlobj->AddChild('anz_result',$j); + //$xmlobj->AddChild('anz_result',$sql); + $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + unset($_xmlobj); + $this->XMLResponse(1, $out); + $this->app->ExitXentral(); + } + $this->XMLResponse(5,"Artikelhat keine Stückliste"); + $this->app->ExitXentral(); + } + + function ApiArtikelkategorienList($intern = false) + { + $xml = $this->XMLPost(); + $api_id = isset($this->api_id)?$this->api_id:0; + $exakt = 0; + if(isset($xml['ID']))$xml['id'] = $xml['ID']; + if(isset($xml['ID_EXT']))$xml['id_ext'] = $xml['ID_EXT']; + if(isset($xml['BEZEICHNUNG']))$xml['bezeichnung'] = $xml['BEZEICHNUNG']; + if(isset($xml['EXAKT']))$xml['exakt'] = $xml['EXAKT']; + + $where = ''; + if($xml['id'])$where .= " AND ak.id = '".(int)$xml['id']."' "; + if($xml['id_ext'])$where .= " AND am.id_ext = '".$this->app->DB->real_escape_string($xml['id_ext'])."' "; + if($xml['bezeichnung']) + { + if($xml['exakt'] && $xml['exakt'] == 1) + { + $where .= " AND ak.bezeichnung like '".$this->app->DB->real_escape_string(base64_decode($xml['bezeichnung']))."' "; + }else{ + $where .= " AND ak.bezeichnung like '%".$this->app->DB->real_escape_string(base64_decode($xml['bezeichnung']))."%' "; + } + } + + $kategorien = $this->app->DB->SelectArr("SELECT ak.*, am.id_ext FROM artikelkategorien ak LEFT JOIN api_mapping am ON am.id_int = ak.id AND am.tabelle = 'artikelkategorien' WHERE geloescht <> 1 $where ORDER BY parent, bezeichnung"); + if($kategorien) + { + $out = ''; + foreach($kategorien as $kategorie) + { + $out .= ''; + foreach($kategorie as $k => $v) + { + $out .= '<'.$k.'>'.htmlspecialchars($v).''; + } + $out .= ''; + } + $out .= ''; + if ($intern == true) { + return $out; + } + $this->XMLResponse(1, $out); + $this->app->ExitXentral(); + } + if ($intern == true) { + return false; + } + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + + public function ApiDateiHeader() + { + $id = (int)$this->app->Secure->GetGET('id'); + if($id) + { + $datei = $this->app->DB->SelectArr("SELECT dv.id, ds.parameter FROM datei_version dv INNER JOIN datei_stichwoerter ds ON ds.datei = dv.datei WHERE dv.datei = '$id' ORDER BY dv.datei DESC, dv.version DESC LIMIT 1"); + if($datei) + { + $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); + $newid = $this->app->DB->Select("SELECT id FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); + + /*if($versionid>0) + $newid = $versionid;*/ + + $name = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE id='$newid' LIMIT 1"); + if(isset($this->app->Conf->WFuserdata)) + { + $path = $this->app->Conf->WFuserdata.'/dms/'.$this->app->Conf->WFdbname."/".$newid; + }else + $path = dirname(dirname(__DIR__)).'/userdata/dms/'.$this->app->Conf->WFdbname."/".$newid; + //$name=basename($path); + + //filenames in IE containing dots will screw up the + //filename unless we add this + + if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) + $name = preg_replace('/\./', '%2e', $name, substr_count($name, '.') - 1); + + $contenttype= $this->app->erp->content_type($name); + //required, or it might try to send the serving //document instead of the file + $res = "Content-Type: $contenttype\n"; + $res .= "Content-Length: " .(string)(filesize($path))."\n" ; + $name = $this->app->erp->Dateinamen($name); + $res .= 'Content-Disposition: attachment; filename="'.$name.'"'; + echo $res; + $this->app->ExitXentral(); + } + } + $this->app->ExitXentral(); + } + + function ApiBelegPDFHeader() + { + $id = (int)$this->app->Secure->GetGET('id'); + $beleg = (string)$this->app->Secure->GetGET('beleg'); + if(in_array($beleg, array('auftrag','angebot','rechnung','lieferschein','gutschrift','produktion','retoure'))) + { + if(!$this->app->DB->Select("SELECT id FROM $beleg WHERE id = '$id' LIMIT 1")) { + $this->app->ExitXentral(); + } + $this->app->erp->checkPDFClass($beleg); + $classcustom = ucfirst($beleg).'PDFCustom'; + $class = ucfirst($beleg).'PDF'; + if(class_exists($classcustom)) + { + $pdf = new $classcustom($this->app); + }elseif(class_exists($class)) + { + $pdf = new $class($this->app); + }else{ + $this->app->ExitXentral(); + } + $function = 'Get'.ucfirst($beleg); + if(method_exists($pdf, $function)) + { + $pdf->$function($id); + $res = "Content-type: application/pdf\n"; + $res .= 'Content-Disposition: attachment; filename="'.$pdf->filename.'"'; + echo $res; + $this->app->ExitXentral(); + } + } + $this->app->ExitXentral(); + } + + function ApiBelegPDF() + { + $id = (int)$this->app->Secure->GetGET('id'); + $beleg = (string)$this->app->Secure->GetGET('beleg'); + if(in_array($beleg, array('auftrag','angebot','rechnung','lieferschein','gutschrift','produktion','retoure'))) + { + if(!$this->app->DB->Select("SELECT id FROM $beleg WHERE id = '$id' LIMIT 1"))die('Beleg '.$id.' nicht gefunden'); + $this->app->erp->checkPDFClass($beleg); + $classcustom = ucfirst($beleg).'PDFCustom'; + $class = ucfirst($beleg).'PDF'; + if(class_exists($classcustom)) + { + $pdf = new $classcustom($this->app); + }elseif(class_exists($class)) + { + $pdf = new $class($this->app); + }else{ + echo "PDF-Klasse nicht gefunden"; + $this->app->ExitXentral(); + } + $function = 'Get'.ucfirst($beleg); + if(method_exists($pdf, $function)) + { + $pdf->$function($id); + $pdf->displayDocument($this->app->DB->Select("SELECT schreibschutz FROM $beleg WHERE id = '$id' LIMIT 1")); + } + }elseif($beleg != ''){ + echo "Belegart nicht erlaubt"; + }else{ + echo "Belegart nicht angegeben"; + } + $this->app->ExitXentral(); + } + + function ApiDateiDownload() + { + $id = (int)$this->app->Secure->GetGET('id'); + if($id) + { + $datei = $this->app->DB->SelectArr("SELECT dv.id, ds.parameter FROM datei_version dv INNER JOIN datei_stichwoerter ds ON ds.datei = dv.datei WHERE dv.datei = '$id' ORDER BY dv.datei DESC, dv.version DESC LIMIT 1"); + if($datei) { + $this->app->erp->SendDatei($id); + } + } + $this->app->ExitXentral(); + } + + function ApiDateiVorschau() + { + //$xml = $this->XMLPost(); + $datei = $this->app->Secure->GetGET('id'); + $cmd = $this->app->Secure->GetGet('cmd'); + $id = (int)$datei; + if($id) + { + $datei = $this->app->DB->SelectArr("SELECT dv.id, ds.parameter FROM datei_version dv INNER JOIN datei_stichwoerter ds ON ds.datei = dv.datei WHERE dv.datei = '$id' ORDER BY dv.datei DESC, dv.version DESC LIMIT 1"); + if(!$datei) + { + if ($this->app->erp->Firmendaten('iconset_dunkel')) { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); + } else { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); + } + header('Content-type: image/png'); + echo $str; + $this->app->ExitXentral(); + } + if($datei[0]['parameter']) + { + if($cmd === 'projekt') + { + if(!$this->app->erp->UserProjektRecht($datei[0]['parameter'])) + { + if ($this->app->erp->Firmendaten('iconset_dunkel')) { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); + } else { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); + } + header('Content-type: image/png'); + echo $str; + $this->app->ExitXentral(); + } + }else{ + $projekt = $this->app->DB->Select("SELECT projekt FROM $cmd WHERE id = '".$datei[0]['parameter']."' LIMIT 1"); + if(!$this->app->erp->UserProjektRecht($projekt)) + { + if ($this->app->erp->Firmendaten('iconset_dunkel')) { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); + } else { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); + } + header('Content-type: image/png'); + echo $str; + $this->app->ExitXentral(); + } + } + } + //Rechte prüfen + + $userdata = isset($this->app->Conf->WFuserdata)?$this->app->Conf->WFuserdata:str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME'])."../userdata"; + $path = $userdata."/dms/".$this->app->Conf->WFdbname; + $cachefolder = $path.'/cache'; + if(!file_exists($cachefolder.'/'.$datei[0]['id'].'_100_100')) + { + if(file_exists($path.'/'.$datei[0]['id'])) + { + $type = mime_content_type($path.'/'.$datei[0]['id']); + switch($type) + { + case 'image/jpg': + case 'image/jpeg': + $img = new image($this->app); + $str = $img->scaledPicByFileId($datei[0]['id'], 100, 100); + header('Content-type: image/jpg'); + echo $str; + $this->app->ExitXentral(); + break; + case 'image/png': + $img = new image($this->app); + $str = $img->scaledPicByFileId($datei[0]['id'], 100, 100); + header('Content-type: image/png'); + echo $str; + $this->app->ExitXentral(); + break; + case 'image/gif': + $img = new image($this->app); + $str = $img->scaledPicByFileId($datei[0]['id'], 100, 100); + header('Content-type: image/gif'); + echo $str; + $this->app->ExitXentral(); + break; + case 'application/pdf': + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/pdf.svg'); + header('Content-type: image/png'); + echo $str; + $this->app->ExitXentral(); + break; + } + } + } + + if(file_exists($cachefolder.'/'.$datei[0]['id'].'_100_100')) + { + $type = mime_content_type($path.'/'.$datei[0]['id']); + if(strpos($type,'image') !== false) + { + header('Content-type: '.$type); + $str = file_get_contents($cachefolder.'/'.$datei[0]['id'].'_100_100'); + echo $str; + $this->app->ExitXentral(); + } + }else{ + if ($this->app->erp->Firmendaten('iconset_dunkel')) { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); + } else { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); + } + header('Content-type: image/png'); + echo $str; + $this->app->ExitXentral(); + } + }else{ + if ($this->app->erp->Firmendaten('iconset_dunkel')) { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png'); + } else { + $str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png'); + } + header('Content-type: image/png'); + echo $str; + } + $this->app->ExitXentral(); + } + + function ApiCustom() + { + $out = null; + $responsecode = 0; + $xml = $this->XMLPost(); + $apiid = $this->api_id; + $this->app->erp->RunHook('apicustom', 4, $apiid, $xml, $responsecode, $out); + $this->XMLResponse($responsecode, $out); + $this->app->ExitXentral(); + } + + public function ApiDateiList() + { + $xml = $this->XMLPost(); + $parameter = $xml['parameter']; + $objekt = $xml['objekt']; + $dateiliste = $this->app->DB->SelectArr( "SELECT d.titel, s.subjekt, v.version, v.ersteller, v.bemerkung, v.datum, d.id FROM + datei d LEFT JOIN datei_stichwoerter s ON d.id=s.datei LEFT JOIN datei_version v ON v.datei=d.id WHERE s.objekt LIKE '$objekt' AND s.parameter='$parameter' AND d.geloescht=0"); + + if($dateiliste) + { + $xml = $this->CreateXmlObj(); + foreach($dateiliste as $k => $datei) + { + $_datei = $xml->AddChild('Datei',''); + foreach($datei as $k2 => $row) + { + $_datei->AddChild($k2 ,$row); + } + } + $out = str_replace(array('','',"",''),array('','','',''),$xml->asXML()); + $this->XMLResponse(1, $out); + $this->app->ExitXentral(); + } + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + + function ApiAccountLogin() + { + $xml = $this->XMLPost(); + $user = $xml['user']; + $md5passwort = !empty($xml['md5passwort'])?$xml['md5passwort']:md5($xml['passwort']); + + $art = $xml['art']; + if(!empty($user) && !empty($md5passwort) && !empty($art)) + { + $acc = $this->app->DB->SelectArr("SELECT adr.*, aa.benutzername FROM adresse_accounts aa INNER JOIN adresse adr ON aa.adresse = adr.id WHERE adr.geloescht <> 1 AND aa.art = '".$this->app->DB->real_escape_string($art)."' AND aa.aktiv = 1 AND (aa.gueltig_bis = '0000-00-00' OR aa.gueltig_bis >= curdate() or isnull(aa.gueltig_bis)) AND (aa.gueltig_ab = '0000-00-00' OR isnull(gueltig_ab) OR gueltig_ab <= curdate()) AND aa.benutzername = '".$this->app->DB->real_escape_string($user)."' AND md5(aa.passwort) = '".$this->app->DB->real_escape_string($md5passwort)."' AND aa.art = '".$this->app->DB->real_escape_string($art)."' LIMIT 1"); + if($acc) + { + $xml = $this->CreateXmlObj(); + $xml->AddChild('name', $acc[0]['name']); + $xml->AddChild('adresse', $acc[0]['id']); + $xml->AddChild('benutzername', $acc[0]['benutzername']); + $out = str_replace(array('','',"",''),array('','','',''),$xml->asXML()); + $this->XMLResponse(1, $out); + $this->app->ExitXentral(); + } + } + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + + + function ApiBelegOhnePositionenList(){ + $xml = $this->XMLPost(); + $belegtypen = array('auftrag','rechnung','angebot','lieferschein','gutschrift','retoure'); + + //wir holen alle Projektdaten + $projekteData = $this->app->DB->SelectArr("SELECT id,abkuerzung FROM projekt"); + $projekte = array(); + foreach($projekteData as $value){ + $projekte[$value['id']] = $value['abkuerzung']; + } + + if(!in_array($xml['beleg'], $belegtypen)){ + $this->XMLResponse(5,"falsscher oder kein Belegtype im Feld beleg angegeben(auftrag,rechnung,angebot,lieferschein,gutschrift)"); + $this->app->ExitXentral(); + } + + $belegtype = $xml['beleg']; + + $sql = "SELECT + $belegtype.id AS id, + $belegtype.projekt AS projekt, + $belegtype.adresse AS adresse, + $belegtype.datum AS datum, + $belegtype.belegnr AS belegnr, + $belegtype.status AS status, + $belegtype.land AS land, + $belegtype.typ AS typ"; + + if($belegtype !== 'lieferschein' && $belegtype !== 'retoure'){ + $sql .= ", + $belegtype.umsatz_netto AS umsatz_netto, + $belegtype.erloes_netto AS erloes_netto, + $belegtype.deckungsbeitrag AS deckungsbeitrag, + $belegtype.provision_summe AS provision_summe, + $belegtype.gruppe AS gruppe + "; + } + $sql .= " FROM $belegtype"; + + if($xml['status'] != ''){ + $subwhere[] = "status = '" . $xml['status'] . "'"; + } + + if($xml['projekt'] != ''){ + if(!is_numeric($xml['projekt'])){ + $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xml['projekt']."' LIMIT 1"); + }else{ + $projektId = $xml['projekt']; + } + $subwhere[] = "projekt = '" . $projektId . "'"; + } + + if($xml['datum_von'] != ''){ + if(!strpos($xml['datum_von'],"-")) { + $datum_von = $this->app->String->Convert($xml['datum_von'], '%1.%2.%3', '%3-%2-%1'); + }else{ + $datum_von = $xml['datum_von']; + } + $subwhere[] = "datum >= '" . $datum_von . "'"; + } + + if($xml['datum_bis'] != ''){ + if(!strpos($xml['datum_bis'],"-")) { + $datum_bis = $this->app->String->Convert($xml['datum_bis'], '%1.%2.%3', '%3-%2-%1'); + }else{ + $datum_bis = $xml['datum_bis']; + } + $subwhere[] = "datum <= '" . $datum_bis . "'"; + } + + if($subwhere)$sql .= " WHERE ".implode(" AND ", $subwhere); + + if($xml['order'] != ''){ + $sql .= " ORDER BY " . $xml['order']['field']; + if($xml['order']['desc'] == '1'){ + $sql .= " DESC"; + } + if($xml['order']['asc'] == '1'){ + $sql .= " ASC"; + } + } + + if($xml['limit'] != '' && $xml['offset'] != ''){ + $sql .= " Limit " . $xml['offset'] . ", " . $xml['limit']; + } + $belege = $this->app->DB->SelectArr($sql); + + $xmlstr = << + + +XML; + $_xmlobj = new SimpleXMLExtended($xmlstr); + + $xmlobj = $_xmlobj->AddChild('beleg_list',''); + + foreach($belege as $beleg) { + $belegobj = $xmlobj->AddChild('beleg'); + $_belegobj = $belegobj->AddChild('id', $beleg['id']); + $_belegnr = $belegobj->AddChild('belegnr', $beleg['belegnr']); + $_projektid = $belegobj->AddChild('projektid',$beleg['projekt']); + $_projekt = $belegobj->AddChild('projekt',$projekte[$beleg['projekt']]); + $_adresse = $belegobj->AddChild('adresse',$beleg['adresse']); + $_datum = $belegobj->AddChild('datum',$beleg['datum']); + $_status = $belegobj->AddChild('status',$beleg['status']); + $_land = $belegobj->AddChild('land',$beleg['land']); + $_typ = $belegobj->AddChild('typ',$beleg['typ']); + + if($belegtype !== 'lieferschein' && $belegtype !== 'retoure'){ + $_umsatz_netto = $belegobj->AddChild('umsatz_netto',$beleg['umsatz_netto']); + $_erloes_netto = $belegobj->AddChild('erloes_netto',$beleg['erloes_netto']); + $_deckungsbeitrag = $belegobj->AddChild('deckungsbeitrag',$beleg['deckungsbeitrag']); + $_provision_summe = $belegobj->AddChild('provision_summe',$beleg['provision_summe']); + $_gruppe = $belegobj->AddChild('gruppe',$beleg['gruppe']); + } + } + + $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + unset($_xmlobj); + $this->XMLResponse(1, $out); + $this->app->ExitXentral(); + } + + + function ApiBelegeList() + { + $xml = $this->XMLPost(); + if($xml['ausgabe'] === 'belege'){ + $this->ApiBelegOhnePositionenList(); + $this->app->ExitXentral(); + } + $api_id = isset($this->api_id)?$this->api_id:0; + $adresse = false; + $belega = null; + $belegtypen = array('auftrag','rechnung','angebot','lieferschein','gutschrift','retoure'); + $join = ''; + $extraselect = ''; + $groupbyartikel = false; + if(isset($xml['groupbyartikel']) && $xml['groupbyartikel'])$groupbyartikel = true; + $groupbyposition = false; + if(isset($xml['groupbyposition']) && $xml['groupbyposition'])$groupbyposition = true; + $groupbyadresse = false; + if(isset($xml['groupbyadresse']) && $xml['groupbyadresse'])$groupbyadresse = true; + $groupbybeleg = false; + if(isset($xml['groupbybeleg']) && $xml['groupbybeleg'])$groupbybeleg = true; + $groupbybeleg2 = $groupbybeleg; + $groupbybeleg = false; + if(isset($xml['beleg'])) + { + if(is_array($xml['beleg'])) + { + foreach($xml['beleg'] as $_beleg) + { + if(in_array($_beleg, $belegtypen))$belega[] = $_beleg; + } + } + if(in_array($xml['beleg'], $belegtypen))$belega[] = $xml['beleg']; + } + + if(!$belega) + { + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + + $order = ''; + if(isset($xml['order'])){ + if(!isset($xml['order'][0])) + { + $xml['order'][0] = $xml['order']; + } + foreach($xml['order'] as $key => $sort) + { + $field = ''; + if(isset($sort['field'])) + { + switch(strtolower($sort['field'])) + { + case 'artikelkategorie': + $field = 'ak.bezeichnung'; + if($groupbyartikel)$field = 't.artikelkategoriebezeichnung'; + $join = " INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ "; + $extraselect = ' ,ak.bezeichnung as artikelkategoriebezeichnung '; + break; + case 'status': + case 'belegnr': + case 'datum': + if(!$groupbyartikel)$field = 'r.'.strtolower($sort['field']); + break; + case 'nummer': + if(!$groupbyartikel)$field = 'rp.'.strtolower($sort['field']); + if($groupbyartikel)$field = 't.'.strtolower($sort['field']); + break; + case 'menge': + if(!$groupbyartikel)$field = 'rp.'.strtolower($sort['field']); + if($groupbyartikel)$field = 'menge'; + break; + case 'preis': + case 'bezeichnung': + if(!$groupbyartikel)$field = 'rp.'.strtolower($sort['field']); + break; + case 'name': + case 'plz': + case 'ort': + case 'telefon': + case 'land': + case 'telefax': + case 'strasse': + if($groupbyadresse && $groupbyartikel)$field = 't.'.strtolower($sort['field']); + if(!$groupbyartikel)$field = 'r.'.strtolower($sort['field']); + break; + case 'name_de': + case 'name_en': + case 'anabregs_text': + case 'anabregs_text_en': + if($groupbyartikel)$field = 't.'.strtolower($sort['field']); + break; + case 'betrag': + case 'letztes_datum': + if($groupbyartikel)$field = strtolower($sort['field']); + break; + } + if(!empty($field)) + { + if(isset($sort['desc']) && $sort['desc'] == 1) + { + $field .= " DESC"; + } + if($order != '')$order .= ','; + $order .= $field; + } + } + } + } + if($order != '')$order = $order.','; + if(isset($xml['adresse'])) + { + $adresse = (int)$xml['adresse']; + }elseif(isset($xml['id_ext'])) + { + $adresse = $this->app->DB->Select("SELECT id_int FROM api_mapping WHERE api = '".$api_id."' AND tabelle = 'adresse' AND id_ext = '".$this->app->DB->real_escape_string($xml['id_ext'])."' LIMIT 1"); + } + if(true) + { + $filterkategoriename = false; + if(isset($xml['status'])) + { + $subwhere[] = " r.status like '".$this->app->DB->real_escape_string($xml['status'])."' "; + } + if(isset($xml['kategorie'])) + { + $subwhere[] = " a.typ = '".((int)$xml['kategorie'])."_kat' "; + } + if(isset($xml['kategoriename'])) + { + $field = 'ak.bezeichnung'; + $join = " INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ "; + $extraselect = ' ,ak.bezeichnung as artikelkategoriebezeichnung '; + $subwhere[] = " ak.bezeichnung like '".$this->app->DB->real_escape_string(base64_decode((string)$xml['kategoriename']))."' "; + $filterkategoriename = true; + } + if(isset($xml['datum_von'])) + { + $subwhere[] = "r.datum >= '".$this->app->DB->real_escape_string($xml['datum_von'])."' "; + } + if(isset($xml['datum_bis'])) + { + $subwhere[] = "r.datum <= '".$this->app->DB->real_escape_string($xml['datum_bis'])."' "; + } + + if(isset($xml['vertrieb'])) + { + $subwhere[] = " r.vertriebid = '".(int)$xml['vertrieb']."' "; + } + $limit = ''; + $offset = 0; + $_limit = 999999999; + if(isset($xml['limit'])) + { + if((int)$xml['limit'] > 0)$_limit = (int)$xml['limit']; + if(isset($xml['offset']) && (int)$xml['offset'] > 0) + { + $offset = (int)$xml['offset']; + //$limit = ' LIMIT '.(int)$xml['offset'].', '.(int)$xml['limit']; + }else{ + //$limit = ' LIMIT '.(int)$xml['limit']; + } + } + + $searchmode = ' OR '; + foreach($xml as $key => $filter) + { + $filterescaped = ''; + if(!is_array($filter))$filterescaped = $this->app->DB->real_escape_string($filter); + + switch(strtoupper($key)) + { + case 'SEARCHMODE': + if(strtoupper($filter) === 'AND') { + $searchmode = ' AND '; + } + if(strtoupper($filter) === 'OR') { + $searchmode = ' OR '; + } + break; + case 'EXAKT': + $exakt = true; + break; + case 'SEARCH': + + if(is_array($filter)) + { + + if(!isset($filter[0]))$filter[0] = $filter; + + foreach($filter as $_filter) + { + if(isset($_filter['SUCHE']))$_filter['suche'] = $_filter['SUCHE']; + if(isset($_filter['FIELD']))$_filter['field'] = $_filter['FIELD']; + if(isset($_filter['EXAKT']))$_filter['exakt'] = $_filter['EXAKT']; + if(isset($_filter['suche']) && isset($_filter['field'])) + { + if(isset($_filter['exakt']) && $_filter['exakt'] == 1) + { + $like = " LIKE '".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."' "; + }else{ + $like = " LIKE '%".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."%' "; + } + switch(strtolower($_filter['field'])) + { + case 'datum': + if(strpos('.',$like) !== false) + { + if(isset($_filter['exakt']) && $_filter['exakt'] == 1) + { + $like = " LIKE '".$this->app->DB->real_escape_string($this->app->String->Convert(base64_decode($_filter['suche']),"%1.%2.%3","%3-%2-%1"))."' "; + }else{ + $like = " LIKE '%".$this->app->DB->real_escape_string($this->app->String->Convert(base64_decode($_filter['suche']),"%1.%2.%3","%3-%2-%1"))."%' "; + } + $swhere[] = ' r.datum '.$like; + } + break; + case 'belegnr': + $swhere[] = ' r.belegnr '.$like; + break; + case 'nummer': + $swhere[] = ' a.'.strtolower($_filter['field']).' '.$like; + break; + case 'bezeichnung': + if($groupbyartikel) + { + if(strtolower($_filter['field']) == 'nummer') + { + + }else{ + $swhere[] = ' a.name_de '.$like; + } + }else{ + $swhere[] = ' rp.'.strtolower($_filter['field']).' '.$like; + } + break; + case 'name_de': + $swhere[] = ' a.name_de '.$like; + break; + case 'kategorieid': + if(isset($_filter['exakt']) && $_filter['exakt'] == 1) + { + $like = " LIKE '".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."_kat' "; + }else{ + $like = " LIKE '%".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."%_kat' "; + } + $swhere[] = ' a.typ '.$like; + break; + case 'kategoriename': + if(!isset($_filterkategoriename) || !$_filterkategoriename) + { + $join = " INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ "; + $extraselect = ' ,ak.bezeichnung as artikelkategoriebezeichnung '; + $swhere[] = ' ak.bezeichnung '.$like; + $_filterkategoriename = true; + } + break; + case 'name': + case 'plz': + case 'ort': + case 'strasse': + case 'kundennummer': + + if($groupbyadresse)$swhere[] = ' adr.'.strtolower($_filter['field']).' '.$like; + if(!$groupbyadresse)$swhere[] = ' r.'.strtolower($_filter['field']).' '.$like; + break; + break; + } + } + } + } + break; + } + } + + if(!empty($swhere))$subwhere[] = " (".implode( ' '.$searchmode.' ', $swhere).') '; + + $where = ""; + if($subwhere)$where = " AND ".implode(" AND ", $subwhere); + unset($belege); + $torder = trim($order,','); + if(!$torder)$torder = ' 1 '; + $groupbybelegsql = ""; + if($groupbybeleg)$groupbybelegsql = " ,t.id "; + if($groupbybeleg)$groupbybelegsql2 = " ,r.id "; + if($groupbyartikel) + { + if($groupbyadresse) + { + $sql = "SELECT t.adresse, t.name,t.strasse, t.plz, t.land, t.ort, t.kundennummer , t.aid, t.nummer, t.name_de, t.name_en, + t.anabregs_text, t.anabregs_text_en, t.artikelkategorie ,t.artikelkategoriebezeichnung , sum(t.menge) as menge, + sum(t.betrag) as betrag, max(t.letztes_datum) as letztes_datum FROM( "; + + foreach($belega as $beleg) + { + + $sqlb[] = " (SELECT adr.id as adresse, adr.name,adr.strasse, adr.plz, adr.land, adr.ort, adr.kundennummer , a.id as aid, a.nummer, a.name_de, a.name_en, a.anabregs_text, a.anabregs_text_en, a.typ as artikelkategorie ,ak.bezeichnung as artikelkategoriebezeichnung , sum(rp.menge) as menge, ".($beleg == 'gutschrift'?'-':'')."sum(rp.menge * (rp.preis*((100-rp.rabatt)/100) )) as betrag, max(r.datum) as letztes_datum FROM $beleg r INNER JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." INNER JOIN artikel a ON rp.artikel = a.id INNER JOIN adresse adr ON r.adresse = adr.id LEFT JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY adr.id, a.id $groupbybelegsql2) "; + + } + + $sql .= implode(" UNION ALL ",$sqlb).") t WHERE t.aid > 0 AND t.adresse > 0 GROUP BY t.aid, t.adresse ORDER BY $torder $limit"; + $_belege = $this->app->DB->SelectArr($sql); + + }else{ + + $sql = "SELECT t.aid, t.nummer, t.name_de, t.name_en, t.anabregs_text, t.anabregs_text_en, t.artikelkategorie ,t.artikelkategoriebezeichnung , t.menge,sum(t.betrag) as betrag, max(t.letztes_datum) as letztes_datum FROM( "; + + foreach($belega as $beleg) + { + + $sqlb[] = " (SELECT r.id as bid,r.datum,rp.sort, a.id as aid, a.nummer, a.name_de, a.name_en, a.anabregs_text, a.anabregs_text_en, a.typ as artikelkategorie ,ak.bezeichnung as artikelkategoriebezeichnung , sum(rp.menge) as menge, ".($beleg == 'gutschrift'?'-':'')."sum(rp.menge * (rp.preis*((100-rp.rabatt)/100) )) as betrag, max(r.datum) as letztes_datum FROM $beleg r INNER JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." INNER JOIN adresse adr ON r.adresse = adr.id INNER JOIN artikel a ON rp.artikel = a.id LEFT JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY a.id, adr.id $groupbybelegsql2) "; + + } + + $sql .= implode(" UNION ALL ",$sqlb).") t WHERE t.aid > 0 GROUP BY t.aid ORDER BY $torder $limit"; + + $_belege = $this->app->DB->SelectArr($sql); + } + if($_belege) + { + foreach($_belege as $k => $position) + { + //$position['preis'] = $position['menge'] * $position['preis'] * (1-$position['rabatt']/100); + $belege[] = $position; + unset($_belege[$k]); + } + } + }else{ + foreach($belega as $beleg) + { + if($groupbybeleg) + { + $sql = "SELECT '$beleg' as beleg ,r.adresse, r.name,r.plz,r.ort,r.strasse,r.land,r.ansprechpartner,r.datum,r.status as rstatus,r.belegnr,r.id as belegid, a.typ as artikelkategorie $extraselect FROM $beleg r LEFT JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." LEFT JOIN artikel a ON rp.artikel = a.id $join WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY r.id ORDER BY $order r.datum, rp.sort $limit "; + }else{ + $sql = "SELECT '$beleg' as beleg ,r.adresse, r.name,r.plz,r.ort,r.strasse,r.land,r.ansprechpartner,r.datum,r.status as rstatus,r.belegnr,r.id as belegid, rp.*, a.typ as artikelkategorie $extraselect FROM $beleg r LEFT JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." LEFT JOIN artikel a ON rp.artikel = a.id $join WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where ORDER BY $order r.datum, rp.sort $limit "; + } + $_belege = $this->app->DB->SelectArr($sql); + //$this->app->erp->LogFile(addslashes($this->app->DB->error())); + //$this->app->erp->LogFile(addslashes($sql)); + if($_belege) + { + foreach($_belege as $k => $position) + { + $position['status'] = $position['rstatus']; + unset($position['rstatus']); + $position['preis'] = $position['menge'] * $position['preis'] * (1-$position['rabatt']/100); + $belege[] = $position; + unset($_belege[$k]); + } + } + } + } + + + /* + foreach($belega as $beleg) + { + if($groupbyartikel) + { + if($groupbyadresse) + { + $_belege = $this->app->DB->SelectArr("SELECT '$beleg' as beleg, adr.id as adresse, adr.name,adr.strasse, adr.plz, adr.land, adr.ort, adr.kundennummer , a.id, a.nummer, a.name_de, a.name_en, a.anabregs_text, a.anabregs_text_en, a.typ as artikelkategorie ,ak.bezeichnung as artikelkategoriebezeichnung , sum(rp.menge) as menge, sum(rp.menge * (rp.preis*((100-rp.rabatt)/100) )) as betrag, max(r.datum) as letztes_datum FROM $beleg r INNER JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." INNER JOIN artikel a ON rp.artikel = a.id INNER JOIN adresse adr ON r.adresse = adr.id INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY a.id, adr.id ORDER BY $order r.datum, rp.sort $limit "); + + }else{ + $_belege = $this->app->DB->SelectArr("SELECT '$beleg' as beleg , a.id, a.nummer, a.name_de, a.name_en, a.anabregs_text, a.anabregs_text_en, a.typ as artikelkategorie ,ak.bezeichnung as artikelkategoriebezeichnung , sum(rp.menge) as menge, sum(rp.menge * (rp.preis*((100-rp.rabatt)/100) )) as betrag, max(r.datum) as letztes_datum FROM $beleg r INNER JOIN ".$beleg."_position rp ON r.id = rp.".$beleg." INNER JOIN artikel a ON rp.artikel = a.id INNER JOIN artikelkategorien ak ON concat(ak.id,'_kat') = a.typ WHERE ".($adresse?("r.adresse = '".$adresse."'"):"1")." $where GROUP BY a.id ORDER BY $order r.datum, rp.sort $limit "); + } + if($_belege) + { + foreach($_belege as $k => $position) + { + //$position['preis'] = $position['menge'] * $position['preis'] * (1-$position['rabatt']/100); + $belege[] = $position; + unset($_belege[$k]); + } + } + } + }*/ + +$xmlstr = << + + +XML; + $_xmlobj = new SimpleXMLExtended($xmlstr); + if($groupbyartikel) + { + $xmlobj = $_xmlobj->AddChild('artikel_list',''); + }else{ + $xmlobj = $_xmlobj->AddChild('beleg_list',''); + } + //$out = ''; + $i = 0; + $j = 0; + $anz_belegegesamt = -1; + $anz_belegeresult = 0; + $old_beleg = 0; + $old_beleggesamt = 0; + if($belege) + { + if($groupbyartikel) + { + foreach($belege as $position) + { + if($i >= $offset && $i < $_limit + $offset) + { + $j++; + $belegobj = $xmlobj->AddChild('artikel'); + $_belegobj = $belegobj->AddChild('id',''); + $_belegobj->value = $position['aid']; + $_nummer = $belegobj->AddChild('nummer',''); + $_nummer->value = $position['nummer']; + $_name_de = $belegobj->AddChild('name_de',''); + $_name_de->value = $position['name_de']; + $_menge = $belegobj->AddChild('menge',''); + $_menge->value = round($position['menge'],4); + $_betrag = $belegobj->AddChild('betrag',''); + $_betrag->value = $position['betrag']; + $_artikelkategorie = $belegobj->AddChild('artikelkategorie',''); + $_artikelkategorie->value = $position['artikelkategorie']; + $_letztes_datum = $belegobj->AddChild('letztes_datum',''); + $_letztes_datum->value = $position['letztes_datum']; + $_artikelkategoriebezeichnung = $belegobj->AddChild('artikelkategoriebezeichnung',''); + $_artikelkategoriebezeichnung->value = $position['artikelkategoriebezeichnung']; + if($groupbyadresse) + { + $_adresse = $belegobj->AddChild('adresse',''); + $_adresse->value = $position['adresse']; + $_kundennummer = $belegobj->AddChild('kundennummer',''); + $_kundennummer->value = $position['kundennummer']; + $_name = $belegobj->AddChild('name',''); + $_name->value = $position['name']; + $_ort = $belegobj->AddChild('ort',''); + $_ort->value = $position['ort']; + $_plz = $belegobj->AddChild('plz',''); + $_plz->value = $position['plz']; + $_strasse = $belegobj->AddChild('strasse',''); + $_strasse->value = $position['strasse']; + $_land = $belegobj->AddChild('land',''); + $_land->value = $position['land']; + } + } + $i++; + } + + }else{ + $old = 0; + foreach($belege as $position) + { + if($old_beleggesamt != $position['belegid'].$position['beleg']) + { + $anz_belegegesamt++; + $old_beleggesamt = $position['belegid'].$position['beleg']; + } + if(($groupbybeleg2?$anz_belegegesamt:$i) >= $offset && ($groupbybeleg2?$anz_belegegesamt:$i) < $_limit + $offset) + { + $j++; + if($groupbyposition || $old != $position['belegid'].$position['beleg']) + { + $anz_belegeresult++; + $belegobj = $xmlobj->AddChild($position['beleg']); + //if($old != 0)$out .= ''; + $old = $position['belegid'].$position['beleg']; + + //$out .= '<'.$position['beleg'].'>'; + + $_belegobj = $belegobj->AddChild('belegid',''); + $_belegobj->value = $position['belegid']; + $_plz = $belegobj->AddChild('plz',''); + $_plz->value = $position['plz']; + $_ort = $belegobj->AddChild('ort',''); + $_ort->value = $position['ort']; + $_strasse = $belegobj->AddChild('strasse',''); + $_strasse->value = $position['strasse']; + $_land = $belegobj->AddChild('land',''); + $_land->value = $position['land']; + $_ansprechpartner = $belegobj->AddChild('ansprechpartner',''); + $_ansprechpartner->value = $position['ansprechpartner']; + $_datum = $belegobj->AddChild('datum',''); + $_datum->value = $position['datum']; + $_belegnr = $belegobj->AddChild('belegnr',''); + $_belegnr->value = $position['belegnr']; + $_status = $belegobj->AddChild('status',''); + $_status->value = $position['status']; + $_adresse = $belegobj->AddChild('adresse',''); + $_adresse->value = $position['adresse']; + $_name = $belegobj->AddChild('name',''); + $_name->value = $position['name']; + //$out .= ''.$position['belegid'].''; + //$out .= ''.$position['datum'].''; + //$out .= ''.$position['belegnr'].''; + //$out .= ''.$position['status'].''; + //$out .= ''.$position['adresse'].''; + } + $_positionobj = $belegobj->AddChild('position',''); + //$out .= ''; + foreach($position as $k => $v) + { + $objn = $k.'_obj'; + $$objn = $_positionobj->AddChild($k,''); + $$objn->value = $v; + //$out .= '<'.$k.'>'.htmlspecialchars($v).''; + } + //$out .= ''; + } + $i++; + } + } + //$out .= ''; + } + $anz_belegegesamt++; + //$out .= ''.(!empty($belege)?count($belege):0).''.$j.''; + $xmlobj->AddChild('anz_gesamt',(!empty($belege)?count($belege):0)); + $xmlobj->AddChild('anz_result',$j); + if(!$groupbyartikel) + { + $xmlobj->AddChild('anz_belegegesamt',$anz_belegegesamt); + $xmlobj->AddChild('anz_belegeresult',$anz_belegeresult); + } + $out = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + unset($_xmlobj); + $this->XMLResponse(1, $out); + $this->app->ExitXentral(); + } + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + + function ApiGruppenList() + { + $gruppen = $this->app->DB->SelectArr("SELECT * FROM gruppen WHERE art like 'gruppe' "); + if($gruppen) + { + $out = ''; + foreach($gruppen as $gruppe) + { + $out .= ''; + foreach($gruppe as $k => $v ) + { + $out .= '<'.$k.'>'.$v.''; + } + $out .= ''; + } + $out .= ''; + $this->XMLResponse(1, $out); + $this->app->ExitXentral(); + } + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + + function ApiAdresseGruppenList() + { + $xml = $this->XMLPost(); + $api_id = isset($this->api_id)?$this->api_id:0; + if(isset($xml['adresse'])) + { + $adresse = (int)$xml['adresse']; + + }elseif(isset($xml['id_ext'])) + { + $adresse = $this->app->DB->Select("SELECT id_int FROM api_mapping WHERE api = '".$api_id."' AND tabelle = 'adresse' AND id_ext = '".$this->app->DB->real_escape_string($xml['id_ext'])."' LIMIT 1"); + } + if($adresse) + { + $gruppen = $this->app->DB->SelectArr("SELECT gr.id as gruppe, gr.name, am.id_int FROM adresse_rolle ar LEFT JOIN gruppen gr ON gr.id = ar.parameter LEFT JOIN api_mapping am ON am.id_int = gr.id AND am.tabelle = 'gruppen' WHERE ar.adresse = '$adresse' AND ar.subjekt like 'Mitglied' AND objekt like 'Gruppe'"); + if($gruppen) + { + $out = ''; + foreach($gruppen as $gruppe) + { + $out .= ''; + foreach($gruppe as $k => $v ) + { + $out .= '<'.$k.'>'.$v.''; + } + $out .= ''; + } + $out .= ''; + $this->XMLResponse(1, $out); + $this->app->ExitXentral(); + } + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + + + public function ApiAccountList() + { + $this->XMLPost(); + $api_id = isset($this->api_id)?$this->api_id:0; + if($api_id) + { + $url = $this->app->DB->Select("SELECT remotedomain FROM api_account WHERE id = '$api_id' LIMIT 1"); + $adresse = $this->app->Secure->GetGET('adresse'); + if(!empty($adresse)){ + $accounts = $this->app->DB->SelectArr("SELECT ac.adresse, ac.art, ac.benutzername,ac.passwort, ac.webid, am.id_ext, a.name, a.email FROM adresse_accounts ac INNER JOIN adresse a ON ac.adresse = a.id LEFT JOIN api_mapping am ON am.id_int = ac.adresse AND am.api = '$api_id' AND am.tabelle = 'adresse' WHERE ac.aktiv = 1 AND ac.url = '".$this->app->DB->real_escape_string($url)."' AND (ac.gueltig_bis <= now() or isnull(ac.gueltig_bis)) AND ac.adresse={$adresse}"); + }else{ + $accounts = $this->app->DB->SelectArr("SELECT ac.adresse, ac.art, ac.benutzername,ac.passwort, ac.webid, am.id_ext, a.name, a.email FROM adresse_accounts ac INNER JOIN adresse a ON ac.adresse = a.id LEFT JOIN api_mapping am ON am.id_int = ac.adresse AND am.api = '$api_id' AND am.tabelle = 'adresse' WHERE ac.aktiv = 1 AND ac.url = '".$this->app->DB->real_escape_string($url)."' AND (ac.gueltig_bis <= now() or isnull(ac.gueltig_bis))"); + } + if($error = $this->app->DB->error()) + { + $this->XMLResponse(1,''.$error.''); + } + if($accounts) + { + $out = ''; + foreach($accounts as $account) + { + $out .= ''; + foreach($account as $key => $value) + { + $out .= '<'.$key.'>'.(is_null($value)?'':$value).''; + } + $out .= ''; + } + $out .= ''; + $this->XMLResponse(1,$out); + $this->app->ExitXentral(); + } + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + $this->XMLResponse(3); + $this->app->ExitXentral(); + } + + function ApiMappingGet() + { + $xml = $this->XMLPost(); + $api_id = isset($this->api_id)?$this->api_id:0; + if(is_array($xml)) + { + $list = false; + if(isset($xml['list'])) + { + $list = $xml['list']; + }elseif($xml['LIST']) + { + $list = $xml['LIST']; + } + if(!$list) + { + $table = isset($xml['table'])?$xml['table']:(isset($xml['TABLE'])?$xml['TABLE']:''); + $id_int = isset($xml['id_int'])?$xml['id_int']:(isset($xml['ID_INT'])?$xml['ID_INT']:''); + $id_ext = isset($xml['id_ext'])?$xml['id_ext']:(isset($xml['ID_EXT'])?$xml['ID_EXT']:''); + if($table && (!empty($id_int) || !empty($id_ext))) + { + if(!empty($id_int)) + { + $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE tabelle = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_int = '".$this->app->DB->real_escape_string($id_int)."' AND api = '".$api_id."' LIMIT 1"); + }else{ + $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE tabelle = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_ext = '".$this->app->DB->real_escape_string($id_ext)."' AND api = '".$api_id."' LIMIT 1"); + } + if(empty($ergebnis)) + { + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + $this->XMLResponse(1,''.$ergebnis[0]['id_int'].''.$ergebnis[0]['id_ext'].''.$ergebnis[0]['tabelle'].'
'); + $this->app->ExitXentral(); + } + $this->XMLResponse(4); + $this->app->ExitXentral(); + } + $out = ''; + foreach($list as $k => $v) + { + $table = isset($v['table'])?$v['table']:(isset($v['TABLE'])?$v['TABLE']:''); + $id_int = isset($v['id_int'])?$v['id_int']:(isset($v['ID_INT'])?$v['ID_INT']:''); + $id_ext = isset($v['id_ext'])?$v['id_ext']:(isset($v['ID_EXT'])?$v['ID_EXT']:''); + if($table && (!empty($id_int) || !empty($id_ext))) + { + if(!empty($id_int)) + { + $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE table = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_int = '".$this->app->DB->real_escape_string($id_int)."' AND api = '".$api_id."' LIMIT 1"); + }else{ + $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE table = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_ext = '".$this->app->DB->real_escape_string($id_ext)."' AND api = '".$api_id."' LIMIT 1"); + } + if(!empty($ergebnis)) + { + $out .= ''.$ergebnis[0]['id_int'].''.$ergebnis[0]['id_ext'].''.$ergebnis[0]['tabelle'].'
'; + } + } + } + $out = '
'; + $this->XMLResponse(1,$out); + $this->app->ExitXentral(); + } + } + + function ApiMappingSet() + { + $xml = $this->XMLPost(); + $api_id = isset($this->api_id)?$this->api_id:0; + if(is_array($xml)) + { + $list = false; + if(isset($xml['list'])) + { + $list = $xml['list']; + }elseif($xml['LIST']) + { + $list = $xml['LIST']; + } + if(!$list) + { + $table = isset($xml['table'])?$xml['table']:(isset($xml['TABLE'])?$xml['TABLE']:''); + $id_int = isset($xml['id_int'])?$xml['id_int']:(isset($xml['ID_INT'])?$xml['ID_INT']:''); + $id_ext = isset($xml['id_ext'])?$xml['id_ext']:(isset($xml['ID_EXT'])?$xml['ID_EXT']:''); + if($table && (!empty($id_int) && !empty($id_ext))) + { + $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE tabelle = '".$this->app->DB->real_escape_string($table)."' AND id_int = '".$this->app->DB->real_escape_string($id_int)."' AND api = '".$api_id."' LIMIT 1"); + if(empty($ergebnis)) + { + $this->app->DB->Insert("INSERT INTO api_mapping (tabelle, id_int, id_ext, api) VALUES ('".$this->app->DB->real_escape_string($table)."','".$this->app->DB->real_escape_string($id_int)."','".$this->app->DB->real_escape_string($id_ext)."','".$api_id."')"); + if($insertid = $this->app->DB->GetInsertID()) + { + $this->XMLResponse(1,''.$id_int.''.$id_ext.''.$table.'
'.$insertid.''."INSERT INTO api_mapping (table, id_int, id_ext, api) VALUES ('".$this->app->DB->real_escape_string($table)."','".$this->app->DB->real_escape_string($id_int)."','".$this->app->DB->real_escape_string($id_ext)."','".$api_id."')".''); + $this->app->ExitXentral(); + } + $this->XMLResponse(0); + $this->app->ExitXentral(); + } + $this->app->DB->Update("UPDATE api_mapping SET id_ext = '".$this->app->DB->real_escape_string($id_ext)."' WHERE id = '".$ergebnis[0]['id']."' LIMIT 1"); + $this->XMLResponse(1,''.$id_int.''.$id_ext.''.$table.'
'); + $this->app->ExitXentral(); + } + $this->XMLResponse(4); + $this->app->ExitXentral(); + } + $out = ''; + foreach($list as $k => $v) + { + $table = isset($v['table'])?$v['table']:(isset($v['TABLE'])?$v['TABLE']:''); + $id_int = isset($v['id_int'])?$v['id_int']:(isset($v['ID_INT'])?$v['ID_INT']:''); + $id_ext = isset($v['id_ext'])?$v['id_ext']:(isset($v['ID_EXT'])?$v['ID_EXT']:''); + if($table && (!empty($id_int) && !empty($id_ext))) + { + if(!empty($id_int)) + { + $ergebnis = $this->app->DB->SelectArr("SELECT * FROM api_mapping WHERE tabelle = '".$this->app->DB->real_escape_string($xml['table'])."' AND id_int = '".$this->app->DB->real_escape_string($id_int)."' AND api = '".$api_id."' LIMIT 1"); + } + if(!empty($ergebnis)) + { + $this->app->DB->Update("UPDATE api_mapping SET id_ext = '".$this->app->DB->real_escape_string($id_ext)."' WHERE id = '".$ergebnis[0]['id']."' LIMIT 1"); + $out .= ''.$id_int.''.$id_ext.''.$table.'
'; + }else{ + $this->app->DB->Insert("INSERT INTO api_mapping (table, id_int, id_ext, api) VALUES ('".$this->app->DB->real_escape_string($table)."','".$this->app->DB->real_escape_string($id_int)."','".$this->app->DB->real_escape_string($id_ext)."','".$api_id."')"); + $out .= ''.$id_int.''.$id_ext.''.$table.'
'; + } + } + } + $out = '
'; + $this->XMLResponse(1,$out); + $this->app->ExitXentral(); + } + } + + // allgemeine funktionen + function CheckHash() + { + $hash = $this->app->Secure->GetGET("hash"); + $api_id = (int)$this->app->Secure->GetGET("api_id"); + + try{ + $apiAccount = $this->apiAccountService->getApiAccountById($api_id); + $this->api_id = $apiAccount->getId(); + }catch (ApiAccountNotFoundException $e){ + $this->XMLResponse(9); + $this->app->ExitXentral(); + } + + if($hash !== $this->generateHash($apiAccount->getRemoteDomain(),$apiAccount->getInitKey())){ + if($api_id === 0){ + $this->XMLResponse(9); + }else{ + $this->XMLResponse(2); + } + $this->app->ExitXentral(); + } + + $guard = new PermissionGuard($this->app->Container->get('Database'), (int)$this->api_id); + $guard->checkStandardApiAction($this->app->Secure->GetGET("action")); + } + + function generateHash($domain,$key) + { + $date = gmdate('dmY'); + $hash = ""; + + for($i = 0; $i <= 200; $i++) + $hash = sha1($hash . $key . $domain . $date); + + return $hash; + } + + function getBelege() + { + return array( + 'auftrag','rechnung','gutschrift','angebot','lieferschein','bestellung','produktion','retoure','verbindlichkeit' + ); + } + + function getTabellen() + { + return array('adresse','adresse_rolle','gruppen','adresse_kontakte','artikel','verkaufspreise','einkaufspreise','stueckliste'); + } + + /** + * @param string $typ + * @param int $id + * + * @return null|string + */ + public function GetPDF($typ, $id) + { + $id = (int)$id; + if(!$id) { + return null; + } + if(!in_array($typ, $this->getBelege())) { + return null; + } + $elemente = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM `%s` WHERE `id` = %d LIMIT 1', + $typ, $id + ) + ); + if(!$elemente) { + return null; + } + + if(!defined('FPDF_FONTPATH')){ + define('FPDF_FONTPATH','lib/pdf/font/'); + } + + if(!class_exists('FPDFWAWISION')){ + if(file_exists(dirname(dirname(__DIR__)).'/conf/user_defined.php')){ + include_once dirname(dirname(__DIR__)).'/conf/user_defined.php'; + } + /*if(!defined('USEFPDF3')) + { + define('USEFPDF3',true); + }*/ + if(defined('USEFPDF3') && USEFPDF3 && file_exists(dirname(__DIR__) . '/lib/pdf/fpdf_3.php')){ + require_once(dirname(__DIR__) . '/lib/pdf/fpdf_3.php'); + }elseif(defined('USEFPDF2') && USEFPDF2){ + if(file_exists(dirname(__DIR__) . '/lib/pdf/fpdf_2.php')){ + require_once(dirname(__DIR__) . '/lib/pdf/fpdf_2.php'); + }else{ + require_once(dirname(__DIR__) . '/lib/pdf/fpdf.php'); + } + }else{ + require_once(dirname(__DIR__) . '/lib/pdf/fpdf.php'); + } + } + require_once(dirname(__DIR__).'/lib/pdf/fpdf_final.php'); + + require_once(dirname(__DIR__)."/lib/dokumente/class.superfpdf.php"); + require_once(dirname(__DIR__)."/lib/dokumente/class.etikett.php"); + if(file_exists(dirname(__DIR__)."/lib/dokumente/class.briefpapier_custom.php")) + { + require_once(dirname(__DIR__)."/lib/dokumente/class.briefpapier_custom.php"); + }else{ + require_once(dirname(__DIR__)."/lib/dokumente/class.briefpapier.php"); + } + + if(file_exists(dirname(__DIR__)."/lib/class.image.php")) + { + require_once(dirname(__DIR__)."/lib/class.image.php"); + } + + require_once(dirname(__DIR__)."/lib/dokumente/class.dokumentenvorlage.php"); + if(file_exists("lib/dokumente/class.layoutvorlagen.php"))require_once("lib/dokumente/class.layoutvorlagen.php"); + require_once(dirname(__DIR__)."/lib/dokumente/class.sepamandat.php"); + require_once(dirname(__DIR__)."/lib/dokumente/class.dokuarbeitszeit.php"); + require_once(dirname(__DIR__)."/../phpwf/plugins/class.string.php"); + if(!isset($this->app->String))$this->app->String = new WawiString(); + $classname = ucfirst($typ).'PDF'; + $classnamecustom = $classname.'Custom'; + if(!class_exists($classname) && !class_exists($classnamecustom)) + { + if(file_exists(dirname(__DIR__).'/lib/dokumente/class.'.$typ.'_custom.php')) + { + include_once(dirname(__DIR__).'/lib/dokumente/class.'.$typ.'_custom.php'); + }elseif(file_exists(dirname(__DIR__).'/lib/dokumente/class.'.$typ.'.php')) + { + include_once(dirname(__DIR__).'/lib/dokumente/class.'.$typ.'.php'); + } + } + if(class_exists($classnamecustom)) + { + $Brief = new $classnamecustom($this->app,$elemente['projekt']); + } + elseif(class_exists($classname)){ + $Brief = new $classname($this->app,$elemente['projekt']); + } + else { + return null; + } + $funktionsname = 'Get'.ucfirst($typ); + if(method_exists($Brief, $funktionsname)) { + $Brief->$funktionsname($elemente['id']); + $Brief->renderDocument(); + return $Brief->output('','S'); + } + return null; + } + + /** + * @param string $file + * @param int $receiptdocumentId + * @param bool $append + * @param null|array $options + * + * @return bool + */ + public function createReceiptdocumentQsCsv($file, $receiptdocumentId, $append = false, $options = null) + { + if(empty($file) || empty($receiptdocumentId)) { + return false; + } + $file_ex = @is_file($file); + if(!$file_ex) { + $append = false; + } + $handle = @fopen($file, $append?'a':'w'); + if(empty($handle)) { + return false; + } + $noWrap = !empty($options['nowrap']); + foreach($this->generateQsCsvArr($receiptdocumentId) as $row) { + if($noWrap) { + foreach($row as $key => $col) { + if(!is_string($col)) { + continue; + } + $row[$key] = str_replace(["\r\n","\r","\n"],' ', $col); + } + } + @fputcsv($handle, $row, ';','"'); + } + @fclose($handle); + + return @file_exists($file); + } + + /** + * @param int $receiptdocumentId + * + * @return array + */ + public function generateQsCsvArr($receiptdocumentId) + { + $elemente_positionen = $this->app->DB->Query( + sprintf( + "SELECT r.document_number, b.belegnr AS bestellung, m2.id_ext AS receiptdocument_id_ext, + m.id_ext AS receiptdocument_position_id_ext,art.ean, art.gewicht, art.herstellernummer, art.altersfreigabe, + art.lagerartikel,r.status, r.status_qs, t.amount, t.amount_good, t.amount_bad, bp.menge, bp.geliefert + FROM receiptdocument_position t + INNER JOIN receiptdocument AS r ON t.receiptdocument_id = r.id + INNER JOIN `paketannahme` AS parc ON r.parcel_receipt_id = parc.id + INNER JOIN `paketdistribution` AS pd ON parc.id = pd.paketannahme + INNER JOIN bestellung_position AS bp ON pd.bestellung_position = bp.id + INNER JOIN bestellung AS b ON bp.bestellung = b.id + LEFT JOIN artikel art ON t.article_id = art.id + LEFT JOIN api_mapping m ON m.tabelle = 'receiptdocument_position' AND m.id_int = t.id + LEFT JOIN api_mapping m2 ON m2.tabelle = 'receiptdocument' AND m2.id_int = r.id + WHERE t.receiptdocument_id = %d ", + $receiptdocumentId + ) + ); + + $rows = [ + ['r.document_number', 'bestellung', 'receiptdocument_id_ext', + 'receiptdocument_position_id_ext','ean', 'gewicht', 'herstellernummer', 'altersfreigabe', + 'lagerartikel','status', 'status_qs', 'amount', 'amount_good', 'amount_bad', 'bp.menge', 'geliefert'] + ]; + if(!empty($elemente_positionen)) { + while($row = $this->app->DB->fetch_row($elemente_positionen)) { + $rows[] = $row; + } + $this->app->DB->free($elemente_positionen); + } + + return $rows; + } + + function ApiDataToXML($typ, $id, &$xml = null, $parameter = null) + { + $n = null; + $typ = strtolower($typ); + if($xml === null) { + $xml = $this->CreateXmlObj(); + } + + if(isset($parameter['briefpapier']) && $parameter['briefpapier'] == 1) { + $briefpapier = ''; + $briefpapier2 = ''; + $logo = ''; + $briefpapier_typ = $this->app->erp->Firmendaten('hintergrund'); + + if($briefpapier_typ==='logo') + { + $logo = $this->app->erp->Firmendaten('logo'); + } + else if($briefpapier_typ==='briefpapier') + { + $briefpapier = $this->app->erp->Firmendaten('briefpapier'); + + $briefpapier2vorhanden = $this->app->erp->Firmendaten('briefpapier2vorhanden'); + if($briefpapier2vorhanden > 0) + { + $briefpapier2 = $this->app->erp->Firmendaten('briefpapier2'); + } + } + if($briefpapier && !isset($xml->xml->briefpapier)){ + $this->AddToXMLObj($xml, 'briefpapier','', $briefpapier, $n, $erg); + } + if($briefpapier2 && !isset($xml->xml->briefpapier2)){ + $this->AddToXMLObj($xml, 'briefpapier2','', $briefpapier2, $n, $erg); + } + if($logo && !isset($xml->xml->logo)){ + $this->AddToXMLObj($xml, 'logo','', $logo, $n, $erg); + } + if($briefpapier_typ && !isset($xml->xml->briefpapier_typ)){ + $this->AddToXMLObj($xml, 'briefpapier_typ','', $briefpapier_typ, $n, $erg); + } + } + $typen = $this->getTabellen(); + $belege = $this->getBelege(); + if(in_array($typ, $typen)) { + $elemente = $this->app->DB->SelectArr( + "SELECT t.*, m.id_ext ".($typ==='bestellung'?",adr.kundennummerlieferant":'')." + FROM `$typ` AS `t` ".($typ=='bestellung'?" + LEFT JOIN `adresse` AS `adr` ON t.adresse = adr.id ":"")." + LEFT JOIN `api_mapping` AS `m` ON m.api = '".$this->api_id."' AND m.tabelle = '$typ' AND m.id_int = t.id + WHERE t.id = '".($id)."' + LIMIT 1" + ); + if($elemente) { + $this->AddToXMLObj($xml, $typ,$typ.'_list', $elemente, $n, $erg); + } + } + elseif(in_array($typ, $belege)) { + $typposition = $typ.'_position'; + $elemente = $this->app->DB->SelectArr("SELECT t.*, m.id_ext FROM $typ t LEFT JOIN api_mapping m ON m.api = '".$this->api_id."' AND m.tabelle = '$typ' AND m.id_int = t.id WHERE t.id = '".($id)."' LIMIT 1"); + + if($elemente) { + $elemente[0]['anzahluebertragungen'] = 1+(int)$this->app->DB->Select("SELECT anzahl_uebertragen FROM api_request WHERE uebertragung_account = '".$this->uebertragung_account."' and typ = '$typ' AND parameter1 = '$id' LIMIT 1"); + if(isset($parameter['pdf']) && $parameter['pdf'] == 1) { + $file = $this->GetPDF($typ, $id); + if(!empty($file)) { + $elemente[0]['pdf'] = base64_encode($file); + } + } + if(isset($parameter['gln_freifeld'])) { + $elemente[0]['gln_empfaenger'] = $this->app->DB->Select("SELECT freifeld".(int)$parameter['gln_freifeld']." FROM adresse WHERE id = '".$elemente[0]['adresse']."' LIMIT 1"); + } + if($typ === 'lieferschein' || $typ === 'retoure') { + $auftragsdaten = $elemente[0]['auftragid'] <= 0 ? null : $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id = '".$elemente[0]['auftragid']."' LIMIT 1"); + if($auftragsdaten) { + $elemente[0]['tatsaechlicheslieferdatum'] = $auftragsdaten[0]['tatsaechlicheslieferdatum']; + $elemente[0]['lieferdatum'] = $auftragsdaten[0]['lieferdatum']; + $elemente[0]['lieferdatumkw'] = $auftragsdaten[0]['lieferdatumkw']; + $elemente[0]['rechnung_name'] = $auftragsdaten[0]['name']; + $elemente[0]['auftrag_name'] = $auftragsdaten[0]['name']; + $elemente[0]['rechnung_anrede'] = $auftragsdaten[0]['anrede']; + $elemente[0]['auftrag_anrede'] = $auftragsdaten[0]['anrede']; + $elemente[0]['rechnung_strasse'] = $auftragsdaten[0]['strasse']; + $elemente[0]['auftrag_strasse'] = $auftragsdaten[0]['strasse']; + $elemente[0]['rechnung_adresszusatz'] = $auftragsdaten[0]['adresszusatz']; + $elemente[0]['auftrag_adresszusatz'] = $auftragsdaten[0]['adresszusatz']; + $elemente[0]['rechnung_ansprechpartner'] = $auftragsdaten[0]['ansprechpartner']; + $elemente[0]['auftrag_ansprechpartner'] = $auftragsdaten[0]['ansprechpartner']; + $elemente[0]['rechnung_abteilung'] = $auftragsdaten[0]['abteilung']; + $elemente[0]['auftrag_abteilung'] = $auftragsdaten[0]['abteilung']; + $elemente[0]['rechnung_unterabteilung'] = $auftragsdaten[0]['unterabteilung']; + $elemente[0]['auftrag_unterabteilung'] = $auftragsdaten[0]['unterabteilung']; + $elemente[0]['rechnung_bundesstaat'] = $auftragsdaten[0]['bundesstaat']; + $elemente[0]['auftrag_bundesstaat'] = $auftragsdaten[0]['bundesstaat']; + $elemente[0]['rechnung_plz'] = $auftragsdaten[0]['plz']; + $elemente[0]['auftrag_plz'] = $auftragsdaten[0]['plz']; + $elemente[0]['rechnung_ort'] = $auftragsdaten[0]['ort']; + $elemente[0]['auftrag_ort'] = $auftragsdaten[0]['ort']; + $elemente[0]['rechnung_land'] = $auftragsdaten[0]['land']; + $elemente[0]['auftrag_land'] = $auftragsdaten[0]['land']; + $elemente[0]['rechnung_gln'] = $auftragsdaten[0]['gln']; + $elemente[0]['auftrag_gln'] = $auftragsdaten[0]['gln']; + $elemente[0]['internet'] = $auftragsdaten[0]['internet']; + $elemente[0]['shopextid'] = $auftragsdaten[0]['shopextid']; + $elemente[0]['auftragextid'] = $this->GetExtIDFromIntID('auftrag',$elemente[0]['auftragid']); + } + + // wenn es eine eigene Rechnung bibt dann fuer die rechnunsdaten die infos da nehmen + $rechnungsdaten = $elemente[0]['auftragid'] <= 0 ? null : $this->app->DB->SelectArr("SELECT * FROM rechnung WHERE auftragid = '".$elemente[0]['auftragid']."' LIMIT 1"); + if($rechnungsdaten) + { + $elemente[0]['rechnung_name'] = $rechnungsdaten[0]['name']; + $elemente[0]['rechnung_anrede'] = $rechnungsdaten[0]['anrede']; + $elemente[0]['rechnung_strasse'] = $rechnungsdaten[0]['strasse']; + $elemente[0]['rechnung_adresszusatz'] = $rechnungsdaten[0]['adresszusatz']; + $elemente[0]['rechnung_ansprechpartner'] = $rechnungsdaten[0]['ansprechpartner']; + $elemente[0]['rechnung_abteilung'] = $rechnungsdaten[0]['abteilung']; + $elemente[0]['rechnung_unterabteilung'] = $rechnungsdaten[0]['unterabteilung']; + $elemente[0]['rechnung_plz'] = $rechnungsdaten[0]['plz']; + $elemente[0]['rechnung_ort'] = $rechnungsdaten[0]['ort']; + $elemente[0]['rechnung_bundesstaat'] = $rechnungsdaten[0]['bundesstaat']; + $elemente[0]['rechnung_land'] = $rechnungsdaten[0]['land']; + $elemente[0]['rechnung_gln'] = $rechnungsdaten[0]['gln']; + } + + + if($typ === 'lieferschein'){ + $tracking = (string)$this->app->DB->Select("SELECT tracking FROM versand WHERE lieferschein = '" . $elemente[0]['id'] . "' AND tracking <> '' AND lieferschein <> 0 ORDER by id DESC LIMIT 1"); + if($tracking !== '') { + $elemente[0]['tracking'] = $tracking; + } + } + } + if($typ === 'rechnung') { + $auftragsdaten = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id = '".$elemente[0]['auftragid']."' LIMIT 1"); + if($auftragsdaten) + { + $elemente[0]['tatsaechlicheslieferdatum'] = $auftragsdaten[0]['tatsaechlicheslieferdatum']; + $elemente[0]['lieferdatum'] = $auftragsdaten[0]['lieferdatum']; + $elemente[0]['lieferdatumkw'] = $auftragsdaten[0]['lieferdatumkw']; + $elemente[0]['liefername'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['liefername']:$auftragsdaten[0]['name']; + $elemente[0]['lieferstrasse'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['liefername']:$auftragsdaten[0]['strasse']; + $elemente[0]['lieferadresszusatz'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferadresszusatz']:$auftragsdaten[0]['adresszusatz']; + $elemente[0]['lieferansprechpartner'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferansprechpartner']:$auftragsdaten[0]['ansprechpartner']; + $elemente[0]['lieferabteilung'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferabteilung']:$auftragsdaten[0]['abteilung']; + $elemente[0]['lieferunterabteilung'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferunterabteilung']:$auftragsdaten[0]['unterabteilung']; + $elemente[0]['lieferplz'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferplz']:$auftragsdaten[0]['plz']; + $elemente[0]['lieferort'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferort']:$auftragsdaten[0]['ort']; + $elemente[0]['lieferland'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferland']:$auftragsdaten[0]['land']; + $elemente[0]['lieferbundesstaat'] = $auftragsdaten[0]['abweichendelieferadresse'] == 1? $auftragsdaten[0]['lieferbundesstaat']:$auftragsdaten[0]['bundesstaat']; + } + $tracking = (string)$this->app->DB->Select("SELECT tracking FROM versand WHERE rechnung = '".$elemente[0]['id']."' AND tracking <> '' AND rechnung <> 0 ORDER by id DESC LIMIT 1"); + if($tracking !== '')$elemente[0]['tracking'] = $tracking; + + if($elemente[0]['lieferschein'] > 0){ + $lieferscheindaten = $this->app->DB->SelectArr("SELECT * FROM lieferschein WHERE id = '".$elemente[0]['lieferschein']."' LIMIT 1"); + if($lieferscheindaten) + { + $elemente[0]['liefername'] = $lieferscheindaten[0]['name']; + $elemente[0]['lieferstrasse'] = $lieferscheindaten[0]['strasse']; + $elemente[0]['lieferadresszusatz'] = $lieferscheindaten[0]['adresszusatz']; + $elemente[0]['lieferansprechpartner'] = $lieferscheindaten[0]['ansprechpartner']; + $elemente[0]['lieferabteilung'] = $lieferscheindaten[0]['abteilung']; + $elemente[0]['lieferunterabteilung'] = $lieferscheindaten[0]['unterabteilung']; + $elemente[0]['lieferplz'] = $lieferscheindaten[0]['plz']; + $elemente[0]['lieferort'] = $lieferscheindaten[0]['ort']; + $elemente[0]['lieferland'] = $lieferscheindaten[0]['land']; + $elemente[0]['lieferbundesstaat'] = $lieferscheindaten[0]['bundesstaat']; + $elemente[0]['lieferdatum'] = $lieferscheindaten[0]['datum']; + $elemente[0]['lieferschein'] = $lieferscheindaten[0]['belegnr']; + $elemente[0]['gln_lieferadresse'] = $lieferscheindaten[0]['gln']; + } + } + } + $lieferid = 0; + if($typ !== 'auftrag') + { + $lieferid = $this->app->DB->Select("SELECT lieferid FROM auftrag WHERE id = '".$elemente[0]['auftragid']."' LIMIT 1"); + }else{ + $lieferid = $auftragsdaten[0]['lieferid']; + } + if($lieferid && $elemente[0]['gln_lieferadresse']=="") + { + $gln_lieferadresse = $this->app->DB->Select("SELECT gln FROM lieferadressen WHERE id = '$lieferid' LIMIT 1"); + if($gln_lieferadresse)$elemente[0]['gln_lieferadresse'] = $gln_lieferadresse; + } + + $rabatt = 0; + $gebuehr = 0; + $summe = 0; + $summeR = 0; + $summeV = 0; + $totalR = 0; + $totalV = 0; + $elemente_positionen = $typ === 'verbindlichkeit' + ?null: + $this->app->DB->SelectArr( + "SELECT t.*, m.id_ext, art.ean, art.gewicht,art.herstellernummer, art.altersfreigabe, art.lagerartikel " + .($typ === 'bestellung'?(" ,art.nummer "):'')." + FROM `$typposition` AS `t` + LEFT JOIN `artikel` AS `art` ON t.artikel = art.id + LEFT JOIN `api_mapping` AS `m` ON m.tabelle = '$typposition' AND m.id_int = t.id + WHERE t.$typ = '".($elemente[0]['id'])."' " + ); + if($elemente_positionen) + { + if(isset($elemente_positionen[0]['preis'])) + { + foreach($elemente_positionen as $key => $value) + { + if($typ === 'bestellung' && $value['bestellnummer'] == '')$elemente_positionen[$key]['bestellnummer'] = $value['nummer']; + if($value['umsatzsteuer'] !== "ermaessigt") $value['umsatzsteuer'] = "normal"; + $netto_gesamt = $value['menge']*($value['preis']-($value['preis']/100*$value['rabatt'])); + $summe = $summe + $netto_gesamt; + + if(is_null($value['steuersatz']) || $value['steuersatz'] < 0) { + if ($value['umsatzsteuer'] == "" || $value['umsatzsteuer'] === "normal") { + $summeV = $summeV + (($netto_gesamt / 100) * $this->app->erp->GetSteuersatzNormal(false, $id, "rechnung")); + $totalV = $totalV + $netto_gesamt; + } elseif ($value['umsatzsteuer'] === 'befreit') { + + } else { + $summeR = $summeR + (($netto_gesamt / 100) * $this->app->erp->GetSteuersatzErmaessigt(false, $id, "rechnung")); + $totalR = $totalR + $netto_gesamt; + } + } + + if($value['preis'] < -0.0001) + { + $rabatt -= $netto_gesamt; + }else{ + $gebuehr_artikel = $this->app->DB->Select("SELECT gebuehr FROM artikel WHERE id = '".$value['artikel']."' LIMIT 1"); + if($gebuehr_artikel){ + $gebuehr += $netto_gesamt; + } + } + } + if($rabatt) + { + $elemente[0]['rabatt'] = round($rabatt,2); + }else $elemente[0]['rabatt'] = 0; + if($gebuehr) + { + $elemente[0]['gebuehr'] = round($gebuehr,2); + }else $elemente[0]['gebuehr'] = 0; + if($this->app->erp->RechnungMitUmsatzeuer($id)) + { + $elemente[0]['ust'] = round($summeR+$summeV,2); + $elemente[0]['ust_ermaessigt'] = round($summeR,2); + $elemente[0]['ust_normal'] = round($summeV,2); + + }else { + $elemente[0]['ust'] = 0; + } + } + } + if(isset($parameter['anhang_base64']) && $parameter['anhang_base64'] == 1) + { + $anhaenge = $this->app->DB->SelectArr("SELECT DISTINCT s.datei FROM + datei d INNER JOIN datei_stichwoerter s ON d.id=s.datei INNER JOIN datei_version v ON v.datei=d.id WHERE s.objekt LIKE '$typ' AND s.parameter = '$id'"); + if($anhaenge) + { + $elemente[0]['anhaenge'] = array(); + foreach($anhaenge as $v) + { + $datei = $this->app->erp->GetDatei($v['datei']); + if($datei != '') + { + $elemente[0]['anhaenge']['anhang'][] = array('datei'=>base64_encode($datei), 'name'=>$this->app->erp->GetDateiName($v['datei'])); + } + unset($datei); + } + } + }elseif(isset($parameter['anhaenge'])) + { + if(is_array($parameter['anhaenge']) && count($parameter['anhaenge']) > 0) + { + foreach($parameter['anhaenge'] as $v) + { + $elemente[0]['anhaenge']['anhang'][] = $v; + } + } + } + $this->AddToXMLObj($xml, $typ,$typ.'_list', $elemente, $n, $erg); + if($elemente_positionen) + { + $this->AddToXMLObj($xml, $typposition,$typposition.'_list', $elemente_positionen, $erg, $erg2); + } + } + } + elseif($typ === 'versand') { + $elemente = $this->app->DB->SelectArr("SELECT t.*, m.id_ext FROM $typ t LEFT JOIN api_mapping m ON m.api = '".$this->api_id."' AND m.tabelle = '$typ' AND m.id_int = t.id WHERE t.id = '".($id)."' LIMIT 1"); + if($elemente) { + $auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '".$elemente[0]['lieferschein']."' LIMIT 1"); + if($auftragid) { + $sprache = $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id = '$auftragid'"); + if($sprache != ''){ + $elemente[0]['tracking_sprache'] = $sprache; + } + $auftragextid = $this->app->DB->Select("SELECT id_ext FROM api_mapping m WHERE m.tabelle = 'auftrag' AND m.id_int = '".$auftragid."' AND api = '".$this->api_id."'"); + if($auftragextid){ + $elemente[0]['auftragextid'] = $auftragextid; + } + } + + $this->AddToXMLObj($xml, 'lieferschein','lieferschein_list', $elemente, $n, $erg); + } + } + elseif($typ === 'receiptdocumentqs') { + $typ = 'receiptdocument'; + $typposition = 'receiptdocument_position'; + $elemente = $this->app->DB->SelectArr( + "SELECT t.*, m.id_ext + FROM receiptdocument t + INNER JOIN `paketannahme` AS parc ON t.parcel_receipt_id = parc.id + LEFT JOIN api_mapping m ON m.api = '".$this->api_id."' AND m.tabelle = 'receiptdocument' AND m.id_int = t.id + WHERE t.id = '".($id)."' LIMIT 1"); + + if($elemente) { + $this->AddToXMLObj($xml, $typ,$typ.'_list', $elemente, $n, $erg); + $elemente_positionen = $this->app->DB->SelectArr( + "SELECT t.*, m.id_ext, art.ean, art.gewicht,art.herstellernummer, art.altersfreigabe, + art.lagerartikel, b.belegnr + FROM receiptdocument_position t + INNER JOIN receiptdocument AS r ON t.receiptdocument_id = r.id + INNER JOIN `paketannahme` AS parc ON r.parcel_receipt_id = parc.id + INNER JOIN `paketdistribution` AS pd ON parc.id = pd.paketannahme + INNER JOIN bestellung_position AS bp ON pd.bestellung_position = bp.id + INNER JOIN bestellung AS b ON bp.bestellung = b.id + LEFT JOIN artikel art ON t.article_id = art.id + LEFT JOIN api_mapping m ON m.tabelle = 'receiptdocument_position' AND m.id_int = t.id + WHERE t.receiptdocument_id = '".($elemente[0]['id'])."' "); + if($elemente_positionen) { + $this->AddToXMLObj($xml, $typposition,$typposition.'_list', $elemente_positionen, $erg, $erg2); + } + } + } + } + + function ParseXML($dateiname, $api = 0, $uebertragung = 0, $isfile = true) + { + $this->lagerzahlen = null; + $this->bestBeforeBatchArticleStock = []; + $api = (int)$api; + $uebertragung = (int)$uebertragung; + if(!$api && !$uebertragung){ + return false; + } + if(!$api){ + $api = $this->app->DB->Select("SELECT api FROM uebertragungen_account WHERE id = '$uebertragung' LIMIT 1"); + } + //if(!$api || !$this->app->DB->Select("SELECT id FROM uebertragungen_account WHERE id = '$uebertragung' AND aktiv = 1 AND typ = 'lokal' LIMIT 1"))return false; + //if(!$api)return false; + $this->api_id = $api; + $xml = $this->LoadFromXML($dateiname, $isfile); + if(!$xml) + { + if($uebertragung) + { + $obj = $this->app->erp->LoadModul('uebertragungen'); + if($obj) + { + $obj->datei_id = $this->datei_id; + if(!is_file($dateiname)) + { + $obj->AddUbertragungMonitorLog($uebertragung, $this->datei_id, 0, 'download_error','Datei konnte nicht heruntergeladen werden'); + }elseif('' === (string)file_get_contents($dateiname)) + { + $obj->AddUbertragungMonitorLog($uebertragung, $this->datei_id, 0, 'file_empty','Datei ist leer'); + }else{ + $obj->AddUbertragungMonitorLog($uebertragung, $this->datei_id, 0, 'xml_parseerror','XML konnte nicht geparsed werden'); + } + } + } + + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragung','datei','".$this->app->DB->real_escape_string($dateiname)."','xml_fehler','XML konnte nicht gelesen werden')"); + return false; + } + + if(!isset($xml->xml) && get_class($xml) !== 'stdClass') { + return false; + } + + if((get_class($xml) === 'stdClass' && (!empty($xml)?count($xml):0) > 0) || (isset($xml->xml) && (!empty($xml->xml)?count($xml->xml):0) > 0)) { + foreach($xml as $key0 => $value0) { + if($key0 === 'status') { + $status = &$value0; + break; + } + } + $ok = true; + if(isset($status)){ + if(isset($status->messageCode) && $status->messageCode != 1) { + $ok = false; + } + } + + foreach($xml as $key0 => $value0) { + if($key0 === 'xml'){ + $xml_inhalt = &$value0; + break; + } + } + + $typen = $this->getTabellen(); + foreach($typen as $v){ + $typen_list[] = $v.'_list'; + } + $belege = $this->getBelege(); + foreach($belege as $v){ + $belege_list[] = $v.'_list'; + } + if(isset($xml_inhalt)){ + foreach($xml_inhalt as $key => $value) { + if(in_array($key,$belege) || in_array($key,$typen)) { + $this->ParseTeilXML($key, $value, $uebertragung); + } + if(in_array($key,$belege_list) || in_array($key,$typen_list)){ + foreach($value as $key2 => $value2) { + if(!in_array($key2,$belege) && !in_array($key2,$typen)) { + continue; + } + $this->ParseTeilXML($key2, $value2, $uebertragung); + if(empty($this->app->User) || !method_exists($this->app->User,'GetID') || !$this->app->User->GetID()) { + $this->app->DB->Update( + "UPDATE `prozessstarter` + SET `letzteausfuerhung`=DATE_ADD(NOW(), INTERVAL 2 MINUTE), `mutex` = 1,`mutexcounter`=0 + WHERE `parameter` = 'api_uebertragungen'" + ); + } + } + } + if(empty($this->app->User) || !method_exists($this->app->User,'GetID') || !$this->app->User->GetID()) { + $this->app->DB->Update( + "UPDATE `prozessstarter` + SET `letzteausfuerhung`=DATE_ADD(NOW(), INTERVAL 2 MINUTE), `mutex` = 1,`mutexcounter`=0 + WHERE `parameter` = 'api_uebertragungen'" + ); + } + } + } + } + $this->lagerzahlen = null; + if((int)$uebertragung <= 0 || empty($this->bestBeforeBatchArticleStock)) { + $this->bestBeforeBatchArticleStock = []; + + return true; + } + $storageMethod = (string)$this->app->DB->Select( + "SELECT `storage_import_method` FROM `uebertragungen_account` WHERE `id` = {$uebertragung}" + ); + if($storageMethod === 'overwrite'){ + $this->updateStockByBestBeforeBatch(true); + } + if($storageMethod === 'overwritewithoutdelete'){ + $this->updateStockByBestBeforeBatch(false); + } + $this->bestBeforeBatchArticleStock = []; + + return true; + } + + /** + * @param int $articleId + * @param int $storageLocationId + * @param bool $isBestBefore + * @param bool $isBatch + */ + public function removeBestBeforeBatchesNotExistsInXML( + int $articleId, + int $storageLocationId, + bool $isBestBefore, + bool $isBatch + ): void + { + if(!$isBatch && !$isBestBefore) { + return; + } + if($articleId <= 0 || $storageLocationId <= 0) { + return; + } + if(empty($this->bestBeforeBatchArticleStock[$articleId])) { + return; + } + if(!isset($this->bestBeforeBatchArticleStock[$articleId][$storageLocationId])) { + return; + } + if($isBestBefore) { + $bestBefores = []; + foreach($this->bestBeforeBatchArticleStock[$articleId][$storageLocationId]['entries'] as $entry) { + if(!empty($entry['bestbefore'])) { + $bestBefore = $entry['bestbefore']; + if(strpos($bestBefore, '.') !== false) { + $bestBefore = $this->app->String->Convert(substr($bestBefore,0,10), '%1.%2.%3', '%3-%2-%1'); + } + if($isBatch) { + if(!isset($bestBefores[$bestBefore][(string)$entry['batch']])) { + $bestBefores[$bestBefore][(string)$entry['batch']] = 0; + } + $bestBefores[$bestBefore][(string)$entry['batch']] += $entry['quantity']; + } + else { + if(!isset($bestBefores[$bestBefore])) { + $bestBefores[$bestBefore] = 0; + } + $bestBefores[$bestBefore] += (float)$entry['quantity']; + } + } + } + + if($isBatch) { + $bestBeforeStocks = $this->app->DB->SelectArr( + "SELECT `mhddatum`, `charge`, `menge`, `id` + FROM `lager_mindesthaltbarkeitsdatum` + WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationId} + ORDER BY `mhddatum`, `charge`, `menge`" + ); + } + else { + $bestBeforeStocks = $this->app->DB->SelectArr( + "SELECT `mhddatum`, `menge`, `id` + FROM `lager_mindesthaltbarkeitsdatum` + WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationId} + ORDER BY `mhddatum`, `charge`, `menge`" + ); + } + if(empty($bestBeforeStocks)) { + return; + } + + foreach($bestBeforeStocks as $bestBeforeStock) { + if($bestBeforeStock['menge'] <= 0) { + $this->app->DB->Delete("DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = {$bestBeforeStock['id']}"); + continue; + } + if(!isset($bestBefores[$bestBeforeStock['mhddatum']])) { + $this->app->DB->Delete("DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = {$bestBeforeStock['id']}"); + $this->app->erp->MHDLog( + $articleId, $storageLocationId, 0, $bestBeforeStock['mhd'], $bestBeforeStock['menge'], 'API Korrektur' + ); + if($isBatch) { + $this->app->erp->ChargeAuslagernLog( + $articleId, $storageLocationId, $bestBeforeStock['charge'], $bestBeforeStock['menge'], 'API Korrektur' + ); + } + continue; + } + if($isBatch && !isset($bestBefores[$bestBeforeStock['mhddatum']][$bestBeforeStock['charge']])) { + $this->app->DB->Delete("DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = {$bestBeforeStock['id']}"); + $this->app->erp->MHDLog( + $articleId, $storageLocationId, 0, $bestBeforeStock['mhd'], $bestBeforeStock['menge'], 'API Korrektur' + ); + $this->app->erp->ChargeAuslagernLog( + $articleId, $storageLocationId, $bestBeforeStock['charge'], $bestBeforeStock['menge'], 'API Korrektur' + ); + continue; + } + } + } + elseif($isBatch) { + $batches = []; + foreach($this->bestBeforeBatchArticleStock[$articleId][$storageLocationId]['entries'] as $entry) { + $batch = $entry['batch']; + if(!isset($batches[$batch])) { + $batches[$batch] = 0; + } + $batches[$batch] += (float)$entry['quantity']; + } + $batchStocks = $this->app->DB->SelectArr( + "SELECT `charge`, `menge`, `id` + FROM `lager_charge` + WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationId} + ORDER BY `charge`, `menge`" + ); + if(empty($batchStocks)) { + return; + } + foreach($batchStocks as $batchStock) { + if($batchStock['menge'] <= 0) { + $this->app->DB->Delete("DELETE FROM `lager_charge` WHERE `id` = {$batchStock['id']}"); + continue; + } + if(!isset($batches[$batchStock['charge']])) { + $this->app->DB->Delete("DELETE FROM `lager_charge` WHERE `id` = {$batchStock['id']}"); + $this->app->erp->Chargenlog( + $articleId, $storageLocationId, 0, $batchStock['charge'], $batchStock['menge'], 'API Korrektur' + ); + } + } + } + } + + /** + * @param bool $deleteOtherStock + */ + public function updateStockByBestBeforeBatch(bool $deleteOtherStock = true): void + { + if(empty($this->bestBeforeBatchArticleStock)){ + return; + } + foreach ($this->bestBeforeBatchArticleStock as $articleId => $stocks) { + if(empty($articleId) || empty($stocks)){ + continue; + } + $article = $this->app->DB->SelectRow( + "SELECT `projekt`, `chargenverwaltung`, `mindesthaltbarkeitsdatum`, `seriennummern` + FROM `artikel` WHERE `id` = {$articleId} LIMIT 1" + ); + if(empty($article)){ + continue; + } + $projectId = $article['projekt']; + foreach ($stocks as $storageLocationIndex => $stockEntry) { + if(empty($storageLocationIndex)){ + continue; + } + if($deleteOtherStock){ + $this->removeBestBeforeBatchesNotExistsInXML( + (int)$articleId, + (int)$storageLocationIndex, + $article['mindesthaltbarkeitsdatum'] > 0, + $article['chargenverwaltung'] > 0 + ); + } + + if(!empty($article['mindesthaltbarkeitsdatum'])){ + $stock = (float)$this->app->DB->Select( + "SELECT SUM(`menge`) + FROM `lager_mindesthaltbarkeitsdatum` + WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationIndex} AND `menge` > 0" + ); + }elseif(!empty($article['chargenverwaltung'])){ + $stock = (float)$this->app->DB->Select( + "SELECT SUM(`menge`) + FROM `lager_charge` + WHERE `artikel` = {$articleId} AND `lager_platz` = {$storageLocationIndex} AND `menge` > 0" + ); + }else{ + continue; + } + $inStock = (float)$this->app->erp->ArtikelImLagerPlatz($articleId, $storageLocationIndex); + if(round($inStock, 4) === round($stock, 4)){ + continue; + } + if($inStock < $stock){ + $this->app->erp->LagerEinlagern( + $articleId, + $stock - $inStock, + $storageLocationIndex, + $projectId, + 'API Korrektur' + ); + continue; + } + $this->app->erp->LagerAuslagernRegal( + $articleId, $storageLocationIndex, $inStock - $stock, $projectId, 'API Korrektur' + ); + } + } + } + + /** + * @param string $tabelle + * @param int $id_int + * @param string $id_ext + * @param int $api + * + * @return bool + */ + public function AddMapping($tabelle, $id_int, $id_ext, $api = 0) + { + if(!$api){ + $api = $this->api_id; + } + $api = (int)$api; + if(!$api){ + return false; + } + $checkmapping = $this->app->DB->SelectArr("SELECT id, id_ext FROM api_mapping WHERE api = '$api' AND tabelle = '$tabelle' AND id_int = '$id_int' LIMIT 1"); + if($checkmapping) { + if($checkmapping[0]['id_ext'] == '') { + $this->app->DB->Update("UPDATE api_mapping SET id_ext = '".$this->app->DB->real_escape_string($id_ext)."' WHERE id = '".$checkmapping[0]['id']."' LIMIT 1"); + return true; + } + } + else{ + $this->app->DB->Insert("INSERT INTO api_mapping (id_int, tabelle, id_ext, api) VALUES ('$id_int','$tabelle','".$this->app->DB->real_escape_string($id_ext)."','$api')"); + return true; + } + + return false; + } + + function UpdateMappingXML($typ, &$xml) + { + $typen = $this->getTabellen(); + $belege = $this->getBelege(); + $is_beleg = in_array($typ, $belege); + $is_typ = false; + if(!$is_beleg){ + $is_typ = in_array($typ, $typen); + } + if(!$is_typ && !$is_beleg) { + return false; + } + + if(isset($xml->id_ext)) { + $id_ext = (string)$xml->id_ext; + if($id_ext != '') { + $id = 0; + if(isset($xml->id)){ + $id = (int)$xml->id; + } + if($id > 0) { + $this->AddMapping($typ, $id, $id_ext); + } + } + } + if(!$is_beleg) { + return true; + } + + if(!is_array($xml) && !is_object($xml)) { + return true; + } + if((!empty($xml)?count($xml):0) === 0) { + return true; + } + + foreach($xml as $key => $value) { + if($key == $typ.'_position_list'){ + if((is_array($value) || is_object($value)) && (!empty($value)?count($value):0) > 0) { + foreach($value as $key2 => $value2) { + if($key2 === $typ.'_position' && isset($value2->id_ext)) { + $id_ext2 = (string)$value2->id_ext; + if($id_ext2 != '') { + $id2 = 0; + if(isset($value2->id)){ + $id2 = (int)$value2->id; + } + if($id2 > 0) { + $this->AddMapping($typ.'_position', $id2, $id_ext2); + } + } + } + } + } + } + elseif($key === $typ.'_position' && isset($value->id_ext)) { + $id_ext2 = (string)$value->id_ext; + if($id_ext2 != '') { + $id2 = 0; + if(isset($value->id)) { + $id2 = (int)$value->id; + } + if($id2 > 0) { + $this->AddMapping($typ.'_position', $id2, $id_ext2); + } + } + } + } + + return true; + } + + public function GetIDFromFeld($typ, &$xml) + { + if(empty($typ)){ + return false; + } + + if(!is_object($xml) && !is_array($xml)) { + return false; + } + + if((!empty($xml)?count($xml):0) === 0) { + return false; + } + $id = 0; + + $id_ext = ''; + if(isset($xml->id_ext)){ + $id_ext = (string)$xml->id_ext; + } + if($id_ext != '') { + $id = (int)$this->app->DB->Select( + sprintf( + "SELECT id_int + FROM api_mapping + WHERE api = %d AND api != 0 AND tabelle = '%s' AND id_ext = '%s' AND id_int > 0 + LIMIT 1", + $this->api_id, $typ, $this->app->DB->real_escape_string($id_ext) + ) + ); + if($id) { + return $id; + } + } + if(isset($xml->id) && $typ !== 'artikel' && $typ !== 'auftrag' && $typ !== 'bestellung' && $typ !== 'versand'){ + if(in_array($typ, ['lieferschein', 'retoure','rechnung','gutschrift'])) { + $id = (int)$this->app->DB->Select(sprintf('SELECT `id` FROM `%s` WHERE `id` = %d LIMIT 1', $typ, (int)$xml->id)); + } + else{ + $id = (int)$xml->id; + } + } + if($id){ + return $id; + } + $projekt = $this->app->DB->Select( + sprintf( + 'SELECT projekt FROM api_account WHERE id = %d AND id != 0 LIMIT 1', + $this->api_id + ) + ); + $eigenernummernkreis = false; + if($projekt) { + $eigenernummernkreis = $this->app->DB->Select( + sprintf( + 'SELECT eigenernummernkreis FROM projekt WHERE id = %d LIMIT 1', + $projekt + ) + ); + } + switch($typ) { + case 'artikel': + //nummer + if(!empty($xml->nummer) && $xml->nummer != '') { + $nummer = trim((string)$xml->nummer); + if($nummer != '') { + if($eigenernummernkreis) { + $id = $this->app->DB->Select( + sprintf( + "SELECT id + FROM artikel + WHERE nummer <> 'DEL' AND nummer = '%s' AND nummer <> '' AND projekt = %d AND geloescht <> 1 + LIMIT 1", + $this->app->DB->real_escape_string($nummer), $projekt + ) + ); + } + else { + $id = $this->app->DB->Select( + sprintf( + "SELECT id + FROM artikel + WHERE nummer <> 'DEL' AND nummer = '%s' AND nummer <> '' AND geloescht <> 1 + LIMIT 1", + $this->app->DB->real_escape_string($nummer) + ) + ); + } + if($id) { + return $id; + } + } + } + + //ean + if(!empty($xml->ean) && $xml->ean != '') { + $ean = trim((string)$xml->ean); + if($ean != '') { + if($eigenernummernkreis) { + $id = $this->app->DB->Select( + sprintf( + "SELECT id + FROM artikel + WHERE nummer <> 'DEL' AND ean = '%s' AND projekt = %d AND geloescht <> 1 AND ean <> '' + ORDER BY intern_gesperrt + LIMIT 1", + $this->app->DB->real_escape_string($ean), $projekt + ) + ); + } + else { + $id = $this->app->DB->Select( + sprintf( + "SELECT id + FROM artikel + WHERE nummer <> 'DEL' AND ean = '%s' AND geloescht <> 1 AND ean <> '' + ORDER BY intern_gesperrt + LIMIT 1", + $this->app->DB->real_escape_string($ean) + ) + ); + } + if($id) { + return $id; + } + } + } + //herstellernummer + if(isset($xml->herstellernummer) && $xml->herstellernummer != '') { + $herstellernummer = trim((string)$xml->herstellernummer); + if($herstellernummer != '') { + if($eigenernummernkreis) { + $id = $this->app->DB->Select( + sprintf( + "SELECT id + FROM artikel + WHERE nummer <> 'DEL' AND herstellernummer = '%s' AND herstellernummer <> '' + AND projekt = %d AND geloescht <> 1 + ORDER BY intern_gesperrt + LIMIT 1", + $this->app->DB->real_escape_string($herstellernummer), $projekt + ) + ); + } + else{ + $id = $this->app->DB->Select( + sprintf( + "SELECT id + FROM artikel + WHERE nummer <> 'DEL' AND herstellernummer = '%s' AND herstellernummer <> '' + AND geloescht <> 1 + ORDER BY intern_gesperrt + LIMIT 1", + $this->app->DB->real_escape_string($herstellernummer) + ) + ); + } + if($id) { + return $id; + } + } + } + + if(!empty($this->uebertragung_account) && (!empty($xml->bestellnummer) || !empty($xml->nummer))) { + if( + $lieferant = $this->app->DB->Select( + 'SELECT adresselieferant FROM uebertragungen_account + WHERE lieferantenbestellnummer = 1 AND + id = '.$this->uebertragung_account + ) + ) { + $bestellnummer = trim(!empty($xml->bestellnummer)?(string)$xml->bestellnummer:(string)$xml->nummer); + $id = $this->app->DB->Select( + sprintf( + 'SELECT art.id + FROM einkaufspreise AS ek + INNER JOIN artikel AS art ON ek.artikel = art.id + WHERE ek.bestellnummer = \'%s\' AND ek.bestellnummer <> \'\' AND ek.adresse = %d AND + ( + IFNULL(ek.gueltig_bis,\'0000-00-00\') = \'0000-00-00\' OR + ek.gueltig_bis >= CURDATE() + ) + LIMIT 1', + $this->app->DB->real_escape_string($bestellnummer),$lieferant + ) + ); + if($id > 0) { + return $id; + } + } + } + break; + case 'lieferschein': + case 'retoure': + case 'rechnung': + case 'auftrag': + case 'gutschrift': + case 'angebot': + if(isset($xml->belegnr) && (string)$xml->belegnr != ''){ + $id = $this->app->DB->Select("SELECT id FROM $typ WHERE belegnr = '".$this->app->DB->real_escape_string((string)$xml->belegnr)."' LIMIT 1"); + } + if(!$id && ($typ === 'lieferschein' || $typ === 'retoure')) + { + if(!empty($xml->auftrag) && (string)$xml->auftrag != '') { + $auftragid = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr = '".$this->app->DB->real_escape_string((string)$xml->auftrag)."' LIMIT 1"); + if($auftragid) { + if($typ === 'lieferschein'){ + $id = $this->app->DB->Select("SELECT `id` FROM `lieferschein` WHERE `auftragid` = '$auftragid' AND `status` <> 'storniert' LIMIT 1"); + } + else { + $id = $this->app->DB->Select("SELECT `id` FROM `retoure` WHERE `auftragid` = '$auftragid' AND `status` <> 'storniert' LIMIT 1"); + } + } + } + } + if($id) { + return $id; + } + break; + case 'lieferschein_position': + case 'retoure_position': + case 'rechnung_position': + case 'auftrag_position': + case 'gutschrift_position': + case 'angebot_position': + $_ptyp = str_replace('_position','',$typ); + if(isset($xml->$_ptyp) && isset($xml->sort)) { + $id = $this->app->DB->Select("SELECT id FROM $typ WHERE $_ptyp = '".(int)$xml->$_ptyp."' AND sort = '".(int)$xml->sort."' AND $_ptyp != '0' AND sort != '0' LIMIT 1"); + if($id){ + return $id; + } + } + break; + case 'adresse': + if(isset($xml->kundennummer)) { + $kundennummer = (string)$xml->kundennummer; + if($kundennummer != '') { + if($eigenernummernkreis) { + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> '1' AND kundennummer = '".$this->app->DB->real_escape_string($kundennummer)."' AND projekt = '$projekt' LIMIT 1"); + } + else{ + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> '1' AND kundennummer = '".$this->app->DB->real_escape_string($kundennummer)."' LIMIT 1"); + } + if($id){ + return $id; + } + } + } + if(isset($xml->lieferantennummer)) { + $lieferantennummer = (string)$xml->lieferantennummer; + if($lieferantennummer != '') { + if($eigenernummernkreis) { + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> '1' AND lieferantennummer = '".$this->app->DB->real_escape_string($lieferantennummer)."' AND projekt = '$projekt' LIMIT 1"); + } + else{ + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> '1' AND lieferantennummer = '".$this->app->DB->real_escape_string($lieferantennummer)."' LIMIT 1"); + } + if($id){ + return $id; + } + } + } + break; + } + + return false; + } + + /** + * @param string $tabelle + * @param string $extid + * @param mixed $xml + * + * @return null|int + */ + public function GetFromExtID($tabelle, $extid, $xml = null) + { + if(!$this->uebertragung_account && !$this->api_id){ + return null; + } + if($xml && isset($xml->id) && isset($xml->belegnr) && isset($xml->name)) + { + $id = $this->app->DB->Select("SELECT id FROM $tabelle WHERE id = '".((int)$xml->id)."' AND belegnr = '".$this->app->DB->real_escape_string($xml->belegnr)."' AND name = '".$this->app->DB->real_escape_string($xml->name)."' LIMIT 1"); if($id){ + return $id; + } + } + return $this->app->DB->Select( + sprintf( + "SELECT id_int + FROM api_mapping + WHERE id_ext = '%s' AND tabelle = '%s' AND + ( + (uebertragung_account = %d AND uebertragung_account <> 0) OR + (api = %d AND uebertragung_account <> 0) + ) + ORDER BY %s DESC + LIMIT 1", + $this->app->DB->real_escape_string($extid), $tabelle,(int)$this->uebertragung_account, (int)$this->api_id, + ($this->uebertragung_account?' uebertragung_account ':' api ') + ) + ); + } + + /** + * @param string $tabelle + * @param int $id + * + * @return null|string + */ + public function GetExtIDFromIntID($tabelle, $id) + { + if(!$this->uebertragung_account && !$this->api_id){ + return null; + } + + return $this->app->DB->Select( + sprintf( + "SELECT id_ext + FROM api_mapping + WHERE id_int = %d AND tabelle = '%s' AND + ( + (uebertragung_account = %d AND uebertragung_account <> 0) AND + (api = %d AND uebertragung_account <> 0) + ) + ORDER BY %s DESC + LIMIT 1", + $id,$tabelle, $this->uebertragung_account, $this->api_id, + $this->uebertragung_account?' uebertragung_account ':' api ' + ) + ); + } + + /** + * @param string $tabelle + * @param int $intid + * @param string $extid + * + * @return bool + */ + public function SetExtIDMapping($tabelle, $intid, $extid) + { + if(!$this->uebertragung_account && !$this->api_id){ + return false; + } + $check = $this->GetFromExtID($tabelle, $extid); + if($check) { + return $check == $intid; + } + $this->app->DB->Insert( + sprintf( + "INSERT INTO `api_mapping` (`tabelle`, `id_ext`, `id_int`, `api`, `uebertragung_account`) + VALUES ('%s','%s',%d,%d,%d)", + $tabelle,$this->app->DB->real_escape_string($extid), $intid, $this->api_id, $this->uebertragung_account + ) + ); + return true; + } + + /** + * @param int $uebertragungen_account + * @param Uebertragungen $obj + * @param string $typ + * + * @return bool + */ + public function isAllowedToImport($uebertragungen_account, $obj, $typ) { + switch($typ) { + case 'auftrag': + case 'angebot': + if(!$this->app->DB->Select("SELECT auftrageingang FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")) + { + if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'notallowed' AND doctype = '$typ' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) LIMIT 1")){ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', ucfirst($typ).'-Eingang ist nicht aktiviert', '', '', '', $typ); + } + return false; + } + break; + case 'bestellung': + case 'produktion': + if(!$this->app->DB->Select("SELECT bestellungeingang FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")) + { + if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'notallowed' AND doctype = '$typ' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) LIMIT 1")){ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', ucfirst($typ).'-Eingang ist nicht aktiviert', '', '', '', $typ); + } + return false; + } + break; + case 'lieferschein': + if(!$this->app->DB->Select("SELECT trackingeingang FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")) + { + if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'notallowed' AND doctype = '$typ' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) LIMIT 1")){ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', 'Tracking-Eingang ist nicht aktiviert', '', '', '', $typ); + } + return false; + } + break; + case 'retoure': + if( + !$this->app->DB->Select( + sprintf( + 'SELECT `alldoctypes` FROM `uebertragungen_account` WHERE `id` = %d LIMIT 1', + $uebertragungen_account + ) + ) + ){ + if( + !$this->app->DB->Select( + sprintf( + "SELECT `id` + FROM `uebertragungen_monitor` + WHERE `uebertragungen_account` = %d + AND `datei` = %d AND `status` = 'notallowed' + AND `doctype` = '%s' + AND `zeitstempel` > DATE_SUB(now(), INTERVAL 1 HOUR) + LIMIT 1", + $uebertragungen_account, $this->datei_id, $typ + ) + ) + ){ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', ucfirst($typ).'-Eingang ist nicht aktiviert', '', '', '', $typ); + } + return false; + } + break; + } + + return true; + } + + /** + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + * @param int $id + */ + public function ParsePartXmlAricleWithId(&$xml, $uebertragungen_account, $obj, $id) + { + $artikelarr = ['id' => $id]; + $account = $this->app->DB->SelectRow( + sprintf( + 'SELECT updatearticles FROM uebertragungen_account WHERE id = %d LIMIT 1', + $uebertragungen_account + ) + ); + $updatearticles = !empty($account['updatearticles']); + if(!empty($xml->anlegen) && $updatearticles && !empty($xml->nummer) && !empty($xml->name_de)) { + if(!empty($this->app->stringcleaner)) { + $this->app->stringcleaner->XMLArray_clean($xml); + } + foreach($xml as $k => $v) { + if(empty($k) || $k === 'id' || $k === 'nummer' || is_numeric($k)) { + continue; + } + $vr = @reset($v); + if(is_numeric($vr) || is_string($vr)) { + $artikelarr[$k] = (string)$vr; + } + } + + //if(isset($xml->nummer))$artikelarr['nummer'] = (string)$xml->nummer; + if(isset($xml->ean))$artikelarr['ean'] = (string)$xml->ean; + if(isset($xml->herstellernummer))$artikelarr['herstellernummer'] = (string)$xml->herstellernummer; + if(isset($xml->name_de))$artikelarr['name_de'] = (string)$xml->name_de; + if(isset($xml->name_en))$artikelarr['name_en'] = (string)$xml->name_en; + if(isset($xml->anabregstext))$artikelarr['anabregstext'] = (string)$xml->anabregstext; + if(isset($xml->anabregstext_en))$artikelarr['anabregstext_en'] = (string)$xml->anabregstext_en; + if(isset($xml->uebersicht_de))$artikelarr['uebersicht_de'] = (string)$xml->uebersicht_de; + if(isset($xml->uebersicht_en))$artikelarr['uebersicht_en'] = (string)$xml->uebersicht_en; + if(isset($xml->kurztext_de))$artikelarr['kurztext_de'] = (string)$xml->kurztext_de; + if(isset($xml->kurztext_en))$artikelarr['kurztext_en'] = (string)$xml->kurztext_en; + if(isset($xml->lagerartikel))$artikelarr['lagerartikel'] = (string)$xml->lagerartikel; + + if(isset($xml->gewicht))$artikelarr['gewicht'] = (string)$xml->gewicht; + if(isset($xml->breite))$artikelarr['breite'] = (string)$xml->breite; + if(isset($xml->laenge))$artikelarr['laenge'] = (string)$xml->laenge; + if(isset($xml->hoehe))$artikelarr['hoehe'] = (string)$xml->hoehe; + + for($i = 1; $i <= 20; $i++) { + $name = 'freifeld'.$i; + if(isset($xml->$name)){ + $xml->$name = $this->app->Secure->CleanString($xml->$name, 'nohtml'); + $artikelarr[$name] = (string)$xml->$name; + } + } + $artikelid = $this->app->erp->InsertUpdateArtikel($artikelarr, true); + if($artikelid) { + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'artikel_ok', 'Artikel ' . (string)$xml->nummer . ' updated', '', '', '', 'artikel', $artikelid); + } + unset($artikelarr); + } + + if((isset($xml->lagerzahl) || isset($xml->mhdanzahl) || !empty($xml->mhd) || !empty($xml->charge)) && $this->app->DB->Select("SELECT lagerzahleneingang FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")) { + + $artArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT chargenverwaltung,seriennummern,mindesthaltbarkeitsdatum, lagerartikel FROM artikel WHERE id = %d', + $id + ) + ); + if(empty($artArr['lagerartikel'])) { + if($uebertragungen_account) { + $obj->AddUbertragungMonitorLog( + $uebertragungen_account, + $this->datei_id, + 0, + 'artikel_error', + 'Artikel ' . (string)$xml->nummer . ' ist kein Lagerartikel', + '', + '', + '', + 'artikel', + $id + ); + } + return; + } + if(!in_array((string)$artArr['seriennummern'], ['', 'keine', 'vomprodukt'])) { + if($uebertragungen_account) { + $obj->AddUbertragungMonitorLog( + $uebertragungen_account, + $this->datei_id, + 0, + 'artikel_error', + 'Artikel ' . (string)$xml->nummer . ' ist ein Seriennummern-Artikel', + '', + '', + '', + 'artikel', + $id + ); + } + return; + } + + $lagerzahl = isset($xml->lagerzahl)?str_replace(',','.',(string)$xml->lagerzahl):null; + $mhdanzahl = isset($xml->mhdanzahl)?str_replace(',','.',(string)$xml->mhdanzahl):null; + if(!empty($artArr['mindesthaltbarkeitsdatum']) && empty($xml->mhd) && ((float)$lagerzahl != 0 || (float)$mhdanzahl != 0)) { + if($uebertragungen_account) { + $obj->AddUbertragungMonitorLog( + $uebertragungen_account, + $this->datei_id, + 0, + 'artikel_error', + 'Artikel ' . (string)$xml->nummer . ': kein MHD angegeben', + '', + '', + '', + 'artikel', + $id + ); + } + return; + } + + if(empty($artArr['mindesthaltbarkeitsdatum']) && !empty($artArr['chargenverwaltung']) && empty($xml->charge) && (float)$lagerzahl != 0) { + if($uebertragungen_account) { + $obj->AddUbertragungMonitorLog( + $uebertragungen_account, + $this->datei_id, + 0, + 'artikel_error', + 'Artikel ' . (string)$xml->nummer . ': keine Charge angegeben', + '', + '', + '', + 'artikel', + $id + ); + } + return; + } + + //$lagerzahl = str_replace(',','.',isset($xml->lagerzahl)?(string)$xml->lagerzahl:$xml->mhdanzahl); + + $lager_platz_id = false; + $lagerplatz = false; + $lagerplatzignorieren = $this->app->DB->Select("SELECT lagerplatzignorieren FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); + + if(isset($xml->lager_platz) && !$lagerplatzignorieren) { + $lagerplatz = (string)$xml->lager_platz; + + $lagerplatz = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung = '".$this->app->DB->real_escape_string($lagerplatz)."' LIMIT 1"); + + $lager_platz_id = $lagerplatz; + if(!$lager_platz_id) { + $lagerplatz = $this->app->DB->Select("SELECT lager FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); + $lager_platz_id = $lagerplatz; + } + } + else { + if(!isset($xml->lager_platz)) { + $this->lagerzahlen[$uebertragungen_account][$id][isset($xml->lager_platz) && (string)$xml->lager_platz != ''?(string)$xml->lager_platz:'0'] = 0; + } + $lagerplatz = $this->app->DB->Select("SELECT lager FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); + $lager_platz_id = $lagerplatz; + } + $storageLocationIndex = (!$lagerplatzignorieren && isset($xml->lager_platz) && (string)$xml->lager_platz != '')?(string)$xml->lager_platz:'0'; + $storageLocationId = empty($lager_platz_id) ? 0 : (int)$lager_platz_id; + if(empty($this->lagerzahlen) + || empty($this->lagerzahlen[$uebertragungen_account]) + || empty($this->lagerzahlen[$uebertragungen_account][$id]) + || !isset($this->lagerzahlen[$uebertragungen_account][$id][(!$lagerplatzignorieren && isset($xml->lager_platz) && $xml->lager_platz != '')?(string)$xml->lager_platz:'0'])) { + $this->lagerzahlen[$uebertragungen_account][$id][(!$lagerplatzignorieren && isset($xml->lager_platz) && (string)$xml->lager_platz != '')?(string)$xml->lager_platz:'0'] = 0; + } + + if($lagerzahl !== null && round((float)str_replace(',','.',$lagerzahl),8) < 0) { + if($uebertragungen_account) { + $obj->AddUbertragungMonitorLog( + $uebertragungen_account, + $this->datei_id, + 0, + 'artikel_error', + 'Artikel ' . (string)$xml->nummer . ' Lagerzahl '.$lagerzahl.' kleiner als 0', + '', + '', + '', + 'artikel', + $id + ); + } + return; + } + if($lagerzahl !== null && $lagerzahl != '' + && (empty($artArr['chargenverwaltung']) || !isset($xml->charge)) + && (empty($artArr['mindesthaltbarkeitsdatum']) || !isset($xml->mhd)) + ) { + $lagerzahl = round((float)str_replace(',','.',$lagerzahl),8); + $this->lagerzahlen[$uebertragungen_account][$id][(!$lagerplatzignorieren && isset($xml->lager_platz) && (string)$xml->lager_platz != '')?(string)$xml->lager_platz:'0'] += $lagerzahl; + $lagerzahl = $this->lagerzahlen[$uebertragungen_account][$id][(!$lagerplatzignorieren && isset($xml->lager_platz) && (string)$xml->lager_platz != '')?(string)$xml->lager_platz:'0']; + if($lager_platz_id) { + $vorhanden = round((float)$this->app->DB->Select("SELECT IFNULL(sum(menge),0) FROM lager_platz_inhalt WHERE lager_platz = '$lager_platz_id' AND artikel = '$id'"),8); + } + else{ + $vorhanden = round((float)$this->app->erp->ArtikelAnzahlLager($id),8); + } + $projekt = (int)$this->app->DB->Select("SELECT projekt FROM artikel WHERE id = '$id' LIMIT 1"); + if(round($lagerzahl,8) > round($vorhanden,8)) { + + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$id' LIMIT 1"); + } + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id WHERE lpi.artikel = '$id' AND lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lpi.menge DESC LIMIT 1"); + } + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz lp WHERE lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lp.id ASC LIMIT 1"); + } + if($lagerplatz) { + $this->app->erp->LagerEinlagern($id,$lagerzahl - $vorhanden,$lagerplatz,$projekt,'API Korrektur',true); + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','artikel','$id','lagerzahl','$lagerzahl')"); + $this->lagerzahlenmonitor[$uebertragungen_account][$id] = $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', '', $lagerzahl, '', '', 'artikel', $id,(isset($this->lagerzahlenmonitor) && isset($this->lagerzahlenmonitor[$uebertragungen_account]) && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id]))?$this->lagerzahlenmonitor[$uebertragungen_account][$id]:0); + } + } + elseif(round($lagerzahl,8) < round($vorhanden,8)) { + $auslagern = $vorhanden - $lagerzahl; + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$id' LIMIT 1"); + } + if($lagerplatz) { + $bestand = round((float)$this->app->erp->ArtikelImLagerPlatz($id, $lagerplatz),8); + if($bestand >= $auslagern) { + $this->app->erp->LagerAuslagernRegal($id, $lagerplatz, $auslagern, $projekt,'API Korrektur',true ); + $auslagern = 0; + } + elseif($bestand > 0) { + $this->app->erp->LagerAuslagernRegal($id, $lagerplatz, $bestand, $projekt,'API Korrektur',true ); + $auslagern -= $bestand; + } + } + if($auslagern > 0 && !$lager_platz_id) { + $lagerplaetze = $this->app->DB->SelectArr("SELECT lp.id FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id WHERE lpi.artikel = '$id' AND lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lpi.menge DESC"); + if($lagerplaetze) { + foreach($lagerplaetze as $lagerplatz) { + $bestand = round((float)$this->app->erp->ArtikelImLagerPlatz($id, $lagerplatz['id']),8); + if($bestand >= $auslagern) { + $this->app->erp->LagerAuslagernRegal($id, $lagerplatz['id'], $auslagern, $projekt,'API Korrektur',true ); + $auslagern = 0; + } + elseif($bestand > 0) { + $this->app->erp->LagerAuslagernRegal($id, $lagerplatz['id'], $bestand, $projekt,'API Korrektur',true ); + $auslagern -= $bestand; + } + if($auslagern <= 0) { + break; + } + } + } + } + if($auslagern != $vorhanden - $lagerzahl) { + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','artikel','$id','lagerzahl','$lagerzahl')"); + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', '', $lagerzahl, '', '', 'artikel', $id); + } + } + } + $storageChanged = 0; + //MHD + if(!empty($artArr['mindesthaltbarkeitsdatum']) && isset($xml->mhd)) { + if(empty($this->bestBeforeBatchArticleStock[$id]) + || !isset($this->bestBeforeBatchArticleStock[$id][$storageLocationId]) + ) { + $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['stock'] = 0; + $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['entries'] = []; + } + + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$id' LIMIT 1"); + } + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id WHERE lpi.artikel = '$id' AND lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lpi.menge DESC LIMIT 1"); + } + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz lp WHERE lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lp.id ASC LIMIT 1"); + } + + if($lager_platz_id) { + $wawimhd = $this->app->DB->SelectArr( + "SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' AND lager_platz = '$lager_platz_id' order by mhddatum, menge desc" + ); + $chargenmhd = $this->app->DB->SelectArr( + "SELECT * FROM lager_charge WHERE artikel = '$id' AND lager_platz = '$lager_platz_id' order by charge, menge desc" + ); + } + else { + $wawimhd = null;//$this->app->DB->SelectArr("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' order by mhddatum"); + $chargenmhd = null;//$this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE artikel = '$id' order by charge, menge desc"); + if($wawimhd) { + $mhdohnelager = null;//$this->app->DB->SelectArr("SELECT mhddatum, sum(menge) as smenge FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' group by mhddatum order by mhddatum "); + } + if($chargenmhd) { + $chargenohnelager = null;//$this->app->DB->SelectArr("SELECT charge, sum(menge) as smenge FROM lager_charge WHERE artikel = '$id' group by charge order by charge "); + } + } + + $mhd = $xml->mhd; + if(!empty($mhd) && !is_string($mhd) && !is_numeric($mhd) && (!empty($mhd)?count($mhd):0) === 1 && empty($mhd->datum) + && empty($mhd->mhddatum) && empty($mhd->anzahl)) { + $mhd = reset($mhd); + } + if(isset($mhd->datum)) { + $mhddatum = json_decode(json_encode($mhd->datum), true); + } + elseif(isset($xml->mhddatum)) { + $mhddatum = json_decode(json_encode($xml->mhddatum), true); + if(is_string($mhddatum)) { + $mhddatum = [$mhddatum]; + } + } + elseif(is_string($mhd)) { + $mhddatum = [$mhd]; + } + $mhdanzahl = null; + $mhdcharge = null; + if(isset($mhd->anzahl)) { + $mhdanzahl = json_decode(json_encode($mhd->anzahl),true); + } + elseif(isset($xml->mhdanzahl) && is_string(json_decode(json_encode($xml->mhdanzahl),true))) { + $mhdanzahl = [json_decode(json_encode($xml->mhdanzahl),true)]; + } + elseif(isset($xml->mhdanzahl) && is_numeric((string)$xml->mhdanzahl)) { + $mhdanzahl = [(float)(string)$xml->mhdanzahl]; + } + elseif(isset($xml->lagerzahl) && is_numeric((string)$xml->lagerzahl)) { + $mhdanzahl = [(float)(string)$xml->lagerzahl]; + } + if(isset($mhd->charge)) { + $mhdcharge = json_decode(json_encode($mhd->charge),true); + } + elseif(isset($xml->charge) + && (is_string($xml->charge) || (!is_numeric($xml->charge) && (!empty($xml->charge)?count($xml->charge):0) === 1))) { + $mhdcharge = [(string)$xml->charge]; + } + + foreach($mhddatum as $kmhd => $m) { + $charge = ''; + $anzahl = 1; + if(isset($mhd->charge)) { + $charge = (string)$mhdcharge[$kmhd]; + } + elseif(isset($mhdcharge[$kmhd])) { + $charge = (string)$mhdcharge[$kmhd]; + } + if(isset($mhd->anzahl)) { + $anzahl = (int)$mhdanzahl[$kmhd]; + } + elseif(isset($mhdanzahl[$kmhd])) { + $anzahl = (int)$mhdanzahl[$kmhd]; + } + $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['stock'] += (float)$anzahl; + $datum = date('Y-m-d',strtotime( (string)$m)); + + $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['entries'][] = + [ + 'bestbefore' => $datum, 'batch' => $artArr['chargenverwaltung'] > 0 ? $charge : null, 'quantity' => $anzahl + ]; + + $chargenlager = null; + $found = false; + $foundcharge = false; + $lagerzahl = null; + if($wawimhd) { + if($lager_platz_id) { + $inBestBeforeStorage = 0.0; + $countBestBeforeEntries = 0; + foreach($wawimhd as $k => $v) { + if($v['mhddatum'] != $datum) { + continue; + } + if($artArr['chargenverwaltung'] > 0 && !empty($charge)){ + if((string)$charge !== (string)$v['charge']){ + continue; + } + } + $inBestBeforeStorage += (float)$v['menge']; + $countBestBeforeEntries++; + } + $toChange = round($anzahl - $inBestBeforeStorage,4); + if($inBestBeforeStorage > 0 && $toChange == 0) { + $found = true; + $foundcharge = true; + $anzahl = 0; + $inBestBeforeStorage = 0; + } + elseif($inBestBeforeStorage > 0 && round($inBestBeforeStorage, 4) != round($anzahl,4)){ + $toChange = round($anzahl - $inBestBeforeStorage,4); + foreach ($wawimhd as $k => $v) { + if($v['mhddatum'] == $datum){ + if($artArr['chargenverwaltung'] > 0 && !empty($charge)){ + if((string)$charge !== (string)$v['charge']){ + if((!empty($mhddatum)?count($mhddatum):0) === 1){ + unset($wawimhd[$k]); + } + continue; + } + } + $found = true; + $wawimhd[$k]['gefunden'] = true; + if($toChange < 0) { + if($v['menge'] <= -$toChange) { + $this->app->DB->Delete( + sprintf( + 'DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = %d', + $v['id'] + ) + ); + $this->app->erp->MHDLog( + $v['artikel'], $v['lager_platz'], 0, + $v['mhddatum'], $v['menge'], 'API Korrektur', '', 0, $v['charge'] + ); + $toChange += $v['menge']; + if(!empty($v['charge'])) { + if($this->app->erp->ChargeAuslagernLog( + $v['artikel'], $v['lager_platz'], $v['charge'], $v['menge'], 'API Korrektur' + )){ + $foundcharge = true; + } + } + $storageChanged -= $v['menge']; + continue; + } + if($v['menge'] > -$toChange) { + $this->app->DB->Update( + sprintf( + 'UPDATE `lager_mindesthaltbarkeitsdatum` SET `menge` = `menge` - %f WHERE `id` = %d', + -$toChange, $v['id'] + ) + ); + if(!empty($v['charge'])) { + if($this->app->erp->ChargeAuslagernLog( + $v['artikel'], $v['lager_platz'], $v['charge'], -$toChange, 'API Korrektur' + )) { + $foundcharge = true; + } + } + $storageChanged += $toChange; + $toChange = 0; + break; + } + } + + if($toChange > 0) { + $this->app->DB->Update( + sprintf( + 'UPDATE `lager_mindesthaltbarkeitsdatum` SET `menge` = `menge` + %f WHERE `id` = %d', + $toChange, $v['id'] + ) + ); + $this->app->erp->MHDLog( + $v['artikel'], $v['lager_platz'], 1, + $v['mhddatum'], $toChange, 'API Korrektur', '', 0, $v['charge'] + ); + if(!empty($v['charge'])){ + $this->app->erp->AddChargeLagerOhneBewegung( + $v['artikel'], $toChange, $v['lager_platz'], date('Y-m-d'), $v['charge'], 'API Korrektur' + ); + $foundcharge = true; + } + $storageChanged += $toChange; + $anzahl = 0; + $toChange = 0; + break; + } + } + } + } + /*if($chargenmhd && $charge) { + foreach($chargenmhd as $k => $v) { + if($v['charge'] == $charge) { + $foundcharge = true; + $chargenmhd[$k]['gefunden'] = true; + if($v['menge'] != $anzahl) { + $storageChanged += $v['menge'] - $anzahl; + $this->app->DB->Update( + "UPDATE lager_charge SET menge = '$anzahl' WHERE id = '".$v['id']."' LIMIT 1" + ); + + break; + } + } + } + }*/ + if(!$found && $anzahl > 0) { + $storageChanged += $anzahl; + $this->app->DB->Insert( + "INSERT INTO lager_mindesthaltbarkeitsdatum (artikel, datum, mhddatum, menge, lager_platz, charge) + values ('$id',now(),'$datum','$anzahl','$lager_platz_id','".$this->app->DB->real_escape_string($charge)."')" + ); + $this->app->erp->MHDLog($id, $lager_platz_id,1,$datum,$anzahl,'API Korrektur','',0,$charge); + } + if(!$foundcharge && $charge && $anzahl > 0) { + $this->app->DB->Insert( + "INSERT INTO lager_charge (artikel, datum, menge, lager_platz, charge) + values ('$id',now(),'$anzahl','$lager_platz_id','".$this->app->DB->real_escape_string($charge)."')" + ); + $this->app->erp->Chargenlog($id, $lager_platz_id,1,$charge,$anzahl,'API Korrektur','',0,$charge); + } + } + else { + if($mhdohnelager) { + foreach($mhdohnelager as $k => $v) { + if($v['mhddatum'] == $datum) { + $mhdohnelager[$k]['gefunden'] = true; + $found = true; + if($v['smenge'] < $anzahl) { + foreach($wawimhd as $k2 => $v2) { + if($v2['mhddatum'] == $datum) + { + $storageChanged += $anzahl - $v2['menge']; + $this->app->DB->Update( + "UPDATE lager_mindesthaltbarkeitsdatum + SET menge = $anzahl WHERE id = '".$v2['id']."' LIMIT 1" + ); + if($v2['menge'] < $anzahl) { + $this->app->erp->MHDLog( + $id, $v2['lager_platz'],1,$v2['mdhdatum'],abs($v2['menge'] < $anzahl),'API Korrektur','',0,$v2['charge'] + ); + } + elseif($anzahl < $v2['menge']) { + $this->app->erp->MHDLog( + $id, $v2['lager_platz'],0,$v2['mdhdatum'],abs($v2['menge'] < $anzahl),'API Korrektur','',0,$v2['charge'] + ); + } + if($charge) { + $hinzuf = $anzahl - $v['smenge']; + if(!isset($chargenlager[$v2['lager_platz'].'-'.$charge])) { + $chargenlager[$v2['lager_platz'].'-'.$charge] = 0; + } + $chargenlager[$v2['lager_platz'].'-'.$charge] += $hinzuf; + } + break; + } + } + } + elseif($v['smenge'] > $anzahl) { + $abzuziehen = $v['smenge'] - $anzahl; + foreach($wawimhd as $k2 => $v2) { + if($v2['menge'] > 0) { + if($abzuziehen > 0) { + if($abzuziehen >= $v2['menge']) { + $abzuziehen -= $v2['menge']; + $storageChanged -= $v2['menge']; + $this->app->DB->Delete( + "DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id = '".$v2['id']."' LIMIT 1" + ); + $this->app->erp->MHDLog( + $id, $v2['lager_platz'],0,$v2['mdhdatum'],$v2['menge'],'API Korrektur','',0,$v2['charge'] + ); + if(!isset($chargenlager[$v2['lager_platz'].'-'.$charge])) { + $chargenlager[$v2['lager_platz'].'-'.$charge] = 0; + } + $chargenlager[$v2['lager_platz'].'-'.$charge] -= $v2['menge']; + } + else { + $storageChanged -= $abzuziehen; + $this->app->DB->Update( + "UPDATE lager_mindesthaltbarkeitsdatum + SET menge = menge - $abzuziehen WHERE id = '".$v2['id']."' LIMIT 1" + ); + $this->app->erp->MHDLog($id, $v2['lager_platz'],0,$v2['mdhdatum'],$abzuziehen,'API Korrektur','',0,$v2['charge']); + if(!isset($chargenlager[$v2['lager_platz'].'-'.$charge])) { + $chargenlager[$v2['lager_platz'].'-'.$charge] = 0; + } + $chargenlager[$v2['lager_platz'].'-'.$charge] -= $abzuziehen; + $abzuziehen = 0; + break; + } + } + } + } + } + } + } + if(!$found && $anzahl > 0) { + $this->app->DB->Insert( + "INSERT INTO lager_mindesthaltbarkeitsdatum (artikel, datum, mhddatum, menge, lager_platz, charge) + values ('$id',now(),'$datum','$anzahl','$lager_platz_id','".$this->app->DB->real_escape_string($charge)."')"); + $this->app->erp->MHDLog($id, $lager_platz_id,1,$datum,$anzahl,'API Korrektur','',0,$charge); + if(!isset($chargenlager[$lager_platz_id.'-'.$charge])) { + $chargenlager[$lager_platz_id.'-'.$charge] = 0; + } + $chargenlager[$lager_platz_id.'-'.$charge] += $anzahl; + $storageChanged += $anzahl; + } + } + } + } + elseif($anzahl > 0) { + $this->app->DB->Insert( + "INSERT INTO lager_mindesthaltbarkeitsdatum (artikel, datum, mhddatum, menge, lager_platz, charge) + values ('$id',now(),'$datum','$anzahl','$lagerplatz','".$this->app->DB->real_escape_string($charge)."')" + ); + $this->app->erp->MHDLog($id, $lagerplatz,1,$datum,$anzahl,'API Korrektur','',0,$charge); + $storageChanged += $anzahl; + if(!isset($chargenlager[$lagerplatz.'-'.$charge])) { + $chargenlager[$lagerplatz.'-'.$charge] = 0; + } + $chargenlager[$lagerplatz.'-'.$charge] += $anzahl; + } + if(isset($chargenlager)) { + foreach($chargenlager as $kl => $vls) { + $vla = explode('-', $vls, 2); + $vl = $vla[0]; + $charge = ''; + if(isset($vla[1])) { + $charge = $vla[1]; + } + if($charge) { + if($vl < 0) { + if($chargenmhd) + { + $abzuziehen = -$vl; + foreach($chargenmhd as $vch) { + if($vch['lager_platz'] == $kl && $charge == $vch['charge']) { + if($vch['menge'] > $abzuziehen) { + $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $abzuziehen WHERE id = '".$vch['id']."' LIMIT 1"); + $this->app->erp->Chargenlog($id, $vch['lager_platz'],0,$vch['charge'], $abzuziehen,'API Korrektur'); + $abzuziehen = 0; + break; + } + if($vch['menge'] == $abzuziehen) { + $this->app->DB->Delete("DELETE FROM lager_charge id = '".$vch['id']."' LIMIT 1"); + $this->app->erp->Chargenlog($id, $vch['lager_platz'],0,$vch['charge'], $vch['menge'],'API Korrektur'); + break; + } + if($abzuziehen > 0) { + $this->app->DB->Delete("DELETE FROM lager_charge id = '".$vch['id']."' LIMIT 1"); + $this->app->erp->Chargenlog($id, $vch['lager_platz'],0,$vch['charge'], $vch['menge'],'API Korrektur'); + $abzuziehen -= $vch['menge']; + } + } + } + } + } + elseif($vl > 0) { + $hinzuf = $vl; + if($chargenmhd) { + foreach($chargenmhd as $vch) { + if($vch['lager_platz'] == $kl && $charge == $vch['charge']) { + $this->app->DB->Update( + "UPDATE lager_charge SET menge = menge + $vl WHERE id = '".$vch['id']."' LIMIT 1" + ); + $this->app->erp->Chargenlog($id, $vch['lager_platz'],1,$vch['charge'], $vl,'API Korrektur'); + $hinzuf = 0; + break; + } + } + } + if($hinzuf) { + $this->app->DB->Insert("INSERT INTO lager_charge (artikel, lager_platz, menge, charge) values ('$id','$kl','$hinzuf','$charge')"); + $this->app->erp->Chargenlog($id, $kl,1,$charge, $hinzuf,'API Korrektur'); + } + } + } + } + } + } + if(isset($wawimhd) && $lagerzahl !== null) { + if($lager_platz_id) { + foreach($wawimhd as $k => $v) { + if(!isset($v['gefunden'])) { + $storageChanged -= $v['menge']; + $this->app->DB->Delete( + "DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id = '".$v['id']."' LIMIT 1" + ); + $this->app->erp->MHDLog( + $v['artikel'],$v['lager_platz'],0, $v['mhddatum'], $v['menge'],'API Korrektur','',0,$v['charge'] + ); + if(!empty($v['charge'])){ + $this->app->erp->ChargeAuslagernLog( + $v['artikel'], + $v['lager_platz'], + $v['charge'], + $v['menge'], + 'API Korrektur' + ); + } + } + } + } + else{ + if($mhdohnelager) { + foreach($mhdohnelager as $k => $v) { + if(!isset($v['gefunden'])) { + $storageChanged -= $v['menge']; + $this->app->DB->Delete( + "DELETE FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' AND mhddatum = '".$v['mhddatum']."'" + ); + $this->app->erp->MHDLog( + $v['artikel'],$v['lager_platz'],0, $v['mhddatum'], $v['menge'],'API Korrektur','',0,$v['charge'] + ); + if(!empty($v['charge'])){ + $this->app->erp->ChargeAuslagernLog( + $v['artikel'],$v['lager_platz'],$v['charge'],$v['menge'],'API Korrektur' + ); + } + } + } + } + } + } + } + elseif(!empty($artArr['chargenverwaltung']) && isset($xml->charge)) { + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$id' LIMIT 1"); + } + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id WHERE lpi.artikel = '$id' AND lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lpi.menge DESC LIMIT 1"); + } + if(!$lagerplatz) { + $lagerplatz = $this->app->DB->Select("SELECT lp.id FROM lager_platz lp WHERE lp.sperrlager = 0 AND lp.poslager = 0 ORDER by lp.id ASC LIMIT 1"); + } + + if($lager_platz_id) { + $wawicharge = $this->app->DB->SelectArr( + "SELECT * FROM lager_charge WHERE artikel = '$id' AND lager_platz = '$lager_platz_id' order by charge, menge desc" + ); + } + else { + $wawimhd = null;//$this->app->DB->SelectArr("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' order by mhddatum"); + $chargenlager = null;//$this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE artikel = '$id' order by charge, menge desc"); + if($wawimhd) { + $mhdohnelager = null;//$this->app->DB->SelectArr("SELECT mhddatum, sum(menge) as smenge FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$id' group by mhddatum order by mhddatum "); + } + if($chargenlager) { + $chargenohnelager = null;//$this->app->DB->SelectArr("SELECT charge, sum(menge) as smenge FROM lager_charge WHERE artikel = '$id' group by charge order by charge "); + } + } + $charge = $xml->charge; + if(!empty($charge) && !is_string($charge) && !is_numeric($charge) && (!empty($charge)?count($charge):0) === 1 && empty($charge->charge) + && empty($charge->anzahl)) { + $charge = reset($charge); + } + if(isset($charge->charge)) { + $charge = json_decode(json_encode($charge->charge), true); + } + elseif(is_string($charge)) { + $charge = [$charge]; + } + $chargeanzahl = null; + if(isset($charge->anzahl)) { + $chargeanzahl = json_decode(json_encode($charge->anzahl),true); + } + elseif(isset($xml->chargeanzahl) && is_string(json_decode(json_encode($xml->chargeanzahl),true))) { + $chargeanzahl = [json_decode(json_encode($xml->chargeanzahl),true)]; + } + elseif(isset($xml->chargeanzahl) && is_numeric((string)$xml->chargeanzahl)) { + $chargeanzahl = [(float)(string)$xml->chargeanzahl]; + } + elseif(isset($xml->lagerzahl)) { + $chargeanzahl = [(float)(string)$xml->lagerzahl]; + } + $chargen = $charge; + foreach($chargen as $kcharge => $c) { + $charge = ''; + $anzahl = 1; + if(isset($c->charge)){ + $charge = (string)$c->charge; + } + elseif(is_string($c)){ + $charge = (string)$c; + } + if(isset($c->anzahl)){ + $anzahl = (int)$c->anzahl; + }elseif(is_array($charge[$kcharge]) && isset($charge[$kcharge])){ + $anzahl = (int)$charge[$kcharge]; + } + elseif($chargeanzahl !== null) { + $anzahl = $chargeanzahl; + if(is_array($anzahl)) { + $anzahl = $anzahl[$kcharge]; + } + } + $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['stock'] += (float)$anzahl; + $this->bestBeforeBatchArticleStock[$id][$storageLocationId]['entries'][] = + [ + 'batch' => $charge, 'quantity' => $anzahl + ]; + $chargenlager = null; + $found = false; + $foundcharge = false; + if($wawicharge){ + if($lager_platz_id){ + foreach ($wawicharge as $k => $v) { + if($v['charge'] == $charge) { + $found = true; + $wawicharge[$k]['gefunden'] = true; + if($v['menge'] != $anzahl) { + $storageChanged += (float)$anzahl - $v['menge']; + $this->app->DB->Update( + "UPDATE lager_charge SET menge = '$anzahl' WHERE id = '".$v['id']."' LIMIT 1" + ); + $this->app->erp->Chargenlog( + $v['artikel'], $v['lager_platz'],$anzahl > $v['menge']?1:0, + $v['charge'], abs($v['menge'] - $anzahl),'API Korrektur','',0 + ); + break; + } + } + } + } + } + if(!$found) { + $this->app->erp->AddChargeLagerOhneBewegung( + $id, $anzahl,$lager_platz_id,date('Y-m-d'),$charge,'API Korrektur' + ); + $storageChanged += (float)$anzahl; + } + $lagerzahl = null; + } + } + if($lagerzahl === null) { + if($storageChanged > 0) { + $this->app->erp->LagerEinlagern( + $id, $storageChanged, $lagerplatz, $projekt, 'API Korrektur', true + ); + $this->app->DB->Insert( + "INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) + VALUES ('$uebertragungen_account','artikel','$id','lagerzahl','$anzahl')" + ); + $this->lagerzahlenmonitor[$uebertragungen_account][$id] = + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', + '', $anzahl, '', '', 'artikel', $id, (isset($this->lagerzahlenmonitor) && + isset($this->lagerzahlenmonitor[$uebertragungen_account]) + && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id])) ? + $this->lagerzahlenmonitor[$uebertragungen_account][$id] : 0 + ); + } + elseif($storageChanged < 0) { + $this->app->erp->LagerAuslagernRegal($id,$lagerplatz, -$storageChanged, $projekt, 'API Korrektur', true); + $this->app->DB->Insert( + "INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) + VALUES ('$uebertragungen_account','artikel','$id','lagerzahl','$anzahl')" + ); + $this->lagerzahlenmonitor[$uebertragungen_account][$id] = + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', + '', $anzahl, '', '', 'artikel', $id, (isset($this->lagerzahlenmonitor) && + isset($this->lagerzahlenmonitor[$uebertragungen_account]) + && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id])) ? + $this->lagerzahlenmonitor[$uebertragungen_account][$id] : 0 + ); + } + } + elseif($storageChanged && (isset($xml->charge) || isset($xml->mhd))) { + if($storageChanged > 0) { + $this->app->erp->LagerEinlagern($id, $storageChanged,$lagerplatz,$projekt,'API Korrektur'); + $anzahl = $this->app->DB->Select( + sprintf( + 'SELECT trim(SUM(menge))+0 FROM lager_platz_inhalt WHERE artikel = %d AND lager_platz = %d ', + $id, $lagerplatz + ) + ); + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', + '', $anzahl, '', '', 'artikel', $id, (isset($this->lagerzahlenmonitor) && + isset($this->lagerzahlenmonitor[$uebertragungen_account]) + && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id])) ? + $this->lagerzahlenmonitor[$uebertragungen_account][$id] : 0 + ); + } + elseif($storageChanged < 0) { + $this->app->erp->LagerAuslagernRegal($id,$lagerplatz,abs($storageChanged),$projekt,'API Korrektur'); + $anzahl = $this->app->DB->Select( + sprintf( + 'SELECT trim(SUM(menge))+0 FROM lager_platz_inhalt WHERE artikel = %d AND lager_platz = %d ', + $id, $lagerplatz + ) + ); + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_ok', + '', $anzahl, '', '', 'artikel', $id, (isset($this->lagerzahlenmonitor) && + isset($this->lagerzahlenmonitor[$uebertragungen_account]) + && isset($this->lagerzahlenmonitor[$uebertragungen_account][$id])) ? + $this->lagerzahlenmonitor[$uebertragungen_account][$id] : 0 + ); + } + } + } + } + + /** + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + */ + public function ParsePartXmlAricleWithOutId(&$xml, $uebertragungen_account, $obj) { + $parameter1 = ''; + $meldung = 'Artikel '; + + $account = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM uebertragungen_account WHERE id = %d LIMIT 1', + $uebertragungen_account + ) + ); + $artikeleingang = !empty($account['artikeleingang']); + $lagerzahleneingang = !empty($account['lagerzahleneingang']); + $updatearticles = !empty($account['updatearticles']); + $logarticlenotfound = !empty($account['logarticlenotfound']); + if(!empty($xml->anlegen) && !empty($xml->nummer) && !empty($xml->name_de) && $artikeleingang) { + $artikelarr = array('projekt'=> $account['projekt']); + + if(!empty($this->app->stringcleaner)) { + $this->app->stringcleaner->XMLArray_clean($xml); + } + foreach($xml as $k => $v) { + if(empty($k) || $k === 'id' || $k === 'nummer' || is_numeric($k)) { + continue; + } + $vr = @reset($v); + if(is_numeric($vr) || is_string($vr)) { + $artikelarr[$k] = (string)$vr; + } + } + + if(isset($xml->nummer))$artikelarr['nummer'] = (string)$xml->nummer; + if(isset($xml->ean))$artikelarr['ean'] = (string)$xml->ean; + if(isset($xml->herstellernummer))$artikelarr['herstellernummer'] = (string)$xml->herstellernummer; + if(isset($xml->name_de))$artikelarr['name_de'] = (string)$xml->name_de; + if(isset($xml->name_en))$artikelarr['name_en'] = (string)$xml->name_en; + if(isset($xml->anabregstext))$artikelarr['anabregstext'] = (string)$xml->anabregstext; + if(isset($xml->anabregstext_en))$artikelarr['anabregstext_en'] = (string)$xml->anabregstext_en; + if(isset($xml->uebersicht_de))$artikelarr['uebersicht_de'] = (string)$xml->uebersicht_de; + if(isset($xml->uebersicht_en))$artikelarr['uebersicht_en'] = (string)$xml->uebersicht_en; + if(isset($xml->kurztext_de))$artikelarr['kurztext_de'] = (string)$xml->kurztext_de; + if(isset($xml->kurztext_en))$artikelarr['kurztext_en'] = (string)$xml->kurztext_en; + if(isset($xml->lagerartikel))$artikelarr['lagerartikel'] = (string)$xml->lagerartikel; + + if(isset($xml->gewicht))$artikelarr['gewicht'] = (string)$xml->gewicht; + if(isset($xml->breite))$artikelarr['breite'] = (string)$xml->breite; + if(isset($xml->laenge))$artikelarr['laenge'] = (string)$xml->laenge; + if(isset($xml->hoehe))$artikelarr['hoehe'] = (string)$xml->hoehe; + + for($i = 1; $i <= 20; $i++) { + $name = 'freifeld'.$i; + if(isset($xml->$name)){ + $xml->$name = $this->app->Secure->CleanString($xml->$name, 'nohtml'); + $artikelarr[$name] = (string)$xml->$name; + } + } + $artikelid = $this->app->erp->InsertUpdateArtikel($artikelarr, $updatearticles); + if($artikelid) { + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'artikel_ok', "Artikel " . (string)$xml->nummer . " angelegt", '', '', '', 'artikel', $artikelid); + } + elseif($updatearticles && $logarticlenotfound) { + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'artikel_error', 'Artikel ' . (string)$xml->nummer . ' nicht gefunden', '', '', '', 'artikel', 0); + } + unset($artikelarr); + } + elseif((isset($xml->lagerzahl) || isset($xml->mhdanzahl)) && $lagerzahleneingang) { + if(isset($xml->nummer)) { + if($parameter1 == '') { + $parameter1 = (string)$xml->nummer; + $meldung .= "mit Artikelnummer ".$parameter1." nicht gefunden"; + } + } + + if(isset($xml->ean)) { + if($parameter1 == '') { + $parameter1 = (string)$xml->ean; + $meldung .= "mit EAN ".$parameter1." nicht gefunden"; + } + } + if(isset($xml->herstellernummer)) { + if($parameter1 == '') { + $parameter1 = (string)$xml->herstellernummer; + $meldung .= "mit Herstellernumemr ".$parameter1." nicht gefunden"; + } + } + if($parameter1) { + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','artikel','".$this->app->DB->real_escape_string($parameter1)."','lagerzahl_fehler','".$this->app->DB->real_escape_string($meldung)."')"); + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'lagerzahlen_error', $meldung, $this->app->DB->real_escape_string($parameter1), '', '', 'artikel'); + } + } + elseif(isset($xml->anlegen) && $xml->anlegen && isset($xml->nummer) && $xml->nummer != '' && isset($xml->name_de) && $xml->name_de != '' && !$artikeleingang) { + if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'not_allowed' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) AND nachricht like 'Artikel-Eingang%' LIMIT 1")) { + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', 'Artikel-Eingang ist nicht aktiviert', '', '', '', 'artikel'); + } + } + elseif((isset($xml->lagerzahl) || isset($xml->mhdanzahl)) && !$lagerzahleneingang) { + if(!$this->app->DB->Select("SELECT id FROM `uebertragungen_monitor` WHERE uebertragungen_account = '$uebertragungen_account' AND datei = '".$this->datei_id."' AND status = 'not_allowed' AND zeitstempel > DATE_SUB(now(), INTERVAL 1 HOUR) AND nachricht like 'Lagerzahlen-Eingang%' LIMIT 1")) { + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'not_allowed', 'Lagerzahlen-Eingang ist nicht aktiviert', '', '', '', 'artikel'); + } + } + } + + /** + * @param string $typ + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + */ + public function ParsePartXmlType($typ, &$xml, $uebertragungen_account, $obj) + { + $id = $this->GetIDFromFeld($typ, $xml); + if($id) { + switch($typ) { + case 'artikel': + $this->ParsePartXmlAricleWithId($xml, $uebertragungen_account, $obj, $id); + break; + } + } + else { + switch($typ) { + case 'artikel': + $this->ParsePartXmlAricleWithOutId($xml, $uebertragungen_account, $obj); + break; + } + } + } + + /** + * @param string $typ + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + */ + public function ParsePartXmlSupplierorderProductionWithoutId($typ, &$xml, $uebertragungen_account, $obj) + { + $isProduction = $typ === 'produktion'; + $lieferantok = false; + $neuerlieferant = false; + $adresselieferant = $this->app->DB->Select("SELECT adresselieferant FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); + if($adresselieferant && $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer <> '' AND geloescht = 0 AND id = '$adresselieferant' LIMIT 1")) + { + $adresse = $adresselieferant; + $lieferantok = true; + }else{ + if((empty($xml->lieferantennummer) && empty($xml->gln) ) || strtoupper((string)$xml->lieferantennummer) === 'NEW' || strtoupper((string)$xml->lieferantennummer) === 'NEU') { + if(isset($xml->name)) + { + $lieferantok = true; + $neuerlieferant = true; + }else{ + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','betellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Kein Lieferantenname angegeben')"); + } + }else{ + $adresse = null; + if(!empty($xml->adresse)){ + $adresse = $this->GetFromExtID('adresse', $xml->adresse); + } + if(!empty($adresse)){ + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE id = '$adresse' AND geloescht <> 1 AND lieferantennummer <> '' LIMIT 1"); + } + if(empty($adresse) && !empty($xml->gln)){ + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND gln <> '' AND gln = '".$this->app->DB->real_escape_string((string)$xml->gln)."' LIMIT 1"); + } + //if(!$adresse && !empty($xml->lieferantennummer))$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND lieferantennummer <> '' AND lieferantennummer = '".$this->app->DB->real_escape_string((string)$xml->lieferantennummer)."' LIMIT 1"); + if(empty($adresse) && !empty($xml->kundennummerlieferant)) + { + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND lieferantennummer <> '' AND lieferantennummer = '".$this->app->DB->real_escape_string((string)$xml->kundennummerlieferant)."' LIMIT 1"); + } + if(empty($adresse) && !empty($xml->adresse)) + { + $lieferantok = true; + $neuerlieferant = true; + } + if(!empty($adresse)){ + $lieferantok = true; + } + } + } + if($lieferantok) + { + $bestellung_positionen = null; + if(isset($xml->bestellung_position_list)) + { + if(isset($xml->bestellung_position_list->bestellung_position)) + { + $bestellung_positionen = &$xml->bestellung_position_list->bestellung_position; + } + + }elseif(isset($xml->bestellung_position)){ + $bestellung_positionen = &$xml->bestellung_position; + } + + if($bestellung_positionen) { + $artikelgefunden = true; + $artikelids = null; + $key = -1; + foreach($bestellung_positionen as $position) { + $key++; + if($artikelgefunden) + { + $_element1 = ''; + $_element2 = ''; + $_element3 = ''; + } + $_artikel = null; + if(!empty($position->artikel)) + { + $_artikel = $this->GetFromExtID('artikel', $xml->artikel); + if($_artikel) + { + $artikelids[$key] = $_artikel; + //$xml->artikelextid = $_artikel; + } + } + if(!$_artikel && !empty($position->ean)) + { + $_artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); + if(!$_artikel) + { + $_element1 = 'EAN: '.$position->ean; + }else { + $artikelids[$key] = $_artikel; + } + } + if(!$_artikel && !empty($position->herstellernummer)) + { + $_artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND herstellernummer <> '' AND herstellernummer = '".$this->app->DB->real_escape_string((string)$position->herstellernummer)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); + if(!$_artikel) + { + if($_element1 == '') + { + $_element1 = 'Herstellernummer: '.$position->herstellernummer; + }else{ + $_element2 = 'Herstellernummer: '.$position->herstellernummer; + } + }else { + $artikelids[$key] = $_artikel; + } + } + if(!$_artikel && !empty($position->bestellnummer)) + { + $_artikel = $this->app->DB->Select("SELECT e.artikel FROM `einkaufspreise` e INNER JOIN artikel a ON e.artikel = a.id WHERE e.bestellnummer <> '' AND e.bestellnummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' ORDER BY a.projekt = '$projekt' DESC LIMIT 1"); + if(!$_artikel){ + $_artikel = $this->app->DB->Select("SELECT id FROM `artikel` WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); + } + if(!$_artikel) + { + if($_element1 == '') + { + $_element1 = 'Bestellernummer: '.$position->bestellnummer; + }elseif($_element2 == ''){ + $_element2 = 'Bestellernummer: '.$position->bestellnummer; + }else{ + $_element3 = 'Bestellernummer: '.$position->bestellnummer; + } + }else { + $artikelids[$key] = $_artikel; + } + } + if(!$_artikel && !$this->app->DB->Select("SELECT artikelanlegen FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1")){ + $artikelgefunden = false; + } + if(!$_artikel) { + if(!empty($position->bestellnummer)) + { + if(!$this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' LIMIT 1")) + { + $artikelgefunden = false; + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Artikelnummer ".$this->app->DB->real_escape_string((string)$position->nummer)." nicht gefunden')"); + break; + } + }elseif(!empty($position->ean)){ + if(!$this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' LIMIT 1")) + { + $artikelgefunden = false; + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','EAN ".$this->app->DB->real_escape_string((string)$position->ean)." nicht gefunden')"); + break; + } + }else{ + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Keine Artikelnummer gefunden')"); + break; + } + } + } + if($artikelgefunden) + { + $_typ =''; + $name = ''; + $abteilung = ''; + $unterabteilung = ''; + $ansprechpartner = ''; + $adresszusatz = ''; + $strasse = ''; + $land = $this->app->erp->Firmendaten('land'); + $plz = ''; + $ort = ''; + $email = ''; + $telefon = ''; + $telefax = ''; + $ustid = ''; + $partner = ''; + $bundesstaat = ''; + $projekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); + if(!empty($this->app->stringcleaner)) { + $this->app->stringcleaner->XMLArray_clean($xml); + } + + if(isset($xml->name))$name = (string)$xml->name; + if(isset($xml->anrede))$_typ = (string)$xml->anrede; + if(isset($xml->abteilung))$abteilung = (string)$xml->abteilung; + if(isset($xml->unterabteilung))$unterabteilung = (string)$xml->unterabteilung; + if(isset($xml->ansprechpartner))$ansprechpartner = (string)$xml->ansprechpartner; + if(isset($xml->adresszusatz))$adresszusatz = (string)$xml->adresszusatz; + if(isset($xml->strasse))$strasse = (string)$xml->strasse; + if(isset($xml->land))$land = (string)$xml->land; + if(isset($xml->bundesstaat))$bundesstaat = (string)$xml->bundesstaat; + if(isset($xml->plz))$plz = (string)$xml->plz; + if(isset($xml->ort))$ort = (string)$xml->ort; + if(isset($xml->email))$email = (string)$xml->email; + if(isset($xml->telefon))$telefon = (string)$xml->telefon; + if(isset($xml->telefax))$telefax = (string)$xml->telefax; + if(isset($xml->ustid))$ustid = (string)$xml->ustid; + if(isset($xml->partner))$partner = (string)$xml->partner; + if(isset($xml->projekt) && (!isset($xml->belegnr) || $xml->belegnr == '' || strtoupper($xml->belegnr) === 'NEW' || strtoupper($xml->belegnr) === 'NEU')) { + if((string)$xml->projekt != '') + { + $_projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE geloescht = 0 AND abkuerzung = '".$this->app->DB->real_escape_string((string)$xml->projekt)."' LIMIT 1"); + if($_projekt)$projekt = $_projekt; + } + if($land == '')$land = $this->app->erp->Projektdaten($projekt ,'land'); + } + if($land == '')$land = $this->app->erp->Firmendaten('land'); + if($neuerlieferant) + { + $adressearr = array('lieferantennummer'=>$this->app->erp->GetNextNummer('lieferantennummer',$projekt)); + $adressearr['typ'] = $_typ; + $adressearr['name'] = $name; + $adressearr['abteilung'] = $abteilung; + $adressearr['unterabteilung'] = $unterabteilung; + $adressearr['ansprechpartner'] = $ansprechpartner; + $adressearr['adresszusatz'] = $adresszusatz; + $adressearr['land'] = $land; + $adressearr['plz'] = $plz; + $adressearr['ort'] = $ort; + $adressearr['email'] = $email; + $adressearr['telefon'] = $telefon; + $adressearr['telefax'] = $telefax; + $adressearr['ustid'] = $ustid; + $adressearr['projekt'] = $projekt; + $adressearr['bundesstaat'] = $bundesstaat; + $adresse = $this->app->erp->InsertUpdateAdresse($adressearr); + if(isset($xml->adresse) && $xml->adresse != '') { + $this->SetExtIDMapping('adresse', $adresse, $xml->adresse); + } + unset($adressearr); + } + if($adresse) + { + if($isProduction) { + $bestellung = $this->app->erp->CreateProduktion(); + $belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM produktion WHERE id = '$bestellung' LIMIT 1"); + if($belegnr === '' || $belegnr === '0'){ + $belegnr = $this->app->erp->GetNextNummer('produktion',$projekt,$bestellung); + } + } + else{ + $bestellung = $this->app->erp->CreateBestellung(); + $belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id = '$bestellung' LIMIT 1"); + if($belegnr === '' || $belegnr === '0'){ + $belegnr = $this->app->erp->GetNextNummer('bestellung',$projekt,$bestellung); + } + } + + + if(isset($xml->belegnr) && $xml->belegnr != '' && strtoupper($xml->belegnr) !== 'NEW' && strtoupper($xml->belegnr) !== 'NEU'){ + $this->SetExtIDMapping($isProduction?'produktion':'bestellung', $bestellung, $xml->belegnr); + } + $this->app->erp->LoadBestellungStandardwerte($bestellung,$adresse); + + $auftragarr = null; + $auftragarr['belegnr'] = $belegnr; + $auftragarr['projekt'] = $projekt; + if($_typ)$auftragarr['typ'] = $_typ; + $auftragarr['name'] = $name; + $auftragarr['abteilung'] = $abteilung; + $auftragarr['unterabteilung'] = $unterabteilung; + $auftragarr['ansprechpartner'] = $ansprechpartner; + $auftragarr['strasse'] = $strasse; + $auftragarr['bundesstaat'] = $bundesstaat; + $auftragarr['land'] = $land; + $auftragarr['plz'] = $plz; + $auftragarr['ort'] = $ort; + $auftragarr['email'] = $email; + $auftragarr['telefon'] = $telefon; + $auftragarr['telefax'] = $telefax; + $auftragarr['ustid'] = $ustid; + if($isProduction && isset($xml->unterlistenexplodieren)) { + $auftragarr['unterlistenexplodieren'] = (string)$xml->unterlistenexplodieren; + } + if(isset($xml->abweichendelieferadresse))$auftragarr['abweichendelieferadresse'] = (string)$xml->abweichendelieferadresse; + if(isset($xml->bestellungsart))$auftragarr['bestellungsart'] = (string)$xml->bestellungsart; + if(isset($xml->bearbeiter))$auftragarr['bearbeiter'] = (string)$xml->bearbeiter; + if(isset($xml->datum))$auftragarr['datum'] = (string)$xml->datum; + if(isset($xml->lieferdatum))$auftragarr['lieferdatum'] = (string)$xml->lieferdatum; + foreach(['datum', 'lieferdatum'] as $dateField) { + if(!empty($auftragarr[$dateField]) && strpos($auftragarr[$dateField], '.') !== false) { + $auftragarr[$dateField] = $this->app->String->Convert($auftragarr[$dateField], '%1.%2.%3', '%3-%2-%1'); + } + } + if(isset($xml->ustid))$auftragarr['ustid'] = (string)$xml->ustid; + if(isset($xml->ust_befreit))$auftragarr['ust_befreit'] = (string)$xml->ust_befreit; + if(isset($xml->internet))$auftragarr['internet'] = (string)$xml->internet; + if(isset($xml->transaktionsnummer))$auftragarr['transaktionsnummer'] = (string)$xml->transaktionsnummer; + if(isset($xml->versandart))$auftragarr['versandart'] = (string)$xml->versandart; + if(isset($xml->vertrieb))$auftragarr['vertrieb'] = (string)$xml->vertrieb; + if(isset($xml->zahlungsweise))$auftragarr['zahlungsweise'] = (string)$xml->zahlungsweise; + if(isset($xml->freitext))$auftragarr['freitext'] = (string)$xml->freitext; + if(isset($xml->bank_inhaber))$auftragarr['bank_inhaber'] = (string)$xml->bank_inhaber; + if(isset($xml->bank_institut))$auftragarr['bank_institut'] = (string)$xml->bank_institut; + if(isset($xml->bank_blz))$auftragarr['bank_blz'] = (string)$xml->bank_blz; + if(isset($xml->bank_konto))$auftragarr['bank_konto'] = (string)$xml->bank_konto; + if(isset($xml->ansprechpartner))$auftragarr['ansprechpartner'] = (string)$xml->ansprechpartner; + if(isset($xml->liefername))$auftragarr['liefername'] = (string)$xml->liefername; + if(isset($xml->lieferland))$auftragarr['lieferland'] = (string)$xml->lieferland; + if(isset($xml->lieferstrasse))$auftragarr['lieferstrasse'] = (string)$xml->lieferstrasse; + if(isset($xml->lieferabteilung))$auftragarr['lieferabteilung'] = (string)$xml->lieferabteilung; + if(isset($xml->lieferunterabteilung))$auftragarr['lieferunterabteilung'] = (string)$xml->lieferunterabteilung; + if(isset($xml->lieferansprechpartner))$auftragarr['lieferansprechpartner'] = (string)$xml->lieferansprechpartner; + if(isset($xml->lieferort))$auftragarr['lieferort'] = (string)$xml->lieferort; + if(isset($xml->lieferbundesstaat))$auftragarr['lieferbundesstaat'] = (string)$xml->lieferbundesstaat; + if(isset($xml->lieferplz))$auftragarr['lieferplz'] = (string)$xml->lieferplz; + if(isset($xml->lieferadresszusatz))$auftragarr['lieferadresszusatz'] = (string)$xml->lieferadresszusatz; + + if(isset($xml->internebemerkung))$auftragarr['internebemerkung'] = (string)$xml->internebemerkung; + if(isset($xml->internebezeichnung))$auftragarr['internebezeichnung'] = (string)$xml->internebezeichnung; + + $auftragarr['status']='freigegeben'; + $auftragarr['projekt']=$projekt; + $auftragarr['zahlungszielskonto']=0; + if(isset($xml->gesamtsumme))$auftragarr['gesamtsumme'] = (float)str_replace(',','.',$xml->gesamtsumme); + $auftragarr = $this->formatDateFieldsToMysqlFormat($auftragarr); + $this->app->DB->UpdateArr($isProduction ? 'produktion' : 'bestellung', $bestellung, 'id', $auftragarr, true); + $key = -1; + foreach($bestellung_positionen as $position) + { + $key++; + $artikel = null; + if(!empty($artikelids) && isset($artikelids[$key])) { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '".$artikelids[$key]."' LIMIT 1"); + if($artikel) + { + if($isProduction) { + $newposid = $this->app->erp->AddArtikelProduktion($artikel, isset($position->menge) ? $position->menge : 1, $bestellung); + if(isset($position->preis) && $position->preis != 0) { + $this->app->DB->Update("UPDATE produktion_position SET preis = '".(float)$position->preis."' WHERE id = '$newposid'"); + } + if(isset($position->vpe) && $position->vpe != '') { + $this->app->DB->Update("UPDATE produktion_position SET vpe = '".(string)$position->vpe."' WHERE id = '$newposid'"); + } + } + else{ + $newposid = $this->app->erp->AddBestellungPosition($bestellung, 0, (isset($position->menge) ? $position->menge : 1), isset($auftragarr['datum']) ? $auftragarr['datum'] : date('Y-m-d'), + ((isset($position->beschreibung) && $position->beschreibung != '') ? (string)$position->beschreibung : ''), $artikel, + ((isset($position->einheit) && $position->einheit != '') ? (string)$position->einheit : ''), + ((isset($position->waehrung) && $position->waehrung != '') ? (string)$position->waehrung : '') + ); + if(isset($position->preis) && $position->preis != 0) { + $this->app->DB->Update("UPDATE bestellung_position SET preis = '".(float)$position->preis."' WHERE id = '$newposid'"); + } + if(isset($position->bestellnummer) && $position->bestellnummer != '') { + $this->app->DB->Update("UPDATE bestellung_position SET bestellnummer = '".(string)$position->bestellnummer."' WHERE id = '$newposid'"); + } + if(isset($position->vpe) && $position->vpe != '') { + $this->app->DB->Update("UPDATE bestellung_position SET vpe = '".(string)$position->vpe."' WHERE id = '$newposid'"); + } + } + /*$newposid = $this->app->erp->AddPositionManuellPreisNummer('bestellung',$bestellung, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), + (isset($position->menge)?$position->menge:1) , + (isset($position->name)? $position->name:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), + isset($position->preis)? str_replace(',','.',$position->preis):$this->app->erp->GetEinkaufspreis($artikel,(isset($position->menge)?$position->menge:1),$adresse) , + $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1") , + 0,0, + isset($xml->waehrung)?$xml->waehrung:'EUR'); */ + } + } + if(isset($position->bestellnummer) && !$artikel) + { + //$artikel = $this->app->DB->Select("SELECT e.artikel FROM `einkaufspreise` e INNER JOIN artikel a ON e.artikel = a.id WHERE e.bestellnummer <> '' AND e.bestellnummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' ORDER BY a.projekt = '$projekt' DESC LIMIT 1"); + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->bestellnummer)."' LIMIT 1"); + if($isProduction) { + if($artikel) { + $newposid = $this->app->erp->AddArtikelProduktion($artikel, isset($position->menge) ? $position->menge : 1, $bestellung); + } + } else{ + $newposid = $this->app->erp->AddPositionManuellPreisNummer('bestellung', $bestellung, $projekt, $position->nummer, + (isset($position->menge) ? $position->menge : 1), + (isset($position->name) ? $position->name : $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), + isset($position->preis) ? str_replace(',', '.', $position->preis) : $this->app->erp->GetEinkaufspreis($artikel, (isset($position->menge) ? $position->menge : 1), $adresse), + $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"), + 0, 0, + isset($xml->waehrung) ? $xml->waehrung : 'EUR'); + } + } + if(!empty($position->ean) && !$artikel) + { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' LIMIT 1"); + if($artikel) + { + if($isProduction) { + $newposid = $this->app->erp->AddArtikelProduktion($artikel, isset($position->menge) ? $position->menge : 1, $bestellung); + } + else{ + $newposid = $this->app->erp->AddPositionManuellPreisNummer('bestellung', $bestellung, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), + (isset($position->menge) ? $position->menge : 1), + (isset($position->name) ? $position->name : $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), + isset($position->preis) ? str_replace(',', '.', $position->preis) : $this->app->erp->GetEinkaufspreis($artikel, (isset($position->menge) ? $position->menge : 1), $adresse), + $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"), + 0, 0, + isset($xml->waehrung) ? $xml->waehrung : 'EUR'); + } + } + + } + if(!empty($position->herstellernummer) && !$artikel) + { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND herstellernummer <> '' AND herstellernummer = '".$this->app->DB->real_escape_string((string)$position->herstellernummer)."' LIMIT 1"); + if($artikel) { + if($isProduction) { + $newposid = $this->app->erp->AddArtikelProduktion($artikel, isset($position->menge) ? $position->menge : 1, $bestellung); + } else{ + $newposid = $this->app->erp->AddPositionManuellPreisNummer('bestellung', $bestellung, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), + (isset($position->menge) ? $position->menge : 1), + (isset($position->name) ? $position->name : $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), + isset($position->preis) ? str_replace(',', '.', $position->preis) : $this->app->erp->GetEinkaufspreis($artikel, (isset($position->menge) ? $position->menge : 1), $adresse), + $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"), + 0, 0, + isset($xml->waehrung) ? $xml->waehrung : 'EUR'); + } + } + + } + + /*if($newposid > 0) + { + $this->app->erp->RunHook("beleg_afterinsertposition", 5, "auftrag",$auftrag,$artikel,(isset($position->menge)?$position->menge:1),$newposid); + }*/ + } + if($isProduction) { + $this->app->erp->AuftragExplodieren($bestellung, 'produktion'); + $this->app->erp->ProduktionEinzelnBerechnen($bestellung); + $this->app->erp->ProduktionNeuberechnen($bestellung); + } + else{ + $this->app->erp->BestellungNeuberechnen($bestellung); + } + + if(isset($xml->dateien)) { + foreach($xml->dateien as $datei) { + foreach($datei as $singledatei) { + $isfile = false; + $data = null; + if(is_file($singledatei->dateiname)){ + $type = mime_content_type(basename($singledatei->dateiname)); + if($type !== 'text/x-php' && $type !== 'text/php' && $type !== 'application/php' && $type !== 'application/x-php' && $type !== 'application/x-httpd-php' && $type !== 'application/x-httpd-php-source'){ + + if($singledatei->dateiinhalt == ''){ + $data = file_get_contents($singledatei->dateiname); + $isfile = true; + } + }else{ + $singledatei->dateiinhalt = ''; + } + } + if(empty($data)){ + if(!empty($singledatei->dateiinhalt)){ + $data = base64_decode($singledatei->dateiinhalt); + }else{ + $data = ''; + } + } + if($isfile){ + $name = $this->app->erp->GetTmp().basename($singledatei->dateiname); + }else{ + $name = $this->app->erp->GetTmp().$singledatei->dateiname; + } + + file_put_contents($name, $data); + + $pfad = $this->app->Conf->WFuserdata; + $pfad = rtrim($pfad); + $pfad .= '/dms/'; + + if(!file_exists($pfad)){ + if(!mkdir($pfad, 0777, true) && !is_dir($pfad)) + { + $this->app->erp->LogFile($pfad.' konnte nicht erstellt werden'); + } + } + + $speicherpfad = $pfad.$this->app->Conf->WFdbname; + + if(!file_exists($speicherpfad)) { + if(!mkdir($speicherpfad, 0777, true) && !is_dir($speicherpfad)) + { + $this->app->erp->LogFile($speicherpfad.' konnte nicht erstellt werden'); + } + } + + $fileid = $this->app->erp->CreateDatei( + $singledatei->dateiname, + !empty($singledatei->titel)?$singledatei->titel:$singledatei->dateiname, + !empty($singledatei->beschreibung)?(string)$singledatei->beschreibung:'', '', + $name, '',true,$speicherpfad + ); + $subjekt = !empty($singledatei->subjekt)?(string)$singledatei->subjekt:'Sonstige'; + $this->app->erp->AddDateiStichwort($fileid, $subjekt, $isProduction?'Produktion': 'Bestellung', $bestellung); + + if($isfile){ + rename($singledatei->dateiname, $singledatei->dateiname.'.del'); + } + } + } + } + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $isProduction?'produktion':'bestellung_ok', '', '', '', '', $isProduction?'produktion': 'bestellung', $bestellung); + $doctype = $isProduction?'produktion': 'bestellung'; + $this->app->erp->RunHook('transfer_document_incoming', 3, $uebertragungen_account, $doctype, $bestellung); + } + } + else { + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'bestellung_error', 'Artikel nicht gefunden', $this->app->DB->real_escape_string((string)$_element1), $this->app->DB->real_escape_string((string)$_element2), $this->app->DB->real_escape_string((string)$_element3), 'bestellung'); + } + } + else{ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'bestellung_error', 'Keine Artikel gefunden', $this->app->DB->real_escape_string(!empty($xml->belegnr)?(string)$xml->belegnr:''), '', '', 'bestellung'); + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Keine Positionen gefunden')"); + } + } + else{ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'bestellung_error', 'Lieferant gefunden', $this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid), '', '', 'bestellung'); + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','bestellung','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','bestellung_fehler','Lieferantennummer ".$this->app->DB->real_escape_string((string)$xml->kundennummer)." nicht gefunden')"); + } + } + + /** + * @param array $documentArray + * + * @return array + */ + public function formatDateFieldsToMysqlFormat($documentArray) + { + if(!is_array($documentArray)) { + return $documentArray; + } + $dateCols = ['datum', 'lieferdatum', 'tatsaechlicheslieferdatum', ]; + foreach($documentArray as $key => $documentValue) { + if(!is_string($documentValue)) { + continue; + } + if(!in_array($key, $dateCols)) { + continue; + } + $documentValue = substr($documentValue, 0, 10); + if(strpos($documentValue, '.') === false) { + continue; + } + $documentArray[$key] = $this->app->String->Convert($documentValue, '%1.%2.%3', '%3-%2-%1'); + } + + return $documentArray; + } + + /** + * @param string $typ + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + */ + public function ParsePartXmlOrderOfferWithoutId($typ, &$xml, $uebertragungen_account, $obj) + { + $transferAccount = $this->app->DB->SelectRow( + sprintf( + 'SELECT `projekt`, `createarticleifnotexists`, `createarticleasstoragearticle` + FROM `uebertragungen_account` WHERE `id` = %d LIMIT 1', + $uebertragungen_account + ) + ); + $projekt = $transferAccount['projekt']; + $createArticleIfNotEmpty = !empty($transferAccount['createarticleifnotexists']); + $markAsStorageArticle = !empty($transferAccount['createarticleasstoragearticle']); + if(!$this->app->DB->Select("SELECT id FROM $typ WHERE shopextid = '".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."' AND projekt = '$projekt' AND shopextid <> ''") + && (!isset($xml->belegnr) || strtoupper($xml->belegnr) == 'NEW' || strtoupper($xml->belegnr) == 'NEU' || !$this->GetFromExtID($typ, $xml->belegnr))) + { + $auftragarr = []; + $order = null; + $addressFromDocument = null; + if($typ === 'retoure') { + if(isset($xml->auftragid)) { + $orderId = (string)$xml->auftragid; + if(!empty($orderId)) { + $order = $this->app->DB->SelectRow( + sprintf( + 'SELECT `id`, `belegnr`, `adresse` FROM `auftrag` WHERE `id` = %d', + $orderId + ) + ); + if(!empty($order)) { + $auftragarr['auftragid'] = $order['id']; + $auftragarr['auftrag'] = $order['belegnr']; + $addressFromDocument = $order['adresse']; + } + } + } + if(isset($xml->auftrag) && empty($auftragarr['auftragid'])) { + $orderNumber = (string)$xml->auftrag; + if(!empty($orderNumber)) { + $order = $this->app->DB->SelectRow( + sprintf( + "SELECT `belegnr`, `id`, `adresse` + FROM `auftrag` WHERE `belegnr` = '%s' + ORDER BY `projekt` = %d DESC + LIMIT 1", + $orderNumber, $projekt + ) + ); + if(!empty($order['belegnr'])) { + $auftragarr['auftrag'] = $order['belegnr']; + $auftragarr['auftragid'] = $order['id']; + $addressFromDocument = $order['adresse']; + } + } + } + if(isset($xml->lieferscheinid)) { + $deliveryNoteId = (string)$xml->lieferscheinid; + if(!empty($deliveryNoteId)) { + $deliveryNote = $this->app->DB->SelectRow( + sprintf( + 'SELECT `id`, `belegnr`, `adresse` FROM `lieferschein` WHERE `id` = %d', + $deliveryNoteId + ) + ); + if(!empty($deliveryNote)) { + $auftragarr['lieferscheinid'] = $deliveryNote['id']; + $auftragarr['lieferschein'] = $deliveryNote['belegnr']; + if(empty($addressFromDocument)) { + $addressFromDocument = $deliveryNote['adresse']; + } + } + } + } + if(isset($xml->lieferschein)) { + $deliveryNoteNumber = (string)$xml->lieferschein; + if(!empty($deliveryNoteNumber)) { + $deliveryNote = $this->app->DB->SelectRow( + sprintf( + "SELECT `belegnr`, `id`, `adresse` + FROM `lieferschein` WHERE `belegnr` = '%s' + ORDER BY `projekt` = %d DESC + LIMIT 1", + $deliveryNoteNumber, $projekt + ) + ); + if(!empty($deliveryNote['belegnr'])) { + $auftragarr['lieferschein'] = $deliveryNote['belegnr']; + $auftragarr['lieferscheinid'] = $deliveryNote['id']; + if(empty($addressFromDocument)) { + $addressFromDocument = $deliveryNote['adresse']; + } + } + } + } + } + if((int)$addressFromDocument > 0) { + $addressFromDocument = $this->app->DB->Select( + sprintf( + 'SELECT `id` FROM `adresse` WHERE `id` = %d AND `geloescht` = 0', + $addressFromDocument + ) + ); + } + //if(true) + //{ + $kundeok = false; + $neuerkunde = false; + if(isset($xml->kundennummer) && ( strtoupper((string)$xml->kundennummer) == 'NEW' || strtoupper((string)$xml->kundennummer) == 'NEU') && isset($xml->name)) + { + $neuerkunde = true; + $kundeok = true; + } + elseif(isset($xml->kundennummer) && ( strtoupper((string)$xml->kundennummer) == 'NEW' || strtoupper((string)$xml->kundennummer) == 'NEU')){ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ.'_error', "Auftrag enthält keinen Namen", $this->app->DB->real_escape_string((string)$xml->extid), '', '', $typ); + } + elseif((empty($xml->gln) )){ + if(isset($xml->name)) + { + if($this->app->DB->Select("SELECT kundennummernuebernehmen FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1") && isset($xml->kundennummer) && $xml->kundennummer != '') + { + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer <> '' AND kundennummer = '".$this->app->DB->real_escape_string((string)$xml->kundennummer)."' AND ifnull(geloescht,0) = 0 ORDER BY projekt = '$projekt' DESC LIMIT 1"); + }else { + $adresse = null; + } + if(empty($adresse)) + { + if(isset($xml->plz) && isset($xml->strasse) && isset($xml->ort) && isset($xml->email)) + { + $adresseprojekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '$uebertragungen_account' LIMIT 1"); + if($adresseprojekt) + { + $adresseprojekt = " and projekt = '$adresseprojekt' "; + }else{ + $adresseprojekt = ''; + } + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE name='".$this->app->DB->real_escape_string((string)$xml->name)."' AND email='".$this->app->DB->real_escape_string((string)$xml->email)."' + AND strasse='".$this->app->DB->real_escape_string((string)$xml->strasse)."' AND plz='".$this->app->DB->real_escape_string((string)$xml->plz)."' AND ort='".$this->app->DB->real_escape_string((string)$xml->ort)."' AND kundennummer <> '' AND geloescht!=1 $adresseprojekt LIMIT 1"); + $neuerkunde = true; + if($adresse) + { + $neuerkunde = false; + } + }else{ + $neuerkunde = true; + } + $kundeok = true; + }else{ + $neuerkunde = false; + $kundeok = true; + } + } + else{ + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Kein Kundenname angegeben')"); + } + if(empty($adresse) && (int)$addressFromDocument > 0) { + $neuerkunde = false; + $kundeok = true; + $adresse = $addressFromDocument; + } + } + else{ + if($this->app->DB->Select("SELECT kundennummernuebernehmen FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1") && isset($xml->kundennummer) && $xml->kundennummer != '') + { + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer <> '' AND kundennummer = '".$this->app->DB->real_escape_string((string)$xml->kundennummer)."' AND ifnull(geloescht,0) = 0 ORDER BY projekt = '$projekt' DESC LIMIT 1"); + }else { + $adresse = null; + } + if(!$adresse && !empty($xml->gln) && $xml->gln != ''){ + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND gln <> '' AND gln = '".$this->app->DB->real_escape_string((string)$xml->gln)."' LIMIT 1"); + } + if(!empty($xml->adresse)){ + $adresse = $this->GetFromExtID('adresse', $xml->adresse); + } + if(!$adresse && !empty($xml->adresse)) + { + $kundeok = true; + $neuerkunde = true; + } + //if(!empty($xml->kundennummer))$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht <> 1 AND kundennummer <> '' AND kundennummer = '".$this->app->DB->real_escape_string((string)$xml->kundennummer)."' LIMIT 1"); + + if($adresse)$kundeok = true; + + if(empty($adresse) && (int)$addressFromDocument > 0) { + $neuerkunde = false; + $kundeok = true; + } + } + if($kundeok) + { + $auftrag_positionen = null; + $listname = $typ.'_position_list'; + $positionname = $typ.'_position'; + if(isset($xml->$listname)) + { + if(isset($xml->$listname->$positionname)) + { + $auftrag_positionen = &$xml->$listname->$positionname; + } + + }elseif(isset($xml->$positionname)){ + $auftrag_positionen = &$xml->$positionname; + } + + if($auftrag_positionen) + { + $artikelgefunden = true; + foreach($auftrag_positionen as $position) + { + $_artikel = null; + $ean = null; + $extArticleId = null; + $number = null; + if(isset($position->artikel) && $position->artikel != '') + { + $extArticleId = (string)$position->artikel; + $_artikel = $this->GetFromExtID('artikel', $xml->artikel); + if($_artikel) { + $xml->artikelextid = $_artikel; + } + } + if(!$_artikel && isset($position->ean) && $position->ean != '') + { + $ean = (string)$position->ean; + $_artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); + } + + if(!$_artikel && isset($position->nummer) && $position->nummer != '') + { + $number = (string)$position->nummer; + $_artikel = $this->app->DB->Select( + "SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '" + . $this->app->DB->real_escape_string((string)$position->nummer). + "' ORDER BY projekt = '$projekt' DESC LIMIT 1" + ); + $element1 = $position->nummer; + } + + if(!$_artikel && $createArticleIfNotEmpty) { + if(!empty($number) || !empty($extArticleId)) { + $newArticleArr = [ + 'projekt' => $projekt, + ]; + if(!empty($markAsStorageArticle)) { + $newArticleArr = [ + 'lagerartikel' => 1, + ]; + } + if(!empty($position->name)) { + $newArticleArr['name_de'] = (string)$position->name; + } + if($ean !== null) { + $newArticleArr['ean'] = $ean; + } + if($extArticleId === null) { + $newArticleArr['nummer'] = $number; + } + else { + $newArticleArr['nummer'] = $this->app->erp->GetNextNummer('artikel', $projekt); + } + + $_artikel = $this->app->erp->InsertUpdateArtikel($newArticleArr); + if($extArticleId !== null) { + $this->SetExtIDMapping('artikel', $_artikel, $extArticleId); + } + } + } + + if(!$_artikel) + { + $artikelgefunden = false; + if(!empty($position->nummer)) + { + if(!$this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->nummer)."' ORDER BY projekt = '$projekt' DESC LIMIT 1")) + { + $artikelgefunden = false; + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Artikelnummer ".$this->app->DB->real_escape_string((string)$position->nummer)." nicht gefunden')"); + break; + } + }elseif(!empty($position->ean)){ + if(!$this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' LIMIT 1")) + { + $artikelgefunden = false; + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','EAN ".$this->app->DB->real_escape_string((string)$position->ean)." nicht gefunden')"); + break; + } + }else{ + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Keine Artikelnummer gefunden')"); + break; + } + } + } + if($artikelgefunden) + { + $_typ =''; + $name = ''; + $abteilung = ''; + $unterabteilung = ''; + $ansprechpartner = ''; + $adresszusatz = ''; + $strasse = ''; + $land = $this->app->erp->Firmendaten('land'); + $plz = ''; + $ort = ''; + $email = ''; + $telefon = ''; + $telefax = ''; + $ustid = ''; + $partner = ''; + $bundesstaat = ''; + $projekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '".$uebertragungen_account."' LIMIT 1"); + + if(!empty($this->app->stringcleaner)) + { + $this->app->stringcleaner->XMLArray_clean($xml); + } + + if(isset($xml->name))$name = (string)$xml->name; + if(isset($xml->anrede))$_typ = (string)$xml->anrede; + if(isset($xml->abteilung))$abteilung = (string)$xml->abteilung; + if(isset($xml->unterabteilung))$unterabteilung = (string)$xml->unterabteilung; + if(isset($xml->ansprechpartner))$ansprechpartner = (string)$xml->ansprechpartner; + if(isset($xml->adresszusatz))$adresszusatz = (string)$xml->adresszusatz; + if(isset($xml->strasse))$strasse = (string)$xml->strasse; + if(isset($xml->land))$land = (string)$xml->land; + if(isset($xml->bundesstaat))$bundesstaat = (string)$xml->bundesstaat; + if(isset($xml->plz))$plz = (string)$xml->plz; + if(isset($xml->ort))$ort = (string)$xml->ort; + if(isset($xml->email))$email = (string)$xml->email; + if(isset($xml->telefon))$telefon = (string)$xml->telefon; + if(isset($xml->telefax))$telefax = (string)$xml->telefax; + if(isset($xml->ustid))$ustid = (string)$xml->ustid; + if(isset($xml->partner))$partner = (string)$xml->partner; + if(isset($xml->projekt) && (!isset($xml->belegnr) || $xml->belegnr == '' || strtoupper($xml->belegnr) == 'NEW' || strtoupper($xml->belegnr) == 'NEU')) + { + if(is_numeric($this->projekt)){ + $projekt = (string)$xml->projekt; + } + if($land == ''){ + $land = $this->app->erp->Projektdaten($projekt ,'land'); + } + } + if($land == '') + { + $land = $this->app->erp->Firmendaten('land'); + } + if($neuerkunde) + { + $adresse = $this->app->erp->KundeAnlegen($_typ,$name,$abteilung, + $unterabteilung,$ansprechpartner,$adresszusatz,$strasse,$land,$plz,$ort,$email,$telefon,$telefax,$ustid,$partner,$projekt); + if($bundesstaat != ''){ + $this->app->DB->Update("UPDATE adresse SET bundesstaat = '".$this->app->DB->real_escape_string($bundesstaat)."' WHERE id = '$adresse' LIMIT 1"); + } + if(isset($xml->adresse) && $xml->adresse != '') + { + $this->SetExtIDMapping('adresse', $adresse, $xml->adresse); + } + } + if($adresse) { + $createname = 'Create'.ucfirst($typ); + $auftrag = $this->app->erp->$createname(); + $belegnr = (string)$this->app->DB->Select("SELECT `belegnr` FROM `$typ` WHERE `id` = '$auftrag' LIMIT 1"); + if($belegnr === '' || $belegnr === '0'){ + $belegnr = $this->app->erp->GetNextNummer($typ,$projekt,$auftrag); + } + if(isset($xml->belegnr) && $xml->belegnr != '' && strtoupper($xml->belegnr) != 'NEW' && strtoupper($xml->belegnr) != 'NEU'){ + $this->SetExtIDMapping($typ, $auftrag, $xml->belegnr); + } + $standardwertename = 'Load'.ucfirst($typ).'Standardwerte'; + $this->app->erp->$standardwertename($auftrag, $adresse); + if($typ === 'angebot' || $typ === 'auftrag'){ + $this->app->DB->Update( + "UPDATE `$typ` + SET `shopextid` = '" . $this->app->DB->real_escape_string(empty($xml->extid) ? '' : $xml->extid) . "' + WHERE `id` = '$auftrag' + LIMIT 1" + ); + } + $auftragarr['belegnr'] = $belegnr; + if($_typ) + { + $auftragarr['typ'] = $_typ; + } + if(!empty($name)) { + $auftragarr['name'] = $name; + $auftragarr['abteilung'] = $abteilung; + $auftragarr['unterabteilung'] = $unterabteilung; + $auftragarr['ansprechpartner'] = $ansprechpartner; + $auftragarr['strasse'] = $strasse; + $auftragarr['bundesstaat'] = $bundesstaat; + $auftragarr['land'] = $land; + $auftragarr['plz'] = $plz; + $auftragarr['ort'] = $ort; + } + if(!empty($email)){ + $auftragarr['email'] = $email; + } + if(!empty($telefon)){ + $auftragarr['telefon'] = $telefon; + } + if(!empty($telefax)){ + $auftragarr['telefax'] = $telefax; + } + if(isset($xml->abweichendelieferadresse))$auftragarr['abweichendelieferadresse'] = (string)$xml->abweichendelieferadresse; + if(isset($xml->art))$auftragarr['art'] = (string)$xml->art; + if(isset($xml->bearbeiter))$auftragarr['bearbeiter'] = (string)$xml->bearbeiter; + if(isset($xml->datum))$auftragarr['datum'] = (string)$xml->datum; + if(isset($xml->lieferdatum))$auftragarr['lieferdatum'] = (string)$xml->lieferdatum; + if(!empty($xml->tatsaechlicheslieferdatum))$auftragarr['tatsaechlicheslieferdatum'] = (string)$xml->tatsaechlicheslieferdatum; + if(!empty($xml->lieferdatumkw))$auftragarr['lieferdatumkw'] = (string)$xml->lieferdatumkw; + if(isset($xml->ustid))$auftragarr['ustid'] = (string)$xml->ustid; + if(isset($xml->ust_befreit))$auftragarr['ust_befreit'] = (string)$xml->ust_befreit; + if(isset($xml->internet))$auftragarr['internet'] = (string)$xml->internet; + if(isset($xml->transaktionsnummer))$auftragarr['transaktionsnummer'] = (string)$xml->transaktionsnummer; + if(isset($xml->versandart))$auftragarr['versandart'] = (string)$xml->versandart; + if(isset($xml->vertrieb))$auftragarr['vertrieb'] = (string)$xml->vertrieb; + if(isset($xml->zahlungsweise))$auftragarr['zahlungsweise'] = (string)$xml->zahlungsweise; + if(isset($xml->freitext))$auftragarr['freitext'] = (string)$xml->freitext; + if(isset($xml->bank_inhaber))$auftragarr['bank_inhaber'] = (string)$xml->bank_inhaber; + if(isset($xml->bank_institut))$auftragarr['bank_institut'] = (string)$xml->bank_institut; + if(isset($xml->bank_blz))$auftragarr['bank_blz'] = (string)$xml->bank_blz; + if(isset($xml->bank_konto))$auftragarr['bank_konto'] = (string)$xml->bank_konto; + if(isset($xml->vorabbezahltmarkieren))$auftragarr['vorabbezahltmarkieren'] = (string)$xml->vorabbezahltmarkieren; + $auftragarr['autoversand'] ='1'; + if(isset($xml->abweichendelieferadresse))$auftragarr['abweichendelieferadresse'] = (string)$xml->abweichendelieferadresse; + if(isset($xml->ansprechpartner))$auftragarr['ansprechpartner'] = (string)$xml->ansprechpartner; + if(isset($xml->liefername))$auftragarr['liefername'] = (string)$xml->liefername; + if(isset($xml->lieferbundesstaat))$auftragarr['lieferbundesstaat'] = (string)$xml->lieferbundesstaat; + if(isset($xml->lieferland))$auftragarr['lieferland'] = (string)$xml->lieferland; + if(isset($xml->lieferstrasse))$auftragarr['lieferstrasse'] = (string)$xml->lieferstrasse; + if(isset($xml->lieferabteilung))$auftragarr['lieferabteilung'] = (string)$xml->lieferabteilung; + if(isset($xml->lieferunterabteilung))$auftragarr['lieferunterabteilung'] = (string)$xml->lieferunterabteilung; + if(isset($xml->lieferansprechpartner))$auftragarr['lieferansprechpartner'] = (string)$xml->lieferansprechpartner; + if(isset($xml->lieferort))$auftragarr['lieferort'] = (string)$xml->lieferort; + if(isset($xml->lieferplz))$auftragarr['lieferplz'] = (string)$xml->lieferplz; + if(isset($xml->lieferadresszusatz))$auftragarr['lieferadresszusatz'] = (string)$xml->lieferadresszusatz; + if(isset($xml->packstation_inhaber))$auftragarr['packstation_inhaber'] = (string)$xml->packstation_inhaber; + if(isset($xml->packstation_station))$auftragarr['packstation_station'] = (string)$xml->packstation_station; + if(isset($xml->packstation_ident))$auftragarr['packstation_ident'] = (string)$xml->packstation_ident; + if(isset($xml->packstation_plz))$auftragarr['packstation_plz'] = (string)$xml->packstation_plz; + if(isset($xml->packstation_ort))$auftragarr['packstation_ort'] = (string)$xml->packstation_ort; + if(isset($xml->partnerid))$auftragarr['partnerid'] = (string)$xml->partnerid; + if(isset($xml->kennen))$auftragarr['kennen'] = (string)$xml->kennen; + + if(isset($xml->ihrebestellnummer))$auftragarr['ihrebestellnummer'] = (string)$xml->ihrebestellnummer; + if(isset($xml->internebemerkung))$auftragarr['internebemerkung'] = (string)$xml->internebemerkung; + if(isset($xml->internebezeichnung))$auftragarr['internebezeichnung'] = (string)$xml->internebezeichnung; + + $auftragarr['status']='freigegeben'; + $auftragarr['projekt']=$projekt; + $auftragarr['zahlungszielskonto']=0; + if(isset($xml->gesamtsumme)){ + $auftragarr['gesamtsumme'] = (float)str_replace(',','.',$xml->gesamtsumme); + } + $auftragarr = $this->formatDateFieldsToMysqlFormat($auftragarr); + $this->app->DB->UpdateArr($typ, $auftrag, 'id', $auftragarr, true); + $this->app->erp->Standardprojekt($typ, $auftrag); + + foreach($auftrag_positionen as $position) + { + $artikel = null; + $newposid = null; + if(isset($position->artikelextid)) + { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '".$this->app->DB->real_escape_string((string)$position->artikelextid)."' LIMIT 1"); + if($artikel) + { + $newposid = $this->app->erp->AddPositionManuellPreisNummer($typ,$auftrag, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), + (isset($position->menge)?$position->menge:1) , + (isset($position->name)? $position->name:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), + isset($position->preis)? str_replace(',','.',$position->preis):$this->app->erp->GetVerkaufspreis($artikel,(isset($position->menge)?$position->menge:1),$adresse) , + $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1") , + 0,0, + isset($xml->waehrung)?$xml->waehrung:'EUR'); + } + } + if(!empty($position->ean) && !$artikel) + { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND ean <> '' AND ean = '".$this->app->DB->real_escape_string((string)$position->ean)."' LIMIT 1"); + if($artikel) + { + $newposid = $this->app->erp->AddPositionManuellPreisNummer($typ,$auftrag, $projekt, $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"), + (isset($position->menge)?$position->menge:1) , + (isset($position->name)? $position->name:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), + isset($position->preis)? str_replace(',','.',$position->preis):$this->app->erp->GetVerkaufspreis($artikel,(isset($position->menge)?$position->menge:1),$adresse) , + $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1") , + 0,0, + isset($xml->waehrung)?$xml->waehrung:'EUR'); + } + } + if(isset($position->nummer) && !$artikel) + { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND nummer <> '' AND nummer = '".$this->app->DB->real_escape_string((string)$position->nummer)."' LIMIT 1"); + $newposid = $this->app->erp->AddPositionManuellPreisNummer($typ,$auftrag, $projekt, $position->nummer, + (isset($position->menge)?$position->menge:1) , + (isset($position->name)? $position->name:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1")), + isset($position->preis)? str_replace(',','.',$position->preis):$this->app->erp->GetVerkaufspreis($artikel,(isset($position->menge)?$position->menge:1),$adresse) , + $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1") , + 0,0, + isset($xml->waehrung)?$xml->waehrung:'EUR'); + + } + if(!empty($newposid)) + { + if($typ === 'auftrag'){ + if(!empty($position->lieferdatum)){ + $deliveryDate = (string)$position->lieferdatum; + + if(strpos($deliveryDate, '.') !== false) { + $deliveryDate = $this->app->String->Convert($deliveryDate, '%1.%2.%3', '%3-%2-%1'); + } + + $this->app->DB->Update("UPDATE auftrag_position SET lieferdatum = '" . $deliveryDate . "' WHERE id = $newposid LIMIT 1"); + } + if(!empty($position->lieferdatumkw)){ + $this->app->DB->Update("UPDATE auftrag_position SET lieferdatumkw = '" . $position->lieferdatumkw . "' WHERE id = $newposid LIMIT 1"); + } + } + + $artikelnummerkunde = !empty($position->kundenartikelnummer)?(string)$position->kundenartikelnummer:$this->app->DB->real_escape_string( + $this->app->DB->Select( + "SELECT kundenartikelnummer + FROM verkaufspreise + WHERE adresse='$adresse' AND artikel='$artikel' AND kundenartikelnummer!='' AND ab_menge <=". + (float)(isset($position->menge)?$position->menge:1)." + AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') + ORDER by ab_menge DESC + LIMIT 1" + )); + + if($artikelnummerkunde == ''){ + // Anzeige Artikel Nummer von Gruppe aus Verkaufspreis + $returnwaehrung = null; + $gruppevkresult = $this->app->erp->GetVerkaufspreis( + $artikel, + (isset($position->menge)?$position->menge:1), + $adresse, + isset($xml->waehrung)?$xml->waehrung:'EUR', + $returnwaehrung, + true + ); + if($gruppevkresult['kundenartikelnummer'] != ''){ + $artikelnummerkunde = $gruppevkresult['kundenartikelnummer']; + } + } + + if(!empty($artikelnummerkunde)) { + $this->app->DB->Update( + sprintf( + "UPDATE `%s` SET `artikelnummerkunde` = '%s' WHERE `id` = %d ", + $typ.'_position', + $this->app->DB->real_escape_string($artikelnummerkunde), + $newposid + ) + ); + } + $positionFieldsToUpdate = []; + if($typ === 'retoure') { + foreach( + [ + 'grund', + 'grundbeschreibung', + 'beschreibung', + 'seriennummer', + 'internerkommentar', + 'bemerkung', + 'lieferdatum', + ] as $positionField + ) { + if(isset($position->$positionField)) { + $positionFieldValue = (string)$position->$positionField; + if(!empty($positionFieldValue)) { + if($positionField === 'lieferdatum' && strpos($positionFieldValue, '.') !== false) { + $positionFieldValue = $this->app->String->Convert($positionFieldValue, '%1.%2.%3', '%3-%2-%1'); + } + $positionFieldsToUpdate[$positionField] = $positionFieldValue; + } + } + } + } + for($indexFreeField = 1; $indexFreeField <= 40; $indexFreeField++) { + $positionField = 'freifeld'.$indexFreeField; + if(isset($position->$positionField)) { + $positionFieldValue = (string)$position->$positionField; + if(!empty($positionFieldValue)) { + $positionFieldsToUpdate[$positionField] = $positionFieldValue; + } + } + } + if(!empty($positionFieldsToUpdate)) { + $this->app->DB->UpdateArr($typ .'_position', $newposid, 'id', $positionFieldsToUpdate, true); + } + } + /*if($newposid > 0) + { + $this->app->erp->RunHook("beleg_afterinsertposition", 5, "auftrag",$auftrag,$artikel,(isset($position->menge)?$position->menge:1),$newposid); + }*/ + } + + $this->app->erp->LoadSteuersaetzeWaehrung($auftrag,$typ); + + $this->app->DB->Update(" + UPDATE $typ a + INNER JOIN adresse adr ON a.lieferant = adr.id + SET a.lieferantkdrnummer = if(a.lieferantennummer <> '',a.lieferantennummer,adr.lieferantennummer) + WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 1 AND a.id = '$auftrag' + "); + $this->app->DB->Update(" + UPDATE $typ a + INNER JOIN adresse adr ON a.adresse = adr.id + SET a.lieferantkdrnummer = if(a.kundennummer <> '',a.kundennummer, adr.kundennummer) + WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 0 AND a.id = '$auftrag' + "); + + if($typ == 'auftrag') + { + $reservierung = $this->app->DB->Select("SELECT reservierung FROM projekt WHERE id='$projekt' LIMIT 1"); + if($reservierung>=1){ + $this->app->erp->AuftragReservieren($auftrag); + } + $this->app->erp->AuftragNeuberechnen($auftrag); + $this->app->erp->AuftragEinzelnBerechnen($auftrag); + }elseif($typ == 'angebot') + { + $this->app->erp->AngebotNeuberechnen($auftrag); + } + + if(isset($xml->dateien)) { + foreach($xml->dateien as $datei) + { + foreach($datei as $singledatei) + { + $isfile = false; + $data = null; + if(is_file($singledatei->dateiname)){ + $type = mime_content_type(basename($singledatei->dateiname)); + if($type != 'text/x-php' && $type != 'text/php' && $type != 'application/php' && $type != 'application/x-php' && $type != 'application/x-httpd-php' && $type != 'application/x-httpd-php-source'){ + + if($singledatei->dateiinhalt == ''){ + $data = file_get_contents($singledatei->dateiname); + //$singledatei->dateiinhalt = base64_encode($dateiinhalt); + $isfile = true; + } + }else{ + $singledatei->dateiinhalt = ''; + } + } + if(empty($data)) + { + if($singledatei->dateiinhalt == '') + { + $data = ''; + }else{ + $data = base64_decode($singledatei->dateiinhalt); + } + } + if($isfile){ + $name = $this->app->erp->GetTmp().basename($singledatei->dateiname); + }else{ + $name = $this->app->erp->GetTmp().$singledatei->dateiname; + } + + file_put_contents($name, $data); + + $pfad = $this->app->Conf->WFuserdata; + $pfad = rtrim($pfad); + $pfad .= '/dms/'; + + if(!file_exists($pfad) && !mkdir($pfad, 0777, true) && !is_dir($pfad)) + { + $this->app->erp->LogFile($pfad.' konnte nicht erstellt werden'); + } + + $speicherpfad = $pfad.$this->app->Conf->WFdbname; + + if(!file_exists($speicherpfad) && !mkdir($speicherpfad, 0777, true) && + !is_dir($speicherpfad)) + { + $this->app->erp->LogFile($speicherpfad.' konnte nicht erstellt werden'); + } + + $fileid = $this->app->erp->CreateDatei($singledatei->dateiname, !empty($singledatei->titel)?$singledatei->titel:$singledatei->dateiname, !empty($singledatei->beschreibung)?(string)$singledatei->beschreibung:'', '', $name, '',true,$speicherpfad); + $subjekt = !empty($singledatei->subjekt)?(string)$singledatei->subjekt:'Sonstige'; + $this->app->erp->AddDateiStichwort($fileid, $subjekt, ucfirst($typ), $auftrag); + + if($isfile){ + @rename($singledatei->dateiname, $singledatei->dateiname.'.del'); + } + } + } + } + if(!empty($obj)){ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_ok', ucfirst($typ) . ' angelegt', '', '', '', $typ, $auftrag); + $this->app->erp->RunHook('transfer_document_incoming', 3, $uebertragungen_account, $typ, $auftrag); + } + } + }else + { + if(!empty($obj)){ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_error', 'Artikel nicht gefunden', $this->app->DB->real_escape_string((string)$element1), '', '', $typ); + } + } + }else{ + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Keine Positionen gefunden')"); + if(!empty($obj)){ + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_error', ucfirst($typ) . ' enthält keine Positinen', $this->app->DB->real_escape_string((string)$xml->extid), '', '', $typ); + } + } + }else{ + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account',$typ,'".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."',$typ.'_fehler','Kundennummer ".$this->app->DB->real_escape_string((string)$xml->kundennummer)." nicht gefunden')"); + } + //}else{ + //$this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','auftrag','".$this->app->DB->real_escape_string(empty($xml->extid)?'':$xml->extid)."','auftrag_fehler','Keine Kundennummer angegeben')"); + //} + }else + { + if($this->app->DB->Select("SELECT id FROM $typ WHERE shopextid = '".$this->app->DB->real_escape_string((empty($xml->extid))?'':$xml->extid)."' AND projekt = '$projekt' AND shopextid <> ''")) + { + $element1 = 'Shopextid: '.$xml->extid; + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ.'_error', ucfirst($typ).' existiert bereits', $this->app->DB->real_escape_string((string)$element1), '', '', $typ, $id); + }elseif($this->GetFromExtID($typ, $xml->belegnr)){ + if(!empty($obj)){ + $__id = $this->GetFromExtID($typ, $xml->belegnr); + $__auftrag = $this->app->DB->Select("SELECT belegnr FROM $typ WHERE id = '$__id' LIMIT 1"); + $element1 = "Belegnr: " . $__auftrag; + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_error', ucfirst($typ) . ' existiert bereits', $this->app->DB->real_escape_string((string)$element1), '', '', $typ, $id); + } + }else{ + if(!empty($obj)){ + $element1 = 'Belegnr: ' . $xml->belegnr; + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ . '_error', ucfirst($typ) . ' existiert bereits', $this->app->DB->real_escape_string((string)$element1), '', '', $typ, $id); + } + } + } + + } + + /** + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + */ + public function ParsePartXmlDeliverynoteWithoutId(&$xml, $uebertragungen_account, $obj) + { + if(isset($xml->tracking)) { + if(!empty($xml->belegnr)) { + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','lieferschein','".(string)$xml->belegnr."','tracking_fehler','Lieferschein ".(string)$xml->belegnr." nicht gefunden')"); + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'tracking_error', 'Lieferschein '.(string)$xml->belegnr." nicht gefunden", $this->app->DB->real_escape_string((string)$xml->belegnr), '', '', 'lieferschein'); + } + } + } + + /** + * @param string $typ + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + */ + public function ParsePartXmlDocumentWithoutId($typ, &$xml, $uebertragungen_account, $obj) + { + switch($typ) { + case 'bestellung': + case 'produktion': + $this->ParsePartXmlSupplierorderProductionWithoutId($typ, $xml, $uebertragungen_account, $obj); + break; + case 'auftrag': + case 'angebot': + case 'retoure': + $this->ParsePartXmlOrderOfferWithoutId($typ, $xml, $uebertragungen_account, $obj); + break; + + case 'lieferschein': + $this->ParsePartXmlDeliverynoteWithoutId($xml, $uebertragungen_account, $obj); + if(isset($xml->tracking)) { + if(!empty($xml->belegnr)) { + $this->app->DB->Insert("INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) VALUES ('$uebertragungen_account','lieferschein','".(string)$xml->belegnr."','tracking_fehler','Lieferschein ".(string)$xml->belegnr." nicht gefunden')"); + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, 'tracking_error', 'Lieferschein '.(string)$xml->belegnr." nicht gefunden", $this->app->DB->real_escape_string((string)$xml->belegnr), '', '', 'lieferschein'); + } + } + break; + } + } + + /** + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + * @param int $id + */ + public function ParsePartXmlDeliveryNoteTracking(&$xml, $uebertragungen_account, $obj, $id) + { + if(!isset($xml->tracking)){ + return; + } + $tracking = (string)$xml->tracking; + if($tracking == '') { + return; + } + $versand = ''; + if(isset($xml->versandart)) { + $versand = (string)$xml->versandart; + } + $tracking_link = null; + $sprache = null; + if(!empty($xml->tracking_sprache) && (string)$xml->tracking_sprache){ + $sprache = (string)$xml->tracking_sprache; + } + if(!empty($xml->tracking_link) && (string)$xml->tracking_link){ + $tracking_link = (string)$xml->tracking_link; + } + $this->addTrackingToDeliveryNote( + $obj, + $id, + $tracking, + $versand, + $sprache, + $tracking_link + ); + + unset($kg); + unset($adresse); + unset($projekt); + unset($tracking); + unset($versand); + $lieferschein_positionen = null; + if(isset($xml->lieferschein_position_list)) { + if(isset($xml->lieferschein_position_list->lieferschein_position)) { + $lieferschein_positionen = &$xml->lieferschein_position_list->lieferschein_position; + } + } + elseif(isset($xml->lieferschein_position)){ + $lieferschein_positionen = &$xml->lieferschein_position; + } + if($lieferschein_positionen) { + foreach($lieferschein_positionen as $position) { + if(isset($position->sort) && !isset($position->lieferschein)){ + $position->lieferschein = $id; + } + $id_pos = $this->GetIDFromFeld('lieferschein_position', $position); + if($id_pos && isset($position->geliefert)) { + $check = $this->app->DB->SelectRow( + "SELECT * FROM lieferschein_position WHERE id = '$id_pos' AND lieferschein = '$id' LIMIT 1" + ); + if($check) { + $geliefert = round((float)$position->geliefert,4); + if($check['menge'] >= $geliefert){ + $this->app->DB->Update("UPDATE lieferschein_position SET geliefert = '$geliefert' WHERE id = '$id_pos' LIMIT 1"); + } + } + } + } + } + else { + $this->app->DB->Update("UPDATE lieferschein_position SET geliefert = menge WHERE lieferschein = '$id'"); + } + $this->app->DB->Update("UPDATE lieferschein SET status = 'versendet' WHERE id = '$id' LIMIT 1"); + } + + /** + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + * @param int $id + */ + public function ParsePartXmlDeliveryNoteBestBefore(&$xml, $uebertragungen_account, $obj, $id) + { + $lieferschein_positionen = null; + if(isset($xml->lieferschein_position_list)) { + if(isset($xml->lieferschein_position_list->lieferschein_position)) { + $lieferschein_positionen = &$xml->lieferschein_position_list->lieferschein_position; + } + } + elseif(isset($xml->lieferschein_position)){ + $lieferschein_positionen = &$xml->lieferschein_position; + } + if(empty($lieferschein_positionen)) { + return; + } + $lastPosId = 0; + foreach($lieferschein_positionen as $position) { + if(isset($position->sort) && !isset($position->lieferschein)){ + $position->lieferschein = $id; + } + $id_pos = $this->GetIDFromFeld('lieferschein_position', $position); + if($lastPosId === $id_pos) { + continue; + } + $lastPosId = $id_pos; + if(!isset($position->mhd_charge_block)) { + continue; + } + $sCount = (!empty($position->mhd_charge_block)?count($position->mhd_charge_block):0); + if($sCount > 0) { + $bestBefores = []; + foreach($position->mhd_charge_block as $mhd) { + $bestBefore = ['bestbefore' => '', 'batch' => '', 'amount' => 0]; + if(isset($mhd->mhd)) { + $bestBefore['bestbefore'] = (string)$mhd->mhd; + } + if(isset($mhd->charge)) { + $bestBefore['batch'] = (string)$mhd->charge; + } + if(isset($mhd->anzahl)) { + $bestBefore['amount'] = (string)$mhd->anzahl; + } + elseif(isset($mhd->menge)) { + $bestBefore['amount'] = (string)$mhd->menge; + } + if(empty($bestBefore['bestbefore']) && empty($bestBefore['batch'])) { + continue; + } + $bestBefores[] = $bestBefore; + } + if(empty($bestBefores)) { + continue; + } + $posDb = $this->app->DB->SelectRow( + sprintf( + 'SELECT dnp.id, dnp.`artikel`, art.mindesthaltbarkeitsdatum, art.chargenverwaltung, + dnp.menge, dnp.explodiert_parent, dnp.menge + FROM `lieferschein_position` AS `dnp` + INNER JOIN `artikel` AS `art` ON dnp.artikel = art.id + WHERE `dnp`.id = %d', + $id_pos + ) + ); + if(empty($posDb)) { + continue; + } + if((!empty($bestBefores)?count($bestBefores):0) === 1 && empty($bestBefores[0]['amount'])) { + $bestBefores[0]['amount'] = $posDb['menge']; + } + $posDb['menge'] = $this->app->erp->ReplaceMenge(1, $posDb['menge'], 1); + if($posDb['menge'] <= 0) { + continue; + } + $isBestBeforeArticle = !empty($posDb['mindesthaltbarkeitsdatum']); + $isBatchArticle = $posDb['chargenverwaltung'] > 0; + if(!$isBestBeforeArticle && !$isBatchArticle) { + if(empty($posDb['explodiert_parent'])) { + continue; + } + if(!empty($posDb['explodiert_parent'])) { + $posDb = $this->app->DB->SelectRow( + sprintf( + 'SELECT dnp.id, dnp.`artikel`, art.mindesthaltbarkeitsdatum,art.`chargenverwaltung`, + dnp.menge, dnp.explodiert_parent, dnp.menge + FROM `lieferschein_position` AS `dnp` + INNER JOIN `artikel` AS `art` ON dnp.artikel = art.id + WHERE `dnp`.id = %d', + $posDb['explodiert_parent'] + ) + ); + $isBestBeforeArticle = !empty($posDb['mindesthaltbarkeitsdatum']); + $isBatchArticle = $posDb['chargenverwaltung'] > 0; + if(!$isBestBeforeArticle && !$isBatchArticle) { + continue; + } + } + } + if($isBestBeforeArticle && $isBatchArticle){ + $dbBestbefores = $this->app->DB->SelectFirstCols( + sprintf( + "SELECT CONCAT(`wert`,'|', `wert2`) + FROM `beleg_chargesnmhd` + WHERE `wert` != '' AND `type` = 'mhd' AND `doctype` = 'lieferschein' + AND `doctypeid` = %d AND `pos` = %d + GROUP BY `wert`", + $id, $posDb['id'] + ) + ); + } + elseif($isBestBeforeArticle) { + $dbBestbefores = $this->app->DB->SelectFirstCols( + sprintf( + "SELECT `wert` + FROM `beleg_chargesnmhd` + WHERE `wert` != '' AND `type` = 'mhd' AND `doctype` = 'lieferschein' + AND `doctypeid` = %d AND `pos` = %d + GROUP BY `wert`", + $id, $posDb['id'] + ) + ); + } + elseif($isBatchArticle) { + $dbBestbefores = $this->app->DB->SelectFirstCols( + sprintf( + "SELECT `wert` + FROM `beleg_chargesnmhd` + WHERE `wert` != '' AND `type` = 'charge' AND `doctype` = 'lieferschein' + AND `doctypeid` = %d AND `pos` = %d + GROUP BY `wert`", + $id, $posDb['id'] + ) + ); + } + if(empty($dbBestbefores)){ + $dbBestbefores = []; + } + foreach ($bestBefores as $bestBefore) { + if($isBestBeforeArticle && $isBatchArticle){ + $bestBeforeConcat = $bestBefore['bestbefore'] . '|' . $bestBefore['batch']; + } + elseif($isBestBeforeArticle){ + $bestBeforeConcat = $bestBefore['bestbefore']; + } + elseif($isBatchArticle){ + $bestBeforeConcat = $bestBefore['batch']; + } + + if(!in_array($bestBeforeConcat, $dbBestbefores)){ + if($isBestBeforeArticle && $isBatchArticle){ + $this->app->erp->CreateBelegPositionMHDCHARGESRN( + 'lieferschein', $id, $posDb['id'], 'mhd', $bestBefore['bestbefore'], $bestBefore['amount'], + 'charge', $bestBefore['batch'], 0, 'API Eingang' + ); + + $this->app->erp->CreateBelegPositionMHDCHARGESRN( + 'lieferschein', $id, $posDb['id'], 'charge', $bestBefore['batch'], $bestBefore['amount'], + '', '', 0, 'API Eingang' + ); + } + elseif($isBestBeforeArticle) { + $this->app->erp->CreateBelegPositionMHDCHARGESRN( + 'lieferschein', $id, $posDb['id'], 'mhd', $bestBefore['bestbefore'], $bestBefore['amount'], + '','', 0, 'API Eingang' + ); + } + elseif($isBatchArticle) { + $this->app->erp->CreateBelegPositionMHDCHARGESRN( + 'lieferschein', $id, $posDb['id'], 'charge', $bestBefore['batch'], $bestBefore['amount'], + '', '', 0, 'API Eingang' + ); + } + } + } + } + } + } + + + /** + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + * @param int $id + */ + public function ParsePartXmlDeliveryNoteSerials(&$xml, $uebertragungen_account, $obj, $id) + { + $lieferschein_positionen = null; + if(isset($xml->lieferschein_position_list)) { + if(isset($xml->lieferschein_position_list->lieferschein_position)) { + $lieferschein_positionen = &$xml->lieferschein_position_list->lieferschein_position; + } + } + elseif(isset($xml->lieferschein_position)){ + $lieferschein_positionen = &$xml->lieferschein_position; + } + if(empty($lieferschein_positionen)) { + return; + } + $lastPosId = 0; + foreach($lieferschein_positionen as $position) { + if(isset($position->sort) && !isset($position->lieferschein)){ + $position->lieferschein = $id; + } + $id_pos = $this->GetIDFromFeld('lieferschein_position', $position); + if($lastPosId === $id_pos) { + continue; + } + $lastPosId = $id_pos; + if(!isset($position->serial)) { + continue; + } + $sCount = (!empty($position->serial)?count($position->serial):0); + if($sCount > 0) { + $serials = []; + foreach($position->serial as $serial) { + $serials[] = (string)$serial; + } + $posDb = $this->app->DB->SelectRow( + sprintf( + 'SELECT dnp.id, dnp.`artikel`, art.seriennummern, dnp.menge, dnp.explodiert_parent + FROM `lieferschein_position` AS `dnp` + INNER JOIN `artikel` AS `art` ON dnp.artikel = art.id + WHERE `dnp`.id = %d', + $id_pos + ) + ); + if(empty($posDb)) { + continue; + } + if((string)$posDb['seriennummern'] === '' + || (string)$posDb['seriennummern'] === 'keine') { + if(empty($posDb['explodiert_parent'])) { + continue; + } + if(!empty($posDb['explodiert_parent'])) { + $posDb = $this->app->DB->SelectRow( + sprintf( + 'SELECT dnp.id, dnp.`artikel`, art.seriennummern, dnp.menge, dnp.explodiert_parent + FROM `lieferschein_position` AS `dnp` + INNER JOIN `artikel` AS `art` ON dnp.artikel = art.id + WHERE `dnp`.id = %d', + $id_pos + ) + ); + if((string)$posDb['seriennummern'] === '' + || (string)$posDb['seriennummern'] === 'keine') { + continue; + } + } + } + $dbSerials = $this->app->DB->SelectFirstCols( + sprintf( + "SELECT `wert` + FROM `beleg_chargesnmhd` + WHERE `wert` != '' AND `type` = 'sn' AND `doctype` = 'lieferschein' + AND `doctypeid` = %d AND `pos` = %d + GROUP BY `wert`", + $id, $posDb['id'] + ) + ); + foreach($serials as $serial) { + if(!in_array($serial, $dbSerials)) { + $this->app->erp->CreateBelegPositionMHDCHARGESRN( + 'lieferschein',$id,$posDb['id'],'sn',$serial,1,'','',0,'API Eingang' + ); + $dbSerials[] = $serial; + } + } + } + } + } + + /** + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + * @param int $id + */ + public function ParsePartXmlDeliveryNoteWithId(&$xml, $uebertragungen_account, $obj, $id) + { + if(isset($xml->tracking)){ + $this->ParsePartXmlDeliveryNoteTracking($xml, $uebertragungen_account, $obj, $id); + } + $this->ParsePartXmlDeliveryNoteBestBefore($xml, $uebertragungen_account, $obj, $id); + $this->ParsePartXmlDeliveryNoteSerials($xml, $uebertragungen_account, $obj, $id); + } + + /** + * @param string $typ + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + * @param int $id + */ + public function ParsePartXmlDocumentWithId($typ, &$xml, $uebertragungen_account, $obj, $id) + { + switch($typ) { + case 'auftrag': + case 'angebot': + case 'bestellung': + case 'produktion': + $obj->AddUbertragungMonitorLog($uebertragungen_account, $this->datei_id, 0, $typ.'_error', ucfirst($typ).' existiert bereits', $this->app->DB->real_escape_string(!empty($xml->belegnr)?(string)$xml->belegnr:$id), '', '', $typ, $id); + break; + case 'lieferschein': + $this->ParsePartXmlDeliveryNoteWithId($xml, $uebertragungen_account, $obj, $id); + break; + } + } + + /** + * @param string $typ + * @param $xml + * @param int $uebertragungen_account + * @param Uebertragungen $obj + */ + public function ParsePartXmlDocument($typ, &$xml, $uebertragungen_account, $obj) + { + if($typ !== 'auftrag' && $typ !== 'angebot' && $typ !== 'bestellung' && $typ !== 'produktion') { + $id = $this->GetIDFromFeld($typ, $xml); + } + elseif(isset($xml->belegnr) && strtoupper((string)$xml->belegnr) !== 'NEW' && strtoupper((string)$xml->belegnr) !== 'NEU'){ + $id = $this->GetFromExtID($typ, $xml->belegnr, $xml); + } + else { + $id = null; + } + if(!$id && $typ === 'lieferschein' && isset($xml->auftragextid) && $xml->auftragextid != "") { + $projekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '$uebertragungen_account' LIMIT 1"); + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); + if($eigenernummernkreis) { + $auftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr = '".$this->app->DB->real_escape_string($xml->auftragextid)."' AND projekt = '$projekt' LIMIT 1"); + } + else{ + $auftrag = $this->app->DB->Select("SELECT id FROM auftrag WHERE belegnr = '".$this->app->DB->real_escape_string($xml->auftragextid)."' ORDER BY projekt = '$projekt' DESC LIMIT 1"); + } + if($auftrag) { + $id = $this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid = '$auftrag' AND status <> 'stoniert' AND belegnr != '' LIMIT 1"); + if(!$id && !$this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid = '$auftrag' LIMIT 1")) { + $id = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($auftrag); + if($id) { + $this->app->erp->BelegFreigabe('lieferschein', $id); + $this->app->DB->Update("UPDATE lieferschein SET status = 'versendet' AND schreibschutz = 1 WHERE id = '$id' LIMIT 1"); + } + } + } + } + if($id) { + $this->ParsePartXmlDocumentWithId($typ, $xml, $uebertragungen_account, $obj, $id); + } + else{ + //Beleg nicht gefunden + $this->ParsePartXmlDocumentWithoutId($typ, $xml, $uebertragungen_account, $obj); + } + } + + /** + * @param $typ + * @param $xml + * @param $uebertragungen_account + */ + public function ParseTeilXML($typ, &$xml, $uebertragungen_account) + { + $typen = $this->getTabellen(); + $belege = $this->getBelege(); + $is_beleg = in_array($typ, $belege); + $is_typ = false; + + if($uebertragungen_account) { + /** @var Uebertragungen $obj */ + $obj = $this->app->erp->LoadModul('uebertragungen'); + if($obj) { + $obj->datei_id = $this->datei_id; + } + } + if($uebertragungen_account) { + if(!$this->isAllowedToImport($uebertragungen_account, $obj, $typ)){ + return; + } + } + + if(!$is_beleg){ + $is_typ = in_array($typ, $typen); + } + if(!$is_typ && !$is_beleg) { + return; + } + + $this->UpdateMappingXML($typ, $xml); + + if($is_beleg) { + $this->ParsePartXmlDocument($typ, $xml, $uebertragungen_account, $obj); + } + elseif($is_typ) { + $this->ParsePartXmlType($typ, $xml, $uebertragungen_account, $obj); + } + } + + /** + * @param int $deliveryNoteId + * @param string $tracking + * @param string $deliveryType + * @param string $language + * @param string $trackingLink + * + * @return bool|int + */ + public function createShipmentByDeliveryNote($deliveryNoteId, $tracking, $deliveryType = '', $language = '', $trackingLink = '') + { + $deliveryNote = $this->app->DB->SelectRow( + sprintf( + 'SELECT adresse,projekt,auftragid, versandart FROM lieferschein WHERE id = %d LIMIT 1', + $deliveryNoteId + ) + ); + if(empty($deliveryNote)) { + return false; + } + $addressId = $deliveryNote['adresse']; + $projectId = $deliveryNote['projekt']; + $orderId = $deliveryNote['auftragid']; + + if($deliveryType == '') { + $deliveryType = $deliveryNote['versandart']; + } + $kg = $this->app->erp->VersandartMindestgewicht($deliveryNoteId); + + //$tracking = $this->app->erp->TrackingNummerAnpassen($projekt,$tracking); + $tracking = $this->app->DB->real_escape_string($tracking); + + if($deliveryType === 'versandunternehmen'){ + $deliveryType = (string)$this->app->erp->Firmendaten('versandart'); + } + $versandid = false; + if( + !$this->app->DB->Select( + sprintf( + "SELECT id FROM versand WHERE tracking = '%s' AND lieferschein = %d LIMIT 1", + $tracking, $deliveryNoteId + ) + ) + ) { + $keinetrackingmail = 0; + if($orderId) { + $keinetrackingmail = (int)$this->app->DB->Select( + sprintf( + "SELECT keinetrackingmail FROM auftrag WHERE id = %d LIMIT 1", $orderId + ) + ); + } + $versandid = $this->app->DB->Select( + sprintf( + "SELECT id + FROM versand + WHERE lieferschein = %d AND tracking = '' + ORDER BY weitererlieferschein, improzessuser + LIMIT 1", + $deliveryNoteId + ) + ); + if($versandid) { + $this->app->DB->Update( + sprintf( + "UPDATE versand + SET versandunternehmen = '%s', versandart = '%s', tracking = '%s', tracking_link = '%s', + versendet_am = NOW(), abgeschlossen = 1, lieferschein = %d, freigegeben = 1, firma = 1, adresse = %d, + projekt = %d, gewicht = %f, paketmarkegedruckt = 1, anzahlpakete = 1, keinetrackingmail = %d, + improzessuser = 0, improzess = 0 + WHERE id = %d", + $deliveryType, $deliveryType, $tracking, $trackingLink , + (int)$deliveryNoteId, (int)$addressId, + (int)$projectId, (float)$kg, $keinetrackingmail, + $versandid + ) + ); + if($this->app->DB->affected_rows() > 0) { + return $versandid; + } + } + + $this->app->DB->Insert( + sprintf( + "INSERT INTO versand (versandunternehmen,versandart, tracking, tracking_link, + versendet_am,abgeschlossen,lieferschein, freigegeben,firma, + adresse,projekt,gewicht,paketmarkegedruckt,anzahlpakete,keinetrackingmail, + logdatei,versender,bearbeiter,download,rechnung) + VALUES ('%s','%s','%s','%s', + NOW(),1,%d, 1,1, + %d,%d,%f,1,1,%d,NOW(),'','',0,0) ", + $deliveryType, $deliveryType, $tracking, $trackingLink , + (int)$deliveryNoteId, + (int)$addressId, (int)$projectId, (float)$kg, $keinetrackingmail + ) + ); + $versandid = $this->app->DB->GetInsertID(); + } + + return $versandid; + } + + /** + * @param Uebertragungen $transferobject + * @param int $deliveryNoteId + * @param string $tracking + * @param string $deliveryType + * @param string $language + * @param string $trackingLink + */ + public function addTrackingToDeliveryNote( + $transferobject, + $deliveryNoteId, + $tracking, + $deliveryType = '', + $language = '', + $trackingLink = '' + ) { + $versandid = $this->createShipmentByDeliveryNote( + $deliveryNoteId, + $tracking, + $deliveryType, + $language, + $trackingLink + ); + if(empty($versandid)) { + return; + } + + $deliveryNote = $this->app->DB->SelectRow( + sprintf( + 'SELECT adresse, projekt, auftragid, versandart FROM lieferschein WHERE id = %d LIMIT 1', + $deliveryNoteId + ) + ); + + if(empty($deliveryNote)) { + return; + } + if(!empty($this->uebertragung_account) && !empty($deliveryType) && $deliveryType !== $deliveryNote['versandart']) { + if(!empty( + $this->app->DB->Select( + "SELECT `update_shipping_method` + FROM `uebertragungen_account` + WHERE `id` = {$this->uebertragung_account}" + ) + ) + ) { + $shippingMethodEscaped = $this->app->DB->real_escape_string($deliveryType); + $isShippingMethodExists = !empty( + $this->app->DB->Select( + "SELECT `id` FROM `versandarten` WHERE `aktiv` = 1 AND `type` = '{$shippingMethodEscaped}' LIMIT 1" + )); + if($isShippingMethodExists) { + $this->app->DB->Update( + "UPDATE `lieferschein` SET `versandart` = '$shippingMethodEscaped' WHERE `id` = {$deliveryNoteId}" + ); + $deliveryNote['versandart'] = $deliveryType; + } + } + } + + $orderId = $deliveryNote['auftragid']; + + if($transferobject) { + if($orderId) { + $this->app->erp->AuftragProtokoll($orderId, 'Rückmeldung durch Übertragenmodul'); + } + $this->app->erp->LieferscheinProtokoll($deliveryNoteId,'Rückmeldung durch Übertragenmodul'); + } + + $tranferRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT trackingmail, autoshopexport FROM uebertragungen_account WHERE id = %d LIMIT 1', + $this->uebertragung_account + ) + ); + + if(!empty($this->app->remote) && (empty($transferobject) || !empty($tracking) || empty($tranferRow['autoshopexport']))) { + $this->app->erp->VersandAbschluss($versandid); + } + $tracking_link = null; + $sprache = null; + if(!empty($language)){ + $sprache = $language; + } + if(!empty($trackingLink)){ + $tracking_link = $trackingLink; + } + if(!empty($sprache)){ + $sprache = strtolower(trim($sprache)); + } + if($sprache === 'english'){ + $sprache = 'englisch'; + } + if(empty($sprache)) { + $sprache = $this->app->DB->Select( + sprintf('SELECT sprache FROM lieferschein WHERE id = %d LIMIT 1',$deliveryNoteId) + ); + if(empty($sprache) && $orderId){ + $sprache = $this->app->DB->Select( + sprintf('SELECT sprache FROM auftrag WHERE id = %d LIMIT 1', $orderId) + ); + } + } + if($tranferRow['trackingmail']) { + $this->app->erp->Versandmail($versandid, $tracking_link, $sprache, $tracking, true); + } + /** @var Versanderzeugen $objVersanderzeugen */ + $objVersanderzeugen = $this->app->erp->LoadModul('versanderzeugen'); + if($objVersanderzeugen && method_exists($objVersanderzeugen,'CheckKommissionierungByLieferschein')) { + $objVersanderzeugen->CheckKommissionierungByLieferschein($deliveryNoteId); + } + //Rechnungsmail + $invoceId= $this->app->DB->Select( + sprintf( + "SELECT id FROM rechnung where auftragid = %d and status <> 'storniert' LIMIT 1", + $orderId + ) + ); + if(!$invoceId && $this->app->DB->Select( + sprintf( + 'SELECT rechnunganlegen FROM uebertragungen_account WHERE id = %d LIMIT 1', + (int)$this->uebertragung_account + ) + )) + { + $invoceId = $this->app->erp->WeiterfuehrenAuftragZuRechnung($orderId); + $this->app->erp->BelegFreigabe('rechnung', $invoceId); + $invoiceDocument = 'rechnung'; + $transferAccountId = (int)$this->uebertragung_account; + $this->app->erp->RunHook( + 'transfer_document_incoming', 3, $transferAccountId, $invoiceDocument, $invoceId + ); + } + if($this->app->DB->Select( + sprintf( + "SELECT rechnungmail FROM uebertragungen_account WHERE id = %d LIMIT 1", + (int)$this->uebertragung_account + ) + )) + { + if($invoceId && (int)$this->app->DB->Select( + sprintf( + "SELECT count(id) FROM versand WHERE tracking <> '' AND lieferschein = %d", + $deliveryNoteId + ) + ) < 2) + { + if($this->app->DB->Select(sprintf("SELECT soll FROM rechnung WHERE id = %d LIMIT 1", $invoceId)) > 0){ + $this->app->erp->Rechnungsmail($invoceId); + } + } + } + $element1 = $tracking; + if($transferobject) { + $transferobject->AddUbertragungMonitorLog( + $this->uebertragung_account, + $this->datei_id, + 0, + 'tracking_ok', + '', + $element1, + '', + '', + 'versand', + $versandid + ); + } + $this->app->DB->Insert( + sprintf( + "INSERT INTO uebertragungen_log (uebertragungen_account, typ, parameter1,parameter2, wert) + VALUES (%d,'lieferschein',%d,'tracking','%s')", + (int)$this->uebertragung_account,(int)$deliveryNoteId,$tracking + ) + ); + } + + function LoadFromXML($dateiname, $isfile = true) + { + if(!$isfile || is_file($dateiname)) + { + if($isfile) + { + $content = file_get_contents($dateiname); + }else{ + $content = $dateiname; + } + $xml = @simplexml_load_string($content,null, LIBXML_NOCDATA);// true, true, $action); + if($xml === false || is_null($xml)) + { + $xml = json_decode($content); + } + return $xml; + } + return false; + } + + /** + * @param string $string + * + * @return string + */ + public function EntferneSteuerzeichen($string) + { + $len = strlen($string); + $out = ''; + for($i = 0; $i < $len; $i++) { + $ord = ord($string[$i]); + if($ord != 127 && ($ord > 31 || $ord == 13 || $ord == 10 || $ord == 9)) { + $out .= $string[$i]; + } + } + + return $out; + } + + public function SaveXML(&$xml, $dateiname, $action = '', $tag = '') + { + if(!$dateiname) { + return false; + } + if(!$xml) { + return false; + } + + $content = $this->XMLResponse(1,$xml, true, true, $action); + if(empty($content)) { + return false; + } + + if(strpos($dateiname,'/') === false) { + $dateiname = rtrim($this->app->Config->WFuserdata,'/').'/'.$dateiname; + } + $folder = dirname($dateiname); + if($folder !== '.' && !is_dir($folder) && !mkdir($folder,0700,true) && !is_dir($folder)) { + $this->app->erp->LogFile($folder.' konnte nicht erstellt werden'); + } + $content = $this->EntferneSteuerzeichen($content); + if(!empty($tag)) { + $content = str_replace($tag,$tag."\n",$content); + } + + $erg = file_put_contents($dateiname, $content); + return $erg !== false; + } + + function CreateXmlObj() + { +$xmlstr = << + + +XML; + return new SimpleXMLExtended($xmlstr); + } + + public function ApiZeiterfassungEdit($id = null) + { + $xml = $this->XMLPost(); + if(!$id) + { + $id = (int)$this->app->Secure->GetGET('id'); + } + if(!empty($xml['id'])) + { + $id = (int)$xml['id']; + } + if(!$id) + { + $this->XMLResponse(5); + } + if($id && $zeiterfassungen = $this->app->DB->SelectArr("SELECT * FROM zeiterfassung WHERE id = '$id' LIMIT 1")) + { + foreach($xml as $k => $v) + { + if($k != 'id' && array_key_exists($k,$zeiterfassungen[0])) + { + if(($k != 'von' || $v != '') && ($k != 'bis' || $v != '')) + { + $arr[] = " $k = '".$this->app->DB->real_escape_string($v)."' "; + }else{ + $arr[] = " $k = '0000-00-00' "; + } + } + if($k !== 'id' && $k === 'mitarbeiternummer'){ + $mitarbeiterid = $this->app->DB->Select("SELECT id FROM adresse where mitarbeiternummer = '".$this->app->DB->real_escape_string($v)."' AND mitarbeiternummer <> '' AND geloescht=0 LIMIT 1"); + if($mitarbeiterid){ + $arr[] = " adresse = '$mitarbeiterid' "; + } + } + } + if(isset($arr)) + { + $this->app->DB->Update("UPDATE zeiterfassung SET ".implode(', ',$arr)." WHERE id = '$id' LIMIT 1"); + } + $this->XMLResponse(1); + }else{ + $this->XMLResponse(8); + } + $this->app->ExitXentral(); + } + + public function ApiZeiterfassungDelete() + { + $xml = $this->XMLPost(); + $id = (int)$this->app->Secure->GetGET('id'); + if(!empty($xml['id'])) + { + $id = (int)$xml['id']; + } + if($id && $this->app->DB->Select("SELECT id FROM zeiterfassung WHERE id = '$id' LIMIT 1")) + { + $this->app->DB->Delete("DELETE FROM zeiterfassung WHERE id = '$id' LIMIT 1"); + $this->XMLResponse(1); + }else{ + $this->XMLResponse(8); + } + $this->app->ExitXentral(); + } + + public function ApiZeiterfassungCreate() + { + $xml = $this->XMLPost(); + if((!empty($xml['mitarbeiternummer']) || !empty($xml['adresse'])) && !empty($xml['aufgabe']) && !empty($xml['von']) && !empty($xml['bis'])) + { + $this->app->DB->Insert("INSERT INTO zeiterfassung (id) values ('')"); + $id = $this->app->DB->GetInsertID(); + if($id) + { + $this->ApiZeiterfassungEdit($id); + }else{ + $this->XMLResponse(5); + } + }else{ + $this->XMLResponse(5); + } + $this->app->ExitXentral(); + } + + public function ApiZeiterfassungGet() + { + $xml = $this->XMLPost(); + $where = "1"; + $offset = 0; + $limit = 1000000; + if(!empty($xml['offset']))$offset = (int)$xml['offset']; + if($offset < 0)$offset = 0; + if(!empty($xml['limit']))$limit = (int)$xml['limit']; + if($limit <= 0)$limit = 1; + if(!empty($xml['adresse'])) + { + $where .= " AND adresse = '".((int)$xml['adresse'])."' "; + }elseif(!empty($xml['kundennummer'])) + { + $projekt = 0; + if(!empty($xml['projekt'])) + { + if(is_numeric($xml['projekt'])) + { + $projekt = (int)$xml['projekt']; + }else{ + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($xml['projekt'])."' LIMIT 1"); + } + } + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer <> '' AND geloescht <> 1 AND kundennummer = '".$this->app->DB->real_escape_string($xml['kundennummer'])."' ".(!empty($xml['projekt'])?" AND projekt = '$projekt' ":'')." LIMIT 1 "); + $where .= " AND adresse = '$adresse' "; + } + if(!empty($xml['von'])) + { + if(strlen($xml['von'] > 11)) + { + $where .= "AND ((von != '0000-00-00' AND von >= '".$this->app->DB->real_escape_string($xml['von'])."') OR (bis != '0000-00-00' AND bis >= '".$this->app->DB->real_escape_string($xml['von'])."') ) "; + }else{ + $where .= "AND ((von != '0000-00-00' AND date(von) >= '".$this->app->DB->real_escape_string($xml['von'])."') OR (bis != '0000-00-00' AND date(bis) >= '".$this->app->DB->real_escape_string($xml['von'])."') ) "; + } + } + if(!empty($xml['bis'])) + { + if(strlen($xml['bis'] > 11)) + { + $where .= "AND ((von != '0000-00-00' AND von <= '".$this->app->DB->real_escape_string($xml['bis'])."') OR (bis != '0000-00-00' AND bis <= '".$this->app->DB->real_escape_string($xml['bis'])."') ) "; + }else{ + $where .= "AND ((von != '0000-00-00' AND date(von) <= '".$this->app->DB->real_escape_string($xml['bis'])."') OR (bis != '0000-00-00' AND date(bis) <= '".$this->app->DB->real_escape_string($xml['bis'])."') ) "; + } + } + $xml_obj = $this->CreateXmlObj(); + $zeiterfassungen = $this->app->DB->SelectArr("SELECT * FROM zeiterfassung WHERE $where LIMIT $offset, $limit"); + if($zeiterfassungen) + { + $this->AddToXMLObj($xml_obj, 'zeiterfassung', 'zeiterfassungen',$zeiterfassungen); + } + + $this->XMLResponse(1,$xml_obj, true, false); + $this->app->ExitXentral(); + } + + function ReplaceUmlauteArray(&$arr, $lvl = 0) + { + if($lvl > 10) { + return; + } + if(is_array($arr)) { + foreach($arr as $elk => $elv) { + $this->ReplaceUmlauteArray($arr[$elk], $lvl + 1); + } + } + elseif(is_string($arr)) { + $arr = str_replace( + array('ü','ö','ä','Ü','Ö','Ä','ß'), + array('ü','ö','ä','Ü','Ö','Ä','ß'), + $arr + ); + } + } + + function AddElements(&$xml, $array,$name, $lvl = 0) + { + if($lvl > 10) { + return; + } + if(!is_array($array)){ + return; + } + $first = true; + foreach($array as $k => $v) { + if(is_numeric($k)) { + if(is_array($v)) { + if($first) { + if(isset($xml->$name)) { + $this->AddElements($xml->$name, $v, $name, $lvl+1); + } + else{ + $child = $xml->AddChild($name,''); + $this->AddElements($child, $v, $name, $lvl+1); + } + } + else{ + $child = $xml->AddChild($name,''); + $this->AddElements($child, $v, $name, $lvl+1); + } + } + else{ + $xml->AddChild($name, $v); + } + } + else{ + if(is_array($v)) { + if($k != $name) + { + $parent = $xml->AddChild($name, ''); + $name = $k; + $this->AddElements($parent, $v, $k, $lvl+1); + //$child = $parent->AddChild($k, ''); + } + else{ + $child = $xml->AddChild($k, ''); + $this->AddElements($child, $v, $k, $lvl+1); + } + } + else{ + if(isset($xml->$k)) { + $xml->$k = $v; + } + else{ + $child = $xml->AddChild($k, $v); + } + } + } + $first = false; + } + } + + function AddToXMLObj(&$xml_obj, $elementname, $parentelementname, $data, &$toelment = null, &$erg = null) + { + $this->ReplaceUmlauteArray($data); + + if($toelment === null) { + if($xml_obj === null) { + $xml_obj = $this->CreateXmlObj(); + } + if(!isset($xml_obj->xml)) + { + $xml_obj->AddChild('xml',''); + } + if(is_array($data)) + { + if($parentelementname) + { + if(isset($xml_obj->xml->$parentelementname)) + { + $parent = $xml_obj->xml->$parentelementname; + }else{ + $parent = $xml_obj->xml->AddChild($parentelementname,''); + } + foreach($data as $k => $c) + { + $child = $parent->AddChild($elementname, ''); + if(is_array($c)) + { + foreach($c as $key => $value) + { + if(is_array($value)) + { + $this->AddElements($child, $value, is_numeric($key)?$elementname:$key); + }else{ + $child->$key = $value; + } + } + } + } + $erg = $child; + } + else{ + if(isset($data[0])) { + foreach($data as $k => $c) { + $child = $xml_obj->xml->AddChild($elementname, ''); + if(is_array($c)) { + foreach($c as $key => $value) { + $child->$key = $value; + } + } + } + $erg = $child; + } + else{ + $child = $xml_obj->xml->AddChild($elementname, ''); + foreach($data as $key => $value) { + $child->$key = $value; + } + $erg = $child; + } + } + } + else{ + $child = $xml_obj->xml->AddChild($elementname, $data); + $erg = $child; + } + } + else{ + if(is_array($data)) + { + if($parentelementname) + { + if(isset($toelment->$parentelementname)) + { + $parent = $toelment->$parentelementname; + }else{ + $parent = $toelment->AddChild($parentelementname,''); + } + foreach($data as $k => $c) + { + $child = $parent->AddChild($elementname, ''); + if(is_array($c)) + { + foreach($c as $key => $value) + { + $child->$key = $value; + } + } + $erg = $child; + } + } + else{ + if(isset($data[0])) + { + foreach($data as $k => $c) + { + $child = $toelment->AddChild($elementname, ''); + if(is_array($c)) + { + foreach($c as $key => $value) + { + $child->$key = $value; + } + } + $erg = $child; + } + }else{ + $toelment->$elementname = $data; + $erg = $toelment->$elementname; + } + } + }else{ + $child = $toelment->AddChild($elementname, $data); + $erg = $child; + } + } + } + + function XmlToJSON($xml) + { + $simplexml = simplexml_load_string($xml, null, LIBXML_NOCDATA); + $array = $this->ObjectToArray($simplexml); + + return json_encode($array); + } + + function ObjectToArray($object) + { + $array = (array)$object; + if (empty($array)) { + return ''; + } + + foreach ($array as $key => $value) { + if (is_object($value) || is_array($value)) { + $array[$key] = $this->ObjectToArray($value); + } + } + + return $array; + } + + function XMLResponse($messagecode,$xml_inside="", $xml_obj = false, $return = false, $action = '') + { + + if(!$action) + { + if(isset($this->app->Secure)) { + $action = $this->app->Secure->GetGET("action"); + } + } + if($xml_obj) + { + if(!isset($xml_inside->status))$status = $xml_inside->AddChild('status',''); + if(!isset($xml_inside->status->action))$xml_inside->status->AddChild('action',$action); + if(!isset($xml_inside->status->message))$xml_inside->status->AddChild('message',utf8_encode($this->MessageCode($messagecode))); + if(!isset($xml_inside->status->messageCode))$xml_inside->status->AddChild('messageCode',$messagecode); + if($return) + { + if($this->usejson) + { + return $this->XmlToJSON($xml_inside->asXML()); + }else + return $xml_inside->asXML(); + } + if($this->usejson) + { + header('Content-Type: application/json; charset=utf-8'); + echo $this->XmlToJSON($xml_inside->asXML()); + }else { + header('Content-Type: application/xml; charset=utf-8'); + echo $xml_inside->asXML(); + } + $this->app->ExitXentral(); + } + + // if further xml is given + $append = ""; + if($xml_inside!="") + { + //$md5sum = md5($xml_inside); + + //$append = ''.$md5sum.''; + if($this->usejson) { + $append .=''.$xml_inside.''; + }else + $append .=''.$xml_inside.''; + } + + if($this->usejson) { + header('Content-Type: application/json; charset=utf-8'); + echo $this->XmlToJSON(" + + + $action + " . utf8_encode($this->MessageCode($messagecode)) . " + " . $messagecode . " + + " . $append . " + "); + + } + else{ + header('Content-Type: application/xml; charset=utf-8'); + + echo " + + + $action + " . utf8_encode($this->MessageCode($messagecode)) . " + " . $messagecode . " + + " . $append . " + "; + } + $this->app->ExitXentral(); + } + + /** + * @param mixed $arr + * @param bool $escape + * + * @return void + */ + public function XMLCleanUTF8( &$arr, $escape = false, $isHtmlTransformation = false ): void + { + if(empty($arr) || !is_array($arr)) { + return; + } + + foreach ($arr as $idx => $value) { + if (is_array($value)) { + $this->XMLCleanUTF8($arr[$idx], $escape, $isHtmlTransformation); + continue; + } + if (!is_string($value)) { + continue; + } + if($escape) { + $arr[$idx] = $this->app->DB->real_escape_string($value); + continue; + } + + $arr[$idx] = $this->app->erp->ConvertForDBUTF8($value, true, $isHtmlTransformation); + } + } + + + function XMLClean( &$arr, $isHtmlTransformation = false ) { + if($arr && is_array($arr)) { + foreach ($arr as $idx => $value) { + if (is_array($value)) $this->XMLClean($arr[$idx], $isHtmlTransformation); + else { + if (is_string($value)) { + if (mb_detect_encoding($value, 'UTF-8, ISO-8859-1') === 'UTF-8') + $arr[$idx] = $this->app->erp->ConvertForDB($value, true, $isHtmlTransformation); + else + $arr[$idx] = $this->app->erp->ConvertForDBUTF8($value, true, $isHtmlTransformation); + } + } + } + } + } + + function XMLPostPlain() + { + $xml = $this->app->Secure->POST["xml"]; + + if($this->app->Secure->GetGET('cdata')) + { + $this->usecdata = true; + } + if($this->app->Secure->GetGET('json')) + { + $this->usejson = true; + } + /* + //$xml = $this->app->Secure->GetPOST("xml"); + $xml = mysqli_real_escape_string($this->app->DB->connection,$this->app->Secure->POST["xml"]); + $xml = str_replace('','',$xml); + $xml = str_replace('>\n','>',$xml); + $xml = str_replace('\"','"',$xml); + $xml = str_replace(' ','',$xml); + //$xml = str_replace('&','&',$xml); + */ + + $deXml = simplexml_load_string($xml, null + , LIBXML_NOCDATA); + if($deXml === false && $xml) + { + $deXml = json_decode($xml, true); + if($deXml)$this->usejson = true; + } + if(isset($deXml->xml) && isset($deXml->xml->cdata) && $deXml->xml->cdata) + { + $this->usecdata = true; + } + elseif(isset($deXml->cdata) && $deXml->cdata)$this->usecdata = true; + if($this->usejson)$this->usecdata = true; + return $deXml; + } + + function XMLPost() + { + if(isset($this->app->Secure->POST['xml'])) { + $xml = $this->app->Secure->POST['xml']; + } + elseif(isset($this->app->Secure->POST['json'])) + { + $xml = $this->app->Secure->POST['json']; + } + else { + $xml = ''; + } + + /* + //$xml = $this->app->Secure->GetPOST("xml"); + $xml = mysqli_real_escape_string($this->app->DB->connection,$this->app->Secure->POST["xml"]); + $xml = str_replace('','',$xml); + $xml = str_replace('>\n','>',$xml); + $xml = str_replace('\"','"',$xml); + $xml = str_replace(' ','',$xml); + //$xml = str_replace('&','&',$xml); + */ + + $deXml = simplexml_load_string($xml, null + , LIBXML_NOCDATA); + if($deXml === false && $xml) + { + $deXml = json_decode($xml, true); + if($deXml)$this->usejson = true; + } + if($this->app->Secure->GetGET('json')) + { + $this->usejson = true; + } + $deJson = json_encode($deXml); + $xml_array = json_decode($deJson,TRUE); + if(isset($xml_array['cdata']) && $xml_array['cdata']) + { + $this->usecdata = true; + }elseif(isset($xml_array['xml']) && isset($xml_array['xml']['cdata']) && $xml_array['xml']['cdata']) + { + $this->usecdata = true; + } + if($this->app->Secure->GetGET('cdata')) + { + $this->usecdata = true; + } + if($this->usejson)$this->usecdata = true; + + try { + $api_cleanutf8 = $this->getApiAccount()->isCleanUtf8Active(); + $isHtmlTransformation = $this->getApiAccount()->isHtmlTransformationActive(); + } catch (ApiAccountNotFoundException $e){ + $api_cleanutf8 = false; + $isHtmlTransformation = false; + } + + + if(isset($xml_array['xml'])) { + $tmp = $xml_array['xml']; + }elseif($this->usejson) { + $tmp = $xml_array; + } + + $action = $this->app->Secure->GetGET('action'); + + if(in_array($action, + [ + 'AuftragEdit', + 'AuftragCreate', + 'BestellungEdit', + 'BestellungCreate', + 'AngebotCreate', + 'AngebotEdit', + 'LieferscheinCreate', + 'LieferscheinEdit', + 'RetoureCreate', + 'RetoureEdit', + 'RechnungCreate', + 'RechnungEdit', + 'GutschriftCreate', + 'GutschriftEdit' + ] + )) + { + if($api_cleanutf8 == true){ + $this->XMLCleanUTF8($tmp, false, $isHtmlTransformation); + } + else{ + $this->XMLClean($tmp, $isHtmlTransformation); + } + } + else if(in_array($action, ['AdresseEdit','AdresseCreate','AdresseGet'])) + { + if($api_cleanutf8 == true){ + $this->XMLCleanUTF8($tmp, true,$isHtmlTransformation); + } + else{ + $this->XMLClean($tmp, $isHtmlTransformation); + } + } + else if(in_array($action, ['ArtikelEdit', 'ArtikelCreate','ArtikelGet'])) + { + if($api_cleanutf8 == true){ + $this->XMLCleanUTF8($tmp, false, $isHtmlTransformation); + } + else{ + $this->XMLClean($tmp, $isHtmlTransformation); + } + } + else if(in_array($action, ['GruppeEdit','GruppeCreate'])) + { + if($api_cleanutf8 == true){ + $this->XMLCleanUTF8($tmp, false, $isHtmlTransformation); + } + else{ + $this->XMLClean($tmp, $isHtmlTransformation); + } + } + else{ + if($action==='ArtikelList') { + return $tmp; + } + $this->XMLClean($tmp); + } + return $tmp; + } + + function MessageCode($messagecode) + { + switch($messagecode) + { + case 1: $message = "OK"; break; + case 2: $message = "Wrong Hash"; break; + case 3: $message = "Wrong number of GET parameters"; break; + case 4: $message = "Wrong XML data structure for method"; break; + case 5: $message = "Invalid key (id)"; break; + case 6: $message = "Wrong md5sum"; break; + case 7: $message = "Username exists already"; break; + case 8: $message = "Data not found"; break; + case 9: $message = "Wrong or no api_id provided. (https://community.xentral.com/hc/de/articles/360017436919-API-Dokumentation#toc-0)"; break; + default: $message = "Unknown message code"; + } + return $message; + } + + function ApiAdresseCreate($internal=false) + { + $xmldata = $this->XMLPost(); + // anlegen der adresse + if($xmldata['name']!="" && !is_array($xmldata['name'])) + { + //adresse anlegen + $xmldata['strasse'] = $xmldata['strasse']." ".$xmldata['hausnummer']; + if($xmldata['strasse_hausnummer']!="" && !is_array($xmldata['strasse_hausnummer'])) $xmldata['strasse'] = $xmldata['strasse_hausnummer']; + + $xmldata['email'] = str_replace(" ","",$xmldata['email']); + + switch($xmldata['typ']) + { + case "mr": $xmldata['typ']="herr"; break; + case "mr.": $xmldata['typ']="herr"; break; + case "ms": $xmldata['typ']="frau"; break; + case "mrs": $xmldata['typ']="frau"; break; + case "mrs.": $xmldata['typ']="frau"; break; + } + + if($xmldata['firma']!="" && !is_array($xmldata['firma'])) + { + if($xmldata['vorname']!="" && !is_array($xmldata['vorname'])) + $xmldata['ansprechpartner']=$xmldata['vorname']." ".$xmldata['name']; + else + $xmldata['ansprechpartner']=$xmldata['name']; + $xmldata['name']=$xmldata['firma']; + $xmldata['typ']='firma'; + } else + { + if($xmldata['vorname']!="" && !is_array($xmldata['vorname'])) + $xmldata['name']=$xmldata['vorname']." ".$xmldata['name']; + } + + } + + $id = $this->app->erp->CreateAdresse($xmldata['name']); + + //kundennummer=1 bedeutet gleiche Rolle Kunde anlegen + if($xmldata['projekt']!="" && !is_array($xmldata['projekt'])){ + $xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='" . $xmldata['projekt'] . "' LIMIT 1"); + } + else{ + $xmldata['projekt'] = $this->app->erp->GetStandardProjekt(); + } + + $tmp_data_adresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$id' LIMIT 1"); + + if(strtoupper($xmldata['kundennummer'])==='NEW' || strtoupper($xmldata['kundennummer'])==='NEU') + { + $xmldata['kundennummer'] = $this->app->erp->GetNextKundennummer($xmldata['projekt'],$tmp_data_adresse); + $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_kundennummer","Kundennummer ".$xmldata['kundennummer']." erhalten"); + } + + if(strtoupper($xmldata['lieferantennummer'])==='NEW' || strtoupper($xmldata['lieferantennummer'])==='NEU') + { + $xmldata['lieferantennummer'] = $this->app->erp->GetNextLieferantennummer($xmldata['projekt'],$tmp_data_adresse); + $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_lieferantennummer","Lieferantennummer ".$xmldata['lieferantennummer']." erhalten"); + } + + if($xmldata['porto_preis']!="" && $xmldata['porto_artikelid']!="" && !is_array($xmldata['porto_preis'])) + $this->app->erp->AddVerkaufspreis($xmldata['porto_artikelid'],1,$id,$xmldata['porto_preis']); + + + foreach($xmldata as $key=>$value) + { + if(is_array($value)) { + $value=''; + } + if($key==='sonstiges') { + $value = strip_tags(html_entity_decode($value)); + } + if($key==='rabattinformation') { + $value = html_entity_decode($value); + } + if($key === 'geburtsdatum' && strpos($value,'.') !== false) { + $value = $this->app->String->Convert($value,'%1.%2.%3','%3-%2-%1'); + } + if($key!=='id'){ + $this->app->DB->Update("UPDATE adresse SET $key='$value' WHERE id='$id' LIMIT 1"); + } + } + + // Wenn Kundennummer vorhanden sofort Lieferant anlegen + if($xmldata['kundennummer']!="" && !is_array($xmldata['kundennummer'])) + $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $xmldata['projekt'] ); + + if($xmldata['lieferantennummer']!="" && !is_array($xmldata['lieferantennummer'])) + $this->app->erp->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $xmldata['projekt'] ); + + if($xmldata['verband']!="" && !is_array($xmldata['verband'])) + $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Gruppe", $xmldata['verband']); + + if($xmldata['liefername']!="" && !is_array($xmldata['liefername'])) + { + $xmldata['liefername'] = $xmldata['liefervorname']." ".$xmldata['liefername']; + $xmldata['lieferstrasse'] = $xmldata['lieferstrasse']." ".$xmldata['lieferhausnummer']; + + if($xmldata['lieferfirma']!="" && !is_array($xmldata['lieferfirma'])) + { + $xmldata['lieferadresszusatz']=$xmldata['liefervorname']." ".$xmldata['liefername']; + $xmldata['liefername']=$xmldata['lieferfirma']; $xmldata['liefertyp']='firma'; + } + + $xmldata['liefername'] = trim($xmldata['liefername']); + $xmldata['lieferstrasse'] = trim($xmldata['lieferstrasse']); + $xmldata['lieferadresszusatz'] = trim($xmldata['lieferadresszusatz']); + + if(is_array($xmldata['lieferabteilung'])) $xmldata['lieferabteilung'] = ""; + if(is_array($xmldata['lieferunterabteilung'])) $xmldata['lieferunterabteilung'] = ""; + if(is_array($xmldata['lieferland'])) $xmldata['lieferland'] = ""; + if(is_array($xmldata['lieferstrasse'])) $xmldata['lieferstrasse'] = ""; + if(is_array($xmldata['lieferort'])) $xmldata['lieferort'] = ""; + if(is_array($xmldata['lieferplz'])) $xmldata['lieferplz'] = ""; + if(is_array($xmldata['liefertelefon'])) $xmldata['liefertelefon'] = ""; + if(is_array($xmldata['liefertelefax'])) $xmldata['liefertelefax'] = ""; + if(is_array($xmldata['lieferemail'])) $xmldata['lieferemail'] = ""; + if(is_array($xmldata['lieferansprechpartner'])) $xmldata['lieferansprechpartner'] = ""; + if(is_array($xmldata['liefertyp'])) $xmldata['liefertyp'] = ""; + if(is_array($xmldata['lieferadresszusatz'])) $xmldata['lieferadresszusatz'] = ""; + + $this->app->DB->Insert("INSERT INTO lieferadressen + (id,name,abteilung,unterabteilung,land,strasse,ort,plz,telefon,telefax,email,ansprechpartner,adresse,typ,adresszusatz,standardlieferadresse) + VALUES ('','{$xmldata['liefername']}','{$xmldata['lieferabteilung']}','{$xmldata['lieferunterabteilung']}', + '{$xmldata['lieferland']}','{$xmldata['lieferstrasse']}','{$xmldata['lieferort']}', + '{$xmldata['lieferplz']}','{$xmldata['liefertelefon']}','{$xmldata['liefertelefax']}','{$xmldata['lieferemail']}', + '{$xmldata['lieferansprechpartner']}','$id','{$xmldata['liefertyp']}','{$xmldata['lieferadresszusatz']}',1)"); + } + + if(!empty($xmldata['dateien']) && is_array($xmldata['dateien'])) + { + $this->AddFiles($xmldata['dateien'], 'adresse', $id); + } + + if($xmldata['lieferantennummer']=="") + { + if($internal) return $xmldata['kundennummer']; + $this->XMLResponse(1,"$id".$xmldata['kundennummer'].""); + } else { + if($internal) return $xmldata['lieferantennummer']; + $this->XMLResponse(1,"$id".$xmldata['lieferantennummer'].""); + } + $this->app->ExitXentral(); + } + + function ApiAdresseEdit($intern = false) + { + $xmldata = $this->XMLPost(); + if(isset($xmldata['adresse'])) + { + if(is_array($xmldata['adresse']) && isset($xmldata['adresse'][0])) + { + }else{ + $xmldata['adresse'][0] = $xmldata['adresse']; + } + foreach($xmldata['adresse'] as $_key => $_xmldata) + { + + $id = 0; + $kundennummer = ''; + $projekt = 0; + if(isset($_xmldata['id']))$id = (int)$_xmldata['id']; + if(isset($_xmldata['kundennummer']))$kundennummer = $this->app->DB->real_escape_string($_xmldata['kundennummer']); + if(isset($_xmldata['projekt']))$projekt = (int)$_xmldata['projekt']; + + if($kundennummer!="") + { + if($projekt !="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND projekt='$projekt' LIMIT 1"); + } else { + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' LIMIT 1"); + } + } + if($id) + { + if($_xmldata['porto_preis']!="" && $_xmldata['porto_artikelid']!="" && !is_array($_xmldata['porto_preis'])) + $this->app->erp->AddVerkaufspreis($_xmldata['porto_artikelid'],1,$id,$_xmldata['porto_preis']); + + if($_xmldata['projekt']!="" && !is_array($_xmldata['projekt']) && !is_numeric($_xmldata['projekt'])) + $_xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$_xmldata['projekt']."' LIMIT 1"); + + $tmp_data_adresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$id' LIMIT 1"); + + if(strtoupper($_xmldata['kundennummer'])==='NEW' || strtoupper($_xmldata['kundennummer'])==='NEU') + { + + $_xmldata['kundennummer'] = $this->app->erp->GetNextKundennummer($_xmldata['projekt'],$tmp_data_adresse); + $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_kundennummer","Kundennummer ".$_xmldata['kundennummer']." erhalten"); + } + + if(strtoupper($_xmldata['lieferantennummer'])==='NEW' || strtoupper($_xmldata['lieferantennummer'])==='NEU') + { + $_xmldata['lieferantennummer'] = $this->app->erp->GetNextLieferantennummer($_xmldata['projekt'],$tmp_data_adresse); + $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_lieferantennummer","Lieferantennummer ".$_xmldata['lieferantennummer']." erhalten"); + } + + if($_xmldata['kundennummer']!="" && !is_array($_xmldata['kundennummer'])) + $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $_xmldata['projekt'] ); + + if($_xmldata['lieferantennummer']!="" && !is_array($_xmldata['lieferantennummer'])) + $this->app->erp->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $_xmldata['projekt'] ); + + if($_xmldata['verband']!="" && !is_array($_xmldata['verband'])) + { + if($this->app->erp->GetVerband($id)!=$_xmldata['verband']) + { + // alle verbaende loeschen + $this->app->DB->Update("UPDATE adresse_rolle ad LEFT JOIN gruppen g + ON g.id=ad.parameter SET ad.bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE ad.objekt='Gruppe' AND g.art='verband' + AND ad.adresse='$id'"); + } + $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Gruppe", $_xmldata['verband']); + } + else + { + // alle verbaende loeschen + $this->app->DB->Update("UPDATE adresse_rolle ad LEFT JOIN gruppen g + ON g.id=ad.parameter SET ad.bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE ad.objekt='Gruppe' AND g.art='verband' + AND ad.adresse='$id'"); + } + foreach($_xmldata as $key=>$value) { + if(is_array($value)) { + $value=''; + } + if($key==='sonstiges') { + $value = strip_tags(html_entity_decode($value)); + } + if($key==='rabattinformation') { + $value = html_entity_decode($value); + } + if($key === 'geburtsdatum' && strpos($value,'.') !== false) { + $value = $this->app->String->Convert($value,'%1.%2.%3','%3-%2-%1'); + } + if($key!=='id'){ + $this->app->DB->Update("UPDATE adresse SET $key='$value' WHERE id='$id' LIMIT 1"); + } + } + } + } + if(!empty($xmldata['dateien']) && is_array($xmldata['dateien'])) + { + $this->AddFiles($xmldata['dateien'], 'adresse', $id); + } + if($intern){ + return $id; + } + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + $id = $this->app->Secure->GetGET("id"); + $kundennummer = $this->app->Secure->GetGET("kundennummer"); + + if(strtoupper($xmldata['kundennummer'])==="NEW" || strtoupper($xmldata['kundennummer'])==="NEU") + { + + $xmldata['kundennummer'] = $this->app->erp->GetNextKundennummer($xmldata['projekt'],$id); + $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_kundennummer","Kundennummer ".$xmldata['kundennummer']." erhalten"); + } + + if(strtoupper($xmldata['lieferantennummer'])==="NEW" || strtoupper($xmldata['lieferantennummer'])==="NEU") + { + $xmldata['lieferantennummer'] = $this->app->erp->GetNextLieferantennummer($xmldata['projekt'],$id); + $this->app->erp->ObjektProtokoll("adresse",$id,"adresse_next_lieferantennummer","Lieferantennummer ".$xmldata['lieferantennummer']." erhalten"); + } + + $projekt = $this->app->Secure->GetGET("projekt"); + + if($kundennummer!="") + { + if($projekt!="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND projekt='$projekt' LIMIT 1"); + } else { + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' LIMIT 1"); + } + } + + // Key gibt es nicht + if($id <= 0) + { + + if($intern)return false; + $this->XMLResponse(5); + } + + + + if($xmldata['porto_preis']!="" && $xmldata['porto_artikelid']!="" && !is_array($xmldata['porto_preis'])) + $this->app->erp->AddVerkaufspreis($xmldata['porto_artikelid'],1,$id,$xmldata['porto_preis']); + + if($xmldata['projekt']!="" && !is_array($xmldata['projekt'])) + $xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['projekt']."' LIMIT 1"); + + if($xmldata['kundennummer']!="" && !is_array($xmldata['kundennummer'])) + $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $xmldata['projekt'] ); + + if($xmldata['lieferantennummer']!="" && !is_array($xmldata['lieferantennummer'])) + $this->app->erp->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $xmldata['projekt'] ); + + if($xmldata['verband']!="" && !is_array($xmldata['verband'])) + { + if($this->app->erp->GetVerband($id)!=$xmldata['verband']) + { + // alle verbaende loeschen + $this->app->DB->Update("UPDATE adresse_rolle ad LEFT JOIN gruppen g + ON g.id=ad.parameter SET ad.bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE ad.objekt='Gruppe' AND g.art='verband' + AND ad.adresse='$id'"); + } + $this->app->erp->AddRolleZuAdresse($id, "Kunde", "von", "Gruppe", $xmldata['verband']); + } + else + { + // alle verbaende loeschen + $this->app->DB->Update("UPDATE adresse_rolle ad LEFT JOIN gruppen g + ON g.id=ad.parameter SET ad.bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE ad.objekt='Gruppe' AND g.art='verband' + AND ad.adresse='$id'"); + } + + foreach($xmldata as $key=>$value) + { + if(is_array($value)){ + $value=''; + } + if($key==='sonstiges') { + $value = strip_tags(html_entity_decode($value)); + } + if($key==='rabattinformation') { + $value = html_entity_decode($value); + } + if($key!=='id'){ + $this->app->DB->Update("UPDATE adresse SET $key='$value' WHERE id='$id' LIMIT 1"); + } + } + if(!empty($xmldata['dateien']) && is_array($xmldata['dateien'])) + { + $this->AddFiles($xmldata['dateien'], 'adresse', $id); + } + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + function ApiAdresseGet($intern = false,$id="") + { + if($id=="") + $id = $this->app->Secure->GetGET("id"); + $kundennummer = $this->app->Secure->GetGET("kundennummer"); + $projekt = $this->app->Secure->GetGET("projekt"); + + + $xmldata = $this->XMLPost(); + + if($id=="" && isset($xmldata['id']))$id = $xmldata['id']; + if($kundennummer=="" && isset($xmldata['kundennummer']))$kundennummer = $xmldata['kundennummer']; + if($projekt=="" && isset($xmldata['projekt']))$projekt = $xmldata['projekt']; + + if($kundennummer!="") + { + if($projekt!="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND projekt='$projekt' LIMIT 1"); + } else { + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' LIMIT 1"); + } + } + + //check + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$id' LIMIT 1"); + + if($id > 0) + { + if($intern) { + return $this->app->erp->XMLAdresse($id); + } + $this->XMLResponse(1,$this->app->erp->XMLAdresse($id)); + $this->app->ExitXentral(); + } + if($intern) { + return false; + } + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + function ApiAngebotCreate($intern = false) + { + return $this->ApiBelegCreate($intern, 'angebot'); + } + + public function ApiAuftragCreate($intern = false, $doctype = 'auftrag') { + return $this->ApiBelegCreate($intern, $doctype); + } + + public function ApiBelegCreate($intern = false, $doctype = 'auftrag') + { + if(!in_array($doctype, array('angebot', 'gutschrift', 'lieferschein', 'rechnung','bestellung','retoure'))){ + $doctype = 'auftrag'; + } + $xmldata = $this->XMLPost(); + // wenn gleich eine neue Adresse mitangelegt werden soll + if($doctype === 'bestellung'){ + if(strtoupper($xmldata['lieferantennummer']) === 'NEW' || strtoupper($xmldata['lieferantennummer']) === 'NEU'){ + $xmldata['lieferantennummer'] = $this->ApiAdresseCreate(true); + } + $adresse = 0; + if(!empty($xmldata['lieferantennummer'])){ + $adresse = $this->app->DB->Select( + sprintf( + "SELECT id FROM adresse WHERE lieferantennummer='%s' AND lieferantennummer <> '' AND IFNULL(geloescht,0) = 0 LIMIT 1", + $xmldata['lieferantennummer'] + ) + ); + } + if(!$adresse && !empty($xmldata['kundennummerlieferant'])) { + $adresse = $this->app->DB->Select( + sprintf( + "SELECT id FROM adresse + WHERE kundennummer='%s' AND lieferantennummer <> '' AND IFNULL(geloescht,0) = 0 LIMIT 1", + $xmldata['kundennummerlieferant'] + ) + ); + } + + }else{ + if(strtoupper($xmldata['kundennummer']) === 'NEW' || strtoupper($xmldata['kundennummer']) === 'NEU' || $xmldata['kundennummer'] == '' || !isset($xmldata['kundennummer'])){ + $xmldata['kundennummer'] = $this->ApiAdresseCreate(true); + } + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['kundennummer']."' AND kundennummer <> '' LIMIT 1"); + } + + // anlegen der adresse + + + if($adresse <= 0) + { + if($intern) { + return false; + } + $this->XMLResponse(5,'address not found'); + $this->app->ExitXentral(); + } + + switch ($doctype) { + case 'angebot': + $id = $this->app->erp->CreateAngebot($adresse); + $this->app->erp->LoadAngebotStandardwerte($id,$adresse); + break; + + case 'gutschrift': + $id = $this->app->erp->CreateGutschrift($adresse); + $this->app->erp->LoadGutschriftStandardwerte($id,$adresse); + break; + + case 'lieferschein': + $id = $this->app->erp->CreateLieferschein($adresse); + $this->app->erp->LoadLieferscheinStandardwerte($id,$adresse); + break; + + case 'retoure': + $id = $this->app->erp->CreateRetoure($adresse); + $this->app->erp->LoadRetoureStandardwerte($id,$adresse); + break; + + case 'rechnung': + $id = $this->app->erp->CreateRechnung($adresse); + $this->app->erp->LoadRechnungStandardwerte($id,$adresse); + break; + + case 'bestellung': + $this->app->erp->LogFile($adresse); + $id = $this->app->erp->CreateBestellung($adresse); + $this->app->erp->LoadBestellungStandardwerte($id,$adresse); + break; + default: + $id = $this->app->erp->CreateAuftrag($adresse); + $this->app->erp->LoadAuftragStandardwerte($id,$adresse); + break; + } + + $xmldata['belegnr'] = (string)$this->app->DB->Select("SELECT belegnr FROM $doctype WHERE id = '$id' LIMIT 1"); + if($xmldata['belegnr'] === '' || $xmldata['belegnr'] === '0'){$xmldata['belegnr'] = $this->app->erp->GetNextNummer($doctype,$xmldata['projekt'],$id);} + if($doctype === 'bestellung') + { + $xmldata['lieferantkdrnummer'] = $xmldata['lieferantennummer']; + }else{ + $xmldata['lieferantkdrnummer'] = $xmldata['kundennummer']; + } + if($doctype==='auftrag'){ + $this->app->DB->Update("UPDATE $doctype SET lieferantkdrnummer='" . $xmldata['lieferantkdrnummer'] . "' WHERE id='" . $id . "' LIMIT 1"); + } + if($doctype === 'bestellung') + { + if(!empty($xmldata['lieferantennummer'])){ + $this->app->DB->Update("UPDATE $doctype SET lieferantennummer='" . $xmldata['lieferantennummer'] . "' WHERE id='" . $id . "' LIMIT 1"); + } + }else{ + $this->app->DB->Update("UPDATE $doctype SET kundennummer='" . $xmldata['kundennummer'] . "' WHERE id='" . $id . "' LIMIT 1"); + } + + if($xmldata['shopextid']=='' || $xmldata['shopextid']==0){ + $xmldata['shopextid'] = 1; + } + if($xmldata['projekt']==''){ + $xmldata['projekt'] = $this->app->DB->Select( + sprintf( + 'SELECT pr.abkuerzung + FROM `%s` AS b + INNER JOIN adresse AS adr ON b.adresse = adr.id + INNER JOIN projekt AS pr ON adr.projekt = pr.id AND pr.geloescht <> 1 + WHERE b.id = %d', + $doctype, $id + ) + ); + if($xmldata['projekt']=='' && $doctype === 'auftrag') { + $xmldata['projekt'] = $this->app->DB->Select( + sprintf( + "SELECT pr.abkuerzung + FROM `auftrag` AS b + INNER JOIN adresse AS adr ON b.adresse = adr.id AND b.lieferantenauftrag = 0 + INNER JOIN adresse_rolle AS ar on adr.id = ar.adresse AND ar.subjekt = 'Kunde' AND ar.objekt = 'Projekt' + AND (IFNULL(ar.bis,'0000-00-00') = '0000-00-00' OR ar.bis >= CURDATE()) + INNER JOIN projekt AS pr ON ar.parameter = pr.id AND pr.geloescht <> 1 + WHERE b.id = %d + ORDER BY ar.id + LIMIT 1", + $id + ) + ); + } + if($xmldata['projekt']=='') { + $xmldata['projekt'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='" . $this->app->erp->Firmendaten("projekt") . "' LIMIT 1"); + } + } + + $this->app->DB->Update("UPDATE $doctype SET belegnr='".$xmldata['belegnr']."' WHERE id='".$id."' LIMIT 1"); + if(!isset($xmldata['status'])){ + $xmldata['status'] = 'freigegeben'; + } + $this->app->DB->Update("UPDATE $doctype SET status='freigegeben' WHERE id='".$id."' AND (status = 'angelegt' OR status = '') LIMIT 1"); + $this->ApiBelegEdit(true,$id, $doctype, $xmldata); + if($intern){ + return $id; + } + $this->XMLResponse(1,"$id".$xmldata['belegnr'].''); + + $this->app->ExitXentral(); + } + + /** + * @param bool $intern + * @param null $id + * + * @return array|bool + */ + public function ApiGutschriftFreigabe($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + $ret = $this->ApiBelegFreiabe('gutschrift', $id); + if(!$intern) { + if(!empty($ret)) { + if(!empty($ret['error'])) { + $this->XMLResponse($ret['error']); + } + $this->XMLResponse(1,"$id".$ret['belegnr'].''); + } + } + + return $ret; + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiRechnungVersenden($intern = false, $id = null) + { + return $this->ApiBelegVersenden($intern, $id, 'rechnung'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiAuftragVersenden($intern = false, $id = null) + { + return $this->ApiBelegVersenden($intern, $id, 'auftrag'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiAngebotVersenden($intern = false, $id = null) + { + return $this->ApiBelegVersenden($intern, $id, 'angebot'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiGutschriftVersenden($intern = false, $id = null) + { + return $this->ApiBelegVersenden($intern, $id, 'gutschrift'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiLieferscheinVersenden($intern = false, $id = null) + { + return $this->ApiBelegVersenden($intern, $id, 'lieferschein'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiReisekostenVersenden($intern = false, $id = null) + { + return $this->ApiBelegVersenden($intern, $id, 'reisekosten'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiAuftragArchivieren($intern = false, $id = null) + { + return $this->ApiBelegArchivieren($intern, $id, 'auftrag'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiRechnungArchivieren($intern = false, $id = null) + { + return $this->ApiBelegArchivieren($intern, $id, 'rechnung'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiAngebotArchivieren($intern = false, $id = null) + { + return $this->ApiBelegArchivieren($intern, $id, 'angebot'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiLieferscheinArchivieren($intern = false, $id = null) + { + return $this->ApiBelegArchivieren($intern, $id, 'lieferschein'); + } + + /** + * @param bool $intern + * @param null $id + * + * @return int + */ + public function ApiGutschriftArchivieren($intern = false, $id = null) + { + return $this->ApiBelegArchivieren($intern, $id, 'gutschrift'); + } + + /** + * @param bool $intern + * @param int $id + * @param string $doctype + * + * @return int + */ + public function ApiBelegArchivieren($intern, $id, $doctype) + { + if($id==''){ + $id = $this->getIdFromData(); + } + + if($id <= 0){ + if(!$intern){ + $this->XMLResponse(5); + } + else { + return 5; + } + } + $projectId = $this->app->DB->Select( + sprintf( + 'SELECT projekt FROM `%s` WHERE id = %d LIMIT 1', + $doctype, $id + ) + ); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + $class = ucfirst($doctype).'PDFCustom'; + if(!class_exists($class)) { + $class = ucfirst($doctype).'PDF'; + } + if(!class_exists($class)) { + if(!$intern){ + $this->XMLResponse(5); + } + else { + return 5; + } + } + + $pdf = new $class($this->app, $projectId); + $method = 'Get'.ucfirst($doctype); + if(!method_exists($pdf, $method)) { + if(!$intern){ + $this->XMLResponse(5); + } + else { + return 5; + } + } + $pdf->$method($id); + $tmpfile = $pdf->displayTMP(); + $pdf->ArchiviereDocument(); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + $pdf = new $class($this->app, $projectId); + $pdf->$method($id); + $tmpfile = $pdf->displayTMP(); + $pdf->ArchiviereDocument(1); + $this->app->DB->Update(sprintf('UPDATE `%s` SET schreibschutz=1 WHERE id=%d', $doctype, $id)); + unlink($tmpfile); + if(!$intern){ + $this->XMLResponse(1, ''.$id.''); + } + + return 1; + } + + /** + * @param string $doctype + * @param int $doctypeId + * @param array $xmldata + * + * @return int + */ + public function ApiBelegVersenden($intern, $id, $doctype) + { + if($id==''){ + $id = $this->getIdFromData(); + } + + if($id <= 0){ + if(!$intern){ + $this->XMLResponse(5); + } + else { + return 5; + } + } + $xmldata = $this->XMLPost(); + $type = !empty($xmldata['versandart'])?$xmldata['versandart']:$xmldata['art']; + $printer = !empty($xmldata['drucker'])?$xmldata['drucker']:$xmldata['email']; + if(!in_array($doctype, ['rechnung','angebot','auftrag','gutschrift','lieferschein','reisekosten'])) { + if(!$intern){ + $this->XMLResponse(5); + } + else { + return 5; + } + } + + if($type!=='email' && $type!=='brief'){ + if(!$intern){ + $this->XMLResponse(5); + } + else { + return 5; + } + } + $this->getEmailSettings(); + $this->app->erp->BelegVersand($doctype, $id, $type, $printer); + + if(!$intern){ + $this->XMLResponse(1, ''.$id.''); + } + + return 1; + } + + /** + * @param bool $intern + * @param null|int $id + */ + public function ApiWeiterfuehrenRechnungZuGutschrift($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + + if($id <= 0){ + if(!$intern){ + $this->XMLResponse(5); + } + else { + return; + } + } + $returnOrderId = $this->app->erp->WeiterfuehrenRechnungZuGutschrift($id); + if(empty($returnOrderId)) { + if(!$intern){ + $this->XMLResponse(5); + } + } + if(!$intern){ + $this->XMLResponse(1, '' . $returnOrderId . ''); + } + } + + /** + * @param bool $intern + * @param null|int $id + */ + public function ApiWeiterfuehrenAuftragZuRechnung($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + + if($id <= 0){ + if(!$intern){ + $this->XMLResponse(5); + } + else { + return; + } + } + $invoiceId = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id); + if(empty($invoiceId)) { + if(!$intern){ + $this->XMLResponse(5); + } + } + if(!$intern){ + $this->XMLResponse(1, '' . $invoiceId . ''); + } + } + + /** + * @param bool $intern + * @param null|int $id + * + * @return bool + */ + public function ApiRechnungVersendetMarkieren($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + if(empty($id)) { + if($intern) { + return false; + } + $this->XMLResponse(5); + } + /** @var Rechnung $obj */ + $obj = $this->app->erp->LoadModul('rechnung'); + if(empty($obj)) { + $ok = false; + } + else{ + $ok = $obj->markInvoiceAsClosed(); + } + if(!$intern) { + if($ok) { + $this->XMLResponse(1, ''.$id.''); + } + else { + $this->XMLResponse(5); + } + } + + return $ok; + } + + /** + * @param bool $intern + * @param null|int $id + * + * @return array + */ + public function ApiAuftragAbschliessen($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + /** @var Auftrag $obj */ + $obj = $this->app->erp->LoadModul('auftrag'); + $ret = $obj->closeOrder($id); + if(!$intern){ + if(!empty($ret['error'])){ + $this->XMLResponse(5); + } + $this->XMLResponse(1, ''.$id.''); + } + + return $ret; + } + + /** + * @param bool $intern + * @param null|int $id + * + * @return array + */ + public function ApiRechnungAlsBezahltMarkieren($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + /** @var Rechnung $obj */ + $obj = $this->app->erp->LoadModul('rechnung'); + $ret = $obj->setManualPayed($id); + if(!$intern){ + if(!empty($ret['error'])){ + $this->XMLResponse(5); + } + $this->XMLResponse(1, ''.$id.''); + } + + return $ret; + } + + /** + * @param bool $intern + * @param null $id + * + * @return array|bool + */ + public function ApiAngebotFreigabe($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + $ret = $this->ApiBelegFreiabe('angebot', $id); + if(!$intern) { + if(!empty($ret)) { + if(!empty($ret['error'])) { + $this->XMLResponse($ret['error']); + } + $this->XMLResponse(1,"$id".$ret['belegnr'].''); + } + } + + return $ret; + } + + /** + * @param bool $intern + * @param null $id + * + * @return array|bool + */ + public function ApiBestellungFreigabe($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + $ret = $this->ApiBelegFreiabe('bestellung', $id); + if(!$intern) { + if(!empty($ret)) { + if(!empty($ret['error'])) { + $this->XMLResponse($ret['error']); + } + $this->XMLResponse(1,"$id".$ret['belegnr'].''); + } + } + + return $ret; + } + + /** + * @param bool $intern + * @param null $id + * + * @return array|bool + */ + public function ApiRechnungFreigabe($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + $ret = $this->ApiBelegFreiabe('rechnung', $id); + if(!$intern) { + if(!empty($ret)) { + if(!empty($ret['error'])) { + $this->XMLResponse($ret['error']); + } + $this->XMLResponse(1,"$id".$ret['belegnr'].''); + } + } + + return $ret; + } + + /** + * @return array|mixed|string + */ + protected function getIdFromData() + { + $id = $this->app->Secure->GetGET('id'); + if(empty($id)) { + $xmldata = $this->XMLPost(); + if(is_array($xmldata) && !empty($xmldata['id'])) { + $id = $xmldata['id']; + } + } + + return $id; + } + + /** + * @param bool $intern + * @param null $id + * + * @return array|bool + */ + public function ApiAuftragFreigabe($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + + $ret = $this->ApiBelegFreiabe('auftrag', $id); + if(!$intern) { + if(!empty($ret)) { + if(!empty($ret['error'])) { + $this->XMLResponse($ret['error']); + } + $this->XMLResponse(1,"$id".$ret['belegnr'].''); + } + } + + return $ret; + } + + /** + * @param bool $intern + * @param null $id + * + * @return array|bool + */ + public function ApiLieferscheinFreigabe($intern = false, $id = null) + { + if($id==''){ + $id = $this->getIdFromData(); + } + $ret = $this->ApiBelegFreiabe('lieferschein', $id); + if(!$intern) { + if(!empty($ret)) { + if(!empty($ret['error'])) { + $this->XMLResponse($ret['error']); + } + $this->XMLResponse(1,"$id".$ret['belegnr'].''); + } + } + + return $ret; + } + + /** + * @param string $typ + * @param int $id + * + * @return bool|array + */ + public function ApiBelegFreiabe($typ, $id) + { + if($id <= 0) { + return ['error' => 5]; + } + if(!in_array($typ, ['auftrag','angebot','rechnung','gutschrift','lieferschein','bestellung'])) { + return ['error' => 5]; + } + + $row = $this->app->DB->SelectRow( + sprintf( + "SELECT id, belegnr, status + FROM `%s` + WHERE id = %d + LIMIT 1", + $typ, $id + ) + ); + if(empty($row)) { + return ['error' => 8]; + } + + if(in_array($row['status'], ['storniert','abgeschlossen','versendet'])) { + return ['error' => 8]; + } + $this->app->erp->BelegFreigabe($typ, $id); + + return ['id' => $id, 'belegnr' => $this->app->DB->Select(sprintf('SELECT belegnr FROM `%s` WHERE id = %d', $typ, $id))]; + } + + function ApiEtikettendrucker($intern=false) + { + $xmldata = $this->XMLPost(); + + // id pruefen + if($xmldata['etikett'] <= 0) + { + if($intern) { + return false; + } + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + //$xmldata['kennung'] + $xmldata['etikett']=(isset($xmldata['etikett'])?$xmldata['etikett']:""); + $xmldata['anzahl']=(isset($xmldata['anzahl']) && $xmldata['anzahl'] > 0?$xmldata['anzahl']:1); + $xmldata['tabelle']=(isset($xmldata['tabelle'])?$xmldata['tabelle']:""); + $xmldata['id']=(isset($xmldata['id'])?$xmldata['id']:""); + $xmldata['drucker']=(isset($xmldata['drucker'])?$xmldata['drucker']:""); + + $tmp = array(); + if(isset($xmldata['parameter']) && is_array($xmldata['parameter'])) + { + foreach($xmldata['parameter'] as $keyname=>$value) + $tmp[$keyname] = $value; + } + + $this->app->erp->EtikettenDrucker($xmldata['etikett'],$xmldata['anzahl'],$xmldata['tabelle'],$xmldata['id'],$tmp,"",$xmldata['drucker']); + + if($intern) { + return true; + } + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + function ApiAuftragZuRechnung($intern=false,$id="") + { + if($id=="") + $id = $this->app->Secure->GetGET("id"); + $xmldata = $this->XMLPost(); + if($id==""){ + $id= $xmldata['id']; + } + // id pruefen + $id = $this->app->DB->Select("SELECT id FROM auftrag WHERE id='".(int)$id."' LIMIT 1"); + if($id <= 0) + { + if($intern) { + return false; + } + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + if(!class_exists('FormHandler')) + { + include_once(__DIR__ ."/../../phpwf/plugins/class.formhandler.php"); + $this->app->FormHandler = new FormHandler($this->app); + }else{ + if(empty($this->app->FormHandler))$this->app->FormHandler = new FormHandler($this->app); + } + $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id); + if($intern) { + return $rechnung; + } + $this->XMLResponse(1,$this->ApiRechnungGet(true, $rechnung)); + $this->app->ExitXentral(); + } + + function ApiAngebotZuAuftrag($intern=false,$id="") + { + if($id=="") + $id = $this->app->Secure->GetGET("id"); + $xmldata = $this->XMLPost(); + if($id==""){ + $id= $xmldata['id']; + } + // id pruefen + $id = $this->app->DB->Select("SELECT id FROM angebot WHERE id='".(int)$id."' LIMIT 1"); + if($id <= 0) + { + if($intern) { + return false; + } + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + if(!class_exists('FormHandler')) + { + include_once(__DIR__ ."/../../phpwf/plugins/class.formhandler.php"); + $this->app->FormHandler = new FormHandler($this->app); + }else{ + if(empty($this->app->FormHandler))$this->app->FormHandler = new FormHandler($this->app); + } + $auftrag = $this->app->erp->WeiterfuehrenAngebotZuAuftrag($id); + if($intern) { + return $auftrag; + } + $this->XMLResponse(1,$this->ApiAuftragGet(true, $auftrag)); + $this->app->ExitXentral(); + } + + public function ApiAngebotEdit($intern=false,$id='') + { + return $this->ApiBelegEdit($intern, $id, 'angebot'); + } + + public function ApiAuftragEdit($intern=false,$id='', $doctype = 'auftrag', $xmldata = null) + { + return $this->ApiBelegEdit($intern,$id, $doctype, $xmldata); + } + + public function ApiBelegEdit($intern=false,$id='', $doctype = 'auftrag', $xmldata = null) + { + if($id==''){ + $id = $this->app->Secure->GetGET('id'); + } + + + if(empty($xmldata)){ + $xmldata = $this->XMLPost(); + } + + if(!$intern && $doctype === 'auftrag' && isset($xmldata['belegnr']) && (strtoupper($xmldata['belegnr']) === 'NEW' || strtoupper($xmldata['belegnr']) === 'NEU')) + { + $this->ApiAuftragCreate(); + } + + if($id==''){ + $id = $xmldata['id']; + } + + if(empty($id) && !empty($xmldata['belegnr'])){ + $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE belegnr='".$this->app->DB->real_escape_string($xmldata['belegnr'])."' LIMIT 1"); + } + + // id pruefen + $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE id='".(int)$id."' LIMIT 1"); + + if($id <= 0) + { + if($intern){ + return false; + } + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + // anlegen der adresse + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id='".$id."' LIMIT 1"); + if($adresse <= 0) + { + if($intern){ + return false; + } + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + if($xmldata['status']!=='angelegt' && $xmldata['status']!=='freigegeben' && + $xmldata['status']!=='abgeschlossen' && $xmldata['status']!=='storniert'){ + $xmldata['status'] = 'angelegt'; + } + + //if($xmldata['status']=="freigegeben") + // $xmldata['status']="angelegt"; + + //kundennummer=1 bedeutet gleiche Rolle Kunde anlegen + if($xmldata['projekt']!='' && !is_array($xmldata['projekt'])){ + $xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='" . $xmldata['projekt'] . "' LIMIT 1"); + } + + if($xmldata['projekt'] <=0){ + $xmldata['projekt'] = $this->app->erp->ImportGetStandardProjekt(); + } + + // schaue ob kundennummer angebene ist und mache Load + if($doctype !== 'bestellung'){ + if($xmldata['kundennummer'] != '' && strtoupper($xmldata['kundennummer']) !== 'NEW' && + strtoupper($xmldata['kundennummer']) !== 'NEU' && !is_array($xmldata['kundennummer'])){ + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='" . $xmldata['kundennummer'] . "' LIMIT 1"); + $_funktion = 'Load' . ucfirst($doctype) . 'Standardwerte'; + if(method_exists($this->app->erp, $_funktion)){ + $this->app->erp->$_funktion($id, $adresse); + } + //$this->app->erp->LoadAuftragStandardwerte($id,$adresse); + }else{ + if($xmldata['land'] == ''){ + $xmldata['land'] = 'DE'; + } + } + } else{ + if($xmldata['lieferantennummer'] != '' && strtoupper($xmldata['lieferantennummer']) !== 'NEW' && + strtoupper($xmldata['lieferantennummer']) !== 'NEU' && !is_array($xmldata['kundennummer'])){ + if(!$adresse){ + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='" . $xmldata['lieferantennummer'] . "' LIMIT 1"); + } + $_funktion = 'Load' . ucfirst($doctype) . 'Standardwerte'; + if(method_exists($this->app->erp, $_funktion)){ + $this->app->erp->$_funktion($id, $adresse); + } + //$this->app->erp->LoadAuftragStandardwerte($id,$adresse); + }else{ + if($xmldata['land'] == ''){ + $xmldata['land'] = 'DE'; + } + } + } + + + $this->app->DB->Delete("DELETE FROM $doctype"."_position WHERE $doctype='$id'"); + + if($xmldata['status']==''){ + $xmldata['status'] = 'freigegeben'; + } + + // updat alle felde die angeben wurden sind + + $doctypeArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM `%s` WHERE id = %d LIMIT 1',$doctype,$id + ) + ); + $doctypeKeys = array_keys($doctypeArr); + foreach($xmldata as $key=>$value) + { + if(is_array($value)){ + $value=''; + } + if($key!=='id'){ + if(!in_array($key,$doctypeKeys)) { + continue; + } + $this->app->DB->Update("UPDATE $doctype SET $key='$value' WHERE id='$id' LIMIT 1"); + } + } + + if(isset($xmldata['artikelliste']['position']['menge'])) + { + $tmp = $xmldata['artikelliste']['position']; + unset($xmldata['artikelliste']['position']); + $xmldata['artikelliste']['position'][0] = $tmp; + }elseif(!isset($xmldata['artikelliste']['position'][0])) + { + $tmp = $xmldata['artikelliste']['position']; + unset($xmldata['artikelliste']['position']); + $xmldata['artikelliste']['position'][0] = $tmp; + } + // alle positionen der reihe nach + + $cposition = isset($xmldata['artikelliste']['position'])?count($xmldata['artikelliste']['position']):0; + for($i=0;$i<$cposition;$i++) + { + $projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); + if(!empty($xmldata['artikelliste']['position'][$i]['nummer'])){ + if($projektid > 0){ + $positionid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='" . $xmldata['artikelliste']['position'][$i]['nummer'] . "' AND projekt='" . $projektid . "' LIMIT 1"); + }else{ + $positionid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='" . $xmldata['artikelliste']['position'][$i]['nummer'] . "' LIMIT 1"); + } + }elseif($doctype === 'bestellung' && !empty($xmldata['artikelliste']['position'][$i]['bestellnummer'])) { + $positionid = $this->app->DB->Select(sprintf( + 'SELECT artikel FROM einkaufspreise WHERE adresse = %d AND bestellnummer = \'%s\'', + $adresse,$this->app->DB->real_escape_string($xmldata['artikelliste']['position'][$i]['bestellnummer']) + ) + ); + } + + $xmldata['artikelliste']['position'][$i]['menge'] = str_replace(',','.',$xmldata['artikelliste']['position'][$i]['menge']); + + if($xmldata['artikelliste']['position'][$i]['waehrung']=='' || is_array($xmldata['artikelliste']['position'][$i]['waehrung'])){ + $xmldata['artikelliste']['position'][$i]['waehrung'] = 'EUR'; + } + + if($doctype === 'bestellung'){ + $bezeichnungcol = 'bezeichnunglieferant'; + }else{ + $bezeichnungcol = 'bezeichnung'; + } + + if($positionid <= 0) + { + //TODO den Artikel gibt es in der datenbank nicht! + if($doctype === 'bestellung' && empty($xmldata['artikelliste']['position'][$i]['bezeichnung']) && !empty($xmldata['artikelliste']['position'][$i]['bezeichnunglieferant'])) + { + $felder['name_de'] = $xmldata['artikelliste']['position'][$i]['bezeichnunglieferant']; + }else{ + $felder['name_de'] = $xmldata['artikelliste']['position'][$i]['bezeichnung']; + } + $felder['anabregs_text'] = $xmldata['artikelliste']['position'][$i]['beschreibung']; + if($doctype === 'bestellung' && empty($xmldata['artikelliste']['position'][$i]['nummer']) && !empty($xmldata['artikelliste']['position'][$i]['bestellnummer'])){ + $felder['nummer'] = $xmldata['artikelliste']['position'][$i]['bestellnummer']; + }else{ + $felder['nummer'] = $xmldata['artikelliste']['position'][$i]['nummer']; + } + $felder['lagerartikel'] = 1; + if($projektid > 0){ + $felder['projekt'] = $projektid; + } + else{ + $felder['projekt'] = $this->app->erp->GetStandardProjekt(); + } + + $positionid = $this->app->erp->AddArtikel($felder); + $tmpartikelid = $positionid; + } else { + $xmldata['artikelliste']['position'][$i]['artikel'] = $positionid; + $tmpartikelid = $positionid; + // wenn key == nummer alles laden und kopieren wenn felder leer + if($doctype === 'bestellung' && !empty($xmldata['artikelliste']['position'][$i]['nummer']) && empty($xmldata['artikelliste']['position'][$i]['bestellnummer'])) + { + $xmldata['artikelliste']['position'][$i]['bestellnummer'] = $xmldata['artikelliste']['position'][$i]['nummer']; + } + if($doctype === 'bestellung' && !empty($xmldata['artikelliste']['position'][$i]['bezeichnung']) && empty($xmldata['artikelliste']['position'][$i]['bezeichnunglieferant'])) + { + $xmldata['artikelliste']['position'][$i]['bezeichnunglieferant'] = $xmldata['artikelliste']['position'][$i]['bezeichnung']; + } + if($xmldata['artikelliste']['position'][$i][$bezeichnungcol]==''){ + $xmldata['artikelliste']['position'][$i][$bezeichnungcol] = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='" . $positionid . "' LIMIT 1"); + } + + if($xmldata['artikelliste']['position'][$i][$bezeichnungcol]==''){ + $xmldata['artikelliste']['position'][$i][$bezeichnungcol] = $this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='" . $positionid . "' LIMIT 1"); + } + + if($xmldata['artikelliste']['position'][$i]['preis']==''){ + if($doctype === 'bestellung'){ + $originalwaehrung = null; + $originalpreis = null; + $xmldata['artikelliste']['position'][$i]['preis'] = $this->app->erp->GetEinkaufspreisWaehrung($positionid, $xmldata['artikelliste']['position'][$i]['menge'], $xmldata['artikelliste']['position'][$i]['waehrung'], $originalwaehrung, $originalpreis, $adresse); + }else{ + $xmldata['artikelliste']['position'][$i]['preis'] = $this->app->erp->GetVerkaufspreis($positionid, $xmldata['artikelliste']['position'][$i]['menge'], + $adresse, $xmldata['artikelliste']['position'][$i]['waehrung']); + } + } + } + + $this->app->DB->Insert("INSERT INTO $doctype"."_position (id,$doctype,sort,artikel) VALUES ('','".$id."','".($i+1)."','".$positionid."')"); + $positionid= $this->app->DB->GetInsertID(); + $this->app->erp->RunHook('beleg_afterinsertposition', 5, $doctype,$id,$tmpartikelid,$xmldata['artikelliste']['position'][$i]['menge'],$positionid); + + // anpassen der felder + $posArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM `%s` WHERE id = %d LIMIT 1', + $doctype.'_position', $positionid + ) + ); + $posKeys = array_keys($posArr); + foreach($xmldata['artikelliste']['position'][$i] as $key=>$value) + { + if(is_array($value)){ + $value=''; + } + if($key!=='id'){ + if(!in_array($key, $posKeys)) { + continue; + } + $this->app->DB->Update("UPDATE $doctype" . "_position SET $key='$value' WHERE id='$positionid' LIMIT 1"); + } + } + if($doctype === 'bestellung' && !empty($tmpartikelid) && !empty($positionid)) { + $this->app->DB->Update( + sprintf( + 'UPDATE bestellung_position AS bp + INNER JOIN artikel AS art ON bp.artikel = art.id + SET bp.bestellnummer = art.nummer + WHERE bp.bestellnummer = \'\' AND bp.id = %d + ', + (int)$positionid + ) + ); + + $this->app->DB->Update( + sprintf( + 'UPDATE bestellung_position AS bp + INNER JOIN artikel AS art ON bp.artikel = art.id + SET bp.bezeichnunglieferant = art.name_de + WHERE bp.bezeichnunglieferant = \'\' AND bp.id = %d + ', + (int)$positionid + ) + ); + } + + $artikelnummerkunde = !empty($xmldata['artikelliste']['position'][$i]['kundenartikelnummer'])?$xmldata['artikelliste']['position'][$i]['kundenartikelnummer']:$this->app->DB->real_escape_string( + $this->app->DB->Select( + "SELECT kundenartikelnummer + FROM verkaufspreise WHERE adresse='$adresse' AND artikel='$tmpartikelid' AND kundenartikelnummer!='' AND ab_menge <=". + (float)$xmldata['artikelliste']['position'][$i]['menge']." + AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') + ORDER by ab_menge DESC + LIMIT 1" + )); + + if($artikelnummerkunde == ''){ + // Anzeige Artikel Nummer von Gruppe aus Verkaufspreis + $gruppevkresult = $this->app->erp->GetVerkaufspreis($tmpartikelid, $xmldata['artikelliste']['position'][$i]['menge'], $adresse, $xmldata['artikelliste']['position'][$i]['waehrung'], $returnwaehrung, true); + if($gruppevkresult['kundenartikelnummer'] != ''){ + $artikelnummerkunde = $gruppevkresult['kundenartikelnummer']; + } + } + + if(!empty($artikelnummerkunde)) { + $this->app->DB->Update( + sprintf( + "UPDATE `%s` SET artikelnummerkunde = '%s' WHERE id = %d ", + $doctype.'_position', + $this->app->DB->real_escape_string($artikelnummerkunde), + $positionid + ) + ); + } + } + $_funktion = ucfirst($doctype).'Neuberechnen'; + if(method_exists($this->app->erp, $_funktion)){ + $this->app->erp->$_funktion($id); + } + + $xmldata['belegnr'] = $this->app->DB->Select("SELECT belegnr FROM $doctype WHERE id='".$id."' LIMIT 1"); + if(!empty($xmldata['dateien']) && is_array($xmldata['dateien'])) + { + $this->AddFiles($xmldata['dateien'], $doctype, $id); + } + if($intern) { + return $id; + } + $this->XMLResponse(1,"$id".$xmldata['belegnr'].''); + $this->app->ExitXentral(); + } + + /** + * Create Files from XML + * @param array $files Array of files + * @param string $doctype + * @param int $doctypeid + */ + protected function AddFiles($files, $doctype, $doctypeid) + { + if(empty($doctype) || empty($doctypeid) || empty($files)) + { + return; + } + foreach($files as $file) + { + if(empty($file['dateiname'])) + { + continue; + } + + $isfile = false; + $data = null; + if(is_file($file['dateiname'])){ + $type = mime_content_type(basename($file['dateiname'])); + if($type != 'text/x-php' && $type != 'text/php' && $type != 'application/php' && $type != 'application/x-php' && $type != 'application/x-httpd-php' && $type != 'application/x-httpd-php-source'){ + if(empty($file['dateiinhalt'])){ + $data = file_get_contents($file['dateiname']); + //$singledatei->dateiinhalt = base64_encode($dateiinhalt); + $isfile = true; + } + }else{ + $file['dateiinhalt'] = ''; + } + } + if(empty($data)) + { + if(empty($file['dateiinhalt'])) + { + $data = ''; + }else{ + $data = base64_decode($file['dateiinhalt']); + } + } + if(empty($data)) + { + continue; + } + if($isfile){ + $name = $this->app->erp->GetTmp().basename($file['dateiname']); + }else{ + $name = $this->app->erp->GetTmp().$file['dateiname']; + } + + file_put_contents($name, $data); + + $pfad = $this->app->Conf->WFuserdata; + $pfad = rtrim($pfad); + $pfad .= '/dms/'; + + if(!file_exists($pfad) && !mkdir($pfad, 0777, true) && !is_dir($pfad)) + { + $this->app->erp->LogFile($pfad.' konnte nicht erstellt werden'); + } + + $speicherpfad = $pfad.$this->app->Conf->WFdbname; + + if(!file_exists($speicherpfad) && !mkdir($speicherpfad, 0777, true) && + !is_dir($speicherpfad)) + { + $this->app->erp->LogFile($speicherpfad.' konnte nicht erstellt werden'); + } + + $fileid = $this->app->erp->CreateDatei($file['dateiname'], !empty($file['titel'])?$file['titel']:$file['dateiname'], !empty($file['beschreibung'])?(string)$file['beschreibung']:'', '', $name, '',true,$speicherpfad); + $subjekt = !empty($file['subjekt'])?(string)$file['subjekt']:'Sonstige'; + if($doctype == 'adresse'){ + $doctype = 'Adressen'; + } + $this->app->erp->AddDateiStichwort($fileid, $subjekt, $doctype, $doctypeid); + } + } + + function ApiAngebotGet($intern = false, $id = null) + { + return $this->ApiBelegGet($intern, $id, 'angebot'); + } + + function ApiAuftragGet($intern = false, $id = null, $doctype = 'auftrag') + { + return $this->ApiBelegGet($intern, $id, 'auftrag'); + } + + + + + function ApiBelegGet($intern = false, $id = null, $doctype = 'auftrag') + { + if(!$id)$id = $this->app->Secure->GetGET("id"); + $belegnr = $this->app->Secure->GetGET("belegnr"); + $projekt= $this->app->Secure->GetGET("projekt"); + + $xmldata = $this->XMLPost(); + if(is_array($xmldata) && !empty($xmldata)){ + $id = $xmldata['id']; + $belegnr = $xmldata['belegnr']; + $projekt= $xmldata['projekt']; + } + if($belegnr!="") + { + if($projekt!="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE belegnr='$belegnr' AND projekt='$projekt' LIMIT 1"); + } else { + $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE belegnr='$belegnr' LIMIT 1"); + } + } + + //check + $id = $this->app->DB->Select("SELECT id FROM $doctype WHERE id='$id' LIMIT 1"); + + if($id > 0) + { + if($intern) { + return $this->app->erp->XMLAuftrag($id, $doctype); + } + $this->XMLResponse(1,$this->app->erp->XMLAuftrag($id, $doctype)); + $this->app->ExitXentral(); + } + + if($intern) { + return false; + } + $this->XMLResponse(5, "".ucfirst($doctype)." nicht gefunden"); + + $this->app->ExitXentral(); + } + + function ApiGutschriftGet($intern = false, $id = null) + { + return $this->ApiBelegGet($intern, $id, 'gutschrift'); + } + + function ApiGutschriftEdit($intern=false,$id="") + { + return $this->ApiBelegEdit($intern, $id, 'gutschrift'); + } + + function ApiGutschriftCreate($intern = false) + { + return $this->ApiBelegCreate($intern, 'gutschrift'); + } + + function ApiLieferscheinGet($intern = false, $id = null) + { + return $this->ApiBelegGet($intern, $id, 'lieferschein'); + } + + function ApiLieferscheinEdit($intern=false,$id="") + { + return $this->ApiBelegEdit($intern, $id, 'lieferschein'); + } + + function ApiLieferscheinCreate($intern = false) + { + return $this->ApiBelegCreate($intern, 'lieferschein'); + } + + function ApiRetoureGet($intern = false, $id = null) + { + return $this->ApiBelegGet($intern, $id, 'retoure'); + } + + function ApiRetoureEdit($intern=false,$id="") + { + return $this->ApiBelegEdit($intern, $id, 'retoure'); + } + + function ApiRetoureCreate($intern = false) + { + return $this->ApiBelegCreate($intern, 'retoure'); + } + + function ApiRechnungGet($intern = false, $id = null) + { + return $this->ApiBelegGet($intern, $id, 'rechnung'); + } + + function ApiRechnungEdit($intern=false,$id="") + { + return $this->ApiBelegEdit($intern, $id, 'rechnung'); + } + + function ApiRechnungCreate($intern = false) + { + return $this->ApiBelegCreate($intern, 'rechnung'); + } + + function ApiBestellungGet($intern = false, $id = null) + { + return $this->ApiBelegGet($intern, $id, 'bestellung'); + } + + function ApiBestellungEdit($intern=false,$id="") + { + return $this->ApiBelegEdit($intern, $id, 'bestellung'); + } + + function ApiBestellungCreate($intern = false) + { + return $this->ApiBelegCreate($intern, 'bestellung'); + } + + + function ApiArtikelCreate($internal = false) + { + $xmldata = $this->XMLPost(); + // anlegen der adresse + $felder = array(); + if($xmldata['name_de']!="" && !is_array($xmldata['name_de'])) { + $id = $this->app->erp->AddArtikel($felder); + } else { + if ($internal) { + return false; + } + $this->XMLResponse(5); + } + + //kundennummer=1 bedeutet gleiche Rolle Kunde anlegen + if($xmldata['projekt']!="" && !is_array($xmldata['projekt'])){ + $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['projekt']."' LIMIT 1"); + if(empty($projektId)){ + $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE id='".(int)$xmldata['projekt']."' LIMIT 1"); + } + $xmldata['projekt'] = $projektId; + }else{ + $xmldata['projekt'] = $this->app->erp->GetStandardProjekt(); + } + + if(strtoupper($xmldata['nummer'])=="NEW" || strtoupper($xmldata['nummer'])=="NEU" || $xmldata['nummer']=="") + $xmldata['nummer'] = $this->app->erp->GetNextArtikelnummer($xmldata['typ'],1,$xmldata['projekt']); + + if($xmldata['lager_platz']!="" && !is_array($xmldata['lager_platz'])) + { + $lagerid = $this->app->DB->Select("SELECT MIN(id) FROM lager WHERE geloescht!='1'"); + if($lagerid<=0) + { + $this->app->DB->Insert("INSERT INTO lager (id,bezeichnung,firma) VALUES ('','Hauptlager',1)"); + $lagerid = $this->app->DB->GetInsertID(); + } + $xmldata['lager_platz'] = $this->app->erp->CreateLagerplatz($lagerid,$xmldata['lager_platz'],$firma="1"); + + if($xmldata['lager_menge'] > 0) + { + $menge = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$id' AND lager_platz='".$xmldata['lager_platz']."'"); + if($menge != $xmldata['lager_menge']) + { + $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE artikel='$id' AND lager_platz='".$xmldata['lager_platz']."'"); + $this->app->erp->LagerEinlagern($id,$xmldata['lager_menge'],$xmldata['lager_platz'],$xmldata['projekt'],"XML Importtool Anpassung"); + } + } + $xmldata['lagerartikel']=1; + } + + if($xmldata['aktiv']=="1") $xmldata['inaktiv']=0; + if($xmldata['aktiv']=="0"|| (array_key_exists('aktiv', $xmldata) && $xmldata['aktiv']=="")) $xmldata['inaktiv']=1; + + if($xmldata['inaktiv']=="1") { + $xmldata['intern_gesperrtgrund']="Artikel inaktiv"; + $xmldata['intern_gesperrt']="1"; + } + + if($xmldata['variante_von_nummer']!="" && !is_array($xmldata['variante_von_nummer'])) { + // pruefen ob es einen echte id ist + $xmldata['variante_von'] = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$xmldata['variante_von_nummer']."' AND nummer!='' LIMIT 1"); + if($xmldata['variante_von'] > 0) + $xmldata['variante']=1; + } + + if(!empty($xmldata['typ_ext']))$typ_ext = (int)$xmldata['typ_ext']; + if(isset($typ_ext) && $typ_ext)$typ_ext = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$typ_ext' LIMIT 1"); + if(isset($typ_ext) && $typ_ext) + { + $xmldata['typ'] = $typ_ext.'_kat'; + unset($xmldata['typ_ext']); + }elseif(isset($xmldata['typ']) && strpos($xmldata['typ'],'_kat') && !empty($xmldata['artikelkategorie'])) + { + $kategorie = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung = '".$this->app->DB->real_escape_string($xmldata['artikelkategorie'])."' LIMIT 1"); + if($kategorie) + { + $xmldata['typ'] = $kategorie.'_kat'; + unset($xmldata['artikelkategorie']); + } + } + + $this->app->DB->Update("UPDATE artikel SET logdatei=now() WHERE id='$id' LIMIT 1"); + + foreach($xmldata as $key=>$value) + { + if(is_array($value))$value=""; + if(is_array($value))$value=""; + if($key=="beschreibung_de") $value = html_entity_decode($value); + if($key=="beschreibung_en") $value = html_entity_decode($value); + if($key=="uebersicht_de") $value = html_entity_decode($value); + if($key=="uebersicht_en") $value = html_entity_decode($value); + if($key=="links_de") $value = html_entity_decode($value); + if($key=="links_en") $value = html_entity_decode($value); + if($key=="startseite_de") $value = html_entity_decode($value); + if($key=="startseite_en") $value = html_entity_decode($value); + if($key=="katalogtext_de") $value = html_entity_decode($value); + if($key=="katalogtext_de") $value = html_entity_decode($value); + if($key=="internerkommentar") $value = strip_tags(html_entity_decode($value)); + + + if($key!="id") + $this->app->DB->Update("UPDATE artikel SET $key='$value' WHERE id='$id' LIMIT 1"); + } + // alle positionen der reihe nach + if($xmldata['stueckliste_artikel']['artikel']['menge'] > 0) + { + $tmp = $xmldata['stueckliste_artikel']['artikel']; + $xmldata['stueckliste_artikel']['artikel']= null; + $xmldata['stueckliste_artikel']['artikel'][0] = $tmp; + } + + $cliste = isset($xmldata['stueckliste_artikel']['artikel'])?count($xmldata['stueckliste_artikel']['artikel']):0; + for($i=0;$i<$cliste;$i++) + { + //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); + $artikel = $id; + $menge = $xmldata['stueckliste_artikel']['artikel'][$i]['menge']; + $xmldata['stueckliste_artikel']['artikel'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['stueckliste_artikel']['artikel'][$i]['projekt']."' LIMIT 1"); + + if($xmldata['stueckliste_artikel']['artikel'][$i]['projekt']!="" && !is_array($xmldata['stueckliste_artikel']['artikel'][$i]['projekt'])) + $stuecklisteartikel = $this->app->DB->Select("SELECT id FROM adresse WHERE nummer='".$xmldata['stueckliste_artikel']['artikel'][$i]['nummer']."' AND projekt='".$xmldata['stueckliste_artikel']['artikel'][$i]['projekt']."' LIMIT 1"); + else + $stuecklisteartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$xmldata['stueckliste_artikel']['artikel'][$i]['nummer']."' LIMIT 1"); + + $this->app->DB->Insert("INSERT INTO stueckliste (id,sort,artikel,stuecklistevonartikel,menge) VALUES ('','".($i+1)."','$stuecklisteartikel','$artikel','$menge')"); + } + + // eiinkaufspreise + if($xmldata['einkaufspreise']['staffelpreis']['ab_menge'] > 0 || $xmldata['einkaufspreise']['staffelpreis']['preis'] > 0) + { + $tmp = $xmldata['einkaufspreise']['staffelpreis']; + $xmldata['einkaufspreise']['staffelpreis']= null; + $xmldata['einkaufspreise']['staffelpreis'][0] = $tmp; + } + + $cliste = isset($xmldata['einkaufspreise']['staffelpreis'])?count($xmldata['einkaufspreise']['staffelpreis']):0; + for($i=0;$i<$cliste;$i++) + { + //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); + $artikel = $id; + $abmenge = $xmldata['einkaufspreise']['staffelpreis'][$i]['ab_menge']; + $xmldata['einkaufspreise']['staffelpreis'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); + + if($xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['projekt'])) + { + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' + AND lieferantennummer!='' AND projekt='".$xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); + + } + else + { + if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer'])) + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' + AND lieferantennummer!='' LIMIT 1"); + + } + + if($adresse <=0) + { + if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname'])) + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE name='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']."' AND name!='' LIMIT 1"); + + } + + if($adresse <=0) + { + if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']=="") + $xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']="Lieferant"; + + $adresse = $this->app->erp->CreateAdresse($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname'],$firma="1"); + + //wenn lieferanennummer vorhanden dann diese verwenden + if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer'])) + $this->app->DB->Update("UPDATE adresse SET lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' WHERE id='$adresse' LIMIT 1"); + + $this->app->erp->AddRolleZuAdresse($adresse, "Lieferant", "von", "Projekt", $xmldata['projekt'] ); + } + + + $bestellnummer = $xmldata['einkaufspreise']['staffelpreis'][$i]['bestellnummer']; + $bezeichnunglieferant = $xmldata['einkaufspreise']['staffelpreis'][$i]['bezeichnunglieferant']; + if(is_array($bestellnummer))$bestellnummer=""; + + if($bezeichnunglieferant=="") + $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); + if(is_array($bezeichnunglieferant) || $bezeichnunglieferant=="" )$bezeichnunglieferant=$xmldata['name_de']; + + $preis = str_replace(',','.',$xmldata['einkaufspreise']['staffelpreis'][$i]['preis']); + $waehrung = $xmldata['einkaufspreise']['staffelpreis'][$i]['waehrung']; + if(is_array($waehrung) || $waehrung=="")$waehrung="EUR"; + + $this->app->erp->AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); + } + + + if($xmldata['verkaufspreise']['staffelpreis']['ab_menge'] > 0) + { + $tmp = $xmldata['verkaufspreise']['staffelpreis']; + $xmldata['verkaufspreise']['staffelpreis']= null; + $xmldata['verkaufspreise']['staffelpreis'][0] = $tmp; + } + // alle positionen der reihe nach + $cstaffelpreise = isset($xmldata['verkaufspreise']['staffelpreis'])?count($xmldata['verkaufspreise']['staffelpreis']):0; + for($i=0;$i<$cstaffelpreise;$i++) + { + $artikel = $id; + $abmenge = $xmldata['verkaufspreise']['staffelpreis'][$i]['ab_menge']; + $xmldata['verkaufspreise']['staffelpreis'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); + + + if($xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']!="" && !is_array($xmldata['verkaufspreise']['staffelpreis'][$i]['projekt'])) + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']."' AND projekt='".$xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); + else + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']."' LIMIT 1"); + + if($xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']=="") + $adresse = 0; + else { + // kunde gibt es nicht + if($adresse <=0) + continue; + } + + if($xmldata['verkaufspreise']['staffelpreis'][$i]['gruppe']>0) + $gruppe = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='".$xmldata['verkaufspreise']['staffelpreis'][$i]['gruppe']."' LIMIT 1"); + else $gruppe = 0; + + $preis = str_replace(',','.',$xmldata['verkaufspreise']['staffelpreis'][$i]['preis']); + $waehrung = $xmldata['verkaufspreise']['staffelpreis'][$i]['waehrung']; + if(is_array($waehrung) || is_array($waehrung)) $waehrung = "EUR"; + + + //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); + if($gruppe > 0) + $this->app->erp->AddVerkaufspreisGruppe($artikel,$abmenge,$gruppe,$preis,$waehrung); + else + $this->app->erp->AddVerkaufspreis($artikel,$abmenge,$adresse,$preis,$waehrung); + } + + $xmldata['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1"); + if($internal) { + return $xmldata['nummer']; + } + + $this->XMLResponse(1,"$id".$xmldata['nummer'].""); + $this->app->ExitXentral(); + } + + + function ApiArtikelEdit($intern = false) + { + $id = $this->app->Secure->GetGET("id"); + $nummer = $this->app->Secure->GetGET("nummer"); + $projekt = $this->app->Secure->GetGET("projekt"); + $xmldata = $this->XMLPost(); + if($nummer=="" && !empty($xmldata['nummer'])) + $nummer = $xmldata['nummer']; + + if(!empty($xmldata['id_ext']))$id_ext = (int)$xmldata['id_ext']; + if(!empty($xmldata['typ_ext']))$typ_ext = (int)$xmldata['typ_ext']; + if(isset($id_ext) && $id_ext)$id_ext = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht != 1 AND id = '$id_ext' LIMIT 1"); + if(isset($typ_ext) && $typ_ext)$typ_ext = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$typ_ext' LIMIT 1"); + if(isset($typ_ext) && $typ_ext) + { + $xmldata['typ'] = $typ_ext.'_kat'; + unset($xmldata['typ_ext']); + }elseif(isset($xmldata['typ']) && strpos($xmldata['typ'],'_kat') && !empty($xmldata['artikelkategorie'])) + { + $kategorie = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung = '".$this->app->DB->real_escape_string($xmldata['artikelkategorie'])."' LIMIT 1"); + if($kategorie) + { + $xmldata['typ'] = $kategorie.'_kat'; + unset($xmldata['artikelkategorie']); + } + } + if(isset($id_ext) && $id_ext) + { + $id = $id_ext; + }else{ + if($nummer!="") + { + if($projekt!="") + { + $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + if(empty($projektId)){ + $projektId = $this->app->DB->Select("SELECT id FROM projekt WHERE id='".(int)$projekt."' LIMIT 1"); + } + $projekt = $projektId; + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND projekt='$projekt' LIMIT 1"); + } else { + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' LIMIT 1"); + } + } + } + + // Key gibt es nicht + if($id <= 0) { + if ($intern == true) { + return false; + } + $this->XMLResponse(5); + } + + //kundennummer=1 bedeutet gleiche Rolle Kunde anlegen + if($xmldata['projekt']!="" && !is_array($xmldata['projekt'])) + $xmldata['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['projekt']."' LIMIT 1"); + + + // TODO wenn juststueckliste ist es nie ein lager artikel + if($xmldata['juststueckliste']=="1") + { + $xmldata['lagerartikel']=0; + $xmldata['lager_platz']=""; + $xmldata['lager_menge'] = 0; + } + + + if($xmldata['lager_platz']!="" && !is_array($xmldata['lager_platz'])) + { + $lagerid = $this->app->DB->Select("SELECT MIN(id) FROM lager WHERE geloescht!='1'"); + if($lagerid<=0) + { + $this->app->DB->Insert("INSERT INTO lager (id,bezeichnung,firma) VALUES ('','Hauptlager',1)"); + $lagerid = $this->app->DB->GetInsertID(); + } + + $xmldata['lager_platz'] = $this->app->erp->CreateLagerplatz($lagerid,$xmldata['lager_platz'],$firma="1"); + if($xmldata['lager_menge'] > 0) + { + $menge = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$id' AND lager_platz='".$xmldata['lager_platz']."'"); + if($menge != $xmldata['lager_menge']) + { + $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE artikel='$id' AND lager_platz='".$xmldata['lager_platz']."'"); + $this->app->erp->LagerEinlagern($id,$xmldata['lager_menge'],$xmldata['lager_platz'],$xmldata['projekt'],"XML Importtool Anpassung"); + } + } + $xmldata['lagerartikel']=1; + } + + if($xmldata['aktiv']=="1") $xmldata['inaktiv']=0; + if($xmldata['aktiv']=="0"|| (array_key_exists('aktiv', $xmldata) && $xmldata['aktiv']=="")) $xmldata['inaktiv']=1; + + if($xmldata['inaktiv']=="1") { + $xmldata['intern_gesperrtgrund']="Artikel inaktiv"; + $xmldata['intern_gesperrt']="1"; + } + + if($xmldata['variante_von_nummer']!="" && !is_array($xmldata['variante_von_nummer'])) { + // pruefen ob es einen echte id ist + $xmldata['variante_von'] = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$xmldata['variante_von_nummer']."' AND nummer!='' LIMIT 1"); + if($xmldata['variante_von'] > 0) + $xmldata['variante']=1; + } + + $this->app->DB->Update("UPDATE artikel SET logdatei=now() WHERE id='$id' LIMIT 1"); + + foreach($xmldata as $key=>$value) + { + if(is_array($value))$value=""; + if($key=="beschreibung_de") $value = html_entity_decode($value); + if($key=="beschreibung_en") $value = html_entity_decode($value); + if($key=="uebersicht_de") $value = html_entity_decode($value); + if($key=="uebersicht_en") $value = html_entity_decode($value); + if($key=="links_de") $value = html_entity_decode($value); + if($key=="links_en") $value = html_entity_decode($value); + if($key=="startseite_de") $value = html_entity_decode($value); + if($key=="startseite_en") $value = html_entity_decode($value); + if($key=="katalogtext_de") $value = html_entity_decode($value); + if($key=="katalogtext_de") $value = html_entity_decode($value); + if($key=="internerkommentar") $value = strip_tags(html_entity_decode($value)); + + if($key!="id") + $this->app->DB->Update("UPDATE artikel SET $key='$value' WHERE id='$id' LIMIT 1"); + } + + if($xmldata['stueckliste_artikel']['artikel']['menge'] > 0) + { + $tmp = $xmldata['stueckliste_artikel']['artikel']; + $xmldata['stueckliste_artikel']['artikel']= NULL; + $xmldata['stueckliste_artikel']['artikel'][0] = $tmp; + } + + if(count($xmldata['stueckliste_artikel']['artikel']) > 0) + $this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel='".$id."'"); + + $cartikel = isset($xmldata['stueckliste_artikel']['artikel'])?count($xmldata['stueckliste_artikel']['artikel']):0; + for($i=0;$i<$cartikel;$i++) + { + //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); + $artikel = $id; + $menge = $xmldata['stueckliste_artikel']['artikel'][$i]['menge']; + $xmldata['stueckliste_artikel']['artikel'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['stueckliste_artikel']['artikel'][$i]['projekt']."' LIMIT 1"); + + if($xmldata['stueckliste_artikel']['artikel'][$i]['projekt']!="" && !is_array($xmldata['stueckliste_artikel']['artikel'][$i]['projekt'])) + $stuecklisteartikel = $this->app->DB->Select("SELECT id FROM adresse WHERE nummer='".$xmldata['stueckliste_artikel']['artikel'][$i]['nummer']."' AND projekt='".$xmldata['stueckliste_artikel']['artikel'][$i]['projekt']."' LIMIT 1"); + else + $stuecklisteartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$xmldata['stueckliste_artikel']['artikel'][$i]['nummer']."' LIMIT 1"); + + $this->app->DB->Insert("INSERT INTO stueckliste (id,sort,artikel,stuecklistevonartikel,menge) VALUES ('','".($i+1)."','$stuecklisteartikel','$artikel','$menge')"); + } + + if($xmldata['einkaufspreise']['staffelpreis']['ab_menge'] > 0 || $xmldata['einkaufspreise']['staffelpreis']['preis'] > 0) + { + $tmp = $xmldata['einkaufspreise']['staffelpreis']; + $xmldata['einkaufspreise']['staffelpreis']= NULL; + $xmldata['einkaufspreise']['staffelpreis'][0] = $tmp; + } + + $this->app->erp->SetzteSperreAPIArtikelPreise($id); + $cstaffelpreise = isset($xmldata['einkaufspreise']['staffelpreis'])?count($xmldata['einkaufspreise']['staffelpreis']):0; + for($i=0;$i<$cstaffelpreise;$i++) + { + //$projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); + $artikel = $id; + // Markierung fuer SPerrung aller nicht uebegebenen Preise + + $abmenge = $xmldata['einkaufspreise']['staffelpreis'][$i]['ab_menge']; + $xmldata['einkaufspreise']['staffelpreis'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); + + if($xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['projekt'])) + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' + AND projekt='".$xmldata['einkaufspreise']['staffelpreis'][$i]['projekt']."' AND lieferantennummer!='' LIMIT 1"); + else + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' + AND lieferantennummer!='' LIMIT 1"); + + if($adresse <=0) + { + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE name='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']."' AND name!='' LIMIT 1"); + } + + if($adresse <=0) + { + if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']=="") + $xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname']="Lieferant"; + + $adresse = $this->app->erp->CreateAdresse($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantname'],$firma="1"); + // wenn lieferantennummer vorhanden dann diese verwenden + if($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']!="" && !is_array($xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer'])) + $this->app->DB->Update("UPDATE adresse SET lieferantennummer='".$xmldata['einkaufspreise']['staffelpreis'][$i]['lieferantennummer']."' WHERE id='$adresse' LIMIT 1"); + + $this->app->erp->AddRolleZuAdresse($adresse, "Lieferant", "von", "Projekt", $xmldata['projekt'] ); + } + + + + $bestellnummer = $xmldata['einkaufspreise']['staffelpreis'][$i]['bestellnummer']; + $bezeichnunglieferant = $xmldata['einkaufspreise']['staffelpreis'][$i]['bezeichnunglieferant']; + if(is_array($bestellnummer))$bestellnummer=""; + + if($bezeichnunglieferant=="") + $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); + + + $preis = str_replace(',','.',$xmldata['einkaufspreise']['staffelpreis'][$i]['preis']); + $waehrung = $xmldata['einkaufspreise']['staffelpreis'][$i]['waehrung']; + if(is_array($waehrung) || $waehrung=="") + $waehrung="EUR"; + + $this->app->erp->AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); + } + + if($xmldata['verkaufspreise']['staffelpreis']['ab_menge'] > 0) + { + $tmp = $xmldata['verkaufspreise']['staffelpreis']; + $xmldata['verkaufspreise']['staffelpreis']= NULL; + $xmldata['verkaufspreise']['staffelpreis'][0] = $tmp; + } + + // alle positionen der reihe nach + $cstaffelpreise = isset($xmldata['verkaufspreise']['staffelpreis'])?count($xmldata['verkaufspreise']['staffelpreis']):0; + for($i=0;$i<$cstaffelpreise;$i++) + { + $artikel = $id; + $abmenge = $xmldata['verkaufspreise']['staffelpreis'][$i]['ab_menge']; + $xmldata['verkaufspreise']['staffelpreis'][$i]['projekt'] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); + + if($xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']!="" && !is_array($xmldata['verkaufspreise']['staffelpreis'][$i]['projekt'])) + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']."' AND projekt='".$xmldata['verkaufspreise']['staffelpreis'][$i]['projekt']."' LIMIT 1"); + else + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']."' LIMIT 1"); + + $preis = str_replace(',','.',$xmldata['verkaufspreise']['staffelpreis'][$i]['preis']); + $waehrung = $xmldata['verkaufspreise']['staffelpreis'][$i]['waehrung']; + if(is_array($waehrung) || $waehrung=="") $waehrung = "EUR"; + $kundenartikelnummer = $xmldata['verkaufspreise']['staffelpreis'][$i]['kundenartikelnummer']; + + if($xmldata['verkaufspreise']['staffelpreis'][$i]['geloescht']=="1") $geloescht = 1; + else $geloescht = 0; + + if($xmldata['verkaufspreise']['staffelpreis'][$i]['kundennummer']=="") + $adresse = 0; + else { + // kunde gibt es nicht + if($adresse <=0) + continue; + } + + // pruefe ob es diesen Preis schon gibt? wenn nicht lege einen neuen an ... + // $projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$xmldata['artikelliste']['position'][$i]['projekt']."' LIMIT 1"); + + if($xmldata['verkaufspreise']['staffelpreis'][$i]['gruppe']>0) + $gruppe = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='".$xmldata['verkaufspreise']['staffelpreis'][$i]['gruppe']."' LIMIT 1"); + else $gruppe = 0; + + if($gruppe > 0) + $this->app->erp->AddVerkaufspreisGruppe($artikel,$abmenge,$gruppe,$preis,$waehrung); + else + $this->app->erp->AddVerkaufspreis($artikel,$abmenge,$adresse,$preis,$waehrung); + + //deaktiviere alle alten preise von dem Artikel + } + $this->app->erp->EntferneSperreAPIArtikelPreise($id); + + if ($intern == true) { + return true; + } + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + + function ApiArtikelGet($intern = false, $id="") + { + if($id=="") + $id = $this->app->Secure->GetGET("id"); + $nummer = $this->app->Secure->GetGET("nummer"); + $projekt = $this->app->Secure->GetGET("projekt"); + + $xmldata = $this->XMLPost(); + + if($nummer=="") $nummer = $xmldata["nummer"]; + if($id=="") $id = $xmldata["id"]; + if($projekt=="") $projekt = $xmldata["projekt"]; + + if($nummer!="") + { + if($projekt!="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND projekt='$projekt' LIMIT 1"); + } else { + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' LIMIT 1"); + } + } + //check + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$id' LIMIT 1"); + + + if($id > 0) { + if ($intern == true) { + return $this->app->erp->XMLArtikel($id); + } + $this->XMLResponse(1, $this->app->erp->XMLArtikel($id)); + $this->app->ExitXentral(); + } + if ($intern == true) { + return false; + } + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + + function ApiBenutzerCreate() + { + $xmldata = $this->XMLPost(); + // pruefe ob es adresse gibt + $adressecheck = $this->app->DB->Select("SELECT id FROM adresse WHERE id='".$xmldata["adresse"]."' LIMIT 1"); + if($adressecheck <=0) + $this->XMLResponse(5); + + // pruefe ob es username gibt + $usercheck = $this->app->DB->Select("SELECT id FROM user WHERE username='".$xmldata["username"]."' LIMIT 1"); + if($usercheck > 0) + $this->XMLResponse(5); + + // pruefe ob ein Passwort uebertragen wird + if($xmldata["password"] == ""){ + $this->XMLResponse(5,"kein Passwort übergeben"); + } + + $felder = $xmldata; + + if($felder['type']!="admin") + { + $rechtevorlage = $felder['type']; + $felder['vorlage']=$rechtevorlage; + $felder['type']="standard"; + } + + $id = $this->app->erp->CreateBenutzer($felder); + foreach($xmldata as $key=>$value) + { + if(is_array($value))$value=""; + + if($key=="sonstiges") $value = strip_tags(html_entity_decode($value)); + if($key!="id") { + if($key=="password") { + $this->app->DB->Update("UPDATE `user` SET `passwordmd5` = MD5('$value') WHERE `id` = '$id' LIMIT 1"); + $this->app->DB->Update("UPDATE `user` SET `password` = '' WHERE `id` = '$id' LIMIT 1"); + } else { + $this->app->DB->Update("UPDATE `user` SET $key='$value' WHERE `id` = '$id' LIMIT 1"); + } + } + + } + if(empty($xmldata['passwordunenescaped']) && empty($xmldata['passwordsha512']))$this->app->DB->Update("UPDATE `user` SET salt = '', passwordsha512 = '' WHERE id = '$id' LIMIT 1"); + + $this->app->erp->AbgleichBenutzerVorlagen(); + $this->XMLResponse(1,"$id"); + $this->app->ExitXentral(); + } + + + + function ApiBenutzerEdit() + { + $xmldata = $this->XMLPost(); + if($xmldata['id'] != ''){ + $id = $xmldata['id']; + }else{ + $id = $this->app->Secure->GetGET("id"); + } + + + $usercheck = $this->app->DB->Select("SELECT id FROM `user` WHERE id='".$id."' LIMIT 1"); + // User gibt es nicht + if($usercheck <= 0) + $this->XMLResponse(5); + + $xmldata = $this->XMLPost(); + $usernamecheck = $this->app->DB->Select("SELECT id FROM `user` WHERE username='".$xmldata["username"]."' AND id!='".$id."' LIMIT 1"); + // Username hat schon jemand anders + if($usernamecheck > 0) + $this->XMLResponse(6); + + if($xmldata['type']!="admin") + { + $rechtevorlage = $xmldata['type']; + $xmldata['vorlage']=$rechtevorlage; + $xmldata['type']="standard"; + } + + foreach($xmldata as $key=>$value) + { + if(is_array($value))$value=""; + if($key=="sonstiges") $value = strip_tags(html_entity_decode($value)); + if($key!="id") + $this->app->DB->Update("UPDATE `user` SET $key='$value' WHERE id='$id' LIMIT 1"); + } + + if(empty($xmldata['passwordunenescaped']) && empty($xmldata['passwordsha512']) && !empty($xmldata['passwordmd5']))$this->app->DB->Update("UPDATE `user` SET salt = '', passwordsha512 = '' WHERE id = '$id' LIMIT 1"); + + $this->app->erp->AbgleichBenutzerVorlagen(); + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + function ApiBenutzerGet() + { + $xmldata = $this->XMLPost(); + if($xmldata['id'] != ''){ + $id = $xmldata['id']; + }else{ + $id = $this->app->Secure->GetGET("id"); + } + + + //checl + $id = $this->app->DB->Select("SELECT id FROM user WHERE id='$id' LIMIT 1"); + + if($id > 0){ + $this->XMLResponse(1, $this->app->erp->XMLBenutzer($id)); + $this->app->ExitXentral(); + } + + $this->XMLResponse(5); + + $this->app->ExitXentral(); + } + + function ApiPreiseEdit() + { + $xmldata = $this->XMLPostPlain(); + + foreach ($xmldata->xml->artikel as $artikel){ + if($artikel->id > 0) + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikel->id' LIMIT 1"); + else if ($artikel->nummer!="") + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$artikel->nummer."' LIMIT 1"); + + if($id<=0) continue; + $this->app->erp->SetzteSperreAPIArtikelPreise($id); + + foreach ($artikel->verkaufspreise as $vk) { + foreach ($vk->staffelpreis as $staffelpreis) { + + if($staffelpreis->kundennummer!="") + $staffelpreis->adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$staffelpreis->kundennummer."' LIMIT 1"); + if($staffelpreis->gruppe > 0) + $this->app->erp->AddVerkaufspreisGruppe($id,$staffelpreis->ab_menge,$staffelpreis->gruppe,$staffelpreis->preis); + else if($staffelpreis->adresse > 0) + $this->app->erp->AddVerkaufspreis($id,$staffelpreis->ab_menge,$staffelpreis->adresse,$staffelpreis->preis); + else if($staffelpreis->kundennummer=="" && $staffelpreis->adresse <= 0) + $this->app->erp->AddVerkaufspreis($id,$staffelpreis->ab_menge,0,$staffelpreis->preis); + } + } + + // test + foreach ($artikel->einkaufspreise as $ek) { + foreach ($ek->staffelpreis as $staffelpreis) { + + $lieferantadresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$staffelpreis->lieferantennummer."' AND lieferantennummer!='' LIMIT 1"); + if($lieferantadresse > 0) + { + $this->app->erp->AddEinkaufspreis($id,$staffelpreis->ab_menge,$lieferantadresse,$staffelpreis->bestellnummer,$staffelpreis->bezeichnunglieferant, + $staffelpreis->preis,$staffelpreis->waehrung); + } + } + } + + $this->app->erp->EntferneSperreAPIArtikelPreise($id); + } + + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + + function ApiSessionStart() + { + + $xmldata = $this->XMLPost(); + + $sessionid = $xmldata['sessionID']; + $userID = $xmldata['userID']; + $validSession = $xmldata['isValidSession']; + + if($validSession=="1") + $this->app->DB->Insert("INSERT INTO useronline (user_id,login,sessionid,time) VALUES ('$userID','1','$sessionid',NOW())"); + + $this->XMLResponse(1); + // Eintrag anlegen in useronline + // class.acl.php erweitern, wenn diese merkt das externer login war dann session freischalten ... + $this->app->ExitXentral(); + } + + + function ApiSessionClose() + { + $xmldata = $this->XMLPost(); + + $sessionid = $xmldata['sessionID']; + + $this->app->DB->Delete("DELETE FROM useronline WHERE sessionid='$sessionid' LIMIT 1"); + + $this->XMLResponse(1); + // loeschen aktiver login + $this->app->ExitXentral(); + } + + + function ApiAdresseKontaktCreate() + { + $id = $this->app->Secure->GetGET("id"); + $kundennummer = $this->app->Secure->GetGET("kundennummer"); + $projekt = $this->app->Secure->GetGET("projekt"); + + + $xmldata = $this->XMLPost(); + if($id=="" && $kundennummer=="") + { + if($xmldata["kundennummer"]!="" && !is_array($xmldata["kundennummer"])) + $kundennummer = $xmldata["kundennummer"]; + else + $id = $xmldata["adresse"]; + } + if($kundennummer!="") + { + if($projekt!="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' AND projekt='$projekt' LIMIT 1"); + } else { + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kundennummer' LIMIT 1"); + } + } + + // Key gibt es nicht + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$id' LIMIT 1"); + if($id <= 0){ + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + $bezeichnung = $xmldata["bezeichnung"]; + $kontakt = $xmldata["kontakt"]; + $this->app->DB->Insert("INSERT INTO adresse_kontakte (id,adresse,bezeichnung,kontakt) VALUES ('','$id','$bezeichnung','$kontakt')"); + + $id = $this->app->DB->GetInsertID(); + + $this->XMLResponse(1,"$id"); + $this->app->ExitXentral(); + } + + + function ApiAdresseKontaktEdit() + { + $id = $this->app->Secure->GetGET("id"); + if($id==''){ + $xmldata = $this->XMLPost(); + $id = $xmldata['id']; + } + $id = $this->app->DB->Select("SELECT id FROM adresse_kontakte WHERE id='$id' LIMIT 1"); + // Key gibt es nicht + if($id <= 0){ + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + $xmldata = $this->XMLPost(); + + foreach($xmldata as $key=>$value) + { + if(is_array($value)) { + $value=''; + } + if($key!='id'){ + $this->app->DB->Update("UPDATE adresse_kontakte SET $key='$value' WHERE id='$id' LIMIT 1"); + } + } + + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + function ApiAdresseKontaktList() + { + $id = (int)$this->app->Secure->GetGET("id"); + if(!$id){ + $xmldata = $this->XMLPost(); + if($xmldata['id']){ + $id = $xmldata['id']; + } + } + + + if(!$this->app->DB->Select("SELECT id FROM adresse WHERE id = '$id' AND geloescht <> 1 LIMIT 1")) + { + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + $kontakte = $this->app->DB->SelectArr("SELECT * FROM adresse_kontakte WHERE adresse = '$id' ORDER BY bezeichnung"); + if($kontakte) + { + $xmlstr = << + + +XML; + $_xmlobj = new SimpleXMLExtended($xmlstr); + $xmlobj = $_xmlobj->AddChild('kontakte',''); + $xmlobj->AddChild('anz_gesamt',(!empty($kontakte)?count($kontakte):0)); + $xmlobj->AddChild('anz_result',(!empty($kontakte)?count($kontakte):0)); + //$sxe->addAttribute('type', 'documentary'); + + foreach($kontakte as $kontakt) + { + $kobj = $xmlobj->AddChild('kontakt',''); + foreach($kontakt as $k => $v) + { + $valobj = $kobj->AddChild($k, (string)$v); + } + } + + $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + $this->XMLResponse(1,$xml); + $this->app->ExitXentral(); + } + $this->XMLResponse(8); + $this->app->ExitXentral(); + } + + function ApiAdresseKontaktGet() + { + $id = (int)$this->app->Secure->GetGET("id"); + if(!$id){ + $xmldata = $this->XMLPost(); + if($xmldata['id']){ + $id = $xmldata['id']; + } + } + + //checl + $id = $this->app->DB->Select("SELECT id FROM adresse_kontakte WHERE id='$id' LIMIT 1"); + if($id > 0){ + $this->XMLResponse(1, $this->app->erp->XMLAdresseKontakt($id)); + $this->app->ExitXentral(); + } + + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + function ApiAdresseListeGet($intern = false) + { + $xmldata = $this->XMLPost(); + $exakt = false; + $filterspalten = array('email','name','plz','ort','kundennummer','land','strasse','abteilung','unterabteilung','id'); + $limit = ''; + $_limit = 999999999; + $offset = 0; + if(isset($xmldata['limit'])) + { + $_limit = $xmldata['limit']; + if(isset($xmldata['offset'])) + { + $offset = $xmldata['offset']; + //$limit = ' LIMIT '.(int)$xmldata['offset'].', '.(int)$xmldata['limit']; + }else{ + //$limit = ' LIMIT '.(int)$xmldata['limit']; + } + } + + if(!empty($xmldata['gruppen'])) + { + if(isset($xmldata['gruppen']['kennziffer'])) + { + if(!is_array($xmldata['gruppen']['kennziffer'])) + { + $gruppen[0] = $xmldata['gruppen']['kennziffer']; + }else{ + foreach($xmldata['gruppen']['kennziffer'] as $k => $gruppe) + { + $gruppen[] = $gruppe; + } + } + } + } + + $sumjoin = ''; + $sumwhere = ''; + $sumspalten = ''; + $re = false; + $gu = false; + $be = false; + $ab = false; + $an = false; + $filterkategorie = false; + + $bvertrieb = 0; + if($xmldata && is_array($xmldata)) + { + foreach($xmldata as $key => $filter) + { + $filterescaped = ''; + if(!is_array($filter))$filterescaped = $this->app->DB->real_escape_string($filter); + switch(strtoupper($key)) + { + case 'VERTRIEB': + $bvertrieb = (int)$filter; + break; + case 'KATEGORIE': + $filterkategorie = (int)$filter; + break; + } + } + } + + if(isset($xmldata['summierung'])) + { + if(isset($xmldata['summierung']['beleg'])) + { + if(!is_array($xmldata['summierung']['beleg']) || !isset($xmldata['summierung']['beleg'][0])) + { + $belegea[0] = $xmldata['summierung']['beleg']; + }else{ + $belegea = $xmldata['summierung']['beleg']; + } + foreach($belegea as $beleg) + { + switch($beleg) + { + case 'rechnung': + if(!$re) + { + $re = true; + $sumspalten .= ', (SELECT sum(re.umsatz_netto) FROM rechnung re WHERE re.adresse = adr.id '.($bvertrieb?" AND re.vertriebid = '".$bvertrieb."' ":''); + $sumjoin .= ' LEFT JOIN rechnung re ON re.adresse = adr.id '; + $skat = ''; + if($filterkategorie)$skat = ' , (SELECT rear.id FROM rechnung re2 INNER JOIN rechnung_position rep2 ON re2.id = rep2.rechnung INNER JOIN artikel rear ON rep2.artikel = rear.id WHERE re2.adresse = adr.id AND rear.typ = \''.$filterkategorie.'_kat\' '; + //if($sumwhere != '')$sumwhere .= ' AND '; + if(isset($xmldata['status'])) + { + $sumspalten .= " AND re.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + $skat .= " AND re2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + //$sumwhere .= " (isnull(re.id) OR (re.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + }else{ + $sumspalten .= " AND re.status != 'storniert' AND re.status <> 'angelegt' "; + $skat .= " AND re2.status != 'storniert' AND re2.status <> 'angelegt' "; + //$sumwhere .= " (isnull(re.id) OR (re.status != 'storniert' AND re.status <> 'angelegt' "; + } + if(isset($xmldata['datumvon'])) + { + $sumspalten .= " AND re.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + $skat .= " AND re2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + //$sumwhere .= " AND re.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + } + if(isset($xmldata['datumbis'])) + { + $sumspalten .= " AND re.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + $skat .= " AND re2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + //$sumwhere .= " AND re.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + } + //$sumwhere .= "))"; + + $sumspalten .= ') as rechnung_umsatz_netto'; + if($filterkategorie)$skat .= ' LIMIT 1) as re_iskat '; + if($filterkategorie)$sumspalten .= $skat; + } + break; + case 'gutschrift': + if(!$gu) + { + $gu = true; + $sumspalten .= ', (SELECT sum(gu.umsatz_netto) FROM gutschrift gu WHERE gu.adresse = adr.id '.($bvertrieb?" AND gu.vertriebid = '".$bvertrieb."' ":''); + //$sumspalten .= ', sum(gu.soll) as gutschrift_soll'; + $sumjoin .= ' LEFT JOIN gutschrift gu ON gu.adresse = adr.id '; + $skat = ''; + if($filterkategorie)$skat = ' , (SELECT guar.id FROM gutschrift gu2 INNER JOIN gutschrift_position gup2 ON gu2.id = gup2.gutschrift INNER JOIN artikel guar ON gup2.artikel = guar.id WHERE gu2.adresse = adr.id AND guar.typ = \''.$filterkategorie.'_kat\' '; + //if($sumwhere != '')$sumwhere .= ' AND '; + if(isset($xmldata['status'])) + { + $sumspalten .= " AND gu.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + $skat .= " AND gu2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + //$sumwhere .= " (isnull(gu.id) OR (gu.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + }else{ + $sumspalten .= " AND gu.status != 'storniert' AND gu.status <> 'angelegt' "; + $skat .= " AND gu2.status != 'storniert' AND gu2.status <> 'angelegt' "; + //$sumwhere .= " (isnull(gu.id) OR (gu.status != 'storniert' AND gu.status <> 'angelegt' "; + } + if(isset($xmldata['datumvon'])) + { + $sumspalten .= " AND gu.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + $skat .= " AND gu2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + //$sumwhere .= " AND gu.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + } + if(isset($xmldata['datumbis'])) + { + $sumspalten .= " AND gu.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + $skat .= " AND gu2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + //$sumwhere .= " AND gu.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + } + //$sumwhere .= "))"; + $sumspalten .= ') as gutschrift_umsatz_netto'; + if($filterkategorie)$skat .= ' LIMIT 1) as gu_iskat '; + if($filterkategorie)$sumspalten .= $skat; + } + break; + case 'bestellung': + if(!$be) + { + $be = true; + //$sumspalten .= ', sum(be.gesamtsumme) as bestellung_gesamtsumme'; + $sumspalten .= ', (SELECT sum(be.gesamtsumme) FROM bestellung be WHERE be.adresse = adr.id '; + $sumjoin .= ' LEFT JOIN bestellung be ON be.adresse = adr.id '; + $skat = ''; + if($filterkategorie)$skat = ' , (SELECT bear.id FROM bestellung be2 INNER JOIN bestellung_position bep2 ON be2.id = bep2.bestellung INNER JOIN artikel bear ON bep2.artikel = bear.id WHERE be2.adresse = adr.id AND bear.typ = \''.$filterkategorie.'_kat\' '; + //if($sumwhere != '')$sumwhere .= ' AND '; + if(isset($xmldata['status'])) + { + $sumspalten .= " AND be.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + $skat .= " AND be2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + //$sumwhere .= " (isnull(be.id) OR (be.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + }else{ + $sumspalten .= " AND be.status != 'storniert' AND be.status <> 'angelegt' "; + $skat .= " AND be2.status != 'storniert' AND be2.status <> 'angelegt' "; + //$sumwhere .= " (isnull(be.id) OR (be.status != 'storniert' AND be.status <> 'angelegt' "; + } + if(isset($xmldata['datumvon'])) + { + $sumspalten .= " AND be.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + $skat .= " AND be2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + //$sumwhere .= " AND be.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + } + if(isset($xmldata['datumbis'])) + { + $sumspalten .= " AND be.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + $skat .= " AND be2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + //$sumwhere .= " AND be.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + } + //$sumwhere .= "))"; + $sumspalten .= ') as bestellung_gesamtsumme '; + if($filterkategorie)$skat .= ' LIMIT 1) as be_iskat '; + if($filterkategorie)$sumspalten .= $skat; + } + break; + case 'auftrag': + if(!$ab) + { + $ab = true; + $sumspalten .= ', (SELECT sum(ab.umsatz_netto) FROM auftrag ab WHERE ab.adresse = adr.id '.($bvertrieb?" AND re.vertriebid = '".$bvertrieb."' ":''); + //$sumspalten .= ', sum(ab.gesamtsumme) as auftrag_gesamtsumme'; + $sumjoin .= ' LEFT JOIN auftrag ab ON ab.adresse = adr.id '; + $skat = ''; + if($filterkategorie)$skat = ' , (SELECT abar.id FROM auftrag ab2 INNER JOIN auftrag_position abp2 ON ab2.id = abp2.auftrag INNER JOIN artikel abar ON abp2.artikel = abar.id WHERE ab2.adresse = adr.id AND abar.typ = \''.$filterkategorie.'_kat\' '; + //if($sumwhere != '')$sumwhere .= ' AND '; + if(isset($xmldata['status'])) + { + $sumspalten .= " AND ab.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + $skat .= " AND ab2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + //$sumwhere .= " (isnull(ab.id) OR (ab.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + }else{ + $sumspalten .= " AND ab.status != 'storniert' AND ab.status <> 'angelegt' "; + $skat .= " AND ab2.status != 'storniert' AND ab2.status <> 'angelegt' "; + //$sumwhere .= " (isnull(ab.id) OR (ab.status != 'storniert' AND ab.status <> 'angelegt' "; + } + if(isset($xmldata['datumvon'])) + { + $sumspalten .= " AND ab.datum <= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + $skat .= " AND ab2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + //$sumwhere .= " AND ab.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + } + if(isset($xmldata['datumbis'])) + { + $sumspalten .= " AND ab.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + $skat .= " AND ab2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + //$sumwhere .= " AND ab.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + } + //$sumwhere .= "))"; + $sumspalten .= ') as auftrag_umsatz_netto '; + if($filterkategorie)$skat .= ' LIMIT 1) as ab_iskat '; + if($filterkategorie)$sumspalten .= $skat; + } + break; + case 'angebot': + if(!$an) + { + $an = true; + $sumspalten .= ', (SELECT sum(an.umsatz_netto) FROM angebot an WHERE an.adresse = adr.id '.($bvertrieb?" AND an.vertriebid = '".$bvertrieb."' ":''); + //$sumspalten .= ', sum(an.gesamtsumme) as angebot_gesamtsumme'; + $sumjoin .= ' LEFT JOIN angebot an ON an.adresse = adr.id '; + $skat = ''; + if($filterkategorie)$skat = ' , (SELECT anar.id FROM angebot an2 INNER JOIN angebot_position an2 ON an2.id = anp2.auftrag INNER JOIN artikel anar ON anp2.artikel = anar.id WHERE an2.adresse = adr.id AND anar.typ = \''.$filterkategorie.'_kat\' '; + //if($sumwhere != '')$sumwhere .= ' AND '; + if(isset($xmldata['status'])) + { + //$sumwhere .= " (isnull(an.id) OR (an.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + $sumspalten .= " AND an.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + $skat .= " AND an2.status like '".$this->app->DB->real_escape_string($xmldata['status'])."' "; + }else{ + //$sumwhere .= " (isnull(an.id) OR (an.status != 'storniert' AND an.status <> 'angelegt' "; + $sumspalten .= " AND an.status != 'storniert' AND an.status <> 'angelegt' "; + $skat .= " AND an2.status != 'storniert' AND an2.status <> 'angelegt' "; + } + if(isset($xmldata['datumvon'])) + { + $sumspalten .= " AND an.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + $skat .= " AND an2.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + //$sumwhere .= " AND an.datum >= '".$this->app->DB->real_escape_string($xmldata['datumvon'])."' "; + } + if(isset($xmldata['datumbis'])) + { + $sumspalten .= " AND an.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + $skat .= " AND an2.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + //$sumwhere .= " AND an.datum <= '".$this->app->DB->real_escape_string($xmldata['datumbis'])."' "; + } + //$sumwhere .= "))"; + $sumspalten .= ') as angebot_umsatz_netto '; + if($filterkategorie)$skat .= ' LIMIT 1) as an_iskat '; + if($filterkategorie)$sumspalten .= $skat; + } + break; + } + } + /* + if($sumwhere != '') + { + + if($re) + { + $sumwherea[] = " not isnull(re.id) "; + } + if($gu) + { + $sumwherea[] = " not isnull(gu.id) "; + } + if($ab) + { + $sumwherea[] = " not isnull(ab.id) "; + } + if($an) + { + $sumwherea[] = " not isnull(an.id) "; + } + if($be) + { + $sumwherea[] = " not isnull(be.id) "; + } + + $sumwhere .= " AND ( ".implode(" OR ",$sumwherea)." ) "; + }*/ + } + } + + //if($sumwhere != '')$sumwhere = ' AND ('.$sumwhere.') '; + $sumwhere = ''; + $sumjoin = ''; + $searchmode = ' AND '; + if($xmldata && is_array($xmldata)) + { + foreach($xmldata as $key => $filter) + { + $filterescaped = ''; + if(!is_array($filter))$filterescaped = $this->app->DB->real_escape_string($filter); + switch(strtoupper($key)) + { + case 'EXAKT': + $exakt = true; + break; + case 'SEARCHMODE': + if(strtoupper($filter) == 'AND')$searchmode = ' AND '; + if(strtoupper($filter) == 'OR')$searchmode = ' OR '; + break; + case 'SEARCH': + + if(is_array($filter)) + { + if(isset($filter[0])) + { + foreach($filter as $k => $_filter) + { + if(isset($_filter['SUCHE']))$_filter['suche'] = $_filter['SUCHE']; + if(isset($_filter['FIELD']))$_filter['field'] = $_filter['FIELD']; + if(isset($_filter['EXAKT']))$_filter['exakt'] = $_filter['EXAKT']; + if(isset($_filter['suche']) && isset($_filter['field']) && in_array(strtolower($_filter['field']),$filterspalten)) + { + if(isset($_filter['exakt']) && $_filter['exakt'] == 1) + { + if(strtolower($_filter['field']) == 'id') + { + $swhere[] = " adr.".$_filter['field']." LIKE '".$this->app->DB->real_escape_string((int)($_filter['suche']))."' "; + }else + $swhere[] = " adr.".$_filter['field']." LIKE '".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."' "; + }else{ + if(strtolower($_filter['field']) == 'id') + { + $swhere[] = " adr.".$_filter['field']." LIKE '%".$this->app->DB->real_escape_string((int)($_filter['suche']))."%' "; + } + else + $swhere[] = " adr.".$_filter['field']." LIKE '%".$this->app->DB->real_escape_string(base64_decode($_filter['suche']))."%' "; + } + } + } + }else{ + if(isset($filter['SUCHE']))$filter['suche'] = $filter['SUCHE']; + if(isset($filter['FIELD']))$filter['field'] = $filter['FIELD']; + if(isset($filter['EXAKT']))$filter['exakt'] = $filter['EXAKT']; + if(isset($filter['suche']) && isset($filter['field']) && in_array(strtolower($filter['field']),$filterspalten)) + { + if(strtolower($filter['field']) == 'id') + { + if(isset($filter['exakt']) && $filter['exakt'] == 1) + { + $swhere[] = " adr.".$filter['field']." LIKE '".$this->app->DB->real_escape_string((int)($filter['suche']))."' "; + }else{ + $swhere[] = " adr.".$filter['field']." LIKE '%".$this->app->DB->real_escape_string((int)($filter['suche']))."%' "; + } + + }else{ + if(isset($filter['exakt']) && $filter['exakt'] == 1) + { + $swhere[] = " adr.".$filter['field']." LIKE '".$this->app->DB->real_escape_string(base64_decode($filter['suche']))."' "; + }else{ + $swhere[] = " adr.".$filter['field']." LIKE '%".$this->app->DB->real_escape_string(base64_decode($filter['suche']))."%' "; + } + } + } + } + }else{ + $suchbegriff = $this->app->DB->real_escape_string(base64_decode($filterescaped)); + } + + //$subwhere[] = " (adr.name like '%$filterescaped%' OR adr.plz like '%$filterescaped%' OR adr.ort like '%$filterescaped%' OR adr.kundennummer like '%$filterescaped%') "; + + break; + case 'SUCHSPALTE': + //if($filterescaped)$customsearch[] = $filterescaped; + break; + case 'VERTRIEB': + $subwhere[] = " adr.vertrieb = '".(int)$filter."' "; + break; + case 'EXT': + $filter_ext = $filter; + break; + case 'ID': + if(is_array($filter) && isset($filter[0])) + { + foreach($filter as $k => $_filter) + { + $subwhere[] = " adr.id = '".(int)$_filter."' "; + } + }else + $subwhere[] = " adr.id = '".(int)$filter."' "; + break; + } + } + } + + + if(isset($suchbegriff) || !empty($swhere)) + { + if(empty($swhere)) + { + foreach($filterspalten as $f) + { + $swhere[] = " adr.".$f." like '".($exakt?'':"%").($suchbegriff).($exakt?'':"%")."' "; + } + $subwhere[] = ' ('.implode(' '.$searchmode.' ', $swhere).') '; + }else{ + /*foreach($customsearch as $f) + { + if(in_array($f, $filterspalten))$swhere[] = " adr.".$f." like '".($exakt?'':"%").($suchbegriff).($exakt?'':"%")."' "; + }*/ + if(!empty($swhere))$subwhere[] = " (".implode(' '.$searchmode.' ', $swhere).') '; + } + } + $where = '1'; + if(!empty($subwhere))$where = implode(' '.$searchmode.' ',$subwhere); + + + $order = ''; + if(isset($xmldata['order'])){ + if(!isset($xml['order'][0])) + { + $xmldata['order'][0] = $xmldata['order']; + } + foreach($xmldata['order'] as $key => $sort) + { + $field = ''; + if(isset($sort['field'])) + { + switch(strtolower($sort['field'])) + { + case 'gruppenname': + case 'kennziffer': + if($gruppen)$field = 'gr.name'; + break; + + case 'name': + case 'plz': + case 'ort': + case 'telefon': + case 'telefax': + case 'ansprechpartner': + case 'typ': + case 'strasse': + case 'land': + case 'email': + case 'kundennummer': + case 'lieferantennummer': + $field = 'adr.'.strtolower($sort['field']); + break; + } + if(!empty($field)) + { + if(isset($sort['desc']) && $sort['desc'] == 1) + { + $field .= " DESC"; + } + if($order != '')$order .= ','; + $order .= $field; + } + } + } + } + if($order != '')$order = $order.','; + + if(isset($gruppen)) + { + $where .= " AND (gr.kennziffer = '".implode("' OR gr.kennziffer = '",$gruppen). "') AND (ar.bis = '0000-00-00' OR ar.bis >= date(now())) "; + if(isset($filter_ext)) + { + if(strtolower($filter_ext) == 'ja') + { + $where .= " AND not isnull(am.id) "; + }elseif(strtolower($filter_ext) == 'nein') + { + $where .= " AND isnull(am.id) "; + } + $sql = "SELECT adr.*, gr.kennziffer, gr.name as gruppenname,am.id_ext $sumspalten FROM adresse adr LEFT JOIN api_mapping am ON am.id_int = adr.id AND am.tabelle = 'adresse' INNER JOIN adresse_rolle ar ON adr.id = ar.adresse AND ar.objekt like 'gruppe' INNER JOIN gruppen gr ON gr.id = ar.parameter $sumjoin WHERE $where $sumwhere ORDER BY $order adr.name, adr.id $limit"; + $adressen = $this->app->DB->Query($sql); + + }else{ + $sql = "SELECT adr.*, gr.kennziffer, gr.name as gruppenname $sumspalten FROM adresse adr INNER JOIN adresse_rolle ar ON adr.id = ar.adresse AND ar.objekt like 'gruppe' INNER JOIN gruppen gr ON gr.id = ar.parameter $sumjoin WHERE $where $sumwhere ORDER BY $order adr.name, adr.id $limit"; + $adressen = $this->app->DB->Query($sql); + + } + } + else{ + if(isset($filter_ext)) + { + if(strtolower($filter_ext) == 'ja' || $filter_ext === '1' || $filter_ext === 1) + { + $where .= " AND not isnull(am.id) "; + }elseif(strtolower($filter_ext) == 'nein' || $filter_ext === '0' || $filter_ext === 0) + { + $where .= " AND isnull(am.id) "; + } + $sql = "SELECT adr.*,am.id_ext $sumspalten FROM adresse adr LEFT JOIN api_mapping am ON am.id_int = adr.id AND am.tabelle = 'adresse' $sumjoin WHERE $where $sumwhere ORDER BY $order adr.name, adr.id $limit"; + $adressen = $this->app->DB->Query($sql); + + }else{ + $sql = "SELECT adr.* $sumspalten FROM adresse adr $sumjoin WHERE $where $sumwhere ORDER BY $order adr.name, adr.id $limit"; + $adressen = $this->app->DB->Query($sql); + + } + } + error_log($sql . "\r\n", 3, "/var/www/html/debug.log"); + if($adressen) + { + +$xmlstr = << + + +XML; + $_xmlobj = new SimpleXMLExtended($xmlstr); + $xmlobj = $_xmlobj->AddChild('adressen',''); + //$sxe->addAttribute('type', 'documentary'); + + + + $xml = ''; + $anz_gesamt = 0; + $anz_result = 0; + $i = 0; + $gesamt_umsatz = 0; + $anzeige_umsatz = 0; + while($adresse = $this->app->DB->Fetch_Array($adressen)) + { + + $do = true; + if($re && $gu) + { + + if(isset($xmldata['umsatzvon'])) + { + if((float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto'] < (float)$xmldata['umsatzvon'])$do = false; + } + if(isset($xmldata['umsatzbis'])) + { + if((float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto'] > (float)$xmldata['umsatzbis'])$do = false; + } + }elseif($re) + { + if(isset($xmldata['umsatzvon'])) + { + if((float)$adresse['rechnung_umsatz_netto'] < (float)$xmldata['umsatzvon'])$do = false; + } + if(isset($xmldata['umsatzbis'])) + { + if((float)$adresse['rechnung_umsatz_netto'] > (float)$xmldata['umsatzbis'])$do = false; + } + } + if($filterkategorie && $do) + { + $do2 = false; + if($re && $adresse['re_iskat'])$do2 = true; + if($gu && $adresse['gu_iskat'])$do2 = true; + if($be && $adresse['be_iskat'])$do2 = true; + if($ab && $adresse['ab_iskat'])$do2 = true; + if($an && $adresse['an_iskat'])$do2 = true; + if(!$do2)$do = false; + } + if($do && $re && $gu) + { + $gesamt_umsatz += (float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto']; + } + if($do && $i >= $offset && $i < $offset+$_limit) + { + $anzeige_umsatz += (float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto']; + $adrobj = $xmlobj->AddChild('adresse',''); + //$xml .= ''; + $RowKeys = array_keys($adresse); + $RowValues = array_values($adresse); + $cRowKeys = (!empty($RowKeys)?count($RowKeys):0); + for($k = 1; $k < $cRowKeys;$k+=2) + { + if($RowKeys[$k] !== 're_iskat' && $RowKeys[$k] !== 'gu_iskat' && $RowKeys[$k] !== 'be_iskat' && $RowKeys[$k] !== 'ab_iskat' && $RowKeys[$k] !== 'an_iskat') + { + if($RowKeys[$k] === 'rechnung_umsatz_netto' || $RowKeys[$k] === 'gutschrift_umsatz_netto' || $RowKeys[$k] === 'bestellung_umsatz_netto' || $RowKeys[$k] === 'auftrag_umsatz_netto' || $RowKeys[$k] === 'angebot_umsatz_netto') + $RowValues[$k] = number_format((float)$this->GetPlainText($RowValues[$k]),2,'.',''); + $valobj = $adrobj->AddChild($RowKeys[$k],''); + if($this->usecdata) + { + if ((string)$this->GetPlainText($RowValues[$k]) != '')$valobj->addCData($RowValues[$k]); + }else { + if ((string)$this->GetPlainText($RowValues[$k]) != '') $valobj->value = (string)$this->app->erp->GetPlainText($RowValues[$k]); + } + } + //$xml .= '<'.$RowKeys[$k].'>'.(string)$this->app->erp->GetPlainText($RowValues[$k]).''; + } + //$xml .= ''; + $anz_result++; + } + if($do)$i++; + } + $xmlobj->AddChild('anz_gesamt',$i); + $xmlobj->AddChild('anz_result',$anz_result); + if($re && $gu) + { + $xmlobj->AddChild('anzeige_umsatz',number_format($anzeige_umsatz,2,'.','')); + $xmlobj->AddChild('gesamt_umsatz',number_format($gesamt_umsatz,2,'.','')); + } + $xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML()); + unset($_xmlobj); + + }else{ + $xml = '00'; + if($this->app->DB->error()) + { + $xml .= '' .$this->GetPlainText($this->app->DB->error()).''; + } + } + //$xml .= $xmldata; + if ($intern != false) { + return $xml; + } + $this->XMLResponse(1,$xml); + $this->app->ExitXentral(); + } + + + function ApiGruppeCreate() + { + $id = $this->app->Secure->GetGET("id"); + + $xmldata = $this->XMLPost(); + + $this->app->DB->Insert("INSERT INTO gruppen (id) VALUES ('')"); + + $id = $this->app->DB->GetInsertID(); + + $this->ApiGruppeEdit($id,true); + + $this->XMLResponse(1,"$id"); + $this->app->ExitXentral(); + } + + + function ApiGruppeEdit($id="",$internal=false) + { + $xmldata = $this->XMLPost(); + $id = $xmldata['id']; + if($id <=0) + $id = $this->app->Secure->GetGET("id"); + + $id = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='$id' LIMIT 1"); + // Key gibt es nicht + if($id <= 0) + $this->XMLResponse(5); + + $xmldata = $this->XMLPost(); + + if($xmldata['porto_preis']!="" && $xmldata['porto_artikelid']!="" && !is_array($xmldata['porto_preis'])) + { + $this->app->erp->AddVerkaufspreisGruppe($xmldata['porto_artikelid'],1,$id,$xmldata['porto_preis']); + } + + foreach($xmldata as $key=>$value) + { + if(is_array($value)) { + $value=''; + } + if($key==='internebemerkung') { + $value = html_entity_decode($value); + } + if($key!=='id'){ + $this->app->DB->Update("UPDATE gruppen SET $key='$value' WHERE id='$id' LIMIT 1"); + } + } + + if($internal){ + return $id; + } + + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + + public function ApiGruppeGet() + { + $xmldata = $this->XMLPost(); + if($xmldata['id'] == '') { + $id = $this->app->Secure->GetGET("id"); + }else{ + $id =$xmldata['id']; + } + //checl + $id = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='$id' LIMIT 1"); + + if($id > 0){ + $this->XMLResponse(1, $this->app->erp->XMLGruppe($id, $this->usecdata)); + $this->app->ExitXentral(); + } + + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + + // alte funktion + public function ApiShopimages() + { + $artikel = $this->app->Secure->GetGET("artikel"); + $number = $this->app->Secure->GetGET("number"); + $datei = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel'"); + if($number <= 0) $number = 1; + + $datei = $datei[$number-1]['datei']; + + $mimetype = mime_content_type($this->app->erp->GetDateiPfad($datei)); + // Wir werden eine PDF Datei ausgeben + header('Content-type: '.$mimetype); + echo $this->app->erp->GetDatei($datei); + $this->app->ExitXentral(); + } + + public function ApiExportVorlageGet() + { + $id = $this->app->Secure->GetGET("id"); + $projekt = $this->app->Secure->GetGET("projekt"); + $von = $this->app->Secure->GetGET("von"); + $bis = $this->app->Secure->GetGET("bis"); + + if($id!="") + { + if($projekt!="") + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); + } + } + + //check + $id = $this->app->DB->Select("SELECT id FROM exportvorlage WHERE id='$id' AND apifreigabe=1 LIMIT 1"); + + $filter['projekt']=$projekt; + $filter['von']=$von; + $filter['bis']=$bis; + + if($id > 0){ + $this->XMLResponse(1, $this->app->erp->XMLExportVorlage($id, $filter, $this->usecdata)); + $this->app->ExitXentral(); + } + + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + public function ApiBerichteGet() + { + $id = $this->app->Secure->GetGET("id"); + + $xmldata = $this->XMLPost(); + if($id=="") $id = $xmldata['id']; + + $id = $this->app->DB->Select("SELECT id FROM berichte WHERE id='$id' LIMIT 1"); + + if($id > 0){ + $this->XMLResponse(1, $this->app->erp->XMLBerichte($id, $this->usecdata)); + $this->app->ExitXentral(); + } + $this->XMLResponse(5); + $this->app->ExitXentral(); + } + + public function ApiArtikelList($intern = false) + { + $xmldata = $this->XMLPost(); + $keys = array_keys($xmldata); + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.* FROM artikel a"; + if($xmldata['kategorie'] != ''){ + $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.*,ak.bezeichnung FROM artikel a"; + $tabellenkuerzel = "a."; + $sql .= " inner join artikelkategorien ak on ak.id = SUBSTRING_INDEX(a.typ,'_',1)"; + } + $wherevorhanden = false; + $ckeys = (!empty($keys)?count($keys):0); + for($i=0; $i<$ckeys; $i++){ + if( ($keys[$i] != "order") && ($keys[$i] != "field") && ($keys[$i] != "limit") && ($keys[$i] != "offset") ){ + $this->app->DB->Select("SELECT '" . $keys[$i] . "' FROM artikel LIMIT 1"); + if ($this->app->DB->error() == '') { + if ($wherevorhanden == false) { + if($keys[$i] == 'kategorie'){ + // schauen ob mehrere kategorien + if(is_array($xmldata[$keys[$i]])){ + $sql .= " WHERE ("; + foreach($xmldata[$keys[$i]] as $katvalue){ + if(is_numeric($katvalue)){ + $sql .= " ak.id = '" . $katvalue . "' OR "; + } else { + $sql .= " ak.bezeichnung LIKE '%" . $katvalue . "%' OR "; + } + } + $sql = rtrim($sql, " OR"); + $sql .= " ) "; + + }else{ + if(is_numeric($xmldata[$keys[$i]])){ + $sql .= " WHERE ak.id = '" . $xmldata[$keys[$i]] . "' AND "; + } else { + $sql .= " WHERE ak.bezeichnung LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; + } + } + } else { + $sql .= " WHERE " . $tabellenkuerzel.$keys[$i] . " LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; + } + + $wherevorhanden = true; + } else { + if($keys[$i] === 'kategorie') { + $sql .= "ak.bezeichnung LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; + }elseif($keys[$i] === 'nummer') { + if(is_array($xmldata[$keys[$i]])) { + + } else{ + $sql .= $tabellenkuerzel . $keys[$i] . " LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; + } + } else{ + $sql .= $tabellenkuerzel.$keys[$i] . " LIKE '%" . $xmldata[$keys[$i]] . "%' AND "; + } + } + } + } + } + $sql = trim($sql); + $sql = rtrim($sql, " AND"); + + if (array_key_exists('order', $xmldata)) { + if (is_array($xmldata['order'])) { + $orderkeys = array_keys($xmldata['order']); + if (array_key_exists('field', $xmldata['order'])) { + if ($xmldata['order']['field'] != "") { + $this->app->DB->Select("SELECT " . $xmldata['order']['field'] . " FROM artikel LIMIT 1"); + if ($this->app->DB->error() == '') { + if ($xmldata['order']['desc'] == 0 || $xmldata['order']['desc'] == "") { + $sql .= " ORDER BY " . $tabellenkuerzel . $xmldata['order']['field'] . " ASC"; + } elseif ($xmldata['order']['desc'] == 1) { + $sql .= " ORDER BY " . $tabellenkuerzel . $xmldata['order']['field'] . " DESC"; + } + } + } + + } + } + + if (array_key_exists('limit', $xmldata)) { + if ($xmldata['limit'] > 0) { + if (array_key_exists('offset', $xmldata)) { + if ($xmldata['offset'] != "") { + $sql .= " LIMIT " . $xmldata['offset'] . ", " . $xmldata['limit']; + } else { + $sql .= " LIMIT " . $xmldata['limit']; + } + } else { + $sql .= " LIMIT " . $xmldata['limit']; + } + } + } + } + + $ergebnis = $this->app->DB->SelectArr($sql); + $anz_gesamt = $this->app->DB->Select("SELECT FOUND_ROWS()"); + if(!is_array($ergebnis)){ + $this->XMLResponse(1,$sql); + } + + $output = ""; + + if((!empty($ergebnis)?count($ergebnis):0)>0) + { + $output .= ""; + + $cergebnis = (!empty($ergebnis)?count($ergebnis):0); + for($i=0;$i<$cergebnis;$i++) + { + $output .= ""; + + foreach($ergebnis[$i] as $key=>$value){ + if($this->usecdata) { + $output .= "<$key>"; + }else{ + $output .= "<$key>" . htmlspecialchars($value) . ""; + } + } + $output .= ""; + } + $output .= "".$anz_gesamt.""; + $output .= "".(!empty($ergebnis)?count($ergebnis):0).""; + $output .= "".$sql.""; + $output .= ""; + } + + if($output != ""){ + if ($intern != false) { + return $output; + } + $this->XMLResponse(1, $output); + $this->app->ExitXentral(); + } + if ($intern != false) { + return false; + } + $this->XMLResponse(4); + $this->app->ExitXentral(); + } + + public function ApiArtikelStueckliste() + { + $xmldata = $this->XMLPost(); + + $keys = array_keys($xmldata); + + //$this->app->erp->LogFile(print_r($xmldata, 1)); + + $mineininserterfolgreich = false; + + if(array_key_exists('stuecklistevonartikel', $xmldata)){ + $artikelvorhanden = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$xmldata['stuecklistevonartikel']."' LIMIT 1"); + if($artikelvorhanden != ""){ + $altestueckliste = $this->app->DB->SelectArr("SELECT id FROM stueckliste WHERE stuecklistevonartikel = '$artikelvorhanden'"); + if(array_key_exists('items', $xmldata)){ + if(is_array($xmldata['items'])){ + if($xmldata['items']['item'][1] != ""){ + $stuecklistearray = $xmldata['items']['item']; + }else{ + $stuecklistearray = $xmldata['items']; + } + foreach($stuecklistearray as $key=>$value){ + if(array_key_exists('stuecklistemenge', $value)){ + $stuecklistemenge = str_replace(',', '.', $value['stuecklistemenge']); + if($stuecklistemenge > 0){ + if(array_key_exists('nummer', $value)){ + $nummervorhanden = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$value['nummer']."' LIMIT 1"); + if($nummervorhanden != ""){ + //hier optional + if(array_key_exists('stuecklisteart', $value) && !is_array($value['stuecklisteart'])){//standard et + $stuecklisteart = $value['stuecklisteart']; + if($stuecklisteart != "et" && $stuecklisteart != "it" && $stuecklisteart != "bt"){ + $stuecklisteart = "et"; + }else{ + $stuecklisteart = $value['stuecklisteart']; + } + if($stuecklisteart == ""){ + $stuecklisteart = "et"; + } + }else{ + $stuecklisteart = "et"; + } + if(array_key_exists('stuecklistealternative', $value) && !is_array($value['stuecklistealternative'])){ + $stuecklistealternative = $value['stuecklistealternative']; + if($stuecklistealternative == ""){ + $stuecklistealternative = "0"; + }else{ + $alternativevorhanden = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$stuecklistealternative' LIMIT 1"); + if($alternativevorhanden != ""){ + $stuecklistealternative = $alternativevorhanden; + }else{ + $stuecklistealternative = 0; + } + } + }else{ + $stuecklistealternative = "0"; + } + if(array_key_exists('stuecklistereferenz', $value) && !is_array($value['stuecklistereferenz'])){ + $stuecklistereferenz = $value['stuecklistereferenz']; + if($stuecklistereferenz == ""){ + $stuecklistereferenz = ""; + } + }else{ + $stuecklistereferenz = ""; + } + if(array_key_exists('stuecklistelayer', $value) && !is_array($value['stuecklistelayer'])){//standard Top + if($value['stuecklistelayer'] != "Top" && $value['$stuecklistelayer'] != "Bottom"){ + $stuecklistelayer = "Top"; + }else{ + $stuecklistelayer = $value['stuecklistelayer']; + } + if($stuecklistelayer == ""){ + $stuecklistelayer = "Top"; + } + }else{ + $stuecklistelayer = "Top"; + } + if(array_key_exists('stuecklisteplatzierung', $value) && !is_array($value['stuecklisteplatzierung'])){//standard DP + if($value['stuecklisteplatzierung'] != "DP" && $value['$stuecklisteplatzierung'] != "DNP"){ + $stuecklisteplatzierung = "DP"; + }else{ + $stuecklisteplatzierung = $value['stuecklisteplatzierung']; + } + if($stuecklisteplatzierung == ""){ + $stuecklisteplatzierung = "DP"; + } + }else{ + $stuecklisteplatzierung = "DP"; + } + if(array_key_exists('stuecklistewert', $value) && !is_array($value['stuecklistewert'])){ + $stuecklistewert = $value['stuecklistewert']; + if($stuecklistewert == ""){ + $stuecklistewert = ""; + } + }else{ + $stuecklistewert = ""; + } + if(array_key_exists('stuecklistebauform', $value) && !is_array($value['stuecklistebauform'])){ + $stuecklistebauform = $value['stuecklistebauform']; + if($stuecklistebauform == ""){ + $stuecklistebauform = ""; + } + }else{ + $stuecklistebauform = ""; + } + if(array_key_exists('stuecklistezachse', $value) && !is_array($value['stuecklistezachse'])){ + $stuecklistezachse = $value['stuecklistezachse']; + if($stuecklistezachse == ""){ + $stuecklistezachse = ""; + } + }else{ + $stuecklistezachse = ""; + } + if(array_key_exists('stuecklistexposition', $value) && !is_array($value['stuecklistexposition'])){ + $stuecklistexposition = $value['stuecklistexposition']; + if($stuecklistexposition == ""){ + $stuecklistexposition = ""; + } + }else{ + $stuecklistexposition = ""; + } + if(array_key_exists('stuecklisteyposition', $value) && !is_array($value['stuecklisteyposition'])){ + $stuecklisteyposition = $value['stuecklisteyposition']; + if($stuecklisteyposition == ""){ + $stuecklisteyposition = ""; + } + }else{ + $stuecklisteyposition = ""; + } + + $this->app->DB->Insert("INSERT INTO stueckliste (artikel, referenz, place, layer, stuecklistevonartikel, + menge, firma, wert, bauform, alternative, zachse, xpos, ypos, art) + VALUES ('$nummervorhanden', '$stuecklistereferenz', '$stuecklisteplatzierung', '$stuecklistelayer', '$artikelvorhanden', + '$stuecklistemenge', 1, '$stuecklistewert', '$stuecklistebauform', '$stuecklistealternative', '$stuecklistezachse', '$stuecklistexposition', '$stuecklisteyposition', '$stuecklisteart')"); + + if(!$this->app->DB->error()){ + $this->app->DB->Update("UPDATE artikel SET stueckliste = 1 WHERE id = '$artikelvorhanden'"); + $mineininserterfolgreich = true; + } + + }else{ + $this->XMLResponse(4); + } + } + }else{ + $this->XMLResponse(4); + } + } + } + + if($mineininserterfolgreich == true){ + foreach($altestueckliste as $key2=>$value2){ + $this->app->DB->Delete("DELETE FROM stueckliste WHERE id = '".$value2['id']."'"); + } + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + } + } + }else{ + $this->XMLResponse(4); + } + }else{ + $this->XMLResponse(4); + } + } + + + public function ApiAdresseAccountsGet() + { + $xmldata = $this->XMLPost(); + $id = $this->app->Secure->GetGET("id"); + $art = $this->app->Secure->GetGET("art"); + if($xmldata['id']!=''){ + $id = $xmldata['id']; + } + if($xmldata['art']!=''){ + $art = $xmldata['art'];} else{$art = '%%'; + } + $filter['art']=$art; + $filter['id']=$id; + if($id > 0 ) { + $this->XMLResponse(1, $this->app->erp->XMLAdresseAccounts($filter, $this->usecdata)); + } else { + $this->XMLResponse(5); + } + $this->app->ExitXentral(); + } + + public function ApiAdresseAccountCreate() + { + $xmldata = $this->XMLPost(); + + if($xmldata['adresse'] == '' || is_array($xmldata['adresse']) || $xmldata['bezeichnung'] == '' || is_array($xmldata['bezeichnung'])){ + $this->XMLResponse(5, "Adress-ID und/oder Bezeichnung fehlt"); + $this->app->ExitXentral(); + } + + $newId = $this->app->erp->CreateAccount($xmldata['adresse'],$xmldata); + $this->XMLResponse(1,"$newId"); + $this->app->ExitXentral(); + } + + public function ApiAdresseAccountEdit(){ + + $id = $this->app->Secure->GetGET("id"); + if($id==''){ + $xmldata = $this->XMLPost(); + $id = $xmldata['id']; + } + $id = $this->app->DB->Select("SELECT id FROM adresse_accounts WHERE id='$id' LIMIT 1"); + + // Key gibt es nicht + if($id <= 0){ + $this->XMLResponse(5); + } + + $xmldata = $this->XMLPost(); + + foreach($xmldata as $key=>$value) + { + if(is_array($value)) + { + $value=''; + } + if($key!=="id"){ + if($key === "gueltig_ab" || $key === "gueltig_bis"){ + if($value == "" || $value == "0000-00-00" || $value === "00.00.0000"){ + $value = '0000-00-00'; + }else{ + $value = date('Y-m-d',strtotime($value)); + } + } + $this->app->DB->Update("UPDATE adresse_accounts SET $key='$value' WHERE id='$id' LIMIT 1"); + } + } + + $this->XMLResponse(1); + $this->app->ExitXentral(); + } + + public function ApiArtikelkontingenteGet() + { + $xmldata = $this->XMLPost(); + if(is_array($xmldata) && !empty($xmldata)){ + $filter = $xmldata; + }else{ + $filter['id'] = $this->app->Secure->GetGET("id"); + $filter['projekt'] = $this->app->Secure->GetGET("projekt"); + $filter['nummer'] = $this->app->Secure->GetGET("nummer"); + $filter['von'] = $this->app->Secure->GetGET("von"); + $filter['bis'] = $this->app->Secure->GetGET("bis"); + } + + if($filter['nummer']!="" || $filter['id']!=""){ + $this->XMLResponse(1, $this->app->erp->XMLArtikelkontingente($filter, $this->usecdata)); + } + else{ + $this->XMLResponse(5); + } + $this->app->ExitXentral(); + } + + protected function getApiAccount(){ + if(!$this->apiAccount){ + $this->apiAccount = $this->apiAccountService->getApiAccountById($this->api_id); + } + + return $this->apiAccount; + } + + public function EventAPIAdd($eventname,$parameter,$module,$action,$kommentar='', $api = 0) + { + $module_call_from = isset($this->app->Secure)?$this->app->Secure->GetGET('module'):''; + + try { + $apiaktiv = $this->getApiAccount()->isActive(); + } catch (ApiAccountNotFoundException $e){ + $apiaktiv = false; + } + + + if($module_call_from !=='api') + { + $uebertragungen = $this->app->DB->SelectArr("select a.id FROM api_account a INNER JOIN uebertragungen_account u ON a.id = u.api AND a.aktiv=1 AND u.aktiv = 1 INNER JOIN uebertragungen_event_einstellungen e ON u.id = e.uebertragung_account AND e.aktiv = 1 WHERE e.eventname = '$eventname' group by a.id"); + + if($uebertragungen) + { + foreach($uebertragungen as $uebertragung) + { + $aacount = $uebertragung['id']; + if($aacount){ + $this->app->DB->Insert("INSERT INTO event_api (id,cachetime,eventname,parameter,retries,module,action,kommentar,api) + VALUES ('',NOW(),'$eventname','$parameter','0','$module','$action','$kommentar','$aacount')"); + $tmpid = $this->app->DB->GetInsertID(); + $this->EventCall($tmpid); + } + } + } + } + + if($apiaktiv === true && $module_call_from !== 'api') + { + $this->app->DB->Insert("INSERT INTO event_api (cachetime,eventname,parameter,retries,module,action,kommentar,api) + VALUES (NOW(),'$eventname','$parameter','0','$module','$action','$kommentar','$api')"); + $tmpid = $this->app->DB->GetInsertID(); + $this->EventCall($tmpid); + } else { + return false; + } + + return null; + } + + /** + * @param int $id + * + * @return bool + */ + public function EventCall($id) + { + $eventApiArr = $id <= 0?null:$this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM `event_api` WHERE `id` = %d LIMIT 1', + $id + ) + ); + + if(empty($eventApiArr)) { + return false; + } + + $eventname = $eventApiArr['eventname']; + $parameter = $eventApiArr['parameter']; + $module = $eventApiArr['module']; + $action = $eventApiArr['action']; + $api = $eventApiArr['api']; + + switch($module) + { + case "adresse": + $xml = $this->app->erp->XMLAdresse($parameter); + break; + + case "artikel": + $xml = $this->app->erp->XMLArtikel($parameter, $api); + break; + + case "auftrag": + $xml = $this->app->erp->XMLAuftrag($parameter); + break; + + case "gruppe": + $xml = $this->app->erp->XMLGruppe($parameter); + break; + + case "adresse_kontakt": + $xml = $this->app->erp->XMLAdresseKontakt($parameter); + break; + + default: + $this->app->DB->Delete("DELETE FROM event_api WHERE id='$id' LIMIT 1"); + return false; + } + + $hash = $this->generateHashFromApi($api); + //$result = $this->EventSendRequest($eventname,$xml,$hash,"&id=".$parameter); + //Hack + $result_body = null; + $result = $this->EventSendRequest($eventname,$xml,$hash,"&id=".$parameter,$result_body, $api); + switch($eventname) { + case "EventArtikelCreate": + if($api && $parameter) + { + if(isset($result_body['xml']['id']) && $result_body['xml']['id']!="") + { + $this->app->DB->Insert("INSERT INTO api_mapping (tabelle, id_int, id_ext, api, zeitstempel) VALUES ('artikel','$parameter','".$this->app->DB->real_escape_string($result_body['xml']['id'])."','$api',now())"); + } + } + break; + case "EventAuftragEdit": + //print_r($result_body); + if(isset($result_body['xml']['belegnr']) && $result_body['xml']['belegnr']!="") + { + $this->app->DB->Update("UPDATE auftrag SET belegnr='".$result_body['xml']['belegnr']."' WHERE id='".$parameter."' AND id > 0 LIMIT 1"); + $this->app->DB->Delete("DELETE FROM event_api WHERE id='$id' LIMIT 1"); + } + break; + default: + $result = true; + } + + if($result===false) { + $this->app->DB->Update("UPDATE event_api SET retries=retries+1 WHERE id='$id' LIMIT 1"); + return false; + } + $this->app->DB->Delete("DELETE FROM event_api WHERE id='$id' LIMIT 1"); + + return true; + } + + public function EventSendRequest($methodname,$xml,$hash,$parameter='',&$result_body='', $api = 0) + { + try { + $url = $this->getApiAccount()->getEventUrl(); + } catch (ApiAccountNotFoundException $e){ + return false; + } + + if($url == ''){ + return false; + } + + $xml =' + + + '.$methodname.' + + '.$xml.' + '; + + if(strpos($url,'?') === false){ + $url = $url.'?hash='.$hash.$parameter; + } else{ + $url = $url.'&hash='.$hash.$parameter; + } + if(strpos($url,'module=api') === false){ + $url .= '&module=api'; + } + $url .= '&action='.substr($methodname,5); + $data = array('xml' => $xml); + + // use key 'http' even if you send the request to https://... + $options = array( + 'http' => array( + 'header' => "Content-type: application/x-www-form-urlencoded\r\n", + 'method' => 'POST', + 'content' => http_build_query($data), + ), + ); + $context = stream_context_create($options); + $result = file_get_contents($url, false, $context); + + if($result===false) { + return false; + } + + $deXml = simplexml_load_string($result); + $deJson = json_encode($deXml); + $xml_array = json_decode($deJson,TRUE); + + $result_body = $xml_array; + if(isset($xml_array['xml']['status']['messageCode'])){ + $xml_array['xml']['status']['messageCode'] = strtolower($xml_array['xml']['status']['messageCode']); + return $xml_array['xml']['status']['messageCode'] == 0; + } + + return false; + } + + /** + * @param string $initKey + * @param string $remoteDomain + * + * @return string + */ + public function generateHashFromDomainAndKey($initKey, $remoteDomain) + { + $date = gmdate('dmY'); + + $hash = ''; + + for($i = 0; $i <= 200; $i++) { + $hash = sha1($hash . $initKey . $remoteDomain . $date); + } + + return $hash; + } + + /** + * @param int $id + * + * @return string + */ + public function generateHashFromApi($id = 0) + { + try { + $initKey = $this->getApiAccount()->getInitKey(); + $remoteDomain = $this->getApiAccount()->getRemoteDomain(); + } catch (ApiAccountNotFoundException $e){ + $initKey = ''; + $remoteDomain = ''; + } + + return $this->generateHashFromDomainAndKey($initKey, $remoteDomain); + } + + public function GetPlainText($string) + { + $string = str_replace('NONBLOCKINGZERO','',$string); + return htmlspecialchars(trim(html_entity_decode($string, ENT_QUOTES, 'UTF-8'))); + } + + + public function XMLGruppe($id, $cdata = false) + { + if($id > 0){ + $arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM gruppen WHERE id=%d LIMIT 1',$id)); + } + if(empty($arr)){ + return ''; + } + $result = ''; + foreach($arr as $key=>$value) { + if(is_array($value)){ + $value=''; + } + if($cdata && $value != '' && !is_numeric($value)) { + $result .= "<" . $key . ">"; + }else{ + $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; + } + } + return $result; + } + + public function XMLAdresseKontakt($id, $cdata = false) + { + if($id > 0){ + $address_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM adresse_kontakte WHERE id=%d LIMIT 1', $id)); + } + if(empty($address_arr)){ + return ''; + } + $result = ''; + foreach($address_arr as $key=>$value) + { + if(is_array($value)){ + $value=''; + } + if($cdata && $value != '' && !is_numeric($value)) { + $result .= "<" . $key . ">"; + }else{ + $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; + } + } + return $result; + } + + + public function XMLAdresse($id, $cdata = false) + { + if($id > 0){ + $address_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM adresse WHERE id=%d LIMIT 1',$id)); + } + if(empty($address_arr)){ + return ''; + } + $result = ''; + foreach($address_arr as $key=>$value) { + if(is_array($value)){ + $value=''; + } + if($cdata && $value != '' && !is_numeric($value)) { + $result .= "<" . $key . ">"; + }else{ + $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; + } + } + return $result; + } + + public function XMLAuftrag($id, $doctype = 'auftrag', $cdata = false) + { + if($id > 0 && !empty($doctype)){ + $order_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM `%s` WHERE id=%d LIMIT 1',$doctype,$id)); + } + if(empty($order_arr)){ + return ''; + } + $result = ''; + + foreach($order_arr as $key=>$value) + { + if(is_array($value)){ + $value=''; + } + if($cdata && $value != '' && !is_numeric($value)) { + $result .= "<" . $key . ">"; + }else{ + $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; + } + } + + if (in_array($doctype, array('gutschrift', 'rechnung'))) { + $sqlExplodiertParent = 'AND ap.explodiert_parent_artikel<=0'; + } + else if ($doctype==="bestellung") + { + $sqlExplodiertParent =''; + } + else { + $sqlExplodiertParent = 'AND ap.explodiert_parent<=0'; + } + $order_arr = $this->app->DB->SelectArr("SELECT ap.*, art.ean FROM $doctype"."_position ap LEFT JOIN artikel art ON ap.artikel = art.id WHERE ap.$doctype='$id' {$sqlExplodiertParent} ORDER by ap.sort"); + + $result .=''; + $corder_arr = !empty($order_arr)?count($order_arr):0; + for($i=0;$i<$corder_arr;$i++) + { + $result .=''; + foreach($order_arr[$i] as $key=>$value) + { + if(is_array($value)){ + $value=''; + } + if($cdata && $value != '' && !is_numeric($value)) { + $result .= "<" . $key . ">"; + }else{ + $result .= "<" . $key . ">" . $this->GetPlainText($value) . ""; + } + + } + $result .=''; + } + $result .=''; + return $result; + } + + public function XMLBenutzer($id, $cdata = false) + { + if($id > 0){ + $address_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM user WHERE id=%d LIMIT 1',$id)); + } + if(empty($address_arr)) + { + return ''; + } + $result = ''; + foreach($address_arr as $key=>$value) + { + if(is_array($value))$value=''; + if($key==='startseite') + $result .='<'.$key.'>'.$this->app->erp->base64_url_encode($value).''; + else { + if($cdata && $value != '' && !is_numeric($value)) { + $result .= '<' . $key . '>'; + }else { + $result .= '<' . $key . '>' . $this->GetPlainText($value) . ''; + } + } + } + return $result; + } + + public function XMLAdresseAccounts($filter=array(), $cdata = false) + { + if(!empty($filter['id'])){ + $sql = "SELECT * FROM adresse_accounts WHERE adresse='" . $filter['id'] . "' AND art LIKE '" . $filter['art'] . "' AND aktiv=1"; + $result = $this->app->DB->SelectArr($sql); + } + if(empty($result)) + { + return ''; + } + $output =''; + foreach($result as $account) + { + $output .=''; + foreach($account as $key=>$value) + { + if($cdata && $value != '' && !is_numeric($value)) + { + $output .= sprintf('<%1$s>', $key, $value); + }else + $output .= sprintf('<%1$s>%2$s', $key, $value); + } + $output .=''; + } + $output .=''; + return $output; + } + + public function XMLBerichte($id, $cdata = false){ + if($id > 0){ + $result = $this->app->DB->SelectRow(sprintf('SELECT * FROM berichte WHERE id = %d LIMIT 1', $id)); + } + if(empty($result) || empty($result['struktur'])) + { + return ''; + } + + $rows = $this->app->DB->SelectArr($result['struktur']); + $output =''; + if(!empty($rows)) { + foreach($rows as $row) { + $output .=''; + foreach($row as $key=>$value) + { + if($cdata && $value != '' && !is_numeric($value)) { + $output .= "<" . $key . ">"; + }else{ + $output .= "<" . $key . ">" . $this->GetPlainText($value) . ""; + } + } + $output .=''; + } + } + $output .=''; + return $output; + } + + public function XMLArtikelkontingente($filter=array(), $cdata = false) + { + if($filter['id']=='') + { + if($filter['projekt']!='') + { + $projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$filter['projekt']."' AND abkuerzung!=''"); + if($projekt > 0){ + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='" . $filter['nummer'] . "' AND projekt = $projekt AND nummer!='' LIMIT 1"); + }else{ + $artikel = 0; + } + } else { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$filter['nummer']."' AND nummer!='' LIMIT 1"); + } + } else { + $artikel = $filter['id']; + } + if($artikel > 0){ + $artikel = $this->app->DB->Select(sprintf('SELECT id FROM artikel WHERE id = %d LIMIT 1', $artikel)); + } + if($artikel <= 0) + { + return ''; + } + + if($filter['von']!='') + { + $fall = 1; + $result = $this->app->DB->SelectArr("SELECT SUM(ap.menge) as gebucht, + if(ak.menge IS NULL,(SELECT ak2.menge FROM artikelkontingente ak2 WHERE (ak2.datum='1970-01-01' OR ak2.datum='0000-00-00' OR ak2.datum IS NULL) AND ak2.artikel=ap.artikel),ak.menge) + as menge, + if(a.lieferdatum ='0000-00-00' OR a.lieferdatum is NULL, a.datum, a.lieferdatum) as datum + FROM auftrag_position ap + LEFT JOIN auftrag a ON a.id=ap.auftrag + LEFT JOIN artikelkontingente ak ON ak.artikel=ap.artikel AND if(a.lieferdatum ='0000-00-00' OR a.lieferdatum is NULL, a.datum, a.lieferdatum)=ak.datum + WHERE + if(a.lieferdatum ='0000-00-00' OR a.lieferdatum is NULL, + (a.datum >='".$filter['von']."' AND a.datum <='".$filter['bis']."'),(a.lieferdatum >='".$filter['von']."' AND a.lieferdatum <='".$filter['bis']."')) + AND a.status='freigegeben' + AND ap.artikel='$artikel' GROUP by 3 ORDER by 3"); + } + else { + $fall = 2; + $result = $this->app->DB->SelectArr("SELECT * FROM artikelkontingente ak WHERE ak.artikel='$artikel' AND (datum >= DATE_FORMAT(NOW(),'%Y-%m-%d') OR datum='0000-00-00' OR datum='1970-01-01')"); + } + + if(empty($result)) + { + return ''; + } + + $output = ''; + foreach($result as $artikelkontigent) { + $output .=''; + foreach($artikelkontigent as $key=>$value) + { + if($key==='datum') { + $value=str_replace('1970-01-01','0000-00-00',$value); + } + + if($key!=='id' && $key!=='artikel') + { + if($cdata && $value != '' && !is_numeric($value)) { + $output .= '<' . $key . '>'; + }else{ + $output .= '<' . $key . '>' . $this->GetPlainText($value) . ''; + } + } + if($key==='datum' && $fall==2) + { + $gebucht = $this->app->DB->Select(sprintf('SELECT SUM(ap.menge) + FROM auftrag_position AS ap + INNER JOIN auftrag a ON a.id=ap.auftrag + WHERE a.lieferdatum=\'%s\' AND a.status=\'freigegeben\' AND ap.artikel= %d ',$value, $artikel)); + if($gebucht <=0) { + $gebucht = 0; + } + $output .=''.$gebucht.''; + } + } + $output .=''; + } + $output .=''; + + return $output; + } + + public function XMLExportVorlage($id,$filter=array(), $cdata = false) + { + /** @var Exportvorlage $tmp */ + $tmp = $this->app->erp->LoadModul('exportvorlage'); + $csv = $tmp->ExportvorlageExport(true,$id,$filter); + + $csv_array = preg_split ('/$\R?^/m', $csv); + + if($id > 0){ + $vorlageArr = $this->app->DB->SelectRow(sprintf('SELECT exporttrennzeichen, exporterstezeilenummer,exportdatenmaskierung FROM exportvorlage WHERE id= %d LIMIT 1', $id)); + } + if(!empty($vorlageArr)) + { + $exporttrennzeichen = $vorlageArr['exporttrennzeichen']; + $exportdatenmaskierung = $vorlageArr['exportdatenmaskierung']; + $exporterstezeilenummer = $vorlageArr['exporterstezeilenummer']; + }else{ + $exporttrennzeichen = ''; + $exportdatenmaskierung = ''; + $exporterstezeilenummer = ''; + } + + if($exporttrennzeichen==='semikolon') { + $exporttrennzeichen=';'; + } + else if($exporttrennzeichen==='komma') { + $exporttrennzeichen=','; + } + else if($exporttrennzeichen==='tab') { + $exporttrennzeichen="\t"; + } + else { + $exporttrennzeichen=';'; + } + + if($exportdatenmaskierung==='gaensefuesschen') { + $exportdatenmaskierung='"'; + } else { + $exportdatenmaskierung=''; + } + + $output = ''; + $field_name = []; + $counter = 0; + if(!empty($csv_array)){ + foreach ($csv_array as $row) { + $fields = explode($exporttrennzeichen, $row); + if($counter == 0){ + foreach ($fields as $value) { + if($exportdatenmaskierung != ''){ + $value = str_replace($exportdatenmaskierung, '', $value); + } + $field_name[] = $value; + } + }else{ + $output .= ''; + foreach($field_name as $field_index => $fieldValue) { + $value = str_replace('"', '', $fields[$field_index]); + if($cdata && $value != '' && !is_numeric($value)){ + $output .= '<' . $field_name[$field_index] . '>\r\n"; + }else{ + $output .= '<' . $field_name[$field_index] . '>' . $value . '\r\n"; + } + } + $output .= ''; + } + $counter++; + } + } + return ''.$output.''; + } + + public function XMLArtikel($id, $api = 0) + { + if($id > 0){ + $artikel_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM artikel WHERE id=%d LIMIT 1',$id)); + } + $result = ''; + if(!empty($artikel_arr)){ + foreach ($artikel_arr as $key => $value) { + if($key !== 'usereditid' && $key !== 'useredittimestamp'){ + if(is_array($value)){ + $value = ''; + } + if($key === 'id' && $api){ + $extid = $this->app->DB->Select("SELECT id_ext FROM api_mapping WHERE tabelle = 'artikel' AND id_int = '$id' AND api = '$api' LIMIT 1"); + if($extid){ + $result .= '' . $this->GetPlainText($extid) . ''; + } + } + if($key === 'projekt') $value = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$value' LIMIT 1"); + $result .= '<' . $key . '>' . $this->GetPlainText($value) . ""; + if($key === 'typ'){ + if(strpos($value, '_kat') !== false){ + $kategorie = (int)str_replace('_kat', '', $value); + $bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM artikelkategorien WHERE id = '" . $kategorie . "' LIMIT 1"); + if($bezeichnung){ + $result .= '' . $this->GetPlainText($bezeichnung) . ''; + $extid = $this->app->DB->Select("SELECT id_ext FROM api_mapping WHERE tabelle = 'artikelkategorien' AND id_int = '$kategorie' AND api = '$api' LIMIT 1"); + if($extid){ + $result .= '' . $this->GetPlainText($extid) . ''; + } + } + } + } + + } + } + } + // Lagerbestand + $summe = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz WHERE lpi.artikel='$id' AND lp.sperrlager!=1"); + $reserviert = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$id'");// AND datum >= NOW()"); + $auftraege = $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel LEFT JOIN auftrag auf ON auf.id=ap.auftrag WHERE a.id='$id' AND a.lagerartikel=1 AND auf.status='freigegeben'"); + $liefern= $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap, auftrag aa, artikel a WHERE a.id=ap.artikel AND aa.id = ap.auftrag AND a.id='$id' AND a.lagerartikel=1 AND aa.status='freigegeben'"); + $reserviert_im_versand = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$id' AND objekt='lieferschein'"); + $berechnet = $summe - $auftraege - $reserviert_im_versand; + $verkaufte = $auftraege + $reserviert_im_versand; + + $rest = $summe - $liefern; + if($reserviert=='') { + $reserviert =0; + } + if($liefern <=0) { + $liefern=0; + } + + if($rest > 0) { + $verfuegbar = (string)$rest; + } else { + $verfuegbar = '0'; + } + + $verkaufbare = $this->app->erp->ArtikelAnzahlVerkaufbar($id); + $summe = round($summe, $this->app->erp->GetLagerNachkommastellen()); + $reserviert = round($reserviert ,$this->app->erp->GetLagerNachkommastellen()); + $liefern = round($liefern ,$this->app->erp->GetLagerNachkommastellen()); + $verkaufte = round($verkaufte ,$this->app->erp->GetLagerNachkommastellen()); + $berechnet = round($berechnet ,$this->app->erp->GetLagerNachkommastellen()); + $verkaufbare = round($verkaufbare ,$this->app->erp->GetLagerNachkommastellen()); + + $result .= "$summe"; + $result .= "$reserviert"; + $result .= "$liefern"; + $result .= "$verkaufte"; + $result .= "$berechnet"; + $result .= "$verkaufbare"; + + // stueckliste + if($artikel_arr['stueckliste']=='1'){ + $arr_stueckliste = $this->app->DB->SelectArr(sprintf('SELECT * FROM stueckliste WHERE stuecklistevonartikel=%d',$id)); + if(!empty($arr_stueckliste)){ + $result .= ''; + foreach($arr_stueckliste as $stuecklisteKey => $stuecklisteRow) { + $artikelArr = $this->app->DB->SelectRow(sprintf('SELECT nummer, projekt + FROM artikel WHERE id = %d LIMIT 1', $stuecklisteRow['artikel'])); + if(!empty($artikelArr)) + { + $arr_stueckliste[$stuecklisteKey]['nummer'] = $artikelArr['nummer']; + $projekt = $artikelArr['projekt']; + if($projekt > 0) + { + $arr_stueckliste[$stuecklisteKey]['projekt'] = $this->app->DB->Select( + sprintf('SELECT abkuerzung + FROM projekt + WHERE id = %d LIMIT 1', $projekt)); + }else{ + $arr_stueckliste[$stuecklisteKey]['projekt'] = ''; + } + }else{ + $arr_stueckliste[$stuecklisteKey]['nummer'] = ''; + $arr_stueckliste[$stuecklisteKey]['projekt'] = ''; + } + $result .= ''; + $result .= '' . $arr_stueckliste[$stuecklisteKey]['menge'] . ''; + $result .= '' . $arr_stueckliste[$stuecklisteKey]['nummer'] . ''; + $result .= '' . $arr_stueckliste[$stuecklisteKey]['artikel'] . ''; + $result .= '' . $arr_stueckliste[$stuecklisteKey]['projekt'] . ''; + $result .= ""; + } + $result .= ''; + } + } + // einkaufspreise + $arr_einkauf = $this->app->DB->SelectArr("SELECT * FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis >= NOW() OR gueltig_bis='0000-00-00')"); + if(!empty($arr_einkauf)) + { + $result .=''; + foreach($arr_einkauf as $einkaufKey => $einkaufValue) { + if($einkaufValue['adresse'] > 0){ + $adresseArr = $this->app->DB->SelectRow(sprintf( + 'SELECT projekt, lieferantennummer FROM adresse WHERE id = %d ', $einkaufValue['adresse'] + )); + }else{ + $adresseArr = null; + } + if(!empty($adresseArr)) + { + $einkaufValue['lieferantennummer'] = $adresseArr['lieferantennummer']; + $einkaufValue['projekt'] = $adresseArr['projekt']; + }else{ + $einkaufValue['lieferantennummer'] = ''; + $einkaufValue['projekt'] = 0; + } + if($einkaufValue['projekt'] > 0) + { + $einkaufValue['projekt'] = $this->app->DB->SelectRow(sprintf('SELECT projekt FROM adresse WHERE id= %d LIMIT 1', $einkaufValue['projekt'])); + }else{ + $einkaufValue['projekt'] = ''; + } + + $result .=''; + $result .=''.$einkaufValue['ab_menge'].''; + $result .=''.$einkaufValue['preis'].''; + $result .=''.$einkaufValue['waehrung'].''; + $result .=''.$einkaufValue['lieferantennummer'].''; + $result .=''.$einkaufValue['projekt'].''; + $result .=''.$this->GetPlainText($einkaufValue['bestellnummer']).''; + $result .=''.$this->GetPlainText($einkaufValue['bezeichnunglieferant']).''; + $result .=''; + } + $result .=''; + } + + // verkaufspreise + $arr_verkauf = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise WHERE artikel='$id' AND (gueltig_bis >= NOW() OR gueltig_bis='0000-00-00' ) AND geloescht!='1'"); + if(!empty($arr_verkauf)) + { + $result .=''; + foreach($arr_verkauf as $verkaufValue) { + if($einkaufValue['adresse'] > 0){ + $adresseArr = $this->app->DB->SelectRow(sprintf( + 'SELECT projekt, lieferantennummer FROM adresse WHERE id = %d ', $verkaufValue['adresse'] + )); + }else{ + $adresseArr = null; + } + if(!empty($adresseArr)) + { + $verkaufValue['lieferantennummer'] = $adresseArr['lieferantennummer']; + $verkaufValue['projekt'] = $adresseArr['projekt']; + }else{ + $verkaufValue['lieferantennummer'] = ''; + $verkaufValue['projekt'] = 0; + } + if($verkaufValue['projekt'] > 0) + { + $verkaufValue['projekt'] = $this->app->DB->SelectRow(sprintf('SELECT projekt FROM adresse WHERE id= %d LIMIT 1', $einkaufValue['projekt'])); + }else{ + $verkaufValue['projekt'] = ''; + } + $arr_verkauf[$i]['kundennummer'] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='".$arr_verkauf[$i]['adresse']."' LIMIT 1"); + $arr_verkauf[$i]['projekt'] = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='".$arr_verkauf[$i]['adresse']."' LIMIT 1"); + $arr_verkauf[$i]['projekt'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr_verkauf[$i]['projekt']."' LIMIT 1"); + + $result .=''; + $result .=''.$verkaufValue['ab_menge'].''; + $result .=''.$verkaufValue['preis'].''; + $result .=''.$verkaufValue['vpe'].''; + if($verkaufValue['vpe_menge'] > 0){ + $result .= '' . $verkaufValue['vpe_menge'] . ''; + } + + $result .=''.$verkaufValue['waehrung'].''; + + if($verkaufValue['kundennummer']!='') + { + $result .=''.$verkaufValue['kundennummer'].''; + $result .=''.$verkaufValue['projekt'].''; + if($verkaufValue['kundenartikelnummer']!=''){ + $result .= '' . $verkaufValue['kundenartikelnummer'] . ''; + } + } + $result .=''; + } + $result .=''; + } + return $result; + } + + + public function BelegeimportAusfuehren($idliste = null, $uebertragungen = false) + { + $ret = null; + $erlaubtebelege = array( + 'auftrag', + 'lieferschein', + 'rechnung', + 'gutschrift', + 'angebot', + 'preisanfrage', + 'bestellung', + 'produktion', + 'proformarechnung', + 'retoure' + ); + $belege = $this->app->DB->SelectArr('SELECT * + FROM belegeimport + WHERE '.($idliste?' id in ('.implode(', ',$idliste).') ':"userid='".$this->app->User->GetID()."'").' + ORDER BY art, beleg_hauptbelegnr, beleg_belegnr,artikel_sort, id'); + if($belege) { + if($uebertragungen) { + $transferData = $this->app->DB->SelectRow( + sprintf( + 'SELECT `api`, `projekt`,`auftrageingang`,`bestellungeingang`, `createproduction`, `ownaddress`, + `createarticleifnotexists`, `createarticleasstoragearticle` + FROM `uebertragungen_account` + WHERE `id` = %d + LIMIT 1', + $uebertragungen + ) + ); + $this->uebertragung_account = $uebertragungen; + $this->api_id = $transferData['api']; + $projekt = $transferData['projekt']; + $ret = null; + if(empty($transferData['alldoctypes'])) { + $erlaubtebelege = array(); + if($transferData['auftrageingang']) { + $erlaubtebelege[] = 'auftrag'; + $erlaubtebelege[] = 'angebot'; + } + if($transferData['bestellungeingang']) { + $erlaubtebelege[] = 'bestellung'; + $erlaubtebelege[] = 'produktion'; + } + } + } + $aktbelegart = false; + $aktbelegnr = false; + $aktbelegid = false; + $hauptbelegnr = false; + //Für Belegstatus "angelegt", um die Belegnr entfernen zu können + $erstelltebelegeids = array(); + $erstelltebelegeNichtAngelegtids = []; + foreach($belege as $beleg) { + if(!empty($beleg['art'])) { + $beleg['art'] = trim(strtolower($beleg['art'])); + } + if($beleg['art'] && $beleg['beleg_belegnr'] && in_array($beleg['art'],$erlaubtebelege)) { + if($beleg['art'] != $aktbelegart || $beleg['beleg_belegnr'] != $aktbelegnr) + { + $projekt = !empty($beleg['projekt'])?$beleg['projekt']:0; + if(empty($projekt)) { + $projekt = !empty($beleg['beleg_projekt'])?$beleg['beleg_projekt']:0; + } + $aktbelegnr = $beleg['beleg_belegnr']; + $hauptbelegnr = $beleg['beleg_hauptbelegnr']; + $aktbelegart = $beleg['art']; + $aktbelegid = false; + $alteadresse = $beleg['adresse']; + if($beleg['adresse'] && $uebertragungen) { + $beleg['adresse'] = $this->GetFromExtID('adresse', $beleg['adresse']); + } + if(!$beleg['adresse'] && $uebertragungen && $beleg['beleg_lieferantennummer'] != '' && ($beleg['art'] === 'bestellung' || $beleg['art'] === 'produktion')) { + $beleg['adresse'] = $this->app->DB->Select( + sprintf( + 'SELECT id + FROM adresse + WHERE lieferantennummer <> \'\' AND lieferantennummer = \'%s\' AND IFNULL(geloescht,0) = 0 + ORDER BY projekt = %d DESC + LIMIT 1', + $this->app->DB->real_escape_string($beleg['beleg_lieferantennummer']), (int)$beleg['projekt'] + ) + ); + } + + if($uebertragungen && !empty($beleg['adresse']) && $beleg['art'] === 'bestellung' + && !empty($transferData['createproduction']) && $beleg['adresse'] == $transferData['ownaddress'] + ) { + $beleg['art'] = 'produktion'; + } + + if($uebertragungen) { + $hauptbelegnr = $this->GetFromExtID($beleg['art'], $hauptbelegnr); + if($hauptbelegnr != '')$hauptbelegnr = $this->app->DB->Select("SELECT belegnr + FROM '".$beleg['art']."' WHERE id = '$hauptbelegnr' LIMIT 1"); + if(!$beleg['beleg_projekt']) { + $beleg['beleg_projekt'] = $projekt; + } + } + + if($uebertragungen && !$beleg['adresse'] && $beleg['art'] === 'produktion' && !empty($beleg['beleg_auftragid'])){ + $beleg['adresse'] = $this->app->DB->Select( + sprintf( + 'SELECT adresse FROM auftrag WHERE id = %d LIMIT 1', $beleg['beleg_auftragid'] + ) + ); + } + + if(!$beleg['adresse'] && $uebertragungen) { + $adresseprojekt = ''; + if($projekt) { + $adresseprojekt = " AND projekt = '$projekt' "; + } + if(in_array($beleg['art'], + array('auftrag','lieferschein','rechnung','gutschrift','angebot','produktion','retoure') + )) { + $beleg['adresse'] = $this->app->DB->Select("SELECT id FROM adresse + WHERE name='".$this->app->DB->real_escape_string($beleg['beleg_name'])."' + AND email='".$this->app->DB->real_escape_string($beleg['beleg_email'])."' + AND strasse='".$this->app->DB->real_escape_string((string)$beleg['beleg_strasse'])."' + AND plz='".$this->app->DB->real_escape_string((string)$beleg['beleg_plz'])."' + AND ort='".$this->app->DB->real_escape_string((string)$beleg['beleg_ort'])."' + AND kundennummer <> '' AND geloescht!=1 $adresseprojekt LIMIT 1"); + } + else { + $beleg['adresse'] = $this->app->DB->Select("SELECT id FROM adresse + WHERE name='". + $this->app->DB->real_escape_string($beleg['beleg_name'])."' + AND email='".$this->app->DB->real_escape_string($beleg['beleg_email'])."' + AND strasse='".$this->app->DB->real_escape_string((string)$beleg['beleg_strasse'])."' + AND plz='".$this->app->DB->real_escape_string((string)$beleg['beleg_plz'])."' + AND ort='".$this->app->DB->real_escape_string((string)$beleg['beleg_ort'])."' + AND lieferantennummer <> '' AND geloescht!=1 $adresseprojekt LIMIT 1"); + } + if($beleg['beleg_kundennummer'] == '' && $beleg['adresse']) { + $beleg['beleg_kundennummer'] = $this->app->DB->Select("SELECT kundennummer + FROM adresse WHERE id = '".$beleg['adresse']."' LIMIT 1"); + } + } + $belegKundennummer = !empty($beleg['beleg_kundennummer'])?$beleg['beleg_kundennummer']:''; + if(empty($belegKundennummer)) { + $belegKundennummer = !empty($beleg['kundennummer'])?$beleg['kundennummer']:''; + } + if(strtoupper((string)$belegKundennummer) === 'NEU' || strtoupper($belegKundennummer) === 'NEW') { + $beleg['adresse'] = 0; + } + + if(!$beleg['adresse']) { + if(in_array($beleg['art'],array('auftrag','lieferschein','rechnung','gutschrift','angebot', 'produktion'))) { + $adr['kundennummer'] = $beleg['beleg_kundennummer']; + if((string)$adr['kundennummer'] === '' || strtoupper((string)$adr['kundennummer']) === 'NEU' || + strtoupper($adr['kundennummer']) === 'NEW') { + $adr['kundennummer'] = $this->app->erp->GetNextKundennummer($beleg['beleg_projekt']); + } + }else{ + $adr['lieferantennummer'] = $this->app->erp->GetNextLieferantennummer($beleg['beleg_projekt']); + } + if(!$beleg['beleg_projekt'])$beleg['beleg_projekt'] = $this->app->erp->Firmendaten('projekt'); + $adr['name'] = $beleg['beleg_name']; + $adr['abteilung'] = $beleg['beleg_abteilung']; + $adr['unterabteilung'] = $beleg['beleg_unterabteilung']; + $adr['adresszusatz'] = $beleg['beleg_adresszusatz']; + $adr['ansprechpartner'] = $beleg['beleg_ansprechpartner']; + $adr['telefon'] = $beleg['beleg_telefon']; + $adr['adresszusatz'] = $beleg['beleg_adresszusatz']; + $adr['email'] = $beleg['beleg_email']; + $adr['land'] = $beleg['beleg_land']; + if($adr['land']=="") { + $adr['land'] = $this->app->erp->Firmendaten("land"); + $beleg['beleg_land'] = $adr['land']; + } + $adr['strasse'] = $beleg['beleg_strasse']; + $adr['plz'] = $beleg['beleg_plz']; + $adr['ort'] = $beleg['beleg_ort']; + $adr['lieferbedingung'] = $beleg['beleg_lieferbedingung']; + $adr['projekt'] = $beleg['beleg_projekt']; + + $beleg['adresse'] = $this->app->erp->InsertUpdateAdresse($adr); + if($alteadresse && $alteadresse != $beleg['adresse']) + { + $this->SetExtIDMapping('adresse', $beleg['adresse'], $alteadresse); + } + unset($adr); + } + if($beleg['adresse']) + { + if($uebertragungen) + { + $check = $this->GetFromExtID($beleg['art'], $beleg['beleg_belegnr']); + }else{ + $check = $this->app->DB->Select("SELECT id FROM ".$beleg['art']." + WHERE belegnr = '".$this->app->DB->real_escape_string($beleg['beleg_belegnr'])."' LIMIT 1"); + } + if(!$check) + { + $methode = 'Create'.ucfirst($beleg['art']); + $methodeLoad = 'Load'.ucfirst($beleg['art']).'Standardwerte'; + if(method_exists($this->app->erp, $methode)) + { + $check = $this->app->erp->$methode($beleg['adresse']); + if($uebertragungen) + { + $beleg['id'] = $check; + $ret[] = $beleg; + } + if(method_exists($this->app->erp, $methodeLoad)){ + $this->app->erp->$methodeLoad($check, $beleg['adresse']); + } + + if($beleg['status'] !== 'angelegt') + { + if($beleg['beleg_belegnr']==='NEU' || $beleg['beleg_belegnr']==='NEW' || $beleg['beleg_belegnr']=='' || + $beleg['beleg_belegnr']==='ENTWURF' || !isset($beleg['beleg_belegnr']) || $uebertragungen) { + $beleg['beleg_belegnr'] = $this->app->erp->GetNextNummer($beleg['art'],$beleg['beleg_projekt'],$check); + } + }else { + $beleg['beleg_belegnr'] = ''; + } + + if($check) + { + $adressArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM adresse WHERE id = %d LIMIT 1', + $beleg['adrese'] + ) + ); + + if(!$beleg['beleg_projekt']) { + $beleg['beleg_projekt'] = $this->app->DB->Select("SELECT projekt + FROM adresse + WHERE id = '".$beleg['adresse']."' + LIMIT 1"); + } + + if($beleg['beleg_projekt'] && + $beleg['beleg_projekt'] != $this->app->DB->Select("SELECT projekt + FROM ".$beleg['art']." + WHERE id = '$check' LIMIT 1")) + { + $this->app->DB->Update("UPDATE ".$beleg['art']." SET projekt = '".$beleg['beleg_projekt']."' + WHERE id = '$check' LIMIT 1"); + if($beleg['art'] === 'auftrag') + { + $standardlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '".$beleg['beleg_projekt']."' LIMIT 1"); + if($standardlager)$this->app->DB->Update("UPDATE auftrag SET standardlager = '$standardlager' + WHERE id = '$check' LIMIT 1"); + if($this->app->erp->StandardZahlungsweise($beleg['beleg_projekt'])==="rechnung") + { + $this->app->DB->Update("UPDATE auftrag + set zahlungsweise = '".$this->app->erp->StandardZahlungsweise($beleg['beleg_projekt'])."', + zahlungszieltage = '".$this->app->erp->ZahlungsZielTage($beleg['beleg_projekt'])."', + zahlungszieltageskonto = '".$this->app->erp->ZahlungsZielTageSkonto($beleg['beleg_projekt'])."', + zahlungszielskonto = '".$this->app->erp->ZahlungsZielSkonto($beleg['beleg_projekt'])."' + WHERE id = '$check' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE auftrag + set zahlungsweise = '".$this->app->erp->StandardZahlungsweise($beleg['beleg_projekt'])."', + zahlungszieltage = '0', zahlungszieltageskonto = '0', zahlungszielskonto = '0' + WHERE id = '".$check."' LIMIT 1"); + } + } + $this->app->erp->LoadSteuersaetzeWaehrung($check,$beleg['art'],$beleg['beleg_projekt']); + } + + $teillieferungvon = false; + if($hauptbelegnr) + { + $teillieferungvon = $this->app->DB->Select("SELECT id + FROM auftrag + WHERE belegnr = '".$this->app->DB->real_escape_string($hauptbelegnr)."' + LIMIT 1"); + if($teillieferungvon) + { + $teillieferungnummer= $this->app->DB->Select("SELECT MAX(teillieferungnummer) FROM auftrag WHERE teillieferungvon='$teillieferungvon'"); + $teillieferungnummer++; + $this->app->DB->Update("UPDATE ".$beleg['art']." + SET teillieferungvon = '".$teillieferungvon."',teillieferungnummer='$teillieferungnummer' + WHERE id = '$check' LIMIT 1"); + } + } + + $fields_fromdb = array('name','strasse','ort','land','plz'); + foreach($fields_fromdb as $fieldname) + { + if($beleg['beleg_'.$fieldname]=='') { + $beleg['beleg_'.$fieldname] = $this->app->DB->Select("SELECT ".$fieldname." + FROM adresse + WHERE id='".$beleg['adresse']."' + LIMIT 1"); + } + } + + $belegArt = $beleg['art']; + + if($beleg['beleg_status']) { + $this->app->DB->Update("UPDATE ".$belegArt." + SET status = '".$this->app->DB->real_escape_string($beleg['beleg_status'])."' WHERE id = '$check' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE ".$belegArt." + SET status = '".$this->app->DB->real_escape_string($beleg['status'])."' WHERE id = '$check' LIMIT 1"); + } + if($beleg['beleg_datum']) + { + $this->app->DB->Update("UPDATE ".$belegArt." + SET datum = '".$this->app->DB->real_escape_string($beleg['beleg_datum'])."' WHERE id = '$check' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE ".$belegArt." + SET datum = now() WHERE id = '$check' AND datum = '0000-00-00' LIMIT 1"); + } + if($beleg['beleg_lieferdatum']) + { + if($belegArt === 'bestellung') { + $this->app->DB->Update("UPDATE bestellung + SET gewuenschteslieferdatum = '" . $this->app->DB->real_escape_string($beleg['beleg_lieferdatum']) . "' WHERE id = '$check' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE " . $belegArt . " + SET lieferdatum = '" . $this->app->DB->real_escape_string($beleg['beleg_lieferdatum']) . "' WHERE id = '$check' LIMIT 1"); + } + } + if($beleg['beleg_tatsaechlicheslieferdatum']) + { + $this->app->DB->Update("UPDATE ".$belegArt." + SET tatsaechlicheslieferdatum = '".$this->app->DB->real_escape_string($beleg['beleg_tatsaechlicheslieferdatum'])."' WHERE id = '$check' LIMIT 1"); + } + if($beleg['beleg_art']) + { + $this->app->DB->Update("UPDATE ".$belegArt." + SET art = '".$this->app->DB->real_escape_string($beleg['beleg_art'])."' WHERE id = '$check' LIMIT 1"); + } + + if($beleg['beleg_versandart']) + { + $this->app->DB->Update("UPDATE ".$belegArt." SET versandart = '".$this->app->DB->real_escape_string($beleg['beleg_versandart'])."' WHERE id = '$check' LIMIT 1"); + } + if($beleg['beleg_zahlungsweise']) + { + $this->app->DB->Update("UPDATE ".$belegArt." SET zahlungsweise = '".$this->app->DB->real_escape_string($beleg['beleg_zahlungsweise'])."' WHERE id = '$check' LIMIT 1"); + } + $this->app->DB->Update("UPDATE ".$belegArt." SET belegnr = '".$this->app->DB->real_escape_string($beleg['beleg_belegnr'])."' WHERE id = '$check' LIMIT 1"); + if(empty($beleg['kundennummer']) && $beleg['art'] !== 'bestellung') { + $beleg['kundennummer'] = $adressArr['kundennummer']; + } + if(empty($beleg['beleg_name'])) { + $beleg['beleg_name'] = $adressArr['name']; + $beleg['beleg_plz'] = $adressArr['plz']; + $beleg['beleg_ort'] = $adressArr['ort']; + $beleg['beleg_land'] = $adressArr['land']; + $beleg['beleg_abteilung'] = $adressArr['abteilung']; + $beleg['beleg_unterabteilung'] = $adressArr['unterabteilung']; + $beleg['beleg_adresszusatz'] = $adressArr['adresszusatz']; + } + $this->app->DB->Update("UPDATE ".$belegArt." SET name = '".$this->app->DB->real_escape_string($beleg['beleg_name'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET abteilung = '".$this->app->DB->real_escape_string($beleg['beleg_abteilung'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET unterabteilung = '".$this->app->DB->real_escape_string($beleg['beleg_unterabteilung'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET strasse = '".$this->app->DB->real_escape_string($beleg['beleg_strasse'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET plz = '".$this->app->DB->real_escape_string($beleg['beleg_plz'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET ort = '".$this->app->DB->real_escape_string($beleg['beleg_ort'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET land = '".$this->app->DB->real_escape_string($beleg['beleg_land'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET email = '".$this->app->DB->real_escape_string($beleg['beleg_email'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET telefon = '".$this->app->DB->real_escape_string($beleg['beleg_telefon'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET adresszusatz = '".$this->app->DB->real_escape_string($beleg['beleg_adresszusatz'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET kundennummer = '".$this->app->DB->real_escape_string($beleg['beleg_kundennummer'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET adresse = '".$this->app->DB->real_escape_string($beleg['adresse'])."' WHERE id = '$check' LIMIT 1"); + + $this->app->DB->Update("UPDATE ".$belegArt." SET internebemerkung = '".$this->app->DB->real_escape_string($beleg['beleg_internebemerkung'])."' WHERE id = '$check' LIMIT 1"); + $this->app->DB->Update("UPDATE ".$belegArt." SET internebezeichnung = '".$this->app->DB->real_escape_string($beleg['beleg_internebezeichnung'])."' WHERE id = '$check' LIMIT 1"); + if($belegArt !== 'bestellung') { + $this->app->DB->Update("UPDATE " . $belegArt . " SET aktion = '" . $this->app->DB->real_escape_string($beleg['beleg_aktion']) . "' WHERE id = '$check' LIMIT 1"); + } + if($belegArt === 'bestellung') { + $this->app->DB->Update("UPDATE ".$belegArt." SET lieferantennummer = '".$this->app->DB->real_escape_string($beleg['beleg_lieferantennummer'])."' WHERE id = '$check' LIMIT 1"); + } + $this->app->DB->Update("UPDATE ".$belegArt." SET freitext = '".$this->app->DB->real_escape_string($beleg['beleg_freitext'])."' WHERE id = '$check' LIMIT 1"); + if($belegArt !== 'bestellung'){ + $this->app->DB->Update("UPDATE " . $belegArt . " SET ihrebestellnummer = '" . $this->app->DB->real_escape_string($beleg['beleg_ihrebestellnummer']) . "' WHERE id = '$check' LIMIT 1"); + } + $this->app->DB->Update("UPDATE ".$belegArt." SET lieferbedingung = '".$this->app->DB->real_escape_string($beleg['beleg_lieferbedingung'])."' WHERE id = '$check' LIMIT 1"); + if($belegArt === 'produktion') { + $this->app->DB->Update( + sprintf( + 'UPDATE produktion SET unterlistenexplodieren = %d WHERE id = %d LIMIT 1', + $beleg['beleg_unterlistenexplodieren'], $check + ) + ); + if(!empty($beleg['beleg_auftragid'])) { + $this->app->DB->Update( + sprintf( + 'UPDATE produktion SET auftragid = %d WHERE id = %d LIMIT 1', + $beleg['beleg_auftragid'], $check + ) + ); + $datumauslieferung = $this->app->DB->Select( + sprintf( + 'SELECT datumauslieferung FROM produktion WHERE id = %d', $check + ) + ); + IF($datumauslieferung == '' || $datumauslieferung === '0000-00-00') { + $datumauslieferung = $this->app->DB->Select( + sprintf( + 'SELECT lieferdatum FROM auftrag WHERE id = %d', $beleg['beleg_auftragid'] + ) + ); + IF($datumauslieferung == '' || $datumauslieferung === '0000-00-00') { + $datumauslieferung = $this->app->DB->Select( + sprintf( + 'SELECT datum FROM auftrag WHERE id = %d', $beleg['beleg_auftragid'] + ) + ); + } + if($datumauslieferung != '' && $datumauslieferung !== '0000-00-00') { + $this->app->DB->Update( + sprintf( + "UPDATE produktion SET datumauslieferung = '%s' WHERE id = %d", + $datumauslieferung, $check + ) + ); + } + } + } + } + } + } + } + if($check) + { + $aktbelegid = $check; + if($beleg['status'] === 'angelegt'){ + //Merken der Belegids für nachträgliches löschen der Belegnummern aus der Angebotstabelle + $erstelltebelegeids[$check] = $beleg['art']; + } else { + $erstelltebelegeNichtAngelegtids[$check] = $beleg['art']; + } + } + } + } + if($aktbelegid && ($beleg['artikel'] || $beleg['artikel_nummer'])) { + if(!$beleg['artikel']) { + $beleg['artikel'] = $this->app->DB->Select("SELECT id + FROM artikel + WHERE nummer = '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."' and geloescht <> 1 + ORDER BY projekt = '".$beleg['beleg_projekt']."' DESC + LIMIT 1"); + if(!$beleg['artikel'] && isset($beleg['artikel_ean']) && $beleg['artikel_ean'] != '') { + $beleg['artikel'] = $this->app->DB->Select("SELECT id + FROM artikel + WHERE ean = '".$this->app->DB->real_escape_string($beleg['artikel_ean'])."' AND ean <> '' and geloescht <> 1 + ORDER BY projekt = '".$beleg['beleg_projekt']."' DESC + LIMIT 1"); + } + } + if(!$beleg['artikel']) { + $art['nummer'] = $beleg['artikel_nummer']; + if(isset($beleg['artikel_ean']) && $beleg['artikel_ean'] != '') { + $art['ean'] = $beleg['artikel_ean']; + } + $art['projekt'] = $beleg['beleg_projekt']; + $art['name_de'] = $beleg['artikel_bezeichnung']; + $art['anabregs_text'] = $beleg['artikel_bezeichnung']; + if($beleg['artikel_umsatzsteuer'] === 'ermaessigt') { + $art['umsatzsteuer'] = $beleg['artikel_umsatzsteuer']; + } + $art['einheit'] = $beleg['artikel_einheit']; + $art['zolltarifnummer'] = $beleg['artikel_zolltarifnummer']; + $art['herkunftsland'] = $beleg['artikel_herkunftsland']; + if(!empty($uebertragungen) + && !empty($transferData['createarticleifnotexists']) + && !empty($transferData['createarticleasstoragearticle']) + ) { + $art['lagerartikel'] = 1; + } + $beleg['artikel'] = $this->app->erp->InsertUpdateArtikel($art); + unset($art); + } + if($beleg['artikel']) + { + if(empty($beleg['artikel_nummer'])) { + $beleg['artikel_nummer'] = $this->app->DB->Select( + sprintf( + 'SELECT nummer FROM artikel WHERE id = %d LIMIT 1', + $beleg['artikel'] + ) + ); + } + + if(empty($beleg['artikel_bezeichnung'])) { + $article = $this->app->DB->SelectRow( + sprintf( + 'SELECT art.name_de, art.name_en, art.`anabregs_text_en`, art.anabregs_text + FROM `artikel` AS `art` WHERE art.id = %d', + $beleg['artikel'] + ) + ); + $sprache = $this->app->DB->Select( + sprintf( + 'SELECT `sprache` FROM `%s` WHERE `id` = %d LIMIT 1', + $aktbelegart, $aktbelegid + ) + ); + if(empty($sprache)) { + $sprache = $this->app->DB->Select( + sprintf( + 'SELECT `sprache` FROM `adresse` WHERE `id` = %d LIMIT 1', + $beleg['adresse'] + ) + ); + } + if($sprache !== 'deutsch' && $sprache != '' && strtolower($sprache) !== 'de') { + if(!empty($article['name_en'])) { + $beleg['artikel_bezeichnung'] = $article['name_en']; + if(!empty($aricle['anabregs_text_en'])) { + $beleg['artikel_beschreibung'] = $aricle['anabregs_text_en']; + } + } + } + if(empty($beleg['artikel_bezeichnung'])){ + $beleg['artikel_bezeichnung'] = $aricle['name_de']; + } + } + elseif($uebertragungen > 0) { + $article = $this->app->DB->SelectRow( + sprintf( + 'SELECT art.name_de, art.name_en, art.`anabregs_text_en`, art.anabregs_text + FROM `artikel` AS `art` WHERE art.id = %d', + $beleg['artikel'] + ) + ); + if(!empty($article['name_en']) && $beleg['artikel_bezeichnung'] !== $article['name_en']) { + $sprache = $this->app->DB->Select( + sprintf( + 'SELECT `sprache` FROM `%s` WHERE `id` = %d LIMIT 1', + $aktbelegart, $aktbelegid + ) + ); + if(empty($sprache)) { + $sprache = $this->app->DB->Select( + sprintf( + 'SELECT `sprache` FROM `adresse` WHERE `id` = %d LIMIT 1', + $beleg['adresse'] + ) + ); + } + if($sprache !== 'deutsch' && $sprache != '' && strtolower($sprache) !== 'de') { + $beleg['artikel_bezeichnung'] = $article['name_en']; + if(!empty($article['anabregs_text_en'])) { + $beleg['artikel_beschreibung'] = $article['anabregs_text_en']; + } + } + } + } + $belegpos = false; + switch($aktbelegart) + { + case 'auftrag': + $belegpos = $this->app->erp->AddAuftragPositionManuell($aktbelegid, $beleg['artikel'], + ($beleg['artikel_preis']/$beleg['artikel_preisfuermenge']), $beleg['artikel_menge'], + $beleg['artikel_bezeichnung'],$beleg['artikel_beschreibung']); + if(!$belegpos) { + $belegpos = $this->app->DB->GetInsertID(); + } + + if($teillieferungvon) + { + if(!$this->app->DB->Select("SELECT porto FROM artikel WHERE id = '".$beleg['artikel']."' LIMIT 1")) + { + $checkhauptartikel = $this->app->DB->SelectArr("SELECT id, menge, sort + FROM auftrag_position + WHERE artikel = '".$beleg['artikel']."' AND auftrag = '$teillieferungvon' + ORDER BY sort, menge = '".$beleg['menge']."' DESC, menge > '".$beleg['menge']."' DESC"); + if($checkhauptartikel) + { + foreach($checkhauptartikel as $k => $v) + { + if($beleg['artikel_menge'] > 0) + { + if($v['menge'] > $beleg['artikel_menge']) + { + $this->app->DB->Update("UPDATE auftrag_position SET menge = menge - ".$beleg['artikel_menge']." + WHERE id = '".$v['id']."' LIMIT 1"); + $beleg['artikel_menge'] = 0; + }else{ + $this->app->DB->Delete("DELETE FROM auftrag_position WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Update("UPDATE auftrag_position SET sort = sort - 1 + WHERE auftrag = '$teillieferungvon' AND sort > '".$v['sort']."'"); + $beleg['artikel_menge'] -= $v['menge']; + } + } + } + $checkmengen = $this->app->DB->Select("SELECT ap.id FROM auftrag_position ap.left + join artikel a on ap.artikel = a.id WHERE ap.auftrag = '$teillieferungvon' AND a.porto <> 1 LIMIT 1"); + if(!$checkmengen) { + $this->app->DB->Update("UPDATE auftrag SET status = 'abgeschlossen' + WHERE id = '$teillieferungvon' LIMIT 1"); + } + $this->app->erp->ANABREGSNeuberechnen($teillieferungvon,$aktbelegart); + } + } + } + if($beleg['artikel_rabatt']) { + $this->app->DB->Update("UPDATE auftrag_position SET rabatt = '".$beleg['artikel_rabatt']."' + WHERE id = '$belegpos' LIMIT 1"); + } + if($beleg['artikel_waehrung']) { + $this->app->DB->Update("UPDATE auftrag_position + SET waehrung = '".$this->app->DB->real_escape_string($beleg['artikel_waehrung'])."' + WHERE id = '$belegpos' LIMIT 1"); + } + + break; + case 'rechnung': + $belegpos = $this->app->erp->AddRechnungPositionManuell($aktbelegid, $beleg['artikel'], + ($beleg['artikel_preis']/$beleg['artikel_preisfuermenge']),$beleg['artikel_menge'],$beleg['artikel_bezeichnung'], + $beleg['artikel_bezeichnung'],$beleg['artikel_waehrung']); + if(!$belegpos) { + $belegpos = $this->app->DB->GetInsertID(); + } + + if($beleg['artikel_rabatt'])$this->app->DB->Update("UPDATE rechnung_position + SET rabatt = '".$beleg['artikel_rabatt']."' WHERE id = '$belegpos' LIMIT 1"); + + break; + case 'gutschrift': + $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM gutschrift_position WHERE gutschrift = '$aktbelegid'"); + + $this->app->DB->Insert("INSERT INTO gutschrift_position (gutschrift, artikel, sort, + preis, menge, waehrung, rabatt, bezeichnung,beschreibung) + values ('".$aktbelegid."','".$beleg['artikel']."','".$sort."', + '".($beleg['artikel_preis']/$beleg['artikel_preisfuermenge'])."','".$beleg['artikel_menge']."', + '".$this->app->DB->real_escape_string($beleg['artikel_waehrung'])."','".$beleg['artikel_rabatt']."', + '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."')"); + + $belegpos = $this->app->DB->GetInsertID(); + break; + case 'bestellung': + $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM bestellung_position WHERE bestellung = '$aktbelegid'"); + + $umsatzsteuer = $beleg['artikel_umsatzsteuer'] === 'ermaessigt'?'ermaessigt':''; + $datum = $this->app->DB->Select("SELECT datum FROM bestellung WHERE id = '$aktbelegid' LIMIT 1"); + + $einkauf = $this->app->erp->Einkaufspreis($beleg['artikel'],$beleg['artikel_menge'],$beleg['adresse']); + + if(!empty($einkauf)){ + $bestellnummer = $this->app->DB->Select( + sprintf( + 'SELECT e.bestellnummer FROM `einkaufspreise` AS `e` WHERE e.id = %d', + $einkauf + ) + ); + $bestellnummer = $this->app->DB->real_escape_string($bestellnummer); + } + + if(empty($bestellnummer)){ + $bestellnummer = $this->app->DB->real_escape_string($beleg['artikel_nummer']); + } + + $this->app->DB->Insert( + sprintf( + "INSERT INTO bestellung_position (bestellung,artikel,bezeichnunglieferant,bestellnummer,menge,preis, + waehrung, sort,lieferdatum, umsatzsteuer, status,projekt, beschreibung) + VALUES (%d,%d,'%s','%s',%f,%f, + '%s',%d,'%s','%s', + 'angelegt','%s','%s')", + (int)$aktbelegid, + (int)$beleg['artikel'], + $this->app->DB->real_escape_string($beleg['artikel_bezeichnung']), + $bestellnummer, + (float)$beleg['artikel_menge'], + (float)($beleg['artikel_preis']/$beleg['artikel_preisfuermenge']), + $this->app->DB->real_escape_string($beleg['artikel_waehrung']), + $sort,$datum,$umsatzsteuer, + $this->app->DB->real_escape_string($beleg['artikel_bezeichnung']), + $this->app->DB->real_escape_string($beleg['artikel_beschreibung']) + ) + ); + + $belegpos = $this->app->DB->GetInsertID(); + break; + case 'angebot': + $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM angebot_position WHERE angebot = '$aktbelegid'"); + + $umsatzsteuer = $beleg['artikel_umsatzsteuer'] === 'ermaessigt'?'ermaessigt':''; + $datum = $this->app->DB->Select("SELECT datum FROM angebot WHERE id = '$aktbelegid' LIMIT 1"); + + $this->app->DB->Insert("INSERT INTO angebot_position (angebot,artikel,beschreibung,bezeichnung,nummer,menge,preis, + waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) + VALUES ($aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."', + '".$beleg['artikel_menge']."','".($beleg['artikel_preis']/$beleg['artikel_preisfuermenge'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_waehrung'])."','$sort','$datum','$umsatzsteuer','angelegt', + '$projekt','')"); + + $belegpos = $this->app->DB->GetInsertID(); + break; + case 'lieferschein': + $datum = '0000-00-00'; + $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM lieferschein_position WHERE lieferschein = '$aktbelegid'"); + + $this->app->DB->Insert("INSERT INTO lieferschein_position (lieferschein,artikel,beschreibung,bezeichnung,nummer,menge, + sort,lieferdatum, status,projekt) + VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."', + '$sort','$datum','angelegt','$projekt')"); + + $belegpos = $this->app->DB->GetInsertID(); + break; + case 'retoure': + $datum = '0000-00-00'; + $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM retoure_position WHERE retoure = '$aktbelegid'"); + + $this->app->DB->Insert("INSERT INTO retoure_position (retoure,artikel,beschreibung,bezeichnung,nummer,menge, + sort,lieferdatum, projekt) + VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."', + '$sort','$datum','$projekt')"); + + $belegpos = $this->app->DB->GetInsertID(); + break; + case 'preisanfrage': + $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM preisanfrage_position WHERE preisanfrage= '$aktbelegid'"); + $datum = $this->app->DB->Select("SELECT datum FROM preisanfrage WHERE id = '$aktbelegid' LIMIT 1"); + $this->app->DB->Insert("INSERT INTO preisanfrage_position (preisanfrage,artikel,beschreibung,bezeichnung,nummer,menge, + sort,lieferdatum, status,projekt) + VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."', + '$sort','$datum','angelegt','$projekt')"); + + $belegpos = $this->app->DB->GetInsertID(); + + break; + case 'proformarechnung': + $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM proformarechnung_position WHERE proformarechnung = '$aktbelegid'"); + $datum = $this->app->DB->Select("SELECT datum FROM proformarechnung WHERE id = '$aktbelegid' LIMIT 1"); + $umsatzsteuer = $beleg['artikel_umsatzsteuer'] === 'ermaessigt'?'ermaessigt':''; + $this->app->DB->Insert("INSERT INTO proformarechnung_position (proformarechnung,artikel,beschreibung,bezeichnung, + nummer,menge, sort,lieferdatum, status,projekt,umsatzsteuer) + VALUES ($aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."','$sort', + '$datum','angelegt','$projekt','$umsatzsteuer')"); + + $belegpos = $this->app->DB->GetInsertID(); + break; + case 'produktion': + $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM produktion_position WHERE produktion= '$aktbelegid'"); + $datum = $this->app->DB->Select("SELECT datum FROM produktion WHERE id = '$aktbelegid' LIMIT 1"); + $this->app->DB->Insert("INSERT INTO produktion_position (produktion,artikel,beschreibung,bezeichnung,nummer,menge, + sort,lieferdatum, status,projekt) + VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."', + '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."','$sort', + '$datum','angelegt','$projekt')"); + + $belegpos = $this->app->DB->GetInsertID(); + $already_new_item_is_bom = $this->app->DB->Select( + sprintf('SELECT stueckliste FROM artikel WHERE id=%d AND produktion=1', + $beleg['artikel'] + ) + ); + $already = $this->app->DB->Select( + sprintf( + 'SELECT id FROM produktion_position WHERE produktion=%d AND explodiert=1 LIMIT 1', + $aktbelegid + ) + ); + + if(!$already || !$already_new_item_is_bom) { + /** @var Produktion $objProduction */ + $objProduction = $this->app->erp->LoadModul('produktion'); + if(!empty($objProduction) && method_exists($objProduction, 'addArbeitsanweisungenFunktionsprotokoll')) { + $objProduction->addArbeitsanweisungenFunktionsprotokoll($aktbelegid,$belegpos, $beleg['artikel']); + } + } + if(!empty($objProduction)){ + $this->app->erp->AuftragExplodieren($aktbelegid, 'produktion'); + $objProduction->ProduktionEinzelnBerechnen($aktbelegid); + $objProduction->ProduktionNeuberechnen($aktbelegid); + } + break; + default: + break; + } + if($belegpos) + { + $artikelnummerkunde = $this->app->DB->real_escape_string( + $this->app->DB->Select( + "SELECT kundenartikelnummer + FROM verkaufspreise + WHERE adresse='".$beleg['beleg_adresse']."' AND artikel='".$beleg['artikel']."' + AND kundenartikelnummer!='' AND ab_menge <=". + (float)$beleg['artikel_menge']." + AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') + ORDER by ab_menge DESC + LIMIT 1" + )); + + if($artikelnummerkunde == ''){ + // Anzeige Artikel Nummer von Gruppe aus Verkaufspreis + $returnwaehrung = null; + $gruppevkresult = $this->app->erp->GetVerkaufspreis( + $beleg['artikel'], + (float)$beleg['artikel_menge'], + $beleg['adresse'], + !empty($beleg['artikel_waehrung'])?$beleg['artikel_waehrung']:'EUR', + $returnwaehrung, + true + ); + if($gruppevkresult['kundenartikelnummer'] != ''){ + $artikelnummerkunde = $gruppevkresult['kundenartikelnummer']; + } + } + + if(!empty($artikelnummerkunde)) { + $this->app->DB->Update( + sprintf( + "UPDATE `%s` SET artikelnummerkunde = '%s' WHERE id = %d ", + $aktbelegart.'_position', + $this->app->DB->real_escape_string($artikelnummerkunde), + $belegpos + ) + ); + } + + + $felder = array('artikelnummerkunde','herkunftsland','zolltarifnummer','einheit','lieferdatum'); + for($i = 1; $i <= 20; $i++) { + $felder[] = 'freifeld'.$i; + } + foreach($felder as $feld) + { + $this->app->DB->Update("UPDATE ".$aktbelegart."_position + SET $feld = '".$this->app->DB->real_escape_string($beleg['artikel_'.$feld])."' + WHERE id = '$belegpos' LIMIT 1"); + } + $this->app->erp->ANABREGSNeuberechnen($aktbelegid,$aktbelegart); + $this->app->DB->Delete("DELETE FROM belegeimport WHERE id = '".$beleg['id']."' LIMIT 1"); + } + } + } + } + } + foreach ($erstelltebelegeids as $belegid => $belegart) { + //Nachträgliches löschen aller Belegnummern aus den Angeboten wenn Status == angelegt + $this->app->DB->Update("UPDATE " . $belegart . " SET belegnr = '' WHERE id = '$belegid' LIMIT 1"); + } + foreach ($erstelltebelegeNichtAngelegtids as $belegid => $belegart) { + if($this->app->DB->Select( + sprintf(' + SELECT id + FROM `%s` + WHERE id = %d AND (status = \'freigegeben\' OR status = \'abgeschlossen\' OR status = \'versendet\') AND belegnr = \'\' + ', $belegart, $belegid + ) + ) + ){ + $this->app->erp->BelegFreigabe($belegart, $belegid); + } + } + $msg = $this->app->erp->base64_url_encode("
Die Belege wurden importiert!
"); + }else{ + $msg = $this->app->erp->base64_url_encode("
Keine Belege zum Importieren gefunden!
"); + } + if($uebertragungen) { + return $ret; + } + if($idliste) { + return !empty($belege)?count($belege):0; + } + return $msg; + } + + public function BelegeimportDatei($_datei = null, $uebertragungen = false) + { + $ret = null; + $_projekt = 0; + if($uebertragungen) { + $_projekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '$uebertragungen' LIMIT 1"); + } + if($_datei === null) + { + //$this->app->erp->BelegeimportMenu(); + //$this->app->YUI->TableSearch('TAB1','belegeimport_list', 'show','','',basename(__FILE__), __CLASS__); + + $art = $this->app->Secure->GetPOST("art"); + $status = $this->app->Secure->GetPOST("status"); + $datei = (int)$this->app->Secure->GetGET('datei'); + }else{ + $ret = null; + $art = ''; + $datei = $_datei; + $status = 'angelegt'; + } + if($uebertragungen) { + $api = $this->app->DB->Select("SELECT api FROM uebertragungen_account WHERE id = '$uebertragungen' LIMIT 1"); + } + $row = 1; + if($_datei === null) + { + $art = $this->app->Secure->GetPOST("art"); + $status = $this->app->Secure->GetPOST("status"); + $datei = (int)$this->app->Secure->GetGET('datei'); + }else{ + $ret = null; + $art = ''; + $datei = $_datei; + $status = 'angelegt'; + } + + if($datei || (!empty($_FILES['datei']) && !empty($_FILES['datei']['tmp_name']))) + { + if ( + ($handle = fopen( + $_datei === null?(isset($_FILES['datei'])?$_FILES['datei']['tmp_name']:$this->app->erp->GetDateiPfad($datei)):$datei, + 'r') + ) !== FALSE + ) { + $vkpreisex = false; + $artikel_bezeichnung = false; + $beleg_datum = false; + $menge = false; + $beleg_art = false; + $beleg_nr_parent = 0; + $oldbeleg_belegnr = ''; + $fields = []; + $csvseparator = $this->app->DB->Select( + sprintf( + 'SELECT csvseparator FROM uebertragungen_account WHERE id = %d', + $uebertragungen + ) + ); + if(empty($csvseparator)) { + $csvseparator = ';'; + } + while (($data = fgetcsv($handle, 0, $csvseparator,'"')) !== FALSE) { + $num = (!empty($data)?count($data):0); + //echo "

$num Felder in Zeile $row:

\n"; + + if($row > 1){ + if($_datei !== null) { + $status = 'angelegt'; + } + for ($c=0; $c < $num; $c++){ + if($fields[$c] === 'art' && $data[$c]) { + $art = trim(strtolower($data[$c])); + } + } + $this->app->DB->Insert("INSERT INTO belegeimport (userid,status,art) VALUES ('".($_datei === null?$this->app->User->GetID():0)."','$status','$art')"); + $rowid = $this->app->DB->GetInsertID(); + if($uebertragungen) { + $this->app->DB->Update("UPDATE belegeimport SET beleg_projekt = '$_projekt' WHERE id = '$rowid' LIMIT 1"); + } + $ret[] = $rowid; + } + $preis = 0; + $preisfuermenge = 1; + $projekt = $_projekt; + $tmpartikelid = 0; + $tmpadresseid = 0; + for ($c=0; $c < $num; $c++){ + if($row==1){ + $fields[$c]=$this->app->DB->real_escape_string($data[$c]); + if($fields[$c] === 'artikel_preis')$vkpreisex = str_replace(',','.',$c); + if($fields[$c] === 'artikel_menge')$menge = str_replace(',','.',$c); + if($fields[$c] === 'artikel_bezeichnung')$artikel_bezeichnung = $c; + if($fields[$c] === 'beleg_datum')$beleg_datum = $c; + if($fields[$c] === 'beleg_art')$beleg_art = $c; + }else{ + switch($fields[$c]) + { + case 'beleg_status': + if(in_array($data[$c],['angelegt','freigegeben','storniert','abgeschlossen','gestartet','versendet'])) { + $status = $data[$c]; + + } + + break; + case 'beleg_belegnr': + + if($uebertragungen && ($data[$c] != '' && $data[$c] == $oldbeleg_belegnr)) + { + $data[$c] = 'PARENT'; + }elseif($uebertragungen && $oldbeleg_belegnr != $data[$c] && $data[$c] !== 'NEW' && $data[$c] !== 'PARENT') + { + $oldbeleg_belegnr = $data[$c]; + } + + if(($data[$c] !== 'PARENT' && $status === 'angelegt') || $data[$c] == ''){ + $data[$c] = "NEW"; + } + + if($data[$c] === 'PARENT'){ + if($beleg_nr_parent){ + //Übernimm Belegnummer der vorherigen Zeile + $data[$c] = $beleg_nr_parent; + }else{ + //Falls vor dieser PARENT Zeile kein Eintrag vorhanden ist soll sie als NEW betrachtet werden + $data[$c] = 'NEW'; + } + } + + + if($data[$c] === 'NEW'){ + if($status === 'angelegt'){ + //Neue Entwurfsbelegnummer + $data[$c] = 'ENTWURF_'.$rowid.'_'; + }else{ + //suche nächste freie Belegnummer falls NEW oder leere Belegnummer + $data[$c] = $this->app->erp->GetNextNummer($art); + } + $oldbeleg_belegnr = $data[$c]; + } + //Merke die aktuelle Belegnummer falls der nächste Eintrag PARENT ist + $beleg_nr_parent = $data[$c]; + break; + + case 'beleg_projekt': + if((!is_numeric($data[$c]) || strpos($data[$c],'.') !== false) && $data[$c]) + { + $data[$c] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($data[$c])."' LIMIT 1"); + if($data[$c]) { + $projekt = $data[$c]; + } + } + break; + + case 'artikel': + if($uebertragungen && $api) + { + if(!$tmpartikelid) + { + $tmpartikelid = $this->app->DB->Select( + "SELECT id_int + FROM api_mapping + WHERE id_ext = '%s' AND id_ext != '' AND id_int <> 0 AND tabelle = 'artikel' AND api = %d + LIMIT 1", + $data[$c], (int)$api + ); + if($tmpartikelid > 0) { + $this->app->DB->Update("UPDATE belegeimport SET artikel='$tmpartikelid' WHERE id='".$rowid."' LIMIT 1"); + } + } + } + break; + + case 'artikel_nummer': + if(!$tmpartikelid) { + $tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$this->app->DB->real_escape_string($data[$c])."' AND nummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1"); + } + if($tmpartikelid > 0) { + $this->app->DB->Update("UPDATE belegeimport SET artikel='$tmpartikelid' WHERE id='".$rowid."' LIMIT 1"); + } + break; + + case 'artikel_ean': + if(!$tmpartikelid)$tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='".$this->app->DB->real_escape_string($data[$c])."' AND ean != '' AND nummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1"); + if($tmpartikelid > 0) { + $this->app->DB->Update("UPDATE belegeimport SET artikel='$tmpartikelid' WHERE id='".$rowid."' LIMIT 1"); + } + break; + + case 'adresse': + if($uebertragungen && $api) + { + $tmpadresseid = (int)$data[$c]; + } + break; + + case 'beleg_kundennummer': + if(!$tmpadresseid) + { + $tmpadresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$this->app->DB->real_escape_string($data[$c])."' AND kundennummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1"); + if($tmpadresseid > 0) { + $this->app->DB->Update("UPDATE belegeimport SET adresse='$tmpadresseid' WHERE id='".$rowid."' LIMIT 1"); + } + else $tmpadresseid = 0; + } + if($data[$c]=='') { + $data[$c] = 'NEW'; + } + break; + case 'beleg_lieferantennummer': + if(!$tmpadresseid) + { + $tmpadresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$this->app->DB->real_escape_string($data[$c])."' AND lieferantennummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1"); + if($tmpadresseid > 0) { + $this->app->DB->Update("UPDATE belegeimport SET adresse='$tmpadresseid' WHERE id='".$rowid."' LIMIT 1"); + } + else $tmpadresseid = 0; + } + if($data[$c]=='') { + $data[$c] = 'NEW'; + } + break; + + case 'beleg_datum': + if(strpos($data[$c],'.') !== false) + { + $datuma = explode('.',$data[$c]); + if((!empty($datuma)?count($datuma):0) == 3) + { + if(strlen($datuma[2]) == 2) + { + $curryear = date("Y")-2000; + if((int)$datuma[2] <= $curryear) + { + $data[$c] = $datuma[0].'.'.$datuma[1].'.20'.$datuma[2]; + }else{ + $data[$c] = $datuma[0].'.'.$datuma[1].'.19'.$datuma[2]; + } + } + } + $data[$c] = date('Y-m-d',strtotime($data[$c])); + } + break; + + case 'beleg_lieferdatum': + if(strpos($data[$c],'.') !== false) + { + $datuma = explode('.',$data[$c]); + if((!empty($datuma)?count($datuma):0) == 3) + { + if(strlen($datuma[2]) == 2) + { + $curryear = date("Y")-2000; + if((int)$datuma[2] <= $curryear) + { + $data[$c] = $datuma[0].'.'.$datuma[1].'.20'.$datuma[2]; + }else{ + $data[$c] = $datuma[0].'.'.$datuma[1].'.19'.$datuma[2]; + } + } + } + $data[$c] = date('Y-m-d',strtotime($data[$c])); + } + break; + + case 'beleg_tatsaechlicheslieferdatum': + if(strpos($data[$c],'.') !== false) + { + $datuma = explode('.',$data[$c]); + if((!empty($datuma)?count($datuma):0) == 3) + { + if(strlen($datuma[2]) == 2) + { + $curryear = date("Y")-2000; + if((int)$datuma[2] <= $curryear) + { + $data[$c] = $datuma[0].'.'.$datuma[1].'.20'.$datuma[2]; + }else{ + $data[$c] = $datuma[0].'.'.$datuma[1].'.19'.$datuma[2]; + } + } + } + $data[$c] = date('Y-m-d',strtotime($data[$c])); + } + break; + + case 'artikel_lieferdatum': + if(strpos($data[$c],'.') !== false) + { + $datuma = explode('.',$data[$c]); + if((!empty($datuma)?count($datuma):0) == 3) + { + if(strlen($datuma[2]) == 2) + { + $curryear = date("Y")-2000; + if((int)$datuma[2] <= $curryear) + { + $data[$c] = $datuma[0].'.'.$datuma[1].'.20'.$datuma[2]; + }else{ + $data[$c] = $datuma[0].'.'.$datuma[1].'.19'.$datuma[2]; + } + } + } + $data[$c] = date('Y-m-d',strtotime($data[$c])); + } + break; + + case 'artikel_preis': + $preis = str_replace(',','.',$data[$c]); + if ($preisfuermenge == 0) { + $preisfuermenge =1; + } + $data[$c] = $preis / $preisfuermenge; + break; + case 'artikel_preisfuermenge': + $preisfuermenge = str_replace(',','.',$data[$c]); + if ($preisfuermenge == 0) { + $preisfuermenge =1; + } + $data['artikel_preis'] = $preis / $preisfuermenge; + break; + case 'artikel_rabatt': + case 'artikel_menge': + $data[$c] = str_replace(',','.',$data[$c]); + break; + + } + if(isset($fields[$c]) && $fields[$c]) + { + $this->app->DB->Update("UPDATE belegeimport SET ".$fields[$c]." = '".$this->app->DB->real_escape_string($data[$c])."' WHERE id='".$rowid."' LIMIT 1"); + } + if(!empty($status)) { + $this->app->DB->Update( + sprintf( + "UPDATE belegeimport SET status = '%s' WHERE id = %d", + $this->app->DB->real_escape_string($status), $rowid + ) + ); + } + + } + //echo $data[$c] . "
\n"; + } + + if($row > 1){ + if($menge === false) + { + $this->app->DB->Update("UPDATE belegeimport SET artikel_menge = 1 WHERE id='".$rowid."' LIMIT 1"); + } + if($beleg_datum === false) + { + $this->app->DB->Update("UPDATE belegeimport SET beleg_datum = now() WHERE id = '".$rowid."' LIMIT 1"); + } + if($tmpadresseid && $beleg_art === false) + { + $arttmp = $this->app->DB->Select("SELECT art FROM adresse WHERE id = '$tmpadresseid' LIMIT 1"); + if($arttmp) { + $this->app->DB->Update("UPDATE belegeimport SET beleg_art = '".$this->app->DB->real_escape_string($arttmp)."' WHERE id = '".$rowid."' LIMIT 1"); + } + } + if( $tmpartikelid) + { + if($vkpreisex === false) + { + $this->app->DB->Update("UPDATE belegeimport SET artikel_preis = '".$this->app->erp->GetVerkaufspreis($tmpartikelid,($menge === false?1: ($data[$menge]>0?$data[$menge]:1)),$tmpadresseid )."' WHERE id = '".$rowid."' LIMIT 1"); + } + if($artikel_bezeichnung === false) + { + $this->app->DB->Update("UPDATE belegeimport SET artikel_bezeichnung = '".$this->app->DB->real_escape_string($this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$tmpartikelid' LIMIT 1" ))."' WHERE id = '".$rowid."' LIMIT 1"); + } + } + if(!$data[$menge]){ + //Artikel mit Menge 0 entfernen + $this->app->DB->Update("DELETE FROM belegeimport WHERE id='".$rowid."'"); + } + } + + $row++; + } + fclose($handle); + } + } + return $ret; + } + } diff --git a/www/pages/api_account.php b/www/pages/api_account.php index 81cbdb87..f8ef94bd 100644 --- a/www/pages/api_account.php +++ b/www/pages/api_account.php @@ -1,298 +1,304 @@ -Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; - - $sql = "SELECT aa.id, aa.id, aa.bezeichnung, - if(aa.aktiv = 1, 'ja','nein') as aktiv, - aa.id - FROM `api_account` AS `aa` - "; - $fastcount = "SELECT COUNT(`aa`.`id`) FROM `api_account` AS `aa`"; - - break; - - } - - $erg = []; - foreach($erlaubtevars as $k => $v) { - if(isset($$v)) { - $erg[$v] = $$v; - } - } - return $erg; - } - - /** - * Api_account constructor. - * - * @param Application $app - * @param bool $intern - */ - public function __construct($app, $intern = false) - { - $this->app=$app; - if($intern) { - return; - } - $this->app->ActionHandlerInit($this); - - $this->app->ActionHandler("create","Api_AccountCreate"); - $this->app->ActionHandler("edit","Api_AccountEdit"); - $this->app->ActionHandler("list","Api_AccountList"); - $this->app->ActionHandler("delete","Api_AccountDelete"); - - $this->app->DefaultActionHandler('list'); - $this->app->ActionHandlerListen($app); - } - - function Api_AccountCreate(){ - - } - - function Api_AccountEdit(){ - - } - - public function Api_AccountDelete(){ - $id = $this->app->Secure->GetGET('id'); - $this->app->DB->Delete(sprintf('DELETE FROM `api_account` WHERE `id` = %d', $id)); - $this->app->Location->execute('index.php?module=api_account&action=list'); - } - - - /** - * @return JsonResponse - */ - public function HandleGetAjaxAction() - { - $id = (int)$this->app->Secure->GetPOST('id'); - if($id === 0) { - $data = [ - 'aktiv' => 0, - 'id' => '', - 'bezeichnung' => '', - 'projekt' => '', - 'remotedomain' => '', - 'initkey' => '', - 'importwarteschlange' => 0, - 'importwarteschlange_name' => '', - 'event_url' => '', - 'cleanutf8' => 0, - 'apitempkey' => '', - 'ishtmltransformation' => 0, - ]; - - return new JsonResponse($data); - } - if($id > 0) { - $data = $this->app->DB->SelectRow( - sprintf( - "SELECT a.id, a.bezeichnung, a.aktiv, p.abkuerzung AS `projekt`, a.remotedomain, a.initkey, - a.importwarteschlange, a.importwarteschlange_name, a.cleanutf8, a.event_url, a.permissions, a.ishtmltransformation - FROM `api_account` AS `a` - LEFT JOIN `projekt` AS `p` ON a.projekt = p.id - WHERE a.id = %d", - $id - ) - ); - /** @var Api $api */ - $api = $this->app->loadModule('api'); - $data['apitempkey'] = $api->generateHashFromDomainAndKey($data['initkey'], $data['remotedomain']); - if(!empty($data)) { - return new JsonResponse($data); - } - } - - return new JsonResponse(['error'=>'Account nicht gefunden'], JsonResponse::HTTP_BAD_REQUEST); - } - - /** - * @return JsonResponse - */ - public function HandleSaveAjaxAction() - { - if(!$this->app->erp->RechteVorhanden('api_account', 'edit')) { - return new JsonResponse(['error'=>'Fehlende Rechte'], JsonResponse::HTTP_BAD_REQUEST); - } - - $id = (int)$this->app->Secure->GetPOST('id'); - $bezeichnung = $this->app->Secure->GetPOST('bezeichnung'); - if(empty($bezeichnung)) { - return new JsonResponse(['error'=>'Bitte füllen Sie die Bezeichnung aus'], JsonResponse::HTTP_BAD_REQUEST); - } - $projekt = (string)$this->app->Secure->GetPOST('projekt'); - if($projekt !== ''){ - $projekt = (int)$this->app->erp->ReplaceProjekt(1, $projekt, 1); - } - else { - $projekt = 0; - } - $aktiv = (int)(bool)$this->app->Secure->GetPOST('aktiv'); - $importwarteschlange = (int)(bool)$this->app->Secure->GetPOST('importwarteschlange'); - $cleanutf8 = (int)(bool)$this->app->Secure->GetPOST('cleanutf8'); - $remotedomain = $this->app->Secure->GetPOST('remotedomain'); - $initkey = $this->app->Secure->GetPOST('initkey'); - $importwarteschlange_name = $this->app->Secure->GetPOST('importwarteschlange_name'); - $event_url = $this->app->Secure->GetPOST('event_url'); - $isHtmlTransformation = (int)(bool)$this->app->Secure->GetPOST('ishtmltransformation'); - $api_permissions = $this->prepareApiPermissions($this->app->Secure->GetPOST('api_permissions')); - if($id <= 0) { - $this->app->DB->Insert( - sprintf( - "INSERT INTO `api_account` - (`bezeichnung`, `initkey`, `importwarteschlange_name`, `event_url`, `remotedomain`, `aktiv`, - `importwarteschlange`, `cleanutf8`, `uebertragung_account`, `projekt`, `permissions`, `ishtmltransformation`) - VALUES ('%s', '%s', '%s', '%s', '%s', %d, - %d, %d, 0, %d, '%s', %d) ", - $bezeichnung, $initkey, $importwarteschlange_name, $event_url, $remotedomain, $aktiv, - $importwarteschlange, $cleanutf8, $projekt, $api_permissions, $isHtmlTransformation - ) - ); - $id = (int)$this->app->DB->GetInsertID(); - if($id){ - $data = ['success' => true, 'id' => $id]; - return new JsonResponse($data); - } - return new JsonResponse(['error'=>'Account konnte nicht erstellt werden'], JsonResponse::HTTP_BAD_REQUEST); - } - - $data = $this->app->DB->SelectRow( - sprintf( - "SELECT a.id, a.bezeichnung, a.aktiv, p.abkuerzung AS `projekt`, a.remotedomain, a.initkey, - a.importwarteschlange, a.importwarteschlange_name, a.cleanutf8, a.event_url, a.permissions, a.ishtmltransformation - FROM `api_account` AS `a` - LEFT JOIN `projekt` AS `p` ON a.projekt = p.id - WHERE a.id = %d", - $id - ) - ); - if(empty($data)) { - return new JsonResponse(['error'=>'Account nicht gefunden'], JsonResponse::HTTP_BAD_REQUEST); - } - $this->app->DB->Update( - sprintf( - "UPDATE `api_account` - SET `bezeichnung` = '%s', - `initkey` = '%s', - `importwarteschlange_name` = '%s', - `event_url` = '%s', - `remotedomain` = '%s', - `aktiv` = %d, - `importwarteschlange` = %d, - `cleanutf8` = %d, - `uebertragung_account` = 0, - `projekt` = %d , - `permissions` = '%s', - `ishtmltransformation` = %d - WHERE `id` = %d", - $bezeichnung, $initkey, $importwarteschlange_name, $event_url, $remotedomain, $aktiv, - $importwarteschlange, $cleanutf8, $projekt, $api_permissions, $isHtmlTransformation, $id - ) - ); - if(empty($this->app->DB->error())) { - $data = ['success' => true, 'id' => $id]; - return new JsonResponse($data); - } - return new JsonResponse(['error'=>'Account konnte nicht geändert werden'], JsonResponse::HTTP_BAD_REQUEST); - } - - private function prepareApiPermissions(array $apiPermissions){ - $cleanedPermissions = []; - foreach ($apiPermissions as $permission => $value){ - if($value === 'true'){ - $cleanedPermissions[] = $permission; - } - } - - return json_encode($cleanedPermissions); - } - - public function Api_AccountList(){ - $cmd = $this->app->Secure->GetGET('cmd'); - if($cmd === 'get') { - return $this->HandleGetAjaxAction(); - } - if($cmd === 'save') { - return $this->HandleSaveAjaxAction(); - } - - $apiPermissions = $this->app->DB->SelectArr("SELECT * FROM `api_permission`"); - - $groupedApiPermissions = []; - foreach ($apiPermissions as $apiPermission){ - $groupedApiPermissions[$apiPermission['group']][] =$apiPermission; - } - - $apiPermissionsHtml = ''; - foreach ($groupedApiPermissions as $group => $permissions) { - $apiPermissionsHtml .= ''; - $apiPermissionsHtml .= "{$group}"; - $apiPermissionsHtml .= ""; - foreach ($permissions as $permission){ - $apiPermissionsHtml .= ""; - $apiPermissionsHtml .= "
"; - } - $apiPermissionsHtml .= ""; - $apiPermissionsHtml .= ''; - } - - $this->app->YUI->TableSearch('TAB1','api_account_list', 'show','','',basename(__FILE__), __CLASS__); - $this->app->erp->MenuEintrag('#', 'Neu'); - $this->app->erp->MenuEintrag('index.php?module=api_account&action=list', 'Übersicht'); - $this->app->erp->Headlines('API Account'); - $this->app->Tpl->Set('API_PERMISSIONS_HTML', $apiPermissionsHtml); - $this->app->YUI->Autocomplete('projekt', 'projektname', 1); - $this->app->Tpl->Parse('PAGE','api_account_list.tpl'); - } -} +Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"; + + $sql = "SELECT aa.id, aa.id, aa.bezeichnung, + if(aa.aktiv = 1, 'ja','nein') as aktiv, + aa.id + FROM `api_account` AS `aa` + "; + $fastcount = "SELECT COUNT(`aa`.`id`) FROM `api_account` AS `aa`"; + + break; + + } + + $erg = []; + foreach($erlaubtevars as $k => $v) { + if(isset($$v)) { + $erg[$v] = $$v; + } + } + return $erg; + } + + /** + * Api_account constructor. + * + * @param Application $app + * @param bool $intern + */ + public function __construct($app, $intern = false) + { + $this->app=$app; + if($intern) { + return; + } + $this->app->ActionHandlerInit($this); + + $this->app->ActionHandler("create","Api_AccountCreate"); + $this->app->ActionHandler("edit","Api_AccountEdit"); + $this->app->ActionHandler("list","Api_AccountList"); + $this->app->ActionHandler("delete","Api_AccountDelete"); + + $this->app->DefaultActionHandler('list'); + $this->app->ActionHandlerListen($app); + } + + function Api_AccountCreate(){ + + } + + function Api_AccountEdit(){ + + } + + public function Api_AccountDelete(){ + $id = $this->app->Secure->GetGET('id'); + $this->app->DB->Delete(sprintf('DELETE FROM `api_account` WHERE `id` = %d', $id)); + $this->app->Location->execute('index.php?module=api_account&action=list'); + } + + + /** + * @return JsonResponse + */ + public function HandleGetAjaxAction() + { + $id = (int)$this->app->Secure->GetPOST('id'); + if($id === 0) { + $data = [ + 'aktiv' => 0, + 'id' => '', + 'bezeichnung' => '', + 'projekt' => '', + 'remotedomain' => '', + 'initkey' => '', + 'importwarteschlange' => 0, + 'importwarteschlange_name' => '', + 'event_url' => '', + 'cleanutf8' => 0, + 'apitempkey' => '', + 'ishtmltransformation' => 0, + ]; + + return new JsonResponse($data); + } + if($id > 0) { + $data = $this->app->DB->SelectRow( + sprintf( + "SELECT a.id, a.bezeichnung, a.aktiv, p.abkuerzung AS `projekt`, a.remotedomain, a.initkey, + a.importwarteschlange, a.importwarteschlange_name, a.cleanutf8, a.event_url, a.permissions, a.ishtmltransformation + FROM `api_account` AS `a` + LEFT JOIN `projekt` AS `p` ON a.projekt = p.id + WHERE a.id = %d", + $id + ) + ); + /** @var Api $api */ + $api = $this->app->loadModule('api'); + $data['apitempkey'] = $api->generateHashFromDomainAndKey($data['initkey'], $data['remotedomain']); + if(!empty($data)) { + return new JsonResponse($data); + } + } + + return new JsonResponse(['error'=>'Account nicht gefunden'], JsonResponse::HTTP_BAD_REQUEST); + } + + /** + * @return JsonResponse + */ + public function HandleSaveAjaxAction() + { + if(!$this->app->erp->RechteVorhanden('api_account', 'edit')) { + return new JsonResponse(['error'=>'Fehlende Rechte'], JsonResponse::HTTP_BAD_REQUEST); + } + + $id = (int)$this->app->Secure->GetPOST('id'); + $bezeichnung = $this->app->Secure->GetPOST('bezeichnung'); + if(empty($bezeichnung)) { + return new JsonResponse(['error'=>'Bitte füllen Sie die Bezeichnung aus'], JsonResponse::HTTP_BAD_REQUEST); + } + $projekt = (string)$this->app->Secure->GetPOST('projekt'); + if($projekt !== ''){ + $projekt = (int)$this->app->erp->ReplaceProjekt(1, $projekt, 1); + } + else { + $projekt = 0; + } + $aktiv = (int)(bool)$this->app->Secure->GetPOST('aktiv'); + $importwarteschlange = (int)(bool)$this->app->Secure->GetPOST('importwarteschlange'); + $cleanutf8 = (int)(bool)$this->app->Secure->GetPOST('cleanutf8'); + $remotedomain = $this->app->Secure->GetPOST('remotedomain'); + $initkey = $this->app->Secure->GetPOST('initkey'); + $importwarteschlange_name = $this->app->Secure->GetPOST('importwarteschlange_name'); + $event_url = $this->app->Secure->GetPOST('event_url'); + $isHtmlTransformation = (int)(bool)$this->app->Secure->GetPOST('ishtmltransformation'); + $api_permissions = $this->prepareApiPermissions($this->app->Secure->GetPOST('api_permissions')); + if($id <= 0) { + $this->app->DB->Insert( + sprintf( + "INSERT INTO `api_account` + (`bezeichnung`, `initkey`, `importwarteschlange_name`, `event_url`, `remotedomain`, `aktiv`, + `importwarteschlange`, `cleanutf8`, `uebertragung_account`, `projekt`, `permissions`, `ishtmltransformation`) + VALUES ('%s', '%s', '%s', '%s', '%s', %d, + %d, %d, 0, %d, '%s', %d) ", + $bezeichnung, $initkey, $importwarteschlange_name, $event_url, $remotedomain, $aktiv, + $importwarteschlange, $cleanutf8, $projekt, $api_permissions, $isHtmlTransformation + ) + ); + $id = (int)$this->app->DB->GetInsertID(); + if($id){ + $data = ['success' => true, 'id' => $id]; + return new JsonResponse($data); + } + return new JsonResponse(['error'=>'Account konnte nicht erstellt werden'], JsonResponse::HTTP_BAD_REQUEST); + } + + $data = $this->app->DB->SelectRow( + sprintf( + "SELECT a.id, a.bezeichnung, a.aktiv, p.abkuerzung AS `projekt`, a.remotedomain, a.initkey, + a.importwarteschlange, a.importwarteschlange_name, a.cleanutf8, a.event_url, a.permissions, a.ishtmltransformation + FROM `api_account` AS `a` + LEFT JOIN `projekt` AS `p` ON a.projekt = p.id + WHERE a.id = %d", + $id + ) + ); + if(empty($data)) { + return new JsonResponse(['error'=>'Account nicht gefunden'], JsonResponse::HTTP_BAD_REQUEST); + } + $this->app->DB->Update( + sprintf( + "UPDATE `api_account` + SET `bezeichnung` = '%s', + `initkey` = '%s', + `importwarteschlange_name` = '%s', + `event_url` = '%s', + `remotedomain` = '%s', + `aktiv` = %d, + `importwarteschlange` = %d, + `cleanutf8` = %d, + `uebertragung_account` = 0, + `projekt` = %d , + `permissions` = '%s', + `ishtmltransformation` = %d + WHERE `id` = %d", + $bezeichnung, $initkey, $importwarteschlange_name, $event_url, $remotedomain, $aktiv, + $importwarteschlange, $cleanutf8, $projekt, $api_permissions, $isHtmlTransformation, $id + ) + ); + if(empty($this->app->DB->error())) { + $data = ['success' => true, 'id' => $id]; + return new JsonResponse($data); + } + return new JsonResponse(['error'=>'Account konnte nicht geändert werden'], JsonResponse::HTTP_BAD_REQUEST); + } + + private function prepareApiPermissions(array $apiPermissions){ + $cleanedPermissions = []; + foreach ($apiPermissions as $permission => $value){ + if($value === 'true'){ + $cleanedPermissions[] = $permission; + } + } + + return json_encode($cleanedPermissions); + } + + public function Api_AccountList(){ + $cmd = $this->app->Secure->GetGET('cmd'); + if($cmd === 'get') { + return $this->HandleGetAjaxAction(); + } + if($cmd === 'save') { + return $this->HandleSaveAjaxAction(); + } + + $apiPermissions = $this->app->DB->SelectArr("SELECT * FROM `api_permission`"); + + if (empty($apiPermissions)) { + $api = $this->app->loadModule('api'); + $api->fillApiPermissions(); + $apiPermissions = $this->app->DB->SelectArr("SELECT * FROM `api_permission`"); + } + + $groupedApiPermissions = []; + foreach ($apiPermissions as $apiPermission){ + $groupedApiPermissions[$apiPermission['group']][] =$apiPermission; + } + + $apiPermissionsHtml = ''; + foreach ($groupedApiPermissions as $group => $permissions) { + $apiPermissionsHtml .= ''; + $apiPermissionsHtml .= "{$group}"; + $apiPermissionsHtml .= ""; + foreach ($permissions as $permission){ + $apiPermissionsHtml .= ""; + $apiPermissionsHtml .= "
"; + } + $apiPermissionsHtml .= ""; + $apiPermissionsHtml .= ''; + } + + $this->app->YUI->TableSearch('TAB1','api_account_list', 'show','','',basename(__FILE__), __CLASS__); + $this->app->erp->MenuEintrag('#', 'Neu'); + $this->app->erp->MenuEintrag('index.php?module=api_account&action=list', 'Übersicht'); + $this->app->erp->Headlines('API Account'); + $this->app->Tpl->Set('API_PERMISSIONS_HTML', $apiPermissionsHtml); + $this->app->YUI->Autocomplete('projekt', 'projektname', 1); + $this->app->Tpl->Parse('PAGE','api_account_list.tpl'); + } +} From 8f9ed4d7aeafd6ec7e3881326f442d0d287b5ed4 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Mon, 25 Dec 2023 21:30:58 +0100 Subject: [PATCH 07/62] zwischenstand verbindlichkeit filert, multi-action, forms --- phpwf/plugins/class.yui.php | 17 +- www/pages/content/verbindlichkeit_edit.tpl | 28 ++-- www/pages/content/verbindlichkeit_list.tpl | 56 ++++++- www/pages/verbindlichkeit.php | 173 +++++++++++++++++++-- 4 files changed, 233 insertions(+), 41 deletions(-) diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index d01d209c..61630ae7 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -3606,24 +3606,11 @@ class YUI { $stop_betragbezahlt = "\"Zahlungapp->Conf->WFconf['defaulttheme']}/images/vorkassestop.png\" style=\"margin-right:1px\" title=\"Zahlung fehlt\" border=\"0\">"; $gostop_betragbezahlt = "\"teilweiseapp->Conf->WFconf['defaulttheme']}/images/vorkassegostop.png\" style=\"margin-right:1px\" title=\"teilweise bezahlt\" border=\"0\">"; - $go_betragbezahlt = "\"nichtapp->Conf->WFconf['defaulttheme']}/images/vorkassego.png\" style=\"margin-right:1px\" title=\"komplett bezahlt\" border=\"0\">"; + $go_betragbezahlt = "\"nichtapp->Conf->WFconf['defaulttheme']}/images/vorkassego.png\" style=\"margin-right:1px\" title=\"bezahlt\" border=\"0\">"; return "CONCAT('
', if(v.freigabe,'$go_ware','$stop_ware'), if(v.rechnungsfreigabe,'$go_summe','$stop_summe'), - IF( v.betragbezahlt = 0 OR (v.betrag > 0 AND v.betragbezahlt < 0),'$stop_betragbezahlt', - IF(v.betrag > 0 AND (v.betragbezahlt + v.skonto_erhalten) >= v.betrag, '$go_betragbezahlt', - IF(v.betrag - v.betragbezahlt <= v.betrag-((v.betrag/100.0)*v.skonto), - '$gostop_betragbezahlt', - '$go_betragbezahlt' - ) - ) - ), - if(( - (SELECT COUNT(ka.id) - FROM kontoauszuege_zahlungsausgang ka WHERE ka.parameter=v.id AND ka.objekt='verbindlichkeit') + - (SELECT COUNT(ke.id) FROM kontoauszuege_zahlungseingang ke WHERE ke.parameter=v.id AND ke.objekt='verbindlichkeit')) > 0, - '$go_zahlung','$stop_zahlung' - ), + if(v.bezahlt,'$go_betragbezahlt','$stop_betragbezahlt'), '
')"; } diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl index 005111c2..c99b1428 100644 --- a/www/pages/content/verbindlichkeit_edit.tpl +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -45,7 +45,7 @@ {|Adresse|}: - + @@ -74,16 +74,24 @@ - {|Betrag|}: + {|Betrag brutto|}: - + - + - {|Betrag netto|}: + {|Betrag Positionen brutto|}: + + + + + + + + {|Betrag Positionen netto|}: @@ -118,7 +126,7 @@ {|Waren-/Leistungsprüfung (Einkauf)|}: - + Wird gesetzt wenn Wareneingangspositionen vollständig @@ -126,7 +134,8 @@ {|Rechnungseingangsprüfung (Buchhaltung)|}: - + + @@ -134,9 +143,10 @@ {|Bezahlt|}: - + + - + {|Projekt|}: diff --git a/www/pages/content/verbindlichkeit_list.tpl b/www/pages/content/verbindlichkeit_list.tpl index 394c103a..6a846aae 100644 --- a/www/pages/content/verbindlichkeit_list.tpl +++ b/www/pages/content/verbindlichkeit_list.tpl @@ -4,7 +4,61 @@
[MESSAGE] - [TAB1] + +
+
+
{|Filter|}
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
+
+ +
+
+
+ +
+ [TAB1] +
{|Stapelverarbeitung|} +  {|alle markieren|}  + +   +
+
[TAB1NEXT]
+ + diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index a0d39f3e..5343876e 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -24,6 +24,9 @@ class Verbindlichkeit { $this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf"); $this->app->ActionHandler("positioneneditpopup", "verbindlichkeit_positioneneditpopup"); $this->app->ActionHandler("freigabe", "verbindlichkeit_freigabe"); + $this->app->ActionHandler("freigabeeinkauf", "verbindlichkeit_freigabeeinkauf"); + $this->app->ActionHandler("freigabebuchhaltung", "verbindlichkeit_freigabebuchhaltung"); + $this->app->ActionHandler("freigabebezahlt", "verbindlichkeit_freigabebezahlt"); $this->app->DefaultActionHandler("list"); $this->app->ActionHandlerListen($app); @@ -33,7 +36,7 @@ class Verbindlichkeit { /* Fill out manually later */ } - static function TableSearch(&$app, $name, $erlaubtevars) { + function TableSearch(&$app, $name, $erlaubtevars) { switch ($name) { case "verbindlichkeit_list": $allowed['verbindlichkeit_list'] = array('list'); @@ -105,6 +108,52 @@ class Verbindlichkeit { $count = "SELECT count(DISTINCT id) FROM verbindlichkeit WHERE $where"; // $groupby = ""; + // Toggle filters + $this->app->Tpl->Add('JQUERYREADY', "$('#wareneingang').click( function() { fnFilterColumn1( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#rechnungsfreigabe').click( function() { fnFilterColumn2( 0 ); } );"); + $this->app->Tpl->Add('JQUERYREADY', "$('#nichtbezahlt').click( function() { fnFilterColumn3( 0 ); } );"); + + for ($r = 1;$r <= 3;$r++) { + $this->app->Tpl->Add('JAVASCRIPT', ' + function fnFilterColumn' . $r . ' ( i ) + { + if(oMoreData' . $r . $name . '==1) + oMoreData' . $r . $name . ' = 0; + else + oMoreData' . $r . $name . ' = 1; + + $(\'#' . $name . '\').dataTable().fnFilter( + \'\', + i, + 0,0 + ); + } + '); + } + + + $more_data1 = $this->app->Secure->GetGET("more_data1"); + if ($more_data1 == 1) { + $where .= " AND v.freigabe <> '1'"; + } else { + } + + $more_data2 = $this->app->Secure->GetGET("more_data2"); + if ($more_data2 == 1) { + $where .= " AND v.rechnungsfreigabe <> '1'"; + } + else { + } + + $more_data3 = $this->app->Secure->GetGET("more_data3"); + if ($more_data3 == 1) { + $where .= " AND v.bezahlt <> '1'"; + } + else { + } + // END Toggle filters + + break; } @@ -119,12 +168,55 @@ class Verbindlichkeit { } function verbindlichkeit_list() { + + // Process multi action + $submit = $this->app->Secure->GetPOST('ausfuehren'); + if (!empty($submit)) { + $auswahl = $this->app->Secure->GetPOST('auswahl'); + $aktion = $this->app->Secure->GetPOST('sel_aktion'); + + $selectedIds = []; + if(!empty($auswahl)) { + foreach($auswahl as $selectedId) { + $selectedId = (int)$selectedId; + if($selectedId > 0) { + $selectedIds[] = $selectedId; + } + } + + switch ($aktion) { + case 'freigabeeinkauf': + echo("freigabeeinkauf"); + break; + case 'freigabebuchhaltung': + echo("freigabebuchhaltung"); + break; + case 'bezahlt': + echo("bezahlt"); + break; + } + } + } + $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__); + + if($this->app->erp->RechteVorhanden('verbindlichkeit', 'freigabeeinkauf')){ + $this->app->Tpl->Set('MANUELLFREIGABEEINKAUF', ''); + } + + if($this->app->erp->RechteVorhanden('verbindlichkeit', 'freigabebuchhaltung')){ + $this->app->Tpl->Set('MANUELLFREIGABEBUCHHALTUNG', ''); + } + + if($this->app->erp->RechteVorhanden('verbindlichkeit', 'freigabebezahlt')){ + $this->app->Tpl->Set('ALSBEZAHLTMARKIEREN', ''); + } + $this->app->Tpl->Parse('PAGE', "verbindlichkeit_list.tpl"); } @@ -175,17 +267,24 @@ class Verbindlichkeit { if ($status != 'angelegt' && $id != 'NULL') { $internebemerkung = $input['internebemerkung']; + $projekt = $input['projekt']; + $kostenstelle = $input['kostenstelle']; unset($input); $input['internebemerkung'] = $internebemerkung; + $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$projekt,true); + $input['kostenstelle'] = $this->app->erp->ReplaceKostenstelle(true,$kostenstelle,true); } else { - $input['adresse'] = $this->app->erp->ReplaceAdresse(true,$input['adresse'],true); // Parameters: Target db?, value, from form? + $input['adresse'] = $this->app->erp->ReplaceLieferantennummer(true,$input['adresse'],true); // Parameters: Target db?, value, from form? $input['rechnungsdatum'] = $this->app->erp->ReplaceDatum(true,$input['rechnungsdatum'],true); // Parameters: Target db?, value, from form? $input['eingangsdatum'] = $this->app->erp->ReplaceDatum(true,$input['eingangsdatum'],true); // Parameters: Target db?, value, from form? $input['skontobis'] = $this->app->erp->ReplaceDatum(true,$input['skontobis'],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['kostenstelle'] = $this->app->erp->ReplaceKostenstelle(true,$input['kostenstelle'],true); - $input['sachkonto'] = $this->app->erp->ReplaceKontorahmen(true,$input['sachkonto'],true); + + if(empty($input['projekt']) && !empty($input['adresse'])) { + $input['projekt'] = $this->app->erp->GetCreateProjekt($input['adresse']); + } } $columns = "id, "; @@ -272,7 +371,7 @@ class Verbindlichkeit { } $this->app->Tpl->Set('BETRAGNETTO', $betrag_netto); - $this->app->Tpl->Set('BETRAGBRUTTO', round($betrag_brutto,2)); + $this->app->Tpl->Set('BETRAGBRUTTOPOS', round($betrag_brutto,2)); $this->app->Tpl->Set('BETRAGDISABLED', 'disabled'); @@ -293,7 +392,14 @@ class Verbindlichkeit { $this->app->Tpl->Set('SAVEDISABLED','disabled'); } - $this->app->Tpl->Set('FREIGABECHECKED', $verbindlichkeit_from_db['freigabe']==1?"checked":""); + if ($verbindlichkeit_from_db['status'] == 'angelegt' || $verbindlichkeit_from_db['rechnungsfreigabe']) { + $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); + } + if ($verbindlichkeit_from_db['status'] == 'angelegt' || $verbindlichkeit_from_db['bezahlt'] == '1') { + $this->app->Tpl->Set('FREIGABEBEZAHLTHIDDEN','hidden'); + } + + $this->app->Tpl->Set('WARENEINGANGCHECKED', $verbindlichkeit_from_db['freigabe']==1?"checked":""); $this->app->Tpl->Set('RECHNUNGSFREIGABECHECKED', $verbindlichkeit_from_db['rechnungsfreigabe']==1?"checked":""); $this->app->Tpl->Set('BEZAHLTCHECKED', $verbindlichkeit_from_db['bezahlt']==1?"checked":""); @@ -306,26 +412,29 @@ class Verbindlichkeit { $this->app->Tpl->Set('ZAHLBARBIS',$this->app->erp->ReplaceDatum(false,$verbindlichkeit_from_db['zahlbarbis'],false)); $this->app->YUI->DatePicker("zahlbarbis"); - $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"); + $this->app->YUI->AutoComplete("adresse", "lieferant"); $this->app->YUI->AutoComplete("projekt", "projektname", 1); $this->app->Tpl->Set('PROJEKT',$this->app->erp->ReplaceProjekt(false,$verbindlichkeit_from_db['projekt'],false)); $this->app->YUI->AutoComplete("kostenstelle", "kostenstelle", 1); $this->app->Tpl->Set('KOSTENSTELLE',$this->app->erp->ReplaceKostenstelle(false,$verbindlichkeit_from_db['kostenstelle'],false)); - $this->app->YUI->AutoComplete("sachkonto","sachkonto_aufwendungen",1); - $this->app->Tpl->Set('SACHKONTO',$this->app->erp->ReplaceKontorahmen(false,$verbindlichkeit_from_db['sachkonto'],false)); $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 + $this->app->Tpl->Set('ADRESSE', $this->app->erp->ReplaceLieferantennummer(false,$verbindlichkeit_from_db['adresse'],false)); // Convert ID to form display + + if (empty($verbindlichkeit_from_db['adresse'])) { + $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); + $this->app->Tpl->Set('FREIGABEBEZAHLTHIDDEN','hidden'); + } + + $this->app->YUI->CkEditor("internebemerkung"); $anzahldateien = $this->app->erp->AnzahlDateien("verbindlichkeit",$id); if ($anzahldateien > 0) { @@ -360,13 +469,15 @@ class Verbindlichkeit { $input['freigabe'] = $this->app->Secure->GetPOST('freigabe')?'1':'0'; $input['rechnungsfreigabe'] = $this->app->Secure->GetPOST('rechnungsfreigabe')?'1':'0'; $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) { + $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"); + $anzahldateien = $this->app->erp->AnzahlDateien("verbindlichkeit",$id); if ($anzahldateien > 0) { $anzahldateien = " (".$anzahldateien.")"; @@ -378,16 +489,13 @@ class Verbindlichkeit { $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=dateien&id=$id", "Dateien".$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"); - $invoiceArr = $this->app->DB->SelectRow("SELECT v.belegnr, a.name, v.status FROM verbindlichkeit v LEFT JOIN adresse a ON v.adresse = a.id WHERE v.id='$id' LIMIT 1"); $belegnr = $invoiceArr['belegnr']; $name = $invoiceArr['name']; if($belegnr=='0' || $belegnr=='') { $belegnr ='(Entwurf)'; } - $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Rechnung $belegnr"); + $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Verbindlichkeit $belegnr"); $status = $invoiceArr['status']; if ($status==='angelegt') { $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=freigabe&id=$id",'Freigabe'); @@ -515,5 +623,38 @@ class Verbindlichkeit { $this->verbindlichkeit_edit(); } + function verbindlichkeit_freigabeeinkauf($id) + { + if (empty($id)) { + $id = $this->app->Secure->GetGET('id'); + } + $sql = "UPDATE verbindlichkeit SET freigabe = 1 WHERE id=".$id; + $this->app->DB->Update($sql); + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben (Einkauf)"); + $this->verbindlichkeit_edit(); + } + + + function verbindlichkeit_freigabebuchhaltung($id) + { + if (empty($id)) { + $id = $this->app->Secure->GetGET('id'); + } + $sql = "UPDATE verbindlichkeit SET rechnungsfreigabe = 1 WHERE id=".$id; + $this->app->DB->Update($sql); + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben (Buchhaltung)"); + $this->verbindlichkeit_edit(); + } + + function verbindlichkeit_freigabebezahlt($id) + { + if (empty($id)) { + $id = $this->app->Secure->GetGET('id'); + } + $sql = "UPDATE verbindlichkeit SET bezahlt = 1 WHERE id=".$id; + $this->app->DB->Update($sql); + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit als bezahlt markiert"); + $this->verbindlichkeit_edit(); + } } From 302bfee669d792c94a2c41673d8cff8ac1c8d292 Mon Sep 17 00:00:00 2001 From: ibs Date: Mon, 25 Dec 2023 23:28:04 +0100 Subject: [PATCH 08/62] =?UTF-8?q?alternative=20Bezeichnung=20f=C3=BCr=20Re?= =?UTF-8?q?chnungen=20als=20Standard=20per=20Settings=20festlegen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/struktur.sql | 4 +++- languages/german/tooltip.php | 1 + www/lib/class.erpapi.php | 3 ++- www/pages/content/firmendaten.tpl | 1 + www/pages/rechnung.php | 16 +++++++++------- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/database/struktur.sql b/database/struktur.sql index d33cb3f8..43e917b2 100755 --- a/database/struktur.sql +++ b/database/struktur.sql @@ -16729,7 +16729,9 @@ INSERT INTO `firmendaten_werte` (`id`, `name`, `typ`, `typ1`, `typ2`, `wert`, `d (386, 'cleaner_shopimport_tage', 'int', '11', '', '90', '90', 0, 0), (387, 'cleaner_adapterbox', 'tinyint', '1', '', '1', '1', 0, 0), (388, 'cleaner_adapterbox_tage', 'int', '11', '', '90', '90', 0, 0), -(389, 'bcc3', 'varchar', '128', '', '', '', 0, 0) +(389, 'bcc3', 'varchar', '128', '', '', '', 0, 0), +(390, 'rechnungersatz_standard', 'int', '1', '', '0', '0', 0, 0) + ; INSERT INTO `geschaeftsbrief_vorlagen` (`id`, `sprache`, `betreff`, `text`, `subjekt`, `projekt`, `firma`) VALUES diff --git a/languages/german/tooltip.php b/languages/german/tooltip.php index 6f54377f..bf12413a 100644 --- a/languages/german/tooltip.php +++ b/languages/german/tooltip.php @@ -765,6 +765,7 @@ $tooltip['firmendaten']['edit']['bezeichnungangebotersatz']="Im Angebot gibt es $tooltip['firmendaten']['edit']['angebotersatz_standard']="Mit dieser Option setzen Sie die alternative Bezeichnung im Angebot (Option drüber) als Standard. Dadurch ist der Haken beim Erstellen eines neuen Angebots immer gesetzt."; $tooltip['firmendaten']['edit']['bezeichnungauftragersatz']="Im Auftrag gibt es einen Haken um den Betreff des Augtrag-Belegs umzubenennen.
Mit der Option hier legen Sie den Namen des alternativen Betreffs fest."; $tooltip['firmendaten']['edit']['bezeichnungrechnungersatz']="In der Rechnung gibt es einen Haken um den Betreff des Rechnung-Belegs umzubenennen.
Mit der Option hier legen Sie den Namen des alternativen Betreffs fest."; +$tooltip['firmendaten']['edit']['rechnungersatz_standard']="Mit dieser Option setzen Sie die alternative Bezeichnung in der Rechnung (Option drüber) als Standard. Dadurch ist der Haken beim Erstellen einer neuen Rechnung immer gesetzt."; $tooltip['firmendaten']['edit']['bezeichnunglieferscheinersatz']="Im Lieferschein gibt es einen Haken um den Betreff des Lieferschein-Belegs umzubenennen.
Mit der Option hier legen Sie den Namen des alternativen Betreffs fest."; $tooltip['firmendaten']['edit']['bezeichnungbestellungersatz']="In der Bestellung gibt es einen Haken um den Betreff des Bestell-Belegs umzubenennen.
Mit der Option hier legen Sie den Namen des alternativen Betreffs fest."; $tooltip['firmendaten']['edit']['bezeichnungproformarechnungersatz']="In der Proformarechnung gibt es einen Haken um den Betreff der Proformarechnung-Belegs umzubenennen.
Mit der Option hier legen Sie den Namen des alternativen Betreffs fest."; diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 87e71fc0..baf09110 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -8605,6 +8605,7 @@ function StandardFirmendatenWerte() $this->AddNeuenFirmendatenWert( 'bezeichnungproformarechnungersatz', 'varchar', '64', '', 'Lieferschein mit Preis', 'Lieferschein mit Preis', 0, 0); $this->AddNeuenFirmendatenWert( 'bezeichnungauftragersatz', 'varchar', '64', '', 'Proformarechnung', 'Proformarechnung', 0, 0); $this->AddNeuenFirmendatenWert( 'bezeichnungrechnungersatz', 'varchar', '64', '', 'Quittung', 'Quittung', 0, 0); + $this->AddNeuenFirmendatenWert( 'rechnungersatz_standard', 'int', '1', '', '0', '0', 0, 0); $this->AddNeuenFirmendatenWert( 'bezeichnunglieferscheinersatz', 'varchar', '64', '', 'Alternative Beschriftung', 'Alternative Beschriftung', 0, 0); $this->AddNeuenFirmendatenWert( 'bezeichnungbestellungersatz', 'varchar', '64', '', 'Alternative Beschriftung', 'Alternative Beschriftung', 0, 0); $this->AddNeuenFirmendatenWert( 'footer_zentriert', 'int', '1', '', '0', '0', 0, 0); @@ -27033,7 +27034,7 @@ function Firmendaten($field,$projekt="") 'zahlung_amazon_bestellung','zahlung_billsafe','zahlung_sofortueberweisung','zahlung_secupay','zahlung_eckarte','zeiterfassung_schliessen','zeiterfassung_pflicht', 'zahlung_kreditkarte','zahlung_nachnahme','zahlung_ratenzahlung','knickfalz','begrenzen_artikeltabelle','begrenzen_adressetabelle','begrenzen_belege','schnellsuche','schnellsuchecount','versandmail_zwischenspeichern','keinhauptmenurahmen','bordertabnav','steuerfrei_inland_ausblenden','auftragexplodieren_unterstuecklisten', 'standardaufloesung','immerbruttorechnungen','immernettorechnungen','bestellvorschlaggroessernull','erweiterte_positionsansicht','schnellanlegen','kleinunternehmer','steuerspalteausblenden','api_enable','api_importwarteschlange','warnung_doppelte_nummern','warnung_doppelte_seriennummern','wareneingang_zwischenlager','bestellungohnepreis','zahlung_lastschrift_konditionen','porto_berechnen','breite_artikelbeschreibung','deviceenable','auftrag_eantab','bestellungmitartikeltext','bestellungeigeneartikelnummer','bestellunglangeartikelnummern','steuer_standardkonto_aufwendungen', - 'iconset_dunkel','api_cleanutf8','mahnwesenmitkontoabgleich','briefhtml','absenderunterstrichen','seite_von_ausrichtung_relativ','wareneingang_gross','datatables_export_button_flash','viernachkommastellen_belege','stornorechnung_standard','angebotersatz_standard','geburtstagekalender','footer_zentriert','auftragmarkierenegsaldo','wareneingangauftragzubestellung','freifelderimdokument','zeiterfassung_anderemitarbeiter','zeiterfassung_beschreibungssperre','zeiterfassung_ort','zeiterfassung_kommentar','zeiterfassung_erweitert','footer_reihenfolge_angebot_aktivieren','footer_reihenfolge_auftrag_aktivieren','footer_reihenfolge_rechnung_aktivieren','footer_reihenfolge_gutschrift_aktivieren','footer_reihenfolge_lieferschein_aktivieren','footer_reihenfolge_bestellung_aktivieren','position_quantity_change_price_update', + 'iconset_dunkel','api_cleanutf8','mahnwesenmitkontoabgleich','briefhtml','absenderunterstrichen','seite_von_ausrichtung_relativ','wareneingang_gross','datatables_export_button_flash','viernachkommastellen_belege','stornorechnung_standard','angebotersatz_standard','rechnungersatz_standard','geburtstagekalender','footer_zentriert','auftragmarkierenegsaldo','wareneingangauftragzubestellung','freifelderimdokument','zeiterfassung_anderemitarbeiter','zeiterfassung_beschreibungssperre','zeiterfassung_ort','zeiterfassung_kommentar','zeiterfassung_erweitert','footer_reihenfolge_angebot_aktivieren','footer_reihenfolge_auftrag_aktivieren','footer_reihenfolge_rechnung_aktivieren','footer_reihenfolge_gutschrift_aktivieren','footer_reihenfolge_lieferschein_aktivieren','footer_reihenfolge_bestellung_aktivieren','position_quantity_change_price_update', 'beleg_pos_ean','beleg_pos_charge','beleg_pos_mhd','beleg_pos_sn','beleg_pos_zolltarifnummer', 'schnellanlegen_ohnefreigabe','langeartikelnummern','noauth','belege_subpositionen', 'belege_subpositionenstuecklisten','briefpapier_ohnedoppelstrich','bearbeiteremailimdokument', diff --git a/www/pages/content/firmendaten.tpl b/www/pages/content/firmendaten.tpl index a3110f77..5f7ca4c9 100644 --- a/www/pages/content/firmendaten.tpl +++ b/www/pages/content/firmendaten.tpl @@ -1412,6 +1412,7 @@ [BEZEICHNUNGANGEBOTERSATZ] als Standard: Beschriftung Abweichend Auftrag: Beschriftung im Auftrag Beschriftung Abweichend Rechnung: Beschriftung in Rechnung + [BEZEICHNUNGRECHNUNGERSATZ] als Standard: Beschriftung Abweichend Gutschrift: laut 06/2013 §14 UStG [BEZEICHNUNGSTORNORECHNUNG] als Standard: Beschriftung Abweichend Lieferschein: Beschriftung in Lieferschein diff --git a/www/pages/rechnung.php b/www/pages/rechnung.php index 6004b87c..60a6b361 100644 --- a/www/pages/rechnung.php +++ b/www/pages/rechnung.php @@ -2362,6 +2362,7 @@ class Rechnung extends GenRechnung $belegmax = ''; $ohnebriefpapier = $this->app->erp->Firmendaten('rechnung_ohnebriefpapier'); + $abweichendebezeichnung = $this->app->erp->Firmendaten('rechnungersatz_standard'); $usereditid = 0; if(isset($this->app->User) && $this->app->User && method_exists($this->app->User,'GetID')){ @@ -2375,24 +2376,24 @@ class Rechnung extends GenRechnung zahlungszieltageskonto, zahlungszielskonto, lieferdatum, - status,projekt,adresse,auftragid,ohne_briefpapier,angelegtam,usereditid) + status,projekt,adresse,auftragid,ohne_briefpapier,angelegtam,usereditid,abweichendebezeichnung) VALUES ('',NOW(),'','".$this->app->User->GetFirma()."','$belegmax','".$this->app->erp->StandardZahlungsweise($projekt)."', '".$this->app->erp->ZahlungsZielTage($projekt)."', '".$this->app->erp->ZahlungsZielTageSkonto($projekt)."', '".$this->app->erp->ZahlungsZielSkonto($projekt)."',NOW(), - 'angelegt','$projekt','$adresse',0,'".$ohnebriefpapier."',NOW(),'$usereditid')"); + 'angelegt','$projekt','$adresse',0,'".$ohnebriefpapier."',NOW(),'$usereditid',$abweichendebezeichnung)"); } else { $this->app->DB->Insert("INSERT INTO rechnung (id,datum,bearbeiter,firma,belegnr,zahlungsweise, zahlungszieltage, zahlungszieltageskonto, zahlungszielskonto, lieferdatum, - status,projekt,adresse,auftragid,ohne_briefpapier,angelegtam,usereditid) + status,projekt,adresse,auftragid,ohne_briefpapier,angelegtam,usereditid,abweichendebezeichnung) VALUES ('',NOW(),'','".$this->app->User->GetFirma()."','$belegmax','".$this->app->erp->StandardZahlungsweise($projekt)."', '0', '0', '0',NOW(), - 'angelegt','$projekt','$adresse',0,'".$ohnebriefpapier."',NOW(),'$usereditid')"); + 'angelegt','$projekt','$adresse',0,'".$ohnebriefpapier."',NOW(),'$usereditid',$abweichendebezeichnung)"); } $id = $this->app->DB->GetInsertID(); @@ -2518,9 +2519,6 @@ class Rechnung extends GenRechnung $this->app->Secure->POST[$value] = str_replace("'", ''',$arr[0][$value]); $uparr[$value] = str_replace("'", ''',$arr[0][$value]); } - - //$this->app->Secure->POST[$value] = $arr[0][$value]; - //$uparr[$value] = $arr[0][$value]; } $uparr['adresse'] = $adresse; @@ -2531,6 +2529,10 @@ class Rechnung extends GenRechnung $uparr['ohne_briefpapier'] = '1'; } + if($this->app->erp->Firmendaten('rechnungersatz_standard')=='1'){ + $uparr['abweichendebezeichnung']=1; + } + $this->app->DB->UpdateArr('rechnung',$id,'id',$uparr,true); $uparr=null; From afd60b382bd4d25ac469f8912000dde7d0a9c2bc Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 27 Dec 2023 18:17:30 +0100 Subject: [PATCH 09/62] verbindlichkeit version 1 --- www/pages/ajax.php | 1 + www/pages/content/verbindlichkeit_edit.tpl | 28 +- www/pages/content/verbindlichkeit_list.tpl | 8 + .../content/verbindlichkeit_minidetail.tpl | 240 +++++----------- www/pages/verbindlichkeit.php | 259 +++++++++++++++--- 5 files changed, 326 insertions(+), 210 deletions(-) diff --git a/www/pages/ajax.php b/www/pages/ajax.php index 231cfcca..2a8cb88b 100644 --- a/www/pages/ajax.php +++ b/www/pages/ajax.php @@ -2448,6 +2448,7 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku $subwhere = $this->AjaxFilterWhere($termorig,$felder); $arr = $this->app->DB->SelectArr("SELECT CONCAT(nummer,' ',beschreibung) as name FROM kostenstellen WHERE $subwhere ORDER by nummer"); + $carr = !empty($arr)?count($arr):0; for($i = 0; $i < $carr; $i++) $newarr[] = $arr[$i]['name']; diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl index c99b1428..8e908c75 100644 --- a/www/pages/content/verbindlichkeit_edit.tpl +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -1,7 +1,8 @@
[MESSAGE] @@ -50,10 +51,10 @@ - {|Rechnung|}: + {|Rechnungs-Nr.|}: - + @@ -78,10 +79,10 @@ - + - + {|Betrag Positionen brutto|}: @@ -89,7 +90,7 @@ - + {|Betrag Positionen netto|}: @@ -126,7 +127,9 @@ {|Waren-/Leistungsprüfung (Einkauf)|}: - Wird gesetzt wenn Wareneingangspositionen vollständig + + + @@ -135,7 +138,8 @@ - + + @@ -144,7 +148,8 @@ - + + @@ -191,8 +196,13 @@
+ +
+ [MINIDETAIL] +
diff --git a/www/pages/content/verbindlichkeit_list.tpl b/www/pages/content/verbindlichkeit_list.tpl index 6a846aae..838328d1 100644 --- a/www/pages/content/verbindlichkeit_list.tpl +++ b/www/pages/content/verbindlichkeit_list.tpl @@ -30,6 +30,14 @@ +
  • + + +
  • +
  • + + +
  • diff --git a/www/pages/content/verbindlichkeit_minidetail.tpl b/www/pages/content/verbindlichkeit_minidetail.tpl index 9d0aa1cb..723fd770 100644 --- a/www/pages/content/verbindlichkeit_minidetail.tpl +++ b/www/pages/content/verbindlichkeit_minidetail.tpl @@ -1,176 +1,76 @@ - [FORMHANDLEREVENT] [MESSAGE] - - - - - - - -
    -
    {|Rechnungsdaten|} - + +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Lieferant:[ADRESSEAUTOSTART][ADRESSE][MSGADRESSE][ADRESSEAUTOEND] [MELDUNG] -
    [VERBINDLICHKEIT] -


    Rechnungs Nr.:


    [RECHNUNG][MSGRECHNUNG]
     
    Bestellung:[DISABLESTART][BESTELLUNG][MSGBESTELLUNG][MULTIBESTELLUNG][DISABLEENDE] Zahlweise:[ZAHLUNGSWEISE][MSGZAHLUNGSWEISE]
    Rechnungsdatum:[RECHNUNGSDATUM][MSGRECHNUNGSDATUM] Zahlbar bis:[ZAHLBARBIS][MSGZAHLBARBIS][DATUM_ZAHLBARBIS]
    Betrag/Total (Brutto):[BETRAG][MSGBETRAG] [WAEHRUNG][MSGWAEHRUNG] Skonto in %:[SKONTO][MSGSKONTO]
    USt. 19%:[SUMMENORMAL][MSGSUMMENORMAL] Skonto bis:[SKONTOBIS][MSGSKONTOBIS][DATUM_SKONTOBIS]
    USt. 7%:[SUMMEERMAESSIGT][MSGSUMMEERMAESSIGT] Umsatzsteuer[UMSATZSTEUER][MSGUMSATZSTEUER]
    [STEUERSATZNAME3][SUMMESATZ3][MSGSUMMESATZ3] [STEUERSATZNAME4][SUMMESATZ4][MSGSUMMESATZ4]
    Verwendungszweck:[VERWENDUNGSZWECK][MSGVERWENDUNGSZWECK] Frachtkosten:[FRACHTKOSTEN][MSGFRACHTKOSTEN]
    Projekt:[PROJEKT][MSGKOSTENSTELLE] 
    Kostenstelle:[KOSTENSTELLE][MSGKOSTENSTELLE] Freigabe:[MSGFREIGABE] Wareneingangsprüfung: [FREIGABE] [MSGRECHNUNGSFREIGABE] Rechnungseingangsprüfung: [RECHNUNGSFREIGABE]
    Sachkonto:[SACHKONTO][MSGSACHKONTO] Aktion:[BUTTONBEZAHLT]
    Interne Bemerkung:[INTERNEBEMERKUNG]
    - - - -
    -
    - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    - - - -[TABELLEBESTELLUNGEN] - -
    -
    - - - - - - - -
    Summe VerbindlichkeitSumme Kontierung
    [SUMMEVERBINDLICHKEIT][SUMMEKONTIERUNG]
    - -[MESSAGEVORKONTIERUNG] -[VORKONTIERUNG] -[ZAHLUNGEN] - -
    -

    {|Protokoll|}

    -
    - [PROTOKOLL] +
    Lieferant:[ADRESSEAUTOSTART][ADRESSE][MSGADRESSE][ADRESSEAUTOEND]
    Rechnungs-Nr.:[RECHNUNG][MSGRECHNUNG]
    Rechnungsdatum:[RECHNUNGSDATUM][MSGRECHNUNGSDATUM]
    Zahlbar bis:[ZAHLBARBIS][MSGZAHLBARBIS][DATUM_ZAHLBARBIS]
    Betrag/Total (Brutto):[BETRAG][MSGBETRAG] [WAEHRUNG][MSGWAEHRUNG]
    Skonto in %:[SKONTO][MSGSKONTO]
    Skonto bis:[SKONTOBIS][MSGSKONTOBIS][DATUM_SKONTOBIS]
    Projekt:[PROJEKT][MSGKOSTENSTELLE] 
    Kostenstelle:[KOSTENSTELLE][MSGKOSTENSTELLE] 
    Interne Bemerkung:[INTERNEBEMERKUNG]
    +
    +
    +

    Artikel

    +
    + [ARTIKEL] +
    +
    +
    +

    Buchungen

    +
    + [ZAHLUNGEN] +
    +
    +
    +

    Protokoll

    +
    + [PROTOKOLL] +
    +
    - - - - - - - - - diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index 5343876e..a1483ecf 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -24,9 +24,14 @@ class Verbindlichkeit { $this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf"); $this->app->ActionHandler("positioneneditpopup", "verbindlichkeit_positioneneditpopup"); $this->app->ActionHandler("freigabe", "verbindlichkeit_freigabe"); + $this->app->ActionHandler("schreibschutz", "verbindlichkeit_schreibschutz"); $this->app->ActionHandler("freigabeeinkauf", "verbindlichkeit_freigabeeinkauf"); $this->app->ActionHandler("freigabebuchhaltung", "verbindlichkeit_freigabebuchhaltung"); $this->app->ActionHandler("freigabebezahlt", "verbindlichkeit_freigabebezahlt"); + $this->app->ActionHandler("ruecksetzeneinkauf", "verbindlichkeit_ruecksetzeneinkauf"); + $this->app->ActionHandler("ruecksetzenbuchhaltung", "verbindlichkeit_ruecksetzenbuchhaltung"); + $this->app->ActionHandler("ruecksetzenbezahlt", "verbindlichkeit_ruecksetzenbezahlt"); + $this->app->ActionHandler("minidetail", "verbindlichkeit_minidetail"); $this->app->DefaultActionHandler("list"); $this->app->ActionHandlerListen($app); @@ -153,6 +158,22 @@ class Verbindlichkeit { } // END Toggle filters + $this->app->YUI->DatePicker('zahlbarbis'); + $filterzahlbarbis = $this->app->YUI->TableSearchFilter($name, 4,'zahlbarbis'); + if (!empty($filterzahlbarbis)) { + $filterzahlbarbis = $this->app->String->Convert($filterzahlbarbis,'%1.%2.%3','%3-%2-%1'); + $where .= " AND v.zahlbarbis <= '".$filterzahlbarbis."'"; + } + + $this->app->YUI->DatePicker('skontobis'); + $filterskontobis = $this->app->YUI->TableSearchFilter($name, 5,'skontobis'); + if (!empty($filterskontobis)) { + $filterskontobis = $this->app->String->Convert($filterskontobis,'%1.%2.%3','%3-%2-%1'); + $where .= " AND v.skontobis <= '".$filterskontobis."'"; + } + + $moreinfo = true; // Allow drop down details + $menucol = 1; // For moredata break; } @@ -186,13 +207,19 @@ class Verbindlichkeit { switch ($aktion) { case 'freigabeeinkauf': - echo("freigabeeinkauf"); + foreach ($selectedIds as $id) { + $this->verbindlichkeit_freigabeeinkauf($id); + } break; case 'freigabebuchhaltung': - echo("freigabebuchhaltung"); + foreach ($selectedIds as $id) { + $this->verbindlichkeit_freigabebuchhaltung($id); + } break; case 'bezahlt': - echo("bezahlt"); + foreach ($selectedIds as $id) { + $this->verbindlichkeit_freigabebezahlt($id); + } break; } } @@ -205,6 +232,10 @@ 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', ''); } @@ -216,6 +247,9 @@ 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', ''); $this->app->Tpl->Parse('PAGE', "verbindlichkeit_list.tpl"); } @@ -223,8 +257,8 @@ class Verbindlichkeit { 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', "
    Der Eintrag wurde gelöscht.
    "); + $this->app->DB->Delete("UPDATE `verbindlichkeit` SET status='storniert' WHERE `id` = '{$id}'"); + $this->app->Tpl->Set('MESSAGE', "
    Der Eintrag wurde storniert.
    "); $this->verbindlichkeit_list(); } @@ -263,16 +297,16 @@ class Verbindlichkeit { // Write to database // Add checks here - $status = $this->app->DB->Select("SELECT status FROM verbindlichkeit WHERE id =".$id); + $schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM verbindlichkeit WHERE id =".$id); - if ($status != 'angelegt' && $id != 'NULL') { + if ($schreibschutz) { $internebemerkung = $input['internebemerkung']; $projekt = $input['projekt']; $kostenstelle = $input['kostenstelle']; unset($input); $input['internebemerkung'] = $internebemerkung; $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$projekt,true); - $input['kostenstelle'] = $this->app->erp->ReplaceKostenstelle(true,$kostenstelle,true); + $input['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$kostenstelle."'"); } else { $input['adresse'] = $this->app->erp->ReplaceLieferantennummer(true,$input['adresse'],true); // Parameters: Target db?, value, from form? $input['rechnungsdatum'] = $this->app->erp->ReplaceDatum(true,$input['rechnungsdatum'],true); // Parameters: Target db?, value, from form? @@ -280,8 +314,7 @@ class Verbindlichkeit { $input['skontobis'] = $this->app->erp->ReplaceDatum(true,$input['skontobis'],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['kostenstelle'] = $this->app->erp->ReplaceKostenstelle(true,$input['kostenstelle'],true); - + $input['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$input['kostenstelle']."'"); if(empty($input['projekt']) && !empty($input['adresse'])) { $input['projekt'] = $this->app->erp->GetCreateProjekt($input['adresse']); } @@ -388,15 +421,31 @@ class Verbindlichkeit { */ - if ($verbindlichkeit_from_db['status'] != 'angelegt' && $id != 'NULL') { + if ($verbindlichkeit_from_db['schreibschutz']) { $this->app->Tpl->Set('SAVEDISABLED','disabled'); + $this->app->Tpl->Set('MESSAGE',"
    Diese Verbindlichkeit ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! 
    "); } - if ($verbindlichkeit_from_db['status'] == 'angelegt' || $verbindlichkeit_from_db['rechnungsfreigabe']) { + if (empty($verbindlichkeit_from_db['adresse'] || $verbindlichkeit_from_db['status'] == 'angelegt')) { + $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); + $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); + $this->app->Tpl->Set('FREIGABEBEZAHLTHIDDEN','hidden'); + } + + if ($verbindlichkeit_from_db['freigabe']) { + $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); + } else { + $this->app->Tpl->Set('RUECKSETZENEINKAUFHIDDEN','hidden'); + } + if ($verbindlichkeit_from_db['rechnungsfreigabe']) { $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); + } else { + $this->app->Tpl->Set('RUECKSETZENBUCHHALTUNGHIDDEN','hidden'); } - if ($verbindlichkeit_from_db['status'] == 'angelegt' || $verbindlichkeit_from_db['bezahlt'] == '1') { + if ($verbindlichkeit_from_db['bezahlt'] == '1') { $this->app->Tpl->Set('FREIGABEBEZAHLTHIDDEN','hidden'); + } else { + $this->app->Tpl->Set('RUECKSETZENBEZAHLTHIDDEN','hidden'); } $this->app->Tpl->Set('WARENEINGANGCHECKED', $verbindlichkeit_from_db['freigabe']==1?"checked":""); @@ -420,19 +469,14 @@ class Verbindlichkeit { $this->app->YUI->AutoComplete("projekt", "projektname", 1); $this->app->Tpl->Set('PROJEKT',$this->app->erp->ReplaceProjekt(false,$verbindlichkeit_from_db['projekt'],false)); $this->app->YUI->AutoComplete("kostenstelle", "kostenstelle", 1); - $this->app->Tpl->Set('KOSTENSTELLE',$this->app->erp->ReplaceKostenstelle(false,$verbindlichkeit_from_db['kostenstelle'],false)); + $this->app->Tpl->Set('KOSTENSTELLE',$this->app->DB->SELECT("SELECT nummer FROM kostenstellen WHERE id = '".$verbindlichkeit_from_db['kostenstelle']."'")); $waehrungenselect = $this->app->erp->GetSelect($this->app->erp->GetWaehrung(), $verbindlichkeit_from_db['waehrung']); - $this->app->Tpl->Set('WAEHRUNG', $waehrungenselect); + $this->app->Tpl->Set('WAEHRUNGSELECT', $waehrungenselect); $this->app->Tpl->Set('ADRESSE_ID', $verbindlichkeit_from_db['adresse']); - $this->app->Tpl->Set('ADRESSE', $this->app->erp->ReplaceLieferantennummer(false,$verbindlichkeit_from_db['adresse'],false)); // Convert ID to form display - - if (empty($verbindlichkeit_from_db['adresse'])) { - $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); - $this->app->Tpl->Set('FREIGABEBEZAHLTHIDDEN','hidden'); - } + $this->app->Tpl->Set('ADRESSE', $this->app->erp->ReplaceLieferantennummer(false,$verbindlichkeit_from_db['adresse'],false)); // Convert ID to form display $this->app->YUI->CkEditor("internebemerkung"); @@ -445,6 +489,7 @@ class Verbindlichkeit { $this->app->Tpl->Set('INLINEPDF', 'Keine Dateien vorhanden.'); } + $this->verbindlichkeit_minidetail('MINIDETAIL',false); $this->app->Tpl->Parse('PAGE', "verbindlichkeit_edit.tpl"); } @@ -489,15 +534,15 @@ class Verbindlichkeit { $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=dateien&id=$id", "Dateien".$anzahldateien); } - $invoiceArr = $this->app->DB->SelectRow("SELECT v.belegnr, a.name, v.status FROM verbindlichkeit v LEFT JOIN adresse a ON v.adresse = a.id WHERE v.id='$id' LIMIT 1"); + $invoiceArr = $this->app->DB->SelectRow("SELECT v.belegnr, a.name, v.status, schreibschutz FROM verbindlichkeit v LEFT JOIN adresse a ON v.adresse = a.id WHERE v.id='$id' LIMIT 1"); $belegnr = $invoiceArr['belegnr']; $name = $invoiceArr['name']; if($belegnr=='0' || $belegnr=='') { $belegnr ='(Entwurf)'; } $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Verbindlichkeit $belegnr"); - $status = $invoiceArr['status']; - if ($status==='angelegt') { + + if ($invoiceArr['status'] === 'angelegt' || $invoiceArr['schreibschutz'] != 1) { $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=freigabe&id=$id",'Freigabe'); } } @@ -620,41 +665,193 @@ class Verbindlichkeit { { $id = $this->app->Secure->GetGET('id'); $this->app->erp->BelegFreigabe('verbindlichkeit',$id); + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben"); + $this->app->DB->Update("UPDATE verbindlichkeit SET schreibschutz = 1 WHERE id = ".$id); $this->verbindlichkeit_edit(); } - function verbindlichkeit_freigabeeinkauf($id) + function verbindlichkeit_freigabeeinkauf($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); + $gotoedit = true; } $sql = "UPDATE verbindlichkeit SET freigabe = 1 WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben (Einkauf)"); - $this->verbindlichkeit_edit(); + if ($gotoedit) { + $this->verbindlichkeit_edit(); + } } - - function verbindlichkeit_freigabebuchhaltung($id) + function verbindlichkeit_freigabebuchhaltung($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); + $gotoedit = true; } $sql = "UPDATE verbindlichkeit SET rechnungsfreigabe = 1 WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben (Buchhaltung)"); - $this->verbindlichkeit_edit(); + if ($gotoedit) { + $this->verbindlichkeit_edit(); + } } - function verbindlichkeit_freigabebezahlt($id) + function verbindlichkeit_freigabebezahlt($id = null) { if (empty($id)) { $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"); - $this->verbindlichkeit_edit(); + if ($gotoedit) { + $this->verbindlichkeit_edit(); + } + } + + function verbindlichkeit_ruecksetzeneinkauf($id = null) + { + if (empty($id)) { + $id = $this->app->Secure->GetGET('id'); + $gotoedit = true; + } + $sql = "UPDATE verbindlichkeit SET freigabe = 0 WHERE id=".$id; + $this->app->DB->Update($sql); + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit rückgesetzt (Einkauf)"); + if ($gotoedit) { + $this->verbindlichkeit_edit(); + } } + function verbindlichkeit_ruecksetzenbuchhaltung($id = null) + { + if (empty($id)) { + $id = $this->app->Secure->GetGET('id'); + $gotoedit = true; + } + $sql = "UPDATE verbindlichkeit SET rechnungsfreigabe = 0 WHERE id=".$id; + $this->app->DB->Update($sql); + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit rückgesetzt (Buchhaltung)"); + if ($gotoedit) { + $this->verbindlichkeit_edit(); + } + } + + function verbindlichkeit_ruecksetzenbezahlt($id = null) + { + if (empty($id)) { + $id = $this->app->Secure->GetGET('id'); + $gotoedit = true; + } + $sql = "UPDATE verbindlichkeit SET bezahlt = 0 WHERE id=".$id; + $this->app->DB->Update($sql); + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit bezahlt rückgesetzt"); + if ($gotoedit) { + $this->verbindlichkeit_edit(); + } + } + + function verbindlichkeit_schreibschutz($id = null) + { + if (empty($id)) { + $id = $this->app->Secure->GetGET('id'); + $gotoedit = true; + } + $sql = "UPDATE verbindlichkeit SET schreibschutz = 0 WHERE id=".$id; + $this->app->DB->Update($sql); + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit Schreibschutz entfernt"); + if ($gotoedit) { + $this->verbindlichkeit_edit(); + } + } + + public function verbindlichkeit_minidetail($parsetarget='',$menu=true) { + + $id = $this->app->Secure->GetGET('id'); + + $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS + v.id, + v.belegnr, + v.status_beleg, + v.schreibschutz, + v.rechnung, + ".$this->app->erp->FormatDate('v.zahlbarbis', 'zahlbarbis').", + v.betrag, + v.umsatzsteuer, + v.ustid, + v.summenormal, + v.summeermaessigt, + v.summesatz3, + v.summesatz4, + v.steuersatzname3, + v.steuersatzname4, + v.skonto, + ".$this->app->erp->FormatDate('v.skontobis', 'skontobis').", + v.skontofestsetzen, + v.freigabe, + v.freigabemitarbeiter, + v.bestellung, + p.abkuerzung AS projekt, + v.teilprojekt, + v.auftrag, + v.status, + v.bezahlt, + v.kontoauszuege, + v.firma, + v.logdatei, + v.waehrung, + v.zahlungsweise, + ".$this->app->erp->FormatDate('v.eingangsdatum', 'eingangsdatum').", + ".$this->app->erp->FormatDate('v.rechnungsdatum', 'rechnungsdatum').", + v.rechnungsfreigabe, + k.nummer as 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, + CONCAT(a.lieferantennummer,' ',a.name) AS adresse + FROM verbindlichkeit v + LEFT JOIN adresse a ON a.id = v.adresse + LEFT JOIN projekt p ON a.projekt = p.id + LEFT JOIN kostenstellen k ON v.kostenstelle = k.id + 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]; + } + + $tmp = new EasyTable($this->app); + $tmp->Query("SELECT zeit,bearbeiter,grund FROM verbindlichkeit_protokoll WHERE verbindlichkeit='$id' ORDER by zeit DESC",0,""); + $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); + + if($parsetarget=='') + { + $this->app->Tpl->Output('verbindlichkeit_minidetail.tpl'); + $this->app->ExitXentral(); + } + $this->app->Tpl->Parse($parsetarget,'verbindlichkeit_minidetail.tpl'); + } + } From b18e8ff444db680857dd87d25eeacfeed70209b3 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 27 Dec 2023 18:40:36 +0100 Subject: [PATCH 10/62] view fibu_buchungen_alle --- upgrade/data/db_schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json index c4635b64..d7d6491e 100644 --- a/upgrade/data/db_schema.json +++ b/upgrade/data/db_schema.json @@ -118002,7 +118002,7 @@ { "name": "fibu_buchungen_alle_view", "type": "VIEW", - "Create": "CREATE VIEW `fibu_buchungen_alle_view` AS select `fb`.`buchungsart` AS `buchungsart`,`fb`.`typ` AS `typ`,`fb`.`id` AS `id`,if(`fibu_objekte_view`.`datum` <> '',`fibu_objekte_view`.`datum`,`fb`.`datum`) AS `datum`,`fb`.`gegen_typ` AS `doc_typ`,`fb`.`gegen_id` AS `doc_id`,`fibu_objekte_view`.`info` AS `doc_info`, CAST(`fb`.`soll` AS decimal(10,2)) AS `betrag`,`fb`.`waehrung` AS `waehrung`,`fb`.`edit_module` AS `edit_module`,`fb`.`edit_id` AS `edit_id` from ((select 'umsatz' AS `buchungsart`,'rechnung' AS `typ`,`rechnung`.`id` AS `id`,-`rechnung`.`soll` AS `soll`,`rechnung`.`waehrung` AS `waehrung`,'rechnung' AS `gegen_typ`,`rechnung`.`id` AS `gegen_id`,`rechnung`.`datum` AS `datum`,'rechnung' AS `edit_module`,`rechnung`.`id` AS `edit_id` from `rechnung` where `rechnung`.`belegnr` <> '' union select 'umsatz' AS `umsatz`,'gutschrift' AS `gutschrift`,`gutschrift`.`id` AS `id`,`gutschrift`.`soll` AS `soll`,`gutschrift`.`waehrung` AS `waehrung`,'gutschrift' AS `gutschrift`,`gutschrift`.`id` AS `id`,`gutschrift`.`datum` AS `datum`,'gutschrift' AS `edit_module`,`gutschrift`.`id` AS `id` from `gutschrift` where `gutschrift`.`belegnr` <> '' union select 'aufwand' AS `aufwand`,'verbindlichkeit' AS `verbindlichkeit`,`verbindlichkeit`.`id` AS `id`,`verbindlichkeit`.`betrag` AS `betrag`,`verbindlichkeit`.`waehrung` AS `waehrung`,'verbindlichkeit' AS `verbindlichkeit`,`verbindlichkeit`.`id` AS `id`,`verbindlichkeit`.`rechnungsdatum` AS `rechnungsdatum`,'verbindlichkeit' AS `verbindlichkeit`,`verbindlichkeit`.`id` AS `id` from `verbindlichkeit` where `verbindlichkeit`.`belegnr` <> '' union select 'zahlung' AS `zahlung`,'kontoauszuege' AS `kontoauszuege`,`kontoauszuege`.`id` AS `id`,`kontoauszuege`.`soll` AS `soll`,`kontoauszuege`.`waehrung` AS `waehrung`,'kontoauszuege' AS `kontoauszuege`,`kontoauszuege`.`id` AS `id`,`kontoauszuege`.`buchung` AS `buchung`,'kontoauszuege' AS `kontoauszuege`,`kontoauszuege`.`id` AS `id` from `kontoauszuege` where `kontoauszuege`.`importfehler` is null union select 'abbuchung' AS `abbuchung`,`fibu_buchungen`.`von_typ` AS `von_typ`,`fibu_buchungen`.`von_id` AS `von_id`,`fibu_buchungen`.`betrag` AS `betrag`,`fibu_buchungen`.`waehrung` AS `waehrung`,`fibu_buchungen`.`nach_typ` AS `nach_typ`,`fibu_buchungen`.`nach_id` AS `nach_id`,`fibu_buchungen`.`datum` AS `datum`,'fibu_buchungen' AS `fibu_buchungen`,`fibu_buchungen`.`id` AS `id` from `fibu_buchungen` union select 'zubuchung' AS `zubuchung`,`fibu_buchungen`.`nach_typ` AS `nach_typ`,`fibu_buchungen`.`nach_id` AS `nach_id`,-`fibu_buchungen`.`betrag` AS `-``openxe``.``fibu_buchungen``.``betrag```,`fibu_buchungen`.`waehrung` AS `waehrung`,`fibu_buchungen`.`von_typ` AS `von_typ`,`fibu_buchungen`.`von_id` AS `von_id`,`fibu_buchungen`.`datum` AS `datum`,'fibu_buchungen' AS `fibu_buchungen`,`fibu_buchungen`.`id` AS `id` from `fibu_buchungen`) `fb` left join `fibu_objekte_view` on(`fb`.`gegen_typ` = `fibu_objekte_view`.`typ` and `fb`.`gegen_id` = `fibu_objekte_view`.`id`)) where `fb`.`datum` >= (select `firmendaten_werte`.`wert` from `firmendaten_werte` where `firmendaten_werte`.`name` = 'fibu_buchungen_startdatum') and `fibu_objekte_view`.`datum` >= (select `firmendaten_werte`.`wert` from `firmendaten_werte` where `firmendaten_werte`.`name` = 'fibu_buchungen_startdatum') or `fibu_objekte_view`.`datum` = ''" + "Create": "CREATE VIEW `fibu_buchungen_alle_view` AS select `fb`.`buchungsart` AS `buchungsart`,`fb`.`typ` AS `typ`,`fb`.`id` AS `id`,if(`fibu_objekte_view`.`datum` <> '',`fibu_objekte_view`.`datum`,`fb`.`datum`) AS `datum`,`fb`.`gegen_typ` AS `doc_typ`,`fb`.`gegen_id` AS `doc_id`,`fibu_objekte_view`.`info` AS `doc_info`,cast(`fb`.`soll` as decimal(10,2)) AS `betrag`,`fb`.`waehrung` AS `waehrung`,`fb`.`edit_module` AS `edit_module`,`fb`.`edit_id` AS `edit_id` from ((select 'umsatz' AS `buchungsart`,'rechnung' AS `typ`,`rechnung`.`id` AS `id`,-`rechnung`.`soll` AS `soll`,`rechnung`.`waehrung` AS `waehrung`,'rechnung' AS `gegen_typ`,`rechnung`.`id` AS `gegen_id`,`rechnung`.`datum` AS `datum`,'rechnung' AS `edit_module`,`rechnung`.`id` AS `edit_id` from `rechnung` where `rechnung`.`belegnr` <> '' union select 'umsatz' AS `umsatz`,'gutschrift' AS `gutschrift`,`gutschrift`.`id` AS `id`,`gutschrift`.`soll` AS `soll`,`gutschrift`.`waehrung` AS `waehrung`,'gutschrift' AS `gutschrift`,`gutschrift`.`id` AS `id`,`gutschrift`.`datum` AS `datum`,'gutschrift' AS `edit_module`,`gutschrift`.`id` AS `id` from `gutschrift` where `gutschrift`.`belegnr` <> '' union select 'aufwand' AS `aufwand`,'verbindlichkeit' AS `verbindlichkeit`,`verbindlichkeit`.`id` AS `id`,`verbindlichkeit`.`betrag` AS `betrag`,`verbindlichkeit`.`waehrung` AS `waehrung`,'verbindlichkeit' AS `verbindlichkeit`,`verbindlichkeit`.`id` AS `id`,`verbindlichkeit`.`rechnungsdatum` AS `rechnungsdatum`,'verbindlichkeit' AS `verbindlichkeit`,`verbindlichkeit`.`id` AS `id` from `verbindlichkeit` where `verbindlichkeit`.`belegnr` <> '' union select 'zahlung' AS `zahlung`,'kontoauszuege' AS `kontoauszuege`,`kontoauszuege`.`id` AS `id`,`kontoauszuege`.`soll` AS `soll`,`kontoauszuege`.`waehrung` AS `waehrung`,'kontoauszuege' AS `kontoauszuege`,`kontoauszuege`.`id` AS `id`,`kontoauszuege`.`buchung` AS `buchung`,'kontoauszuege' AS `kontoauszuege`,`kontoauszuege`.`id` AS `id` from `kontoauszuege` where `kontoauszuege`.`importfehler` is null union select 'abbuchung' AS `abbuchung`,`fibu_buchungen`.`von_typ` AS `von_typ`,`fibu_buchungen`.`von_id` AS `von_id`,`fibu_buchungen`.`betrag` AS `betrag`,`fibu_buchungen`.`waehrung` AS `waehrung`,`fibu_buchungen`.`nach_typ` AS `nach_typ`,`fibu_buchungen`.`nach_id` AS `nach_id`,`fibu_buchungen`.`datum` AS `datum`,'fibu_buchungen' AS `fibu_buchungen`,`fibu_buchungen`.`id` AS `id` from `fibu_buchungen` union select 'zubuchung' AS `zubuchung`,`fibu_buchungen`.`nach_typ` AS `nach_typ`,`fibu_buchungen`.`nach_id` AS `nach_id`,-`fibu_buchungen`.`betrag` AS `-``openxe``.``fibu_buchungen``.``betrag```,`fibu_buchungen`.`waehrung` AS `waehrung`,`fibu_buchungen`.`von_typ` AS `von_typ`,`fibu_buchungen`.`von_id` AS `von_id`,`fibu_buchungen`.`datum` AS `datum`,'fibu_buchungen' AS `fibu_buchungen`,`fibu_buchungen`.`id` AS `id` from `fibu_buchungen`) `fb` left join `fibu_objekte_view` on(`fb`.`gegen_typ` = `fibu_objekte_view`.`typ` and `fb`.`gegen_id` = `fibu_objekte_view`.`id`)) where `fb`.`datum` >= (select `firmendaten_werte`.`wert` from `firmendaten_werte` where `firmendaten_werte`.`name` = 'fibu_buchungen_startdatum') and `fibu_objekte_view`.`datum` >= (select `firmendaten_werte`.`wert` from `firmendaten_werte` where `firmendaten_werte`.`name` = 'fibu_buchungen_startdatum') or `fibu_objekte_view`.`datum` = ''" } ] } From 38d0ac4c494d7e40903bf8131dd884ced0420ac1 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 27 Dec 2023 19:15:42 +0100 Subject: [PATCH 11/62] verbindlichkeit mengebetrag --- www/pages/content/verbindlichkeit_edit.tpl | 6 +- www/pages/content/verbindlichkeit_list.tpl | 2 +- www/pages/verbindlichkeit.php | 78 +++++++++++++++++++++- 3 files changed, 79 insertions(+), 7 deletions(-) diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl index 8e908c75..615ceb94 100644 --- a/www/pages/content/verbindlichkeit_edit.tpl +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -78,7 +78,7 @@ {|Betrag brutto|}: - + @@ -87,7 +87,7 @@ {|Betrag Positionen brutto|}: - + @@ -95,7 +95,7 @@ {|Betrag Positionen netto|}: - + diff --git a/www/pages/content/verbindlichkeit_list.tpl b/www/pages/content/verbindlichkeit_list.tpl index 838328d1..b2947974 100644 --- a/www/pages/content/verbindlichkeit_list.tpl +++ b/www/pages/content/verbindlichkeit_list.tpl @@ -39,7 +39,7 @@ - +
    diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index a1483ecf..6ba4f72f 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -355,8 +355,80 @@ class Verbindlichkeit { // Load values again from database - $dropnbox = "'' AS `open`, CONCAT('') 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"); + $dropnbox = "'' AS `open`, CONCAT('') 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, + ".$this->app->erp->FormatMengeBetrag('v.betrag')." AS 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.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); @@ -779,7 +851,7 @@ class Verbindlichkeit { v.schreibschutz, v.rechnung, ".$this->app->erp->FormatDate('v.zahlbarbis', 'zahlbarbis').", - v.betrag, + ".$this->app->erp->FormatMengeBetrag('v.betrag')." AS betrag, v.umsatzsteuer, v.ustid, v.summenormal, From ae377e452f732d4b834d8d17905e5af422c0b6b5 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Fri, 29 Dec 2023 11:14:28 +0100 Subject: [PATCH 12/62] bugfix GetZahlungsweise empty array --- www/lib/class.erpapi.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index 8bb01e1b..69d3a5ec 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -26850,7 +26850,9 @@ function Firmendaten($field,$projekt="") $tmp[$extra[$i]['type']] = $extra[$i]['bezeichnung']; } if($zahlungsweise && empty($tmp[$zahlungsweise]))$tmp[$zahlungsweise] = ucfirst($zahlungsweise); - asort($tmp); + if (!empty($tmp)) { + asort($tmp); + } return $tmp; // return array('rechnung'=>'Rechnung','vorkasse'=>'Vorkasse','nachnahme'=>'Nachnahme','kreditkarte'=>'Kreditkarte','einzugsermaechtigung'=>'Einzugsermaechtigung','bar'=>'Bar','paypal'=>'PayPal','lastschrift'=>'Lastschrift'); } From f7c64bec797c33956148288476d46664024633c3 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Fri, 29 Dec 2023 12:58:38 +0100 Subject: [PATCH 13/62] Bugfix Warnung doppelte Seriennummern removed pointless SQL WHERE --- www/eproosystem.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/www/eproosystem.php b/www/eproosystem.php index 84d51898..b5490d73 100644 --- a/www/eproosystem.php +++ b/www/eproosystem.php @@ -1699,7 +1699,6 @@ if (typeof document.hidden !== \"undefined\") { // Opera 12.10 and Firefox 18 an FROM `beleg_chargesnmhd` s INNER JOIN lieferschein_position lp ON s.doctype = 'lieferschein' AND s.pos = lp.id AND s.type = 'sn' AND s.wert <> '' INNER JOIN lieferschein l ON lp.lieferschein = l.id AND l.status <> 'storniert' - WHERE l.id NOT IN (SELECT lieferscheinid FROM retoure LIMIT 1) GROUP BY s.wert, lp.artikel ) UNION ALL ( @@ -1708,7 +1707,7 @@ if (typeof document.hidden !== \"undefined\") { // Opera 12.10 and Firefox 18 an SELECT lp.artikel, s.seriennummer as wert , count(s.id) as anzahl, max(l.id) as lieferschein, max(l.belegnr) as belegnr FROM `seriennummern` s INNER JOIN lieferschein_position lp ON s.lieferscheinpos = lp.id - INNER JOIN lieferschein l ON lp.lieferschein = l.id WHERE s.seriennummer <> '' AND l.id NOT IN (SELECT lieferscheinid FROM retoure LIMIT 1) + INNER JOIN lieferschein l ON lp.lieferschein = l.id WHERE s.seriennummer <> '' GROUP BY s.seriennummer, lp.artikel From 2b95a3891a726b03a9e885263256ee8bdf61937b Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Fri, 29 Dec 2023 13:44:31 +0100 Subject: [PATCH 14/62] restored module kostenstellen --- www/pages/content/kostenstellen_edit.tpl | 119 +++++++++++++ www/pages/content/kostenstellen_list.tpl | 10 ++ www/pages/kostenstellen.php | 207 +++++++++++++++++++++++ 3 files changed, 336 insertions(+) create mode 100644 www/pages/content/kostenstellen_edit.tpl create mode 100644 www/pages/content/kostenstellen_list.tpl create mode 100644 www/pages/kostenstellen.php diff --git a/www/pages/content/kostenstellen_edit.tpl b/www/pages/content/kostenstellen_edit.tpl new file mode 100644 index 00000000..56f30def --- /dev/null +++ b/www/pages/content/kostenstellen_edit.tpl @@ -0,0 +1,119 @@ +
    +
      +
    • +
    + +
    + [MESSAGE] +
    + [FORMHANDLEREVENT] +
    +
    +
    +
    +
    + {|kostenstellen|} + + + + + + + + + + + + + + +
    + {|Nummer|}: + + +
    + {|Beschreibung|}: + + +
    + {|Internebemerkung|}: + + +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    + diff --git a/www/pages/content/kostenstellen_list.tpl b/www/pages/content/kostenstellen_list.tpl new file mode 100644 index 00000000..394c103a --- /dev/null +++ b/www/pages/content/kostenstellen_list.tpl @@ -0,0 +1,10 @@ +
    + +
    + [MESSAGE] + [TAB1] + [TAB1NEXT] +
    +
    diff --git a/www/pages/kostenstellen.php b/www/pages/kostenstellen.php new file mode 100644 index 00000000..e1a8f082 --- /dev/null +++ b/www/pages/kostenstellen.php @@ -0,0 +1,207 @@ +app = $app; + if ($intern) + return; + + $this->app->ActionHandlerInit($this); + $this->app->ActionHandler("list", "kostenstellen_list"); + $this->app->ActionHandler("create", "kostenstellen_edit"); // This automatically adds a "New" button + $this->app->ActionHandler("edit", "kostenstellen_edit"); + $this->app->ActionHandler("delete", "kostenstellen_delete"); + $this->app->DefaultActionHandler("list"); + $this->app->ActionHandlerListen($app); + } + + public function Install() { + /* Fill out manually later */ + } + + static function TableSearch(&$app, $name, $erlaubtevars) { + switch ($name) { + case "kostenstellen_list": + $allowed['kostenstellen_list'] = array('list'); + $heading = array('','','Nummer', 'Beschreibung', 'Internebemerkung', '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('k.id','k.id','k.nummer', 'k.beschreibung', 'k.internebemerkung'); + $searchsql = array('k.nummer', 'k.beschreibung', 'k.internebemerkung'); + + $defaultorder = 1; + $defaultorderdesc = 0; + $aligncenter = array(); + $alignright = array(); + $numbercols = array(); + $sumcol = array(); + + $dropnbox = "'' AS `open`, CONCAT('') 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 = "
    " . "Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> " . "Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">" . "
    "; + + $sql = "SELECT SQL_CALC_FOUND_ROWS k.id, $dropnbox, k.nummer, k.beschreibung, k.internebemerkung, k.id FROM kostenstellen k"; + + $where = "1"; + $count = "SELECT count(DISTINCT id) FROM kostenstellen WHERE $where"; +// $groupby = ""; + + break; + } + + $erg = false; + + foreach ($erlaubtevars as $k => $v) { + if (isset($$v)) { + $erg[$v] = $$v; + } + } + return $erg; + } + + function kostenstellen_list() { + $this->app->erp->MenuEintrag("index.php?module=kostenstellen&action=list", "Übersicht"); + $this->app->erp->MenuEintrag("index.php?module=kostenstellen&action=create", "Neu anlegen"); + + $this->app->erp->MenuEintrag("index.php", "Zurück"); + + $this->app->YUI->TableSearch('TAB1', 'kostenstellen_list', "show", "", "", basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('PAGE', "kostenstellen_list.tpl"); + } + + public function kostenstellen_delete() { + $id = (int) $this->app->Secure->GetGET('id'); + + $this->app->DB->Delete("DELETE FROM `kostenstellen` WHERE `id` = '{$id}'"); + $this->app->Tpl->Set('MESSAGE', "
    Der Eintrag wurde gelöscht.
    "); + + $this->kostenstellen_list(); + } + + /* + * Edit kostenstellen item + * If id is empty, create a new one + */ + + function kostenstellen_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->app->erp->MenuEintrag("index.php?module=kostenstellen&action=edit&id=$id", "Details"); + $this->app->erp->MenuEintrag("index.php?module=kostenstellen&action=list", "Zurück zur Übersicht"); + $id = $this->app->Secure->GetGET('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? + + $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."
    "); +// echo($values."
    "); +// echo($update."
    "); + + $sql = "INSERT INTO kostenstellen (".$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("
    Das Element wurde erfolgreich angelegt.
    "); + header("Location: index.php?module=kostenstellen&action=list&msg=$msg"); + } else { + $this->app->Tpl->Set('MESSAGE', "
    Die Einstellungen wurden erfolgreich übernommen.
    "); + } + } + + + // Load values again from database + $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; + $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS k.id, $dropnbox, k.nummer, k.beschreibung, k.internebemerkung, k.id FROM kostenstellen k"." WHERE id=$id"); + + foreach ($result[0] as $key => $value) { + $this->app->Tpl->Set(strtoupper($key), $value); + } + + if (!empty($result)) { + $kostenstellen_from_db = $result[0]; + } else { + return; + } + + /* + * 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->Parse('PAGE', "kostenstellen_edit.tpl"); + } + + /** + * Get all paramters from html form and save into $input + */ + public function GetInput(): array { + $input = array(); + //$input['EMAIL'] = $this->app->Secure->GetPOST('email'); + + $input['nummer'] = $this->app->Secure->GetPOST('nummer'); + $input['beschreibung'] = $this->app->Secure->GetPOST('beschreibung'); + $input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung'); + + + return $input; + } + } From 39409b0358c612e609680088af5225025f05e089 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Fri, 29 Dec 2023 14:15:34 +0100 Subject: [PATCH 15/62] artikel readded buchhaltung options --- upgrade/data/db_schema.json | 22 + .../mysql/_gen/object.gen.artikel.php | 3008 +++++++++-------- www/widgets/_gen/widget.gen.artikel.php | 1437 ++++---- www/widgets/templates/_gen/artikel.tpl | 82 +- www/widgets/widget.artikel.php | 7 + 5 files changed, 2337 insertions(+), 2219 deletions(-) diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json index d7d6491e..42b9f87c 100644 --- a/upgrade/data/db_schema.json +++ b/upgrade/data/db_schema.json @@ -16976,6 +16976,17 @@ "Extra": "", "Privileges": "select,insert,update,references", "Comment": "" + }, + { + "Field": "sachkonto", + "Type": "int(11)", + "Collation": null, + "Null": "YES", + "Key": "", + "Default": "0", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" } ], "keys": [ @@ -111226,6 +111237,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "paketdistribution", + "Type": "int(11)", + "Collation": null, + "Null": "NO", + "Key": "MUL", + "Default": "0", + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "waehrung", "Type": "varchar(255)", diff --git a/www/objectapi/mysql/_gen/object.gen.artikel.php b/www/objectapi/mysql/_gen/object.gen.artikel.php index db38306b..a12833ad 100644 --- a/www/objectapi/mysql/_gen/object.gen.artikel.php +++ b/www/objectapi/mysql/_gen/object.gen.artikel.php @@ -1,1504 +1,1510 @@ -app = $app; - } - - public function Select($id) - { - if(is_numeric($id)) - $result = $this->app->DB->SelectArr("SELECT * FROM `artikel` WHERE (`id` = '$id')"); - else - return -1; - -$result = $result[0]; - - $this->id=$result['id']; - $this->typ=$result['typ']; - $this->nummer=$result['nummer']; - $this->checksum=$result['checksum']; - $this->projekt=$result['projekt']; - $this->inaktiv=$result['inaktiv']; - $this->ausverkauft=$result['ausverkauft']; - $this->warengruppe=$result['warengruppe']; - $this->name_de=$result['name_de']; - $this->name_en=$result['name_en']; - $this->kurztext_de=$result['kurztext_de']; - $this->kurztext_en=$result['kurztext_en']; - $this->beschreibung_de=$result['beschreibung_de']; - $this->beschreibung_en=$result['beschreibung_en']; - $this->uebersicht_de=$result['uebersicht_de']; - $this->uebersicht_en=$result['uebersicht_en']; - $this->links_de=$result['links_de']; - $this->links_en=$result['links_en']; - $this->startseite_de=$result['startseite_de']; - $this->startseite_en=$result['startseite_en']; - $this->standardbild=$result['standardbild']; - $this->herstellerlink=$result['herstellerlink']; - $this->hersteller=$result['hersteller']; - $this->teilbar=$result['teilbar']; - $this->nteile=$result['nteile']; - $this->seriennummern=$result['seriennummern']; - $this->lager_platz=$result['lager_platz']; - $this->lieferzeit=$result['lieferzeit']; - $this->lieferzeitmanuell=$result['lieferzeitmanuell']; - $this->sonstiges=$result['sonstiges']; - $this->gewicht=$result['gewicht']; - $this->endmontage=$result['endmontage']; - $this->funktionstest=$result['funktionstest']; - $this->artikelcheckliste=$result['artikelcheckliste']; - $this->stueckliste=$result['stueckliste']; - $this->juststueckliste=$result['juststueckliste']; - $this->barcode=$result['barcode']; - $this->hinzugefuegt=$result['hinzugefuegt']; - $this->pcbdecal=$result['pcbdecal']; - $this->lagerartikel=$result['lagerartikel']; - $this->porto=$result['porto']; - $this->chargenverwaltung=$result['chargenverwaltung']; - $this->provisionsartikel=$result['provisionsartikel']; - $this->gesperrt=$result['gesperrt']; - $this->sperrgrund=$result['sperrgrund']; - $this->geloescht=$result['geloescht']; - $this->gueltigbis=$result['gueltigbis']; - $this->umsatzsteuer=$result['umsatzsteuer']; - $this->klasse=$result['klasse']; - $this->adresse=$result['adresse']; - $this->shopartikel=$result['shopartikel']; - $this->unishopartikel=$result['unishopartikel']; - $this->journalshopartikel=$result['journalshopartikel']; - $this->shop=$result['shop']; - $this->katalog=$result['katalog']; - $this->katalogtext_de=$result['katalogtext_de']; - $this->katalogtext_en=$result['katalogtext_en']; - $this->katalogbezeichnung_de=$result['katalogbezeichnung_de']; - $this->katalogbezeichnung_en=$result['katalogbezeichnung_en']; - $this->neu=$result['neu']; - $this->topseller=$result['topseller']; - $this->startseite=$result['startseite']; - $this->wichtig=$result['wichtig']; - $this->mindestlager=$result['mindestlager']; - $this->mindestbestellung=$result['mindestbestellung']; - $this->partnerprogramm_sperre=$result['partnerprogramm_sperre']; - $this->internerkommentar=$result['internerkommentar']; - $this->intern_gesperrt=$result['intern_gesperrt']; - $this->intern_gesperrtuser=$result['intern_gesperrtuser']; - $this->intern_gesperrtgrund=$result['intern_gesperrtgrund']; - $this->inbearbeitung=$result['inbearbeitung']; - $this->inbearbeitunguser=$result['inbearbeitunguser']; - $this->cache_lagerplatzinhaltmenge=$result['cache_lagerplatzinhaltmenge']; - $this->internkommentar=$result['internkommentar']; - $this->firma=$result['firma']; - $this->logdatei=$result['logdatei']; - $this->anabregs_text=$result['anabregs_text']; - $this->autobestellung=$result['autobestellung']; - $this->produktion=$result['produktion']; - $this->herstellernummer=$result['herstellernummer']; - $this->restmenge=$result['restmenge']; - $this->mlmdirektpraemie=$result['mlmdirektpraemie']; - $this->keineeinzelartikelanzeigen=$result['keineeinzelartikelanzeigen']; - $this->mindesthaltbarkeitsdatum=$result['mindesthaltbarkeitsdatum']; - $this->letzteseriennummer=$result['letzteseriennummer']; - $this->individualartikel=$result['individualartikel']; - $this->keinrabatterlaubt=$result['keinrabatterlaubt']; - $this->rabatt=$result['rabatt']; - $this->rabatt_prozent=$result['rabatt_prozent']; - $this->geraet=$result['geraet']; - $this->serviceartikel=$result['serviceartikel']; - $this->autoabgleicherlaubt=$result['autoabgleicherlaubt']; - $this->pseudopreis=$result['pseudopreis']; - $this->freigabenotwendig=$result['freigabenotwendig']; - $this->freigaberegel=$result['freigaberegel']; - $this->nachbestellt=$result['nachbestellt']; - $this->ean=$result['ean']; - $this->mlmpunkte=$result['mlmpunkte']; - $this->mlmbonuspunkte=$result['mlmbonuspunkte']; - $this->mlmkeinepunkteeigenkauf=$result['mlmkeinepunkteeigenkauf']; - $this->shop2=$result['shop2']; - $this->shop3=$result['shop3']; - $this->usereditid=$result['usereditid']; - $this->useredittimestamp=$result['useredittimestamp']; - $this->freifeld1=$result['freifeld1']; - $this->freifeld2=$result['freifeld2']; - $this->freifeld3=$result['freifeld3']; - $this->freifeld4=$result['freifeld4']; - $this->freifeld5=$result['freifeld5']; - $this->freifeld6=$result['freifeld6']; - $this->einheit=$result['einheit']; - $this->webid=$result['webid']; - $this->lieferzeitmanuell_en=$result['lieferzeitmanuell_en']; - $this->variante=$result['variante']; - $this->variante_von=$result['variante_von']; - $this->produktioninfo=$result['produktioninfo']; - $this->sonderaktion=$result['sonderaktion']; - $this->sonderaktion_en=$result['sonderaktion_en']; - $this->autolagerlampe=$result['autolagerlampe']; - $this->leerfeld=$result['leerfeld']; - $this->zolltarifnummer=$result['zolltarifnummer']; - $this->herkunftsland=$result['herkunftsland']; - $this->laenge=$result['laenge']; - $this->breite=$result['breite']; - $this->hoehe=$result['hoehe']; - $this->gebuehr=$result['gebuehr']; - $this->pseudolager=$result['pseudolager']; - $this->downloadartikel=$result['downloadartikel']; - $this->matrixprodukt=$result['matrixprodukt']; - $this->steuer_erloese_inland_normal=$result['steuer_erloese_inland_normal']; - $this->steuer_aufwendung_inland_normal=$result['steuer_aufwendung_inland_normal']; - $this->steuer_erloese_inland_ermaessigt=$result['steuer_erloese_inland_ermaessigt']; - $this->steuer_aufwendung_inland_ermaessigt=$result['steuer_aufwendung_inland_ermaessigt']; - $this->steuer_erloese_inland_steuerfrei=$result['steuer_erloese_inland_steuerfrei']; - $this->steuer_aufwendung_inland_steuerfrei=$result['steuer_aufwendung_inland_steuerfrei']; - $this->steuer_erloese_inland_innergemeinschaftlich=$result['steuer_erloese_inland_innergemeinschaftlich']; - $this->steuer_aufwendung_inland_innergemeinschaftlich=$result['steuer_aufwendung_inland_innergemeinschaftlich']; - $this->steuer_erloese_inland_eunormal=$result['steuer_erloese_inland_eunormal']; - $this->steuer_erloese_inland_nichtsteuerbar=$result['steuer_erloese_inland_nichtsteuerbar']; - $this->steuer_erloese_inland_euermaessigt=$result['steuer_erloese_inland_euermaessigt']; - $this->steuer_aufwendung_inland_nichtsteuerbar=$result['steuer_aufwendung_inland_nichtsteuerbar']; - $this->steuer_aufwendung_inland_eunormal=$result['steuer_aufwendung_inland_eunormal']; - $this->steuer_aufwendung_inland_euermaessigt=$result['steuer_aufwendung_inland_euermaessigt']; - $this->steuer_erloese_inland_export=$result['steuer_erloese_inland_export']; - $this->steuer_aufwendung_inland_import=$result['steuer_aufwendung_inland_import']; - $this->steuer_art_produkt=$result['steuer_art_produkt']; - $this->steuer_art_produkt_download=$result['steuer_art_produkt_download']; - $this->metadescription_de=$result['metadescription_de']; - $this->metadescription_en=$result['metadescription_en']; - $this->metakeywords_de=$result['metakeywords_de']; - $this->metakeywords_en=$result['metakeywords_en']; - $this->anabregs_text_en=$result['anabregs_text_en']; - $this->externeproduktion=$result['externeproduktion']; - $this->bildvorschau=$result['bildvorschau']; - $this->inventursperre=$result['inventursperre']; - $this->variante_kopie=$result['variante_kopie']; - $this->unikat=$result['unikat']; - $this->generierenummerbeioption=$result['generierenummerbeioption']; - $this->allelieferanten=$result['allelieferanten']; - $this->tagespreise=$result['tagespreise']; - $this->rohstoffe=$result['rohstoffe']; - $this->xvp=$result['xvp']; - $this->ohnepreisimpdf=$result['ohnepreisimpdf']; - $this->provisionssperre=$result['provisionssperre']; - $this->dienstleistung=$result['dienstleistung']; - $this->inventurekaktiv=$result['inventurekaktiv']; - $this->inventurek=$result['inventurek']; - $this->hinweis_einfuegen=$result['hinweis_einfuegen']; - $this->etikettautodruck=$result['etikettautodruck']; - $this->lagerkorrekturwert=$result['lagerkorrekturwert']; - $this->autodrucketikett=$result['autodrucketikett']; - $this->abckategorie=$result['abckategorie']; - $this->laststorage_changed=$result['laststorage_changed']; - $this->laststorage_sync=$result['laststorage_sync']; - $this->steuersatz=$result['steuersatz']; - $this->steuertext_innergemeinschaftlich=$result['steuertext_innergemeinschaftlich']; - $this->steuertext_export=$result['steuertext_export']; - $this->formelmenge=$result['formelmenge']; - $this->formelpreis=$result['formelpreis']; - $this->freifeld7=$result['freifeld7']; - $this->freifeld8=$result['freifeld8']; - $this->freifeld9=$result['freifeld9']; - $this->freifeld10=$result['freifeld10']; - $this->freifeld11=$result['freifeld11']; - $this->freifeld12=$result['freifeld12']; - $this->freifeld13=$result['freifeld13']; - $this->freifeld14=$result['freifeld14']; - $this->freifeld15=$result['freifeld15']; - $this->freifeld16=$result['freifeld16']; - $this->freifeld17=$result['freifeld17']; - $this->freifeld18=$result['freifeld18']; - $this->freifeld19=$result['freifeld19']; - $this->freifeld20=$result['freifeld20']; - $this->freifeld21=$result['freifeld21']; - $this->freifeld22=$result['freifeld22']; - $this->freifeld23=$result['freifeld23']; - $this->freifeld24=$result['freifeld24']; - $this->freifeld25=$result['freifeld25']; - $this->freifeld26=$result['freifeld26']; - $this->freifeld27=$result['freifeld27']; - $this->freifeld28=$result['freifeld28']; - $this->freifeld29=$result['freifeld29']; - $this->freifeld30=$result['freifeld30']; - $this->freifeld31=$result['freifeld31']; - $this->freifeld32=$result['freifeld32']; - $this->freifeld33=$result['freifeld33']; - $this->freifeld34=$result['freifeld34']; - $this->freifeld35=$result['freifeld35']; - $this->freifeld36=$result['freifeld36']; - $this->freifeld37=$result['freifeld37']; - $this->freifeld38=$result['freifeld38']; - $this->freifeld39=$result['freifeld39']; - $this->freifeld40=$result['freifeld40']; - $this->ursprungsregion=$result['ursprungsregion']; - $this->bestandalternativartikel=$result['bestandalternativartikel']; - $this->metatitle_de=$result['metatitle_de']; - $this->metatitle_en=$result['metatitle_en']; - $this->vkmeldungunterdruecken=$result['vkmeldungunterdruecken']; - $this->altersfreigabe=$result['altersfreigabe']; - $this->unikatbeikopie=$result['unikatbeikopie']; - $this->steuergruppe=$result['steuergruppe']; - $this->kostenstelle=$result['kostenstelle']; - $this->artikelautokalkulation=$result['artikelautokalkulation']; - $this->artikelabschliessenkalkulation=$result['artikelabschliessenkalkulation']; - $this->artikelfifokalkulation=$result['artikelfifokalkulation']; - $this->keinskonto=$result['keinskonto']; - $this->berechneterek=$result['berechneterek']; - $this->verwendeberechneterek=$result['verwendeberechneterek']; - $this->berechneterekwaehrung=$result['berechneterekwaehrung']; - $this->has_preproduced_partlist=$result['has_preproduced_partlist']; - $this->preproduced_partlist=$result['preproduced_partlist']; - $this->nettogewicht=$result['nettogewicht']; - } - - public function Create() - { - $sql = "INSERT INTO `artikel` (`id`,`typ`,`nummer`,`checksum`,`projekt`,`inaktiv`,`ausverkauft`,`warengruppe`,`name_de`,`name_en`,`kurztext_de`,`kurztext_en`,`beschreibung_de`,`beschreibung_en`,`uebersicht_de`,`uebersicht_en`,`links_de`,`links_en`,`startseite_de`,`startseite_en`,`standardbild`,`herstellerlink`,`hersteller`,`teilbar`,`nteile`,`seriennummern`,`lager_platz`,`lieferzeit`,`lieferzeitmanuell`,`sonstiges`,`gewicht`,`endmontage`,`funktionstest`,`artikelcheckliste`,`stueckliste`,`juststueckliste`,`barcode`,`hinzugefuegt`,`pcbdecal`,`lagerartikel`,`porto`,`chargenverwaltung`,`provisionsartikel`,`gesperrt`,`sperrgrund`,`geloescht`,`gueltigbis`,`umsatzsteuer`,`klasse`,`adresse`,`shopartikel`,`unishopartikel`,`journalshopartikel`,`shop`,`katalog`,`katalogtext_de`,`katalogtext_en`,`katalogbezeichnung_de`,`katalogbezeichnung_en`,`neu`,`topseller`,`startseite`,`wichtig`,`mindestlager`,`mindestbestellung`,`partnerprogramm_sperre`,`internerkommentar`,`intern_gesperrt`,`intern_gesperrtuser`,`intern_gesperrtgrund`,`inbearbeitung`,`inbearbeitunguser`,`cache_lagerplatzinhaltmenge`,`internkommentar`,`firma`,`logdatei`,`anabregs_text`,`autobestellung`,`produktion`,`herstellernummer`,`restmenge`,`mlmdirektpraemie`,`keineeinzelartikelanzeigen`,`mindesthaltbarkeitsdatum`,`letzteseriennummer`,`individualartikel`,`keinrabatterlaubt`,`rabatt`,`rabatt_prozent`,`geraet`,`serviceartikel`,`autoabgleicherlaubt`,`pseudopreis`,`freigabenotwendig`,`freigaberegel`,`nachbestellt`,`ean`,`mlmpunkte`,`mlmbonuspunkte`,`mlmkeinepunkteeigenkauf`,`shop2`,`shop3`,`usereditid`,`useredittimestamp`,`freifeld1`,`freifeld2`,`freifeld3`,`freifeld4`,`freifeld5`,`freifeld6`,`einheit`,`webid`,`lieferzeitmanuell_en`,`variante`,`variante_von`,`produktioninfo`,`sonderaktion`,`sonderaktion_en`,`autolagerlampe`,`leerfeld`,`zolltarifnummer`,`herkunftsland`,`laenge`,`breite`,`hoehe`,`gebuehr`,`pseudolager`,`downloadartikel`,`matrixprodukt`,`steuer_erloese_inland_normal`,`steuer_aufwendung_inland_normal`,`steuer_erloese_inland_ermaessigt`,`steuer_aufwendung_inland_ermaessigt`,`steuer_erloese_inland_steuerfrei`,`steuer_aufwendung_inland_steuerfrei`,`steuer_erloese_inland_innergemeinschaftlich`,`steuer_aufwendung_inland_innergemeinschaftlich`,`steuer_erloese_inland_eunormal`,`steuer_erloese_inland_nichtsteuerbar`,`steuer_erloese_inland_euermaessigt`,`steuer_aufwendung_inland_nichtsteuerbar`,`steuer_aufwendung_inland_eunormal`,`steuer_aufwendung_inland_euermaessigt`,`steuer_erloese_inland_export`,`steuer_aufwendung_inland_import`,`steuer_art_produkt`,`steuer_art_produkt_download`,`metadescription_de`,`metadescription_en`,`metakeywords_de`,`metakeywords_en`,`anabregs_text_en`,`externeproduktion`,`bildvorschau`,`inventursperre`,`variante_kopie`,`unikat`,`generierenummerbeioption`,`allelieferanten`,`tagespreise`,`rohstoffe`,`xvp`,`ohnepreisimpdf`,`provisionssperre`,`dienstleistung`,`inventurekaktiv`,`inventurek`,`hinweis_einfuegen`,`etikettautodruck`,`lagerkorrekturwert`,`autodrucketikett`,`abckategorie`,`laststorage_changed`,`laststorage_sync`,`steuersatz`,`steuertext_innergemeinschaftlich`,`steuertext_export`,`formelmenge`,`formelpreis`,`freifeld7`,`freifeld8`,`freifeld9`,`freifeld10`,`freifeld11`,`freifeld12`,`freifeld13`,`freifeld14`,`freifeld15`,`freifeld16`,`freifeld17`,`freifeld18`,`freifeld19`,`freifeld20`,`freifeld21`,`freifeld22`,`freifeld23`,`freifeld24`,`freifeld25`,`freifeld26`,`freifeld27`,`freifeld28`,`freifeld29`,`freifeld30`,`freifeld31`,`freifeld32`,`freifeld33`,`freifeld34`,`freifeld35`,`freifeld36`,`freifeld37`,`freifeld38`,`freifeld39`,`freifeld40`,`ursprungsregion`,`bestandalternativartikel`,`metatitle_de`,`metatitle_en`,`vkmeldungunterdruecken`,`altersfreigabe`,`unikatbeikopie`,`steuergruppe`,`kostenstelle`,`artikelautokalkulation`,`artikelabschliessenkalkulation`,`artikelfifokalkulation`,`keinskonto`,`berechneterek`,`verwendeberechneterek`,`berechneterekwaehrung`,`has_preproduced_partlist`,`preproduced_partlist`,`nettogewicht`) - VALUES(NULL,'{$this->typ}','{$this->nummer}','{$this->checksum}','{$this->projekt}','{$this->inaktiv}','{$this->ausverkauft}','{$this->warengruppe}','{$this->name_de}','{$this->name_en}','{$this->kurztext_de}','{$this->kurztext_en}','{$this->beschreibung_de}','{$this->beschreibung_en}','{$this->uebersicht_de}','{$this->uebersicht_en}','{$this->links_de}','{$this->links_en}','{$this->startseite_de}','{$this->startseite_en}','{$this->standardbild}','{$this->herstellerlink}','{$this->hersteller}','{$this->teilbar}','{$this->nteile}','{$this->seriennummern}','{$this->lager_platz}','{$this->lieferzeit}','{$this->lieferzeitmanuell}','{$this->sonstiges}','{$this->gewicht}','{$this->endmontage}','{$this->funktionstest}','{$this->artikelcheckliste}','{$this->stueckliste}','{$this->juststueckliste}','{$this->barcode}','{$this->hinzugefuegt}','{$this->pcbdecal}','{$this->lagerartikel}','{$this->porto}','{$this->chargenverwaltung}','{$this->provisionsartikel}','{$this->gesperrt}','{$this->sperrgrund}','{$this->geloescht}','{$this->gueltigbis}','{$this->umsatzsteuer}','{$this->klasse}','{$this->adresse}','{$this->shopartikel}','{$this->unishopartikel}','{$this->journalshopartikel}','{$this->shop}','{$this->katalog}','{$this->katalogtext_de}','{$this->katalogtext_en}','{$this->katalogbezeichnung_de}','{$this->katalogbezeichnung_en}','{$this->neu}','{$this->topseller}','{$this->startseite}','{$this->wichtig}','{$this->mindestlager}','{$this->mindestbestellung}','{$this->partnerprogramm_sperre}','{$this->internerkommentar}','{$this->intern_gesperrt}','{$this->intern_gesperrtuser}','{$this->intern_gesperrtgrund}','{$this->inbearbeitung}','{$this->inbearbeitunguser}','{$this->cache_lagerplatzinhaltmenge}','{$this->internkommentar}','{$this->firma}','{$this->logdatei}','{$this->anabregs_text}','{$this->autobestellung}','{$this->produktion}','{$this->herstellernummer}','{$this->restmenge}','{$this->mlmdirektpraemie}','{$this->keineeinzelartikelanzeigen}','{$this->mindesthaltbarkeitsdatum}','{$this->letzteseriennummer}','{$this->individualartikel}','{$this->keinrabatterlaubt}','{$this->rabatt}','{$this->rabatt_prozent}','{$this->geraet}','{$this->serviceartikel}','{$this->autoabgleicherlaubt}','{$this->pseudopreis}','{$this->freigabenotwendig}','{$this->freigaberegel}','{$this->nachbestellt}','{$this->ean}','{$this->mlmpunkte}','{$this->mlmbonuspunkte}','{$this->mlmkeinepunkteeigenkauf}','{$this->shop2}','{$this->shop3}','{$this->usereditid}','{$this->useredittimestamp}','{$this->freifeld1}','{$this->freifeld2}','{$this->freifeld3}','{$this->freifeld4}','{$this->freifeld5}','{$this->freifeld6}','{$this->einheit}','{$this->webid}','{$this->lieferzeitmanuell_en}','{$this->variante}','{$this->variante_von}','{$this->produktioninfo}','{$this->sonderaktion}','{$this->sonderaktion_en}','{$this->autolagerlampe}','{$this->leerfeld}','{$this->zolltarifnummer}','{$this->herkunftsland}','{$this->laenge}','{$this->breite}','{$this->hoehe}','{$this->gebuehr}','{$this->pseudolager}','{$this->downloadartikel}','{$this->matrixprodukt}','{$this->steuer_erloese_inland_normal}','{$this->steuer_aufwendung_inland_normal}','{$this->steuer_erloese_inland_ermaessigt}','{$this->steuer_aufwendung_inland_ermaessigt}','{$this->steuer_erloese_inland_steuerfrei}','{$this->steuer_aufwendung_inland_steuerfrei}','{$this->steuer_erloese_inland_innergemeinschaftlich}','{$this->steuer_aufwendung_inland_innergemeinschaftlich}','{$this->steuer_erloese_inland_eunormal}','{$this->steuer_erloese_inland_nichtsteuerbar}','{$this->steuer_erloese_inland_euermaessigt}','{$this->steuer_aufwendung_inland_nichtsteuerbar}','{$this->steuer_aufwendung_inland_eunormal}','{$this->steuer_aufwendung_inland_euermaessigt}','{$this->steuer_erloese_inland_export}','{$this->steuer_aufwendung_inland_import}','{$this->steuer_art_produkt}','{$this->steuer_art_produkt_download}','{$this->metadescription_de}','{$this->metadescription_en}','{$this->metakeywords_de}','{$this->metakeywords_en}','{$this->anabregs_text_en}','{$this->externeproduktion}','{$this->bildvorschau}','{$this->inventursperre}','{$this->variante_kopie}','{$this->unikat}','{$this->generierenummerbeioption}','{$this->allelieferanten}','{$this->tagespreise}','{$this->rohstoffe}','{$this->xvp}','{$this->ohnepreisimpdf}','{$this->provisionssperre}','{$this->dienstleistung}','{$this->inventurekaktiv}','{$this->inventurek}','{$this->hinweis_einfuegen}','{$this->etikettautodruck}','{$this->lagerkorrekturwert}','{$this->autodrucketikett}','{$this->abckategorie}','{$this->laststorage_changed}','{$this->laststorage_sync}','{$this->steuersatz}','{$this->steuertext_innergemeinschaftlich}','{$this->steuertext_export}','{$this->formelmenge}','{$this->formelpreis}','{$this->freifeld7}','{$this->freifeld8}','{$this->freifeld9}','{$this->freifeld10}','{$this->freifeld11}','{$this->freifeld12}','{$this->freifeld13}','{$this->freifeld14}','{$this->freifeld15}','{$this->freifeld16}','{$this->freifeld17}','{$this->freifeld18}','{$this->freifeld19}','{$this->freifeld20}','{$this->freifeld21}','{$this->freifeld22}','{$this->freifeld23}','{$this->freifeld24}','{$this->freifeld25}','{$this->freifeld26}','{$this->freifeld27}','{$this->freifeld28}','{$this->freifeld29}','{$this->freifeld30}','{$this->freifeld31}','{$this->freifeld32}','{$this->freifeld33}','{$this->freifeld34}','{$this->freifeld35}','{$this->freifeld36}','{$this->freifeld37}','{$this->freifeld38}','{$this->freifeld39}','{$this->freifeld40}','{$this->ursprungsregion}','{$this->bestandalternativartikel}','{$this->metatitle_de}','{$this->metatitle_en}','{$this->vkmeldungunterdruecken}','{$this->altersfreigabe}','{$this->unikatbeikopie}','{$this->steuergruppe}','{$this->kostenstelle}','{$this->artikelautokalkulation}','{$this->artikelabschliessenkalkulation}','{$this->artikelfifokalkulation}','{$this->keinskonto}','{$this->berechneterek}','{$this->verwendeberechneterek}','{$this->berechneterekwaehrung}','{$this->has_preproduced_partlist}','{$this->preproduced_partlist}','{$this->nettogewicht}')"; - - $this->app->DB->Insert($sql); - $this->id = $this->app->DB->GetInsertID(); - } - - public function Update() - { - if(!is_numeric($this->id)) { - return -1; - } - - $sql = "UPDATE `artikel` SET - `typ`='{$this->typ}', - `nummer`='{$this->nummer}', - `checksum`='{$this->checksum}', - `projekt`='{$this->projekt}', - `inaktiv`='{$this->inaktiv}', - `ausverkauft`='{$this->ausverkauft}', - `warengruppe`='{$this->warengruppe}', - `name_de`='{$this->name_de}', - `name_en`='{$this->name_en}', - `kurztext_de`='{$this->kurztext_de}', - `kurztext_en`='{$this->kurztext_en}', - `beschreibung_de`='{$this->beschreibung_de}', - `beschreibung_en`='{$this->beschreibung_en}', - `uebersicht_de`='{$this->uebersicht_de}', - `uebersicht_en`='{$this->uebersicht_en}', - `links_de`='{$this->links_de}', - `links_en`='{$this->links_en}', - `startseite_de`='{$this->startseite_de}', - `startseite_en`='{$this->startseite_en}', - `standardbild`='{$this->standardbild}', - `herstellerlink`='{$this->herstellerlink}', - `hersteller`='{$this->hersteller}', - `teilbar`='{$this->teilbar}', - `nteile`='{$this->nteile}', - `seriennummern`='{$this->seriennummern}', - `lager_platz`='{$this->lager_platz}', - `lieferzeit`='{$this->lieferzeit}', - `lieferzeitmanuell`='{$this->lieferzeitmanuell}', - `sonstiges`='{$this->sonstiges}', - `gewicht`='{$this->gewicht}', - `endmontage`='{$this->endmontage}', - `funktionstest`='{$this->funktionstest}', - `artikelcheckliste`='{$this->artikelcheckliste}', - `stueckliste`='{$this->stueckliste}', - `juststueckliste`='{$this->juststueckliste}', - `barcode`='{$this->barcode}', - `hinzugefuegt`='{$this->hinzugefuegt}', - `pcbdecal`='{$this->pcbdecal}', - `lagerartikel`='{$this->lagerartikel}', - `porto`='{$this->porto}', - `chargenverwaltung`='{$this->chargenverwaltung}', - `provisionsartikel`='{$this->provisionsartikel}', - `gesperrt`='{$this->gesperrt}', - `sperrgrund`='{$this->sperrgrund}', - `geloescht`='{$this->geloescht}', - `gueltigbis`='{$this->gueltigbis}', - `umsatzsteuer`='{$this->umsatzsteuer}', - `klasse`='{$this->klasse}', - `adresse`='{$this->adresse}', - `shopartikel`='{$this->shopartikel}', - `unishopartikel`='{$this->unishopartikel}', - `journalshopartikel`='{$this->journalshopartikel}', - `shop`='{$this->shop}', - `katalog`='{$this->katalog}', - `katalogtext_de`='{$this->katalogtext_de}', - `katalogtext_en`='{$this->katalogtext_en}', - `katalogbezeichnung_de`='{$this->katalogbezeichnung_de}', - `katalogbezeichnung_en`='{$this->katalogbezeichnung_en}', - `neu`='{$this->neu}', - `topseller`='{$this->topseller}', - `startseite`='{$this->startseite}', - `wichtig`='{$this->wichtig}', - `mindestlager`='{$this->mindestlager}', - `mindestbestellung`='{$this->mindestbestellung}', - `partnerprogramm_sperre`='{$this->partnerprogramm_sperre}', - `internerkommentar`='{$this->internerkommentar}', - `intern_gesperrt`='{$this->intern_gesperrt}', - `intern_gesperrtuser`='{$this->intern_gesperrtuser}', - `intern_gesperrtgrund`='{$this->intern_gesperrtgrund}', - `inbearbeitung`='{$this->inbearbeitung}', - `inbearbeitunguser`='{$this->inbearbeitunguser}', - `cache_lagerplatzinhaltmenge`='{$this->cache_lagerplatzinhaltmenge}', - `internkommentar`='{$this->internkommentar}', - `firma`='{$this->firma}', - `logdatei`='{$this->logdatei}', - `anabregs_text`='{$this->anabregs_text}', - `autobestellung`='{$this->autobestellung}', - `produktion`='{$this->produktion}', - `herstellernummer`='{$this->herstellernummer}', - `restmenge`='{$this->restmenge}', - `mlmdirektpraemie`='{$this->mlmdirektpraemie}', - `keineeinzelartikelanzeigen`='{$this->keineeinzelartikelanzeigen}', - `mindesthaltbarkeitsdatum`='{$this->mindesthaltbarkeitsdatum}', - `letzteseriennummer`='{$this->letzteseriennummer}', - `individualartikel`='{$this->individualartikel}', - `keinrabatterlaubt`='{$this->keinrabatterlaubt}', - `rabatt`='{$this->rabatt}', - `rabatt_prozent`='{$this->rabatt_prozent}', - `geraet`='{$this->geraet}', - `serviceartikel`='{$this->serviceartikel}', - `autoabgleicherlaubt`='{$this->autoabgleicherlaubt}', - `pseudopreis`='{$this->pseudopreis}', - `freigabenotwendig`='{$this->freigabenotwendig}', - `freigaberegel`='{$this->freigaberegel}', - `nachbestellt`='{$this->nachbestellt}', - `ean`='{$this->ean}', - `mlmpunkte`='{$this->mlmpunkte}', - `mlmbonuspunkte`='{$this->mlmbonuspunkte}', - `mlmkeinepunkteeigenkauf`='{$this->mlmkeinepunkteeigenkauf}', - `shop2`='{$this->shop2}', - `shop3`='{$this->shop3}', - `usereditid`='{$this->usereditid}', - `useredittimestamp`='{$this->useredittimestamp}', - `freifeld1`='{$this->freifeld1}', - `freifeld2`='{$this->freifeld2}', - `freifeld3`='{$this->freifeld3}', - `freifeld4`='{$this->freifeld4}', - `freifeld5`='{$this->freifeld5}', - `freifeld6`='{$this->freifeld6}', - `einheit`='{$this->einheit}', - `webid`='{$this->webid}', - `lieferzeitmanuell_en`='{$this->lieferzeitmanuell_en}', - `variante`='{$this->variante}', - `variante_von`='{$this->variante_von}', - `produktioninfo`='{$this->produktioninfo}', - `sonderaktion`='{$this->sonderaktion}', - `sonderaktion_en`='{$this->sonderaktion_en}', - `autolagerlampe`='{$this->autolagerlampe}', - `leerfeld`='{$this->leerfeld}', - `zolltarifnummer`='{$this->zolltarifnummer}', - `herkunftsland`='{$this->herkunftsland}', - `laenge`='{$this->laenge}', - `breite`='{$this->breite}', - `hoehe`='{$this->hoehe}', - `gebuehr`='{$this->gebuehr}', - `pseudolager`='{$this->pseudolager}', - `downloadartikel`='{$this->downloadartikel}', - `matrixprodukt`='{$this->matrixprodukt}', - `steuer_erloese_inland_normal`='{$this->steuer_erloese_inland_normal}', - `steuer_aufwendung_inland_normal`='{$this->steuer_aufwendung_inland_normal}', - `steuer_erloese_inland_ermaessigt`='{$this->steuer_erloese_inland_ermaessigt}', - `steuer_aufwendung_inland_ermaessigt`='{$this->steuer_aufwendung_inland_ermaessigt}', - `steuer_erloese_inland_steuerfrei`='{$this->steuer_erloese_inland_steuerfrei}', - `steuer_aufwendung_inland_steuerfrei`='{$this->steuer_aufwendung_inland_steuerfrei}', - `steuer_erloese_inland_innergemeinschaftlich`='{$this->steuer_erloese_inland_innergemeinschaftlich}', - `steuer_aufwendung_inland_innergemeinschaftlich`='{$this->steuer_aufwendung_inland_innergemeinschaftlich}', - `steuer_erloese_inland_eunormal`='{$this->steuer_erloese_inland_eunormal}', - `steuer_erloese_inland_nichtsteuerbar`='{$this->steuer_erloese_inland_nichtsteuerbar}', - `steuer_erloese_inland_euermaessigt`='{$this->steuer_erloese_inland_euermaessigt}', - `steuer_aufwendung_inland_nichtsteuerbar`='{$this->steuer_aufwendung_inland_nichtsteuerbar}', - `steuer_aufwendung_inland_eunormal`='{$this->steuer_aufwendung_inland_eunormal}', - `steuer_aufwendung_inland_euermaessigt`='{$this->steuer_aufwendung_inland_euermaessigt}', - `steuer_erloese_inland_export`='{$this->steuer_erloese_inland_export}', - `steuer_aufwendung_inland_import`='{$this->steuer_aufwendung_inland_import}', - `steuer_art_produkt`='{$this->steuer_art_produkt}', - `steuer_art_produkt_download`='{$this->steuer_art_produkt_download}', - `metadescription_de`='{$this->metadescription_de}', - `metadescription_en`='{$this->metadescription_en}', - `metakeywords_de`='{$this->metakeywords_de}', - `metakeywords_en`='{$this->metakeywords_en}', - `anabregs_text_en`='{$this->anabregs_text_en}', - `externeproduktion`='{$this->externeproduktion}', - `bildvorschau`='{$this->bildvorschau}', - `inventursperre`='{$this->inventursperre}', - `variante_kopie`='{$this->variante_kopie}', - `unikat`='{$this->unikat}', - `generierenummerbeioption`='{$this->generierenummerbeioption}', - `allelieferanten`='{$this->allelieferanten}', - `tagespreise`='{$this->tagespreise}', - `rohstoffe`='{$this->rohstoffe}', - `xvp`='{$this->xvp}', - `ohnepreisimpdf`='{$this->ohnepreisimpdf}', - `provisionssperre`='{$this->provisionssperre}', - `dienstleistung`='{$this->dienstleistung}', - `inventurekaktiv`='{$this->inventurekaktiv}', - `inventurek`='{$this->inventurek}', - `hinweis_einfuegen`='{$this->hinweis_einfuegen}', - `etikettautodruck`='{$this->etikettautodruck}', - `lagerkorrekturwert`='{$this->lagerkorrekturwert}', - `autodrucketikett`='{$this->autodrucketikett}', - `abckategorie`='{$this->abckategorie}', - `laststorage_changed`='{$this->laststorage_changed}', - `laststorage_sync`='{$this->laststorage_sync}', - `steuersatz`='{$this->steuersatz}', - `steuertext_innergemeinschaftlich`='{$this->steuertext_innergemeinschaftlich}', - `steuertext_export`='{$this->steuertext_export}', - `formelmenge`='{$this->formelmenge}', - `formelpreis`='{$this->formelpreis}', - `freifeld7`='{$this->freifeld7}', - `freifeld8`='{$this->freifeld8}', - `freifeld9`='{$this->freifeld9}', - `freifeld10`='{$this->freifeld10}', - `freifeld11`='{$this->freifeld11}', - `freifeld12`='{$this->freifeld12}', - `freifeld13`='{$this->freifeld13}', - `freifeld14`='{$this->freifeld14}', - `freifeld15`='{$this->freifeld15}', - `freifeld16`='{$this->freifeld16}', - `freifeld17`='{$this->freifeld17}', - `freifeld18`='{$this->freifeld18}', - `freifeld19`='{$this->freifeld19}', - `freifeld20`='{$this->freifeld20}', - `freifeld21`='{$this->freifeld21}', - `freifeld22`='{$this->freifeld22}', - `freifeld23`='{$this->freifeld23}', - `freifeld24`='{$this->freifeld24}', - `freifeld25`='{$this->freifeld25}', - `freifeld26`='{$this->freifeld26}', - `freifeld27`='{$this->freifeld27}', - `freifeld28`='{$this->freifeld28}', - `freifeld29`='{$this->freifeld29}', - `freifeld30`='{$this->freifeld30}', - `freifeld31`='{$this->freifeld31}', - `freifeld32`='{$this->freifeld32}', - `freifeld33`='{$this->freifeld33}', - `freifeld34`='{$this->freifeld34}', - `freifeld35`='{$this->freifeld35}', - `freifeld36`='{$this->freifeld36}', - `freifeld37`='{$this->freifeld37}', - `freifeld38`='{$this->freifeld38}', - `freifeld39`='{$this->freifeld39}', - `freifeld40`='{$this->freifeld40}', - `ursprungsregion`='{$this->ursprungsregion}', - `bestandalternativartikel`='{$this->bestandalternativartikel}', - `metatitle_de`='{$this->metatitle_de}', - `metatitle_en`='{$this->metatitle_en}', - `vkmeldungunterdruecken`='{$this->vkmeldungunterdruecken}', - `altersfreigabe`='{$this->altersfreigabe}', - `unikatbeikopie`='{$this->unikatbeikopie}', - `steuergruppe`='{$this->steuergruppe}', - `kostenstelle`='{$this->kostenstelle}', - `artikelautokalkulation`='{$this->artikelautokalkulation}', - `artikelabschliessenkalkulation`='{$this->artikelabschliessenkalkulation}', - `artikelfifokalkulation`='{$this->artikelfifokalkulation}', - `keinskonto`='{$this->keinskonto}', - `berechneterek`='{$this->berechneterek}', - `verwendeberechneterek`='{$this->verwendeberechneterek}', - `berechneterekwaehrung`='{$this->berechneterekwaehrung}', - `has_preproduced_partlist`='{$this->has_preproduced_partlist}', - `preproduced_partlist`='{$this->preproduced_partlist}', - `nettogewicht`='{$this->nettogewicht}' - WHERE (`id`='{$this->id}')"; - - $this->app->DB->Update($sql); - } - - public function Delete($id='') - { - if(is_numeric($id)) - { - $this->id=$id; - } - else - return -1; - - $sql = "DELETE FROM `artikel` WHERE (`id`='{$this->id}')"; - $this->app->DB->Delete($sql); - - $this->id=''; - $this->typ=''; - $this->nummer=''; - $this->checksum=''; - $this->projekt=''; - $this->inaktiv=''; - $this->ausverkauft=''; - $this->warengruppe=''; - $this->name_de=''; - $this->name_en=''; - $this->kurztext_de=''; - $this->kurztext_en=''; - $this->beschreibung_de=''; - $this->beschreibung_en=''; - $this->uebersicht_de=''; - $this->uebersicht_en=''; - $this->links_de=''; - $this->links_en=''; - $this->startseite_de=''; - $this->startseite_en=''; - $this->standardbild=''; - $this->herstellerlink=''; - $this->hersteller=''; - $this->teilbar=''; - $this->nteile=''; - $this->seriennummern=''; - $this->lager_platz=''; - $this->lieferzeit=''; - $this->lieferzeitmanuell=''; - $this->sonstiges=''; - $this->gewicht=''; - $this->endmontage=''; - $this->funktionstest=''; - $this->artikelcheckliste=''; - $this->stueckliste=''; - $this->juststueckliste=''; - $this->barcode=''; - $this->hinzugefuegt=''; - $this->pcbdecal=''; - $this->lagerartikel=''; - $this->porto=''; - $this->chargenverwaltung=''; - $this->provisionsartikel=''; - $this->gesperrt=''; - $this->sperrgrund=''; - $this->geloescht=''; - $this->gueltigbis=''; - $this->umsatzsteuer=''; - $this->klasse=''; - $this->adresse=''; - $this->shopartikel=''; - $this->unishopartikel=''; - $this->journalshopartikel=''; - $this->shop=''; - $this->katalog=''; - $this->katalogtext_de=''; - $this->katalogtext_en=''; - $this->katalogbezeichnung_de=''; - $this->katalogbezeichnung_en=''; - $this->neu=''; - $this->topseller=''; - $this->startseite=''; - $this->wichtig=''; - $this->mindestlager=''; - $this->mindestbestellung=''; - $this->partnerprogramm_sperre=''; - $this->internerkommentar=''; - $this->intern_gesperrt=''; - $this->intern_gesperrtuser=''; - $this->intern_gesperrtgrund=''; - $this->inbearbeitung=''; - $this->inbearbeitunguser=''; - $this->cache_lagerplatzinhaltmenge=''; - $this->internkommentar=''; - $this->firma=''; - $this->logdatei=''; - $this->anabregs_text=''; - $this->autobestellung=''; - $this->produktion=''; - $this->herstellernummer=''; - $this->restmenge=''; - $this->mlmdirektpraemie=''; - $this->keineeinzelartikelanzeigen=''; - $this->mindesthaltbarkeitsdatum=''; - $this->letzteseriennummer=''; - $this->individualartikel=''; - $this->keinrabatterlaubt=''; - $this->rabatt=''; - $this->rabatt_prozent=''; - $this->geraet=''; - $this->serviceartikel=''; - $this->autoabgleicherlaubt=''; - $this->pseudopreis=''; - $this->freigabenotwendig=''; - $this->freigaberegel=''; - $this->nachbestellt=''; - $this->ean=''; - $this->mlmpunkte=''; - $this->mlmbonuspunkte=''; - $this->mlmkeinepunkteeigenkauf=''; - $this->shop2=''; - $this->shop3=''; - $this->usereditid=''; - $this->useredittimestamp=''; - $this->freifeld1=''; - $this->freifeld2=''; - $this->freifeld3=''; - $this->freifeld4=''; - $this->freifeld5=''; - $this->freifeld6=''; - $this->einheit=''; - $this->webid=''; - $this->lieferzeitmanuell_en=''; - $this->variante=''; - $this->variante_von=''; - $this->produktioninfo=''; - $this->sonderaktion=''; - $this->sonderaktion_en=''; - $this->autolagerlampe=''; - $this->leerfeld=''; - $this->zolltarifnummer=''; - $this->herkunftsland=''; - $this->laenge=''; - $this->breite=''; - $this->hoehe=''; - $this->gebuehr=''; - $this->pseudolager=''; - $this->downloadartikel=''; - $this->matrixprodukt=''; - $this->steuer_erloese_inland_normal=''; - $this->steuer_aufwendung_inland_normal=''; - $this->steuer_erloese_inland_ermaessigt=''; - $this->steuer_aufwendung_inland_ermaessigt=''; - $this->steuer_erloese_inland_steuerfrei=''; - $this->steuer_aufwendung_inland_steuerfrei=''; - $this->steuer_erloese_inland_innergemeinschaftlich=''; - $this->steuer_aufwendung_inland_innergemeinschaftlich=''; - $this->steuer_erloese_inland_eunormal=''; - $this->steuer_erloese_inland_nichtsteuerbar=''; - $this->steuer_erloese_inland_euermaessigt=''; - $this->steuer_aufwendung_inland_nichtsteuerbar=''; - $this->steuer_aufwendung_inland_eunormal=''; - $this->steuer_aufwendung_inland_euermaessigt=''; - $this->steuer_erloese_inland_export=''; - $this->steuer_aufwendung_inland_import=''; - $this->steuer_art_produkt=''; - $this->steuer_art_produkt_download=''; - $this->metadescription_de=''; - $this->metadescription_en=''; - $this->metakeywords_de=''; - $this->metakeywords_en=''; - $this->anabregs_text_en=''; - $this->externeproduktion=''; - $this->bildvorschau=''; - $this->inventursperre=''; - $this->variante_kopie=''; - $this->unikat=''; - $this->generierenummerbeioption=''; - $this->allelieferanten=''; - $this->tagespreise=''; - $this->rohstoffe=''; - $this->xvp=''; - $this->ohnepreisimpdf=''; - $this->provisionssperre=''; - $this->dienstleistung=''; - $this->inventurekaktiv=''; - $this->inventurek=''; - $this->hinweis_einfuegen=''; - $this->etikettautodruck=''; - $this->lagerkorrekturwert=''; - $this->autodrucketikett=''; - $this->abckategorie=''; - $this->laststorage_changed=''; - $this->laststorage_sync=''; - $this->steuersatz=''; - $this->steuertext_innergemeinschaftlich=''; - $this->steuertext_export=''; - $this->formelmenge=''; - $this->formelpreis=''; - $this->freifeld7=''; - $this->freifeld8=''; - $this->freifeld9=''; - $this->freifeld10=''; - $this->freifeld11=''; - $this->freifeld12=''; - $this->freifeld13=''; - $this->freifeld14=''; - $this->freifeld15=''; - $this->freifeld16=''; - $this->freifeld17=''; - $this->freifeld18=''; - $this->freifeld19=''; - $this->freifeld20=''; - $this->freifeld21=''; - $this->freifeld22=''; - $this->freifeld23=''; - $this->freifeld24=''; - $this->freifeld25=''; - $this->freifeld26=''; - $this->freifeld27=''; - $this->freifeld28=''; - $this->freifeld29=''; - $this->freifeld30=''; - $this->freifeld31=''; - $this->freifeld32=''; - $this->freifeld33=''; - $this->freifeld34=''; - $this->freifeld35=''; - $this->freifeld36=''; - $this->freifeld37=''; - $this->freifeld38=''; - $this->freifeld39=''; - $this->freifeld40=''; - $this->ursprungsregion=''; - $this->bestandalternativartikel=''; - $this->metatitle_de=''; - $this->metatitle_en=''; - $this->vkmeldungunterdruecken=''; - $this->altersfreigabe=''; - $this->unikatbeikopie=''; - $this->steuergruppe=''; - $this->kostenstelle=''; - $this->artikelautokalkulation=''; - $this->artikelabschliessenkalkulation=''; - $this->artikelfifokalkulation=''; - $this->keinskonto=''; - $this->berechneterek=''; - $this->verwendeberechneterek=''; - $this->berechneterekwaehrung=''; - $this->has_preproduced_partlist=''; - $this->preproduced_partlist=''; - $this->nettogewicht=''; - } - - public function Copy() - { - $this->id = ''; - $this->Create(); - } - - /** - Mit dieser Funktion kann man einen Datensatz suchen - dafuer muss man die Attribute setzen nach denen gesucht werden soll - dann kriegt man als ergebnis den ersten Datensatz der auf die Suche uebereinstimmt - zurueck. Mit Next() kann man sich alle weiteren Ergebnisse abholen - **/ - - public function Find() - { - //TODO Suche mit den werten machen - } - - public function FindNext() - { - //TODO Suche mit den alten werten fortsetzen machen - } - - /** Funktionen um durch die Tabelle iterieren zu koennen */ - - public function Next() - { - //TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer - } - - public function First() - { - //TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer - } - - /** dank dieser funktionen kann man die tatsaechlichen werte einfach - ueberladen (in einem Objekt das mit seiner klasse ueber dieser steht)**/ - - public function SetId($value) { $this->id=$value; } - public function GetId() { return $this->id; } - public function SetTyp($value) { $this->typ=$value; } - public function GetTyp() { return $this->typ; } - public function SetNummer($value) { $this->nummer=$value; } - public function GetNummer() { return $this->nummer; } - public function SetChecksum($value) { $this->checksum=$value; } - public function GetChecksum() { return $this->checksum; } - public function SetProjekt($value) { $this->projekt=$value; } - public function GetProjekt() { return $this->projekt; } - public function SetInaktiv($value) { $this->inaktiv=$value; } - public function GetInaktiv() { return $this->inaktiv; } - public function SetAusverkauft($value) { $this->ausverkauft=$value; } - public function GetAusverkauft() { return $this->ausverkauft; } - public function SetWarengruppe($value) { $this->warengruppe=$value; } - public function GetWarengruppe() { return $this->warengruppe; } - public function SetName_De($value) { $this->name_de=$value; } - public function GetName_De() { return $this->name_de; } - public function SetName_En($value) { $this->name_en=$value; } - public function GetName_En() { return $this->name_en; } - public function SetKurztext_De($value) { $this->kurztext_de=$value; } - public function GetKurztext_De() { return $this->kurztext_de; } - public function SetKurztext_En($value) { $this->kurztext_en=$value; } - public function GetKurztext_En() { return $this->kurztext_en; } - public function SetBeschreibung_De($value) { $this->beschreibung_de=$value; } - public function GetBeschreibung_De() { return $this->beschreibung_de; } - public function SetBeschreibung_En($value) { $this->beschreibung_en=$value; } - public function GetBeschreibung_En() { return $this->beschreibung_en; } - public function SetUebersicht_De($value) { $this->uebersicht_de=$value; } - public function GetUebersicht_De() { return $this->uebersicht_de; } - public function SetUebersicht_En($value) { $this->uebersicht_en=$value; } - public function GetUebersicht_En() { return $this->uebersicht_en; } - public function SetLinks_De($value) { $this->links_de=$value; } - public function GetLinks_De() { return $this->links_de; } - public function SetLinks_En($value) { $this->links_en=$value; } - public function GetLinks_En() { return $this->links_en; } - public function SetStartseite_De($value) { $this->startseite_de=$value; } - public function GetStartseite_De() { return $this->startseite_de; } - public function SetStartseite_En($value) { $this->startseite_en=$value; } - public function GetStartseite_En() { return $this->startseite_en; } - public function SetStandardbild($value) { $this->standardbild=$value; } - public function GetStandardbild() { return $this->standardbild; } - public function SetHerstellerlink($value) { $this->herstellerlink=$value; } - public function GetHerstellerlink() { return $this->herstellerlink; } - public function SetHersteller($value) { $this->hersteller=$value; } - public function GetHersteller() { return $this->hersteller; } - public function SetTeilbar($value) { $this->teilbar=$value; } - public function GetTeilbar() { return $this->teilbar; } - public function SetNteile($value) { $this->nteile=$value; } - public function GetNteile() { return $this->nteile; } - public function SetSeriennummern($value) { $this->seriennummern=$value; } - public function GetSeriennummern() { return $this->seriennummern; } - public function SetLager_Platz($value) { $this->lager_platz=$value; } - public function GetLager_Platz() { return $this->lager_platz; } - public function SetLieferzeit($value) { $this->lieferzeit=$value; } - public function GetLieferzeit() { return $this->lieferzeit; } - public function SetLieferzeitmanuell($value) { $this->lieferzeitmanuell=$value; } - public function GetLieferzeitmanuell() { return $this->lieferzeitmanuell; } - public function SetSonstiges($value) { $this->sonstiges=$value; } - public function GetSonstiges() { return $this->sonstiges; } - public function SetGewicht($value) { $this->gewicht=$value; } - public function GetGewicht() { return $this->gewicht; } - public function SetEndmontage($value) { $this->endmontage=$value; } - public function GetEndmontage() { return $this->endmontage; } - public function SetFunktionstest($value) { $this->funktionstest=$value; } - public function GetFunktionstest() { return $this->funktionstest; } - public function SetArtikelcheckliste($value) { $this->artikelcheckliste=$value; } - public function GetArtikelcheckliste() { return $this->artikelcheckliste; } - public function SetStueckliste($value) { $this->stueckliste=$value; } - public function GetStueckliste() { return $this->stueckliste; } - public function SetJuststueckliste($value) { $this->juststueckliste=$value; } - public function GetJuststueckliste() { return $this->juststueckliste; } - public function SetBarcode($value) { $this->barcode=$value; } - public function GetBarcode() { return $this->barcode; } - public function SetHinzugefuegt($value) { $this->hinzugefuegt=$value; } - public function GetHinzugefuegt() { return $this->hinzugefuegt; } - public function SetPcbdecal($value) { $this->pcbdecal=$value; } - public function GetPcbdecal() { return $this->pcbdecal; } - public function SetLagerartikel($value) { $this->lagerartikel=$value; } - public function GetLagerartikel() { return $this->lagerartikel; } - public function SetPorto($value) { $this->porto=$value; } - public function GetPorto() { return $this->porto; } - public function SetChargenverwaltung($value) { $this->chargenverwaltung=$value; } - public function GetChargenverwaltung() { return $this->chargenverwaltung; } - public function SetProvisionsartikel($value) { $this->provisionsartikel=$value; } - public function GetProvisionsartikel() { return $this->provisionsartikel; } - public function SetGesperrt($value) { $this->gesperrt=$value; } - public function GetGesperrt() { return $this->gesperrt; } - public function SetSperrgrund($value) { $this->sperrgrund=$value; } - public function GetSperrgrund() { return $this->sperrgrund; } - public function SetGeloescht($value) { $this->geloescht=$value; } - public function GetGeloescht() { return $this->geloescht; } - public function SetGueltigbis($value) { $this->gueltigbis=$value; } - public function GetGueltigbis() { return $this->gueltigbis; } - public function SetUmsatzsteuer($value) { $this->umsatzsteuer=$value; } - public function GetUmsatzsteuer() { return $this->umsatzsteuer; } - public function SetKlasse($value) { $this->klasse=$value; } - public function GetKlasse() { return $this->klasse; } - public function SetAdresse($value) { $this->adresse=$value; } - public function GetAdresse() { return $this->adresse; } - public function SetShopartikel($value) { $this->shopartikel=$value; } - public function GetShopartikel() { return $this->shopartikel; } - public function SetUnishopartikel($value) { $this->unishopartikel=$value; } - public function GetUnishopartikel() { return $this->unishopartikel; } - public function SetJournalshopartikel($value) { $this->journalshopartikel=$value; } - public function GetJournalshopartikel() { return $this->journalshopartikel; } - public function SetShop($value) { $this->shop=$value; } - public function GetShop() { return $this->shop; } - public function SetKatalog($value) { $this->katalog=$value; } - public function GetKatalog() { return $this->katalog; } - public function SetKatalogtext_De($value) { $this->katalogtext_de=$value; } - public function GetKatalogtext_De() { return $this->katalogtext_de; } - public function SetKatalogtext_En($value) { $this->katalogtext_en=$value; } - public function GetKatalogtext_En() { return $this->katalogtext_en; } - public function SetKatalogbezeichnung_De($value) { $this->katalogbezeichnung_de=$value; } - public function GetKatalogbezeichnung_De() { return $this->katalogbezeichnung_de; } - public function SetKatalogbezeichnung_En($value) { $this->katalogbezeichnung_en=$value; } - public function GetKatalogbezeichnung_En() { return $this->katalogbezeichnung_en; } - public function SetNeu($value) { $this->neu=$value; } - public function GetNeu() { return $this->neu; } - public function SetTopseller($value) { $this->topseller=$value; } - public function GetTopseller() { return $this->topseller; } - public function SetStartseite($value) { $this->startseite=$value; } - public function GetStartseite() { return $this->startseite; } - public function SetWichtig($value) { $this->wichtig=$value; } - public function GetWichtig() { return $this->wichtig; } - public function SetMindestlager($value) { $this->mindestlager=$value; } - public function GetMindestlager() { return $this->mindestlager; } - public function SetMindestbestellung($value) { $this->mindestbestellung=$value; } - public function GetMindestbestellung() { return $this->mindestbestellung; } - public function SetPartnerprogramm_Sperre($value) { $this->partnerprogramm_sperre=$value; } - public function GetPartnerprogramm_Sperre() { return $this->partnerprogramm_sperre; } - public function SetInternerkommentar($value) { $this->internerkommentar=$value; } - public function GetInternerkommentar() { return $this->internerkommentar; } - public function SetIntern_Gesperrt($value) { $this->intern_gesperrt=$value; } - public function GetIntern_Gesperrt() { return $this->intern_gesperrt; } - public function SetIntern_Gesperrtuser($value) { $this->intern_gesperrtuser=$value; } - public function GetIntern_Gesperrtuser() { return $this->intern_gesperrtuser; } - public function SetIntern_Gesperrtgrund($value) { $this->intern_gesperrtgrund=$value; } - public function GetIntern_Gesperrtgrund() { return $this->intern_gesperrtgrund; } - public function SetInbearbeitung($value) { $this->inbearbeitung=$value; } - public function GetInbearbeitung() { return $this->inbearbeitung; } - public function SetInbearbeitunguser($value) { $this->inbearbeitunguser=$value; } - public function GetInbearbeitunguser() { return $this->inbearbeitunguser; } - public function SetCache_Lagerplatzinhaltmenge($value) { $this->cache_lagerplatzinhaltmenge=$value; } - public function GetCache_Lagerplatzinhaltmenge() { return $this->cache_lagerplatzinhaltmenge; } - public function SetInternkommentar($value) { $this->internkommentar=$value; } - public function GetInternkommentar() { return $this->internkommentar; } - public function SetFirma($value) { $this->firma=$value; } - public function GetFirma() { return $this->firma; } - public function SetLogdatei($value) { $this->logdatei=$value; } - public function GetLogdatei() { return $this->logdatei; } - public function SetAnabregs_Text($value) { $this->anabregs_text=$value; } - public function GetAnabregs_Text() { return $this->anabregs_text; } - public function SetAutobestellung($value) { $this->autobestellung=$value; } - public function GetAutobestellung() { return $this->autobestellung; } - public function SetProduktion($value) { $this->produktion=$value; } - public function GetProduktion() { return $this->produktion; } - public function SetHerstellernummer($value) { $this->herstellernummer=$value; } - public function GetHerstellernummer() { return $this->herstellernummer; } - public function SetRestmenge($value) { $this->restmenge=$value; } - public function GetRestmenge() { return $this->restmenge; } - public function SetMlmdirektpraemie($value) { $this->mlmdirektpraemie=$value; } - public function GetMlmdirektpraemie() { return $this->mlmdirektpraemie; } - public function SetKeineeinzelartikelanzeigen($value) { $this->keineeinzelartikelanzeigen=$value; } - public function GetKeineeinzelartikelanzeigen() { return $this->keineeinzelartikelanzeigen; } - public function SetMindesthaltbarkeitsdatum($value) { $this->mindesthaltbarkeitsdatum=$value; } - public function GetMindesthaltbarkeitsdatum() { return $this->mindesthaltbarkeitsdatum; } - public function SetLetzteseriennummer($value) { $this->letzteseriennummer=$value; } - public function GetLetzteseriennummer() { return $this->letzteseriennummer; } - public function SetIndividualartikel($value) { $this->individualartikel=$value; } - public function GetIndividualartikel() { return $this->individualartikel; } - public function SetKeinrabatterlaubt($value) { $this->keinrabatterlaubt=$value; } - public function GetKeinrabatterlaubt() { return $this->keinrabatterlaubt; } - public function SetRabatt($value) { $this->rabatt=$value; } - public function GetRabatt() { return $this->rabatt; } - public function SetRabatt_Prozent($value) { $this->rabatt_prozent=$value; } - public function GetRabatt_Prozent() { return $this->rabatt_prozent; } - public function SetGeraet($value) { $this->geraet=$value; } - public function GetGeraet() { return $this->geraet; } - public function SetServiceartikel($value) { $this->serviceartikel=$value; } - public function GetServiceartikel() { return $this->serviceartikel; } - public function SetAutoabgleicherlaubt($value) { $this->autoabgleicherlaubt=$value; } - public function GetAutoabgleicherlaubt() { return $this->autoabgleicherlaubt; } - public function SetPseudopreis($value) { $this->pseudopreis=$value; } - public function GetPseudopreis() { return $this->pseudopreis; } - public function SetFreigabenotwendig($value) { $this->freigabenotwendig=$value; } - public function GetFreigabenotwendig() { return $this->freigabenotwendig; } - public function SetFreigaberegel($value) { $this->freigaberegel=$value; } - public function GetFreigaberegel() { return $this->freigaberegel; } - public function SetNachbestellt($value) { $this->nachbestellt=$value; } - public function GetNachbestellt() { return $this->nachbestellt; } - public function SetEan($value) { $this->ean=$value; } - public function GetEan() { return $this->ean; } - public function SetMlmpunkte($value) { $this->mlmpunkte=$value; } - public function GetMlmpunkte() { return $this->mlmpunkte; } - public function SetMlmbonuspunkte($value) { $this->mlmbonuspunkte=$value; } - public function GetMlmbonuspunkte() { return $this->mlmbonuspunkte; } - public function SetMlmkeinepunkteeigenkauf($value) { $this->mlmkeinepunkteeigenkauf=$value; } - public function GetMlmkeinepunkteeigenkauf() { return $this->mlmkeinepunkteeigenkauf; } - public function SetShop2($value) { $this->shop2=$value; } - public function GetShop2() { return $this->shop2; } - public function SetShop3($value) { $this->shop3=$value; } - public function GetShop3() { return $this->shop3; } - public function SetUsereditid($value) { $this->usereditid=$value; } - public function GetUsereditid() { return $this->usereditid; } - public function SetUseredittimestamp($value) { $this->useredittimestamp=$value; } - public function GetUseredittimestamp() { return $this->useredittimestamp; } - public function SetFreifeld1($value) { $this->freifeld1=$value; } - public function GetFreifeld1() { return $this->freifeld1; } - public function SetFreifeld2($value) { $this->freifeld2=$value; } - public function GetFreifeld2() { return $this->freifeld2; } - public function SetFreifeld3($value) { $this->freifeld3=$value; } - public function GetFreifeld3() { return $this->freifeld3; } - public function SetFreifeld4($value) { $this->freifeld4=$value; } - public function GetFreifeld4() { return $this->freifeld4; } - public function SetFreifeld5($value) { $this->freifeld5=$value; } - public function GetFreifeld5() { return $this->freifeld5; } - public function SetFreifeld6($value) { $this->freifeld6=$value; } - public function GetFreifeld6() { return $this->freifeld6; } - public function SetEinheit($value) { $this->einheit=$value; } - public function GetEinheit() { return $this->einheit; } - public function SetWebid($value) { $this->webid=$value; } - public function GetWebid() { return $this->webid; } - public function SetLieferzeitmanuell_En($value) { $this->lieferzeitmanuell_en=$value; } - public function GetLieferzeitmanuell_En() { return $this->lieferzeitmanuell_en; } - public function SetVariante($value) { $this->variante=$value; } - public function GetVariante() { return $this->variante; } - public function SetVariante_Von($value) { $this->variante_von=$value; } - public function GetVariante_Von() { return $this->variante_von; } - public function SetProduktioninfo($value) { $this->produktioninfo=$value; } - public function GetProduktioninfo() { return $this->produktioninfo; } - public function SetSonderaktion($value) { $this->sonderaktion=$value; } - public function GetSonderaktion() { return $this->sonderaktion; } - public function SetSonderaktion_En($value) { $this->sonderaktion_en=$value; } - public function GetSonderaktion_En() { return $this->sonderaktion_en; } - public function SetAutolagerlampe($value) { $this->autolagerlampe=$value; } - public function GetAutolagerlampe() { return $this->autolagerlampe; } - public function SetLeerfeld($value) { $this->leerfeld=$value; } - public function GetLeerfeld() { return $this->leerfeld; } - public function SetZolltarifnummer($value) { $this->zolltarifnummer=$value; } - public function GetZolltarifnummer() { return $this->zolltarifnummer; } - public function SetHerkunftsland($value) { $this->herkunftsland=$value; } - public function GetHerkunftsland() { return $this->herkunftsland; } - public function SetLaenge($value) { $this->laenge=$value; } - public function GetLaenge() { return $this->laenge; } - public function SetBreite($value) { $this->breite=$value; } - public function GetBreite() { return $this->breite; } - public function SetHoehe($value) { $this->hoehe=$value; } - public function GetHoehe() { return $this->hoehe; } - public function SetGebuehr($value) { $this->gebuehr=$value; } - public function GetGebuehr() { return $this->gebuehr; } - public function SetPseudolager($value) { $this->pseudolager=$value; } - public function GetPseudolager() { return $this->pseudolager; } - public function SetDownloadartikel($value) { $this->downloadartikel=$value; } - public function GetDownloadartikel() { return $this->downloadartikel; } - public function SetMatrixprodukt($value) { $this->matrixprodukt=$value; } - public function GetMatrixprodukt() { return $this->matrixprodukt; } - public function SetSteuer_Erloese_Inland_Normal($value) { $this->steuer_erloese_inland_normal=$value; } - public function GetSteuer_Erloese_Inland_Normal() { return $this->steuer_erloese_inland_normal; } - public function SetSteuer_Aufwendung_Inland_Normal($value) { $this->steuer_aufwendung_inland_normal=$value; } - public function GetSteuer_Aufwendung_Inland_Normal() { return $this->steuer_aufwendung_inland_normal; } - public function SetSteuer_Erloese_Inland_Ermaessigt($value) { $this->steuer_erloese_inland_ermaessigt=$value; } - public function GetSteuer_Erloese_Inland_Ermaessigt() { return $this->steuer_erloese_inland_ermaessigt; } - public function SetSteuer_Aufwendung_Inland_Ermaessigt($value) { $this->steuer_aufwendung_inland_ermaessigt=$value; } - public function GetSteuer_Aufwendung_Inland_Ermaessigt() { return $this->steuer_aufwendung_inland_ermaessigt; } - public function SetSteuer_Erloese_Inland_Steuerfrei($value) { $this->steuer_erloese_inland_steuerfrei=$value; } - public function GetSteuer_Erloese_Inland_Steuerfrei() { return $this->steuer_erloese_inland_steuerfrei; } - public function SetSteuer_Aufwendung_Inland_Steuerfrei($value) { $this->steuer_aufwendung_inland_steuerfrei=$value; } - public function GetSteuer_Aufwendung_Inland_Steuerfrei() { return $this->steuer_aufwendung_inland_steuerfrei; } - public function SetSteuer_Erloese_Inland_Innergemeinschaftlich($value) { $this->steuer_erloese_inland_innergemeinschaftlich=$value; } - public function GetSteuer_Erloese_Inland_Innergemeinschaftlich() { return $this->steuer_erloese_inland_innergemeinschaftlich; } - public function SetSteuer_Aufwendung_Inland_Innergemeinschaftlich($value) { $this->steuer_aufwendung_inland_innergemeinschaftlich=$value; } - public function GetSteuer_Aufwendung_Inland_Innergemeinschaftlich() { return $this->steuer_aufwendung_inland_innergemeinschaftlich; } - public function SetSteuer_Erloese_Inland_Eunormal($value) { $this->steuer_erloese_inland_eunormal=$value; } - public function GetSteuer_Erloese_Inland_Eunormal() { return $this->steuer_erloese_inland_eunormal; } - public function SetSteuer_Erloese_Inland_Nichtsteuerbar($value) { $this->steuer_erloese_inland_nichtsteuerbar=$value; } - public function GetSteuer_Erloese_Inland_Nichtsteuerbar() { return $this->steuer_erloese_inland_nichtsteuerbar; } - public function SetSteuer_Erloese_Inland_Euermaessigt($value) { $this->steuer_erloese_inland_euermaessigt=$value; } - public function GetSteuer_Erloese_Inland_Euermaessigt() { return $this->steuer_erloese_inland_euermaessigt; } - public function SetSteuer_Aufwendung_Inland_Nichtsteuerbar($value) { $this->steuer_aufwendung_inland_nichtsteuerbar=$value; } - public function GetSteuer_Aufwendung_Inland_Nichtsteuerbar() { return $this->steuer_aufwendung_inland_nichtsteuerbar; } - public function SetSteuer_Aufwendung_Inland_Eunormal($value) { $this->steuer_aufwendung_inland_eunormal=$value; } - public function GetSteuer_Aufwendung_Inland_Eunormal() { return $this->steuer_aufwendung_inland_eunormal; } - public function SetSteuer_Aufwendung_Inland_Euermaessigt($value) { $this->steuer_aufwendung_inland_euermaessigt=$value; } - public function GetSteuer_Aufwendung_Inland_Euermaessigt() { return $this->steuer_aufwendung_inland_euermaessigt; } - public function SetSteuer_Erloese_Inland_Export($value) { $this->steuer_erloese_inland_export=$value; } - public function GetSteuer_Erloese_Inland_Export() { return $this->steuer_erloese_inland_export; } - public function SetSteuer_Aufwendung_Inland_Import($value) { $this->steuer_aufwendung_inland_import=$value; } - public function GetSteuer_Aufwendung_Inland_Import() { return $this->steuer_aufwendung_inland_import; } - public function SetSteuer_Art_Produkt($value) { $this->steuer_art_produkt=$value; } - public function GetSteuer_Art_Produkt() { return $this->steuer_art_produkt; } - public function SetSteuer_Art_Produkt_Download($value) { $this->steuer_art_produkt_download=$value; } - public function GetSteuer_Art_Produkt_Download() { return $this->steuer_art_produkt_download; } - public function SetMetadescription_De($value) { $this->metadescription_de=$value; } - public function GetMetadescription_De() { return $this->metadescription_de; } - public function SetMetadescription_En($value) { $this->metadescription_en=$value; } - public function GetMetadescription_En() { return $this->metadescription_en; } - public function SetMetakeywords_De($value) { $this->metakeywords_de=$value; } - public function GetMetakeywords_De() { return $this->metakeywords_de; } - public function SetMetakeywords_En($value) { $this->metakeywords_en=$value; } - public function GetMetakeywords_En() { return $this->metakeywords_en; } - public function SetAnabregs_Text_En($value) { $this->anabregs_text_en=$value; } - public function GetAnabregs_Text_En() { return $this->anabregs_text_en; } - public function SetExterneproduktion($value) { $this->externeproduktion=$value; } - public function GetExterneproduktion() { return $this->externeproduktion; } - public function SetBildvorschau($value) { $this->bildvorschau=$value; } - public function GetBildvorschau() { return $this->bildvorschau; } - public function SetInventursperre($value) { $this->inventursperre=$value; } - public function GetInventursperre() { return $this->inventursperre; } - public function SetVariante_Kopie($value) { $this->variante_kopie=$value; } - public function GetVariante_Kopie() { return $this->variante_kopie; } - public function SetUnikat($value) { $this->unikat=$value; } - public function GetUnikat() { return $this->unikat; } - public function SetGenerierenummerbeioption($value) { $this->generierenummerbeioption=$value; } - public function GetGenerierenummerbeioption() { return $this->generierenummerbeioption; } - public function SetAllelieferanten($value) { $this->allelieferanten=$value; } - public function GetAllelieferanten() { return $this->allelieferanten; } - public function SetTagespreise($value) { $this->tagespreise=$value; } - public function GetTagespreise() { return $this->tagespreise; } - public function SetRohstoffe($value) { $this->rohstoffe=$value; } - public function GetRohstoffe() { return $this->rohstoffe; } - public function SetXvp($value) { $this->xvp=$value; } - public function GetXvp() { return $this->xvp; } - public function SetOhnepreisimpdf($value) { $this->ohnepreisimpdf=$value; } - public function GetOhnepreisimpdf() { return $this->ohnepreisimpdf; } - public function SetProvisionssperre($value) { $this->provisionssperre=$value; } - public function GetProvisionssperre() { return $this->provisionssperre; } - public function SetDienstleistung($value) { $this->dienstleistung=$value; } - public function GetDienstleistung() { return $this->dienstleistung; } - public function SetInventurekaktiv($value) { $this->inventurekaktiv=$value; } - public function GetInventurekaktiv() { return $this->inventurekaktiv; } - public function SetInventurek($value) { $this->inventurek=$value; } - public function GetInventurek() { return $this->inventurek; } - public function SetHinweis_Einfuegen($value) { $this->hinweis_einfuegen=$value; } - public function GetHinweis_Einfuegen() { return $this->hinweis_einfuegen; } - public function SetEtikettautodruck($value) { $this->etikettautodruck=$value; } - public function GetEtikettautodruck() { return $this->etikettautodruck; } - public function SetLagerkorrekturwert($value) { $this->lagerkorrekturwert=$value; } - public function GetLagerkorrekturwert() { return $this->lagerkorrekturwert; } - public function SetAutodrucketikett($value) { $this->autodrucketikett=$value; } - public function GetAutodrucketikett() { return $this->autodrucketikett; } - public function SetAbckategorie($value) { $this->abckategorie=$value; } - public function GetAbckategorie() { return $this->abckategorie; } - public function SetLaststorage_Changed($value) { $this->laststorage_changed=$value; } - public function GetLaststorage_Changed() { return $this->laststorage_changed; } - public function SetLaststorage_Sync($value) { $this->laststorage_sync=$value; } - public function GetLaststorage_Sync() { return $this->laststorage_sync; } - public function SetSteuersatz($value) { $this->steuersatz=$value; } - public function GetSteuersatz() { return $this->steuersatz; } - public function SetSteuertext_Innergemeinschaftlich($value) { $this->steuertext_innergemeinschaftlich=$value; } - public function GetSteuertext_Innergemeinschaftlich() { return $this->steuertext_innergemeinschaftlich; } - public function SetSteuertext_Export($value) { $this->steuertext_export=$value; } - public function GetSteuertext_Export() { return $this->steuertext_export; } - public function SetFormelmenge($value) { $this->formelmenge=$value; } - public function GetFormelmenge() { return $this->formelmenge; } - public function SetFormelpreis($value) { $this->formelpreis=$value; } - public function GetFormelpreis() { return $this->formelpreis; } - public function SetFreifeld7($value) { $this->freifeld7=$value; } - public function GetFreifeld7() { return $this->freifeld7; } - public function SetFreifeld8($value) { $this->freifeld8=$value; } - public function GetFreifeld8() { return $this->freifeld8; } - public function SetFreifeld9($value) { $this->freifeld9=$value; } - public function GetFreifeld9() { return $this->freifeld9; } - public function SetFreifeld10($value) { $this->freifeld10=$value; } - public function GetFreifeld10() { return $this->freifeld10; } - public function SetFreifeld11($value) { $this->freifeld11=$value; } - public function GetFreifeld11() { return $this->freifeld11; } - public function SetFreifeld12($value) { $this->freifeld12=$value; } - public function GetFreifeld12() { return $this->freifeld12; } - public function SetFreifeld13($value) { $this->freifeld13=$value; } - public function GetFreifeld13() { return $this->freifeld13; } - public function SetFreifeld14($value) { $this->freifeld14=$value; } - public function GetFreifeld14() { return $this->freifeld14; } - public function SetFreifeld15($value) { $this->freifeld15=$value; } - public function GetFreifeld15() { return $this->freifeld15; } - public function SetFreifeld16($value) { $this->freifeld16=$value; } - public function GetFreifeld16() { return $this->freifeld16; } - public function SetFreifeld17($value) { $this->freifeld17=$value; } - public function GetFreifeld17() { return $this->freifeld17; } - public function SetFreifeld18($value) { $this->freifeld18=$value; } - public function GetFreifeld18() { return $this->freifeld18; } - public function SetFreifeld19($value) { $this->freifeld19=$value; } - public function GetFreifeld19() { return $this->freifeld19; } - public function SetFreifeld20($value) { $this->freifeld20=$value; } - public function GetFreifeld20() { return $this->freifeld20; } - public function SetFreifeld21($value) { $this->freifeld21=$value; } - public function GetFreifeld21() { return $this->freifeld21; } - public function SetFreifeld22($value) { $this->freifeld22=$value; } - public function GetFreifeld22() { return $this->freifeld22; } - public function SetFreifeld23($value) { $this->freifeld23=$value; } - public function GetFreifeld23() { return $this->freifeld23; } - public function SetFreifeld24($value) { $this->freifeld24=$value; } - public function GetFreifeld24() { return $this->freifeld24; } - public function SetFreifeld25($value) { $this->freifeld25=$value; } - public function GetFreifeld25() { return $this->freifeld25; } - public function SetFreifeld26($value) { $this->freifeld26=$value; } - public function GetFreifeld26() { return $this->freifeld26; } - public function SetFreifeld27($value) { $this->freifeld27=$value; } - public function GetFreifeld27() { return $this->freifeld27; } - public function SetFreifeld28($value) { $this->freifeld28=$value; } - public function GetFreifeld28() { return $this->freifeld28; } - public function SetFreifeld29($value) { $this->freifeld29=$value; } - public function GetFreifeld29() { return $this->freifeld29; } - public function SetFreifeld30($value) { $this->freifeld30=$value; } - public function GetFreifeld30() { return $this->freifeld30; } - public function SetFreifeld31($value) { $this->freifeld31=$value; } - public function GetFreifeld31() { return $this->freifeld31; } - public function SetFreifeld32($value) { $this->freifeld32=$value; } - public function GetFreifeld32() { return $this->freifeld32; } - public function SetFreifeld33($value) { $this->freifeld33=$value; } - public function GetFreifeld33() { return $this->freifeld33; } - public function SetFreifeld34($value) { $this->freifeld34=$value; } - public function GetFreifeld34() { return $this->freifeld34; } - public function SetFreifeld35($value) { $this->freifeld35=$value; } - public function GetFreifeld35() { return $this->freifeld35; } - public function SetFreifeld36($value) { $this->freifeld36=$value; } - public function GetFreifeld36() { return $this->freifeld36; } - public function SetFreifeld37($value) { $this->freifeld37=$value; } - public function GetFreifeld37() { return $this->freifeld37; } - public function SetFreifeld38($value) { $this->freifeld38=$value; } - public function GetFreifeld38() { return $this->freifeld38; } - public function SetFreifeld39($value) { $this->freifeld39=$value; } - public function GetFreifeld39() { return $this->freifeld39; } - public function SetFreifeld40($value) { $this->freifeld40=$value; } - public function GetFreifeld40() { return $this->freifeld40; } - public function SetUrsprungsregion($value) { $this->ursprungsregion=$value; } - public function GetUrsprungsregion() { return $this->ursprungsregion; } - public function SetBestandalternativartikel($value) { $this->bestandalternativartikel=$value; } - public function GetBestandalternativartikel() { return $this->bestandalternativartikel; } - public function SetMetatitle_De($value) { $this->metatitle_de=$value; } - public function GetMetatitle_De() { return $this->metatitle_de; } - public function SetMetatitle_En($value) { $this->metatitle_en=$value; } - public function GetMetatitle_En() { return $this->metatitle_en; } - public function SetVkmeldungunterdruecken($value) { $this->vkmeldungunterdruecken=$value; } - public function GetVkmeldungunterdruecken() { return $this->vkmeldungunterdruecken; } - public function SetAltersfreigabe($value) { $this->altersfreigabe=$value; } - public function GetAltersfreigabe() { return $this->altersfreigabe; } - public function SetUnikatbeikopie($value) { $this->unikatbeikopie=$value; } - public function GetUnikatbeikopie() { return $this->unikatbeikopie; } - public function SetSteuergruppe($value) { $this->steuergruppe=$value; } - public function GetSteuergruppe() { return $this->steuergruppe; } - public function SetKostenstelle($value) { $this->kostenstelle=$value; } - public function GetKostenstelle() { return $this->kostenstelle; } - public function SetArtikelautokalkulation($value) { $this->artikelautokalkulation=$value; } - public function GetArtikelautokalkulation() { return $this->artikelautokalkulation; } - public function SetArtikelabschliessenkalkulation($value) { $this->artikelabschliessenkalkulation=$value; } - public function GetArtikelabschliessenkalkulation() { return $this->artikelabschliessenkalkulation; } - public function SetArtikelfifokalkulation($value) { $this->artikelfifokalkulation=$value; } - public function GetArtikelfifokalkulation() { return $this->artikelfifokalkulation; } - public function SetKeinskonto($value) { $this->keinskonto=$value; } - public function GetKeinskonto() { return $this->keinskonto; } - public function SetBerechneterek($value) { $this->berechneterek=$value; } - public function GetBerechneterek() { return $this->berechneterek; } - public function SetVerwendeberechneterek($value) { $this->verwendeberechneterek=$value; } - public function GetVerwendeberechneterek() { return $this->verwendeberechneterek; } - public function SetBerechneterekwaehrung($value) { $this->berechneterekwaehrung=$value; } - public function GetBerechneterekwaehrung() { return $this->berechneterekwaehrung; } - public function SetHas_Preproduced_Partlist($value) { $this->has_preproduced_partlist=$value; } - public function GetHas_Preproduced_Partlist() { return $this->has_preproduced_partlist; } - public function SetPreproduced_Partlist($value) { $this->preproduced_partlist=$value; } - public function GetPreproduced_Partlist() { return $this->preproduced_partlist; } - public function SetNettogewicht($value) { $this->nettogewicht=$value; } - public function GetNettogewicht() { return $this->nettogewicht; } - -} +app = $app; + } + + public function Select($id) + { + if(is_numeric($id)) + $result = $this->app->DB->SelectArr("SELECT * FROM `artikel` WHERE (`id` = '$id')"); + else + return -1; + +$result = $result[0]; + + $this->id=$result['id']; + $this->typ=$result['typ']; + $this->nummer=$result['nummer']; + $this->checksum=$result['checksum']; + $this->projekt=$result['projekt']; + $this->inaktiv=$result['inaktiv']; + $this->ausverkauft=$result['ausverkauft']; + $this->warengruppe=$result['warengruppe']; + $this->name_de=$result['name_de']; + $this->name_en=$result['name_en']; + $this->kurztext_de=$result['kurztext_de']; + $this->kurztext_en=$result['kurztext_en']; + $this->beschreibung_de=$result['beschreibung_de']; + $this->beschreibung_en=$result['beschreibung_en']; + $this->uebersicht_de=$result['uebersicht_de']; + $this->uebersicht_en=$result['uebersicht_en']; + $this->links_de=$result['links_de']; + $this->links_en=$result['links_en']; + $this->startseite_de=$result['startseite_de']; + $this->startseite_en=$result['startseite_en']; + $this->standardbild=$result['standardbild']; + $this->herstellerlink=$result['herstellerlink']; + $this->hersteller=$result['hersteller']; + $this->teilbar=$result['teilbar']; + $this->nteile=$result['nteile']; + $this->seriennummern=$result['seriennummern']; + $this->lager_platz=$result['lager_platz']; + $this->lieferzeit=$result['lieferzeit']; + $this->lieferzeitmanuell=$result['lieferzeitmanuell']; + $this->sonstiges=$result['sonstiges']; + $this->gewicht=$result['gewicht']; + $this->endmontage=$result['endmontage']; + $this->funktionstest=$result['funktionstest']; + $this->artikelcheckliste=$result['artikelcheckliste']; + $this->stueckliste=$result['stueckliste']; + $this->juststueckliste=$result['juststueckliste']; + $this->barcode=$result['barcode']; + $this->hinzugefuegt=$result['hinzugefuegt']; + $this->pcbdecal=$result['pcbdecal']; + $this->lagerartikel=$result['lagerartikel']; + $this->porto=$result['porto']; + $this->chargenverwaltung=$result['chargenverwaltung']; + $this->provisionsartikel=$result['provisionsartikel']; + $this->gesperrt=$result['gesperrt']; + $this->sperrgrund=$result['sperrgrund']; + $this->geloescht=$result['geloescht']; + $this->gueltigbis=$result['gueltigbis']; + $this->umsatzsteuer=$result['umsatzsteuer']; + $this->klasse=$result['klasse']; + $this->adresse=$result['adresse']; + $this->shopartikel=$result['shopartikel']; + $this->unishopartikel=$result['unishopartikel']; + $this->journalshopartikel=$result['journalshopartikel']; + $this->shop=$result['shop']; + $this->katalog=$result['katalog']; + $this->katalogtext_de=$result['katalogtext_de']; + $this->katalogtext_en=$result['katalogtext_en']; + $this->katalogbezeichnung_de=$result['katalogbezeichnung_de']; + $this->katalogbezeichnung_en=$result['katalogbezeichnung_en']; + $this->neu=$result['neu']; + $this->topseller=$result['topseller']; + $this->startseite=$result['startseite']; + $this->wichtig=$result['wichtig']; + $this->mindestlager=$result['mindestlager']; + $this->mindestbestellung=$result['mindestbestellung']; + $this->partnerprogramm_sperre=$result['partnerprogramm_sperre']; + $this->internerkommentar=$result['internerkommentar']; + $this->intern_gesperrt=$result['intern_gesperrt']; + $this->intern_gesperrtuser=$result['intern_gesperrtuser']; + $this->intern_gesperrtgrund=$result['intern_gesperrtgrund']; + $this->inbearbeitung=$result['inbearbeitung']; + $this->inbearbeitunguser=$result['inbearbeitunguser']; + $this->cache_lagerplatzinhaltmenge=$result['cache_lagerplatzinhaltmenge']; + $this->internkommentar=$result['internkommentar']; + $this->firma=$result['firma']; + $this->logdatei=$result['logdatei']; + $this->anabregs_text=$result['anabregs_text']; + $this->autobestellung=$result['autobestellung']; + $this->produktion=$result['produktion']; + $this->herstellernummer=$result['herstellernummer']; + $this->restmenge=$result['restmenge']; + $this->mlmdirektpraemie=$result['mlmdirektpraemie']; + $this->keineeinzelartikelanzeigen=$result['keineeinzelartikelanzeigen']; + $this->mindesthaltbarkeitsdatum=$result['mindesthaltbarkeitsdatum']; + $this->letzteseriennummer=$result['letzteseriennummer']; + $this->individualartikel=$result['individualartikel']; + $this->keinrabatterlaubt=$result['keinrabatterlaubt']; + $this->rabatt=$result['rabatt']; + $this->rabatt_prozent=$result['rabatt_prozent']; + $this->geraet=$result['geraet']; + $this->serviceartikel=$result['serviceartikel']; + $this->autoabgleicherlaubt=$result['autoabgleicherlaubt']; + $this->pseudopreis=$result['pseudopreis']; + $this->freigabenotwendig=$result['freigabenotwendig']; + $this->freigaberegel=$result['freigaberegel']; + $this->nachbestellt=$result['nachbestellt']; + $this->ean=$result['ean']; + $this->mlmpunkte=$result['mlmpunkte']; + $this->mlmbonuspunkte=$result['mlmbonuspunkte']; + $this->mlmkeinepunkteeigenkauf=$result['mlmkeinepunkteeigenkauf']; + $this->shop2=$result['shop2']; + $this->shop3=$result['shop3']; + $this->usereditid=$result['usereditid']; + $this->useredittimestamp=$result['useredittimestamp']; + $this->freifeld1=$result['freifeld1']; + $this->freifeld2=$result['freifeld2']; + $this->freifeld3=$result['freifeld3']; + $this->freifeld4=$result['freifeld4']; + $this->freifeld5=$result['freifeld5']; + $this->freifeld6=$result['freifeld6']; + $this->einheit=$result['einheit']; + $this->webid=$result['webid']; + $this->lieferzeitmanuell_en=$result['lieferzeitmanuell_en']; + $this->variante=$result['variante']; + $this->variante_von=$result['variante_von']; + $this->produktioninfo=$result['produktioninfo']; + $this->sonderaktion=$result['sonderaktion']; + $this->sonderaktion_en=$result['sonderaktion_en']; + $this->autolagerlampe=$result['autolagerlampe']; + $this->leerfeld=$result['leerfeld']; + $this->zolltarifnummer=$result['zolltarifnummer']; + $this->herkunftsland=$result['herkunftsland']; + $this->laenge=$result['laenge']; + $this->breite=$result['breite']; + $this->hoehe=$result['hoehe']; + $this->gebuehr=$result['gebuehr']; + $this->pseudolager=$result['pseudolager']; + $this->downloadartikel=$result['downloadartikel']; + $this->matrixprodukt=$result['matrixprodukt']; + $this->steuer_erloese_inland_normal=$result['steuer_erloese_inland_normal']; + $this->steuer_aufwendung_inland_normal=$result['steuer_aufwendung_inland_normal']; + $this->steuer_erloese_inland_ermaessigt=$result['steuer_erloese_inland_ermaessigt']; + $this->steuer_aufwendung_inland_ermaessigt=$result['steuer_aufwendung_inland_ermaessigt']; + $this->steuer_erloese_inland_steuerfrei=$result['steuer_erloese_inland_steuerfrei']; + $this->steuer_aufwendung_inland_steuerfrei=$result['steuer_aufwendung_inland_steuerfrei']; + $this->steuer_erloese_inland_innergemeinschaftlich=$result['steuer_erloese_inland_innergemeinschaftlich']; + $this->steuer_aufwendung_inland_innergemeinschaftlich=$result['steuer_aufwendung_inland_innergemeinschaftlich']; + $this->steuer_erloese_inland_eunormal=$result['steuer_erloese_inland_eunormal']; + $this->steuer_erloese_inland_nichtsteuerbar=$result['steuer_erloese_inland_nichtsteuerbar']; + $this->steuer_erloese_inland_euermaessigt=$result['steuer_erloese_inland_euermaessigt']; + $this->steuer_aufwendung_inland_nichtsteuerbar=$result['steuer_aufwendung_inland_nichtsteuerbar']; + $this->steuer_aufwendung_inland_eunormal=$result['steuer_aufwendung_inland_eunormal']; + $this->steuer_aufwendung_inland_euermaessigt=$result['steuer_aufwendung_inland_euermaessigt']; + $this->steuer_erloese_inland_export=$result['steuer_erloese_inland_export']; + $this->steuer_aufwendung_inland_import=$result['steuer_aufwendung_inland_import']; + $this->steuer_art_produkt=$result['steuer_art_produkt']; + $this->steuer_art_produkt_download=$result['steuer_art_produkt_download']; + $this->metadescription_de=$result['metadescription_de']; + $this->metadescription_en=$result['metadescription_en']; + $this->metakeywords_de=$result['metakeywords_de']; + $this->metakeywords_en=$result['metakeywords_en']; + $this->anabregs_text_en=$result['anabregs_text_en']; + $this->externeproduktion=$result['externeproduktion']; + $this->bildvorschau=$result['bildvorschau']; + $this->inventursperre=$result['inventursperre']; + $this->variante_kopie=$result['variante_kopie']; + $this->unikat=$result['unikat']; + $this->generierenummerbeioption=$result['generierenummerbeioption']; + $this->allelieferanten=$result['allelieferanten']; + $this->tagespreise=$result['tagespreise']; + $this->rohstoffe=$result['rohstoffe']; + $this->xvp=$result['xvp']; + $this->ohnepreisimpdf=$result['ohnepreisimpdf']; + $this->provisionssperre=$result['provisionssperre']; + $this->dienstleistung=$result['dienstleistung']; + $this->inventurekaktiv=$result['inventurekaktiv']; + $this->inventurek=$result['inventurek']; + $this->hinweis_einfuegen=$result['hinweis_einfuegen']; + $this->etikettautodruck=$result['etikettautodruck']; + $this->lagerkorrekturwert=$result['lagerkorrekturwert']; + $this->autodrucketikett=$result['autodrucketikett']; + $this->abckategorie=$result['abckategorie']; + $this->laststorage_changed=$result['laststorage_changed']; + $this->laststorage_sync=$result['laststorage_sync']; + $this->steuersatz=$result['steuersatz']; + $this->steuertext_innergemeinschaftlich=$result['steuertext_innergemeinschaftlich']; + $this->steuertext_export=$result['steuertext_export']; + $this->formelmenge=$result['formelmenge']; + $this->formelpreis=$result['formelpreis']; + $this->freifeld7=$result['freifeld7']; + $this->freifeld8=$result['freifeld8']; + $this->freifeld9=$result['freifeld9']; + $this->freifeld10=$result['freifeld10']; + $this->freifeld11=$result['freifeld11']; + $this->freifeld12=$result['freifeld12']; + $this->freifeld13=$result['freifeld13']; + $this->freifeld14=$result['freifeld14']; + $this->freifeld15=$result['freifeld15']; + $this->freifeld16=$result['freifeld16']; + $this->freifeld17=$result['freifeld17']; + $this->freifeld18=$result['freifeld18']; + $this->freifeld19=$result['freifeld19']; + $this->freifeld20=$result['freifeld20']; + $this->freifeld21=$result['freifeld21']; + $this->freifeld22=$result['freifeld22']; + $this->freifeld23=$result['freifeld23']; + $this->freifeld24=$result['freifeld24']; + $this->freifeld25=$result['freifeld25']; + $this->freifeld26=$result['freifeld26']; + $this->freifeld27=$result['freifeld27']; + $this->freifeld28=$result['freifeld28']; + $this->freifeld29=$result['freifeld29']; + $this->freifeld30=$result['freifeld30']; + $this->freifeld31=$result['freifeld31']; + $this->freifeld32=$result['freifeld32']; + $this->freifeld33=$result['freifeld33']; + $this->freifeld34=$result['freifeld34']; + $this->freifeld35=$result['freifeld35']; + $this->freifeld36=$result['freifeld36']; + $this->freifeld37=$result['freifeld37']; + $this->freifeld38=$result['freifeld38']; + $this->freifeld39=$result['freifeld39']; + $this->freifeld40=$result['freifeld40']; + $this->ursprungsregion=$result['ursprungsregion']; + $this->bestandalternativartikel=$result['bestandalternativartikel']; + $this->metatitle_de=$result['metatitle_de']; + $this->metatitle_en=$result['metatitle_en']; + $this->vkmeldungunterdruecken=$result['vkmeldungunterdruecken']; + $this->altersfreigabe=$result['altersfreigabe']; + $this->unikatbeikopie=$result['unikatbeikopie']; + $this->steuergruppe=$result['steuergruppe']; + $this->sachkonto=$result['sachkonto']; + $this->kostenstelle=$result['kostenstelle']; + $this->artikelautokalkulation=$result['artikelautokalkulation']; + $this->artikelabschliessenkalkulation=$result['artikelabschliessenkalkulation']; + $this->artikelfifokalkulation=$result['artikelfifokalkulation']; + $this->keinskonto=$result['keinskonto']; + $this->berechneterek=$result['berechneterek']; + $this->verwendeberechneterek=$result['verwendeberechneterek']; + $this->berechneterekwaehrung=$result['berechneterekwaehrung']; + $this->has_preproduced_partlist=$result['has_preproduced_partlist']; + $this->preproduced_partlist=$result['preproduced_partlist']; + $this->nettogewicht=$result['nettogewicht']; + } + + public function Create() + { + $sql = "INSERT INTO `artikel` (`id`,`typ`,`nummer`,`checksum`,`projekt`,`inaktiv`,`ausverkauft`,`warengruppe`,`name_de`,`name_en`,`kurztext_de`,`kurztext_en`,`beschreibung_de`,`beschreibung_en`,`uebersicht_de`,`uebersicht_en`,`links_de`,`links_en`,`startseite_de`,`startseite_en`,`standardbild`,`herstellerlink`,`hersteller`,`teilbar`,`nteile`,`seriennummern`,`lager_platz`,`lieferzeit`,`lieferzeitmanuell`,`sonstiges`,`gewicht`,`endmontage`,`funktionstest`,`artikelcheckliste`,`stueckliste`,`juststueckliste`,`barcode`,`hinzugefuegt`,`pcbdecal`,`lagerartikel`,`porto`,`chargenverwaltung`,`provisionsartikel`,`gesperrt`,`sperrgrund`,`geloescht`,`gueltigbis`,`umsatzsteuer`,`klasse`,`adresse`,`shopartikel`,`unishopartikel`,`journalshopartikel`,`shop`,`katalog`,`katalogtext_de`,`katalogtext_en`,`katalogbezeichnung_de`,`katalogbezeichnung_en`,`neu`,`topseller`,`startseite`,`wichtig`,`mindestlager`,`mindestbestellung`,`partnerprogramm_sperre`,`internerkommentar`,`intern_gesperrt`,`intern_gesperrtuser`,`intern_gesperrtgrund`,`inbearbeitung`,`inbearbeitunguser`,`cache_lagerplatzinhaltmenge`,`internkommentar`,`firma`,`logdatei`,`anabregs_text`,`autobestellung`,`produktion`,`herstellernummer`,`restmenge`,`mlmdirektpraemie`,`keineeinzelartikelanzeigen`,`mindesthaltbarkeitsdatum`,`letzteseriennummer`,`individualartikel`,`keinrabatterlaubt`,`rabatt`,`rabatt_prozent`,`geraet`,`serviceartikel`,`autoabgleicherlaubt`,`pseudopreis`,`freigabenotwendig`,`freigaberegel`,`nachbestellt`,`ean`,`mlmpunkte`,`mlmbonuspunkte`,`mlmkeinepunkteeigenkauf`,`shop2`,`shop3`,`usereditid`,`useredittimestamp`,`freifeld1`,`freifeld2`,`freifeld3`,`freifeld4`,`freifeld5`,`freifeld6`,`einheit`,`webid`,`lieferzeitmanuell_en`,`variante`,`variante_von`,`produktioninfo`,`sonderaktion`,`sonderaktion_en`,`autolagerlampe`,`leerfeld`,`zolltarifnummer`,`herkunftsland`,`laenge`,`breite`,`hoehe`,`gebuehr`,`pseudolager`,`downloadartikel`,`matrixprodukt`,`steuer_erloese_inland_normal`,`steuer_aufwendung_inland_normal`,`steuer_erloese_inland_ermaessigt`,`steuer_aufwendung_inland_ermaessigt`,`steuer_erloese_inland_steuerfrei`,`steuer_aufwendung_inland_steuerfrei`,`steuer_erloese_inland_innergemeinschaftlich`,`steuer_aufwendung_inland_innergemeinschaftlich`,`steuer_erloese_inland_eunormal`,`steuer_erloese_inland_nichtsteuerbar`,`steuer_erloese_inland_euermaessigt`,`steuer_aufwendung_inland_nichtsteuerbar`,`steuer_aufwendung_inland_eunormal`,`steuer_aufwendung_inland_euermaessigt`,`steuer_erloese_inland_export`,`steuer_aufwendung_inland_import`,`steuer_art_produkt`,`steuer_art_produkt_download`,`metadescription_de`,`metadescription_en`,`metakeywords_de`,`metakeywords_en`,`anabregs_text_en`,`externeproduktion`,`bildvorschau`,`inventursperre`,`variante_kopie`,`unikat`,`generierenummerbeioption`,`allelieferanten`,`tagespreise`,`rohstoffe`,`xvp`,`ohnepreisimpdf`,`provisionssperre`,`dienstleistung`,`inventurekaktiv`,`inventurek`,`hinweis_einfuegen`,`etikettautodruck`,`lagerkorrekturwert`,`autodrucketikett`,`abckategorie`,`laststorage_changed`,`laststorage_sync`,`steuersatz`,`steuertext_innergemeinschaftlich`,`steuertext_export`,`formelmenge`,`formelpreis`,`freifeld7`,`freifeld8`,`freifeld9`,`freifeld10`,`freifeld11`,`freifeld12`,`freifeld13`,`freifeld14`,`freifeld15`,`freifeld16`,`freifeld17`,`freifeld18`,`freifeld19`,`freifeld20`,`freifeld21`,`freifeld22`,`freifeld23`,`freifeld24`,`freifeld25`,`freifeld26`,`freifeld27`,`freifeld28`,`freifeld29`,`freifeld30`,`freifeld31`,`freifeld32`,`freifeld33`,`freifeld34`,`freifeld35`,`freifeld36`,`freifeld37`,`freifeld38`,`freifeld39`,`freifeld40`,`ursprungsregion`,`bestandalternativartikel`,`metatitle_de`,`metatitle_en`,`vkmeldungunterdruecken`,`altersfreigabe`,`unikatbeikopie`,`steuergruppe`,`sachkonto`,`kostenstelle`,`artikelautokalkulation`,`artikelabschliessenkalkulation`,`artikelfifokalkulation`,`keinskonto`,`berechneterek`,`verwendeberechneterek`,`berechneterekwaehrung`,`has_preproduced_partlist`,`preproduced_partlist`,`nettogewicht`) + VALUES(NULL,'{$this->typ}','{$this->nummer}','{$this->checksum}','{$this->projekt}','{$this->inaktiv}','{$this->ausverkauft}','{$this->warengruppe}','{$this->name_de}','{$this->name_en}','{$this->kurztext_de}','{$this->kurztext_en}','{$this->beschreibung_de}','{$this->beschreibung_en}','{$this->uebersicht_de}','{$this->uebersicht_en}','{$this->links_de}','{$this->links_en}','{$this->startseite_de}','{$this->startseite_en}','{$this->standardbild}','{$this->herstellerlink}','{$this->hersteller}','{$this->teilbar}','{$this->nteile}','{$this->seriennummern}','{$this->lager_platz}','{$this->lieferzeit}','{$this->lieferzeitmanuell}','{$this->sonstiges}','{$this->gewicht}','{$this->endmontage}','{$this->funktionstest}','{$this->artikelcheckliste}','{$this->stueckliste}','{$this->juststueckliste}','{$this->barcode}','{$this->hinzugefuegt}','{$this->pcbdecal}','{$this->lagerartikel}','{$this->porto}','{$this->chargenverwaltung}','{$this->provisionsartikel}','{$this->gesperrt}','{$this->sperrgrund}','{$this->geloescht}','{$this->gueltigbis}','{$this->umsatzsteuer}','{$this->klasse}','{$this->adresse}','{$this->shopartikel}','{$this->unishopartikel}','{$this->journalshopartikel}','{$this->shop}','{$this->katalog}','{$this->katalogtext_de}','{$this->katalogtext_en}','{$this->katalogbezeichnung_de}','{$this->katalogbezeichnung_en}','{$this->neu}','{$this->topseller}','{$this->startseite}','{$this->wichtig}','{$this->mindestlager}','{$this->mindestbestellung}','{$this->partnerprogramm_sperre}','{$this->internerkommentar}','{$this->intern_gesperrt}','{$this->intern_gesperrtuser}','{$this->intern_gesperrtgrund}','{$this->inbearbeitung}','{$this->inbearbeitunguser}','{$this->cache_lagerplatzinhaltmenge}','{$this->internkommentar}','{$this->firma}','{$this->logdatei}','{$this->anabregs_text}','{$this->autobestellung}','{$this->produktion}','{$this->herstellernummer}','{$this->restmenge}','{$this->mlmdirektpraemie}','{$this->keineeinzelartikelanzeigen}','{$this->mindesthaltbarkeitsdatum}','{$this->letzteseriennummer}','{$this->individualartikel}','{$this->keinrabatterlaubt}','{$this->rabatt}','{$this->rabatt_prozent}','{$this->geraet}','{$this->serviceartikel}','{$this->autoabgleicherlaubt}','{$this->pseudopreis}','{$this->freigabenotwendig}','{$this->freigaberegel}','{$this->nachbestellt}','{$this->ean}','{$this->mlmpunkte}','{$this->mlmbonuspunkte}','{$this->mlmkeinepunkteeigenkauf}','{$this->shop2}','{$this->shop3}','{$this->usereditid}','{$this->useredittimestamp}','{$this->freifeld1}','{$this->freifeld2}','{$this->freifeld3}','{$this->freifeld4}','{$this->freifeld5}','{$this->freifeld6}','{$this->einheit}','{$this->webid}','{$this->lieferzeitmanuell_en}','{$this->variante}','{$this->variante_von}','{$this->produktioninfo}','{$this->sonderaktion}','{$this->sonderaktion_en}','{$this->autolagerlampe}','{$this->leerfeld}','{$this->zolltarifnummer}','{$this->herkunftsland}','{$this->laenge}','{$this->breite}','{$this->hoehe}','{$this->gebuehr}','{$this->pseudolager}','{$this->downloadartikel}','{$this->matrixprodukt}','{$this->steuer_erloese_inland_normal}','{$this->steuer_aufwendung_inland_normal}','{$this->steuer_erloese_inland_ermaessigt}','{$this->steuer_aufwendung_inland_ermaessigt}','{$this->steuer_erloese_inland_steuerfrei}','{$this->steuer_aufwendung_inland_steuerfrei}','{$this->steuer_erloese_inland_innergemeinschaftlich}','{$this->steuer_aufwendung_inland_innergemeinschaftlich}','{$this->steuer_erloese_inland_eunormal}','{$this->steuer_erloese_inland_nichtsteuerbar}','{$this->steuer_erloese_inland_euermaessigt}','{$this->steuer_aufwendung_inland_nichtsteuerbar}','{$this->steuer_aufwendung_inland_eunormal}','{$this->steuer_aufwendung_inland_euermaessigt}','{$this->steuer_erloese_inland_export}','{$this->steuer_aufwendung_inland_import}','{$this->steuer_art_produkt}','{$this->steuer_art_produkt_download}','{$this->metadescription_de}','{$this->metadescription_en}','{$this->metakeywords_de}','{$this->metakeywords_en}','{$this->anabregs_text_en}','{$this->externeproduktion}','{$this->bildvorschau}','{$this->inventursperre}','{$this->variante_kopie}','{$this->unikat}','{$this->generierenummerbeioption}','{$this->allelieferanten}','{$this->tagespreise}','{$this->rohstoffe}','{$this->xvp}','{$this->ohnepreisimpdf}','{$this->provisionssperre}','{$this->dienstleistung}','{$this->inventurekaktiv}','{$this->inventurek}','{$this->hinweis_einfuegen}','{$this->etikettautodruck}','{$this->lagerkorrekturwert}','{$this->autodrucketikett}','{$this->abckategorie}','{$this->laststorage_changed}','{$this->laststorage_sync}','{$this->steuersatz}','{$this->steuertext_innergemeinschaftlich}','{$this->steuertext_export}','{$this->formelmenge}','{$this->formelpreis}','{$this->freifeld7}','{$this->freifeld8}','{$this->freifeld9}','{$this->freifeld10}','{$this->freifeld11}','{$this->freifeld12}','{$this->freifeld13}','{$this->freifeld14}','{$this->freifeld15}','{$this->freifeld16}','{$this->freifeld17}','{$this->freifeld18}','{$this->freifeld19}','{$this->freifeld20}','{$this->freifeld21}','{$this->freifeld22}','{$this->freifeld23}','{$this->freifeld24}','{$this->freifeld25}','{$this->freifeld26}','{$this->freifeld27}','{$this->freifeld28}','{$this->freifeld29}','{$this->freifeld30}','{$this->freifeld31}','{$this->freifeld32}','{$this->freifeld33}','{$this->freifeld34}','{$this->freifeld35}','{$this->freifeld36}','{$this->freifeld37}','{$this->freifeld38}','{$this->freifeld39}','{$this->freifeld40}','{$this->ursprungsregion}','{$this->bestandalternativartikel}','{$this->metatitle_de}','{$this->metatitle_en}','{$this->vkmeldungunterdruecken}','{$this->altersfreigabe}','{$this->unikatbeikopie}','{$this->steuergruppe}','{$this->sachkonto}','{$this->kostenstelle}','{$this->artikelautokalkulation}','{$this->artikelabschliessenkalkulation}','{$this->artikelfifokalkulation}','{$this->keinskonto}','{$this->berechneterek}','{$this->verwendeberechneterek}','{$this->berechneterekwaehrung}','{$this->has_preproduced_partlist}','{$this->preproduced_partlist}','{$this->nettogewicht}')"; + + $this->app->DB->Insert($sql); + $this->id = $this->app->DB->GetInsertID(); + } + + public function Update() + { + if(!is_numeric($this->id)) { + return -1; + } + + $sql = "UPDATE `artikel` SET + `typ`='{$this->typ}', + `nummer`='{$this->nummer}', + `checksum`='{$this->checksum}', + `projekt`='{$this->projekt}', + `inaktiv`='{$this->inaktiv}', + `ausverkauft`='{$this->ausverkauft}', + `warengruppe`='{$this->warengruppe}', + `name_de`='{$this->name_de}', + `name_en`='{$this->name_en}', + `kurztext_de`='{$this->kurztext_de}', + `kurztext_en`='{$this->kurztext_en}', + `beschreibung_de`='{$this->beschreibung_de}', + `beschreibung_en`='{$this->beschreibung_en}', + `uebersicht_de`='{$this->uebersicht_de}', + `uebersicht_en`='{$this->uebersicht_en}', + `links_de`='{$this->links_de}', + `links_en`='{$this->links_en}', + `startseite_de`='{$this->startseite_de}', + `startseite_en`='{$this->startseite_en}', + `standardbild`='{$this->standardbild}', + `herstellerlink`='{$this->herstellerlink}', + `hersteller`='{$this->hersteller}', + `teilbar`='{$this->teilbar}', + `nteile`='{$this->nteile}', + `seriennummern`='{$this->seriennummern}', + `lager_platz`='{$this->lager_platz}', + `lieferzeit`='{$this->lieferzeit}', + `lieferzeitmanuell`='{$this->lieferzeitmanuell}', + `sonstiges`='{$this->sonstiges}', + `gewicht`='{$this->gewicht}', + `endmontage`='{$this->endmontage}', + `funktionstest`='{$this->funktionstest}', + `artikelcheckliste`='{$this->artikelcheckliste}', + `stueckliste`='{$this->stueckliste}', + `juststueckliste`='{$this->juststueckliste}', + `barcode`='{$this->barcode}', + `hinzugefuegt`='{$this->hinzugefuegt}', + `pcbdecal`='{$this->pcbdecal}', + `lagerartikel`='{$this->lagerartikel}', + `porto`='{$this->porto}', + `chargenverwaltung`='{$this->chargenverwaltung}', + `provisionsartikel`='{$this->provisionsartikel}', + `gesperrt`='{$this->gesperrt}', + `sperrgrund`='{$this->sperrgrund}', + `geloescht`='{$this->geloescht}', + `gueltigbis`='{$this->gueltigbis}', + `umsatzsteuer`='{$this->umsatzsteuer}', + `klasse`='{$this->klasse}', + `adresse`='{$this->adresse}', + `shopartikel`='{$this->shopartikel}', + `unishopartikel`='{$this->unishopartikel}', + `journalshopartikel`='{$this->journalshopartikel}', + `shop`='{$this->shop}', + `katalog`='{$this->katalog}', + `katalogtext_de`='{$this->katalogtext_de}', + `katalogtext_en`='{$this->katalogtext_en}', + `katalogbezeichnung_de`='{$this->katalogbezeichnung_de}', + `katalogbezeichnung_en`='{$this->katalogbezeichnung_en}', + `neu`='{$this->neu}', + `topseller`='{$this->topseller}', + `startseite`='{$this->startseite}', + `wichtig`='{$this->wichtig}', + `mindestlager`='{$this->mindestlager}', + `mindestbestellung`='{$this->mindestbestellung}', + `partnerprogramm_sperre`='{$this->partnerprogramm_sperre}', + `internerkommentar`='{$this->internerkommentar}', + `intern_gesperrt`='{$this->intern_gesperrt}', + `intern_gesperrtuser`='{$this->intern_gesperrtuser}', + `intern_gesperrtgrund`='{$this->intern_gesperrtgrund}', + `inbearbeitung`='{$this->inbearbeitung}', + `inbearbeitunguser`='{$this->inbearbeitunguser}', + `cache_lagerplatzinhaltmenge`='{$this->cache_lagerplatzinhaltmenge}', + `internkommentar`='{$this->internkommentar}', + `firma`='{$this->firma}', + `logdatei`='{$this->logdatei}', + `anabregs_text`='{$this->anabregs_text}', + `autobestellung`='{$this->autobestellung}', + `produktion`='{$this->produktion}', + `herstellernummer`='{$this->herstellernummer}', + `restmenge`='{$this->restmenge}', + `mlmdirektpraemie`='{$this->mlmdirektpraemie}', + `keineeinzelartikelanzeigen`='{$this->keineeinzelartikelanzeigen}', + `mindesthaltbarkeitsdatum`='{$this->mindesthaltbarkeitsdatum}', + `letzteseriennummer`='{$this->letzteseriennummer}', + `individualartikel`='{$this->individualartikel}', + `keinrabatterlaubt`='{$this->keinrabatterlaubt}', + `rabatt`='{$this->rabatt}', + `rabatt_prozent`='{$this->rabatt_prozent}', + `geraet`='{$this->geraet}', + `serviceartikel`='{$this->serviceartikel}', + `autoabgleicherlaubt`='{$this->autoabgleicherlaubt}', + `pseudopreis`='{$this->pseudopreis}', + `freigabenotwendig`='{$this->freigabenotwendig}', + `freigaberegel`='{$this->freigaberegel}', + `nachbestellt`='{$this->nachbestellt}', + `ean`='{$this->ean}', + `mlmpunkte`='{$this->mlmpunkte}', + `mlmbonuspunkte`='{$this->mlmbonuspunkte}', + `mlmkeinepunkteeigenkauf`='{$this->mlmkeinepunkteeigenkauf}', + `shop2`='{$this->shop2}', + `shop3`='{$this->shop3}', + `usereditid`='{$this->usereditid}', + `useredittimestamp`='{$this->useredittimestamp}', + `freifeld1`='{$this->freifeld1}', + `freifeld2`='{$this->freifeld2}', + `freifeld3`='{$this->freifeld3}', + `freifeld4`='{$this->freifeld4}', + `freifeld5`='{$this->freifeld5}', + `freifeld6`='{$this->freifeld6}', + `einheit`='{$this->einheit}', + `webid`='{$this->webid}', + `lieferzeitmanuell_en`='{$this->lieferzeitmanuell_en}', + `variante`='{$this->variante}', + `variante_von`='{$this->variante_von}', + `produktioninfo`='{$this->produktioninfo}', + `sonderaktion`='{$this->sonderaktion}', + `sonderaktion_en`='{$this->sonderaktion_en}', + `autolagerlampe`='{$this->autolagerlampe}', + `leerfeld`='{$this->leerfeld}', + `zolltarifnummer`='{$this->zolltarifnummer}', + `herkunftsland`='{$this->herkunftsland}', + `laenge`='{$this->laenge}', + `breite`='{$this->breite}', + `hoehe`='{$this->hoehe}', + `gebuehr`='{$this->gebuehr}', + `pseudolager`='{$this->pseudolager}', + `downloadartikel`='{$this->downloadartikel}', + `matrixprodukt`='{$this->matrixprodukt}', + `steuer_erloese_inland_normal`='{$this->steuer_erloese_inland_normal}', + `steuer_aufwendung_inland_normal`='{$this->steuer_aufwendung_inland_normal}', + `steuer_erloese_inland_ermaessigt`='{$this->steuer_erloese_inland_ermaessigt}', + `steuer_aufwendung_inland_ermaessigt`='{$this->steuer_aufwendung_inland_ermaessigt}', + `steuer_erloese_inland_steuerfrei`='{$this->steuer_erloese_inland_steuerfrei}', + `steuer_aufwendung_inland_steuerfrei`='{$this->steuer_aufwendung_inland_steuerfrei}', + `steuer_erloese_inland_innergemeinschaftlich`='{$this->steuer_erloese_inland_innergemeinschaftlich}', + `steuer_aufwendung_inland_innergemeinschaftlich`='{$this->steuer_aufwendung_inland_innergemeinschaftlich}', + `steuer_erloese_inland_eunormal`='{$this->steuer_erloese_inland_eunormal}', + `steuer_erloese_inland_nichtsteuerbar`='{$this->steuer_erloese_inland_nichtsteuerbar}', + `steuer_erloese_inland_euermaessigt`='{$this->steuer_erloese_inland_euermaessigt}', + `steuer_aufwendung_inland_nichtsteuerbar`='{$this->steuer_aufwendung_inland_nichtsteuerbar}', + `steuer_aufwendung_inland_eunormal`='{$this->steuer_aufwendung_inland_eunormal}', + `steuer_aufwendung_inland_euermaessigt`='{$this->steuer_aufwendung_inland_euermaessigt}', + `steuer_erloese_inland_export`='{$this->steuer_erloese_inland_export}', + `steuer_aufwendung_inland_import`='{$this->steuer_aufwendung_inland_import}', + `steuer_art_produkt`='{$this->steuer_art_produkt}', + `steuer_art_produkt_download`='{$this->steuer_art_produkt_download}', + `metadescription_de`='{$this->metadescription_de}', + `metadescription_en`='{$this->metadescription_en}', + `metakeywords_de`='{$this->metakeywords_de}', + `metakeywords_en`='{$this->metakeywords_en}', + `anabregs_text_en`='{$this->anabregs_text_en}', + `externeproduktion`='{$this->externeproduktion}', + `bildvorschau`='{$this->bildvorschau}', + `inventursperre`='{$this->inventursperre}', + `variante_kopie`='{$this->variante_kopie}', + `unikat`='{$this->unikat}', + `generierenummerbeioption`='{$this->generierenummerbeioption}', + `allelieferanten`='{$this->allelieferanten}', + `tagespreise`='{$this->tagespreise}', + `rohstoffe`='{$this->rohstoffe}', + `xvp`='{$this->xvp}', + `ohnepreisimpdf`='{$this->ohnepreisimpdf}', + `provisionssperre`='{$this->provisionssperre}', + `dienstleistung`='{$this->dienstleistung}', + `inventurekaktiv`='{$this->inventurekaktiv}', + `inventurek`='{$this->inventurek}', + `hinweis_einfuegen`='{$this->hinweis_einfuegen}', + `etikettautodruck`='{$this->etikettautodruck}', + `lagerkorrekturwert`='{$this->lagerkorrekturwert}', + `autodrucketikett`='{$this->autodrucketikett}', + `abckategorie`='{$this->abckategorie}', + `laststorage_changed`='{$this->laststorage_changed}', + `laststorage_sync`='{$this->laststorage_sync}', + `steuersatz`='{$this->steuersatz}', + `steuertext_innergemeinschaftlich`='{$this->steuertext_innergemeinschaftlich}', + `steuertext_export`='{$this->steuertext_export}', + `formelmenge`='{$this->formelmenge}', + `formelpreis`='{$this->formelpreis}', + `freifeld7`='{$this->freifeld7}', + `freifeld8`='{$this->freifeld8}', + `freifeld9`='{$this->freifeld9}', + `freifeld10`='{$this->freifeld10}', + `freifeld11`='{$this->freifeld11}', + `freifeld12`='{$this->freifeld12}', + `freifeld13`='{$this->freifeld13}', + `freifeld14`='{$this->freifeld14}', + `freifeld15`='{$this->freifeld15}', + `freifeld16`='{$this->freifeld16}', + `freifeld17`='{$this->freifeld17}', + `freifeld18`='{$this->freifeld18}', + `freifeld19`='{$this->freifeld19}', + `freifeld20`='{$this->freifeld20}', + `freifeld21`='{$this->freifeld21}', + `freifeld22`='{$this->freifeld22}', + `freifeld23`='{$this->freifeld23}', + `freifeld24`='{$this->freifeld24}', + `freifeld25`='{$this->freifeld25}', + `freifeld26`='{$this->freifeld26}', + `freifeld27`='{$this->freifeld27}', + `freifeld28`='{$this->freifeld28}', + `freifeld29`='{$this->freifeld29}', + `freifeld30`='{$this->freifeld30}', + `freifeld31`='{$this->freifeld31}', + `freifeld32`='{$this->freifeld32}', + `freifeld33`='{$this->freifeld33}', + `freifeld34`='{$this->freifeld34}', + `freifeld35`='{$this->freifeld35}', + `freifeld36`='{$this->freifeld36}', + `freifeld37`='{$this->freifeld37}', + `freifeld38`='{$this->freifeld38}', + `freifeld39`='{$this->freifeld39}', + `freifeld40`='{$this->freifeld40}', + `ursprungsregion`='{$this->ursprungsregion}', + `bestandalternativartikel`='{$this->bestandalternativartikel}', + `metatitle_de`='{$this->metatitle_de}', + `metatitle_en`='{$this->metatitle_en}', + `vkmeldungunterdruecken`='{$this->vkmeldungunterdruecken}', + `altersfreigabe`='{$this->altersfreigabe}', + `unikatbeikopie`='{$this->unikatbeikopie}', + `steuergruppe`='{$this->steuergruppe}', + `sachkonto`='{$this->sachkonto}', + `kostenstelle`='{$this->kostenstelle}', + `artikelautokalkulation`='{$this->artikelautokalkulation}', + `artikelabschliessenkalkulation`='{$this->artikelabschliessenkalkulation}', + `artikelfifokalkulation`='{$this->artikelfifokalkulation}', + `keinskonto`='{$this->keinskonto}', + `berechneterek`='{$this->berechneterek}', + `verwendeberechneterek`='{$this->verwendeberechneterek}', + `berechneterekwaehrung`='{$this->berechneterekwaehrung}', + `has_preproduced_partlist`='{$this->has_preproduced_partlist}', + `preproduced_partlist`='{$this->preproduced_partlist}', + `nettogewicht`='{$this->nettogewicht}' + WHERE (`id`='{$this->id}')"; + + $this->app->DB->Update($sql); + } + + public function Delete($id='') + { + if(is_numeric($id)) + { + $this->id=$id; + } + else + return -1; + + $sql = "DELETE FROM `artikel` WHERE (`id`='{$this->id}')"; + $this->app->DB->Delete($sql); + + $this->id=''; + $this->typ=''; + $this->nummer=''; + $this->checksum=''; + $this->projekt=''; + $this->inaktiv=''; + $this->ausverkauft=''; + $this->warengruppe=''; + $this->name_de=''; + $this->name_en=''; + $this->kurztext_de=''; + $this->kurztext_en=''; + $this->beschreibung_de=''; + $this->beschreibung_en=''; + $this->uebersicht_de=''; + $this->uebersicht_en=''; + $this->links_de=''; + $this->links_en=''; + $this->startseite_de=''; + $this->startseite_en=''; + $this->standardbild=''; + $this->herstellerlink=''; + $this->hersteller=''; + $this->teilbar=''; + $this->nteile=''; + $this->seriennummern=''; + $this->lager_platz=''; + $this->lieferzeit=''; + $this->lieferzeitmanuell=''; + $this->sonstiges=''; + $this->gewicht=''; + $this->endmontage=''; + $this->funktionstest=''; + $this->artikelcheckliste=''; + $this->stueckliste=''; + $this->juststueckliste=''; + $this->barcode=''; + $this->hinzugefuegt=''; + $this->pcbdecal=''; + $this->lagerartikel=''; + $this->porto=''; + $this->chargenverwaltung=''; + $this->provisionsartikel=''; + $this->gesperrt=''; + $this->sperrgrund=''; + $this->geloescht=''; + $this->gueltigbis=''; + $this->umsatzsteuer=''; + $this->klasse=''; + $this->adresse=''; + $this->shopartikel=''; + $this->unishopartikel=''; + $this->journalshopartikel=''; + $this->shop=''; + $this->katalog=''; + $this->katalogtext_de=''; + $this->katalogtext_en=''; + $this->katalogbezeichnung_de=''; + $this->katalogbezeichnung_en=''; + $this->neu=''; + $this->topseller=''; + $this->startseite=''; + $this->wichtig=''; + $this->mindestlager=''; + $this->mindestbestellung=''; + $this->partnerprogramm_sperre=''; + $this->internerkommentar=''; + $this->intern_gesperrt=''; + $this->intern_gesperrtuser=''; + $this->intern_gesperrtgrund=''; + $this->inbearbeitung=''; + $this->inbearbeitunguser=''; + $this->cache_lagerplatzinhaltmenge=''; + $this->internkommentar=''; + $this->firma=''; + $this->logdatei=''; + $this->anabregs_text=''; + $this->autobestellung=''; + $this->produktion=''; + $this->herstellernummer=''; + $this->restmenge=''; + $this->mlmdirektpraemie=''; + $this->keineeinzelartikelanzeigen=''; + $this->mindesthaltbarkeitsdatum=''; + $this->letzteseriennummer=''; + $this->individualartikel=''; + $this->keinrabatterlaubt=''; + $this->rabatt=''; + $this->rabatt_prozent=''; + $this->geraet=''; + $this->serviceartikel=''; + $this->autoabgleicherlaubt=''; + $this->pseudopreis=''; + $this->freigabenotwendig=''; + $this->freigaberegel=''; + $this->nachbestellt=''; + $this->ean=''; + $this->mlmpunkte=''; + $this->mlmbonuspunkte=''; + $this->mlmkeinepunkteeigenkauf=''; + $this->shop2=''; + $this->shop3=''; + $this->usereditid=''; + $this->useredittimestamp=''; + $this->freifeld1=''; + $this->freifeld2=''; + $this->freifeld3=''; + $this->freifeld4=''; + $this->freifeld5=''; + $this->freifeld6=''; + $this->einheit=''; + $this->webid=''; + $this->lieferzeitmanuell_en=''; + $this->variante=''; + $this->variante_von=''; + $this->produktioninfo=''; + $this->sonderaktion=''; + $this->sonderaktion_en=''; + $this->autolagerlampe=''; + $this->leerfeld=''; + $this->zolltarifnummer=''; + $this->herkunftsland=''; + $this->laenge=''; + $this->breite=''; + $this->hoehe=''; + $this->gebuehr=''; + $this->pseudolager=''; + $this->downloadartikel=''; + $this->matrixprodukt=''; + $this->steuer_erloese_inland_normal=''; + $this->steuer_aufwendung_inland_normal=''; + $this->steuer_erloese_inland_ermaessigt=''; + $this->steuer_aufwendung_inland_ermaessigt=''; + $this->steuer_erloese_inland_steuerfrei=''; + $this->steuer_aufwendung_inland_steuerfrei=''; + $this->steuer_erloese_inland_innergemeinschaftlich=''; + $this->steuer_aufwendung_inland_innergemeinschaftlich=''; + $this->steuer_erloese_inland_eunormal=''; + $this->steuer_erloese_inland_nichtsteuerbar=''; + $this->steuer_erloese_inland_euermaessigt=''; + $this->steuer_aufwendung_inland_nichtsteuerbar=''; + $this->steuer_aufwendung_inland_eunormal=''; + $this->steuer_aufwendung_inland_euermaessigt=''; + $this->steuer_erloese_inland_export=''; + $this->steuer_aufwendung_inland_import=''; + $this->steuer_art_produkt=''; + $this->steuer_art_produkt_download=''; + $this->metadescription_de=''; + $this->metadescription_en=''; + $this->metakeywords_de=''; + $this->metakeywords_en=''; + $this->anabregs_text_en=''; + $this->externeproduktion=''; + $this->bildvorschau=''; + $this->inventursperre=''; + $this->variante_kopie=''; + $this->unikat=''; + $this->generierenummerbeioption=''; + $this->allelieferanten=''; + $this->tagespreise=''; + $this->rohstoffe=''; + $this->xvp=''; + $this->ohnepreisimpdf=''; + $this->provisionssperre=''; + $this->dienstleistung=''; + $this->inventurekaktiv=''; + $this->inventurek=''; + $this->hinweis_einfuegen=''; + $this->etikettautodruck=''; + $this->lagerkorrekturwert=''; + $this->autodrucketikett=''; + $this->abckategorie=''; + $this->laststorage_changed=''; + $this->laststorage_sync=''; + $this->steuersatz=''; + $this->steuertext_innergemeinschaftlich=''; + $this->steuertext_export=''; + $this->formelmenge=''; + $this->formelpreis=''; + $this->freifeld7=''; + $this->freifeld8=''; + $this->freifeld9=''; + $this->freifeld10=''; + $this->freifeld11=''; + $this->freifeld12=''; + $this->freifeld13=''; + $this->freifeld14=''; + $this->freifeld15=''; + $this->freifeld16=''; + $this->freifeld17=''; + $this->freifeld18=''; + $this->freifeld19=''; + $this->freifeld20=''; + $this->freifeld21=''; + $this->freifeld22=''; + $this->freifeld23=''; + $this->freifeld24=''; + $this->freifeld25=''; + $this->freifeld26=''; + $this->freifeld27=''; + $this->freifeld28=''; + $this->freifeld29=''; + $this->freifeld30=''; + $this->freifeld31=''; + $this->freifeld32=''; + $this->freifeld33=''; + $this->freifeld34=''; + $this->freifeld35=''; + $this->freifeld36=''; + $this->freifeld37=''; + $this->freifeld38=''; + $this->freifeld39=''; + $this->freifeld40=''; + $this->ursprungsregion=''; + $this->bestandalternativartikel=''; + $this->metatitle_de=''; + $this->metatitle_en=''; + $this->vkmeldungunterdruecken=''; + $this->altersfreigabe=''; + $this->unikatbeikopie=''; + $this->steuergruppe=''; + $this->sachkonto=''; + $this->kostenstelle=''; + $this->artikelautokalkulation=''; + $this->artikelabschliessenkalkulation=''; + $this->artikelfifokalkulation=''; + $this->keinskonto=''; + $this->berechneterek=''; + $this->verwendeberechneterek=''; + $this->berechneterekwaehrung=''; + $this->has_preproduced_partlist=''; + $this->preproduced_partlist=''; + $this->nettogewicht=''; + } + + public function Copy() + { + $this->id = ''; + $this->Create(); + } + + /** + Mit dieser Funktion kann man einen Datensatz suchen + dafuer muss man die Attribute setzen nach denen gesucht werden soll + dann kriegt man als ergebnis den ersten Datensatz der auf die Suche uebereinstimmt + zurueck. Mit Next() kann man sich alle weiteren Ergebnisse abholen + **/ + + public function Find() + { + //TODO Suche mit den werten machen + } + + public function FindNext() + { + //TODO Suche mit den alten werten fortsetzen machen + } + + /** Funktionen um durch die Tabelle iterieren zu koennen */ + + public function Next() + { + //TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer + } + + public function First() + { + //TODO: SQL Statement passt nach meiner Meinung nach noch nicht immer + } + + /** dank dieser funktionen kann man die tatsaechlichen werte einfach + ueberladen (in einem Objekt das mit seiner klasse ueber dieser steht)**/ + + public function SetId($value) { $this->id=$value; } + public function GetId() { return $this->id; } + public function SetTyp($value) { $this->typ=$value; } + public function GetTyp() { return $this->typ; } + public function SetNummer($value) { $this->nummer=$value; } + public function GetNummer() { return $this->nummer; } + public function SetChecksum($value) { $this->checksum=$value; } + public function GetChecksum() { return $this->checksum; } + public function SetProjekt($value) { $this->projekt=$value; } + public function GetProjekt() { return $this->projekt; } + public function SetInaktiv($value) { $this->inaktiv=$value; } + public function GetInaktiv() { return $this->inaktiv; } + public function SetAusverkauft($value) { $this->ausverkauft=$value; } + public function GetAusverkauft() { return $this->ausverkauft; } + public function SetWarengruppe($value) { $this->warengruppe=$value; } + public function GetWarengruppe() { return $this->warengruppe; } + public function SetName_De($value) { $this->name_de=$value; } + public function GetName_De() { return $this->name_de; } + public function SetName_En($value) { $this->name_en=$value; } + public function GetName_En() { return $this->name_en; } + public function SetKurztext_De($value) { $this->kurztext_de=$value; } + public function GetKurztext_De() { return $this->kurztext_de; } + public function SetKurztext_En($value) { $this->kurztext_en=$value; } + public function GetKurztext_En() { return $this->kurztext_en; } + public function SetBeschreibung_De($value) { $this->beschreibung_de=$value; } + public function GetBeschreibung_De() { return $this->beschreibung_de; } + public function SetBeschreibung_En($value) { $this->beschreibung_en=$value; } + public function GetBeschreibung_En() { return $this->beschreibung_en; } + public function SetUebersicht_De($value) { $this->uebersicht_de=$value; } + public function GetUebersicht_De() { return $this->uebersicht_de; } + public function SetUebersicht_En($value) { $this->uebersicht_en=$value; } + public function GetUebersicht_En() { return $this->uebersicht_en; } + public function SetLinks_De($value) { $this->links_de=$value; } + public function GetLinks_De() { return $this->links_de; } + public function SetLinks_En($value) { $this->links_en=$value; } + public function GetLinks_En() { return $this->links_en; } + public function SetStartseite_De($value) { $this->startseite_de=$value; } + public function GetStartseite_De() { return $this->startseite_de; } + public function SetStartseite_En($value) { $this->startseite_en=$value; } + public function GetStartseite_En() { return $this->startseite_en; } + public function SetStandardbild($value) { $this->standardbild=$value; } + public function GetStandardbild() { return $this->standardbild; } + public function SetHerstellerlink($value) { $this->herstellerlink=$value; } + public function GetHerstellerlink() { return $this->herstellerlink; } + public function SetHersteller($value) { $this->hersteller=$value; } + public function GetHersteller() { return $this->hersteller; } + public function SetTeilbar($value) { $this->teilbar=$value; } + public function GetTeilbar() { return $this->teilbar; } + public function SetNteile($value) { $this->nteile=$value; } + public function GetNteile() { return $this->nteile; } + public function SetSeriennummern($value) { $this->seriennummern=$value; } + public function GetSeriennummern() { return $this->seriennummern; } + public function SetLager_Platz($value) { $this->lager_platz=$value; } + public function GetLager_Platz() { return $this->lager_platz; } + public function SetLieferzeit($value) { $this->lieferzeit=$value; } + public function GetLieferzeit() { return $this->lieferzeit; } + public function SetLieferzeitmanuell($value) { $this->lieferzeitmanuell=$value; } + public function GetLieferzeitmanuell() { return $this->lieferzeitmanuell; } + public function SetSonstiges($value) { $this->sonstiges=$value; } + public function GetSonstiges() { return $this->sonstiges; } + public function SetGewicht($value) { $this->gewicht=$value; } + public function GetGewicht() { return $this->gewicht; } + public function SetEndmontage($value) { $this->endmontage=$value; } + public function GetEndmontage() { return $this->endmontage; } + public function SetFunktionstest($value) { $this->funktionstest=$value; } + public function GetFunktionstest() { return $this->funktionstest; } + public function SetArtikelcheckliste($value) { $this->artikelcheckliste=$value; } + public function GetArtikelcheckliste() { return $this->artikelcheckliste; } + public function SetStueckliste($value) { $this->stueckliste=$value; } + public function GetStueckliste() { return $this->stueckliste; } + public function SetJuststueckliste($value) { $this->juststueckliste=$value; } + public function GetJuststueckliste() { return $this->juststueckliste; } + public function SetBarcode($value) { $this->barcode=$value; } + public function GetBarcode() { return $this->barcode; } + public function SetHinzugefuegt($value) { $this->hinzugefuegt=$value; } + public function GetHinzugefuegt() { return $this->hinzugefuegt; } + public function SetPcbdecal($value) { $this->pcbdecal=$value; } + public function GetPcbdecal() { return $this->pcbdecal; } + public function SetLagerartikel($value) { $this->lagerartikel=$value; } + public function GetLagerartikel() { return $this->lagerartikel; } + public function SetPorto($value) { $this->porto=$value; } + public function GetPorto() { return $this->porto; } + public function SetChargenverwaltung($value) { $this->chargenverwaltung=$value; } + public function GetChargenverwaltung() { return $this->chargenverwaltung; } + public function SetProvisionsartikel($value) { $this->provisionsartikel=$value; } + public function GetProvisionsartikel() { return $this->provisionsartikel; } + public function SetGesperrt($value) { $this->gesperrt=$value; } + public function GetGesperrt() { return $this->gesperrt; } + public function SetSperrgrund($value) { $this->sperrgrund=$value; } + public function GetSperrgrund() { return $this->sperrgrund; } + public function SetGeloescht($value) { $this->geloescht=$value; } + public function GetGeloescht() { return $this->geloescht; } + public function SetGueltigbis($value) { $this->gueltigbis=$value; } + public function GetGueltigbis() { return $this->gueltigbis; } + public function SetUmsatzsteuer($value) { $this->umsatzsteuer=$value; } + public function GetUmsatzsteuer() { return $this->umsatzsteuer; } + public function SetKlasse($value) { $this->klasse=$value; } + public function GetKlasse() { return $this->klasse; } + public function SetAdresse($value) { $this->adresse=$value; } + public function GetAdresse() { return $this->adresse; } + public function SetShopartikel($value) { $this->shopartikel=$value; } + public function GetShopartikel() { return $this->shopartikel; } + public function SetUnishopartikel($value) { $this->unishopartikel=$value; } + public function GetUnishopartikel() { return $this->unishopartikel; } + public function SetJournalshopartikel($value) { $this->journalshopartikel=$value; } + public function GetJournalshopartikel() { return $this->journalshopartikel; } + public function SetShop($value) { $this->shop=$value; } + public function GetShop() { return $this->shop; } + public function SetKatalog($value) { $this->katalog=$value; } + public function GetKatalog() { return $this->katalog; } + public function SetKatalogtext_De($value) { $this->katalogtext_de=$value; } + public function GetKatalogtext_De() { return $this->katalogtext_de; } + public function SetKatalogtext_En($value) { $this->katalogtext_en=$value; } + public function GetKatalogtext_En() { return $this->katalogtext_en; } + public function SetKatalogbezeichnung_De($value) { $this->katalogbezeichnung_de=$value; } + public function GetKatalogbezeichnung_De() { return $this->katalogbezeichnung_de; } + public function SetKatalogbezeichnung_En($value) { $this->katalogbezeichnung_en=$value; } + public function GetKatalogbezeichnung_En() { return $this->katalogbezeichnung_en; } + public function SetNeu($value) { $this->neu=$value; } + public function GetNeu() { return $this->neu; } + public function SetTopseller($value) { $this->topseller=$value; } + public function GetTopseller() { return $this->topseller; } + public function SetStartseite($value) { $this->startseite=$value; } + public function GetStartseite() { return $this->startseite; } + public function SetWichtig($value) { $this->wichtig=$value; } + public function GetWichtig() { return $this->wichtig; } + public function SetMindestlager($value) { $this->mindestlager=$value; } + public function GetMindestlager() { return $this->mindestlager; } + public function SetMindestbestellung($value) { $this->mindestbestellung=$value; } + public function GetMindestbestellung() { return $this->mindestbestellung; } + public function SetPartnerprogramm_Sperre($value) { $this->partnerprogramm_sperre=$value; } + public function GetPartnerprogramm_Sperre() { return $this->partnerprogramm_sperre; } + public function SetInternerkommentar($value) { $this->internerkommentar=$value; } + public function GetInternerkommentar() { return $this->internerkommentar; } + public function SetIntern_Gesperrt($value) { $this->intern_gesperrt=$value; } + public function GetIntern_Gesperrt() { return $this->intern_gesperrt; } + public function SetIntern_Gesperrtuser($value) { $this->intern_gesperrtuser=$value; } + public function GetIntern_Gesperrtuser() { return $this->intern_gesperrtuser; } + public function SetIntern_Gesperrtgrund($value) { $this->intern_gesperrtgrund=$value; } + public function GetIntern_Gesperrtgrund() { return $this->intern_gesperrtgrund; } + public function SetInbearbeitung($value) { $this->inbearbeitung=$value; } + public function GetInbearbeitung() { return $this->inbearbeitung; } + public function SetInbearbeitunguser($value) { $this->inbearbeitunguser=$value; } + public function GetInbearbeitunguser() { return $this->inbearbeitunguser; } + public function SetCache_Lagerplatzinhaltmenge($value) { $this->cache_lagerplatzinhaltmenge=$value; } + public function GetCache_Lagerplatzinhaltmenge() { return $this->cache_lagerplatzinhaltmenge; } + public function SetInternkommentar($value) { $this->internkommentar=$value; } + public function GetInternkommentar() { return $this->internkommentar; } + public function SetFirma($value) { $this->firma=$value; } + public function GetFirma() { return $this->firma; } + public function SetLogdatei($value) { $this->logdatei=$value; } + public function GetLogdatei() { return $this->logdatei; } + public function SetAnabregs_Text($value) { $this->anabregs_text=$value; } + public function GetAnabregs_Text() { return $this->anabregs_text; } + public function SetAutobestellung($value) { $this->autobestellung=$value; } + public function GetAutobestellung() { return $this->autobestellung; } + public function SetProduktion($value) { $this->produktion=$value; } + public function GetProduktion() { return $this->produktion; } + public function SetHerstellernummer($value) { $this->herstellernummer=$value; } + public function GetHerstellernummer() { return $this->herstellernummer; } + public function SetRestmenge($value) { $this->restmenge=$value; } + public function GetRestmenge() { return $this->restmenge; } + public function SetMlmdirektpraemie($value) { $this->mlmdirektpraemie=$value; } + public function GetMlmdirektpraemie() { return $this->mlmdirektpraemie; } + public function SetKeineeinzelartikelanzeigen($value) { $this->keineeinzelartikelanzeigen=$value; } + public function GetKeineeinzelartikelanzeigen() { return $this->keineeinzelartikelanzeigen; } + public function SetMindesthaltbarkeitsdatum($value) { $this->mindesthaltbarkeitsdatum=$value; } + public function GetMindesthaltbarkeitsdatum() { return $this->mindesthaltbarkeitsdatum; } + public function SetLetzteseriennummer($value) { $this->letzteseriennummer=$value; } + public function GetLetzteseriennummer() { return $this->letzteseriennummer; } + public function SetIndividualartikel($value) { $this->individualartikel=$value; } + public function GetIndividualartikel() { return $this->individualartikel; } + public function SetKeinrabatterlaubt($value) { $this->keinrabatterlaubt=$value; } + public function GetKeinrabatterlaubt() { return $this->keinrabatterlaubt; } + public function SetRabatt($value) { $this->rabatt=$value; } + public function GetRabatt() { return $this->rabatt; } + public function SetRabatt_Prozent($value) { $this->rabatt_prozent=$value; } + public function GetRabatt_Prozent() { return $this->rabatt_prozent; } + public function SetGeraet($value) { $this->geraet=$value; } + public function GetGeraet() { return $this->geraet; } + public function SetServiceartikel($value) { $this->serviceartikel=$value; } + public function GetServiceartikel() { return $this->serviceartikel; } + public function SetAutoabgleicherlaubt($value) { $this->autoabgleicherlaubt=$value; } + public function GetAutoabgleicherlaubt() { return $this->autoabgleicherlaubt; } + public function SetPseudopreis($value) { $this->pseudopreis=$value; } + public function GetPseudopreis() { return $this->pseudopreis; } + public function SetFreigabenotwendig($value) { $this->freigabenotwendig=$value; } + public function GetFreigabenotwendig() { return $this->freigabenotwendig; } + public function SetFreigaberegel($value) { $this->freigaberegel=$value; } + public function GetFreigaberegel() { return $this->freigaberegel; } + public function SetNachbestellt($value) { $this->nachbestellt=$value; } + public function GetNachbestellt() { return $this->nachbestellt; } + public function SetEan($value) { $this->ean=$value; } + public function GetEan() { return $this->ean; } + public function SetMlmpunkte($value) { $this->mlmpunkte=$value; } + public function GetMlmpunkte() { return $this->mlmpunkte; } + public function SetMlmbonuspunkte($value) { $this->mlmbonuspunkte=$value; } + public function GetMlmbonuspunkte() { return $this->mlmbonuspunkte; } + public function SetMlmkeinepunkteeigenkauf($value) { $this->mlmkeinepunkteeigenkauf=$value; } + public function GetMlmkeinepunkteeigenkauf() { return $this->mlmkeinepunkteeigenkauf; } + public function SetShop2($value) { $this->shop2=$value; } + public function GetShop2() { return $this->shop2; } + public function SetShop3($value) { $this->shop3=$value; } + public function GetShop3() { return $this->shop3; } + public function SetUsereditid($value) { $this->usereditid=$value; } + public function GetUsereditid() { return $this->usereditid; } + public function SetUseredittimestamp($value) { $this->useredittimestamp=$value; } + public function GetUseredittimestamp() { return $this->useredittimestamp; } + public function SetFreifeld1($value) { $this->freifeld1=$value; } + public function GetFreifeld1() { return $this->freifeld1; } + public function SetFreifeld2($value) { $this->freifeld2=$value; } + public function GetFreifeld2() { return $this->freifeld2; } + public function SetFreifeld3($value) { $this->freifeld3=$value; } + public function GetFreifeld3() { return $this->freifeld3; } + public function SetFreifeld4($value) { $this->freifeld4=$value; } + public function GetFreifeld4() { return $this->freifeld4; } + public function SetFreifeld5($value) { $this->freifeld5=$value; } + public function GetFreifeld5() { return $this->freifeld5; } + public function SetFreifeld6($value) { $this->freifeld6=$value; } + public function GetFreifeld6() { return $this->freifeld6; } + public function SetEinheit($value) { $this->einheit=$value; } + public function GetEinheit() { return $this->einheit; } + public function SetWebid($value) { $this->webid=$value; } + public function GetWebid() { return $this->webid; } + public function SetLieferzeitmanuell_En($value) { $this->lieferzeitmanuell_en=$value; } + public function GetLieferzeitmanuell_En() { return $this->lieferzeitmanuell_en; } + public function SetVariante($value) { $this->variante=$value; } + public function GetVariante() { return $this->variante; } + public function SetVariante_Von($value) { $this->variante_von=$value; } + public function GetVariante_Von() { return $this->variante_von; } + public function SetProduktioninfo($value) { $this->produktioninfo=$value; } + public function GetProduktioninfo() { return $this->produktioninfo; } + public function SetSonderaktion($value) { $this->sonderaktion=$value; } + public function GetSonderaktion() { return $this->sonderaktion; } + public function SetSonderaktion_En($value) { $this->sonderaktion_en=$value; } + public function GetSonderaktion_En() { return $this->sonderaktion_en; } + public function SetAutolagerlampe($value) { $this->autolagerlampe=$value; } + public function GetAutolagerlampe() { return $this->autolagerlampe; } + public function SetLeerfeld($value) { $this->leerfeld=$value; } + public function GetLeerfeld() { return $this->leerfeld; } + public function SetZolltarifnummer($value) { $this->zolltarifnummer=$value; } + public function GetZolltarifnummer() { return $this->zolltarifnummer; } + public function SetHerkunftsland($value) { $this->herkunftsland=$value; } + public function GetHerkunftsland() { return $this->herkunftsland; } + public function SetLaenge($value) { $this->laenge=$value; } + public function GetLaenge() { return $this->laenge; } + public function SetBreite($value) { $this->breite=$value; } + public function GetBreite() { return $this->breite; } + public function SetHoehe($value) { $this->hoehe=$value; } + public function GetHoehe() { return $this->hoehe; } + public function SetGebuehr($value) { $this->gebuehr=$value; } + public function GetGebuehr() { return $this->gebuehr; } + public function SetPseudolager($value) { $this->pseudolager=$value; } + public function GetPseudolager() { return $this->pseudolager; } + public function SetDownloadartikel($value) { $this->downloadartikel=$value; } + public function GetDownloadartikel() { return $this->downloadartikel; } + public function SetMatrixprodukt($value) { $this->matrixprodukt=$value; } + public function GetMatrixprodukt() { return $this->matrixprodukt; } + public function SetSteuer_Erloese_Inland_Normal($value) { $this->steuer_erloese_inland_normal=$value; } + public function GetSteuer_Erloese_Inland_Normal() { return $this->steuer_erloese_inland_normal; } + public function SetSteuer_Aufwendung_Inland_Normal($value) { $this->steuer_aufwendung_inland_normal=$value; } + public function GetSteuer_Aufwendung_Inland_Normal() { return $this->steuer_aufwendung_inland_normal; } + public function SetSteuer_Erloese_Inland_Ermaessigt($value) { $this->steuer_erloese_inland_ermaessigt=$value; } + public function GetSteuer_Erloese_Inland_Ermaessigt() { return $this->steuer_erloese_inland_ermaessigt; } + public function SetSteuer_Aufwendung_Inland_Ermaessigt($value) { $this->steuer_aufwendung_inland_ermaessigt=$value; } + public function GetSteuer_Aufwendung_Inland_Ermaessigt() { return $this->steuer_aufwendung_inland_ermaessigt; } + public function SetSteuer_Erloese_Inland_Steuerfrei($value) { $this->steuer_erloese_inland_steuerfrei=$value; } + public function GetSteuer_Erloese_Inland_Steuerfrei() { return $this->steuer_erloese_inland_steuerfrei; } + public function SetSteuer_Aufwendung_Inland_Steuerfrei($value) { $this->steuer_aufwendung_inland_steuerfrei=$value; } + public function GetSteuer_Aufwendung_Inland_Steuerfrei() { return $this->steuer_aufwendung_inland_steuerfrei; } + public function SetSteuer_Erloese_Inland_Innergemeinschaftlich($value) { $this->steuer_erloese_inland_innergemeinschaftlich=$value; } + public function GetSteuer_Erloese_Inland_Innergemeinschaftlich() { return $this->steuer_erloese_inland_innergemeinschaftlich; } + public function SetSteuer_Aufwendung_Inland_Innergemeinschaftlich($value) { $this->steuer_aufwendung_inland_innergemeinschaftlich=$value; } + public function GetSteuer_Aufwendung_Inland_Innergemeinschaftlich() { return $this->steuer_aufwendung_inland_innergemeinschaftlich; } + public function SetSteuer_Erloese_Inland_Eunormal($value) { $this->steuer_erloese_inland_eunormal=$value; } + public function GetSteuer_Erloese_Inland_Eunormal() { return $this->steuer_erloese_inland_eunormal; } + public function SetSteuer_Erloese_Inland_Nichtsteuerbar($value) { $this->steuer_erloese_inland_nichtsteuerbar=$value; } + public function GetSteuer_Erloese_Inland_Nichtsteuerbar() { return $this->steuer_erloese_inland_nichtsteuerbar; } + public function SetSteuer_Erloese_Inland_Euermaessigt($value) { $this->steuer_erloese_inland_euermaessigt=$value; } + public function GetSteuer_Erloese_Inland_Euermaessigt() { return $this->steuer_erloese_inland_euermaessigt; } + public function SetSteuer_Aufwendung_Inland_Nichtsteuerbar($value) { $this->steuer_aufwendung_inland_nichtsteuerbar=$value; } + public function GetSteuer_Aufwendung_Inland_Nichtsteuerbar() { return $this->steuer_aufwendung_inland_nichtsteuerbar; } + public function SetSteuer_Aufwendung_Inland_Eunormal($value) { $this->steuer_aufwendung_inland_eunormal=$value; } + public function GetSteuer_Aufwendung_Inland_Eunormal() { return $this->steuer_aufwendung_inland_eunormal; } + public function SetSteuer_Aufwendung_Inland_Euermaessigt($value) { $this->steuer_aufwendung_inland_euermaessigt=$value; } + public function GetSteuer_Aufwendung_Inland_Euermaessigt() { return $this->steuer_aufwendung_inland_euermaessigt; } + public function SetSteuer_Erloese_Inland_Export($value) { $this->steuer_erloese_inland_export=$value; } + public function GetSteuer_Erloese_Inland_Export() { return $this->steuer_erloese_inland_export; } + public function SetSteuer_Aufwendung_Inland_Import($value) { $this->steuer_aufwendung_inland_import=$value; } + public function GetSteuer_Aufwendung_Inland_Import() { return $this->steuer_aufwendung_inland_import; } + public function SetSteuer_Art_Produkt($value) { $this->steuer_art_produkt=$value; } + public function GetSteuer_Art_Produkt() { return $this->steuer_art_produkt; } + public function SetSteuer_Art_Produkt_Download($value) { $this->steuer_art_produkt_download=$value; } + public function GetSteuer_Art_Produkt_Download() { return $this->steuer_art_produkt_download; } + public function SetMetadescription_De($value) { $this->metadescription_de=$value; } + public function GetMetadescription_De() { return $this->metadescription_de; } + public function SetMetadescription_En($value) { $this->metadescription_en=$value; } + public function GetMetadescription_En() { return $this->metadescription_en; } + public function SetMetakeywords_De($value) { $this->metakeywords_de=$value; } + public function GetMetakeywords_De() { return $this->metakeywords_de; } + public function SetMetakeywords_En($value) { $this->metakeywords_en=$value; } + public function GetMetakeywords_En() { return $this->metakeywords_en; } + public function SetAnabregs_Text_En($value) { $this->anabregs_text_en=$value; } + public function GetAnabregs_Text_En() { return $this->anabregs_text_en; } + public function SetExterneproduktion($value) { $this->externeproduktion=$value; } + public function GetExterneproduktion() { return $this->externeproduktion; } + public function SetBildvorschau($value) { $this->bildvorschau=$value; } + public function GetBildvorschau() { return $this->bildvorschau; } + public function SetInventursperre($value) { $this->inventursperre=$value; } + public function GetInventursperre() { return $this->inventursperre; } + public function SetVariante_Kopie($value) { $this->variante_kopie=$value; } + public function GetVariante_Kopie() { return $this->variante_kopie; } + public function SetUnikat($value) { $this->unikat=$value; } + public function GetUnikat() { return $this->unikat; } + public function SetGenerierenummerbeioption($value) { $this->generierenummerbeioption=$value; } + public function GetGenerierenummerbeioption() { return $this->generierenummerbeioption; } + public function SetAllelieferanten($value) { $this->allelieferanten=$value; } + public function GetAllelieferanten() { return $this->allelieferanten; } + public function SetTagespreise($value) { $this->tagespreise=$value; } + public function GetTagespreise() { return $this->tagespreise; } + public function SetRohstoffe($value) { $this->rohstoffe=$value; } + public function GetRohstoffe() { return $this->rohstoffe; } + public function SetXvp($value) { $this->xvp=$value; } + public function GetXvp() { return $this->xvp; } + public function SetOhnepreisimpdf($value) { $this->ohnepreisimpdf=$value; } + public function GetOhnepreisimpdf() { return $this->ohnepreisimpdf; } + public function SetProvisionssperre($value) { $this->provisionssperre=$value; } + public function GetProvisionssperre() { return $this->provisionssperre; } + public function SetDienstleistung($value) { $this->dienstleistung=$value; } + public function GetDienstleistung() { return $this->dienstleistung; } + public function SetInventurekaktiv($value) { $this->inventurekaktiv=$value; } + public function GetInventurekaktiv() { return $this->inventurekaktiv; } + public function SetInventurek($value) { $this->inventurek=$value; } + public function GetInventurek() { return $this->inventurek; } + public function SetHinweis_Einfuegen($value) { $this->hinweis_einfuegen=$value; } + public function GetHinweis_Einfuegen() { return $this->hinweis_einfuegen; } + public function SetEtikettautodruck($value) { $this->etikettautodruck=$value; } + public function GetEtikettautodruck() { return $this->etikettautodruck; } + public function SetLagerkorrekturwert($value) { $this->lagerkorrekturwert=$value; } + public function GetLagerkorrekturwert() { return $this->lagerkorrekturwert; } + public function SetAutodrucketikett($value) { $this->autodrucketikett=$value; } + public function GetAutodrucketikett() { return $this->autodrucketikett; } + public function SetAbckategorie($value) { $this->abckategorie=$value; } + public function GetAbckategorie() { return $this->abckategorie; } + public function SetLaststorage_Changed($value) { $this->laststorage_changed=$value; } + public function GetLaststorage_Changed() { return $this->laststorage_changed; } + public function SetLaststorage_Sync($value) { $this->laststorage_sync=$value; } + public function GetLaststorage_Sync() { return $this->laststorage_sync; } + public function SetSteuersatz($value) { $this->steuersatz=$value; } + public function GetSteuersatz() { return $this->steuersatz; } + public function SetSteuertext_Innergemeinschaftlich($value) { $this->steuertext_innergemeinschaftlich=$value; } + public function GetSteuertext_Innergemeinschaftlich() { return $this->steuertext_innergemeinschaftlich; } + public function SetSteuertext_Export($value) { $this->steuertext_export=$value; } + public function GetSteuertext_Export() { return $this->steuertext_export; } + public function SetFormelmenge($value) { $this->formelmenge=$value; } + public function GetFormelmenge() { return $this->formelmenge; } + public function SetFormelpreis($value) { $this->formelpreis=$value; } + public function GetFormelpreis() { return $this->formelpreis; } + public function SetFreifeld7($value) { $this->freifeld7=$value; } + public function GetFreifeld7() { return $this->freifeld7; } + public function SetFreifeld8($value) { $this->freifeld8=$value; } + public function GetFreifeld8() { return $this->freifeld8; } + public function SetFreifeld9($value) { $this->freifeld9=$value; } + public function GetFreifeld9() { return $this->freifeld9; } + public function SetFreifeld10($value) { $this->freifeld10=$value; } + public function GetFreifeld10() { return $this->freifeld10; } + public function SetFreifeld11($value) { $this->freifeld11=$value; } + public function GetFreifeld11() { return $this->freifeld11; } + public function SetFreifeld12($value) { $this->freifeld12=$value; } + public function GetFreifeld12() { return $this->freifeld12; } + public function SetFreifeld13($value) { $this->freifeld13=$value; } + public function GetFreifeld13() { return $this->freifeld13; } + public function SetFreifeld14($value) { $this->freifeld14=$value; } + public function GetFreifeld14() { return $this->freifeld14; } + public function SetFreifeld15($value) { $this->freifeld15=$value; } + public function GetFreifeld15() { return $this->freifeld15; } + public function SetFreifeld16($value) { $this->freifeld16=$value; } + public function GetFreifeld16() { return $this->freifeld16; } + public function SetFreifeld17($value) { $this->freifeld17=$value; } + public function GetFreifeld17() { return $this->freifeld17; } + public function SetFreifeld18($value) { $this->freifeld18=$value; } + public function GetFreifeld18() { return $this->freifeld18; } + public function SetFreifeld19($value) { $this->freifeld19=$value; } + public function GetFreifeld19() { return $this->freifeld19; } + public function SetFreifeld20($value) { $this->freifeld20=$value; } + public function GetFreifeld20() { return $this->freifeld20; } + public function SetFreifeld21($value) { $this->freifeld21=$value; } + public function GetFreifeld21() { return $this->freifeld21; } + public function SetFreifeld22($value) { $this->freifeld22=$value; } + public function GetFreifeld22() { return $this->freifeld22; } + public function SetFreifeld23($value) { $this->freifeld23=$value; } + public function GetFreifeld23() { return $this->freifeld23; } + public function SetFreifeld24($value) { $this->freifeld24=$value; } + public function GetFreifeld24() { return $this->freifeld24; } + public function SetFreifeld25($value) { $this->freifeld25=$value; } + public function GetFreifeld25() { return $this->freifeld25; } + public function SetFreifeld26($value) { $this->freifeld26=$value; } + public function GetFreifeld26() { return $this->freifeld26; } + public function SetFreifeld27($value) { $this->freifeld27=$value; } + public function GetFreifeld27() { return $this->freifeld27; } + public function SetFreifeld28($value) { $this->freifeld28=$value; } + public function GetFreifeld28() { return $this->freifeld28; } + public function SetFreifeld29($value) { $this->freifeld29=$value; } + public function GetFreifeld29() { return $this->freifeld29; } + public function SetFreifeld30($value) { $this->freifeld30=$value; } + public function GetFreifeld30() { return $this->freifeld30; } + public function SetFreifeld31($value) { $this->freifeld31=$value; } + public function GetFreifeld31() { return $this->freifeld31; } + public function SetFreifeld32($value) { $this->freifeld32=$value; } + public function GetFreifeld32() { return $this->freifeld32; } + public function SetFreifeld33($value) { $this->freifeld33=$value; } + public function GetFreifeld33() { return $this->freifeld33; } + public function SetFreifeld34($value) { $this->freifeld34=$value; } + public function GetFreifeld34() { return $this->freifeld34; } + public function SetFreifeld35($value) { $this->freifeld35=$value; } + public function GetFreifeld35() { return $this->freifeld35; } + public function SetFreifeld36($value) { $this->freifeld36=$value; } + public function GetFreifeld36() { return $this->freifeld36; } + public function SetFreifeld37($value) { $this->freifeld37=$value; } + public function GetFreifeld37() { return $this->freifeld37; } + public function SetFreifeld38($value) { $this->freifeld38=$value; } + public function GetFreifeld38() { return $this->freifeld38; } + public function SetFreifeld39($value) { $this->freifeld39=$value; } + public function GetFreifeld39() { return $this->freifeld39; } + public function SetFreifeld40($value) { $this->freifeld40=$value; } + public function GetFreifeld40() { return $this->freifeld40; } + public function SetUrsprungsregion($value) { $this->ursprungsregion=$value; } + public function GetUrsprungsregion() { return $this->ursprungsregion; } + public function SetBestandalternativartikel($value) { $this->bestandalternativartikel=$value; } + public function GetBestandalternativartikel() { return $this->bestandalternativartikel; } + public function SetMetatitle_De($value) { $this->metatitle_de=$value; } + public function GetMetatitle_De() { return $this->metatitle_de; } + public function SetMetatitle_En($value) { $this->metatitle_en=$value; } + public function GetMetatitle_En() { return $this->metatitle_en; } + public function SetVkmeldungunterdruecken($value) { $this->vkmeldungunterdruecken=$value; } + public function GetVkmeldungunterdruecken() { return $this->vkmeldungunterdruecken; } + public function SetAltersfreigabe($value) { $this->altersfreigabe=$value; } + public function GetAltersfreigabe() { return $this->altersfreigabe; } + public function SetUnikatbeikopie($value) { $this->unikatbeikopie=$value; } + public function GetUnikatbeikopie() { return $this->unikatbeikopie; } + public function SetSteuergruppe($value) { $this->steuergruppe=$value; } + public function GetSteuergruppe() { return $this->steuergruppe; } + public function SetSachkonto($value) { $this->sachkonto=$value; } + public function GetSachkonto() { return $this->sachkonto; } + public function SetKostenstelle($value) { $this->kostenstelle=$value; } + public function GetKostenstelle() { return $this->kostenstelle; } + public function SetArtikelautokalkulation($value) { $this->artikelautokalkulation=$value; } + public function GetArtikelautokalkulation() { return $this->artikelautokalkulation; } + public function SetArtikelabschliessenkalkulation($value) { $this->artikelabschliessenkalkulation=$value; } + public function GetArtikelabschliessenkalkulation() { return $this->artikelabschliessenkalkulation; } + public function SetArtikelfifokalkulation($value) { $this->artikelfifokalkulation=$value; } + public function GetArtikelfifokalkulation() { return $this->artikelfifokalkulation; } + public function SetKeinskonto($value) { $this->keinskonto=$value; } + public function GetKeinskonto() { return $this->keinskonto; } + public function SetBerechneterek($value) { $this->berechneterek=$value; } + public function GetBerechneterek() { return $this->berechneterek; } + public function SetVerwendeberechneterek($value) { $this->verwendeberechneterek=$value; } + public function GetVerwendeberechneterek() { return $this->verwendeberechneterek; } + public function SetBerechneterekwaehrung($value) { $this->berechneterekwaehrung=$value; } + public function GetBerechneterekwaehrung() { return $this->berechneterekwaehrung; } + public function SetHas_Preproduced_Partlist($value) { $this->has_preproduced_partlist=$value; } + public function GetHas_Preproduced_Partlist() { return $this->has_preproduced_partlist; } + public function SetPreproduced_Partlist($value) { $this->preproduced_partlist=$value; } + public function GetPreproduced_Partlist() { return $this->preproduced_partlist; } + public function SetNettogewicht($value) { $this->nettogewicht=$value; } + public function GetNettogewicht() { return $this->nettogewicht; } + +} diff --git a/www/widgets/_gen/widget.gen.artikel.php b/www/widgets/_gen/widget.gen.artikel.php index 4bb7563c..a48cc646 100644 --- a/www/widgets/_gen/widget.gen.artikel.php +++ b/www/widgets/_gen/widget.gen.artikel.php @@ -1,720 +1,723 @@ -app = $app; - $this->parsetarget = $parsetarget; - $this->Form(); - } - - public function artikelDelete() - { - - $this->form->Execute("artikel","delete"); - - $this->artikelList(); - } - - function Edit() - { - $this->form->Edit(); - } - - function Copy() - { - $this->form->Copy(); - } - - public function Create() - { - $this->form->Create(); - } - - public function Search() - { - $this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE"); - } - - public function Summary() - { - $this->app->Tpl->Set($this->parsetarget,"grosse Tabelle"); - } - - function Form() - { - $this->form = $this->app->FormHandler->CreateNew("artikel"); - $this->form->UseTable("artikel"); - $this->form->UseTemplate("artikel.tpl",$this->parsetarget); - - $field = new HTMLInput("leerfeld","hidden","","","","","","","","","","0","",""); - $this->form->NewField($field); - - - $field = new HTMLInput("name_de","text","","70","","","","","","","","0","",""); - $this->form->NewField($field); - $this->form->AddMandatory("name_de","notempty","Pflichtfeld!","MSGNAME_DE"); - - $field = new HTMLInput("nummer","text","","20","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("projekt","text","","20","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLSelect("typ",0,"typ","","","0"); - $this->form->NewField($field); - - $field = new HTMLInput("adresse","text","","20","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLTextarea("anabregs_text",5,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("kurztext_de",2,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("internerkommentar",4,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLInput("hersteller","text","","40","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("herstellerlink","text","","40","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("herstellernummer","text","","35","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("ean","text","","35","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("zolltarifnummer","text","","35","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("herkunftsland","text","","35","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLSelect("ursprungsregion",0,"ursprungsregion","","","0"); - $field->AddOption('{|Bitte wählen|}',''); - $field->AddOption('01 Schleswig-Holstein','01'); - $field->AddOption('02 Hamburg','02'); - $field->AddOption('03 Niedersachsen','03'); - $field->AddOption('04 Bremen','04'); - $field->AddOption('05 Nordrhein-Westfalen','05'); - $field->AddOption('06 Hessen','06'); - $field->AddOption('07 Rheinland-Pfalz','07'); - $field->AddOption('08 Baden-Württemberg','08'); - $field->AddOption('09 Bayern','09'); - $field->AddOption('10 Saarland','10'); - $field->AddOption('11 Berlin','11'); - $field->AddOption('12 Brandenburg','12'); - $field->AddOption('13 Mecklenburg-Vorpommern','13'); - $field->AddOption('14 Sachsen','14'); - $field->AddOption('15 Sachsen-Anhalt','15'); - $field->AddOption('16 Thüringen','16'); - $field->AddOption('99 ausländischer Ursprung','99'); - $this->form->NewField($field); - - $field = new HTMLInput("mindestlager","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("gewicht","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("mindestbestellung","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("nettogewicht","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("lager_platz","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("laenge","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("einheit","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("breite","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("xvp","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("hoehe","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLSelect("abckategorie",0,"abckategorie","","","0"); - $field->AddOption('{|keine|}',''); - $field->AddOption('A','A'); - $field->AddOption('B','B'); - $field->AddOption('C','C'); - $this->form->NewField($field); - - $field = new HTMLCheckbox("lagerartikel","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("porto","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("rabatt","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("rabatt_prozent","text","","4","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("variante","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("variante_von","text","","35","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("matrixprodukt","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("tagespreise","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLSelect("umsatzsteuer",0,"umsatzsteuer","","","0"); - $field->AddOption('{|normal|}','normal'); - $field->AddOption('{|ermäßigt|}','ermaessigt'); - $field->AddOption('{|befreit|}','befreit'); - $this->form->NewField($field); - - $field = new HTMLCheckbox("anderersteuersatz","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("steuersatz","text","","15","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("keinrabatterlaubt","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("provisionssperre","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLSelect("chargenverwaltung",0,"chargenverwaltung","","","0"); - $field->AddOption('{|nein|}','0'); - $field->AddOption('{|ja|}','1'); - $field->AddOption('{|originale nutzen|}','2'); - $this->form->NewField($field); - - $field = new HTMLSelect("seriennummern",0,"seriennummern","","","0"); - $field->AddOption('{|keine|}','keine'); - $field->AddOption('{|eigene erzeugen|}','eigene'); - $field->AddOption('{|originale nutzen|}','vomprodukt'); - $field->AddOption('{|originale einlagern + nutzen|}','vomprodukteinlagern'); - $this->form->NewField($field); - - $field = new HTMLCheckbox("mindesthaltbarkeitsdatum","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("allelieferanten","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("inventursperre","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("inventurekaktiv","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("inventurek","text","","25","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("verwendeberechneterek","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("berechneterek","text","","7","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("berechneterekwaehrung","text","","6","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("vkmeldungunterdruecken","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("keinskonto","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLSelect("altersfreigabe",0,"altersfreigabe","","","0"); - $field->AddOption('',''); - $field->AddOption('{|ab 16|}','16'); - $field->AddOption('{|ab 18|}','18'); - $this->form->NewField($field); - - $field = new HTMLCheckbox("stueckliste","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("juststueckliste","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("keineeinzelartikelanzeigen","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("has_preproduced_partlist","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("preproduced_partlist","text","","","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("produktion","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("externeproduktion","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("rohstoffe","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("geraet","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("serviceartikel","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("gebuehr","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("dienstleistung","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("unikat","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("ohnepreisimpdf","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("formelmenge",2,50,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("formelpreis",2,50,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("intern_gesperrtgrund",4,50,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("intern_gesperrt","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("hinweis_einfuegen",4,50,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("freigabenotwendig","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("freigaberegel","text","","","","","","","","","","0","",""); - $this->form->NewField($field); - - - $field = new HTMLInput("name_en","text","","70","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLTextarea("kurztext_en",2,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("anabregs_text_en",5,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("uebersicht_de",2,25,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("uebersicht_en",2,25,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("beschreibung_de",3,25,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("beschreibung_en",3,25,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("links_de",2,25,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("links_en",2,25,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("startseite_de",2,25,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("startseite_en",2,25,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("metatitle_de",1,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("metatitle_en",1,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("metadescription_de",2,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("metadescription_en",2,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("metakeywords_de",2,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("metakeywords_en",2,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("katalog","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("katalogbezeichnung_de","text","","70","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("katalogbezeichnung_en","text","","70","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLTextarea("katalogtext_de",6,70,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("katalogtext_en",6,70,"","","","","0"); - $this->form->NewField($field); - - - $field = new HTMLInput("freifeld1","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld2","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld3","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld4","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld5","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld6","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld7","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld8","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld9","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld10","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld11","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld12","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld13","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld14","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld15","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld16","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld17","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld18","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld19","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld20","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld21","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld22","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld23","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld24","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld25","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld26","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld27","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld28","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld29","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld30","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld31","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld32","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld33","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld34","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld35","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld36","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld37","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld38","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld39","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("freifeld40","text","","50","","","","","","","","0","",""); - $this->form->NewField($field); - - - $field = new HTMLInput("shop","text","","20","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("shop2","text","","20","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("shop3","text","","20","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("autolagerlampe","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("restmenge","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("pseudolager",3,20,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLInput("lieferzeitmanuell","text","","20","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("bestandalternativartikel","text","","20","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("lagerkorrekturwert","text","","20","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("partnerprogramm_sperre","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("neu","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("topseller","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("startseite","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("downloadartikel","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("ausverkauft","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("inaktiv","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("pseudopreis","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("generierenummerbeioption","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("variante_kopie","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("unikatbeikopie","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("autoabgleicherlaubt","","","1","0","0"); - $this->form->NewField($field); - - $field = new HTMLSelect("steuer_art_produkt",0,"steuer_art_produkt","","","0"); - $field->AddOption('Physisches Produkt','1'); - $field->AddOption('Digitaler Inhalt','2'); - $field->AddOption('Dienstleistung','3'); - $this->form->NewField($field); - - $field = new HTMLSelect("steuer_art_produkt_download",0,"steuer_art_produkt_download","","","0"); - $field->AddOption('Download','1'); - $field->AddOption('eBook','2'); - $this->form->NewField($field); - - - $field = new HTMLInput("steuersatz_erloese_normal","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_erloese_inland_normal","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_aufwendung_inland_normal","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuersatz_erloese_ermaessigt","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_erloese_inland_ermaessigt","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_aufwendung_inland_ermaessigt","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_erloese_inland_nichtsteuerbar","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_aufwendung_inland_nichtsteuerbar","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_erloese_inland_steuerfrei","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_aufwendung_inland_steuerfrei","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuersatz_erloese_innergemeinschaftlich","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_erloese_inland_innergemeinschaftlich","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuertext_innergemeinschaftlich","text","","30","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_aufwendung_inland_innergemeinschaftlich","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuersatz_erloese_eunormal","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_erloese_inland_eunormal","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_aufwendung_inland_eunormal","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuersatz_erloese_euermaessigt","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_erloese_inland_euermaessigt","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_aufwendung_inland_euermaessigt","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuersatz_erloese_export","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_erloese_inland_export","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuertext_export","text","","30","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuer_aufwendung_inland_import","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("steuergruppe","text","","30","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("kostenstelle","text","","30","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("onlinshopspopup_sid","hidden","","","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("onlinshopspopup_shop","text","","40","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("onlinshopspopup_aktiv","","","","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("onlinshopspopup_ausartikel","","","","0","0"); - $this->form->NewField($field); - - $field = new HTMLTextarea("onlinshopspopup_pseudolager",0,0,"","","","","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("onlinshopspopup_autolagerlampe","","","","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("onlinshopspopup_restmenge","","","","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("onlinshopspopup_lieferzeitmanuell","text","","40","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLInput("onlinshopspopup_pseudopreis","text","","40","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("onlinshopspopup_generierenummerbeioption","","","","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("onlinshopspopup_variante_kopie","","","","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("onlinshopspopup_unikat","","","","0","0"); - $this->form->NewField($field); - - $field = new HTMLCheckbox("onlinshopspopup_unikatbeikopie","","","","0","0"); - $this->form->NewField($field); - - $field = new HTMLInput("onlinshopspopup_lagerkorrekturwert","text","","10","","","","","","","","0","",""); - $this->form->NewField($field); - - $field = new HTMLCheckbox("onlinshopspopup_autoabgeleicherlaubt","","","","0","0"); - $this->form->NewField($field); - - } - -} - -?> \ No newline at end of file +app = $app; + $this->parsetarget = $parsetarget; + $this->Form(); + } + + public function artikelDelete() + { + + $this->form->Execute("artikel","delete"); + + $this->artikelList(); + } + + function Edit() + { + $this->form->Edit(); + } + + function Copy() + { + $this->form->Copy(); + } + + public function Create() + { + $this->form->Create(); + } + + public function Search() + { + $this->app->Tpl->Set($this->parsetarget,"SUUUCHEEE"); + } + + public function Summary() + { + $this->app->Tpl->Set($this->parsetarget,"grosse Tabelle"); + } + + function Form() + { + $this->form = $this->app->FormHandler->CreateNew("artikel"); + $this->form->UseTable("artikel"); + $this->form->UseTemplate("artikel.tpl",$this->parsetarget); + + $field = new HTMLInput("leerfeld","hidden","","","","","","","","","","0","",""); + $this->form->NewField($field); + + + $field = new HTMLInput("name_de","text","","70","","","","","","","","0","",""); + $this->form->NewField($field); + $this->form->AddMandatory("name_de","notempty","Pflichtfeld!","MSGNAME_DE"); + + $field = new HTMLInput("nummer","text","","20","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("projekt","text","","20","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLSelect("typ",0,"typ","","","0"); + $this->form->NewField($field); + + $field = new HTMLInput("adresse","text","","20","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLTextarea("anabregs_text",5,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("kurztext_de",2,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("internerkommentar",4,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLInput("hersteller","text","","40","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("herstellerlink","text","","40","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("herstellernummer","text","","35","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("ean","text","","35","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("zolltarifnummer","text","","35","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("herkunftsland","text","","35","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLSelect("ursprungsregion",0,"ursprungsregion","","","0"); + $field->AddOption('{|Bitte wählen|}',''); + $field->AddOption('01 Schleswig-Holstein','01'); + $field->AddOption('02 Hamburg','02'); + $field->AddOption('03 Niedersachsen','03'); + $field->AddOption('04 Bremen','04'); + $field->AddOption('05 Nordrhein-Westfalen','05'); + $field->AddOption('06 Hessen','06'); + $field->AddOption('07 Rheinland-Pfalz','07'); + $field->AddOption('08 Baden-Württemberg','08'); + $field->AddOption('09 Bayern','09'); + $field->AddOption('10 Saarland','10'); + $field->AddOption('11 Berlin','11'); + $field->AddOption('12 Brandenburg','12'); + $field->AddOption('13 Mecklenburg-Vorpommern','13'); + $field->AddOption('14 Sachsen','14'); + $field->AddOption('15 Sachsen-Anhalt','15'); + $field->AddOption('16 Thüringen','16'); + $field->AddOption('99 ausländischer Ursprung','99'); + $this->form->NewField($field); + + $field = new HTMLInput("mindestlager","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("gewicht","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("mindestbestellung","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("nettogewicht","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("lager_platz","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("laenge","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("einheit","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("breite","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("xvp","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("hoehe","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLSelect("abckategorie",0,"abckategorie","","","0"); + $field->AddOption('{|keine|}',''); + $field->AddOption('A','A'); + $field->AddOption('B','B'); + $field->AddOption('C','C'); + $this->form->NewField($field); + + $field = new HTMLCheckbox("lagerartikel","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("porto","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("rabatt","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("rabatt_prozent","text","","4","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("variante","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("variante_von","text","","35","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("matrixprodukt","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("tagespreise","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLSelect("umsatzsteuer",0,"umsatzsteuer","","","0"); + $field->AddOption('{|normal|}','normal'); + $field->AddOption('{|ermäßigt|}','ermaessigt'); + $field->AddOption('{|befreit|}','befreit'); + $this->form->NewField($field); + + $field = new HTMLCheckbox("anderersteuersatz","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("steuersatz","text","","15","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("keinrabatterlaubt","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("provisionssperre","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLSelect("chargenverwaltung",0,"chargenverwaltung","","","0"); + $field->AddOption('{|nein|}','0'); + $field->AddOption('{|ja|}','1'); + $field->AddOption('{|originale nutzen|}','2'); + $this->form->NewField($field); + + $field = new HTMLSelect("seriennummern",0,"seriennummern","","","0"); + $field->AddOption('{|keine|}','keine'); + $field->AddOption('{|eigene erzeugen|}','eigene'); + $field->AddOption('{|originale nutzen|}','vomprodukt'); + $field->AddOption('{|originale einlagern + nutzen|}','vomprodukteinlagern'); + $this->form->NewField($field); + + $field = new HTMLCheckbox("mindesthaltbarkeitsdatum","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("allelieferanten","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("inventursperre","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("inventurekaktiv","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("inventurek","text","","25","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("verwendeberechneterek","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("berechneterek","text","","7","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("berechneterekwaehrung","text","","6","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("vkmeldungunterdruecken","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("keinskonto","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLSelect("altersfreigabe",0,"altersfreigabe","","","0"); + $field->AddOption('',''); + $field->AddOption('{|ab 16|}','16'); + $field->AddOption('{|ab 18|}','18'); + $this->form->NewField($field); + + $field = new HTMLCheckbox("stueckliste","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("juststueckliste","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("keineeinzelartikelanzeigen","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("has_preproduced_partlist","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("preproduced_partlist","text","","","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("produktion","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("externeproduktion","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("rohstoffe","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("geraet","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("serviceartikel","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("gebuehr","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("dienstleistung","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("unikat","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("ohnepreisimpdf","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("formelmenge",2,50,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("formelpreis",2,50,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("intern_gesperrtgrund",4,50,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("intern_gesperrt","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("hinweis_einfuegen",4,50,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("freigabenotwendig","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("freigaberegel","text","","","","","","","","","","0","",""); + $this->form->NewField($field); + + + $field = new HTMLInput("name_en","text","","70","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLTextarea("kurztext_en",2,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("anabregs_text_en",5,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("uebersicht_de",2,25,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("uebersicht_en",2,25,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("beschreibung_de",3,25,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("beschreibung_en",3,25,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("links_de",2,25,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("links_en",2,25,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("startseite_de",2,25,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("startseite_en",2,25,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("metatitle_de",1,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("metatitle_en",1,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("metadescription_de",2,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("metadescription_en",2,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("metakeywords_de",2,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("metakeywords_en",2,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("katalog","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("katalogbezeichnung_de","text","","70","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("katalogbezeichnung_en","text","","70","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLTextarea("katalogtext_de",6,70,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("katalogtext_en",6,70,"","","","","0"); + $this->form->NewField($field); + + + $field = new HTMLInput("freifeld1","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld2","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld3","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld4","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld5","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld6","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld7","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld8","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld9","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld10","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld11","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld12","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld13","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld14","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld15","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld16","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld17","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld18","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld19","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld20","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld21","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld22","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld23","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld24","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld25","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld26","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld27","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld28","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld29","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld30","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld31","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld32","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld33","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld34","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld35","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld36","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld37","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld38","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld39","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("freifeld40","text","","50","","","","","","","","0","",""); + $this->form->NewField($field); + + + $field = new HTMLInput("shop","text","","20","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("shop2","text","","20","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("shop3","text","","20","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("autolagerlampe","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("restmenge","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("pseudolager",3,20,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLInput("lieferzeitmanuell","text","","20","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("bestandalternativartikel","text","","20","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("lagerkorrekturwert","text","","20","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("partnerprogramm_sperre","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("neu","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("topseller","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("startseite","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("downloadartikel","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("ausverkauft","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("inaktiv","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("pseudopreis","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("generierenummerbeioption","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("variante_kopie","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("unikatbeikopie","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("autoabgleicherlaubt","","","1","0","0"); + $this->form->NewField($field); + + $field = new HTMLSelect("steuer_art_produkt",0,"steuer_art_produkt","","","0"); + $field->AddOption('Physisches Produkt','1'); + $field->AddOption('Digitaler Inhalt','2'); + $field->AddOption('Dienstleistung','3'); + $this->form->NewField($field); + + $field = new HTMLSelect("steuer_art_produkt_download",0,"steuer_art_produkt_download","","","0"); + $field->AddOption('Download','1'); + $field->AddOption('eBook','2'); + $this->form->NewField($field); + + + $field = new HTMLInput("steuersatz_erloese_normal","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_erloese_inland_normal","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_aufwendung_inland_normal","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuersatz_erloese_ermaessigt","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_erloese_inland_ermaessigt","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_aufwendung_inland_ermaessigt","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_erloese_inland_nichtsteuerbar","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_aufwendung_inland_nichtsteuerbar","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_erloese_inland_steuerfrei","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_aufwendung_inland_steuerfrei","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuersatz_erloese_innergemeinschaftlich","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_erloese_inland_innergemeinschaftlich","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuertext_innergemeinschaftlich","text","","30","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_aufwendung_inland_innergemeinschaftlich","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuersatz_erloese_eunormal","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_erloese_inland_eunormal","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_aufwendung_inland_eunormal","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuersatz_erloese_euermaessigt","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_erloese_inland_euermaessigt","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_aufwendung_inland_euermaessigt","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuersatz_erloese_export","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_erloese_inland_export","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuertext_export","text","","30","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuer_aufwendung_inland_import","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("steuergruppe","text","","30","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("sachkonto","text","","30","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("kostenstelle","text","","30","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("onlinshopspopup_sid","hidden","","","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("onlinshopspopup_shop","text","","40","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("onlinshopspopup_aktiv","","","","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("onlinshopspopup_ausartikel","","","","0","0"); + $this->form->NewField($field); + + $field = new HTMLTextarea("onlinshopspopup_pseudolager",0,0,"","","","","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("onlinshopspopup_autolagerlampe","","","","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("onlinshopspopup_restmenge","","","","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("onlinshopspopup_lieferzeitmanuell","text","","40","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLInput("onlinshopspopup_pseudopreis","text","","40","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("onlinshopspopup_generierenummerbeioption","","","","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("onlinshopspopup_variante_kopie","","","","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("onlinshopspopup_unikat","","","","0","0"); + $this->form->NewField($field); + + $field = new HTMLCheckbox("onlinshopspopup_unikatbeikopie","","","","0","0"); + $this->form->NewField($field); + + $field = new HTMLInput("onlinshopspopup_lagerkorrekturwert","text","","10","","","","","","","","0","",""); + $this->form->NewField($field); + + $field = new HTMLCheckbox("onlinshopspopup_autoabgeleicherlaubt","","","","0","0"); + $this->form->NewField($field); + + } + +} + +?> diff --git a/www/widgets/templates/_gen/artikel.tpl b/www/widgets/templates/_gen/artikel.tpl index 4cdaa479..a7cc327e 100644 --- a/www/widgets/templates/_gen/artikel.tpl +++ b/www/widgets/templates/_gen/artikel.tpl @@ -849,7 +849,87 @@ [DISABLECLOSESHOP]
    - +
    +
    +
    +
    +
    + {|Finanzbuchhaltung Export Erlöse|} + + + + + + + + + + + + + + + + + + + + + +
    Inland (normal):[STEUER_ERLOESE_INLAND_NORMAL][MSGSTEUER_ERLOESE_INLAND_NORMAL]
    Inland (ermäßigt):[STEUER_ERLOESE_INLAND_ERMAESSIGT][MSGSTEUER_ERLOESE_INLAND_ERMAESSIGT]
    Inland (steuerfrei):[STEUER_ERLOESE_INLAND_NICHTSTEUERBAR][MSGSTEUER_ERLOESE_INLAND_NICHTSTEUERBAR]
    Innergemeinschaftlich EU:[STEUER_ERLOESE_INLAND_INNERGEMEINSCHAFTLICH][MSGSTEUER_ERLOESE_INLAND_INNERGEMEINSCHAFTLICH]
    EU (normal):[STEUER_ERLOESE_INLAND_EUNORMAL][MSGSTEUER_ERLOESE_INLAND_EUNORMAL]
    EU (ermäßigt):[STEUER_ERLOESE_INLAND_EUERMAESSIGT][MSGSTEUER_ERLOESE_INLAND_EUERMAESSIGT]
    Export:[STEUER_ERLOESE_INLAND_EXPORT][MSGSTEUER_ERLOESE_INLAND_EXPORT]
    +
    +
    +
    +
    +
    +
    + {|Finanzbuchhaltung Export Aufwendungen|} + + + + + + + + + + + + + + + + + + + + + + +
    Inland (normal):[STEUER_AUFWENDUNG_INLAND_NORMAL][MSGSTEUER_AUFWENDUNG_INLAND_NORMAL]
    Inland (ermäßigt):[STEUER_AUFWENDUNG_INLAND_ERMAESSIGT][MSGSTEUER_AUFWENDUNG_INLAND_ERMAESSIGT]
    Inland (steuefrei):[STEUER_AUFWENDUNG_INLAND_NICHTSTEUERBAR][MSGSTEUER_AUFWENDUNG_INLAND_NICHTSTEUERBAR]
    Innergemeinschaftlich EU:[STEUER_AUFWENDUNG_INLAND_INNERGEMEINSCHAFTLICH][MSGSTEUER_AUFWENDUNG_INLAND_INNERGEMEINSCHAFTLICH]
    EU (normal):[STEUER_AUFWENDUNG_INLAND_EUNORMAL][MSGSTEUER_AUFWENDUNG_INLAND_EUNORMAL]
    EU (ermäßigt):[STEUER_AUFWENDUNG_INLAND_EUERMAESSIGT][MSGSTEUER_AUFWENDUNG_INLAND_EUERMAESSIGT]
    Import:[STEUER_AUFWENDUNG_INLAND_IMPORT][MSGSTEUER_AUFWENDUNG_INLAND_IMPORT]
    +
    +
    +
    +
    +
    +
    + {|Einstellungen|} + + + + + + + +
    Sachkonto für Verbindlichkeiten-Vorkontierung:[SACHKONTO]
    Kostenstelle:[KOSTENSTELLE]
    +
    +
    +
    +
    +
    +
    + +
    diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index 6ba4f72f..594f9c60 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -20,6 +20,7 @@ class Verbindlichkeit { $this->app->ActionHandler("edit", "verbindlichkeit_edit"); $this->app->ActionHandler("positionen", "verbindlichkeit_positionen"); $this->app->ActionHandler("delete", "verbindlichkeit_delete"); + $this->app->ActionHandler("deletepos", "verbindlichkeit_deletepos"); $this->app->ActionHandler("dateien", "verbindlichkeit_dateien"); $this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf"); $this->app->ActionHandler("positioneneditpopup", "verbindlichkeit_positioneneditpopup"); @@ -175,6 +176,232 @@ class Verbindlichkeit { $moreinfo = true; // Allow drop down details $menucol = 1; // For moredata + break; + case 'verbindlichkeit_paketdistribution_list': + $allowed['verbindlichkeit_paketdistribution_list'] = array('list'); + + $id = $app->Secure->GetGET('id'); + if (empty($id)) { + break; + } + + $verbindlichkeit = $app->DB->SelectArr("SELECT v.adresse, v.rechnung, b.belegnr FROM verbindlichkeit v LEFT JOIN bestellung b ON b.id = v.bestellung WHERE v.id = ".$id)[0]; + + $lieferant = $verbindlichkeit['adresse']; + $bestellnummer = $verbindlichkeit['belegnr']; + $rechnung = $verbindlichkeit['rechnung']; + + $heading = array('Paket-Nr.','Paket-Pos.', 'Bestellung', 'Lieferschein', 'Rechnung', 'Artikel-Nr.','Artikel','Menge','Menge offen','Eingabe','Preis',''); + $width = array( '1%', '1%', '5%', '5%', '5%', '5%', '20%', '2%', '1%', '1%', '1%', '1%'); + + $findcols = array('id','belegnr'); + $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); + + $alignright = array(8,9,11); + + $defaultorder = 1; + $defaultorderdesc = 0; + + $offen_menge = "TRIM(IF( + pd.menge > COALESCE(vp.menge,0), + pd.menge - COALESCE(vp.menge,0), + 0 + ))+0"; + + $auswahl = array ( + ' 'pd.id'], + '" hidden/>', + ['sql' => 'pd.id'], + '', + '' + ); + + $werte = array ( + '' + ); + + $preise = array ( + '' + ); + + $artikellink = array ( + '', + ['sql' => 'art.nummer'], + '' + ); + + $paketlink = array ( + '', + ['sql' => 'pa.id'], + '' + ); + + $where = "offen_menge > 0"; + + // Toggle filters + $this->app->Tpl->Add('JQUERYREADY', "$('#passende').click( function() { fnFilterColumn1( 0 ); } );"); + + for ($r = 1;$r <= 1;$r++) { + $this->app->Tpl->Add('JAVASCRIPT', ' + function fnFilterColumn' . $r . ' ( i ) + { + if(oMoreData' . $r . $name . '==1) + oMoreData' . $r . $name . ' = 0; + else + oMoreData' . $r . $name . ' = 1; + + $(\'#' . $name . '\').dataTable().fnFilter( + \'\', + i, + 0,0 + ); + } + '); + } + + $more_data1 = $this->app->Secure->GetGET("more_data1"); + if ($more_data1 == 1) { + $innerwhere .= " AND (b.belegnr LIKE '%".$bestellnummer."%' OR pa.renr LIKE '%".$rechnung."%')"; + } else { + } + // END Toggle filters + + + + $sql = " + SELECT SQL_CALC_FOUND_ROWS * FROM ( + SELECT + pa.id pa, + ".$this->app->erp->ConcatSQL($paketlink).", + ".$this->app->erp->ConcatSQL($auswahl)." AS auswahl, + if(b.belegnr LIKE '%".$bestellnummer."%',CONCAT('',b.belegnr,''),b.belegnr) AS belegnr, + pa.lsnr, + if(pa.renr LIKE '%".$rechnung."%',CONCAT('',pa.renr,''),pa.renr) AS renr, + ".$this->app->erp->ConcatSQL($artikellink).", + art.name_de, + pd.menge, + IF( + pd.menge > COALESCE(vp.menge,0), + pd.menge - COALESCE(vp.menge,0), + 0 + ) offen_menge, + ".$this->app->erp->ConcatSQL($werte).", + ".$this->app->erp->ConcatSQL($preise)." + FROM + paketannahme pa + INNER JOIN paketdistribution pd ON + pd.paketannahme = pa.id + INNER JOIN artikel art ON + art.id = pd.artikel + LEFT JOIN adresse adr ON + adr.id = pa.adresse + LEFT JOIN bestellung_position bp ON + bp.id = pd.bestellung_position + LEFT JOIN bestellung b ON + b.id = bp.bestellung + LEFT JOIN( + SELECT + paketdistribution, + SUM(menge) AS menge + FROM + verbindlichkeit_position vp + GROUP BY + paketdistribution + ) vp + ON + vp.paketdistribution = pd.id + WHERE pa.adresse = ".$lieferant." AND pd.vorlaeufig IS NULL".$innerwhere." + ) temp + "; + + $count = ""; +// $groupby = ""; + + break; + case 'verbindlichkeit_positionen': + + $allowed['verbindlichkeit_positionen'] = array('list'); + + $id = $app->Secure->GetGET('id'); + $freigabe = $app->DB->Select("SELECT freigabe FROM verbindlichkeit WHERE id = ".$id); + +// $heading = array('Paket-Nr.','Paket-Pos.', 'Bestellung', 'Artikel-Nr.','Artikel','Menge','Preis','Steuersatz','Sachkonto','Menü',''); + $heading = array('', 'Paket-Nr.','Paket-Pos.', 'Bestellung', 'Artikel-Nr.','Artikel','Menge','Preis','Steuersatz abw.','Sachkonto abw.'); + $width = array( '1%','1%', '1%' , '2%', '2%', '16%', '1%', '1%', '1%', '3%', '1%', '1%'); + + $findcols = array('id','id'); + $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); + + $alignright = array(6,7,8,9); + + $defaultorder = 1; + $defaultorderdesc = 0; + + if (empty($freigabe)) { + $deletepos = array ( + ' 'vp.id'], + '")>', + 'Conf->WFconf['defaulttheme'].'/images/delete.svg\" border=\"0\">' + ); + $heading[] = 'Menü'; + } else { + $deletepos = array(''); + } + $heading[] = ''; + + $box = "CONCAT('') AS `auswahl`"; + + $sql = " + SELECT SQL_CALC_FOUND_ROWS + vp.id, + $box, + pd.paketannahme, + pd.id paket_position, + b.belegnr, + art.nummer, + art.name_de, + vp.menge, + vp.preis, + vp.steuersatz, + CONCAT(skv.sachkonto,' ',skv.beschriftung), + ".$this->app->erp->ConcatSQL($deletepos)." + FROM + verbindlichkeit_position vp + INNER JOIN verbindlichkeit v ON + v.id = vp.verbindlichkeit + INNER JOIN paketdistribution pd ON + pd.id = vp.paketdistribution + INNER JOIN artikel art ON + art.id = pd.artikel + INNER JOIN adresse adr ON + adr.id = v.adresse + LEFT JOIN bestellung_position bp ON pd.bestellung_position = bp.id + LEFT JOIN bestellung b ON b.id = bp.bestellung + LEFT JOIN kontorahmen skv ON skv.id = vp.kontorahmen + "; + + $where = "vp.verbindlichkeit = ".$id; + + $count = ""; + break; } @@ -263,16 +490,21 @@ class Verbindlichkeit { $this->verbindlichkeit_list(); } + public function verbindlichkeit_deletepos() { + $id = (int) $this->app->Secure->GetGET('id'); + $verbindlichkeit = $this->app->DB->Select("SELECT verbindlichkeit FROM verbindlichkeit_position WHERE id ='{$id}'"); + $this->app->DB->Delete("DELETE vp FROM verbindlichkeit_position vp INNER JOIN verbindlichkeit v ON v.id = vp.verbindlichkeit WHERE vp.id = '{$id}' AND v.freigabe <> 1"); + header("Location: index.php?module=verbindlichkeit&action=edit&id=$verbindlichkeit#tabs-2"); + } + /* * Edit verbindlichkeit item * If id is empty, create a new one */ - function verbindlichkeit_edit() { + function verbindlichkeit_edit($einkauf_automatik_aus = false) { $id = $this->app->Secure->GetGET('id'); - $this->app->YUI->AARLGPositionen(true); // create iframe with positionen action - // Check if other users are editing this id if($this->app->erp->DisableModul('artikel',$id)) { @@ -292,65 +524,145 @@ class Verbindlichkeit { $input['status'] = 'angelegt'; } - if ($submit != '') + switch($submit) { + case 'speichern': + // Write to database + // Add checks here + $schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM verbindlichkeit WHERE id =".$id); - // Write to database - // Add checks here - $schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM verbindlichkeit WHERE id =".$id); + if ($schreibschutz) { + $internebemerkung = $input['internebemerkung']; + $projekt = $input['projekt']; + $kostenstelle = $input['kostenstelle']; + unset($input); + $input['internebemerkung'] = $internebemerkung; + $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$projekt,true); + $input['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$kostenstelle."'"); + } else { + $input['adresse'] = $this->app->erp->ReplaceLieferantennummer(true,$input['adresse'],true); // Parameters: Target db?, value, from form? + $input['rechnungsdatum'] = $this->app->erp->ReplaceDatum(true,$input['rechnungsdatum'],true); // Parameters: Target db?, value, from form? + $input['eingangsdatum'] = $this->app->erp->ReplaceDatum(true,$input['eingangsdatum'],true); // Parameters: Target db?, value, from form? + $input['skontobis'] = $this->app->erp->ReplaceDatum(true,$input['skontobis'],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['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$input['kostenstelle']."'"); + $input['projekt'] = $this->app->erp->ReplaceBestellung(true,$input['bestellung'],true); + if(empty($input['projekt']) && !empty($input['adresse'])) { + $input['projekt'] = $this->app->erp->GetCreateProjekt($input['adresse']); + } - if ($schreibschutz) { - $internebemerkung = $input['internebemerkung']; - $projekt = $input['projekt']; - $kostenstelle = $input['kostenstelle']; - unset($input); - $input['internebemerkung'] = $internebemerkung; - $input['projekt'] = $this->app->erp->ReplaceProjekt(true,$projekt,true); - $input['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$kostenstelle."'"); - } else { - $input['adresse'] = $this->app->erp->ReplaceLieferantennummer(true,$input['adresse'],true); // Parameters: Target db?, value, from form? - $input['rechnungsdatum'] = $this->app->erp->ReplaceDatum(true,$input['rechnungsdatum'],true); // Parameters: Target db?, value, from form? - $input['eingangsdatum'] = $this->app->erp->ReplaceDatum(true,$input['eingangsdatum'],true); // Parameters: Target db?, value, from form? - $input['skontobis'] = $this->app->erp->ReplaceDatum(true,$input['skontobis'],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['kostenstelle'] = $this->app->DB->Select("SELECT id FROM kostenstellen WHERE nummer = '".$input['kostenstelle']."'"); - if(empty($input['projekt']) && !empty($input['adresse'])) { - $input['projekt'] = $this->app->erp->GetCreateProjekt($input['adresse']); + if (!empty($input['adresse'])) { + $steuertyp = $this->app->DB->Select("SELECT 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"); + } + } + + } + + $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 = ", "; } - } - $columns = "id, "; - $values = "$id, "; - $update = ""; - - $fix = ""; + // echo($columns."
    "); + // echo($values."
    "); + // echo($update."
    "); - foreach ($input as $key => $value) { - $columns = $columns.$fix.$key; - $values = $values.$fix."'".$value."'"; - $update = $update.$fix.$key." = '$value'"; + $sql = "INSERT INTO verbindlichkeit (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update; - $fix = ", "; - } + // echo($sql); -// echo($columns."
    "); -// echo($values."
    "); -// echo($update."
    "); + $this->app->DB->Update($sql); - $sql = "INSERT INTO verbindlichkeit (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update; + if ($id == 'NULL') { + $id = $this->app->DB->GetInsertID(); + $msg = $this->app->erp->base64_url_encode("
    Das Element wurde erfolgreich angelegt.
    "); + header("Location: index.php?module=verbindlichkeit&action=edit&id=$id&msg=$msg"); + } else { + $this->app->Tpl->Set('MESSAGE', "
    Die Einstellungen wurden erfolgreich übernommen.
    "); + } + break; + case 'positionen_hinzufuegen': -// echo($sql); + $freigabeeinkauf = $this->app->DB->Select("SELECT freigabe FROM verbindlichkeit WHERE id =".$id); + if ($freigabeeinkauf) { + break; + } - $this->app->DB->Update($sql); + // Process multi action + $ids = $this->app->Secure->GetPOST('ids'); + $werte = $this->app->Secure->GetPOST('werte'); + $preise = $this->app->Secure->GetPOST('preise'); + $umsatzsteuern = $this->app->Secure->GetPOST('umsatzsteuer'); + $artikel = $this->app->Secure->GetPOST('artikel'); - if ($id == 'NULL') { - $id = $this->app->DB->GetInsertID(); - $msg = $this->app->erp->base64_url_encode("
    Das Element wurde erfolgreich angelegt.
    "); - header("Location: index.php?module=verbindlichkeit&action=edit&id=$id&msg=$msg"); - } else { - $this->app->Tpl->Set('MESSAGE', "
    Die Einstellungen wurden erfolgreich übernommen.
    "); - } + foreach ($ids as $key => $paketdistribution) { + $menge = $werte[$key]; + + if ($menge <= 0) { + continue; + } + + $preis = $preise[$key]; + $umsatzsteuer = $umsatzsteuern[$key]; + $ein_artikel = $artikel[$key]; + + $sql = "INSERT INTO verbindlichkeit_position (verbindlichkeit,paketdistribution, menge, preis, umsatzsteuer, artikel) VALUES ($id, $paketdistribution, $menge, $preis, '$umsatzsteuer', $ein_artikel)"; + + $this->app->DB->Insert($sql); + + } + break; + case 'positionen_sachkonto_speichern': + + $rechnungsfreigabe = $this->app->DB->Select("SELECT rechnungsfreigabe FROM verbindlichkeit WHERE id =".$id); + if ($rechnungsfreigabe) { + break; + } + // Process multi action + $ids = $this->app->Secure->GetPOST('auswahl'); + if (!is_array($ids)) { + break; + } + $sachkonto = $this->app->Secure->GetPOST('positionen_sachkonto'); + $kontorahmen = $this->app->erp->ReplaceKontorahmen(true,$sachkonto,false); + $sql = "update verbindlichkeit_position SET kontorahmen = '".$kontorahmen."' WHERE id IN (".implode(',',$ids).")"; + $this->app->DB->Update($sql); + break; + case 'positionen_steuersatz_speichern': + + $rechnungsfreigabe = $this->app->DB->Select("SELECT rechnungsfreigabe FROM verbindlichkeit WHERE id =".$id); + if ($rechnungsfreigabe) { + break; + } + // Process multi action + $ids = $this->app->Secure->GetPOST('auswahl'); + if (!is_array($ids)) { + break; + } + $steuersatz = $this->app->Secure->GetPOST('positionen_steuersatz'); + if (!is_numeric($steuersatz)) { + $steuersatz = 'NULL'; + } + $sql = "update verbindlichkeit_position SET steuersatz = ".$steuersatz." WHERE id IN (".implode(',',$ids).")"; + $this->app->DB->Update($sql); + break; } @@ -469,15 +781,27 @@ class Verbindlichkeit { $position['steuersatz_berechnet'] = $tmpsteuersatz; $position['steuertext_berechnet'] = $tmpsteuertext; $position['steuererloes_berechnet'] = $erloes; - + $betrag_netto += ($position['menge']*$position['preis']); $betrag_brutto += ($position['menge']*$position['preis'])*(1+($tmpsteuersatz/100)); } - + $this->app->Tpl->Set('BETRAGNETTO', $betrag_netto); $this->app->Tpl->Set('BETRAGBRUTTOPOS', round($betrag_brutto,2)); + if ($verbindlichkeit_from_db['betrag'] == round($betrag_brutto,2)) { + if (!$verbindlichkeit_from_db['freigabe'] && !$einkauf_automatik_aus) { + $this->app->DB->Update("UPDATE verbindlichkeit SET freigabe = 1 WHERE id = ".$id); + $verbindlichkeit_from_db['freigabe'] = 1; + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit automatisch freigegeben (Einkauf)"); + $this->app->YUI->Message('success',"Verbindlichkeit automatisch freigegeben (Einkauf)"); + } + $this->app->Tpl->Set('POSITIONENMESSAGE', '
    Positionen vollständig
    '); + } else { + $this->app->Tpl->Set('POSITIONENMESSAGE', '
    Positionen nicht vollständig. Bruttobetrag '.$verbindlichkeit_from_db['betrag'].', Summe Positionen (brutto) '.round($betrag_brutto,2).', Summe Positionen (netto) '.round($betrag_netto,2).'
    '); + } + $this->app->Tpl->Set('BETRAGDISABLED', 'disabled'); } @@ -493,9 +817,9 @@ class Verbindlichkeit { */ - if ($verbindlichkeit_from_db['schreibschutz']) { + if ($verbindlichkeit_from_db['rechnungsfreigabe']) { $this->app->Tpl->Set('SAVEDISABLED','disabled'); - $this->app->Tpl->Set('MESSAGE',"
    Diese Verbindlichkeit ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! 
    "); + $this->app->Tpl->Set('MESSAGE',"
    Diese Verbindlichkeit ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! 
    "); } if (empty($verbindlichkeit_from_db['adresse'] || $verbindlichkeit_from_db['status'] == 'angelegt')) { @@ -506,9 +830,12 @@ class Verbindlichkeit { if ($verbindlichkeit_from_db['freigabe']) { $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); + $this->app->Tpl->Set('EINKAUFINFOHIDDEN','hidden'); + $this->app->Tpl->Set('POSITIONHINZUFUEGENHIDDEN','hidden'); } else { $this->app->Tpl->Set('RUECKSETZENEINKAUFHIDDEN','hidden'); - } + } + if ($verbindlichkeit_from_db['rechnungsfreigabe']) { $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); } else { @@ -550,6 +877,9 @@ class Verbindlichkeit { $this->app->Tpl->Set('ADRESSE', $this->app->erp->ReplaceLieferantennummer(false,$verbindlichkeit_from_db['adresse'],false)); // Convert ID to form display + $this->app->Tpl->Set('BESTELLUNG',$this->app->erp->ReplaceBestellung(false,$verbindlichkeit_from_db['bestellung'],false)); + $this->app->YUI->AutoComplete("bestellung", "lieferantenbestellung",0,"&adresse=".$verbindlichkeit_from_db['adresse']); + $this->app->YUI->CkEditor("internebemerkung"); $anzahldateien = $this->app->erp->AnzahlDateien("verbindlichkeit",$id); @@ -561,6 +891,16 @@ class Verbindlichkeit { $this->app->Tpl->Set('INLINEPDF', 'Keine Dateien vorhanden.'); } + if (empty($verbindlichkeit_from_db['freigabe'])) { + $this->app->YUI->TableSearch('PAKETDISTRIBUTION', 'verbindlichkeit_paketdistribution_list', "show", "", "", basename(__FILE__), __CLASS__); + } + + // -- POSITIONEN + $this->app->YUI->AutoComplete("positionen_sachkonto", "sachkonto", 1); + $this->app->YUI->TableSearch('POSITIONEN', 'verbindlichkeit_positionen', "show", "", "", basename(__FILE__), __CLASS__); + $this->app->Tpl->Parse('POSITIONENTAB', "verbindlichkeit_positionen.tpl"); + // -- POSITIONEN + $this->verbindlichkeit_minidetail('MINIDETAIL',false); $this->app->Tpl->Parse('PAGE', "verbindlichkeit_edit.tpl"); @@ -583,6 +923,7 @@ class Verbindlichkeit { $input['zahlungsweise'] = $this->app->Secure->GetPOST('zahlungsweise'); $input['eingangsdatum'] = $this->app->Secure->GetPOST('eingangsdatum'); $input['rechnungsdatum'] = $this->app->Secure->GetPOST('rechnungsdatum'); + $input['bestellung'] = $this->app->Secure->GetPOST('bestellung'); $input['freigabe'] = $this->app->Secure->GetPOST('freigabe')?'1':'0'; $input['rechnungsfreigabe'] = $this->app->Secure->GetPOST('rechnungsfreigabe')?'1':'0'; $input['kostenstelle'] = $this->app->Secure->GetPOST('kostenstelle'); @@ -614,7 +955,7 @@ class Verbindlichkeit { } $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Verbindlichkeit $belegnr"); - if ($invoiceArr['status'] === 'angelegt' || $invoiceArr['schreibschutz'] != 1) { + if ($invoiceArr['status'] === 'angelegt' || empty($invoiceArr['status'])) { $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=freigabe&id=$id",'Freigabe'); } } @@ -666,73 +1007,7 @@ class Verbindlichkeit { } $this->app->ExitXentral(); } - - function verbindlichkeit_positionen() { - $this->app->YUI->AARLGPositionen(false); // Render positionen editable into iframe - } - - function verbindlichkeit_positioneneditpopup() { - $cmd = $this->app->Secure->GetGET('cmd'); - if($cmd === 'getopenaccordions') - { - $accordions = $this->app->Secure->GetPOST('accordions'); - $accordions = explode('*|*',$accordions); - foreach($accordions as $k => $v) - { - if(empty($v)) - { - unset($accordions[$k]); - }else{ - $accordions[$k] = 'verbindlichkeit_accordion'.$v; - } - } - $ret = []; - if(!empty($accordions)) - { - $accordions = $this->app->User->GetParameter($accordions); - if(!empty($accordions)) - { - foreach($accordions as $v) - { - if(!empty($v['value'])) - { - $ret['accordions'][] = str_replace('verbindlichkeit_accordion','',$v['name']); - } - } - } - } - echo json_encode($ret); - $this->app->ExitXentral(); - } - if($cmd === 'setaccordion') - { - $name = $this->app->Secure->GetPOST('name'); - $active = $this->app->Secure->GetPOST('active'); - $this->app->User->SetParameter('verbindlichkeit_accordion'.$name, $active); - echo json_encode(array('success'=>1)); - $this->app->ExitXentral(); - } - $id = $this->app->Secure->GetGET('id'); - $fmodul = $this->app->Secure->GetGET('fmodul'); - $artikel= $this->app->DB->Select("SELECT artikel FROM verbindlichkeit_position WHERE id='$id' LIMIT 1"); - - // nach page inhalt des dialogs ausgeben - $filename = 'widgets/widget.auftag_position_custom.php'; - if(is_file($filename)) - { - include_once $filename; - $widget = new WidgetVerbindlichkeit_positionCustom($this->app,'PAGE'); - } else { - $widget = new WidgetVerbindlichkeit_position($this->app,'PAGE'); - } - - $sid= $this->app->DB->Select("SELECT verbindlichkeit FROM verbindlichkeit_position WHERE id='$id' LIMIT 1"); - $widget->form->SpecialActionAfterExecute('close_refresh', - "index.php?module=verbindlichkeit&action=positionen&id=$sid&fmodul=$fmodul"); - $widget->Edit(); - $this->app->BuildNavigation=false; - } - + function verbindlichkeit_freigabe() { $id = $this->app->Secure->GetGET('id'); @@ -748,7 +1023,7 @@ class Verbindlichkeit { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } - $sql = "UPDATE verbindlichkeit SET freigabe = 1 WHERE id=".$id; + $sql = "UPDATE verbindlichkeit SET freigabe = 1, schreibschutz = 1 WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben (Einkauf)"); if ($gotoedit) { @@ -790,11 +1065,11 @@ class Verbindlichkeit { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } - $sql = "UPDATE verbindlichkeit SET freigabe = 0 WHERE id=".$id; + $sql = "UPDATE verbindlichkeit SET freigabe = 0, schreibschutz = 0 WHERE id=".$id; $this->app->DB->Update($sql); $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit rückgesetzt (Einkauf)"); if ($gotoedit) { - $this->verbindlichkeit_edit(); + $this->verbindlichkeit_edit(true); } } @@ -865,7 +1140,6 @@ class Verbindlichkeit { v.skontofestsetzen, v.freigabe, v.freigabemitarbeiter, - v.bestellung, p.abkuerzung AS projekt, v.teilprojekt, v.auftrag, @@ -914,6 +1188,86 @@ class Verbindlichkeit { $verbindlichkeit_from_db = $result[0]; } + $positionen = $this->app->DB->SelectArr("SELECT vp.id, + vp.sort, + art.name_de, + art.nummer, + vp.menge, + vp.preis, + vp.steuersatz, + if (skv.sachkonto <> 0, + CONCAT(skv.sachkonto,' ',skv.beschriftung), + ( + if (skart.sachkonto <> 0, + CONCAT(skart.sachkonto,' ',skart.beschriftung, ' (Artikel)'), + CONCAT(skadr.sachkonto,' ',skadr.beschriftung, ' (Adresse)') + ) + ) + ) AS sachkonto, + '' + 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' + ORDER by vp.sort ASC"); + + $tmp = new EasyTable($this->app); + $tmp->headings = array('Pos.','Artikel-Nr.','Artikel','Menge','Preis','Steuersatz','WIRDUNTENGEFÜLLTWARUMAUCHIMMER'); + $betrag_netto = 0; + $betrag_brutto = 0; + $steuer_normal = 0; + $steuer_ermaessigt = 0; + foreach ($positionen as $position) { + + $tmpsteuersatz = null; + $tmpsteuertext = null; + $erloes = null; + + $this->app->erp->GetSteuerPosition("verbindlichkeit",$position['id'],$tmpsteuersatz,$tmpsteuertext,$erloes); + + $position['steuersatz_berechnet'] = $tmpsteuersatz; + $position['steuertext_berechnet'] = $tmpsteuertext; + $position['steuererloes_berechnet'] = $erloes; + + $betrag_netto += ($position['menge']*$position['preis']); + $betrag_brutto += ($position['menge']*$position['preis'])*(1+($tmpsteuersatz/100)); + + $row = array( + $position['sort'], + $position['nummer'], + $position['name_de'], + $position['menge'], + $position['preis'], + $position['steuersatz_berechnet'], + $position['sachkonto'] + ); + $tmp->AddRow($row); + } + + $row = array( + '', + '', + '', + '', + 'Betrag Positionen netto', + 'Betrag Positionen brutto' + ); + $tmp->AddRow($row); + $row = array( + '', + '', + '', + '', + round($betrag_netto,2), + round($betrag_brutto,2) + ); + $tmp->AddRow($row); + $tmp->DisplayNew('ARTIKEL',"Sachkonto","noAction"); + $tmp = new EasyTable($this->app); $tmp->Query("SELECT zeit,bearbeiter,grund FROM verbindlichkeit_protokoll WHERE verbindlichkeit='$id' ORDER by zeit DESC",0,""); $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); From 054bb882da0121e85d6e5e536ebcdcc9942b490f Mon Sep 17 00:00:00 2001 From: ibs Date: Sun, 31 Dec 2023 17:32:59 +0100 Subject: [PATCH 20/62] =?UTF-8?q?An=20Angeboten,=20Rechnungen,=20etc.=20l?= =?UTF-8?q?=C3=A4sst=20sich=20der=20Rabatt=20in=20der=20ersten=20Zeile=20n?= =?UTF-8?q?icht=20=C3=A4ndern,=20der=20Server=20liefert=20einen=20Fehler?= =?UTF-8?q?=20500=20weil=20ein=20Mysql=20Query=20versucht,=20in=20der=20Re?= =?UTF-8?q?chnungstabelle=20"keinrabatterlaubt"=20zu=20setzen.=20Der=20gan?= =?UTF-8?q?ze=20Code=20ist=20mir=20ein=20R=C3=A4tsel,=20ich=20w=C3=BCsste?= =?UTF-8?q?=20nicht,=20wof=C3=BCr=20der=20gut=20sein=20k=C3=B6nnte.=20Bei?= =?UTF-8?q?=20mir=20funktioniert=20es=20ohne=20diese=203=20Zeilen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpwf/plugins/class.yui.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index ecf58f9c..6ac7fcd3 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -736,9 +736,10 @@ class YUI { if($value == '')$value = '0'; $this->app->DB->Update("UPDATE $table SET rabatt='$value',keinrabatterlaubt=1 WHERE id='$id' LIMIT 1"); $result = $this->app->DB->Select("SELECT ".$this->FormatPreis('rabatt')." FROM $table WHERE id='$id' LIMIT 1"); - $sort = $this->app->DB->Select("SELECT sort FROM $table WHERE id='$id' LIMIT 1"); - $parent = $this->app->DB->Select("SELECT $module FROM $table WHERE id='$id' LIMIT 1"); - if($parent && $sort == 1)$this->app->DB->Update("UPDATE $module SET rabatt = '$value',keinrabatterlaubt=1 WHERE id = '$parent' LIMIT 1"); + + //$sort = $this->app->DB->Select("SELECT sort FROM $table WHERE id='$id' LIMIT 1"); + //$parent = $this->app->DB->Select("SELECT $module FROM $table WHERE id='$id' LIMIT 1"); + //if($parent && $sort == 1)$this->app->DB->Update("UPDATE $module SET rabatt = '$value',keinrabatterlaubt=1 WHERE id = '$parent' LIMIT 1"); if(in_array($module, array('auftrag','rechnung','gutschrift'))) { $tmptable_value = $this->app->DB->Select("SELECT $module FROM $table WHERE id = '$id' LIMIT 1"); From c424d79fd67bf672180f576e540951176c321090 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Mon, 1 Jan 2024 18:50:40 +0100 Subject: [PATCH 21/62] verbindlichkeit added findcols and filters --- www/pages/content/verbindlichkeit_edit.tpl | 2 +- .../content/verbindlichkeit_positionen.tpl | 6 +-- www/pages/verbindlichkeit.php | 37 ++++++++++++++----- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl index 1dfbbf50..8b8de80f 100644 --- a/www/pages/content/verbindlichkeit_edit.tpl +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -21,7 +21,7 @@ [STATUSICONS]
    - +
    diff --git a/www/pages/content/verbindlichkeit_positionen.tpl b/www/pages/content/verbindlichkeit_positionen.tpl index 800d670a..2bf5580e 100644 --- a/www/pages/content/verbindlichkeit_positionen.tpl +++ b/www/pages/content/verbindlichkeit_positionen.tpl @@ -30,7 +30,7 @@ {|Aktionen|} - +
    @@ -59,13 +59,13 @@ Sachkonto:  - + Steuersatz:  - + diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index 594f9c60..5c392e4e 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -194,7 +194,7 @@ class Verbindlichkeit { $heading = array('Paket-Nr.','Paket-Pos.', 'Bestellung', 'Lieferschein', 'Rechnung', 'Artikel-Nr.','Artikel','Menge','Menge offen','Eingabe','Preis',''); $width = array( '1%', '1%', '5%', '5%', '5%', '5%', '20%', '2%', '1%', '1%', '1%', '1%'); - $findcols = array('id','belegnr'); + $findcols = array('pa','auswahl','belegnr','lsnr','renr','artikelnummer','name_de','menge','offen_menge','offen_menge','preis','pa'); $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); $alignright = array(8,9,11); @@ -288,13 +288,13 @@ class Verbindlichkeit { $sql = " SELECT SQL_CALC_FOUND_ROWS * FROM ( SELECT - pa.id pa, - ".$this->app->erp->ConcatSQL($paketlink).", + pa.id pa_id, + ".$this->app->erp->ConcatSQL($paketlink)." pa, ".$this->app->erp->ConcatSQL($auswahl)." AS auswahl, if(b.belegnr LIKE '%".$bestellnummer."%',CONCAT('',b.belegnr,''),b.belegnr) AS belegnr, pa.lsnr, if(pa.renr LIKE '%".$rechnung."%',CONCAT('',pa.renr,''),pa.renr) AS renr, - ".$this->app->erp->ConcatSQL($artikellink).", + ".$this->app->erp->ConcatSQL($artikellink)." AS artikelnummer, art.name_de, pd.menge, IF( @@ -303,7 +303,7 @@ class Verbindlichkeit { 0 ) offen_menge, ".$this->app->erp->ConcatSQL($werte).", - ".$this->app->erp->ConcatSQL($preise)." + ".$this->app->erp->ConcatSQL($preise)." AS preis FROM paketannahme pa INNER JOIN paketdistribution pd ON @@ -340,13 +340,13 @@ class Verbindlichkeit { $allowed['verbindlichkeit_positionen'] = array('list'); $id = $app->Secure->GetGET('id'); - $freigabe = $app->DB->Select("SELECT freigabe FROM verbindlichkeit WHERE id = ".$id); + $freigabe = $app->DB->Select("SELECT freigabe FROM verbindlichkeit WHERE id = '".$id."'"); // $heading = array('Paket-Nr.','Paket-Pos.', 'Bestellung', 'Artikel-Nr.','Artikel','Menge','Preis','Steuersatz','Sachkonto','Menü',''); $heading = array('', 'Paket-Nr.','Paket-Pos.', 'Bestellung', 'Artikel-Nr.','Artikel','Menge','Preis','Steuersatz abw.','Sachkonto abw.'); $width = array( '1%','1%', '1%' , '2%', '2%', '16%', '1%', '1%', '1%', '3%', '1%', '1%'); - $findcols = array('id','id'); + $findcols = array('vp.id','pd.paketannahme','pd.id','b.belegnr','art.nummer','art.name_de','vp.menge','vp.preis','vp.steuersatz',"CONCAT(skv.sachkonto,' ',skv.beschriftung)",'vp.id','1'); $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); $alignright = array(6,7,8,9); @@ -369,11 +369,19 @@ class Verbindlichkeit { $box = "CONCAT('') AS `auswahl`"; + $paketlink = array ( + '', + ['sql' => 'pd.paketannahme'], + '' + ); + $sql = " SELECT SQL_CALC_FOUND_ROWS vp.id, $box, - pd.paketannahme, + ".$this->app->erp->ConcatSQL($paketlink)." pa, pd.id paket_position, b.belegnr, art.nummer, @@ -800,6 +808,11 @@ class Verbindlichkeit { $this->app->Tpl->Set('POSITIONENMESSAGE', '
    Positionen vollständig
    '); } else { $this->app->Tpl->Set('POSITIONENMESSAGE', '
    Positionen nicht vollständig. Bruttobetrag '.$verbindlichkeit_from_db['betrag'].', Summe Positionen (brutto) '.round($betrag_brutto,2).', Summe Positionen (netto) '.round($betrag_netto,2).'
    '); + + if ($verbindlichkeit_from_db['freigabe']) { + $this->app->DB->Update("UPDATE verbindlichkeit SET freigabe = 0 WHERE id = ".$id); + } + } $this->app->Tpl->Set('BETRAGDISABLED', 'disabled'); @@ -834,10 +847,16 @@ class Verbindlichkeit { $this->app->Tpl->Set('POSITIONHINZUFUEGENHIDDEN','hidden'); } else { $this->app->Tpl->Set('RUECKSETZENEINKAUFHIDDEN','hidden'); + $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); + } + + if (!empty($positionen)) { + $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); } if ($verbindlichkeit_from_db['rechnungsfreigabe']) { $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); + $this->app->Tpl->Set('RUECKSETZENEINKAUFHIDDEN','hidden'); } else { $this->app->Tpl->Set('RUECKSETZENBUCHHALTUNGHIDDEN','hidden'); } @@ -1037,7 +1056,7 @@ class Verbindlichkeit { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } - $sql = "UPDATE verbindlichkeit SET rechnungsfreigabe = 1 WHERE id=".$id; + $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) { From 0cde94e67236ade5406c6504b4e26a48404fac22 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Tue, 2 Jan 2024 16:18:18 +0100 Subject: [PATCH 22/62] ticket added javascript confirm for ticketregel --- www/pages/content/ticket_list.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/pages/content/ticket_list.tpl b/www/pages/content/ticket_list.tpl index f610d33f..fbb57469 100644 --- a/www/pages/content/ticket_list.tpl +++ b/www/pages/content/ticket_list.tpl @@ -60,7 +60,7 @@ - + From 580aef2bf6c1da933b6bcfac0f52864159ac6165 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Tue, 2 Jan 2024 19:18:27 +0100 Subject: [PATCH 23/62] bugfix bestellung ohne preise PDF --- www/lib/dokumente/class.bestellung.php | 806 ++++++++++++------------- 1 file changed, 403 insertions(+), 403 deletions(-) diff --git a/www/lib/dokumente/class.bestellung.php b/www/lib/dokumente/class.bestellung.php index a894b48c..c6fe5baf 100644 --- a/www/lib/dokumente/class.bestellung.php +++ b/www/lib/dokumente/class.bestellung.php @@ -1,406 +1,406 @@ -app=$app; - //parent::Briefpapier(); - $this->doctype="bestellung"; - $this->doctypeOrig="Bestellung"; - $this->bestellungohnepreis=0; - parent::__construct($this->app,$projekt); - } - - - function GetBestellung($id) - { - $this->doctypeid = $id; - $briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden'); - $this->setRecipientLieferadresse($id,"bestellung"); - - $data = $this->app->DB->SelectRow( - "SELECT adresse,projekt, sprache, angebot, ustid, keineartikelnummern, bestellbestaetigung, artikelnummerninfotext, - einkaeufer, belegnr, freitext, bodyzusatz, ohne_briefpapier, abweichendebezeichnung, bestellungohnepreis, - kundennummerlieferant AS kundennummer, DATE_FORMAT(datum,'%d.%m.%Y') AS datum, DATE_FORMAT(datum,'%Y%m%d') as datum2, - lieferantennummer - FROM bestellung - WHERE id='$id' - LIMIT 1" - ); - extract($data,EXTR_OVERWRITE); - $adresse = $data['adresse']; - $sprache = $data['sprache']; - $angebot = $data['angebot']; - $ustid = $data['ustid']; - $projekt = $data['projekt']; - $keineartikelnummern = $data['keineartikelnummern']; - $bestellbestaetigung = $data['bestellbestaetigung']; - $artikelnummerninfotext = $data['artikelnummerninfotext']; - $einkaeufer = $data['einkaeufer']; - $belegnr = $data['belegnr']; - $freitext = $data['freitext']; - $bodyzusatz = $data['bodyzusatz']; - $ohne_briefpapier = $data['ohne_briefpapier']; - $abweichendebezeichnung = $data['abweichendebezeichnung']; - $bestellungohnepreis = $data['bestellungohnepreis']; - $kundennummer = $data['kundennummer']; - $datum = $data['datum']; - $datum2 = $data['datum2']; - $lieferantennummer = $data['lieferantennummer']; - - $this->bestellungohnepreis=$data['bestellungohnepreis']; - - if(empty($kundennummer)) { - $kundennummer = $this->app->DB->Select("SELECT kundennummerlieferant FROM adresse WHERE id='$adresse' LIMIT 1"); - } - if($einkaeufer=='') { - $einkaeufer = $this->app->DB->Select("SELECT bearbeiter FROM bestellung WHERE id='$id' LIMIT 1"); - } - if(empty($sprache)) { - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); - } - - $kundennummer = $this->app->erp->ReadyForPDF($kundennummer); - $einkaeufer = $this->app->erp->ReadyForPDF($einkaeufer); - $angebot = $this->app->erp->ReadyForPDF($angebot); - $this->app->erp->BeschriftungSprache($sprache); - $this->sprache = $sprache; - - $projektabkuerzung = $this->app->DB->Select(sprintf('SELECT abkuerzung FROM projekt WHERE id = %d', $projekt)); - - if($this->bestellungohnepreis) { - $this->nichtsichtbar_summe = 1; - } - - if($ohne_briefpapier=='1') { - $this->logofile = ''; - $this->briefpapier=''; - $this->briefpapier2=''; - } - - if($belegnr=='' || $belegnr=='0') { - $belegnr = '- '.$this->app->erp->Beschriftung('dokument_entwurf'); - } - - $this->doctypeOrig=$this->app->erp->Beschriftung('dokument_bestellung')." $belegnr"; - - if($abweichendebezeichnung) - { - $this->doctypeOrig=($this->app->erp->Beschriftung('bezeichnungbestellungersatz')?$this->app->erp->Beschriftung('bezeichnungbestellungersatz'):$this->app->erp->Beschriftung('dokument_bestellung'))." $belegnr"; - } - else { - $this->doctypeOrig=$this->app->erp->Beschriftung('dokument_bestellung')." $belegnr"; - } - - if($angebot=='') { - $angebot = '-'; - } - if($kundennummer=='') { - $kundennummer= '-'; - } - - if(!$this->app->erp->BestellungMitUmsatzeuer($id)) { - $this->ust_befreit=true; - } - - /** @var \Xentral\Modules\Company\Service\DocumentCustomizationService $service */ - $service = $this->app->Container->get('DocumentCustomizationService'); - if($block = $service->findActiveBlock('corr', 'suppliers_order', $projekt)) { - $sCD = $service->parseBlockAsArray($this->getLanguageCodeFrom($this->sprache),'corr', 'suppliers_order',[ - 'BESTELLNUMMER' => $belegnr, - 'DATUM' => $datum, - 'KUNDENNUMMER' => $kundennummer, - 'EINKAEUFER' => $einkaeufer, - 'LIEFERANTENNUMMER' => $lieferantennummer, - 'PROJEKT' => $projektabkuerzung, - 'EMAIL' => '', - 'TELEFON' => '', - 'BEARBEITER' => '', - 'VERTRIEB' => '', - ], $projekt); - if(!empty($sCD)) { - switch($block['fontstyle']) { - case 'f': - $this->setBoldCorrDetails($sCD); - break; - case 'i': - $this->setItalicCorrDetails($sCD); - break; - case 'fi': - $this->setItalicBoldCorrDetails($sCD); - break; - default: - $this->setCorrDetails($sCD, true); - break; - } - } - } - else{ - if($briefpapier_bearbeiter_ausblenden){ - $this->setCorrDetails(array($this->app->erp->Beschriftung("dokument_bestellung_angebotnummer") => $angebot, - $this->app->erp->Beschriftung("dokument_bestellung_unserekundennummer") => $kundennummer, - $this->app->erp->Beschriftung("dokument_bestelldatum") => $datum)); - }else{ - $this->setCorrDetails(array($this->app->erp->Beschriftung("dokument_bestellung_angebotnummer") => $angebot, - $this->app->erp->Beschriftung("dokument_bestellung_unserekundennummer") => $kundennummer, - $this->app->erp->Beschriftung("dokument_bestelldatum") => $datum, - $this->app->erp->Beschriftung("dokument_bestellung_einkauf") => $einkaeufer)); - } - } - - if(!$this->app->erp->BestellungMitUmsatzeuer($id) && $ustid!='' ) { - //$steuer = "\nSteuerfreie innergemeinschaftliche Lieferung. Ihre USt-IdNr. $ustid Land: $land"; - $this->ust_befreit=true; - if($keinsteuersatz!='1') { - $steuer = $this->app->erp->Beschriftung('eu_lieferung_vermerk'); - } - $steuer = str_replace('{USTID}',$ustid,$steuer); - $steuer = str_replace('{LAND}',$land,$steuer); - } - - $body=$this->app->erp->Beschriftung('bestellung_header'); - if($bodyzusatz!='') { - $body=$body."\r\n".$bodyzusatz; - } - $body = $this->app->erp->ParseUserVars('bestellung',$id,$body); - - if($this->app->erp->Firmendaten('footer_reihenfolge_bestellung_aktivieren')=='1') - { - $footervorlage = $this->app->erp->Firmendaten('footer_reihenfolge_bestellung'); - if($footervorlage==''){ - $footervorlage = "{FOOTERFREITEXT}\r\n{FOOTERTEXTVORLAGEBESTELLUNG}"; - } - $footervorlage = str_replace('{FOOTERFREITEXT}',$freitext,$footervorlage); - $footervorlage = str_replace('{FOOTERTEXTVORLAGEBESTELLUNG}',$this->app->erp->Beschriftung("bestellung_footer"),$footervorlage); - $footervorlage = $this->app->erp->ParseUserVars("bestellung",$id,$footervorlage); - $footer = $footervorlage; - } else { - $footer = $freitext."\r\n".$this->app->erp->ParseUserVars('bestellung',$id,$this->app->erp->Beschriftung("bestellung_footer")); - } - - if($bestellbestaetigung) { - $this->setTextDetails(array( - "body"=>$body, - "footer"=>$footer."\r\n".$this->app->erp->Beschriftung('dokument_bestellung_bestaetigung'))); - } else - { - $this->setTextDetails(array( - "body"=>$body, - "footer"=>$footer)); - } - $artikel = $this->app->DB->SelectArr( - "SELECT bp.*, art.ean AS artean, art.nummer AS artnummer, art.herstellernummer AS artherstellernummer, - art.einheit as arteinheit, art.hersteller AS arthersteller - FROM bestellung_position AS bp - LEFT JOIN artikel AS art ON bp.artikel = art.id - WHERE bp.bestellung='$id' - ORDER By bp.sort" - ); - if(empty($artikel)) { - $artikel = []; - } - $steuersatzV = $this->app->erp->GetSteuersatzNormal(false,$id,'bestellung'); - $steuersatzR = $this->app->erp->GetSteuersatzErmaessigt(false,$id,'bestellung'); - $gesamtsteuern = 0; - $mitumsatzsteuer = $this->app->erp->BestellungMitUmsatzeuer($id); - //$waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position WHERE bestellung='$id' LIMIT 1"); - $summe = 0; - foreach($artikel as $key=>$value) { - $lieferdatum = $this->app->String->Convert($value['lieferdatum'],'%1-%2-%3','%3.%2.%1'); - - if($lieferdatum==='00.00.0000') { - $lieferdatum =''; - }//$this->app->erp->Beschriftung("dokument_lieferdatum_sofort"); - - if($value['umsatzsteuer'] !== 'ermaessigt' && $value['umsatzsteuer'] !== 'befreit') { - $value['umsatzsteuer'] = 'normal'; - } - $tmpsteuersatz = null; - $tmpsteuertext = null; - $this->app->erp->GetSteuerPosition('bestellung', $value['id'],$tmpsteuersatz, $tmpsteuertext); - if($value['steuersatz'] === null || $value['steuersatz'] < 0) { - if($value['umsatzsteuer'] === 'ermaessigt') { - $value['steuersatz'] = $steuersatzR; - } - elseif($value['umsatzsteuer'] === 'befreit') { - $value['steuersatz'] = 0; - }else{ - $value['steuersatz'] = $steuersatzV; - } - if($tmpsteuersatz !== null) { - $value['steuersatz'] = $tmpsteuersatz; - } - } - if($tmpsteuertext && !$value['steuertext']) { - $value['steuertext'] = $tmpsteuertext; - } - if(!$mitumsatzsteuer) { - $value['steuersatz'] = 0; - } - // if(!$this->app->erp->BestellungMitUmsatzeuer($id)) $value[umsatzsteuer] = ""; - - if($keineartikelnummern==1) { - $value['bestellnummer'] = $this->app->erp->Beschriftung('dokument_bestellung_keineartikelnummer'); - } - - $ohne_artikeltext = $this->app->DB->Select("SELECT ohne_artikeltext FROM ".$this->table." WHERE id='".$this->id."' LIMIT 1"); - if($ohne_artikeltext=='1') { - $value['beschreibung']=''; - } - - $value['artikelnummer']= $value['artnummer'];// $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1"); - if($artikelnummerninfotext) { - if($value['bestellnummer']!=''){ - $value['beschreibung'] = $value['beschreibung'] . "\n" . $this->app->erp->Beschriftung('dokument_bestellung_bestellnummer') . ': ' . $value['bestellnummer']; - } - $value['bestellnummer']=$value['artikelnummer']; - } else { - if($value['artikelnummer']!=''){ - $value['beschreibung'] = $value['beschreibung'] . "\n" . $this->app->erp->Beschriftung('dokument_bestellung_unsereartikelnummer') . ': ' . $value['artikelnummer']; - } - } - - if($value['vpe'] > 1 && is_numeric($value['vpe'])) { - $value['beschreibung'] = $value['beschreibung']."\n".$this->app->erp->Beschriftung('dokument_bestellung_mengeinvpe').': '.$value['vpe']; - //umschalbar in der Zukunft - $value['preis'] = $value['preis']*$value['menge']/($value['menge'] / $value['vpe']); - $value['menge'] = round($value['menge'] / $value['vpe'],2); - $value['einheit'] = "VPE"; - } - elseif((String)$value['einheit'] === '') { - $value['einheit'] = $value['arteinheit'];// $this->app->DB->Select("SELECT einheit FROM artikel WHERE id = '".$value['artikel']."' LIMIT 1"); - if((String)$value['einheit'] === '') { - $value['einheit'] = $this->app->erp->Firmendaten('artikeleinheit_standard'); - } - } - - if($value['beschreibung']!='') { - $newline="\n"; - } - - if($this->bestellungohnepreis) { - $value['preis'] = '-'; - } - - if($value['waehrung']!='' && $value['waehrung']!=$this->waehrung){ - $this->waehrung = $value['waehrung']; - } - - $value['menge'] = (float)$value['menge']; - $value['herstellernummer'] = $value['artherstellernummer'];// $this->app->DB->Select("SELECT herstellernummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1"); - $value['hersteller'] = $value['arthersteller'];//$this->app->DB->Select("SELECT hersteller FROM artikel WHERE id='".$value['artikel']."' LIMIT 1"); - - $this->addItem( - array( - 'belegposition'=>$value['id'], - 'artikel'=>$value['artikel'], - 'currency'=>$value['waehrung'], - 'amount'=>$value['menge'], - 'price'=>$value['preis'], - 'tax'=>$value['umsatzsteuer'],'steuersatz'=>$value['steuersatz'], - 'steuertext'=>$value['steuertext'], - 'vpe'=>$value['vpe'], - 'unit'=>$value['einheit'], - 'itemno'=>$value['bestellnummer'], - 'desc'=>$value['beschreibung'].($lieferdatum!=''?$newline.$this->app->erp->Beschriftung('dokument_lieferdatum').': '.$lieferdatum:''), - 'hersteller'=>$value['hersteller'], - 'herstellernummer'=>$value['herstellernummer'], - 'freifeld1'=>$value['freifeld1'], - 'freifeld2'=>$value['freifeld2'], - 'freifeld3'=>$value['freifeld3'], - 'freifeld4'=>$value['freifeld4'], - 'freifeld5'=>$value['freifeld5'], - 'freifeld6'=>$value['freifeld6'], - 'freifeld7'=>$value['freifeld7'], - 'freifeld8'=>$value['freifeld8'], - 'freifeld9'=>$value['freifeld9'], - 'freifeld10'=>$value['freifeld10'], - 'freifeld11'=>$value['freifeld11'], - 'freifeld12'=>$value['freifeld12'], - 'freifeld13'=>$value['freifeld13'], - 'freifeld14'=>$value['freifeld14'], - 'freifeld15'=>$value['freifeld15'], - 'freifeld16'=>$value['freifeld16'], - 'freifeld17'=>$value['freifeld17'], - 'freifeld18'=>$value['freifeld18'], - 'freifeld19'=>$value['freifeld19'], - 'freifeld20'=>$value['freifeld20'], - 'freifeld21'=>$value['freifeld21'], - 'freifeld22'=>$value['freifeld22'], - 'freifeld23'=>$value['freifeld23'], - 'freifeld24'=>$value['freifeld24'], - 'freifeld25'=>$value['freifeld25'], - 'freifeld26'=>$value['freifeld26'], - 'freifeld27'=>$value['freifeld27'], - 'freifeld28'=>$value['freifeld28'], - 'freifeld29'=>$value['freifeld29'], - 'freifeld30'=>$value['freifeld30'], - 'freifeld31'=>$value['freifeld31'], - 'freifeld32'=>$value['freifeld32'], - 'freifeld33'=>$value['freifeld33'], - 'freifeld34'=>$value['freifeld34'], - 'freifeld35'=>$value['freifeld35'], - 'freifeld36'=>$value['freifeld36'], - 'freifeld37'=>$value['freifeld37'], - 'freifeld38'=>$value['freifeld38'], - 'freifeld39'=>$value['freifeld39'], - 'freifeld40'=>$value['freifeld40'], - "name"=>$value['bezeichnunglieferant'] - ) - ); - - $netto_gesamt = $value['menge']*$value['preis']; - $summe += $netto_gesamt; - if(!isset($summen[$value['steuersatz']])) { - $summen[$value['steuersatz']] = 0; - } - $summen[$value['steuersatz']] += ($netto_gesamt/100)*$value['steuersatz']; - $gesamtsteuern +=($netto_gesamt/100)*$value['steuersatz']; - } -/* - $summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id'"); - $summeV = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id' AND (umsatzsteuer='normal' || umsatzsteuer='') ")/100 * $this->app->erp->GetSteuersatzNormal(false,$id,"bestellung"); - $summeR = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id' AND umsatzsteuer='ermaessigt'")/100 * $this->app->erp->GetSteuersatzErmaessigt(false,$id,"bestellung"); -*/ - if($this->bestellungohnepreis!=1) - { - if($this->app->erp->BestellungMitUmsatzeuer($id)) - { - $this->setTotals( - array('totalArticles'=>$summe,'total'=>$summe + $gesamtsteuern,'summen'=>$summen,'totalTaxV'=>0,'totalTaxR'=>0) - ); - //$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe + $summeV + $summeR,"totalTaxV"=>$summeV,"totalTaxR"=>$summeR)); - } else{ - $this->setTotals(array('totalArticles' => $summe, 'total' => $summe)); - } - } - - /* Dateiname */ - //$tmp_name = str_replace([' ','.'],'', trim($this->recipient['enterprise'])); - $this->filename = $datum2.'_BE'.$belegnr.'.pdf'; - $this->setBarcode($belegnr); - } -} +app=$app; + //parent::Briefpapier(); + $this->doctype="bestellung"; + $this->doctypeOrig="Bestellung"; + $this->bestellungohnepreis=0; + parent::__construct($this->app,$projekt); + } + + + function GetBestellung($id) + { + $this->doctypeid = $id; + $briefpapier_bearbeiter_ausblenden = $this->app->erp->Firmendaten('briefpapier_bearbeiter_ausblenden'); + $this->setRecipientLieferadresse($id,"bestellung"); + + $data = $this->app->DB->SelectRow( + "SELECT adresse,projekt, sprache, angebot, ustid, keineartikelnummern, bestellbestaetigung, artikelnummerninfotext, + einkaeufer, belegnr, freitext, bodyzusatz, ohne_briefpapier, abweichendebezeichnung, bestellungohnepreis, + kundennummerlieferant AS kundennummer, DATE_FORMAT(datum,'%d.%m.%Y') AS datum, DATE_FORMAT(datum,'%Y%m%d') as datum2, + lieferantennummer + FROM bestellung + WHERE id='$id' + LIMIT 1" + ); + extract($data,EXTR_OVERWRITE); + $adresse = $data['adresse']; + $sprache = $data['sprache']; + $angebot = $data['angebot']; + $ustid = $data['ustid']; + $projekt = $data['projekt']; + $keineartikelnummern = $data['keineartikelnummern']; + $bestellbestaetigung = $data['bestellbestaetigung']; + $artikelnummerninfotext = $data['artikelnummerninfotext']; + $einkaeufer = $data['einkaeufer']; + $belegnr = $data['belegnr']; + $freitext = $data['freitext']; + $bodyzusatz = $data['bodyzusatz']; + $ohne_briefpapier = $data['ohne_briefpapier']; + $abweichendebezeichnung = $data['abweichendebezeichnung']; + $bestellungohnepreis = $data['bestellungohnepreis']; + $kundennummer = $data['kundennummer']; + $datum = $data['datum']; + $datum2 = $data['datum2']; + $lieferantennummer = $data['lieferantennummer']; + + $this->bestellungohnepreis=$data['bestellungohnepreis']; + + if(empty($kundennummer)) { + $kundennummer = $this->app->DB->Select("SELECT kundennummerlieferant FROM adresse WHERE id='$adresse' LIMIT 1"); + } + if($einkaeufer=='') { + $einkaeufer = $this->app->DB->Select("SELECT bearbeiter FROM bestellung WHERE id='$id' LIMIT 1"); + } + if(empty($sprache)) { + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); + } + + $kundennummer = $this->app->erp->ReadyForPDF($kundennummer); + $einkaeufer = $this->app->erp->ReadyForPDF($einkaeufer); + $angebot = $this->app->erp->ReadyForPDF($angebot); + $this->app->erp->BeschriftungSprache($sprache); + $this->sprache = $sprache; + + $projektabkuerzung = $this->app->DB->Select(sprintf('SELECT abkuerzung FROM projekt WHERE id = %d', $projekt)); + + if($this->bestellungohnepreis) { + $this->nichtsichtbar_summe = 1; + } + + if($ohne_briefpapier=='1') { + $this->logofile = ''; + $this->briefpapier=''; + $this->briefpapier2=''; + } + + if($belegnr=='' || $belegnr=='0') { + $belegnr = '- '.$this->app->erp->Beschriftung('dokument_entwurf'); + } + + $this->doctypeOrig=$this->app->erp->Beschriftung('dokument_bestellung')." $belegnr"; + + if($abweichendebezeichnung) + { + $this->doctypeOrig=($this->app->erp->Beschriftung('bezeichnungbestellungersatz')?$this->app->erp->Beschriftung('bezeichnungbestellungersatz'):$this->app->erp->Beschriftung('dokument_bestellung'))." $belegnr"; + } + else { + $this->doctypeOrig=$this->app->erp->Beschriftung('dokument_bestellung')." $belegnr"; + } + + if($angebot=='') { + $angebot = '-'; + } + if($kundennummer=='') { + $kundennummer= '-'; + } + + if(!$this->app->erp->BestellungMitUmsatzeuer($id)) { + $this->ust_befreit=true; + } + + /** @var \Xentral\Modules\Company\Service\DocumentCustomizationService $service */ + $service = $this->app->Container->get('DocumentCustomizationService'); + if($block = $service->findActiveBlock('corr', 'suppliers_order', $projekt)) { + $sCD = $service->parseBlockAsArray($this->getLanguageCodeFrom($this->sprache),'corr', 'suppliers_order',[ + 'BESTELLNUMMER' => $belegnr, + 'DATUM' => $datum, + 'KUNDENNUMMER' => $kundennummer, + 'EINKAEUFER' => $einkaeufer, + 'LIEFERANTENNUMMER' => $lieferantennummer, + 'PROJEKT' => $projektabkuerzung, + 'EMAIL' => '', + 'TELEFON' => '', + 'BEARBEITER' => '', + 'VERTRIEB' => '', + ], $projekt); + if(!empty($sCD)) { + switch($block['fontstyle']) { + case 'f': + $this->setBoldCorrDetails($sCD); + break; + case 'i': + $this->setItalicCorrDetails($sCD); + break; + case 'fi': + $this->setItalicBoldCorrDetails($sCD); + break; + default: + $this->setCorrDetails($sCD, true); + break; + } + } + } + else{ + if($briefpapier_bearbeiter_ausblenden){ + $this->setCorrDetails(array($this->app->erp->Beschriftung("dokument_bestellung_angebotnummer") => $angebot, + $this->app->erp->Beschriftung("dokument_bestellung_unserekundennummer") => $kundennummer, + $this->app->erp->Beschriftung("dokument_bestelldatum") => $datum)); + }else{ + $this->setCorrDetails(array($this->app->erp->Beschriftung("dokument_bestellung_angebotnummer") => $angebot, + $this->app->erp->Beschriftung("dokument_bestellung_unserekundennummer") => $kundennummer, + $this->app->erp->Beschriftung("dokument_bestelldatum") => $datum, + $this->app->erp->Beschriftung("dokument_bestellung_einkauf") => $einkaeufer)); + } + } + + if(!$this->app->erp->BestellungMitUmsatzeuer($id) && $ustid!='' ) { + //$steuer = "\nSteuerfreie innergemeinschaftliche Lieferung. Ihre USt-IdNr. $ustid Land: $land"; + $this->ust_befreit=true; + if($keinsteuersatz!='1') { + $steuer = $this->app->erp->Beschriftung('eu_lieferung_vermerk'); + } + $steuer = str_replace('{USTID}',$ustid,$steuer); + $steuer = str_replace('{LAND}',$land,$steuer); + } + + $body=$this->app->erp->Beschriftung('bestellung_header'); + if($bodyzusatz!='') { + $body=$body."\r\n".$bodyzusatz; + } + $body = $this->app->erp->ParseUserVars('bestellung',$id,$body); + + if($this->app->erp->Firmendaten('footer_reihenfolge_bestellung_aktivieren')=='1') + { + $footervorlage = $this->app->erp->Firmendaten('footer_reihenfolge_bestellung'); + if($footervorlage==''){ + $footervorlage = "{FOOTERFREITEXT}\r\n{FOOTERTEXTVORLAGEBESTELLUNG}"; + } + $footervorlage = str_replace('{FOOTERFREITEXT}',$freitext,$footervorlage); + $footervorlage = str_replace('{FOOTERTEXTVORLAGEBESTELLUNG}',$this->app->erp->Beschriftung("bestellung_footer"),$footervorlage); + $footervorlage = $this->app->erp->ParseUserVars("bestellung",$id,$footervorlage); + $footer = $footervorlage; + } else { + $footer = $freitext."\r\n".$this->app->erp->ParseUserVars('bestellung',$id,$this->app->erp->Beschriftung("bestellung_footer")); + } + + if($bestellbestaetigung) { + $this->setTextDetails(array( + "body"=>$body, + "footer"=>$footer."\r\n".$this->app->erp->Beschriftung('dokument_bestellung_bestaetigung'))); + } else + { + $this->setTextDetails(array( + "body"=>$body, + "footer"=>$footer)); + } + $artikel = $this->app->DB->SelectArr( + "SELECT bp.*, art.ean AS artean, art.nummer AS artnummer, art.herstellernummer AS artherstellernummer, + art.einheit as arteinheit, art.hersteller AS arthersteller + FROM bestellung_position AS bp + LEFT JOIN artikel AS art ON bp.artikel = art.id + WHERE bp.bestellung='$id' + ORDER By bp.sort" + ); + if(empty($artikel)) { + $artikel = []; + } + $steuersatzV = $this->app->erp->GetSteuersatzNormal(false,$id,'bestellung'); + $steuersatzR = $this->app->erp->GetSteuersatzErmaessigt(false,$id,'bestellung'); + $gesamtsteuern = 0; + $mitumsatzsteuer = $this->app->erp->BestellungMitUmsatzeuer($id); + //$waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position WHERE bestellung='$id' LIMIT 1"); + $summe = 0; + foreach($artikel as $key=>$value) { + $lieferdatum = $this->app->String->Convert($value['lieferdatum'],'%1-%2-%3','%3.%2.%1'); + + if($lieferdatum==='00.00.0000') { + $lieferdatum =''; + }//$this->app->erp->Beschriftung("dokument_lieferdatum_sofort"); + + if($value['umsatzsteuer'] !== 'ermaessigt' && $value['umsatzsteuer'] !== 'befreit') { + $value['umsatzsteuer'] = 'normal'; + } + $tmpsteuersatz = null; + $tmpsteuertext = null; + $this->app->erp->GetSteuerPosition('bestellung', $value['id'],$tmpsteuersatz, $tmpsteuertext); + if($value['steuersatz'] === null || $value['steuersatz'] < 0) { + if($value['umsatzsteuer'] === 'ermaessigt') { + $value['steuersatz'] = $steuersatzR; + } + elseif($value['umsatzsteuer'] === 'befreit') { + $value['steuersatz'] = 0; + }else{ + $value['steuersatz'] = $steuersatzV; + } + if($tmpsteuersatz !== null) { + $value['steuersatz'] = $tmpsteuersatz; + } + } + if($tmpsteuertext && !$value['steuertext']) { + $value['steuertext'] = $tmpsteuertext; + } + if(!$mitumsatzsteuer) { + $value['steuersatz'] = 0; + } + // if(!$this->app->erp->BestellungMitUmsatzeuer($id)) $value[umsatzsteuer] = ""; + + if($keineartikelnummern==1) { + $value['bestellnummer'] = $this->app->erp->Beschriftung('dokument_bestellung_keineartikelnummer'); + } + + $ohne_artikeltext = $this->app->DB->Select("SELECT ohne_artikeltext FROM ".$this->table." WHERE id='".$this->id."' LIMIT 1"); + if($ohne_artikeltext=='1') { + $value['beschreibung']=''; + } + + $value['artikelnummer']= $value['artnummer'];// $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1"); + if($artikelnummerninfotext) { + if($value['bestellnummer']!=''){ + $value['beschreibung'] = $value['beschreibung'] . "\n" . $this->app->erp->Beschriftung('dokument_bestellung_bestellnummer') . ': ' . $value['bestellnummer']; + } + $value['bestellnummer']=$value['artikelnummer']; + } else { + if($value['artikelnummer']!=''){ + $value['beschreibung'] = $value['beschreibung'] . "\n" . $this->app->erp->Beschriftung('dokument_bestellung_unsereartikelnummer') . ': ' . $value['artikelnummer']; + } + } + + if($value['vpe'] > 1 && is_numeric($value['vpe'])) { + $value['beschreibung'] = $value['beschreibung']."\n".$this->app->erp->Beschriftung('dokument_bestellung_mengeinvpe').': '.$value['vpe']; + //umschalbar in der Zukunft + $value['preis'] = $value['preis']*$value['menge']/($value['menge'] / $value['vpe']); + $value['menge'] = round($value['menge'] / $value['vpe'],2); + $value['einheit'] = "VPE"; + } + elseif((String)$value['einheit'] === '') { + $value['einheit'] = $value['arteinheit'];// $this->app->DB->Select("SELECT einheit FROM artikel WHERE id = '".$value['artikel']."' LIMIT 1"); + if((String)$value['einheit'] === '') { + $value['einheit'] = $this->app->erp->Firmendaten('artikeleinheit_standard'); + } + } + + if($value['beschreibung']!='') { + $newline="\n"; + } + + if($this->bestellungohnepreis) { + $value['preis'] = null; + } + + if($value['waehrung']!='' && $value['waehrung']!=$this->waehrung){ + $this->waehrung = $value['waehrung']; + } + + $value['menge'] = (float)$value['menge']; + $value['herstellernummer'] = $value['artherstellernummer'];// $this->app->DB->Select("SELECT herstellernummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1"); + $value['hersteller'] = $value['arthersteller'];//$this->app->DB->Select("SELECT hersteller FROM artikel WHERE id='".$value['artikel']."' LIMIT 1"); + + $this->addItem( + array( + 'belegposition'=>$value['id'], + 'artikel'=>$value['artikel'], + 'currency'=>$value['waehrung'], + 'amount'=>$value['menge'], + 'price'=>$value['preis'], + 'tax'=>$value['umsatzsteuer'],'steuersatz'=>$value['steuersatz'], + 'steuertext'=>$value['steuertext'], + 'vpe'=>$value['vpe'], + 'unit'=>$value['einheit'], + 'itemno'=>$value['bestellnummer'], + 'desc'=>$value['beschreibung'].($lieferdatum!=''?$newline.$this->app->erp->Beschriftung('dokument_lieferdatum').': '.$lieferdatum:''), + 'hersteller'=>$value['hersteller'], + 'herstellernummer'=>$value['herstellernummer'], + 'freifeld1'=>$value['freifeld1'], + 'freifeld2'=>$value['freifeld2'], + 'freifeld3'=>$value['freifeld3'], + 'freifeld4'=>$value['freifeld4'], + 'freifeld5'=>$value['freifeld5'], + 'freifeld6'=>$value['freifeld6'], + 'freifeld7'=>$value['freifeld7'], + 'freifeld8'=>$value['freifeld8'], + 'freifeld9'=>$value['freifeld9'], + 'freifeld10'=>$value['freifeld10'], + 'freifeld11'=>$value['freifeld11'], + 'freifeld12'=>$value['freifeld12'], + 'freifeld13'=>$value['freifeld13'], + 'freifeld14'=>$value['freifeld14'], + 'freifeld15'=>$value['freifeld15'], + 'freifeld16'=>$value['freifeld16'], + 'freifeld17'=>$value['freifeld17'], + 'freifeld18'=>$value['freifeld18'], + 'freifeld19'=>$value['freifeld19'], + 'freifeld20'=>$value['freifeld20'], + 'freifeld21'=>$value['freifeld21'], + 'freifeld22'=>$value['freifeld22'], + 'freifeld23'=>$value['freifeld23'], + 'freifeld24'=>$value['freifeld24'], + 'freifeld25'=>$value['freifeld25'], + 'freifeld26'=>$value['freifeld26'], + 'freifeld27'=>$value['freifeld27'], + 'freifeld28'=>$value['freifeld28'], + 'freifeld29'=>$value['freifeld29'], + 'freifeld30'=>$value['freifeld30'], + 'freifeld31'=>$value['freifeld31'], + 'freifeld32'=>$value['freifeld32'], + 'freifeld33'=>$value['freifeld33'], + 'freifeld34'=>$value['freifeld34'], + 'freifeld35'=>$value['freifeld35'], + 'freifeld36'=>$value['freifeld36'], + 'freifeld37'=>$value['freifeld37'], + 'freifeld38'=>$value['freifeld38'], + 'freifeld39'=>$value['freifeld39'], + 'freifeld40'=>$value['freifeld40'], + "name"=>$value['bezeichnunglieferant'] + ) + ); + + $netto_gesamt = $value['menge']*$value['preis']; + $summe += $netto_gesamt; + if(!isset($summen[$value['steuersatz']])) { + $summen[$value['steuersatz']] = 0; + } + $summen[$value['steuersatz']] += ($netto_gesamt/100)*$value['steuersatz']; + $gesamtsteuern +=($netto_gesamt/100)*$value['steuersatz']; + } +/* + $summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id'"); + $summeV = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id' AND (umsatzsteuer='normal' || umsatzsteuer='') ")/100 * $this->app->erp->GetSteuersatzNormal(false,$id,"bestellung"); + $summeR = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position WHERE bestellung='$id' AND umsatzsteuer='ermaessigt'")/100 * $this->app->erp->GetSteuersatzErmaessigt(false,$id,"bestellung"); +*/ + if($this->bestellungohnepreis!=1) + { + if($this->app->erp->BestellungMitUmsatzeuer($id)) + { + $this->setTotals( + array('totalArticles'=>$summe,'total'=>$summe + $gesamtsteuern,'summen'=>$summen,'totalTaxV'=>0,'totalTaxR'=>0) + ); + //$this->setTotals(array("totalArticles"=>$summe,"total"=>$summe + $summeV + $summeR,"totalTaxV"=>$summeV,"totalTaxR"=>$summeR)); + } else{ + $this->setTotals(array('totalArticles' => $summe, 'total' => $summe)); + } + } + + /* Dateiname */ + //$tmp_name = str_replace([' ','.'],'', trim($this->recipient['enterprise'])); + $this->filename = $datum2.'_BE'.$belegnr.'.pdf'; + $this->setBarcode($belegnr); + } +} From c582cc14238c790682abb124275641e399e1bad2 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Tue, 2 Jan 2024 21:21:00 +0100 Subject: [PATCH 24/62] verbindlichkeit rundungsdifferenz --- www/pages/content/verbindlichkeit_edit.tpl | 2 +- www/pages/verbindlichkeit.php | 32 ++++++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl index 8b8de80f..2fa56044 100644 --- a/www/pages/content/verbindlichkeit_edit.tpl +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -87,7 +87,7 @@ {|Betrag Positionen brutto|}: - + diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index 5c392e4e..afeda383 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -594,7 +594,7 @@ class Verbindlichkeit { $sql = "INSERT INTO verbindlichkeit (".$columns.") VALUES (".$values.") ON DUPLICATE KEY UPDATE ".$update; - // echo($sql); +// echo($sql); $this->app->DB->Update($sql); @@ -766,6 +766,7 @@ class Verbindlichkeit { if (!empty($positionen)) { $betrag_netto = 0; $betrag_brutto = 0; + $betrag_brutto_pos_summe = 0; $steuer_normal = 0; $steuer_ermaessigt = 0; @@ -792,13 +793,30 @@ class Verbindlichkeit { $betrag_netto += ($position['menge']*$position['preis']); $betrag_brutto += ($position['menge']*$position['preis'])*(1+($tmpsteuersatz/100)); + $betrag_brutto_pos_summe += round(($position['menge']*$position['preis'])*(1+($tmpsteuersatz/100)),2); } $this->app->Tpl->Set('BETRAGNETTO', $betrag_netto); $this->app->Tpl->Set('BETRAGBRUTTOPOS', round($betrag_brutto,2)); - if ($verbindlichkeit_from_db['betrag'] == round($betrag_brutto,2)) { + if ($verbindlichkeit_from_db['betrag'] == round($betrag_brutto,2)) { + $pos_ok = true; + } + else if (round($verbindlichkeit_from_db['betrag'],2) == round($betrag_brutto_pos_summe,2)) { + $pos_ok = true; + if (round($betrag_brutto,2) != round($betrag_brutto_pos_summe,2)) { + $rundungsdifferenz = round(round($betrag_brutto,2) - $betrag_brutto_pos_summe,2); + } + } + + if (empty($rundungsdifferenz)) { + $this->app->Tpl->Set('RUNDUNGSDIFFERENZICONHIDDEN', 'hidden'); + } else { + $this->app->Tpl->Set('RUNDUNGSDIFFERENZ', $rundungsdifferenz); + } + + if ($pos_ok) { if (!$verbindlichkeit_from_db['freigabe'] && !$einkauf_automatik_aus) { $this->app->DB->Update("UPDATE verbindlichkeit SET freigabe = 1 WHERE id = ".$id); $verbindlichkeit_from_db['freigabe'] = 1; @@ -808,17 +826,15 @@ class Verbindlichkeit { $this->app->Tpl->Set('POSITIONENMESSAGE', '
    Positionen vollständig
    '); } else { $this->app->Tpl->Set('POSITIONENMESSAGE', '
    Positionen nicht vollständig. Bruttobetrag '.$verbindlichkeit_from_db['betrag'].', Summe Positionen (brutto) '.round($betrag_brutto,2).', Summe Positionen (netto) '.round($betrag_netto,2).'
    '); - if ($verbindlichkeit_from_db['freigabe']) { $this->app->DB->Update("UPDATE verbindlichkeit SET freigabe = 0 WHERE id = ".$id); + $verbindlichkeit_from_db['freigabe'] = 0; + $this->app->YUI->Message('warning',"Verbindlichkeit rückgesetzt (Einkauf)"); } - } - $this->app->Tpl->Set('BETRAGDISABLED', 'disabled'); - } - + /* * Add displayed items later * @@ -943,8 +959,6 @@ class Verbindlichkeit { $input['eingangsdatum'] = $this->app->Secure->GetPOST('eingangsdatum'); $input['rechnungsdatum'] = $this->app->Secure->GetPOST('rechnungsdatum'); $input['bestellung'] = $this->app->Secure->GetPOST('bestellung'); - $input['freigabe'] = $this->app->Secure->GetPOST('freigabe')?'1':'0'; - $input['rechnungsfreigabe'] = $this->app->Secure->GetPOST('rechnungsfreigabe')?'1':'0'; $input['kostenstelle'] = $this->app->Secure->GetPOST('kostenstelle'); $input['internebemerkung'] = $this->app->Secure->GetPOST('internebemerkung'); return $input; From 2e3a7e7b73575405bd26b1cd162f45fc2716e05b Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 3 Jan 2024 11:23:14 +0100 Subject: [PATCH 25/62] verbindlichkeit steuersatz locked after freigabe --- www/pages/content/verbindlichkeit_positionen.tpl | 4 ++-- www/pages/verbindlichkeit.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/www/pages/content/verbindlichkeit_positionen.tpl b/www/pages/content/verbindlichkeit_positionen.tpl index 2bf5580e..9c2d0728 100644 --- a/www/pages/content/verbindlichkeit_positionen.tpl +++ b/www/pages/content/verbindlichkeit_positionen.tpl @@ -61,10 +61,10 @@ - + Steuersatz:  - + diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index afeda383..13c8e0d0 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -655,8 +655,8 @@ class Verbindlichkeit { break; case 'positionen_steuersatz_speichern': - $rechnungsfreigabe = $this->app->DB->Select("SELECT rechnungsfreigabe FROM verbindlichkeit WHERE id =".$id); - if ($rechnungsfreigabe) { + $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM verbindlichkeit WHERE id =".$id)[0]; + if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) { break; } // Process multi action From 153c9652ee7e089a281c70196e89ba9e747323b1 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 3 Jan 2024 15:26:28 +0100 Subject: [PATCH 26/62] verbindlichkeit lookup bestellung status versendet added --- www/pages/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/pages/ajax.php b/www/pages/ajax.php index 4bf54912..ada4211a 100644 --- a/www/pages/ajax.php +++ b/www/pages/ajax.php @@ -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"); } $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 = 'angelegt' OR status = 'freigegeben') + $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') ".($adresse?" AND adresse = '$adresse' ":'')." ".$this->app->erp->ProjektRechte('projekt')." ORDER by belegnr LIMIT 20" ); $carr = !empty($arr)?count($arr):0; From e5393bb7de09f6899dd2663ae6a8e66562bdfad0 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 3 Jan 2024 15:45:43 +0100 Subject: [PATCH 27/62] verbindlichkeit lock control --- .../mysql/_gen/object.gen.adresse.php | 6 +- www/pages/ajax.php | 2 +- www/pages/content/verbindlichkeit_edit.tpl | 2 +- .../content/verbindlichkeit_minidetail.tpl | 4 +- .../content/verbindlichkeit_positionen.tpl | 10 +- www/pages/verbindlichkeit.php | 145 ++++++++++++++---- 6 files changed, 125 insertions(+), 44 deletions(-) diff --git a/www/objectapi/mysql/_gen/object.gen.adresse.php b/www/objectapi/mysql/_gen/object.gen.adresse.php index 128804f5..086afcd3 100644 --- a/www/objectapi/mysql/_gen/object.gen.adresse.php +++ b/www/objectapi/mysql/_gen/object.gen.adresse.php @@ -327,7 +327,7 @@ $result = $result[0]; $this->webid=$result['webid']; $this->vorname=$result['vorname']; $this->kennung=$result['kennung']; - $this->sachkonto=$result['sachkonto']; + $this->sachkonto=$result['kontorahmen']; $this->freifeld1=$result['freifeld1']; $this->freifeld2=$result['freifeld2']; $this->freifeld3=$result['freifeld3']; @@ -510,7 +510,7 @@ $result = $result[0]; public function Create() { - $sql = "INSERT INTO `adresse` (`id`,`typ`,`marketingsperre`,`trackingsperre`,`rechnungsadresse`,`sprache`,`name`,`abteilung`,`unterabteilung`,`ansprechpartner`,`land`,`strasse`,`ort`,`plz`,`telefon`,`telefax`,`mobil`,`email`,`ustid`,`ust_befreit`,`passwort_gesendet`,`sonstiges`,`adresszusatz`,`kundenfreigabe`,`steuer`,`logdatei`,`kundennummer`,`lieferantennummer`,`mitarbeiternummer`,`konto`,`blz`,`bank`,`inhaber`,`swift`,`iban`,`waehrung`,`paypal`,`paypalinhaber`,`paypalwaehrung`,`projekt`,`partner`,`zahlungsweise`,`zahlungszieltage`,`zahlungszieltageskonto`,`zahlungszielskonto`,`versandart`,`kundennummerlieferant`,`zahlungsweiselieferant`,`zahlungszieltagelieferant`,`zahlungszieltageskontolieferant`,`zahlungszielskontolieferant`,`versandartlieferant`,`geloescht`,`firma`,`webid`,`vorname`,`kennung`,`sachkonto`,`freifeld1`,`freifeld2`,`freifeld3`,`filiale`,`vertrieb`,`innendienst`,`verbandsnummer`,`abweichendeemailab`,`portofrei_aktiv`,`portofreiab`,`infoauftragserfassung`,`mandatsreferenz`,`mandatsreferenzdatum`,`mandatsreferenzaenderung`,`glaeubigeridentnr`,`kreditlimit`,`tour`,`zahlungskonditionen_festschreiben`,`rabatte_festschreiben`,`mlmaktiv`,`mlmvertragsbeginn`,`mlmlizenzgebuehrbis`,`mlmfestsetzenbis`,`mlmfestsetzen`,`mlmmindestpunkte`,`mlmwartekonto`,`abweichende_rechnungsadresse`,`rechnung_vorname`,`rechnung_name`,`rechnung_titel`,`rechnung_typ`,`rechnung_strasse`,`rechnung_ort`,`rechnung_plz`,`rechnung_ansprechpartner`,`rechnung_land`,`rechnung_abteilung`,`rechnung_unterabteilung`,`rechnung_adresszusatz`,`rechnung_telefon`,`rechnung_telefax`,`rechnung_anschreiben`,`rechnung_email`,`geburtstag`,`rolledatum`,`liefersperre`,`liefersperregrund`,`mlmpositionierung`,`steuernummer`,`steuerbefreit`,`mlmmitmwst`,`mlmabrechnung`,`mlmwaehrungauszahlung`,`mlmauszahlungprojekt`,`sponsor`,`geworbenvon`,`logfile`,`kalender_aufgaben`,`verrechnungskontoreisekosten`,`usereditid`,`useredittimestamp`,`rabatt`,`provision`,`rabattinformation`,`rabatt1`,`rabatt2`,`rabatt3`,`rabatt4`,`rabatt5`,`internetseite`,`bonus1`,`bonus1_ab`,`bonus2`,`bonus2_ab`,`bonus3`,`bonus3_ab`,`bonus4`,`bonus4_ab`,`bonus5`,`bonus5_ab`,`bonus6`,`bonus6_ab`,`bonus7`,`bonus7_ab`,`bonus8`,`bonus8_ab`,`bonus9`,`bonus9_ab`,`bonus10`,`bonus10_ab`,`rechnung_periode`,`rechnung_anzahlpapier`,`rechnung_anzahlpapier_abweichend`,`rechnung_permail`,`titel`,`anschreiben`,`nachname`,`arbeitszeitprowoche`,`folgebestaetigungsperre`,`lieferantennummerbeikunde`,`verein_mitglied_seit`,`verein_mitglied_bis`,`verein_mitglied_aktiv`,`verein_spendenbescheinigung`,`freifeld4`,`freifeld5`,`freifeld6`,`freifeld7`,`freifeld8`,`freifeld9`,`freifeld10`,`rechnung_papier`,`angebot_cc`,`auftrag_cc`,`rechnung_cc`,`gutschrift_cc`,`lieferschein_cc`,`bestellung_cc`,`angebot_fax_cc`,`auftrag_fax_cc`,`rechnung_fax_cc`,`gutschrift_fax_cc`,`lieferschein_fax_cc`,`bestellung_fax_cc`,`abperfax`,`abpermail`,`kassiereraktiv`,`kassierernummer`,`kassiererprojekt`,`portofreilieferant_aktiv`,`portofreiablieferant`,`mandatsreferenzart`,`mandatsreferenzwdhart`,`serienbrief`,`kundennummer_buchhaltung`,`lieferantennummer_buchhaltung`,`lead`,`zahlungsweiseabo`,`bundesland`,`mandatsreferenzhinweis`,`geburtstagkalender`,`geburtstagskarte`,`liefersperredatum`,`umsatzsteuer_lieferant`,`lat`,`lng`,`art`,`fromshop`,`freifeld11`,`freifeld12`,`freifeld13`,`freifeld14`,`freifeld15`,`freifeld16`,`freifeld17`,`freifeld18`,`freifeld19`,`freifeld20`,`angebot_email`,`auftrag_email`,`rechnungs_email`,`gutschrift_email`,`lieferschein_email`,`bestellung_email`,`lieferschwellenichtanwenden`,`hinweistextlieferant`,`firmensepa`,`hinweis_einfuegen`,`anzeigesteuerbelege`,`gln`,`rechnung_gln`,`keinealtersabfrage`,`lieferbedingung`,`mlmintranetgesamtestruktur`,`kommissionskonsignationslager`,`zollinformationen`,`bundesstaat`,`rechnung_bundesstaat`) + $sql = "INSERT INTO `adresse` (`id`,`typ`,`marketingsperre`,`trackingsperre`,`rechnungsadresse`,`sprache`,`name`,`abteilung`,`unterabteilung`,`ansprechpartner`,`land`,`strasse`,`ort`,`plz`,`telefon`,`telefax`,`mobil`,`email`,`ustid`,`ust_befreit`,`passwort_gesendet`,`sonstiges`,`adresszusatz`,`kundenfreigabe`,`steuer`,`logdatei`,`kundennummer`,`lieferantennummer`,`mitarbeiternummer`,`konto`,`blz`,`bank`,`inhaber`,`swift`,`iban`,`waehrung`,`paypal`,`paypalinhaber`,`paypalwaehrung`,`projekt`,`partner`,`zahlungsweise`,`zahlungszieltage`,`zahlungszieltageskonto`,`zahlungszielskonto`,`versandart`,`kundennummerlieferant`,`zahlungsweiselieferant`,`zahlungszieltagelieferant`,`zahlungszieltageskontolieferant`,`zahlungszielskontolieferant`,`versandartlieferant`,`geloescht`,`firma`,`webid`,`vorname`,`kennung`,`kontorahmen`,`freifeld1`,`freifeld2`,`freifeld3`,`filiale`,`vertrieb`,`innendienst`,`verbandsnummer`,`abweichendeemailab`,`portofrei_aktiv`,`portofreiab`,`infoauftragserfassung`,`mandatsreferenz`,`mandatsreferenzdatum`,`mandatsreferenzaenderung`,`glaeubigeridentnr`,`kreditlimit`,`tour`,`zahlungskonditionen_festschreiben`,`rabatte_festschreiben`,`mlmaktiv`,`mlmvertragsbeginn`,`mlmlizenzgebuehrbis`,`mlmfestsetzenbis`,`mlmfestsetzen`,`mlmmindestpunkte`,`mlmwartekonto`,`abweichende_rechnungsadresse`,`rechnung_vorname`,`rechnung_name`,`rechnung_titel`,`rechnung_typ`,`rechnung_strasse`,`rechnung_ort`,`rechnung_plz`,`rechnung_ansprechpartner`,`rechnung_land`,`rechnung_abteilung`,`rechnung_unterabteilung`,`rechnung_adresszusatz`,`rechnung_telefon`,`rechnung_telefax`,`rechnung_anschreiben`,`rechnung_email`,`geburtstag`,`rolledatum`,`liefersperre`,`liefersperregrund`,`mlmpositionierung`,`steuernummer`,`steuerbefreit`,`mlmmitmwst`,`mlmabrechnung`,`mlmwaehrungauszahlung`,`mlmauszahlungprojekt`,`sponsor`,`geworbenvon`,`logfile`,`kalender_aufgaben`,`verrechnungskontoreisekosten`,`usereditid`,`useredittimestamp`,`rabatt`,`provision`,`rabattinformation`,`rabatt1`,`rabatt2`,`rabatt3`,`rabatt4`,`rabatt5`,`internetseite`,`bonus1`,`bonus1_ab`,`bonus2`,`bonus2_ab`,`bonus3`,`bonus3_ab`,`bonus4`,`bonus4_ab`,`bonus5`,`bonus5_ab`,`bonus6`,`bonus6_ab`,`bonus7`,`bonus7_ab`,`bonus8`,`bonus8_ab`,`bonus9`,`bonus9_ab`,`bonus10`,`bonus10_ab`,`rechnung_periode`,`rechnung_anzahlpapier`,`rechnung_anzahlpapier_abweichend`,`rechnung_permail`,`titel`,`anschreiben`,`nachname`,`arbeitszeitprowoche`,`folgebestaetigungsperre`,`lieferantennummerbeikunde`,`verein_mitglied_seit`,`verein_mitglied_bis`,`verein_mitglied_aktiv`,`verein_spendenbescheinigung`,`freifeld4`,`freifeld5`,`freifeld6`,`freifeld7`,`freifeld8`,`freifeld9`,`freifeld10`,`rechnung_papier`,`angebot_cc`,`auftrag_cc`,`rechnung_cc`,`gutschrift_cc`,`lieferschein_cc`,`bestellung_cc`,`angebot_fax_cc`,`auftrag_fax_cc`,`rechnung_fax_cc`,`gutschrift_fax_cc`,`lieferschein_fax_cc`,`bestellung_fax_cc`,`abperfax`,`abpermail`,`kassiereraktiv`,`kassierernummer`,`kassiererprojekt`,`portofreilieferant_aktiv`,`portofreiablieferant`,`mandatsreferenzart`,`mandatsreferenzwdhart`,`serienbrief`,`kundennummer_buchhaltung`,`lieferantennummer_buchhaltung`,`lead`,`zahlungsweiseabo`,`bundesland`,`mandatsreferenzhinweis`,`geburtstagkalender`,`geburtstagskarte`,`liefersperredatum`,`umsatzsteuer_lieferant`,`lat`,`lng`,`art`,`fromshop`,`freifeld11`,`freifeld12`,`freifeld13`,`freifeld14`,`freifeld15`,`freifeld16`,`freifeld17`,`freifeld18`,`freifeld19`,`freifeld20`,`angebot_email`,`auftrag_email`,`rechnungs_email`,`gutschrift_email`,`lieferschein_email`,`bestellung_email`,`lieferschwellenichtanwenden`,`hinweistextlieferant`,`firmensepa`,`hinweis_einfuegen`,`anzeigesteuerbelege`,`gln`,`rechnung_gln`,`keinealtersabfrage`,`lieferbedingung`,`mlmintranetgesamtestruktur`,`kommissionskonsignationslager`,`zollinformationen`,`bundesstaat`,`rechnung_bundesstaat`) VALUES(NULL,'{$this->typ}','{$this->marketingsperre}','{$this->trackingsperre}','{$this->rechnungsadresse}','{$this->sprache}','{$this->name}','{$this->abteilung}','{$this->unterabteilung}','{$this->ansprechpartner}','{$this->land}','{$this->strasse}','{$this->ort}','{$this->plz}','{$this->telefon}','{$this->telefax}','{$this->mobil}','{$this->email}','{$this->ustid}','{$this->ust_befreit}','{$this->passwort_gesendet}','{$this->sonstiges}','{$this->adresszusatz}','{$this->kundenfreigabe}','{$this->steuer}','{$this->logdatei}','{$this->kundennummer}','{$this->lieferantennummer}','{$this->mitarbeiternummer}','{$this->konto}','{$this->blz}','{$this->bank}','{$this->inhaber}','{$this->swift}','{$this->iban}','{$this->waehrung}','{$this->paypal}','{$this->paypalinhaber}','{$this->paypalwaehrung}','{$this->projekt}','{$this->partner}','{$this->zahlungsweise}','{$this->zahlungszieltage}','{$this->zahlungszieltageskonto}','{$this->zahlungszielskonto}','{$this->versandart}','{$this->kundennummerlieferant}','{$this->zahlungsweiselieferant}','{$this->zahlungszieltagelieferant}','{$this->zahlungszieltageskontolieferant}','{$this->zahlungszielskontolieferant}','{$this->versandartlieferant}','{$this->geloescht}','{$this->firma}','{$this->webid}','{$this->vorname}','{$this->kennung}','{$this->sachkonto}','{$this->freifeld1}','{$this->freifeld2}','{$this->freifeld3}','{$this->filiale}','{$this->vertrieb}','{$this->innendienst}','{$this->verbandsnummer}','{$this->abweichendeemailab}','{$this->portofrei_aktiv}','{$this->portofreiab}','{$this->infoauftragserfassung}','{$this->mandatsreferenz}','{$this->mandatsreferenzdatum}','{$this->mandatsreferenzaenderung}','{$this->glaeubigeridentnr}','{$this->kreditlimit}','{$this->tour}','{$this->zahlungskonditionen_festschreiben}','{$this->rabatte_festschreiben}','{$this->mlmaktiv}','{$this->mlmvertragsbeginn}','{$this->mlmlizenzgebuehrbis}','{$this->mlmfestsetzenbis}','{$this->mlmfestsetzen}','{$this->mlmmindestpunkte}','{$this->mlmwartekonto}','{$this->abweichende_rechnungsadresse}','{$this->rechnung_vorname}','{$this->rechnung_name}','{$this->rechnung_titel}','{$this->rechnung_typ}','{$this->rechnung_strasse}','{$this->rechnung_ort}','{$this->rechnung_plz}','{$this->rechnung_ansprechpartner}','{$this->rechnung_land}','{$this->rechnung_abteilung}','{$this->rechnung_unterabteilung}','{$this->rechnung_adresszusatz}','{$this->rechnung_telefon}','{$this->rechnung_telefax}','{$this->rechnung_anschreiben}','{$this->rechnung_email}','{$this->geburtstag}','{$this->rolledatum}','{$this->liefersperre}','{$this->liefersperregrund}','{$this->mlmpositionierung}','{$this->steuernummer}','{$this->steuerbefreit}','{$this->mlmmitmwst}','{$this->mlmabrechnung}','{$this->mlmwaehrungauszahlung}','{$this->mlmauszahlungprojekt}','{$this->sponsor}','{$this->geworbenvon}','{$this->logfile}','{$this->kalender_aufgaben}','{$this->verrechnungskontoreisekosten}','{$this->usereditid}','{$this->useredittimestamp}','{$this->rabatt}','{$this->provision}','{$this->rabattinformation}','{$this->rabatt1}','{$this->rabatt2}','{$this->rabatt3}','{$this->rabatt4}','{$this->rabatt5}','{$this->internetseite}','{$this->bonus1}','{$this->bonus1_ab}','{$this->bonus2}','{$this->bonus2_ab}','{$this->bonus3}','{$this->bonus3_ab}','{$this->bonus4}','{$this->bonus4_ab}','{$this->bonus5}','{$this->bonus5_ab}','{$this->bonus6}','{$this->bonus6_ab}','{$this->bonus7}','{$this->bonus7_ab}','{$this->bonus8}','{$this->bonus8_ab}','{$this->bonus9}','{$this->bonus9_ab}','{$this->bonus10}','{$this->bonus10_ab}','{$this->rechnung_periode}','{$this->rechnung_anzahlpapier}','{$this->rechnung_anzahlpapier_abweichend}','{$this->rechnung_permail}','{$this->titel}','{$this->anschreiben}','{$this->nachname}','{$this->arbeitszeitprowoche}','{$this->folgebestaetigungsperre}','{$this->lieferantennummerbeikunde}','{$this->verein_mitglied_seit}','{$this->verein_mitglied_bis}','{$this->verein_mitglied_aktiv}','{$this->verein_spendenbescheinigung}','{$this->freifeld4}','{$this->freifeld5}','{$this->freifeld6}','{$this->freifeld7}','{$this->freifeld8}','{$this->freifeld9}','{$this->freifeld10}','{$this->rechnung_papier}','{$this->angebot_cc}','{$this->auftrag_cc}','{$this->rechnung_cc}','{$this->gutschrift_cc}','{$this->lieferschein_cc}','{$this->bestellung_cc}','{$this->angebot_fax_cc}','{$this->auftrag_fax_cc}','{$this->rechnung_fax_cc}','{$this->gutschrift_fax_cc}','{$this->lieferschein_fax_cc}','{$this->bestellung_fax_cc}','{$this->abperfax}','{$this->abpermail}','{$this->kassiereraktiv}','{$this->kassierernummer}','{$this->kassiererprojekt}','{$this->portofreilieferant_aktiv}','{$this->portofreiablieferant}','{$this->mandatsreferenzart}','{$this->mandatsreferenzwdhart}','{$this->serienbrief}','{$this->kundennummer_buchhaltung}','{$this->lieferantennummer_buchhaltung}','{$this->lead}','{$this->zahlungsweiseabo}','{$this->bundesland}','{$this->mandatsreferenzhinweis}','{$this->geburtstagkalender}','{$this->geburtstagskarte}','{$this->liefersperredatum}','{$this->umsatzsteuer_lieferant}','{$this->lat}','{$this->lng}','{$this->art}','{$this->fromshop}','{$this->freifeld11}','{$this->freifeld12}','{$this->freifeld13}','{$this->freifeld14}','{$this->freifeld15}','{$this->freifeld16}','{$this->freifeld17}','{$this->freifeld18}','{$this->freifeld19}','{$this->freifeld20}','{$this->angebot_email}','{$this->auftrag_email}','{$this->rechnungs_email}','{$this->gutschrift_email}','{$this->lieferschein_email}','{$this->bestellung_email}','{$this->lieferschwellenichtanwenden}','{$this->hinweistextlieferant}','{$this->firmensepa}','{$this->hinweis_einfuegen}','{$this->anzeigesteuerbelege}','{$this->gln}','{$this->rechnung_gln}','{$this->keinealtersabfrage}','{$this->lieferbedingung}','{$this->mlmintranetgesamtestruktur}','{$this->kommissionskonsignationslager}','{$this->zollinformationen}','{$this->bundesstaat}','{$this->rechnung_bundesstaat}')"; $this->app->DB->Insert($sql); @@ -580,7 +580,7 @@ $result = $result[0]; `webid`='{$this->webid}', `vorname`='{$this->vorname}', `kennung`='{$this->kennung}', - `sachkonto`='{$this->sachkonto}', + `kontorahmen`='{$this->sachkonto}', `freifeld1`='{$this->freifeld1}', `freifeld2`='{$this->freifeld2}', `freifeld3`='{$this->freifeld3}', diff --git a/www/pages/ajax.php b/www/pages/ajax.php index ada4211a..8458e29e 100644 --- a/www/pages/ajax.php +++ b/www/pages/ajax.php @@ -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"); } $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')." ORDER by belegnr LIMIT 20" ); $carr = !empty($arr)?count($arr):0; diff --git a/www/pages/content/verbindlichkeit_edit.tpl b/www/pages/content/verbindlichkeit_edit.tpl index 2fa56044..45a913b5 100644 --- a/www/pages/content/verbindlichkeit_edit.tpl +++ b/www/pages/content/verbindlichkeit_edit.tpl @@ -1,6 +1,6 @@
    diff --git a/www/pages/content/verbindlichkeit_minidetail.tpl b/www/pages/content/verbindlichkeit_minidetail.tpl index 723fd770..141e427d 100644 --- a/www/pages/content/verbindlichkeit_minidetail.tpl +++ b/www/pages/content/verbindlichkeit_minidetail.tpl @@ -8,7 +8,7 @@ color: #636363;border: 1px solid #fff;padding: 0px; margin:0px; } -
    +
    @@ -53,7 +53,7 @@
    Lieferant:
    -
    +

    Artikel

    diff --git a/www/pages/content/verbindlichkeit_positionen.tpl b/www/pages/content/verbindlichkeit_positionen.tpl index 9c2d0728..9ad28ab4 100644 --- a/www/pages/content/verbindlichkeit_positionen.tpl +++ b/www/pages/content/verbindlichkeit_positionen.tpl @@ -55,16 +55,16 @@  {|alle markieren|} - + Sachkonto:  - - + + - + Steuersatz:  - + diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index 13c8e0d0..d3e70e5e 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -25,7 +25,6 @@ class Verbindlichkeit { $this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf"); $this->app->ActionHandler("positioneneditpopup", "verbindlichkeit_positioneneditpopup"); $this->app->ActionHandler("freigabe", "verbindlichkeit_freigabe"); - $this->app->ActionHandler("schreibschutz", "verbindlichkeit_schreibschutz"); $this->app->ActionHandler("freigabeeinkauf", "verbindlichkeit_freigabeeinkauf"); $this->app->ActionHandler("freigabebuchhaltung", "verbindlichkeit_freigabebuchhaltung"); $this->app->ActionHandler("freigabebezahlt", "verbindlichkeit_freigabebezahlt"); @@ -532,14 +531,18 @@ class Verbindlichkeit { $input['status'] = 'angelegt'; } + if (!empty($submit)) { + $einkauf_automatik_aus = false; + } + switch($submit) { case 'speichern': // Write to database // 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']; $projekt = $input['projekt']; $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['projekt'] = $this->app->erp->ReplaceProjekt(true,$input['projekt'],true); $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'])) { $input['projekt'] = $this->app->erp->GetCreateProjekt($input['adresse']); } @@ -608,8 +611,8 @@ class Verbindlichkeit { break; case 'positionen_hinzufuegen': - $freigabeeinkauf = $this->app->DB->Select("SELECT freigabe FROM verbindlichkeit WHERE id =".$id); - if ($freigabeeinkauf) { + $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM verbindlichkeit WHERE id =".$id)[0]; + if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) { break; } @@ -627,6 +630,40 @@ class Verbindlichkeit { 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]; $umsatzsteuer = $umsatzsteuern[$key]; $ein_artikel = $artikel[$key]; @@ -759,7 +796,6 @@ class Verbindlichkeit { } // Summarize positions - $sql = "SELECT * FROM verbindlichkeit_position WHERE verbindlichkeit = ".$id; $positionen = $this->app->DB->SelectArr($sql); @@ -776,7 +812,6 @@ class Verbindlichkeit { Befreit: umsatzsteuer befreit, steursatz = -1 Individuell: umsatzsteuer leer, steuersatz = wert */ - foreach ($positionen as $position) { $tmpsteuersatz = null; @@ -818,21 +853,22 @@ class Verbindlichkeit { if ($pos_ok) { if (!$verbindlichkeit_from_db['freigabe'] && !$einkauf_automatik_aus) { - $this->app->DB->Update("UPDATE verbindlichkeit SET freigabe = 1 WHERE id = ".$id); - $verbindlichkeit_from_db['freigabe'] = 1; - $this->app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit automatisch freigegeben (Einkauf)"); - $this->app->YUI->Message('success',"Verbindlichkeit automatisch freigegeben (Einkauf)"); + if ($this->verbindlichkeit_freigabeeinkauf($id,"Verbindlichkeit automatisch freigegeben (Einkauf)")) { + $this->app->YUI->Message('success',"Verbindlichkeit automatisch freigegeben (Einkauf)"); + $verbindlichkeit_from_db['freigabe'] = 1; + } else { + $this->app->YUI->Message('warning','Waren-/Leistungsprüfung (Einkauf) nicht abgeschlossen'); + } } $this->app->Tpl->Set('POSITIONENMESSAGE', '
    Positionen vollständig
    '); } else { - $this->app->Tpl->Set('POSITIONENMESSAGE', '
    Positionen nicht vollständig. Bruttobetrag '.$verbindlichkeit_from_db['betrag'].', Summe Positionen (brutto) '.round($betrag_brutto,2).', Summe Positionen (netto) '.round($betrag_netto,2).'
    '); + $this->app->Tpl->Set('POSITIONENMESSAGE', '
    Positionen nicht vollständig. Bruttobetrag '.$verbindlichkeit_from_db['betrag'].', Summe Positionen (brutto) '.round($betrag_brutto,2).', Differenz '.round(round($betrag_brutto,2)-$verbindlichkeit_from_db['betrag'],2).'
    '); if ($verbindlichkeit_from_db['freigabe']) { $this->app->DB->Update("UPDATE verbindlichkeit SET freigabe = 0 WHERE id = ".$id); $verbindlichkeit_from_db['freigabe'] = 0; $this->app->YUI->Message('warning',"Verbindlichkeit rü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',"
    Diese Verbindlichkeit ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! 
    "); - } - if (empty($verbindlichkeit_from_db['adresse'] || $verbindlichkeit_from_db['status'] == 'angelegt')) { $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); $this->app->Tpl->Set('FREIGABEBUCHHALTUNGHIDDEN','hidden'); @@ -860,6 +891,7 @@ class Verbindlichkeit { if ($verbindlichkeit_from_db['freigabe']) { $this->app->Tpl->Set('FREIGABEEINKAUFHIDDEN','hidden'); $this->app->Tpl->Set('EINKAUFINFOHIDDEN','hidden'); + $this->app->Tpl->Set('SAVEDISABLED','disabled'); $this->app->Tpl->Set('POSITIONHINZUFUEGENHIDDEN','hidden'); } else { $this->app->Tpl->Set('RUECKSETZENEINKAUFHIDDEN','hidden'); @@ -954,7 +986,6 @@ class Verbindlichkeit { $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')?'1':'0';; $input['zahlungsweise'] = $this->app->Secure->GetPOST('zahlungsweise'); $input['eingangsdatum'] = $this->app->Secure->GetPOST('eingangsdatum'); $input['rechnungsdatum'] = $this->app->Secure->GetPOST('rechnungsdatum'); @@ -1046,22 +1077,50 @@ class Verbindlichkeit { $id = $this->app->Secure->GetGET('id'); $this->app->erp->BelegFreigabe('verbindlichkeit',$id); $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(); } - function verbindlichkeit_freigabeeinkauf($id = null) + function verbindlichkeit_freigabeeinkauf($id = null, $text = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); $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->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit freigegeben (Einkauf)"); + + if (!$text) { + $text = "Verbindlichkeit freigegeben (Einkauf)"; + } + $this->app->erp->BelegProtokoll("verbindlichkeit",$id,$text); if ($gotoedit) { $this->verbindlichkeit_edit(); } + else { + return(true); + } } function verbindlichkeit_freigabebuchhaltung($id = null) @@ -1070,9 +1129,31 @@ class Verbindlichkeit { $id = $this->app->Secure->GetGET('id'); $gotoedit = true; } - $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)"); + + // 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 { + $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) { $this->verbindlichkeit_edit(); } @@ -1098,7 +1179,7 @@ class Verbindlichkeit { $id = $this->app->Secure->GetGET('id'); $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->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit rückgesetzt (Einkauf)"); if ($gotoedit) { @@ -1134,7 +1215,7 @@ class Verbindlichkeit { } } - function verbindlichkeit_schreibschutz($id = null) +/* function verbindlichkeit_schreibschutz($id = null) { if (empty($id)) { $id = $this->app->Secure->GetGET('id'); @@ -1146,7 +1227,7 @@ class Verbindlichkeit { if ($gotoedit) { $this->verbindlichkeit_edit(); } - } + } */ public function verbindlichkeit_minidetail($parsetarget='',$menu=true) { @@ -1228,10 +1309,10 @@ class Verbindlichkeit { vp.menge, vp.preis, vp.steuersatz, - if (skv.sachkonto <> 0, + if (skv.id <> 0, CONCAT(skv.sachkonto,' ',skv.beschriftung), ( - if (skart.sachkonto <> 0, + if (skart.id <> 0, CONCAT(skart.sachkonto,' ',skart.beschriftung, ' (Artikel)'), CONCAT(skadr.sachkonto,' ',skadr.beschriftung, ' (Adresse)') ) From 6a6aab43042813a4bd20b96366ffde7d8a1cc3fc Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Thu, 4 Jan 2024 13:13:13 +0100 Subject: [PATCH 28/62] 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)); + } + } From 3a023592e96ed842941e6c17a6c4cec411e4f9da Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Thu, 4 Jan 2024 14:28:26 +0100 Subject: [PATCH 29/62] wareneingang datum_abgeschlossen, bearbeiter_abgeschlossen, manuell mit menge --- upgrade/data/db_schema.json | 22 ++++++ .../content/wareneingang_manuellerfassen.tpl | 20 +++--- .../content/wareneingang_mitarbeiter.tpl | 2 +- .../content/wareneingang_paketinhalt.tpl | 4 +- www/pages/wareneingang.php | 71 ++++++++++++++----- 5 files changed, 92 insertions(+), 27 deletions(-) diff --git a/upgrade/data/db_schema.json b/upgrade/data/db_schema.json index bc58f6c4..82ee02f2 100644 --- a/upgrade/data/db_schema.json +++ b/upgrade/data/db_schema.json @@ -64483,6 +64483,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "datum_abgeschlossen", + "Type": "datetime", + "Collation": null, + "Null": "NO", + "Key": "", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "verpackungszustand", "Type": "int(11)", @@ -64538,6 +64549,17 @@ "Privileges": "select,insert,update,references", "Comment": "" }, + { + "Field": "bearbeiter_abgeschlossen", + "Type": "varchar(255)", + "Collation": "utf8mb3_general_ci", + "Null": "NO", + "Key": "", + "Default": null, + "Extra": "", + "Privileges": "select,insert,update,references", + "Comment": "" + }, { "Field": "projekt", "Type": "int(11)", diff --git a/www/pages/content/wareneingang_manuellerfassen.tpl b/www/pages/content/wareneingang_manuellerfassen.tpl index a726060f..69ac8c17 100644 --- a/www/pages/content/wareneingang_manuellerfassen.tpl +++ b/www/pages/content/wareneingang_manuellerfassen.tpl @@ -6,15 +6,17 @@
     Filter
    - - - - - -
     {|Scannen|}:
    -
    -
    -
    +
    + + + + + + +
     {|Scannen|}: {|Menge|}:
    + + + [MESSAGE] [TAB1] diff --git a/www/pages/content/wareneingang_mitarbeiter.tpl b/www/pages/content/wareneingang_mitarbeiter.tpl index 870f7bd0..e353b738 100644 --- a/www/pages/content/wareneingang_mitarbeiter.tpl +++ b/www/pages/content/wareneingang_mitarbeiter.tpl @@ -15,12 +15,12 @@ + - diff --git a/www/pages/content/wareneingang_paketinhalt.tpl b/www/pages/content/wareneingang_paketinhalt.tpl index a01e0cfa..75773e67 100644 --- a/www/pages/content/wareneingang_paketinhalt.tpl +++ b/www/pages/content/wareneingang_paketinhalt.tpl @@ -21,6 +21,8 @@
    {|[LEGENDE]|}
    Artikel:[NAME]
    Menge:[MENGE]

    Bemerkung:

    Anmerkung:Artikel zu Mitarbeiter [MITARBEITER] bringen [DISPLAY_WARENEINGANG_RMA_HOOK1]

     
    + + @@ -64,7 +66,7 @@ [ISLIEFERANTENDE] -
    {|Status|}:
    Abgeschlossen am [DATUM_ABGESCHLOSSEN] durch [BEARBEITER_ABGESCHLOSSEN]
    {|Lieferschein-Nr.|}:
    {|Rechnung-Nr.|}:
    {|Bemerkung|}:
    +
    diff --git a/www/pages/wareneingang.php b/www/pages/wareneingang.php index 71e45ffd..9c769ca1 100644 --- a/www/pages/wareneingang.php +++ b/www/pages/wareneingang.php @@ -962,22 +962,40 @@ class Wareneingang { */ - $heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Menge', 'Bemerkung', ''); - $width = array('5%', '5%', '5%', '30%', '5%', '5%', '45%'); + $heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Menge', 'Bemerkung','Bearbeiter', ''); + $width = array( '5%', '5%', '5%', '30%', '5%', '15%', '5%', '30%'); - $findcols = array('p.nummer', 'p.bestellbezug', 'p.name', 'p.menge', 'p.bemerkung'); + $findcols = array('p.nummer', 'p.bestellbezug', 'p.name', 'p.menge', 'p.bemerkung','p.bearbeiter'); $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); $defaultorder = 1; $defaultorderdesc = 0; - $sql = "SELECT SQL_CALC_FOUND_ROWS p.nummer,p.lieferantnummer, p.nummer, p.bestellbezug, p.name, p.menge, p.bemerkung from - (SELECT bestellung.belegnr as bestellbezug, bestellung_position.bestellnummer as lieferantnummer ,artikel.nummer as nummer, artikel.name_de as name, " . $this->app->erp->FormatMenge("paketdistribution.menge") . " as menge, paketdistribution.bemerkung - FROM paketdistribution - INNER JOIN artikel ON artikel.id = paketdistribution.artikel - LEFT JOIN bestellung_position ON bestellung_position = bestellung_position.id - LEFT JOIN bestellung on bestellung_position.bestellung = bestellung.id - where paketannahme = $id AND vorlaeufig IS NULL) as p"; + $sql = "SELECT SQL_CALC_FOUND_ROWS + p.nummer, + p.lieferantnummer, + p.nummer, + p.bestellbezug, + p.name, + p.menge, + p.bemerkung, + p.bearbeiter + FROM + ( + SELECT + bestellung.belegnr as bestellbezug, + bestellung_position.bestellnummer as lieferantnummer, + artikel.nummer as nummer, + artikel.name_de as name, + " . $this->app->erp->FormatMenge("paketdistribution.menge") . " as menge, + paketdistribution.bemerkung, + paketdistribution.bearbeiter + FROM paketdistribution + INNER JOIN artikel ON artikel.id = paketdistribution.artikel + LEFT JOIN bestellung_position ON bestellung_position = bestellung_position.id + LEFT JOIN bestellung on bestellung_position.bestellung = bestellung.id + WHERE paketannahme = $id AND vorlaeufig IS NULL + ) AS p"; $where = ""; $count = "SELECT count(DISTINCT id) FROM paketdistribution p WHERE paketannahme = $id AND vorlaeufig IS NULL"; @@ -1184,7 +1202,7 @@ class Wareneingang { $id = $this->app->Secure->GetGET('id'); $action = $this->app->Secure->GetGET('action'); $this->app->Tpl->Set('ID', $id); - $this->app->Tpl->Add('KURZUEBERSCHRIFT', ' Paketannahme'); + $this->app->Tpl->Add('KURZUEBERSCHRIFT', ' Paketannahme / Leistungserfassung'); $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=paketannahme', 'Neu'); $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=list', 'Übersicht'); $this->app->erp->RunMenuHook('wareneingangpaket'); @@ -1901,7 +1919,7 @@ class Wareneingang { break; case 'abschliessen': // Save header and finish - $sql = "UPDATE paketannahme SET status='abgeschlossen' WHERE id='$id'"; + $sql = "UPDATE paketannahme SET status='abgeschlossen', datum_abgeschlossen = NOW(), bearbeiter_abgeschlossen = '".$this->app->User->GetName()."' WHERE id='$id'"; $this->app->DB->Update($sql); $this->app->erp->RunHook('wareneinang_paketannahme_abschliessen', 1, $id); @@ -1974,7 +1992,8 @@ class Wareneingang { } */ // Submit $sql = sprintf( - 'SELECT `adresse`,%s FROM `paketannahme` WHERE `id` = %d LIMIT 1', + 'SELECT `adresse`,status,%s,bearbeiter_abgeschlossen,%s FROM `paketannahme` WHERE `id` = %d LIMIT 1', + $this->app->erp->FormatDate('datum_abgeschlossen', 'datum_abgeschlossen'), $this->app->erp->FormatDate('datum', 'datum'), $id ); @@ -1982,7 +2001,10 @@ class Wareneingang { $paketannahme = $this->app->DB->SelectArr($sql)[0]; $adresse = $paketannahme['adresse']; + $status = $paketannahme['status']; $datum = $paketannahme['datum']; + $datum_abgeschlossen = $paketannahme['datum_abgeschlossen']; + $bearbeiter_abgeschlossen = $paketannahme['bearbeiter_abgeschlossen']; $addressRow = empty($adresse) ? null : $this->app->DB->SelectRow( sprintf( @@ -2008,7 +2030,7 @@ class Wareneingang { //$this->app->Tpl->Set('TAB1START','
    '); //$this->app->Tpl->Set('TAB1ENDE','
    '); - $this->app->Tpl->Add('TAB1', "

    Offene Artikel aus Bestellungen bei $name:

    "); + $this->app->Tpl->Add('TAB1', "Offene Artikel aus Bestellungen bei $name:"); $this->app->YUI->TableSearch('TAB1', 'wareneingang_lieferant', 'show', '', '', basename(__FILE__), __CLASS__); } else { $this->app->Tpl->Set('ISLIEFERANTSTART', ' +
    + [MESSAGE] + + [FORMHANDLEREVENT] +
    +
    +
    +
    +
    + {|Position bearbeiten|} + + + + + + + + + + + + + + + + + +
    + {|Menge|}: + + +
    + {|Preis|}: + + +
    + {|Steuersatz %|}: + + +
    + {|Sachkonto|}: + + +
    +
    +
    +
    +
    +
    + + +
    +
    + diff --git a/www/pages/content/verbindlichkeit_positionen.tpl b/www/pages/content/verbindlichkeit_positionen.tpl index c1ef1c43..2da6e818 100644 --- a/www/pages/content/verbindlichkeit_positionen.tpl +++ b/www/pages/content/verbindlichkeit_positionen.tpl @@ -29,6 +29,9 @@
    {|Aktionen|} + + + @@ -52,23 +55,11 @@
    Bruttopreise eingeben
    {|Aktionen|} - + - - - - - - - + - - - - - - - +
     {|alle markieren|}
    Sachkonto: 
    Steuersatz: 
    diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index 25528e4b..be32caac 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -21,6 +21,7 @@ class Verbindlichkeit { $this->app->ActionHandler("positionen", "verbindlichkeit_positionen"); $this->app->ActionHandler("delete", "verbindlichkeit_delete"); $this->app->ActionHandler("deletepos", "verbindlichkeit_deletepos"); + $this->app->ActionHandler("editpos", "verbindlichkeit_editpos"); $this->app->ActionHandler("dateien", "verbindlichkeit_dateien"); $this->app->ActionHandler("inlinepdf", "verbindlichkeit_inlinepdf"); $this->app->ActionHandler("positioneneditpopup", "verbindlichkeit_positioneneditpopup"); @@ -45,7 +46,7 @@ class Verbindlichkeit { 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','Status','Monitor', 'Menü'); + $heading = array('','','Belegnr','Adresse', 'Lieferant', 'RE-Nr', 'RE-Datum', 'Betrag (brutto)', 'Währung','Zahlstatus', 'Ziel','Skontoziel','Skonto','Status','Monitor', 'Menü'); $width = array('1%','1%','10%'); // Fill out manually later // columns that are aligned right (numbers etc) @@ -61,6 +62,7 @@ class Verbindlichkeit { 'v.rechnungsdatum', 'v.betrag', 'v.waehrung', + 'v.bezahlt', 'v.zahlbarbis', 'v.skontobis', 'v.skonto', @@ -99,6 +101,7 @@ class Verbindlichkeit { ".$app->erp->FormatDate("v.rechnungsdatum").", ".$app->erp->FormatMenge('v.betrag',2).", v.waehrung, + if(v.bezahlt,'bezahlt','offen'), ".$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).",'%'),''), @@ -190,10 +193,10 @@ class Verbindlichkeit { $bestellnummer = $verbindlichkeit['belegnr']; $rechnung = $verbindlichkeit['rechnung']; - $heading = array('Paket-Nr.','Paket-Pos.', 'Bestellung', 'Lieferschein', 'Rechnung', 'Artikel-Nr.','Artikel','Menge','Menge offen','Eingabe','Preis',''); - $width = array( '1%', '1%', '5%', '5%', '5%', '5%', '20%', '2%', '1%', '1%', '1%', '1%'); + $heading = array('Paket-Nr.','Paket-Pos.', 'Bestellung', 'Lieferschein', 'Rechnung', 'Artikel-Nr.','Artikel','Menge','Menge offen','Eingabe','Preis','Steuer','Sachkonto',''); + $width = array( '1%', '1%', '5%', '5%', '5%', '5%', '20%', '2%', '1%', '1%', '1%', '1%', '1%', '1%'); - $findcols = array('pa','auswahl','belegnr','lsnr','renr','artikelnummer','name_de','menge','offen_menge','offen_menge','preis','pa'); + $findcols = array('pa','auswahl','belegnr','lsnr','renr','artikelnummer','name_de','menge','offen_menge','offen_menge','preis','umsatzsteuer','pa'); $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); $alignright = array(8,9,11); @@ -215,9 +218,12 @@ class Verbindlichkeit { '', - '' + '"/ hidden>', + '' ); $werte = array ( @@ -235,7 +241,7 @@ class Verbindlichkeit { '" min="0"', '"/>' ); - + $artikellink = array ( 'app->erp->ConcatSQL($werte).", - ".$this->app->erp->ConcatSQL($preise)." AS preis + ".$this->app->erp->ConcatSQL($preise)." AS preis, + art.umsatzsteuer, + if (skart.id <> 0, + CONCAT(skart.sachkonto,' ',skart.beschriftung), + CONCAT(skadr.sachkonto,' ',skadr.beschriftung) + ) AS sachkonto FROM paketannahme pa INNER JOIN paketdistribution pd ON @@ -325,7 +336,11 @@ class Verbindlichkeit { paketdistribution ) vp ON - vp.paketdistribution = pd.id + vp.paketdistribution = pd.id + LEFT JOIN + kontorahmen skart ON skart.id = art.kontorahmen + LEFT JOIN + kontorahmen skadr ON skadr.id = adr.kontorahmen WHERE pa.adresse = ".$lieferant." AND pd.vorlaeufig IS NULL".$innerwhere." ) temp "; @@ -340,12 +355,12 @@ class Verbindlichkeit { $id = $app->Secure->GetGET('id'); $freigabe = $app->DB->Select("SELECT freigabe FROM verbindlichkeit WHERE id = '".$id."'"); + $rechnungsfreigabe = $app->DB->Select("SELECT rechnungsfreigabe FROM verbindlichkeit WHERE id = '".$id."'"); -// $heading = array('Paket-Nr.','Paket-Pos.', 'Bestellung', 'Artikel-Nr.','Artikel','Menge','Preis','Steuersatz','Sachkonto','Menü',''); - $heading = array('', 'Paket-Nr.','Paket-Pos.', 'Bestellung', 'Artikel-Nr.','Artikel','Menge','Preis','Steuersatz abw.','Sachkonto abw.'); + $heading = array('', 'Paket-Nr.','Paket-Pos.', 'Bestellung', 'Artikel-Nr.','Artikel','Menge','Preis','Steuersatz','Sachkonto'); $width = array( '1%','1%', '1%' , '2%', '2%', '16%', '1%', '1%', '1%', '3%', '1%', '1%'); - $findcols = array('vp.id','pd.paketannahme','pd.id','b.belegnr','art.nummer','art.name_de','vp.menge','vp.preis','vp.steuersatz',"CONCAT(skv.sachkonto,' ',skv.beschriftung)",'vp.id','1'); + $findcols = array('vp.id','pd.paketannahme','pd.id','b.belegnr','art.nummer','art.name_de','vp.menge','vp.preis','vp.steuersatz',"CONCAT(skv.sachkonto,' ',skv.beschriftung)",'vp.id'); $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); $alignright = array(6,7,8,9); @@ -353,15 +368,12 @@ class Verbindlichkeit { $defaultorder = 1; $defaultorderdesc = 0; - if (empty($freigabe)) { - $deletepos = array ( - ' 'vp.id'], - '")>', - 'Conf->WFconf['defaulttheme'].'/images/delete.svg\" border=\"0\">' - ); - $heading[] = 'Menü'; - } else { + if (empty($freigabe)) { + $menu="
    "."Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"> "."Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">"."
    "; + } if (empty($rechnungsfreigabe)) { +$menu="
    "."Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">"."
    "; + } + else { $deletepos = array(''); } $heading[] = ''; @@ -389,7 +401,7 @@ class Verbindlichkeit { vp.preis, vp.steuersatz, CONCAT(skv.sachkonto,' ',skv.beschriftung), - ".$this->app->erp->ConcatSQL($deletepos)." + vp.id FROM verbindlichkeit_position vp INNER JOIN verbindlichkeit v ON @@ -504,10 +516,11 @@ class Verbindlichkeit { } public function verbindlichkeit_deletepos() { - $id = (int) $this->app->Secure->GetGET('id'); - $verbindlichkeit = $this->app->DB->Select("SELECT verbindlichkeit FROM verbindlichkeit_position WHERE id ='{$id}'"); - $this->app->DB->Delete("DELETE vp FROM verbindlichkeit_position vp INNER JOIN verbindlichkeit v ON v.id = vp.verbindlichkeit WHERE vp.id = '{$id}' AND v.freigabe <> 1"); - header("Location: index.php?module=verbindlichkeit&action=edit&id=$verbindlichkeit#tabs-2"); + $posid = (int) $this->app->Secure->GetGET('posid'); + $id = (int) $this->app->Secure->GetGET('id'); + $verbindlichkeit = $this->app->DB->Select("SELECT verbindlichkeit FROM verbindlichkeit_position WHERE id ='{$posid}'"); + $this->app->DB->Delete("DELETE vp FROM verbindlichkeit_position vp INNER JOIN verbindlichkeit v ON v.id = vp.verbindlichkeit WHERE vp.id = '{$posid}' AND v.freigabe <> 1"); + header("Location: index.php?module=verbindlichkeit&action=edit&id=$id#tabs-2"); } /* @@ -519,7 +532,7 @@ class Verbindlichkeit { $id = $this->app->Secure->GetGET('id'); // Check if other users are editing this id - if($this->app->erp->DisableModul('artikel',$id)) + if($this->app->erp->DisableModul('verbindlichkeit',$id)) { return; } @@ -635,8 +648,11 @@ class Verbindlichkeit { $ids = $this->app->Secure->GetPOST('ids'); $werte = $this->app->Secure->GetPOST('werte'); $preise = $this->app->Secure->GetPOST('preise'); - $umsatzsteuern = $this->app->Secure->GetPOST('umsatzsteuer'); $artikel = $this->app->Secure->GetPOST('artikel'); + $umsatzsteuern = $this->app->Secure->GetPOST('umsatzsteuern'); + $kontorahmen = $this->app->Secure->GetPOST('kontorahmen'); + + $bruttoeingabe = $this->app->Secure->GetPOST('bruttoeingabe'); foreach ($ids as $key => $paketdistribution) { $menge = $werte[$key]; @@ -671,7 +687,6 @@ class Verbindlichkeit { $offen_menge = $this->app->DB->Select($sql); if ($offen_menge == 0) { - echo("Abort ".$paketdistribution." ".gettype($offen_menge)); continue; } @@ -680,32 +695,23 @@ class Verbindlichkeit { } $preis = $preise[$key]; + $einartikel = $artikel[$key]; $umsatzsteuer = $umsatzsteuern[$key]; - $ein_artikel = $artikel[$key]; + $einkontorahmen = $kontorahmen[$key]; - $sql = "INSERT INTO verbindlichkeit_position (verbindlichkeit,paketdistribution, menge, preis, umsatzsteuer, artikel) VALUES ($id, $paketdistribution, $menge, $preis, '$umsatzsteuer', $ein_artikel)"; + $steuersatz = $this->get_steuersatz($umsatzsteuer,$id); + + if ($bruttoeingabe) { + $preis = $preis / (1+($steuersatz/100)); + } + + $sql = "INSERT INTO verbindlichkeit_position (verbindlichkeit,paketdistribution, menge, preis, steuersatz, artikel, kontorahmen) VALUES ($id, $paketdistribution, $menge, $preis, $steuersatz, $einartikel, $einkontorahmen)"; $this->app->DB->Insert($sql); } - break; - case 'positionen_sachkonto_speichern': - - $rechnungsfreigabe = $this->app->DB->Select("SELECT rechnungsfreigabe FROM verbindlichkeit WHERE id =".$id); - if ($rechnungsfreigabe) { - break; - } - // Process multi action - $ids = $this->app->Secure->GetPOST('auswahl'); - if (!is_array($ids)) { - break; - } - $sachkonto = $this->app->Secure->GetPOST('positionen_sachkonto'); - $kontorahmen = $this->app->erp->ReplaceKontorahmen(true,$sachkonto,false); - $sql = "update verbindlichkeit_position SET kontorahmen = '".$kontorahmen."' WHERE id IN (".implode(',',$ids).")"; - $this->app->DB->Update($sql); - break; - case 'positionen_steuersatz_speichern': + break; + case 'positionen_entfernen': $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM verbindlichkeit WHERE id =".$id)[0]; if ($freigabe['rechnungsfreigabe'] || $freigabe['freigabe']) { @@ -716,13 +722,9 @@ class Verbindlichkeit { if (!is_array($ids)) { break; } - $steuersatz = $this->app->Secure->GetPOST('positionen_steuersatz'); - if (!is_numeric($steuersatz)) { - $steuersatz = 'NULL'; - } - $sql = "update verbindlichkeit_position SET steuersatz = ".$steuersatz." WHERE id IN (".implode(',',$ids).")"; - $this->app->DB->Update($sql); - break; + $this->app->DB->Delete("DELETE vp FROM verbindlichkeit_position vp INNER JOIN verbindlichkeit v ON v.id = vp.verbindlichkeit WHERE vp.id IN (".implode(',',$ids).") AND v.freigabe <> 1"); + + break; case 'positionen_steuersatz_zu_netto': $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM verbindlichkeit WHERE id =".$id)[0]; @@ -1016,6 +1018,98 @@ class Verbindlichkeit { } + function verbindlichkeit_editpos() { + $id = $this->app->Secure->GetGET('id'); + $posid = $this->app->Secure->GetGET('posid'); + + $this->app->Tpl->Set('ID', $id); + $this->app->erp->MenuEintrag("index.php?module=verbindlichkeit&action=edit&id=$id#tabs-2", "Zurück"); + + $sachkonto = $this->app->Secure->GetPOST('sachkonto'); + $menge = $this->app->Secure->GetPOST('menge'); + $preis = $this->app->Secure->GetPOST('preis'); + $steuersatz = $this->app->Secure->GetPOST('steuersatz'); + + $kontorahmen = $this->app->erp->ReplaceKontorahmen(true,$sachkonto,false); + if ($menge < 0) { + $menge = 0; + } + if ($preis < 0) { + $preis = 0; + } + if ($steuersatz < 0) { + $steuersatz = 0; + } + $submit = $this->app->Secure->GetPOST('submit'); + + $freigabe = $this->app->DB->SelectArr("SELECT rechnungsfreigabe, freigabe FROM verbindlichkeit WHERE id =".$id)[0]; + if ($freigabe['rechnungsfreigabe'] && $freigabe['freigabe']) { + $this->app->Tpl->Set('SAVEDISABLED','disabled'); + $this->app->Tpl->Set('SACHKONTOSAVEDISABLED','disabled'); + } else if ($freigabe['freigabe']) { + $this->app->Tpl->Set('SAVEDISABLED','disabled'); + if ($submit != '') + { + $sql = " + UPDATE verbindlichkeit_position SET + kontorahmen = '$kontorahmen' + WHERE id = ".$posid." + "; + $this->app->DB->Update($sql); + $this->app->Tpl->Set('MESSAGE', "
    Die Einstellungen wurden erfolgreich übernommen.
    "); + header("Location: index.php?module=verbindlichkeit&action=edit&id=$id&msg=$msg#tabs-2"); + } + } else { + if ($submit != '') + { + $sql = " + UPDATE verbindlichkeit_position SET + menge = '$menge', + preis = '$preis', + steuersatz = '$steuersatz', + kontorahmen = '$kontorahmen' + WHERE id = ".$posid." + "; + $this->app->DB->Update($sql); + + $this->app->Tpl->Set('MESSAGE', "
    Die Einstellungen wurden erfolgreich übernommen.
    "); + header("Location: index.php?module=verbindlichkeit&action=edit&id=$id&msg=$msg#tabs-2"); + } + } + + // Load values again from database + $dropnbox = "'' AS `open`, CONCAT('') AS `auswahl`"; + $result = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS v.id, $dropnbox, v.steuersatz, v.preis, v.menge, v.kontorahmen, v.id FROM verbindlichkeit_position v"." WHERE id=$posid"); + + foreach ($result[0] as $key => $value) { + $this->app->Tpl->Set(strtoupper($key), $value); + } + + if (!empty($result)) { + $verbindlichkeit_position_from_db = $result[0]; + } else { + return; + } + + /* + * 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->YUI->AutoComplete("sachkonto", "sachkonto", 1); + $this->app->Tpl->Set('SACHKONTO', $this->app->erp->ReplaceKontorahmen(false,$verbindlichkeit_position_from_db['kontorahmen'],false)); + + $this->app->Tpl->Parse('PAGE', "verbindlichkeit_position_edit.tpl"); + } + + /** * Get all paramters from html form and save into $input */ @@ -1203,25 +1297,16 @@ class Verbindlichkeit { $sql = " SELECT vp.id, - v.belegnr, - skv.id skv_id, - skart.id skart_id, - skadr.id skadr_id + v.belegnr 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 - ) + AND vp.kontorahmen = 0 "; + $check = $this->app->DB->SelectArr($sql); + if (!empty($check)) { if ($gotoedit) { $this->app->YUI->Message('warning','Kontierung unvollständig'); @@ -1407,23 +1492,13 @@ class Verbindlichkeit { vp.menge, vp.preis, vp.steuersatz, - if (skv.id <> 0, - CONCAT(skv.sachkonto,' ',skv.beschriftung), - ( - if (skart.id <> 0, - CONCAT(skart.sachkonto,' ',skart.beschriftung, ' (Artikel)'), - CONCAT(skadr.sachkonto,' ',skadr.beschriftung, ' (Adresse)') - ) - ) - ) AS sachkonto, + CONCAT(skv.sachkonto,' ',skv.beschriftung) AS sachkonto, '' 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' ORDER by vp.sort ASC"); @@ -1516,4 +1591,56 @@ class Verbindlichkeit { return($this->app->DB->Select("SELECT belegnr FROM verbindlichkeit WHERE id =".$id)); } + /* Calculate steuersatz + Get from + Check address first, if foreign, then steuersatz = 0 + if not foreign there are three cases: befreit = 0, ermaessigt, normal + if not befreit, get from projekt or firmendaten + */ + function get_steuersatz($umsatzsteuer, $verbindlichkeit) { + if (is_numeric($umsatzsteuer)) { + return($umsatzsteuer); + } + + if ($umsatzsteuer == 'befreit') { + return(0); + } + + $adresse = $this->app->DB->Select("SELECT adresse FROM verbindlichkeit WHERE id=".$verbindlichkeit); + $umsatzsteuer_lieferant = $this->app->DB->Select("SELECT umsatzsteuer_lieferant FROM adresse WHERE id=".$adresse); /* inland, eu-lieferung, import*/ + + if (in_array($umsatzsteuer_lieferant,array('import','eu-lieferung'))) { + return(0); + } + + $projekt = $this->app->DB->Select("SELECT projekt FROM verbindlichkeit WHERE id=".$verbindlichkeit); + $steuersatz_projekt = $this->app->DB->SelectRow("SELECT steuersatz_normal, steuersatz_ermaessigt FROM projekt WHERE id ='".$projekt."'"); + $steuersatz_normal_projekt = $steuersatz_projekt['steuer_normal']; + $steuersatz_ermaessigt_projekt = $steuersatz_projekt['steuer_ermaessigt']; + + $steuersatz_normal = $this->app->erp->Firmendaten('steuersatz_normal'); + $steuersatz_ermaessigt = $this->app->erp->Firmendaten('steuersatz_ermaessigt'); + + switch($umsatzsteuer) { + case 'normal': + if (!empty($steuersatz_normal_projekt)) { + return($steuersatz_normal_projekt); + } else { + return($steuersatz_normal); + } + break; + case 'ermaessigt': + if (!empty($steuersatz_ermaessigt_projekt)) { + return($steuersatz_ermaessigt_projekt); + } else { + return($steuersatz_ermaessigt); + } + break; + default: + return(-1); + break; + } + + } + } From 346ff4cc4ade174bebca4dd30ba0b7f159eca120 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Fri, 5 Jan 2024 14:37:41 +0100 Subject: [PATCH 34/62] verbindlichkeit bugfix sachkonto / steuer --- www/pages/verbindlichkeit.php | 58 +++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index be32caac..a2aff94e 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -213,17 +213,8 @@ class Verbindlichkeit { $auswahl = array ( ' 'pd.id'], - '" hidden/>', - ['sql' => 'pd.id'], - '', - '', - '' + '" hidden/>', + ['sql' => 'pd.id'] ); $werte = array ( @@ -309,7 +300,7 @@ class Verbindlichkeit { ) offen_menge, ".$this->app->erp->ConcatSQL($werte).", ".$this->app->erp->ConcatSQL($preise)." AS preis, - art.umsatzsteuer, + if(art.umsatzsteuer = '',art.steuersatz,art.umsatzsteuer), if (skart.id <> 0, CONCAT(skart.sachkonto,' ',skart.beschriftung), CONCAT(skadr.sachkonto,' ',skadr.beschriftung) @@ -648,9 +639,6 @@ $menu="
    "."app->Secure->GetPOST('ids'); $werte = $this->app->Secure->GetPOST('werte'); $preise = $this->app->Secure->GetPOST('preise'); - $artikel = $this->app->Secure->GetPOST('artikel'); - $umsatzsteuern = $this->app->Secure->GetPOST('umsatzsteuern'); - $kontorahmen = $this->app->Secure->GetPOST('kontorahmen'); $bruttoeingabe = $this->app->Secure->GetPOST('bruttoeingabe'); @@ -695,18 +683,42 @@ $menu=" [DISPLAY_WARENEINGANG_RMA_HOOK1] - +
    "."get_steuersatz($umsatzsteuer,$id); + $artikel = $this->app->DB->SelectRow($sql); + + $einartikel = $artikel['id']; + $umsatzsteuer = $artikel['umsatzsteuer']; + $kontorahmen = $artikel['kontorahmen']; + + if(empty($umsatzsteuer)) { + $steuersatz = $artikel['steuersatz']; + } else { + $steuersatz = $this->get_steuersatz($umsatzsteuer,$id); + } if ($bruttoeingabe) { $preis = $preis / (1+($steuersatz/100)); } - $sql = "INSERT INTO verbindlichkeit_position (verbindlichkeit,paketdistribution, menge, preis, steuersatz, artikel, kontorahmen) VALUES ($id, $paketdistribution, $menge, $preis, $steuersatz, $einartikel, $einkontorahmen)"; - + $sql = "INSERT INTO verbindlichkeit_position (verbindlichkeit,paketdistribution, menge, preis, steuersatz, artikel, kontorahmen) VALUES ($id, $paketdistribution, $menge, $preis, $steuersatz, $einartikel, $kontorahmen)"; $this->app->DB->Insert($sql); } @@ -1609,7 +1621,7 @@ $menu=" + + + + + + + + + + + +
    "."app->DB->Select("SELECT adresse FROM verbindlichkeit WHERE id=".$verbindlichkeit); $umsatzsteuer_lieferant = $this->app->DB->Select("SELECT umsatzsteuer_lieferant FROM adresse WHERE id=".$adresse); /* inland, eu-lieferung, import*/ - if (in_array($umsatzsteuer_lieferant,array('import','eu-lieferung'))) { + if (in_array($umsatzsteuer_lieferant,array('import','eulieferung'))) { return(0); } @@ -1637,7 +1649,7 @@ $menu=" - - - - - - - - - - - - - - - - - - - - - - -
    "." Date: Fri, 5 Jan 2024 19:30:21 +0100 Subject: [PATCH 35/62] adresse sachkonto tpl --- www/widgets/templates/_gen/adresse.tpl | 2072 ++++++++++++++---------- 1 file changed, 1255 insertions(+), 817 deletions(-) diff --git a/www/widgets/templates/_gen/adresse.tpl b/www/widgets/templates/_gen/adresse.tpl index d5abf6b6..538843aa 100644 --- a/www/widgets/templates/_gen/adresse.tpl +++ b/www/widgets/templates/_gen/adresse.tpl @@ -1,604 +1,892 @@ - -[SAVEPAGEREALLY] +function abweichend(cmd) { + document.getElementById('abweichenderechnungsadressestyle').style.display = "none"; + if(document.getElementById('abweichende_rechnungsadresse').checked) document.getElementById('abweichenderechnungsadressestyle').style.display = ""; +} +//--> + [SAVEPAGEREALLY]
    - - -
    - -[MESSAGEROLLE] -[MESSAGE] - - -
    - -
    -
    -
    -
    - - - - - - - - -
     {|Adresse|} [ANZEIGENUMMER][ANZEIGENAMEDE][STATUSICONS][ICONMENU] [BUTTONS2]  [ABBRECHEN]
    -
    -
    -
    -
    - -
    -
    -
    -
    - -[BUTTONS] -[FORMHANDLEREVENT] -
    -
    -
    -
    - - - -
    -
    -
    -
    - -
    {|Stammdaten|} - - - - - - - - - - - - - - - - - [VORBUNDESSTAAT][NACHBUNDESSTAAT] - - - - - - - -
    {|Typ|}:[TYP][MSGTYP]
    *[NAME][MSGNAME]

    [TITEL][MSGTITEL]
    [ANSPRECHPARTNER][MSGANSPRECHPARTNER]
    [ABTEILUNG][MSGABTEILUNG]
    [UNTERABTEILUNG][MSGUNTERABTEILUNG]
    [ADRESSZUSATZ][MSGADRESSZUSATZ]

    [STRASSE][MSGSTRASSE]
    /[PLZ][MSGPLZ] [ORT][MSGORT]
    [EPROO_SELECT_BUNDESSTAAT]
    [EPROO_SELECT_LAND]

    [LIEFERBEDINGUNG][MSGLIEFERBEDINGUNG]
    [GLN][MSGGLN]

    [ABWEICHENDE_RECHNUNGSADRESSE][MSGABWEICHENDE_RECHNUNGSADRESSE]
    -
    -
    -
    -
    - -
    {|Kontaktdaten|} - [VORNAME][MSGVORNAME] - - - - - - - - - - - [BUTTON_KONTAKTE] - -
    [TELEFON][MSGTELEFON] [TELEFONBUTTON]
    [TELEFAX][MSGTELEFAX]
    [MOBIL][MSGMOBIL] [MOBILBUTTON]

    [ANSCHREIBEN][MSGANSCHREIBEN]

    [EMAIL][MSGEMAIL] [EMAILBUTTON]
    [INTERNETSEITE][MSGINTERNETSEITE] [INTERNETBUTTON]

    - -
    {|Zuordnung|} - [VORNAME][MSGVORNAME] - - - - - - -
    {|Vertrieb|}:[VERTRIEB][MSGVERTRIEB]
    {|Innendienst|}:[INNENDIENST][MSGINNENDIENST]
    {|Hauptprojekt|}:[PROJEKT][MSGPROJEKT]
    {|Herkunftskanal (Shop)|}:[FROMSHOP][MSGFROMSHOP]
    -
    -
    - - -
    -
    - -[ADRESSE_EDIT_HOOK1] - -
    {|Einstellungen|} - - - - - - - - - - - - - - -
    {|Liefersperre|}:[LIEFERSPERRE][MSGLIEFERSPERRE] {|Datum|}: [LIEFERSPERREDATUM][MSGLIEFERSPERREDATUM]
    {|Liefersperre Grund|}:[LIEFERSPERREGRUND][MSGLIEFERSPERREGRUND]

    {|Sprache für Belege|}:[SPRACHE][MSGSPRACHE]
    {|Kundenfreigabe|}:[KUNDENFREIGABE][MSGKUNDENFREIGABE]

    {|Folgebestätigungsperre|}:[FOLGEBESTAETIGUNGSPERRE][MSGFOLGEBESTAETIGUNGSPERRE]
    {|Trackingmailsperre|}:[TRACKINGSPERRE][MSGTRACKINGSPERRE]
    {|Marketingsperre|}:[MARKETINGSPERRE][MSGMARKETINGSPERRE]
    {|Lead|}:[LEAD][MSGLEAD]
    -
    - -
    -
    -
    -
    - - - - - -
    -
    -
    -
    -
    -
    {|Abweichende Rechnungsadresse|} - [RECHNUNG_VORNAME][MSGRECHNUNG_VORNAME] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [VORBUNDESSTAAT][NACHBUNDESSTAAT] - - - - -
    {|Typ|}:[RECHNUNG_TYP][MSGRECHNUNG_TYP] 
    {|Name|}:*[RECHNUNG_NAME][MSGRECHNUNG_NAME] {|Telefon|}:[RECHNUNG_TELEFON][MSGRECHNUNG_TELEFON]
    {|Titel|}:[RECHNUNG_TITEL][MSGRECHNUNG_TITEL] {|Telefax|}:[RECHNUNG_TELEFAX][MSGRECHNUNG_TELEFAX]
    {|Ansprechpartner|}:[RECHNUNG_ANSPRECHPARTNER][MSGRECHNUNG_ANSPRECHPARTNER] {|Anschreiben (Sehr geehrter ...)|}:[RECHNUNG_ANSCHREIBEN][MSGRECHNUNG_ANSCHREIBEN]
    {|Abteilung|}:[RECHNUNG_ABTEILUNG][MSGRECHNUNG_ABTEILUNG] {|E-Mail|}:[RECHNUNG_EMAIL][MSGRECHNUNG_EMAIL]
    {|Unterabteilung|}:[RECHNUNG_UNTERABTEILUNG][MSGRECHNUNG_UNTERABTEILUNG] 
    {|Adresszusatz|}:[RECHNUNG_ADRESSZUSATZ][MSGRECHNUNG_ADRESSZUSATZ] 
    {|Straße|}:[RECHNUNG_STRASSE][MSGRECHNUNG_STRASSE]  -
    {|PLZ/Ort|}:[RECHNUNG_PLZ][MSGRECHNUNG_PLZ] [RECHNUNG_ORT][MSGRECHNUNG_ORT] [BUTTON_KONTAKTE_RECHNUNG]
    [EPROO_SELECT_BUNDESSTAAT_RECHNUNG]
    {|Land|}:[EPROO_SELECT_LAND_RECHNUNG]
    {|GLN|}:[RECHNUNG_GLN][MSGRECHNUNG_GLN]
    - -
    -
    -
    -
    - -
    - -[BENUTZERDEFINIERTSTART] - - -
    -
    - -
    -
    -
    [BENUTZERDEFINIERT] -[FREIFELDSPALTE1] -
    -
    -
    - -
    -
    -
      -[FREIFELDSPALTE2] -
    -
    -
    - -
    -
    - -[BENUTZERDEFINIERTENDE] - -
    -
    -
    -
    -
    {|Sonstiges|} - - - -
    {|Info für Auftragserfassung|}:[INFOAUFTRAGSERFASSUNG][MSGINFOAUFTRAGSERFASSUNG]
    {|Sonstiges|}:[SONSTIGES][MSGSONSTIGES]
    -
    -
    -
    -
    -
    - - - - -
    - - - -
    -[MESSAGE] - -
    -
    -
    -
    - - - - - - - -
     {|Adresse|} [ANZEIGENUMMER][ANZEIGENAMEDE][STATUSICONS][ICONMENU] [BUTTONS2]  [ABBRECHEN]
    -
    -
    -
    -
    - -
    -
    -
    -
    - -
    {|Zahlungskonditionen des Kunden für Rechnungen|} - - - - - - - - - - - -[VORKOMMISSIONIERLAGER] - -[NACHKOMMISSIONIERLAGER] -
    {|Zahlungskonditionen festschreiben|}:[ZAHLUNGSKONDITIONEN_FESTSCHREIBEN][MSGZAHLUNGSKONDITIONEN_FESTSCHREIBEN] {|Immer diese verwenden (nie von Gruppe)|}
    {|Zahlungsweise|}:[ZAHLUNGSWEISE][MSGZAHLUNGSWEISE]
    {|Zahlungsziel (bei Rechnung)|}:[ZAHLUNGSZIELTAGE][MSGZAHLUNGSZIELTAGE] {|in Tagen|}
    {|Zahlungsziel Skonto (bei Rechnung)|}:[ZAHLUNGSZIELTAGESKONTO][MSGZAHLUNGSZIELTAGESKONTO] {|in Tagen|}
    {|Skonto (bei Rechnung)|}:[ZAHLUNGSZIELSKONTO][MSGZAHLUNGSZIELSKONTO] {|in %|}
    {|Lieferantennummer bei Kunde|}:[LIEFERANTENNUMMERBEIKUNDE][MSGLIEFERANTENNUMMERBEIKUNDE]
    {|Zahlungsweise Abo|}:[ZAHLUNGSWEISEABO][MSGZAHLUNGSWEISEABO]
    {|Belege im Auto-Versand erstellen|}:[ART][MSGART]
    {|Kommissions-/Konsignationslager|}:[KOMMISSIONSKONSIGNATIONSLAGER][MSGKOMMISSIONSKONSIGNATIONSLAGER]
    -
    - - - -
    -
    - -
    -
    - - -
    {|Zahlungskonditionen beim Lieferant bei Bestellungen|} - - - - - - - - - - -
    {|Zahlungsweise|}:[ZAHLUNGSWEISELIEFERANT][MSGZAHLUNGSWEISELIEFERANT]
    {|Zahlungsziel (in Tagen)|}:[ZAHLUNGSZIELTAGELIEFERANT][MSGZAHLUNGSZIELTAGELIEFERANT] {|in Tagen|}
    {|Zahlungsziel Skonto (in Tagen)|}:[ZAHLUNGSZIELTAGESKONTOLIEFERANT][MSGZAHLUNGSZIELTAGESKONTOLIEFERANT] {|in Tagen|}
    {|Skonto|}:[ZAHLUNGSZIELSKONTOLIEFERANT][MSGZAHLUNGSZIELSKONTOLIEFERANT] {|in %|}
    {|Lieferart|}:[VERSANDARTLIEFERANT][MSGVERSANDARTLIEFERANT]
    {|Kundennummer bei Lieferant|}:[KUNDENNUMMERLIEFERANT][MSGKUNDENNUMMERLIEFERANT]
    {|Besteuerung Verbindlichkeiten|}:[UMSATZSTEUER_LIEFERANT][MSGUMSATZSTEUER_LIEFERANT]
    {|Lieferant Hinweis-Text|}:[HINWEISTEXTLIEFERANT][MSGHINWEISTEXTLIEFERANT]
    - -
    - - - -
    -
    - - - - - -
    -
    - - -
    -
    -
    -
    - -
    {|Steuer / Währung / Zoll|} - - - - - - - - [VORPROFORMARECHNUNG] - - [NACHPROFORMATRECHNUNG] -
    {|USt-ID|}:[USTID][MSGUSTID]
    {|Steuernummer|}:[STEUERNUMMER][MSGSTEUERNUMMER]
    {|Besteuerung|}:[UST_BEFREIT][MSGUST_BEFREIT]
    {|Standard Währung|}:[WAEHRUNG][MSGWAEHRUNG]
    {|Lieferschwelle nicht anwenden|}:[LIEFERSCHWELLENICHTANWENDEN][MSGLIEFERSCHWELLENICHTANWENDEN]
    {|Anzeige Steuer auf Belege|}: - [ANZEIGESTEUERBELEGE][MSGANZEIGESTEUERBELEGE]
    {|Zollinformationen|}:[ZOLLINFORMATIONEN][MSGZOLLINFORMATIONEN]
    -
    -
    -
    -
    -
    - - -
    {|Kunde/Lieferant|} - - - - - - [STARTDISABLEVERBAND][ENDEDISABLEVERBAND] -
    Abw. Debitoren- bzw. Kreditoren Nummer
    Kunden Nr.:[KUNDENNUMMER][MSGKUNDENNUMMER][KUNDENNUMMER_BUCHHALTUNG][MSGKUNDENNUMMER_BUCHHALTUNG]
    Lieferanten Nr.:[LIEFERANTENNUMMER][MSGLIEFERANTENNUMMER][LIEFERANTENNUMMER_BUCHHALTUNG][MSGLIEFERANTENNUMMER_BUCHHALTUNG]
    Mitarbeiter Nr.:[MITARBEITERNUMMER][MSGMITARBEITERNUMMER]
    {|Mitgliedsnummer im Verband|}:[VERBANDSNUMMER][MSGVERBANDSNUMMER]
    -
    -
    -
    - - - -
    -
    - - -
    - - - - -
    -[MESSAGE] -
    -
    -
    -
    - - - - - - -
     {|Adresse|} [ANZEIGENUMMER][ANZEIGENAMEDE][STATUSICONS][ICONMENU] [BUTTONS2]  [ABBRECHEN]
    - -
    -
    -
    -
    - -
    {|Bankverbindung|} - - + +
    [MESSAGEROLLE] [MESSAGE] + +
    +
    +
    +
    +
    {|Inhaber|}:[INHABER][MSGINHABER]
    + + + + + +
     {|Adresse|} [ANZEIGENUMMER][ANZEIGENAMEDE][STATUSICONS][ICONMENU] [BUTTONS2]  + [ABBRECHEN]
    +
    +
    + + +
    +
    +
    +
    [BUTTONS] [FORMHANDLEREVENT]
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Stammdaten|} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [VORBUNDESSTAAT] + + + + [NACHBUNDESSTAAT] + + + + + + + + + + + + + + + + + + + + + + +
    {|Typ|}:[TYP][MSGTYP]
    *[NAME][MSGNAME]
    +
    +
    + + [TITEL][MSGTITEL]
    [ANSPRECHPARTNER][MSGANSPRECHPARTNER]
    + + [ABTEILUNG][MSGABTEILUNG]
    + + [UNTERABTEILUNG][MSGUNTERABTEILUNG]
    + + [ADRESSZUSATZ][MSGADRESSZUSATZ]
    +
    +
    + + [STRASSE][MSGSTRASSE]
    + / + + [PLZ][MSGPLZ] [ORT][MSGORT]
    + + [EPROO_SELECT_BUNDESSTAAT]
    + + [EPROO_SELECT_LAND]
    +
    +
    + + [LIEFERBEDINGUNG][MSGLIEFERBEDINGUNG]
    + + [GLN][MSGGLN]
    +
    +
    + + [ABWEICHENDE_RECHNUNGSADRESSE][MSGABWEICHENDE_RECHNUNGSADRESSE]
    +
    +
    +
    +
    +
    +
    + {|Kontaktdaten|} [VORNAME][MSGVORNAME] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [BUTTON_KONTAKTE]
    + + [TELEFON][MSGTELEFON] [TELEFONBUTTON]
    + + [TELEFAX][MSGTELEFAX]
    + + [MOBIL][MSGMOBIL] [MOBILBUTTON]
    +
    +
    + + [ANSCHREIBEN][MSGANSCHREIBEN]
    +
    +
    + + [EMAIL][MSGEMAIL] [EMAILBUTTON]
    + + [INTERNETSEITE][MSGINTERNETSEITE] [INTERNETBUTTON]
    +
    +
    +
    +
    + {|Zuordnung|} [VORNAME][MSGVORNAME] + + + + + + + + + + + + + + + + + +
    {|Vertrieb|}:[VERTRIEB][MSGVERTRIEB]
    {|Innendienst|}:[INNENDIENST][MSGINNENDIENST]
    {|Hauptprojekt|}:[PROJEKT][MSGPROJEKT]
    {|Herkunftskanal (Shop)|}:[FROMSHOP][MSGFROMSHOP]
    +
    +
    +
    +
    +
    [ADRESSE_EDIT_HOOK1] +
    + {|Einstellungen|} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {|Liefersperre|}:[LIEFERSPERRE][MSGLIEFERSPERRE] {|Datum|}: [LIEFERSPERREDATUM][MSGLIEFERSPERREDATUM]
    {|Liefersperre Grund|}:[LIEFERSPERREGRUND][MSGLIEFERSPERREGRUND]
    +
    +
    {|Sprache für Belege|}:[SPRACHE][MSGSPRACHE]
    {|Kundenfreigabe|}:[KUNDENFREIGABE][MSGKUNDENFREIGABE]
    +
    +
    {|Folgebestätigungsperre|}:[FOLGEBESTAETIGUNGSPERRE][MSGFOLGEBESTAETIGUNGSPERRE]
    {|Trackingmailsperre|}:[TRACKINGSPERRE][MSGTRACKINGSPERRE]
    {|Marketingsperre|}:[MARKETINGSPERRE][MSGMARKETINGSPERRE]
    {|Lead|}:[LEAD][MSGLEAD]
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Abweichende Rechnungsadresse|} [RECHNUNG_VORNAME][MSGRECHNUNG_VORNAME] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [VORBUNDESSTAAT] + + + + [NACHBUNDESSTAAT] + + + + + + + + +
    {|Typ|}:[RECHNUNG_TYP][MSGRECHNUNG_TYP] 
    {|Name|}:*[RECHNUNG_NAME][MSGRECHNUNG_NAME] {|Telefon|}:[RECHNUNG_TELEFON][MSGRECHNUNG_TELEFON]
    {|Titel|}:[RECHNUNG_TITEL][MSGRECHNUNG_TITEL] {|Telefax|}:[RECHNUNG_TELEFAX][MSGRECHNUNG_TELEFAX]
    {|Ansprechpartner|}:[RECHNUNG_ANSPRECHPARTNER][MSGRECHNUNG_ANSPRECHPARTNER] {|Anschreiben (Sehr geehrter ...)|}:[RECHNUNG_ANSCHREIBEN][MSGRECHNUNG_ANSCHREIBEN]
    {|Abteilung|}:[RECHNUNG_ABTEILUNG][MSGRECHNUNG_ABTEILUNG] {|E-Mail|}:[RECHNUNG_EMAIL][MSGRECHNUNG_EMAIL]
    {|Unterabteilung|}:[RECHNUNG_UNTERABTEILUNG][MSGRECHNUNG_UNTERABTEILUNG] 
    {|Adresszusatz|}:[RECHNUNG_ADRESSZUSATZ][MSGRECHNUNG_ADRESSZUSATZ] 
    {|Straße|}:[RECHNUNG_STRASSE][MSGRECHNUNG_STRASSE] 
    {|PLZ/Ort|}:[RECHNUNG_PLZ][MSGRECHNUNG_PLZ] [RECHNUNG_ORT][MSGRECHNUNG_ORT] [BUTTON_KONTAKTE_RECHNUNG]
    + + [EPROO_SELECT_BUNDESSTAAT_RECHNUNG]
    {|Land|}:[EPROO_SELECT_LAND_RECHNUNG]
    {|GLN|}:[RECHNUNG_GLN][MSGRECHNUNG_GLN]
    +
    +
    +
    +
    +
    +
    [BENUTZERDEFINIERTSTART] +
    +
    +
    +
    +
    + [BENUTZERDEFINIERT] [FREIFELDSPALTE1]
    +
    +
    +
    +
    +
    +   [FREIFELDSPALTE2]
    +
    +
    +
    +
    [BENUTZERDEFINIERTENDE] +
    +
    +
    +
    +
    + {|Sonstiges|} + + + + + + + + + +
    {|Info für Auftragserfassung|}:[INFOAUFTRAGSERFASSUNG][MSGINFOAUFTRAGSERFASSUNG]
    {|Sonstiges|}:[SONSTIGES][MSGSONSTIGES]
    +
    +
    +
    +
    +
    + +
    [MESSAGE] +
    +
    +
    +
    + + + + + + +
     {|Adresse|} [ANZEIGENUMMER][ANZEIGENAMEDE][STATUSICONS][ICONMENU] [BUTTONS2]  + [ABBRECHEN]
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Zahlungskonditionen des Kunden für Rechnungen|} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [VORKOMMISSIONIERLAGER] + + + + [NACHKOMMISSIONIERLAGER] +
    {|Zahlungskonditionen festschreiben|}:[ZAHLUNGSKONDITIONEN_FESTSCHREIBEN][MSGZAHLUNGSKONDITIONEN_FESTSCHREIBEN] {|Immer diese verwenden (nie von Gruppe)|}
    {|Zahlungsweise|}:[ZAHLUNGSWEISE][MSGZAHLUNGSWEISE] + +
    {|Zahlungsziel (bei Rechnung)|}:[ZAHLUNGSZIELTAGE][MSGZAHLUNGSZIELTAGE] {|in Tagen|}
    {|Zahlungsziel Skonto (bei Rechnung)|}:[ZAHLUNGSZIELTAGESKONTO][MSGZAHLUNGSZIELTAGESKONTO] {|in Tagen|}
    {|Skonto (bei Rechnung)|}:[ZAHLUNGSZIELSKONTO][MSGZAHLUNGSZIELSKONTO] {|in %|}
    {|Lieferantennummer bei Kunde|}:[LIEFERANTENNUMMERBEIKUNDE][MSGLIEFERANTENNUMMERBEIKUNDE]
    {|Zahlungsweise Abo|}:[ZAHLUNGSWEISEABO][MSGZAHLUNGSWEISEABO]
    {|Belege im Auto-Versand erstellen|}:[ART][MSGART]
    {|Kommissions-/Konsignationslager|}:[KOMMISSIONSKONSIGNATIONSLAGER][MSGKOMMISSIONSKONSIGNATIONSLAGER]
    +
    +
    +
    +
    +
    +
    + {|Zahlungskonditionen beim Lieferant bei Bestellungen|} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {|Zahlungsweise|}:[ZAHLUNGSWEISELIEFERANT][MSGZAHLUNGSWEISELIEFERANT]
    {|Zahlungsziel (in Tagen)|}:[ZAHLUNGSZIELTAGELIEFERANT][MSGZAHLUNGSZIELTAGELIEFERANT] {|in Tagen|}
    {|Zahlungsziel Skonto (in Tagen)|}:[ZAHLUNGSZIELTAGESKONTOLIEFERANT][MSGZAHLUNGSZIELTAGESKONTOLIEFERANT] {|in Tagen|}
    {|Skonto|}:[ZAHLUNGSZIELSKONTOLIEFERANT][MSGZAHLUNGSZIELSKONTOLIEFERANT] {|in %|}
    {|Lieferart|}:[VERSANDARTLIEFERANT][MSGVERSANDARTLIEFERANT]
    {|Kundennummer bei Lieferant|}:[KUNDENNUMMERLIEFERANT][MSGKUNDENNUMMERLIEFERANT]
    {|Besteuerung Verbindlichkeiten|}:[UMSATZSTEUER_LIEFERANT][MSGUMSATZSTEUER_LIEFERANT]
    {|Lieferant Hinweis-Text|}:[HINWEISTEXTLIEFERANT][MSGHINWEISTEXTLIEFERANT] + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Steuer / Währung / Zoll|} + + + + + + + + + + + + + + + + + + + + + + + + + [VORPROFORMARECHNUNG] + + + + [NACHPROFORMATRECHNUNG]
    {|USt-ID|}:[USTID][MSGUSTID]
    {|Steuernummer|}:[STEUERNUMMER][MSGSTEUERNUMMER]
    {|Besteuerung|}:[UST_BEFREIT][MSGUST_BEFREIT]
    {|Standard Währung|}:[WAEHRUNG][MSGWAEHRUNG]
    {|Lieferschwelle nicht anwenden|}:[LIEFERSCHWELLENICHTANWENDEN][MSGLIEFERSCHWELLENICHTANWENDEN]
    {|Anzeige Steuer auf Belege|}: [ANZEIGESTEUERBELEGE][MSGANZEIGESTEUERBELEGE]
    {|Zollinformationen|}:[ZOLLINFORMATIONEN][MSGZOLLINFORMATIONEN]
    +
    +
    +
    +
    +
    +
    + {|Kunde/Lieferant|} + + + + + + + + + + + + + + + + + + + + + [STARTDISABLEVERBAND] + + + + + [ENDEDISABLEVERBAND]
    Abw. Debitoren- bzw. Kreditoren Nummer
    Kunden Nr.:[KUNDENNUMMER][MSGKUNDENNUMMER][KUNDENNUMMER_BUCHHALTUNG][MSGKUNDENNUMMER_BUCHHALTUNG]
    Lieferanten Nr.:[LIEFERANTENNUMMER][MSGLIEFERANTENNUMMER][LIEFERANTENNUMMER_BUCHHALTUNG][MSGLIEFERANTENNUMMER_BUCHHALTUNG]
    Mitarbeiter Nr.:[MITARBEITERNUMMER][MSGMITARBEITERNUMMER]
    {|Mitgliedsnummer im Verband|}:[VERBANDSNUMMER][MSGVERBANDSNUMMER]
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Finanzbuchhaltung|} + + + + + + + + + + + + + + + + + + + + +
    Sachkonto für Verbindlichkeiten-Vorkontierung:[SACHKONTO]
    {|Reisekosten|}:[VERRECHNUNGSKONTOREISEKOSTEN][MSGVERRECHNUNGSKONTOREISEKOSTEN] Verrechnungskonto 
    {|Kredit Limit|}:[KREDITLIMIT][MSGKREDITLIMIT] in € 
    +
    +
    +
    +
    +
    - - -
    {|BIC|}:[SWIFT][MSGSWIFT] {|IBAN|}:[IBAN][MSGIBAN]
    {|Mandatsreferenz|}:[MANDATSREFERENZ][MSGMANDATSREFERENZ] {|Lastschrift Art|}:[MANDATSREFERENZART][MSGMANDATSREFERENZART] - [MANDATSREFERENZWDHART][MSGMANDATSREFERENZWDHART] -
    {|Mandatsreferenz Datum|}:[MANDATSREFERENZDATUM][MSGMANDATSREFERENZDATUM] {|Mandatsreferenz Änderung|}:[MANDATSREFERENZAENDERUNG][MSGMANDATSREFERENZAENDERUNG] Änderung seit letzter Lastschrift
     Firmen-SEPA[FIRMENSEPA][MSGFIRMENSEPA]
     Download SEPA Mandatsreferenz
    {|Bemerkung|}:[MANDATSREFERENZHINWEIS][MSGMANDATSREFERENZHINWEIS]
    -
    {|Paypal (bei Zahlungen)|} - - - - - - -
    {|Inhaber|}:[PAYPALINHABER][MSGPAYPALINHABER] {|Paypal-Account|}:[PAYPAL][MSGPAYPAL]
    {|Währung|}:[PAYPALWAEHRUNG][MSGPAYPALWAEHRUNG] 
    - - - -
    -[MESSAGE] - -
    -
    -
    -
    - - - - - - -
     {|Adresse|} [ANZEIGENUMMER][ANZEIGENAMEDE][STATUSICONS][ICONMENU] [BUTTONS2]  [ABBRECHEN]
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    {|Allgemeine Versandoptionen|} - - - - -
    {|Immer Papier Rechnung|}:[RECHNUNG_PAPIER][MSGRECHNUNG_PAPIER] Bei automatischen Versand wird immer eine Rechnung per Papier versendet (auch wenn eine E-Mail vorhanden ist)
    {|Anzahl Ausdrucke Rechnung abweichend|}:[RECHNUNG_ANZAHLPAPIER_ABWEICHEND] [RECHNUNG_ANZAHLPAPIER][MSGRECHNUNG_ANZAHLPAPIER] Anzahl der Ausdrucke beim Versand
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - - -
    E-Mail Empfänger (Im Dokument abschicken Dialog wenn E-Mail leer war oder Beleg neu angelegt wurde) - - - - - - - -
    {|Angebot|}:[ANGEBOT_EMAIL][MSGANGEBOT_EMAIL] Vorauswahl E-Mail Empfänger
    {|Auftrag|}:[AUFTRAG_EMAIL][MSGAUFTRAG_EMAIL] Vorauswahl E-Mail Empfänger
    {|Rechnung|}:[RECHNUNGS_EMAIL][MSGRECHNUNGS_EMAIL] Vorauswahl E-Mail Empfänger
    {|Gutschrift|}:[GUTSCHRIFT_EMAIL][MSGGUTSCHRIFT_EMAIL] Vorauswahl E-Mail Empfänger
    {|Lieferschein|}:[LIEFERSCHEIN_EMAIL][MSGLIEFERSCHEIN_EMAIL] Vorauswahl E-Mail Empfänger
    {|Bestellung|}:[BESTELLUNG_EMAIL][MSGBESTELLUNG_EMAIL] Vorauswahl E-Mail Empfänger
    - -
    -
    -
    -
    - -
    E-Mail Kopie Empfänger (Dokument abschicken) - - - - - - - -
    {|Angebot|}:[ANGEBOT_CC][MSGANGEBOT_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Auftrag|}:[AUFTRAG_CC][MSGAUFTRAG_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Rechnung|}:[RECHNUNG_CC][MSGRECHNUNG_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Gutschrift|}:[GUTSCHRIFT_CC][MSGGUTSCHRIFT_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Lieferschein|}:[LIEFERSCHEIN_CC][MSGLIEFERSCHEIN_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Bestellung|}:[BESTELLUNG_CC][MSGBESTELLUNG_CC] Zusätzlich eingetragener E-Mail Empfänger
    - - - -
    -
    -
    -
    - - -
    -
    -
    -
    - - -
    Fax Kopie Empfänger - - -
    {|AB per Fax bevorzugt|}:[ABPERFAX][MSGABPERFAX] Fax vorauswählen bei Versand
    -
    -
    -
    -
    - - - -
    - - - - - - - -
    -[MESSAGE] -
    -
    -
    -
    - - - - - - -
     {|Adresse|} [ANZEIGENUMMER][ANZEIGENAMEDE][STATUSICONS][ICONMENU] [BUTTONS2]  [ABBRECHEN]
    - -
    -
    -
    -
    - -
    -
    -
    -
    - -
    {|Vertrieb / Innendienst|} - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {|Provision|}:[PROVISION][MSGPROVISION] % (In Prozent für Vertrieb)
    {|BIC|}:[SWIFT][MSGSWIFT] {|IBAN|}:[IBAN][MSGIBAN]
    {|Mandatsreferenz|}:[MANDATSREFERENZ][MSGMANDATSREFERENZ] {|Lastschrift Art|}:[MANDATSREFERENZART][MSGMANDATSREFERENZART]  [MANDATSREFERENZWDHART][MSGMANDATSREFERENZWDHART]
    {|Mandatsreferenz Datum|}:[MANDATSREFERENZDATUM][MSGMANDATSREFERENZDATUM] {|Mandatsreferenz Änderung|}:[MANDATSREFERENZAENDERUNG][MSGMANDATSREFERENZAENDERUNG] Änderung seit letzter Lastschrift
     Firmen-SEPA[FIRMENSEPA][MSGFIRMENSEPA]
     Download SEPA Mandatsreferenz
    {|Bemerkung|}:[MANDATSREFERENZHINWEIS][MSGMANDATSREFERENZHINWEIS]
    +
    +
    + {|Paypal (bei Zahlungen)|} + + + + + + + + + + + + + + + +
    {|Inhaber|}:[PAYPALINHABER][MSGPAYPALINHABER] {|Paypal-Account|}:[PAYPAL][MSGPAYPAL]
    {|Währung|}:[PAYPALWAEHRUNG][MSGPAYPALWAEHRUNG] 
    +
    +
    +
    [MESSAGE] +
    +
    +
    +
    + + + + + + +
     {|Adresse|} [ANZEIGENUMMER][ANZEIGENAMEDE][STATUSICONS][ICONMENU] [BUTTONS2]  + [ABBRECHEN]
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Allgemeine Versandoptionen|} + + + + + + + + + + +
    {|Immer Papier Rechnung|}:[RECHNUNG_PAPIER][MSGRECHNUNG_PAPIER] Bei automatischen Versand wird immer eine Rechnung per Papier versendet (auch wenn eine E-Mail vorhanden ist)
    {|Anzahl Ausdrucke Rechnung abweichend|}:[RECHNUNG_ANZAHLPAPIER_ABWEICHEND] [RECHNUNG_ANZAHLPAPIER][MSGRECHNUNG_ANZAHLPAPIER] Anzahl der Ausdrucke beim Versand
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + E-Mail Empfänger (Im Dokument abschicken Dialog wenn E-Mail leer war oder Beleg neu angelegt wurde) + + + + + + + + + + + + + + + + + + + + + + + + + +
    {|Angebot|}:[ANGEBOT_EMAIL][MSGANGEBOT_EMAIL] Vorauswahl E-Mail Empfänger
    {|Auftrag|}:[AUFTRAG_EMAIL][MSGAUFTRAG_EMAIL] Vorauswahl E-Mail Empfänger
    {|Rechnung|}:[RECHNUNGS_EMAIL][MSGRECHNUNGS_EMAIL] Vorauswahl E-Mail Empfänger
    {|Gutschrift|}:[GUTSCHRIFT_EMAIL][MSGGUTSCHRIFT_EMAIL] Vorauswahl E-Mail Empfänger
    {|Lieferschein|}:[LIEFERSCHEIN_EMAIL][MSGLIEFERSCHEIN_EMAIL] Vorauswahl E-Mail Empfänger
    {|Bestellung|}:[BESTELLUNG_EMAIL][MSGBESTELLUNG_EMAIL] Vorauswahl E-Mail Empfänger
    +
    +
    +
    +
    +
    +
    + E-Mail Kopie Empfänger (Dokument abschicken) + + + + + + + + + + + + + + + + + + + + + + + + + +
    {|Angebot|}:[ANGEBOT_CC][MSGANGEBOT_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Auftrag|}:[AUFTRAG_CC][MSGAUFTRAG_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Rechnung|}:[RECHNUNG_CC][MSGRECHNUNG_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Gutschrift|}:[GUTSCHRIFT_CC][MSGGUTSCHRIFT_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Lieferschein|}:[LIEFERSCHEIN_CC][MSGLIEFERSCHEIN_CC] Zusätzlich eingetragener E-Mail Empfänger
    {|Bestellung|}:[BESTELLUNG_CC][MSGBESTELLUNG_CC] Zusätzlich eingetragener E-Mail Empfänger
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + Fax Kopie Empfänger + + + + + +
    {|AB per Fax bevorzugt|}:[ABPERFAX][MSGABPERFAX] Fax vorauswählen bei Versand
    +
    +
    +
    +
    +
    +
    +
    [MESSAGE] +
    +
    +
    +
    + + + + + + +
     {|Adresse|} [ANZEIGENUMMER][ANZEIGENAMEDE][STATUSICONS][ICONMENU] [BUTTONS2]  + [ABBRECHEN]
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Vertrieb / Innendienst|} + + + + +
    {|Provision|}:[PROVISION][MSGPROVISION] % (In Prozent für Vertrieb)
    @@ -614,227 +902,377 @@ $(document).ready(function(){
    {|Porto / Versandart|} - - - - - - -
    {|Porto frei aktiv|}:[PORTOFREI_AKTIV][MSGPORTOFREI_AKTIV] ab [PORTOFREIAB][MSGPORTOFREIAB] € Porto frei ab bestimmtem Umsatz (netto)
    {|Versandart|}:[VERSANDART][MSGVERSANDART]
    {|Keine Altersprüfung notwendig|}:[KEINEALTERSABFRAGE][MSGKEINEALTERSABFRAGE]
    -
    - +
    {|Porto frei aktiv|}:[PORTOFREI_AKTIV][MSGPORTOFREI_AKTIV] ab [PORTOFREIAB][MSGPORTOFREIAB] € Porto frei ab bestimmtem Umsatz (netto)
    {|Versandart|}:[VERSANDART][MSGVERSANDART]
    {|Keine Altersprüfung notwendig|}:[KEINEALTERSABFRAGE][MSGKEINEALTERSABFRAGE]
    + + + + + +
    +
    +
    +
    +
    + {|Porto bei Lieferant|} + + + + + + + +
    {|Porto frei aktiv|}:[PORTOFREILIEFERANT_AKTIV][MSGPORTOFREILIEFERANT_AKTIV] ab [PORTOFREIABLIEFERANT][MSGPORTOFREIABLIEFERANT] € Porto frei ab bestimmtem Umsatz (netto)
    +
    +
    +
    +
    +
    [STARTDISABLEVERBAND] +
    +
    +
    +
    + + + + + +
    {|Rabatte|}: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {|Rabatt 1|}:[RABATT1][MSGRABATT1] % {|Bonus 1|}:[BONUS1][MSGBONUS1] % ab [BONUS1_AB][MSGBONUS1_AB] € {|Bonus 6|}:[BONUS6][MSGBONUS6] % ab [BONUS6_AB][MSGBONUS6_AB] €
    {|Rabatt 2|}:[RABATT2][MSGRABATT2] % {|Bonus 2|}:[BONUS2][MSGBONUS2] % ab [BONUS2_AB][MSGBONUS2_AB] € {|Bonus 7|}:[BONUS7][MSGBONUS7] % ab [BONUS7_AB][MSGBONUS7_AB] €
    {|Rabatt 3|}:[RABATT3][MSGRABATT3] % {|Bonus 3|}:[BONUS3][MSGBONUS3] % ab [BONUS3_AB][MSGBONUS3_AB] € {|Bonus 8|}:[BONUS8][MSGBONUS8] % ab [BONUS8_AB][MSGBONUS8_AB] €
    {|Rabatt 4|}:[RABATT4][MSGRABATT4] % {|Bonus 4|}:[BONUS4][MSGBONUS4] % ab [BONUS4_AB][MSGBONUS4_AB] € {|Bonus 9|}:[BONUS9][MSGBONUS9] % ab [BONUS9_AB][MSGBONUS9_AB] €
    {|Rabatt 5|}:[RABATT5][MSGRABATT5] % {|Bonus 5|}:[BONUS5][MSGBONUS5] % ab [BONUS5_AB][MSGBONUS5_AB] € {|Bonus 10|}:[BONUS10][MSGBONUS10] % ab [BONUS10_AB][MSGBONUS10_AB] €
    +
    +
    + + + + + + + + + +
    {|Rabattinformationen|}:[RABATTINFORMATION][MSGRABATTINFORMATION]
    {|Filiale|}:[FILIALE][MSGFILIALE]
    +
    +
    +
    +
    [ENDEDISABLEVERBAND] +
    +
    +
    +
    +
    + {|Sonstiges|} + + + + + + + + +
    {|Geburtstag|}:[GEBURTSTAG][MSGGEBURTSTAG] [GEBURTSTAGKALENDER][MSGGEBURTSTAGKALENDER] im Kalender anzeigen {|Geburtstagskarte|}:[GEBURTSTAGSKARTE][MSGGEBURTSTAGSKARTE]
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Personalwesen Einstellungen|} + + + + + + + + +
    {|Arbeitszeit pro Woche|}:[ARBEITSZEITPROWOCHE][MSGARBEITSZEITPROWOCHE] in Stunden 
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Freifelder |} + [VORFREIFELD1] + + + + + + + [NACHFREIFELD1] [VORFREIFELD2] + + + + + + + [NACHFREIFELD2] [VORFREIFELD3] + + + + + + + [NACHFREIFELD3] [VORFREIFELD4] + + + + + + + [NACHFREIFELD4] [VORFREIFELD5] + + + + + + + [NACHFREIFELD5] [VORFREIFELD6] + + + + + + + [NACHFREIFELD6] [VORFREIFELD7] + + + + + + + [NACHFREIFELD7] [VORFREIFELD8] + + + + + + + [NACHFREIFELD8] [VORFREIFELD9] + + + + + + + [NACHFREIFELD9] [VORFREIFELD10] + + + + + + + [NACHFREIFELD10] [VORFREIFELD11] + + + + + + + [NACHFREIFELD11] [VORFREIFELD12] + + + + + + + [NACHFREIFELD12] [VORFREIFELD13] + + + + + + + [NACHFREIFELD13] [VORFREIFELD14] + + + + + + + [NACHFREIFELD14] [VORFREIFELD15] + + + + + + + [NACHFREIFELD15] [VORFREIFELD16] + + + + + + + [NACHFREIFELD16] [VORFREIFELD17] + + + + + + + [NACHFREIFELD17] [VORFREIFELD18] + + + + + + + [NACHFREIFELD18] [VORFREIFELD19] + + + + + + + [NACHFREIFELD19] [VORFREIFELD20] + + + + + + + [NACHFREIFELD20]
    [FREIFELD1BEZEICHNUNG]:[FREIFELD1][MSGFREIFELD1]  
    [FREIFELD2BEZEICHNUNG]:[FREIFELD2][MSGFREIFELD2]  
    [FREIFELD3BEZEICHNUNG]:[FREIFELD3][MSGFREIFELD3]  
    [FREIFELD4BEZEICHNUNG]:[FREIFELD4][MSGFREIFELD4]  
    [FREIFELD5BEZEICHNUNG]:[FREIFELD5][MSGFREIFELD5]  
    [FREIFELD6BEZEICHNUNG]:[FREIFELD6][MSGFREIFELD6]  
    [FREIFELD7BEZEICHNUNG]:[FREIFELD7][MSGFREIFELD7]  
    [FREIFELD8BEZEICHNUNG]:[FREIFELD8][MSGFREIFELD8]  
    [FREIFELD9BEZEICHNUNG]:[FREIFELD9][MSGFREIFELD9]  
    [FREIFELD10BEZEICHNUNG]:[FREIFELD10][MSGFREIFELD10]  
    [FREIFELD11BEZEICHNUNG]:[FREIFELD11][MSGFREIFELD11]  
    [FREIFELD12BEZEICHNUNG]:[FREIFELD12][MSGFREIFELD12]  
    [FREIFELD13BEZEICHNUNG]:[FREIFELD13][MSGFREIFELD13]  
    [FREIFELD14BEZEICHNUNG]:[FREIFELD14][MSGFREIFELD14]  
    [FREIFELD15BEZEICHNUNG]:[FREIFELD15][MSGFREIFELD15]  
    [FREIFELD16BEZEICHNUNG]:[FREIFELD16][MSGFREIFELD16]  
    [FREIFELD17BEZEICHNUNG]:[FREIFELD17][MSGFREIFELD17]  
    [FREIFELD18BEZEICHNUNG]:[FREIFELD18][MSGFREIFELD18]  
    [FREIFELD19BEZEICHNUNG]:[FREIFELD19][MSGFREIFELD19]  
    [FREIFELD20BEZEICHNUNG]:[FREIFELD20][MSGFREIFELD20]  
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Geodaten|} + + + + + + + + + + + + + + + +
    {|Breitengrad|}:[LAT][MSGLAT] 
    Längengrad:[LNG][MSGLNG] 
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + Kennung (für vereinfachte Imports für Zeitferfassungen, Artikel-Imports, etc.) + + + + + + + + +
    {|Eindeutige Kennung|}:[KENNUNG][MSGKENNUNG] (Grossbuchstaben, keine Sonderzeichen) 
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|Logbuch|} + + + + + +
    {|Einträge|}:[LOGFILE]
    +
    +
    +
    +
    +
    + + - - - -
    -
    -
    -
    - -
    {|Porto bei Lieferant|} - - - -
    {|Porto frei aktiv|}:[PORTOFREILIEFERANT_AKTIV][MSGPORTOFREILIEFERANT_AKTIV] ab [PORTOFREIABLIEFERANT][MSGPORTOFREIABLIEFERANT] € Porto frei ab bestimmtem Umsatz (netto)
    -
    - -
    -
    -
    -
    - - -[STARTDISABLEVERBAND] -
    -
    -
    -
    - - -
    {|Rabatte|}: - - - - - - - - - - - - - - - - - - - - - - -
    {|Rabatt 1|}:[RABATT1][MSGRABATT1] % {|Bonus 1|}:[BONUS1][MSGBONUS1] % ab [BONUS1_AB][MSGBONUS1_AB] € {|Bonus 6|}:[BONUS6][MSGBONUS6] % ab [BONUS6_AB][MSGBONUS6_AB] €
    {|Rabatt 2|}:[RABATT2][MSGRABATT2] % {|Bonus 2|}:[BONUS2][MSGBONUS2] % ab [BONUS2_AB][MSGBONUS2_AB] € {|Bonus 7|}:[BONUS7][MSGBONUS7] % ab [BONUS7_AB][MSGBONUS7_AB] €
    {|Rabatt 3|}:[RABATT3][MSGRABATT3] % {|Bonus 3|}:[BONUS3][MSGBONUS3] % ab [BONUS3_AB][MSGBONUS3_AB] € {|Bonus 8|}:[BONUS8][MSGBONUS8] % ab [BONUS8_AB][MSGBONUS8_AB] €
    {|Rabatt 4|}:[RABATT4][MSGRABATT4] % {|Bonus 4|}:[BONUS4][MSGBONUS4] % ab [BONUS4_AB][MSGBONUS4_AB] € {|Bonus 9|}:[BONUS9][MSGBONUS9] % ab [BONUS9_AB][MSGBONUS9_AB] €
    {|Rabatt 5|}:[RABATT5][MSGRABATT5] % {|Bonus 5|}:[BONUS5][MSGBONUS5] % ab [BONUS5_AB][MSGBONUS5_AB] € {|Bonus 10|}:[BONUS10][MSGBONUS10] % ab [BONUS10_AB][MSGBONUS10_AB] €
    - -
    - - - - -
    {|Rabattinformationen|}:[RABATTINFORMATION][MSGRABATTINFORMATION]
    {|Filiale|}:[FILIALE][MSGFILIALE]
    - - -
    -
    -
    -
    -[ENDEDISABLEVERBAND] - -
    -
    -
    -
    -
    {|Sonstiges|} - - - - - -
    {|Geburtstag|}:[GEBURTSTAG][MSGGEBURTSTAG] [GEBURTSTAGKALENDER][MSGGEBURTSTAGKALENDER] im Kalender anzeigen {|Geburtstagskarte|}:[GEBURTSTAGSKARTE][MSGGEBURTSTAGSKARTE]
    - - -
    -
    -
    -
    -
    -
    -
    -
    -
    {|Finanzbuchhaltung|} - - - - - - - - - - - - - - - - -
    Sachkonto für Verbindlichkeiten-Vorkontierung:[SACHKONTO]
    {|Reisekosten|}:[VERRECHNUNGSKONTOREISEKOSTEN][MSGVERRECHNUNGSKONTOREISEKOSTEN] Verrechnungskonto 
    {|Kredit Limit|}:[KREDITLIMIT][MSGKREDITLIMIT] in € 
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    {|Personalwesen Einstellungen|} - - - - -
    {|Arbeitszeit pro Woche|}:[ARBEITSZEITPROWOCHE][MSGARBEITSZEITPROWOCHE] in Stunden 
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    {|Freifelder |} - -[VORFREIFELD1][NACHFREIFELD1] -[VORFREIFELD2][NACHFREIFELD2] -[VORFREIFELD3][NACHFREIFELD3] -[VORFREIFELD4][NACHFREIFELD4] -[VORFREIFELD5][NACHFREIFELD5] -[VORFREIFELD6][NACHFREIFELD6] -[VORFREIFELD7][NACHFREIFELD7] -[VORFREIFELD8][NACHFREIFELD8] -[VORFREIFELD9][NACHFREIFELD9] -[VORFREIFELD10][NACHFREIFELD10] -[VORFREIFELD11][NACHFREIFELD11] -[VORFREIFELD12][NACHFREIFELD12] -[VORFREIFELD13][NACHFREIFELD13] -[VORFREIFELD14][NACHFREIFELD14] -[VORFREIFELD15][NACHFREIFELD15] -[VORFREIFELD16][NACHFREIFELD16] -[VORFREIFELD17][NACHFREIFELD17] -[VORFREIFELD18][NACHFREIFELD18] -[VORFREIFELD19][NACHFREIFELD19] -[VORFREIFELD20][NACHFREIFELD20] - -
    [FREIFELD1BEZEICHNUNG]:[FREIFELD1][MSGFREIFELD1]  
    [FREIFELD2BEZEICHNUNG]:[FREIFELD2][MSGFREIFELD2]  
    [FREIFELD3BEZEICHNUNG]:[FREIFELD3][MSGFREIFELD3]  
    [FREIFELD4BEZEICHNUNG]:[FREIFELD4][MSGFREIFELD4]  
    [FREIFELD5BEZEICHNUNG]:[FREIFELD5][MSGFREIFELD5]  
    [FREIFELD6BEZEICHNUNG]:[FREIFELD6][MSGFREIFELD6]  
    [FREIFELD7BEZEICHNUNG]:[FREIFELD7][MSGFREIFELD7]  
    [FREIFELD8BEZEICHNUNG]:[FREIFELD8][MSGFREIFELD8]  
    [FREIFELD9BEZEICHNUNG]:[FREIFELD9][MSGFREIFELD9]  
    [FREIFELD10BEZEICHNUNG]:[FREIFELD10][MSGFREIFELD10]  
    [FREIFELD11BEZEICHNUNG]:[FREIFELD11][MSGFREIFELD11]  
    [FREIFELD12BEZEICHNUNG]:[FREIFELD12][MSGFREIFELD12]  
    [FREIFELD13BEZEICHNUNG]:[FREIFELD13][MSGFREIFELD13]  
    [FREIFELD14BEZEICHNUNG]:[FREIFELD14][MSGFREIFELD14]  
    [FREIFELD15BEZEICHNUNG]:[FREIFELD15][MSGFREIFELD15]  
    [FREIFELD16BEZEICHNUNG]:[FREIFELD16][MSGFREIFELD16]  
    [FREIFELD17BEZEICHNUNG]:[FREIFELD17][MSGFREIFELD17]  
    [FREIFELD18BEZEICHNUNG]:[FREIFELD18][MSGFREIFELD18]  
    [FREIFELD19BEZEICHNUNG]:[FREIFELD19][MSGFREIFELD19]  
    [FREIFELD20BEZEICHNUNG]:[FREIFELD20][MSGFREIFELD20]  
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    {|Geodaten|} - - - -
    {|Breitengrad|}:[LAT][MSGLAT] 
    Längengrad:[LNG][MSGLNG] 
    - - -
    -
    -
    -
    -
    -
    -
    -
    -
    Kennung (für vereinfachte Imports für Zeitferfassungen, Artikel-Imports, etc.) - - - - -
    {|Eindeutige Kennung|}:[KENNUNG][MSGKENNUNG] (Grossbuchstaben, keine Sonderzeichen) 
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    {|Logbuch|} - - - -
    {|Einträge|}:[LOGFILE]
    - -
    -
    -
    -
    - - - - - - - - From a1affd18d8045b0e9c7be396b47b9836b4add58d Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Sat, 6 Jan 2024 18:29:59 +0100 Subject: [PATCH 36/62] wareneingang redesign adding to packet and booking --- .../content/wareneingang_manuellerfassen.tpl | 4 +- .../content/wareneingang_mitarbeiter.tpl | 2 +- .../content/wareneingang_paketinhalt.tpl | 342 ++++++++++-------- www/pages/wareneingang.php | 231 ++++++++++-- www/themes/new/images/lagerplatzgo.png | Bin 0 -> 10879 bytes www/themes/new/images/lagerplatzgostop.png | Bin 0 -> 11286 bytes www/themes/new/images/lagerplatzstop.png | Bin 0 -> 1015 bytes 7 files changed, 379 insertions(+), 200 deletions(-) create mode 100644 www/themes/new/images/lagerplatzgo.png create mode 100644 www/themes/new/images/lagerplatzgostop.png create mode 100644 www/themes/new/images/lagerplatzstop.png diff --git a/www/pages/content/wareneingang_manuellerfassen.tpl b/www/pages/content/wareneingang_manuellerfassen.tpl index 69ac8c17..c273e158 100644 --- a/www/pages/content/wareneingang_manuellerfassen.tpl +++ b/www/pages/content/wareneingang_manuellerfassen.tpl @@ -10,8 +10,10 @@ - + + +
     {|Scannen|}: {|Artikel|}: {|Menge|}:
    diff --git a/www/pages/content/wareneingang_mitarbeiter.tpl b/www/pages/content/wareneingang_mitarbeiter.tpl index e353b738..02a53e44 100644 --- a/www/pages/content/wareneingang_mitarbeiter.tpl +++ b/www/pages/content/wareneingang_mitarbeiter.tpl @@ -22,7 +22,7 @@


     

     
    diff --git a/www/pages/content/wareneingang_paketinhalt.tpl b/www/pages/content/wareneingang_paketinhalt.tpl index 75773e67..4aa8038c 100644 --- a/www/pages/content/wareneingang_paketinhalt.tpl +++ b/www/pages/content/wareneingang_paketinhalt.tpl @@ -1,162 +1,188 @@
    - - - - - - [BEFORETAB1] -
    - [TAB1START] - [MESSAGE1] -
    -
    -
    -
    -
    -
    - {|[LEGENDE]|} - - - - - - - [ISLIEFERANTSTART] - - [ISLIEFERANTENDE] -
    {|Status|}:
    Abgeschlossen am [DATUM_ABGESCHLOSSEN] durch [BEARBEITER_ABGESCHLOSSEN]
    {|Lieferschein-Nr.|}:
    {|Rechnung-Nr.|}:
    {|Bemerkung|}:
    {|Ziellager|}:
    Wenn nicht angegeben, wird das Standardlager des Artikels bebucht.
    -
    -
    -
    -
    -
    -
    - [BUTTONS] - [BEFOREFRM] - [AFTERFRM] - [DISTRIINHALTBUTTONS] - [BEFOREFRM] - [AFTERFRM] - - - {|Aktionen|} - [BEFOREMANUELLERFASSEN] - - [AFTERMANUELLERFASSEN] - [ISLIEFERANTSTART] - - - [ISLIEFERANTENDE] - - [ISLIEFERANTSTART] - - [ISLIEFERANTENDE] - -
    - -
    - -
    - -
    - -
    - -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - [TAB1] -
    -
    -
    -
    -
    -
    -
    -
    - [TAB1_SECOND] -
    -
    -
    -
    -
    - [TAB1ENDE] -
    - [AFTERTAB1] - [BEFORETAB2] -
    - - [TAB2START] - [MESSAGE2] - -
    -
    -
    -
    - [TAB2] -
    [BUTTONS2]
    -
    -
    -
    -
    -
    - {|Aktionen|} - [BUTTONS] -
    -
    -
    -
    -
    - [TAB2ENDE] -
    - [AFTERTAB2] - [BEFORETAB3] -
    - [TAB3START] - [MESSAGE3] -
    -
    -
    -
    - [TAB3] -
    -
    -
    -
    -
    - {|Aktionen|} - [BUTTONS] -
    -
    -
    -
    -
    - [TAB3ENDE] -
    - [AFTERTAB3] -
    + + + + [BEFORETAB1] +
    [TAB1START] [MESSAGE1] [MESSAGE] +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {|[LEGENDE]|} + + + + + + + + + + + + + + + + + +
    {|Status|}: + +
    Abgeschlossen am [DATUM_ABGESCHLOSSEN] durch [BEARBEITER_ABGESCHLOSSEN]
    {|Lieferschein-Nr.|}: + +
    {|Rechnung-Nr.|}: + +
    +
    +
    +
    +
    +
    +
    + + + + + + [ISLIEFERANTSTART] + [ISLIEFERANTENDE] +
    {|Bemerkung|}: + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + [TAB1] +
    +
    +
    +
    +
    +
    +
    +
    +
    [BUTTONS] [BEFOREFRM] [AFTERFRM] [DISTRIINHALTBUTTONS] [BEFOREFRM] [AFTERFRM] + + + {|Aktionen|} + + + + [ISLIEFERANTSTART] + + + + [ISLIEFERANTENDE] +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    [TAB1_SECOND]
    +
    +
    +
    +
    + + + {|Aktionen|} + [BEFOREMANUELLERFASSEN] + + + + [AFTERMANUELLERFASSEN] + + + + + + + + + + + + +
    + +
    + +
    + {|Ziellager|}:  +
    + +
    + +
    +
    +
    +
    +
    +
    +
    [TAB1ENDE] +
    [AFTERTAB1] [BEFORETAB2] +
    [TAB2START] [MESSAGE2] +
    +
    +
    +
    [TAB2] +
    [BUTTONS2]
    +
    +
    +
    +
    +
    + {|Aktionen|} [BUTTONS]
    +
    +
    +
    +
    [TAB2ENDE]
    [AFTERTAB2] [BEFORETAB3] +
    [TAB3START] [MESSAGE3] +
    +
    +
    +
    [TAB3]
    +
    +
    +
    +
    + {|Aktionen|} [BUTTONS]
    +
    +
    +
    +
    [TAB3ENDE]
    [AFTERTAB3] diff --git a/www/pages/wareneingang.php b/www/pages/wareneingang.php index 9c769ca1..418a60d7 100644 --- a/www/pages/wareneingang.php +++ b/www/pages/wareneingang.php @@ -83,24 +83,27 @@ class Wareneingang { $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1"); $subwhere = " AND (a.adresse=$adresse OR ( (e.gueltig_bis >= NOW() OR e.gueltig_bis='0000-00-00' OR e.gueltig_bis IS NULL) AND e.adresse=$adresse) )"; - $addjoin = " RIGHT JOIN einkaufspreise e ON e.adresse=a.adresse "; + $addjoin = " INNER JOIN einkaufspreise e ON e.adresse=a.adresse AND e.artikel = a.id "; $groupby = " GROUP BY a.id "; } - $sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.nummer as nummer, - CONCAT('',a.name_de,'',if(a.intern_gesperrt,CONCAT('', - - if(a.variante AND a.variante_von > 0,CONCAT(name_de,' (Variante von ',ifnull((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),name_de) - - ,''), - - if(a.variante AND a.variante_von > 0,CONCAT(name_de,' (Variante von ',ifnull((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),name_de) - - )) as name_de, - CONCAT('',a.name_de,'',trim((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id))+0) as lagerbestand, - p.abkuerzung as projekt, a.id as menu - FROM artikel a - LEFT JOIN projekt p ON p.id=a.projekt " . $addjoin; + $sql = " + SELECT SQL_CALC_FOUND_ROWS + a.id, + a.nummer as nummer, + CONCAT('',a.name_de,'',if(a.intern_gesperrt,CONCAT('', + if ( + a.variante AND a.variante_von > 0,CONCAT(name_de,' (Variante von ',ifnull((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),name_de) + ,''), + if(a.variante AND a.variante_von > 0,CONCAT(name_de,' (Variante von ',ifnull((SELECT tmp.nummer FROM artikel tmp WHERE a.variante_von=tmp.id LIMIT 1),''),')'),name_de) + ) + ) as name_de, + CONCAT('',a.name_de,'',trim((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=a.id))+0) as lagerbestand, + p.abkuerzung as projekt, + a.id as menu + FROM + artikel a + LEFT JOIN projekt p ON p.id=a.projekt " . $addjoin; $where = "a.geloescht=0 $subwhere " . $this->app->erp->ProjektRechte(); @@ -115,10 +118,19 @@ class Wareneingang { $adresse = $this->app->DB->Select("SELECT adresse FROM paketannahme WHERE id='$id' LIMIT 1"); $wareneingangauftragzubestellung = $this->app->erp->Firmendaten('wareneingangauftragzubestellung'); + $vorschlag = " + if( + bp.menge-bp.geliefert-COALESCE((SELECT TRIM(SUM(menge))+0 FROM paketdistribution WHERE vorlaeufig = 1 AND bestellung_position = bp.id),0) > 0, + bp.menge-bp.geliefert-COALESCE((SELECT TRIM(SUM(menge))+0 FROM paketdistribution WHERE vorlaeufig = 1 AND bestellung_position = bp.id),0), + 0 + ) + "; + + $input_for_menge = "CONCAT( 'Bei Lieferant: ',bp.bezeichnunglieferant, @@ -962,14 +974,28 @@ class Wareneingang { */ - $heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Menge', 'Bemerkung','Bearbeiter', ''); - $width = array( '5%', '5%', '5%', '30%', '5%', '15%', '5%', '30%'); + $heading = array('Lieferant-Art.-Nr.', 'Art.-Nummer', 'Bestellung', 'Beschreibung', 'Menge', 'Bemerkung','Bearbeiter', '','',''); + $width = array( '5%', '5%', '5%', '30%', '5%', '15%', '5%', '1%','1%','1%'); $findcols = array('p.nummer', 'p.bestellbezug', 'p.name', 'p.menge', 'p.bemerkung','p.bearbeiter'); $searchsql = array('p.nummer', 'p.name', 'p.bemerkung'); + $alignright = array('5'); $defaultorder = 1; $defaultorderdesc = 0; + + $icon_nicht_eingelagert = ""; + $icon_eingelagert = ""; + $icon_kein_lagerplatz = ""; + $icon_lagerplatz = ""; + + $deletelink = array( + "
    " . " 'paketannahme'], + '&posid=', + ['sql' => 'paketdistribution.id'], + "\">Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\"> 
    " + ); $sql = "SELECT SQL_CALC_FOUND_ROWS p.nummer, @@ -979,7 +1005,9 @@ class Wareneingang { p.name, p.menge, p.bemerkung, - p.bearbeiter + p.bearbeiter, + p.icon, + p.menu FROM ( SELECT @@ -989,12 +1017,30 @@ class Wareneingang { artikel.name_de as name, " . $this->app->erp->FormatMenge("paketdistribution.menge") . " as menge, paketdistribution.bemerkung, - paketdistribution.bearbeiter - FROM paketdistribution - INNER JOIN artikel ON artikel.id = paketdistribution.artikel + paketdistribution.bearbeiter, + CONCAT( + '
    ', + if ( + paketdistribution.vorlaeufig, + CONCAT( + '$icon_nicht_eingelagert', + if ( + artikel.lager_platz = 0, + '$icon_kein_lagerplatz', + '$icon_lagerplatz' + ) + ), + '$icon_eingelagert' + ), + '
    ' + ) + AS icon, + if (paketdistribution.vorlaeufig,".$this->app->erp->ConcatSQL($deletelink).",'') as menu + FROM paketdistribution + LEFT JOIN artikel ON artikel.id = paketdistribution.artikel LEFT JOIN bestellung_position ON bestellung_position = bestellung_position.id LEFT JOIN bestellung on bestellung_position.bestellung = bestellung.id - WHERE paketannahme = $id AND vorlaeufig IS NULL + WHERE paketannahme = $id ) AS p"; $where = ""; @@ -1126,8 +1172,10 @@ class Wareneingang { $this->app->ActionHandler("stornieren", "WareneingangStornieren"); $this->app->ActionHandler("settings", "WareneingangSettings"); + $this->app->ActionHandler("deletepos", "WareneingangPositionLoeschen"); + $this->app->DefaultActionHandler("list"); - $this->app->erp->Headlines('Wareneinang'); + $this->app->erp->Headlines('Wareneingang'); $this->app->ActionHandlerListen($app); } @@ -1204,7 +1252,6 @@ class Wareneingang { $this->app->Tpl->Set('ID', $id); $this->app->Tpl->Add('KURZUEBERSCHRIFT', ' Paketannahme / Leistungserfassung'); $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=paketannahme', 'Neu'); - $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=list', 'Übersicht'); $this->app->erp->RunMenuHook('wareneingangpaket'); $this->app->erp->MenuEintrag( 'index.php?module=wareneingang&action=settings&menu=paket', @@ -1647,9 +1694,10 @@ class Wareneingang { } public function WareneingangPaketDistriInhalt() { - $this->WareneingangPaketMenu(); $id = $this->app->Secure->GetGET('id'); + $this->app->erp->MenuEintrag('index.php?module=wareneingang&action=distriinhalt&id='.$id, 'Details'); + $this->app->Tpl->Add('KURZUEBERSCHRIFT', ' Paketannahme / Leistungserfassung'); $cmd = $this->app->Secure->GetGET('cmd'); $lsnr = $this->app->Secure->GetPOST('lsnr'); $renr = $this->app->Secure->GetPOST('renr'); @@ -1855,7 +1903,7 @@ class Wareneingang { } break; - case 'speichern': + case 'hinzufuegen': $menge_input = $this->app->Secure->GetPOSTArray(); $mengen = array(); @@ -1865,9 +1913,9 @@ class Wareneingang { if ((strpos($key,'menge_') === 0) && ($menge !== '')) { $bestellposition = substr($key,'6'); - if ($menge >= 0) { // Allow 0 for reset of saved value + if ($menge > 0) { // Gather info bestellung - $bparr = $this->app->DB->SelectRow("SELECT * FROM bestellung INNER JOIN bestellung_position ON bestellung_position.bestellung = bestellung.id INNER JOIN artikel ON bestellung_position.artikel = artikel.id WHERE bestellung_position.id='$bestellposition' LIMIT 1"); + $bparr = $this->app->DB->SelectRow("SELECT bp.artikel, a.nummer, b.projekt, b.belegnr, bp.vpe, bp.menge FROM bestellung b INNER JOIN bestellung_position bp ON bp.bestellung = b.id INNER JOIN artikel a ON bp.artikel = a.id WHERE bp.id='$bestellposition' LIMIT 1"); $artikel = $bparr['artikel']; $artikel_nr = $bparr['nummer']; $projekt = $bparr['projekt']; @@ -1876,8 +1924,8 @@ class Wareneingang { $menge_bestellung = $bparr['menge']; // Check existing preliminary value - $sql = "SELECT id FROM paketdistribution WHERE paketannahme = ".$id." AND bestellung_position = ".$bestellposition." AND vorlaeufig = 1 LIMIT 1"; - $preliminary = $this->app->DB->Select($sql); + $sql = "SELECT id, menge FROM paketdistribution WHERE paketannahme = ".$id." AND bestellung_position = ".$bestellposition." AND vorlaeufig = 1 LIMIT 1"; + $preliminary = $this->app->DB->SelectRow($sql); if (empty($preliminary)) { $sql = "INSERT INTO paketdistribution( @@ -1904,20 +1952,101 @@ class Wareneingang { '$menge', '$vpe', '', - '$bemerkung', + '', '$bestellposition', 1 )"; $this->app->DB->Insert($sql); } else { - $sql = "UPDATE paketdistribution SET menge = ".$menge." WHERE id = ".$preliminary; + $menge = $menge + $preliminary['menge']; + if ($menge > $bparr['menge']-$bparr['geliefert']) { + $menge = $bparr['menge']-$bparr['geliefert']; + } + $sql = "UPDATE paketdistribution SET menge = ".$menge." WHERE id = ".$preliminary['id']; $this->app->DB->Insert($sql); } } } } break; + case 'vorlaeufige_buchen': + $ziellager_from_form = $this->app->erp->ReplaceLagerPlatz(true,$this->app->Secure->GetPOST('ziellager'),true); // Parameters: Target db?, value, from form? + $sql = "SELECT * FROM paketdistribution WHERE paketannahme = ".$id." AND vorlaeufig = 1"; + $positionen = $this->app->DB->SelectArr($sql); + foreach ($positionen as $position) { + $bemerkung = ""; + $menge = $position['menge']; + $bestellposition = $position['bestellung_position']; + if ($menge > 0) { + // Gather info bestellung + $bparr = $this->app->DB->SelectRow(" + SELECT + * + FROM + bestellung + INNER JOIN + bestellung_position ON bestellung_position.bestellung = bestellung.id + INNER JOIN + artikel ON bestellung_position.artikel = artikel.id + WHERE + bestellung_position.id='$bestellposition' + LIMIT 1 + "); + $artikel = $bparr['artikel']; + $artikel_nr = $bparr['nummer']; + $projekt = $bparr['projekt']; + $bestellung_belegnr = $bparr['belegnr']; + $vpe = $bparr['vpe']; + $menge_bestellung = $bparr['menge']; + if ($bparr['lagerartikel']) { + // Get Lager_platz + if (empty($ziellager_from_form)) { + $lager = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id='" . $artikel . "' LIMIT 1"); + if (empty($lager)) { + $msg .= '
    Kein Ziellagerplatz gefunden für Artikel: '.$artikel_nr.'
    '; + continue; + } + } + else { + $lager = $ziellager_from_form; + } + + // Put stock + $this->app->erp->LagerEinlagern($artikel, $menge, $lager, '', "Wareneingang Paket $id, Bestellung $bestellung_belegnr", '', $id); + $lagerplatz_name = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE lager_platz.id = $lager LIMIT 1"); + $bemerkung = $lagerplatz_name; + } + // Increase bestellung_position geliefert_menge + $geliefert = $this->app->DB->Select("SELECT ifnull(geliefert,0) FROM bestellung_position WHERE id='$bestellposition' LIMIT 1"); + $geliefert += $menge; + + $sql = "UPDATE bestellung_position SET geliefert='$geliefert' WHERE id='$bestellposition' LIMIT 1"; + $this->app->DB->Update($sql); + + // Write paketdistribution + $sql = "UPDATE + paketdistribution + SET + bearbeiter = '". $this->app->User->GetName()."', + zeit = NOW(), + bemerkung = '".$bemerkung."', + vorlaeufig = NULL + WHERE + id = ".$position['id']." + "; + $this->app->DB->Update($sql); + } + } + + break; case 'abschliessen': + + $sql = "SELECT id FROM paketdistribution WHERE paketannahme = ".$id." AND vorlaeufig = 1"; + + $vorlaeufige = $this->app->DB->SelectArr($sql); + if (!empty($vorlaeufige)) { + break; + } // Save header and finish $sql = "UPDATE paketannahme SET status='abgeschlossen', datum_abgeschlossen = NOW(), bearbeiter_abgeschlossen = '".$this->app->User->GetName()."' WHERE id='$id'"; $this->app->DB->Update($sql); @@ -2006,6 +2135,15 @@ class Wareneingang { $datum_abgeschlossen = $paketannahme['datum_abgeschlossen']; $bearbeiter_abgeschlossen = $paketannahme['bearbeiter_abgeschlossen']; + $sql = "SELECT id FROM paketdistribution WHERE paketannahme = ".$id." AND vorlaeufig = 1"; + $vorlaeufige = $this->app->DB->SelectArr($sql); + if (!empty($vorlaeufige)) { + $this->app->YUI->Message('warning','Nicht eingebuchte Positionen vorhanden'); + $this->app->Tpl->Set('ABSCHLIESSENHIDDEN','hidden'); + } else { + $this->app->Tpl->Set('BUCHENHIDDEN','hidden'); + } + $addressRow = empty($adresse) ? null : $this->app->DB->SelectRow( sprintf( 'SELECT `name`,`kundennummer`,`lieferantennummer` @@ -2035,8 +2173,8 @@ class Wareneingang { } else { $this->app->Tpl->Set('ISLIEFERANTSTART', ''); - $this->app->Tpl->Set('TAB1START', ''); - $this->app->Tpl->Set('TAB1ENDE', ''); +/* $this->app->Tpl->Set('TAB1START', ''); + $this->app->Tpl->Set('TAB1ENDE', '');*/ // $this->app->Tpl->Set('BEFORETAB1', ''); } @@ -2058,7 +2196,7 @@ class Wareneingang { $this->app->Tpl->Set('LEGENDE', "Paket Nr.$id vom $datum erfassen für Adresse '" . $addressRow['name'] . "':"); } - $this->app->Tpl->Add('TAB1_SECOND', "Paketinhalt / Leistungserfassung (eingebucht):"); + $this->app->Tpl->Add('TAB1_SECOND', "Paketinhalt / Leistungserfassung:"); $this->app->YUI->TableSearch('TAB1_SECOND', 'paketdistribution_list', "show", "", "", basename(__FILE__), __CLASS__); $this->app->erp->RunHook('wareneingang_distriinhalt', 1, $id); @@ -2087,9 +2225,14 @@ class Wareneingang { $this->app->Tpl->Set('STATUS',$status); if ($status == 'abgeschlossen') { - $this->app->Tpl->Set('ABSCHLIESSENHIDDEN','hidden'); - $this->app->Tpl->Set('DATUM_ABGESCHLOSSEN',$datum_abgeschlossen); - $this->app->Tpl->Set('BEARBEITER_ABGESCHLOSSEN',$bearbeiter_abgeschlossen); + $this->app->Tpl->Set('HINZUFUEGENHIDDEN','hidden'); + if (!empty($bearbeiter_abgeschlossen)) { + $this->app->Tpl->Set('ABSCHLIESSENHIDDEN','hidden'); + $this->app->Tpl->Set('DATUM_ABGESCHLOSSEN',$datum_abgeschlossen); + $this->app->Tpl->Set('BEARBEITER_ABGESCHLOSSEN',$bearbeiter_abgeschlossen); + } else { + $this->app->Tpl->Set('ABGESCHLOSSENHIDDEN','hidden'); + } } else { $this->app->Tpl->Set('ABGESCHLOSSENHIDDEN','hidden'); } @@ -3310,5 +3453,13 @@ class Wareneingang { $this->app->User->SetParameter('wareneingang_action', 'paketannahme'); $this->app->Tpl->Parse('PAGE', 'wareneingang_paketannahme.tpl'); } + + function WareneingangPositionLoeschen() { + $id = $this->app->Secure->GetGET('id'); + $posid = $this->app->Secure->GetGET('posid'); + $sql = "DELETE FROM paketdistribution WHERE id = ".$posid." AND vorlaeufig = 1"; + $this->app->DB->Delete($sql); + header('Location: index.php?module=wareneingang&wareneingang&action=distriinhalt&id='.$id); + } } diff --git a/www/themes/new/images/lagerplatzgo.png b/www/themes/new/images/lagerplatzgo.png new file mode 100644 index 0000000000000000000000000000000000000000..48cf7cdb536e801dd2a460b02127ee30bb3f4225 GIT binary patch literal 10879 zcmeI1bySpF+y6mAN*XDVRzhm%0R)5rMnby7VFHF4grQRrDM3P|8)*sYloF7Vjv)l; zZV*Ly2hVw)=bZI>|9RH>z5ktA>#n`8>$CUu-PgU>y=RAMYpLEKVIsl7!MOoeQ`W^^ zX|E0w{ZbK13rFvekyVK>7y^)=0P9#*lWRy zV5UNQS>B0XrK!6oB&$DvDS4g`_y^23`Y(8XK3v;nRrhYZJgfJ!nD@7pjX=@!E$&BL z{GvY=3FMa-JYwj!SBbiN_$2d3ZM4U!P@1U2>4y@1b$_b|R;P=LhaL>yzphRDcXEBD zkPjeFT&uH@|OtCaOxRxNwsw3eg3_^eBaejYwfEF`SO0BUx1wH^bX^%&flV{yi zyCB!~$ebACy}r#jUo;x~x{pQ1ea;YSus9ieWYzsm3P~~7v||0G?3iigr6Gft>DAAtANCSpHG{{NX9Lf>G)TcQ=avUy_WV{b%b^7sA?|~?;UQg$}f+_wdV5_f%u+o zpK^OwTB*%H%92C9l%12aJ@hpXq!dBJ0ON7EA5@GcVXb%K-*ZO?I^mXUk954bD}VEIYIVN4*ShLOCEg06(}po7a8fR=mSoFh|o2Ke0pPO2_GAicvsyt1?ft4 zpMy`#TAKLe9KR|Jh!OwUog|Yu%zVgi-B z614GZZlsV=`?q5X&lsjHp~sIUic0yNtYOD9)m3ICIrRq2ehCGo%|>NYRvor<9~&Nx z?7oSZ`*_~%lY_v_RCJO*6pe70FaS?-35|ACJhb$&bPzcjphZ z%pr7ey;m#(!%CIxcPN`uk1a1ZhR#nSY;6i1qj2t)wQ1;>DKorjW(l@c&1CSolWY2T zsx$2krb&0h&kC&&M!R(&xQ+Jux`noHFgAhgiJy7B`!wyR;ddILsP(!AT+HsfX#F@444(&=1*4<4sn8o7`X4J7zSus}xc&9^Wdw)|qYY zFnl+(M~jxro{*#F>rJ+BdT!C0EJoj9hL^hE7-;3x+L;(phZz#z&RaNN@B-Xnx#K!@2pd@9NSEh|iwE#7D;YF_*_rVu)tFRy!z@OD0E1Jlmm(q>M-R`r`^Xv_n6m3M2*3C_j2= z>y$@hLmnEc_?VPy`YcR4SGm<9A3uk2QYUa(uOV}ctZ??1XW^WQ?uwG5Ge8|rL#cH& z!y~D))^*Z^1h7S>R>@ORPVsUCFR!xYxcHOIL%P6|F}9stCZfWur=#JYhilo}XN;cB z#A$Bhav!QF-mka)c2C0+P4lMVeWruVT4GBM8OE&KYmsx_=Q_c)xUmcT=M@9g>?_(N z@NS20!$?X}Q*{}thoYFpJS{~&V{vDCW zW<*Mxy29re9=iwKu@$id;q`b4m6ZMAEoQh0$qb>&KUnJX)K6OQLp2j(>sH)D4{Eee z-A>@Lt@RIB;yxKDoe~_=Xl5983s=Vh*bGNRlz{w7nmx2~+PZi|8O|$=enPMD)ka(} zYn)`+|#7C-U3{mUjStZ=>0TS(%AY$_$n! zsY*`WF`g7r{|iA zh2>i2Ca!7iZNFW#nPZuGYBj^>dh%{5#vBuNlShWC4DeF5pW2!YWbu+D#EQEwK@7M4 zT`5q5Yn9w7cXqR1M)p>K;+Pvv#|}+SLEp>Ur3saG{3=|c`tF`_bD`op8BygO+=Cg@ z6khJ2TGUWk=Wu!8J;xvog-;pE?}AQqa0!3FN1tO9GRe{0VOftj;?yJ)(L`(hhz@?9 zbw8H8p@Mk4pOX1j+CmO|!aU&dJF(v@W`bq|1EX8$tGY)W;$Reu#I$ zF!N~Oooe>mKV)?vYn-Zs%4=uBt&jWDuM$E_AUU$bwAk(5u51HFNLU(tS8_PIS-<|@P z-B}&sQMF9!@=G9FwOfks&j!T(bfW=FiLq1LQkl*q_!)_X2@Trw{>(;cN1{Wkczud| zJ``ny`_A;U-`cGdz_a&yao&{IQO~^$#@LmKZhi@eCFn)=&Bvy7l#DbmO$WWU2YH|F zCXTwjU%<7&kNA<^~4bdp=F&mSCVvIF+}o-a#?^% z&FgOOc5^vDJ1(z(#+>COJKh~U7)sMIGsy0UF|$bga8~IeBD$T#CgrIHuMLiizhz5M zN2m*Y^pHGIF;m#%mZ1eGzCC;kl9F9krY;)O?#8vsJzBk?qxw>fOow#5;^q&2K}WZ@ z=Gh@EP87s6^drDroaDeeWWI&{$%~&(wLp6jK1rI#e4x)Dk&(5n1mTF9qP>&cmWiXK zjR$qA3t7s_az4c**Y4_3kM>Hv=@=F~GW~G+Zbsu``rS8yhdOMu64O)UK1&J`ziAY?AA_|!u9whoW$aCj$=8BLte zOf2;$V$BY28Y79Q96P#W4D{z`JEu9x2JNU5v}4#gH9oVB_UcvddU`dW9z6<6eU~+F zFa3gH(d$yAHh`HuFr=hynD!gy((_~zX>+D|77@>*3INYbIa%POtpa2RIo+;4f4s&ux{ zr+C0lom1e)!HU2owcE+r!E{7je|E*{O;);dR_{mRs?3RIwL{K0<@Dj>MbZ7MQR9^v zX6oZKl=-xZ^Xju}P~us4z~o!!!8Nvfa)ak1%+3B3B|oz}nEQhEl(zR`WahII^4;z3 z;5(7feACzmkXn18VH*~%Eu#cQDT zqQsAXldI|6K?>6^E2@0v#E_J(Rs!-M*A$#P=N>7hDMa)}G>@XK1iFUjOB-hMX?l}0 zDO&GUbDJovmEY67s8T%vdnU#ocmqD@p4&=nPo*!6I`vt9=L6jTgv(t-+DL&YeHI-w-~T{3Rwk7Q7L2(ahC1F;mXyX(?H zp2_U<8r~?A_;$ReHr5j+o9w}&&muQ;ot*BK;>iH(?MWsJAtK@&bD61BAA(mHf9Z?L zMmr@`E_u3z!Z4xI)xe5ipaiWTRXbC)?bPVPtJjC*4Ubi)f&;^#@5jBSnCl12H0*|{ zFe)nd8J9q&Y`$Wtv1UGc(g@7ytig-jacVNJEU>t+L07E3q0YC# zz9tI}^VSp$b2mTgehFuX3yRz_#ARS${vn;H^QVWj4>bGiU`AQ3kBt~e!s8r*Dc_a% zx(Mfxit6H9Mp9|#WAFv;HZ43BKp~~<{R0E~(VEGR1V{PIzPNdXyrhXM>=)(5fp8_6 zx6x2ID@hH~+JO5l&&iDgfBwYT63L>v=<3sb{+ODeBC4zsWByWH%wrgX{n~2L6qKjh zkQj^y8l@xpa5M{+>?WiO(7j)g8x*nii9(gN&c^a%6_i$9A4QZy;;eYu`jAriCeHmH zdW)!@sb<@uPj?0G?<-dwE6^@AG_+bZ)7tfQ)6xHIKis>0TBY;7$oB%^xv_o#CaQ1*!5C`Jeh4mx6vI4OaYEhD!%*HGfj5#(PCdD%B! z*F7e2)9OwVGAa}niPOEsdn>=rV2DA3D&jK`ubM_KrUH0VPWf((qWlSTB*h*xDpzuo zGKPcq zckqJCpv(yBc3+N50^~ttsNNB&_nRfM+|?IMnb23=6UIibTKq@S+`>e%UzMcfkC-3$ zO~$a=pjV%3(Z4euoKm_W`;~6?G57cH1OVmMw_djipCtmTeTnx1ia*B3MI|BD2XST3 ziYw$N*R5tM&kW4uZyd|;$g(dq#2XsXY<;X6VRbuZjl!HyE}bEZzG@y*DDKVbBzvg8 zpBB0p*Z;b)Kq2pV(yleanSGn(t3oC?vwyw~PY{#Zq%5w>V;4am{Ty#qTY@aoSrtZW zSJcCuCH$nU8F!3IZ$gJc$qYDTH%&%U#CfgizUI`sqSxzeA6L%lth|PHc0}l;nsHq_ zwQXkEdh_Y-wH}#n-xzD{9!_a_+QOAQ-MjH1uO*}5;=2GW2-Os|m(2`{!`Owq;pHT{ znQuXROFg48yKi3sbo^dMMWsH+n+N8Lr{VC$a5ojYt&^UgukTjtH&9aQxg)gKDwVp- zbuD|O4!F|R=&e7aZ{ztoM4cO$BUO1T$z3z7)Zh3 zBKJ>=VdQ2?bYaw4v#lae0JLhV!(ME)@;Ek}KiwkCinZ#qAgTAXU$>6M$dM%UU`4%I z;@X8j^Sl(bt68j&>H!pQKJM40?M45S%YdZIM@~z#=a-X*oGRNA7p#t#Uw(c22)J0= z%GZ)JF}ohdoaQ?q)T`X2=Wz$VBf8ou zB_dvHg0V3~1ifx<%|a|K#XK8o0tV4|3ViWRHTx;w7HGAqdWWWFCu*bw=5uE`Qdr3H z#tRc~*0!Ul)~ctbLjmy0>OE9O9;>I=EJ!KgMU;{Z*pmDAo;@qy$eErM!!HS{hmBK4RvVFVcE6B%lufwP0 zXM4MvqC;Gzt3frE=ScHDE2(%^RUP8bg+ZP~*93CZGg6eE+fvU%^RIOfu|&SA5x6-E zSE`=&({?s^NC-ac3RB?hg2sK`$+YIm@a{yEa^9PV1`GaVdiU7ZQKhjT$+5{3u5 z0PiZB+lm712z)c!a1xXvfIk$ECe7VJCo*<8ykBT2xy@}p9xR=_h;!qKf6nOG&aS|* z6R(b|$*PP^^VAM^ZKrRRfQsyU%5$MIFKP#y6D%GR6 z?Ot1vo<%DgeD~*P!WUYS!3o|X%uEc&Z|Cz$ z!e(p8k6kc_4&t^SiFbo>0&iDrKvNnVOK0Pvq&g+qnu_J2iJ%hlb|#Z&_`*c5sv}M$ zL4h~Miu?3=Ebn(H7f=h0|V6y?3ChDy1^C)cyI*Qlz5K}Tw@1(gpF2Cr<(vNv)+ zR~V5!xuZaDqUYxMB|PNIz=gMia|Gd`M;9T6y|IKNWF0~Nuich#D&SV zY#9YUlk*C+WO7KB!i?9hc;jWKA9Aw-cG_bZxZfxhIRMx5K*LI$W3Dx=y6s#!4H7)D zPTQjzIr7=>)V)Ey$UEJOCh-&7A-tPJH3rtt300hFy(LpVMugFd=~EE#;B}{xF`(qX zXl%*ypP&QUt2R;I)Q$u>dC4hiB5Ope2ve?spbk>GSA}V_b9q+&b0_-gA`~j>PALt7 z`a+;n?_nRElAs+fOuagE?u4L;%;#IsfZ?K_k09)^wvpktEw7Rj@y-Gy>Rl1q4CzyUYLlt6z zTyUMp_KNdvKU1j;AUZwnEM&Dr~t4Lg-pPO$A;+R>ppRt*=_ zIA2*yMwBYJPhruc%vDNacl&}X2L+|7sd1n$TJVXCf58?EYlk>6(#&=QZxpnD`fb+H zI|NGTY-tu8^3Sr70{ge|?~@O8@Y%XO&bAL(n_-09!H9p>Tu0HSoH&?`3T#BanZDqH z7cbk}EF5N^HAtS1bbS?4_S5(!J#~4_!4I0@$5+FRgM%B4R8rCgD=GbJV+FgNlHwPG z{pV7fHu#ZQ6^FrfnNTTMzShm~hfhZNXfq$=)0w&nd#$sIA=PxvZxKv93zCm8xK3|l z!D3FJxOcr{sues0de|t$TN%3Fw&<7Q@nxauCr&_in|=j9VSW-kCytms*^KU4>0ah_ zyij&Q5xsPpPqea|n`!k0J6W>54ZB}9j1KPL`Ci+yvYiI+)9w*6#8^K7F+))^iH~ zFXQ(#H0!~c_=CT!r&*y2&h)n9jz51+Rwv(8m}jgV#$4FpC7f|J&5d)Yw#-X7Kbak0 zlACwA&fq`Ht>lt}BM^{@)0jRaxg3~jmVxR|HQT(EN1^Zn@unV^oc!rN2fWm$v7yG* z>GGs<E}9=_JRo+whTt4GELuFcQ}k)^t{a+alGxUEq4&TKZ6Ld#E&wL;gOAtS1l)aD<~F zY@Ut|POd;tIga04Aol*MScrq|w+Y%_j>A|}n@tJj0%sEw6cZE{0C^(a0UY;9*koN` z2%xUA%AW}AlN^UF8tn`e67uly5cCigM7h`qiAYOJ3kd^+00053g@CJ<6B^WkB>)Tb$?{NOw5v=>axqq|% zSM0xyu~wRzKxGuv?W%iVWjT(k_JJ@I6bS?Vz7-dTBM{P3Pyqx201*%qmlhVVmVm z4n;u4L`0=Tt^a~}6d@pHEnzJnCTT4#U@e9{Nx~7* z(xTQz&glr zXds>3JpWUnk936Vp&?glibx8JiHifIMTMorq@*PN2>UnB5bolN&BQCFh_ImOAKa^9 z0b+x}3JbZ)Q!L;&78?st$psEUqg?b+C=kN4pll@~*)R3-N3$Lq;|1;n^`WBZ-9KnV1YMqDB8aM1}t>-R{twvS)u<& z6WQMef0+ibet(oQBwCWc)w;{W%u@hb>^y|1|Pn>HCjd|H$=UDezwz z|C3$+$n{?-@Lw7KlU@JcKJB;_Q$Kr5w|dBpwj3#^Z%of``8-=ZuelsYAxpnj~`h5UW6RqySywk zp!tgiB>#54{e%>CqZ*&&z|lET?s17?jegr4^VT6NXABFcV~T~q!%DwUiZd{^m3ML= z?!6d^ftVh-cMaR4-g3pPV4cYzt{wagyOsQ;{jY#xgaKiVZ(7=(8~(y7S`+4UP#}DO za$Pe3KAEIbS>(%pLI-|5Rf2Yi)!grgwO9vfLxD; zDr7ocrWD@lx4qZFchK(#xF-kMt^rB`OckH_`*AIFDZ%IiDFeMzTU!zkrn5bVyd_MH zE`I5!yqtMOTewMvJ}>pYe4)YC9$VN!PlIt%p0)ok(LED8=TAuAhEGQ`5HXwWh>8dl x4k;Lo8!d9@d#z`~P5#CuHa~mT5KXW0k9as?xdiawve2u{0fV%ZOCCIa_CFJ>5T^hD literal 0 HcmV?d00001 diff --git a/www/themes/new/images/lagerplatzgostop.png b/www/themes/new/images/lagerplatzgostop.png new file mode 100644 index 0000000000000000000000000000000000000000..0b55b39a3800f0860a196257e1c35a7b6b3a08bd GIT binary patch literal 11286 zcmeHtXH=8hwl=+sp!81YU?2ntB=p{;iULwX5+Fb*p*LyLi=ZH&^xiE5l&TadqEe*^ z2!d2;QlxvMd!KXm9^d_Q#`x~PoiX0z&6>}A=A6%(?;2TSCEobD_9ZGdDgpw6OS(E5 zrua{WUl#=#{yjOK^AZ68+v_0nTRx_6e;!Y)ha=hz#p4s`iQ+*8pdASa0;U@tqp_S& zzv!O`Mq4!pvWHQUo$@>1&pCN?O|IOSb%}i=`hE9O_G``$1mTY7gJB+fc4q_Pa#tP1 zE6etGB*u(w7F7ecUir0u63W^Bk-5|E7{19*|iQ$CpgS;@ogOi4^=-)@WJ?P=fn*%?>kEdBYF z^Q&iy14`bGOhA6M+&SG)gRcr-LUXNG$KQZ(8h%$~%#SLcyuDdiMP3TZ-}PyasU1(N z!$jpaPGKgFq2KJ|I)IDd%Q@^H@`Vxy>zcj5tox`J1MMek)Vf?kn;k8K&nCS;ozQr1 zS-jlCwSKe|cRcR13(J0W{(8=Z)HVM*t60z1oXGc}bZF=b2HCwOTd_-Ww74-5_O@Cm z%EZJX(VXbhwm=Y0IrVkEM(`ZVabWP!^093=o!3U6eT@(?GP&+)ztU8b8!+M;e}$wE zTc0o39^vyqwRwK6=v%^Q?XgbdO076752A26D~P}dUbxM{fIVHcJrbL#j$*I+IASjtu5@m{Y$%{;%T6F&{pGo*qTDFe>z zL!N`W=i40Yp}F==jb5H&ETk5!Mb`CP-2F67e$ibkqv@yFoB^%!*Z1e;*;0D5c8*&= zT0=7%L|WN}5HF}1$9hLYt4l|2ql0mh1RRP?+q3!06G9iG`9CF?6NW9gvvTt5Vu|d> zA}&{E+q3SVkeSyL1%)z^?+>7G1ft0u3{4z=;R%2(anSUZaq_*gr=+GP-W&=&dr zf>*2hXg2iGohP^VFTQHe@yU!X=gIgPKQckKIOv;m8duRJ$%xg>cR!A+^OubzG~~@N-XwAntd0rOfX<5jO<@gr zsyCBTk{?M1Acyb9wlYk&PYa3lO6)WJ(dE6Tj^);$-n^xWdeT2A1f1JKthXr7ENKKj z*7%e;a-eq)xMw}5`n7)`WyNKNM)cmJ{04;|Y zhWWYYn)<&@=}Q;2o-+ElK1wQ9qGbkNx0i~*W2O053KLMG-}aG4uX2I@H7=%bTo<#0Oz z+_Ju!>LvGAhX+ck=6*#y*-~^(=Zyp=A;Q^BjPK_kY<1Y^aYPl7qqF#aJnm{}FS8Rp z`xw_~!$sdw9)NgG;cneiki%ZV8uy8INg;uro(@jHDDO^|;%dMoOn3{`mOZ(18lE=3dGc z%5I`+fSmCrHwVkn^;-uxTl8@Dp;R1tqd3}0Tbr_}k2%pF;={%t&y9w zjM-EK5RJ-ZdKQYUBj4XU%u$tqHNC6InsWMJ@}_Wy!#9umy{>!;CxZNAK&#tlQK%?! z(1Dh$i%Qyx(&gM+Ql*CLkcA719+r15LYJ#yJ5}39o-%X}vg`NK!z0LD(wZTA`z)R} zb^JQQ&SXPBjD48de^mUr$w-IJyAG#K#)yf2OXLz~1%`;7uJ1kgsW9jf%|`r57R5E{ z*LA(w8)Ii>nzCRUL}H-h{gq`WxBq2%?d=^bko2u6)}psTrM!806wWsx-Uviw#I6O-gUYY}Ev^FiZFoTXGMr!I8WT%BVRhQzu!6@^ zSySK9Q#nN2F|6e~SB$az36JQWFV!F;ina&@fg1II9SeeGK{7zvo!G6l`-&h!hpT1C znkLSoGqZ|Q*akSyUa>Hxf2peQH1Z@~&{zz~@=2GKu6m7yH#ehD5S73sTuDe`EVr1{ z&a6jNf`(%D>D#(dW+AC_p=8!g{8w{i%?|j?T%br`uA;0}NA=f^x>oBr7H27u?c1=n z_{Q(%#|3P%4Kt~$DM5F2hx!%Q3yaH!z2Qm`8!)r^$tEtDP^=9heBER3-X=akH)}PUmESuR(LDgCt<~S9i8!8A z3E=D8dArUrLh#@?{wwJ~XZO)d!pPcNakUu$CQL-cOR`ion@B2B0>fUvyBXo@qAHP7 z2Mu5C^43%hrm4~tCNvC+sUwzj-VX8Y^AMZ>>>(FFmXAh__C?0bf-&^T?+POKOiSt| zd5JI36`E1b>!?TZTO^|;a#*5rH zNkBY;Z1&FAsjCa^nq6%Ay+qG(m%xOKQCBi(=N^!;tY(^Abs>(14Q22rD8i6THa_x||%mI3cTnLg)I4A_GB9wxOEV5WX+^vNB1yIfuEX|Nq zWwom&6=tNydz)(8e^~j%bvITs1FWJ^NI^(#bRVHbuwb%<;ru>D`-z4|CA^JlF zrG{6ClT<~6FFz&Q^-Of%UEo&HoxL`2N%Y6EUVxOKOLfPGn$KeQKjpX}N$&0Q`{mAk zY*W-}vMBNQ;6C{jD-5AL)!;L|9@U&?DLO)6ovk(pAfCT#R@x`GyFmDwVR-jt?SM=% zmn7Q_N1f&b+d!=1T$<`U$%cGOBzuv&!gycwP~6q-nIT@xbakDPsqINiIUI*-(g3}P+6pEVt2tAA+w_We>=vw3R~18JvQ=F7XT zOeNHh$}>9_J8--9t9(}y?kF&e(mimo^6)gY&Vf4Ra`$$urPhwLGB zYNSnm8fB*4K;pU;R)3C2>=JKLGz;{30#z%fRk4$xRxpB+krmvTdZyZ@fI3add~q5S zr1#B$k<@NLvisJcsRjk&ha9(^h8h&*-ZUVxeh5TV(@Apnoo zJM69;9(dj>_V}}HsNDcxJS(By6PYAQ0vU<~rh4$YEXUBZPOl)tl2&EBT|Qz=&){Vl zHFE)Y<{{LczF^&+^V(KZS1(_^nO3~Jj;`An?w#fBVEL4HS8sCgoqVfnQru0iXDs9U z!ud#T!#j2&E9PZLs*eiyV(YZEbHyDJV*FtX{N_%gy5 z+}9?3-evURxLi(=(?fYM&Z8YM2Hb773KU}Da zH({l-#_t)I(YKSPM}W|wWri-N)79 z+gPHZGKl4{Z4|r2GntE4$hD&2QqM|Knci8T7|OTAP1X)_69 zUzFyQA)hf1o60AslH+eiLbV z3Iuxo+?~9|PAqImoRzaWMf;7$Gqr#R72zS<;L!S*nl!fTMr5yZ?RAAXb*&RmLg3Kb z&t%FN)^PKjpS0;L@cu#L`-cZgtgl8~GO!ILO!^yT1vXVI&Vy-zGLLOr_!M9QD-H2O zp8f+L;vUCohcN{&C7ZiP#WPuvHKx&14c@Tjz7;>DhP?TvLLc3gK}E@x%l`V2(ALe+ z0=vU|4PADD6Cu2|%xUosxJ|BFmn+Zpp|Qazzi{Owx8iV|i|o8@kCwa_h7WZ)pe53n zW#O8c0${6tS?q^kh_Zxp?zYGi*W(bcz%XqbF5EjV(E`4dszJ4Fb@H(KGms~BO(+DI zsx|a-Zfc@~LfxE!TYaY|zx4hh&wz}!S@oQ7Y{I;?(5&IAiuc03$K?+j&cXW8Ypd;d zCdkue4(LR^QyKIhDclJ@A~#G)$6T>Dxg<8tkcn81VgJzh&^bj9z>3i+n;z2n>@!V~ z5|t2s*yi0ph9o>Qe)+{p-CEzhrhYG?9d26JP1vFY>!vT}-8AlLDW!;UmZ{aZ_c;)t zCEN{ft@T#BF&=#UvEa=LrOkdKZB<~sIFqS@h^v^q>apdiSM3|O4UX4!ep3|pAJ%Io zHG67&M&DyK0y`@Vj^V~>aY$LUVKNxNBa(I=F&s2SFcKtW4f3#DsTn4rIo0x?X}hM? zsvHGO)}9N;-f~16g%}84m1cc(e^sik!cb$w;v;?L7x`{yw7qdcKb!rbIKnPVk#~JH z;p}}g(G(S>k1AscXn_XERQRn_DS6xo@PfpyJaf-7wo)1RqPOe;w(#Sb!|1TyJ>(>- zX}MeUR72Q&gbg#z*})$3e)}zTaCEqefvT{=NdnO_F;$>9;- z8*ad}oNd~Mru$V%IRh&xGhu*F?>}z-^q+FCbN^{QwdEb_8!xr_!bgE>@kPTyjI%JR z@J@S)EQ;m%6n?0?dd2Cy8)@9^!Wl$sx(W-e zJ27701*fN@39CuTDnO{x(NQpha*jTPWG;)Dr+cNSPEW$e8g{~%W}A9$h!qUC zgoLv}twV)q1@`xc6-7VAM_QcDGdx4i$lsXqQs^TxD|+~uvr3Cy&8N6B!D>WJQ-rB2 z*F@RMx=?H-O{I^Jr_^0@q_gaNdas^M>wXWs0jh~21VlYygT zp$}7}cdu`{ej(PM5V^GQ*!)I2tJ%goA%i=Ne1)|fajfj`dSeM^bmao}=b-p{b?k|!u`+AL=WnB~ zdGB6%8l49{e{!g+cgizobl88km7fyaJlDVB+?}DgVAsdB_rzx~_FMLoZ~fER$3D-M z$I7AKrRqqH#}AP^NMXsOh2=F*hBr&St<|>1@+WtBn4WP_WJz#^*8Hr{*F2dX6`9@} z7I}D`mQ%PoG)Bu+p>cJR9QTCOwMde9`@@y*WyLUNqvc_C48>dDTDYFD1=KRFG}^GC z_364d(>V?&+^nX=c`@N$54GMqob@DIvxd`HSLf}(^=`0JK*R2-hDR&0H$yIifGv6k%;=48z0iS8C=$BtsyZSp=_qU^${#qQ*jvRJROwveam#T<}jQYLrCZq zO)IfRU>rFgVd5EjYl9%f<9s9q2384vN=67~nvM2nKObf##ss{FX(UVp8nb)NsdEX5R$7RWn$#1A;-dKpRYkz(yF>Uij%O|m7D$AlW~bBalBJ_Dg}`kiW1^H zKyWiTZWv7j8ocd~DPCy0X9!FA=tX`v10wD2nzu3gZ8*Ng@X`z)(5^AWwX2noU_UwT zs_6I~dvw5~=eZxao7f7zeD@L*N|qZ+#WGL3*61H6ldvA~a$m~6hlEWPt4IgF=ORVW z(ZcxqWENX|D$E?c(Sf;I>fNp{41iV*cE+3)v#d7hFVIIOA(yGpY#duJ2cl@JGi2E8 z!5kyW(_Y$NUG7=Mg4_HYw;}sya?3~0E@5)sYI%1W31ojTo%6M`f*dFI?$qm zz7)51@a6iz9oTxMi~`5WikAN?|4Eqr>frLj%cEB-%5uwTRM6z-KLjE9>wIhT0sd`E-8E*?DYPVue2%G3!3VMt--IPuOBVx^N``@(B-VB1J6(lEC8P^spMhYuL z#+#&y--B%gm?7J(=SYjyC(sIdnx`esY<^pY zc}_{ZWw}UBV?a&X5un#99+Jr{EY{6XxxR~zsrcf5Rb%Uhr~|k8$p+zBt9Dk|b+8ZV zQt_gI^jpcUBsTWk9+1apx zOQ=Y>CQ82#u4uaCvy*om4OdYds4Wst zy1KEhy86G)vhXKZIiYEaI$g#L(MHw{fE(oUadOCt>r4rHUSpyRg=!UyR=%LXHEwCN zj_GX<(uv3@<-{B0%uY6(w@FoZ$h)UHbcZ$dS|vnqal4(1p*jA83vH(aVa1*1^Q;Le^_A99KwThDFh#gZ z>-eH(fNBN!!KJjv>c^4<&DVwuRNW|>=9R=-kraer7vW+eYLjUhQ-hKbu$3iOetS?8VFI#sS)|=OLb6v*SyO^H_40J0k+>*b)L@SRp}c{;=%V@IvbXkN3IO8yw}ARbm`7 znh9xXBX$9(C&8^PFTCA<9^#gN5SPF$5jz<%g~rd-2;o_krtO0 z2LUw$(0*Wm5*3dE7U>8x)zJEr0{=}B;Oyh$36qfU_xBg~mlF5DI!Q=Ep->4BSON?N z;t@daKzAQ_0MOl=?-#`%92zKZ1QzY-gZ6Oe`Nau$@bL9f1OV`Mo`2kO+W#N=S->Brq6>zj}E4X!_wv{!Hk9_3$>wpV3N~qP#tPu?Uo=AIjZ_@2?a{ z#J~MLeX(x8%RwR}P;Mv;9_o#cD*3mN+Pa3u|MvJLffE|z`P&OG_TP{`XvhDE^|#!9 zS$>!E*F^B{|K|N0`d_vG2IEnNhA<5egzvBPbTt$Kzv9D?9tboN_WM>!8tMR+l7j%D zax#uUX(Y)GAu=c=L<$T6|Ak7|-P;H5jzImQ!jp@m@jQ|cBm@KnLx7S{ zFbF6u4Rr*{!I82+M}#C)3IvjaB2ZF)p)kUt@m&db`)gLesE~LnBoYCIOM;|<2#}Nm zp2`scgiAr7KnN5r2bF_MgB?I}zp0Q2n3e|?1IJG%8UuGiNqD+D{Wkm(9Hwfls|Wy# zgZ?vO><0I7#5*Vg4AAbr0sk?WqcJEmANVgdC1pXN<6SY2BRDufM6L(S-iqS+K;f zr}|$ND@go5nkf7R{AC%y`~5M7UtaL5mBhc7t3NgSCFB3$>(9CPKa7B<{wK(PrSCs- z{Ug_ZrNDm${-?YCk?X%w;J*U@(_R1Hc4Nc6Q+FeCKSsdE)nAIvFKD=}(({;)rK!r)?EP1aG5 zJjhK^x@8an5h3Z6pnOwDXk6scj;%rrzkSvvlrLEH(8OPVaOw|T&=Qngvb{rKakXDQ=JCzM&DYak~&DhA< zQB;Y`Y3_Nozo$57a|`0s^E@&AEM_*`$u0L;B`f;V&HEB;gcWj7y^U?Mk;NwYWp%Pg zhY>ffPlf4qq?hKtNXrSPvtY-DhFM&Jkl%OfF!#@YXW+4>((lW-vBtGOsj$j=4YNWg z$Qp{K=e=2w)2xow5V+cE&1NioJ*gWImKRL;lp{3SIQQD+2Eqbdn1=9S*eC`|Pn9EX>4Tx04R}tkv&MmP!xqvQ?;TM2Rn!;WT-A$5EXIMDionYs1;guFnQ@8G-*gu zTpR`0f`dPcRR8P93mETEv&RK%bObU6meM9bjlY} zE~}ikIBUf+YuuB+FqqL-mbp%A5HT!b2@*soD5HQPY(!|+NwJWi^Qeb^pzfE*rI4!t zMveuPph2$t!T;d*Y_06%gqswM0_`u3^Dztrc7a;OalVfor*;DPpMfjA=`U4*nNQLy zO)Y!`^lk$e*G)~?11@)f{wG5=<+|jjC1kU}`x$*x8tA(Py4KveHO_JR03>Nv@f+aa z5E#i(_PWQrJ6q@WZ%<=>KUCXto6jQ&Jpcdz24YJ`L;wH)0002_L%V+f000SaNLh0L z01ejw01ejxLMWSf00007bV*G`2j~F?3pO}|gM%pm00Hw!L_t(I%gvNQNEA^R$A9n5 z_+}PHme|F}imX_q*g`@Pg{V`VIxJlZy9C)e%uJ9D5z$4c4w08mQP4%GLlzX`rL08S z>L9Lx9kNad?Z&z@^JY3sxv6UoA<}~f?|t9*|MR}@`@c^VZyF)%xFqYm)+Ur&Fb#?L=?nPg(Vaa$7Gly$g}3$J}!xYHWQ9X)27SOX%4v@d;(aSrW%C6MUP4K%+WO zAq$pioZ literal 0 HcmV?d00001 From c764a387b40c27fbb0b0ca6dff49bccf8ad0af52 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Sun, 7 Jan 2024 10:19:27 +0100 Subject: [PATCH 37/62] verbindlichkeit bugfix sort belegnr, empty steuersatz --- www/pages/verbindlichkeit.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index a2aff94e..e50288e5 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -55,7 +55,7 @@ class Verbindlichkeit { $findcols = array( 'v.id', 'v.id', - 'v.id', + 'v.belegnr', 'a.name', 'a.lieferantennummer', 'v.rechnung', @@ -708,7 +708,7 @@ $menu="
    "."get_steuersatz($umsatzsteuer,$id); @@ -717,7 +717,6 @@ $menu="
    "."app->DB->Insert($sql); From 63d6f2e7d4203db350a1c80b96cbeba371a65f13 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 10 Jan 2024 14:32:46 +0100 Subject: [PATCH 38/62] verbindlichkeit bugfix multi action --- www/pages/verbindlichkeit.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/www/pages/verbindlichkeit.php b/www/pages/verbindlichkeit.php index e50288e5..dc4b4f39 100644 --- a/www/pages/verbindlichkeit.php +++ b/www/pages/verbindlichkeit.php @@ -1363,7 +1363,9 @@ $menu="
    "."app->erp->BelegProtokoll("verbindlichkeit",$id,"Verbindlichkeit als bezahlt markiert"); if ($gotoedit) { $this->verbindlichkeit_edit(); - } + } else { + return(true); + } } } From 3fe8fcd8aa11dcae571cea4f5760fee170f5aa35 Mon Sep 17 00:00:00 2001 From: OpenXE <> Date: Wed, 10 Jan 2024 19:50:06 +0100 Subject: [PATCH 39/62] verbindlichkeit added icon attachment missing, change in icons, added filters --- phpwf/plugins/class.yui.php | 13 ++++-- www/pages/content/verbindlichkeit_list.tpl | 16 ++++++- www/pages/verbindlichkeit.php | 50 +++++++++++++++------ www/themes/new/images/check_go.png | Bin 0 -> 7613 bytes www/themes/new/images/check_gostop.png | Bin 0 -> 7851 bytes www/themes/new/images/check_stop.png | Bin 0 -> 8020 bytes 6 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 www/themes/new/images/check_go.png create mode 100644 www/themes/new/images/check_gostop.png create mode 100644 www/themes/new/images/check_stop.png diff --git a/phpwf/plugins/class.yui.php b/phpwf/plugins/class.yui.php index 61630ae7..ef604c65 100644 --- a/phpwf/plugins/class.yui.php +++ b/phpwf/plugins/class.yui.php @@ -3596,10 +3596,14 @@ class YUI { function IconsSQLVerbindlichkeit() { - $go_ware = "app->Conf->WFconf['defaulttheme']}/images/ware_go.png\" style=\"margin-right:1px\" title=\"Wareneingangsprüfung OK\" border=\"0\">"; - $stop_ware = "app->Conf->WFconf['defaulttheme']}/images/ware_stop.png\" style=\"margin-right:1px\" title=\"Wareneingangsprüfung fehlt\" border=\"0\">"; - $go_summe = "app->Conf->WFconf['defaulttheme']}/images/summe_go.png\" style=\"margin-right:1px\" title=\"Rechnungseingangsprüfung OK\" border=\"0\">"; - $stop_summe = "app->Conf->WFconf['defaulttheme']}/images/summe_stop.png\" style=\"margin-right:1px\" title=\"Rechnungseingangsprüfung fehlt\" border=\"0\">"; + $go_ware = "app->Conf->WFconf['defaulttheme']}/images/lagergo.png\" style=\"margin-right:1px\" title=\"Wareneingangsprüfung OK\" border=\"0\">"; + $stop_ware = "app->Conf->WFconf['defaulttheme']}/images/lagerstop.png\" style=\"margin-right:1px\" title=\"Wareneingangsprüfung fehlt\" border=\"0\">"; + + $go_pdf = "app->Conf->WFconf['defaulttheme']}/images/summe_go.png\" style=\"margin-right:1px\" title=\"Anhang OK\" border=\"0\">"; + $stop_pdf = "app->Conf->WFconf['defaulttheme']}/images/summe_stop.png\" style=\"margin-right:1px\" title=\"Anhang fehlt\" border=\"0\">"; + + $go_summe = "app->Conf->WFconf['defaulttheme']}/images/check_go.png\" style=\"margin-right:1px\" title=\"Rechnungseingangsprüfung OK\" border=\"0\">"; + $stop_summe = "app->Conf->WFconf['defaulttheme']}/images/check_stop.png\" style=\"margin-right:1px\" title=\"Rechnungseingangsprüfung fehlt\" border=\"0\">"; $go_zahlung = "app->Conf->WFconf['defaulttheme']}/images/bank_go.svg\" style=\"margin-right:1px\" title=\"Kontoverknüpfung OK\" border=\"0\">"; $stop_zahlung = "app->Conf->WFconf['defaulttheme']}/images/bank_stop.svg\" style=\"margin-right:1px\" title=\"Kontoverknüpfung fehlt\" border=\"0\">"; @@ -3608,6 +3612,7 @@ class YUI { $gostop_betragbezahlt = "\"teilweiseapp->Conf->WFconf['defaulttheme']}/images/vorkassegostop.png\" style=\"margin-right:1px\" title=\"teilweise bezahlt\" border=\"0\">"; $go_betragbezahlt = "\"nichtapp->Conf->WFconf['defaulttheme']}/images/vorkassego.png\" style=\"margin-right:1px\" title=\"bezahlt\" border=\"0\">"; return "CONCAT('
    ', + if(datei_anzahl > 0,'$go_pdf','$stop_pdf'), if(v.freigabe,'$go_ware','$stop_ware'), if(v.rechnungsfreigabe,'$go_summe','$stop_summe'), if(v.bezahlt,'$go_betragbezahlt','$stop_betragbezahlt'), diff --git a/www/pages/content/verbindlichkeit_list.tpl b/www/pages/content/verbindlichkeit_list.tpl index b2947974..9a10a346 100644 --- a/www/pages/content/verbindlichkeit_list.tpl +++ b/www/pages/content/verbindlichkeit_list.tpl @@ -10,12 +10,19 @@
    {|Filter|}