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'); + } +}