mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-15 12:37:14 +01:00
14419 lines
604 KiB
PHP
14419 lines
604 KiB
PHP
<?php
|
|
/*
|
|
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*
|
|
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
|
|
*
|
|
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
|
|
*
|
|
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
|
|
* to obtain the text of the corresponding license version.
|
|
*
|
|
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*/
|
|
?>
|
|
<?php
|
|
|
|
use Xentral\Modules\Api\Auth\PermissionGuard;
|
|
use Xentral\Modules\ApiAccount\Exception\ApiAccountNotFoundException;
|
|
use Xentral\Modules\SystemConfig\SystemConfigModule;
|
|
|
|
if (!function_exists('getallheaders')) {
|
|
/**
|
|
* @return array
|
|
*/
|
|
function getallheaders() {
|
|
$headers = array();
|
|
foreach ($_SERVER as $name => $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,'<servertime>'.time().'</servertime>');
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
|
|
|
|
function ApiBenutzerGetRFID()
|
|
{
|
|
$xmldata = $this->XMLPost();
|
|
if ($xmldata['rfid'] == '') {
|
|
$this->XMLResponse(5, "<error>RFID fehlt</error>");
|
|
$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, '<error>fehlerhafte RFID</error>');
|
|
}
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
function ApiBenutzerList()
|
|
{
|
|
$user = $this->app->DB->SelectArr("SELECT id,adresse,rfidtag FROM user WHERE activ = 1");
|
|
if($user)
|
|
{
|
|
$xmlstr = <<<XML
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<user>
|
|
</user>
|
|
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('<?xml version="1.0" standalone="yes"?>',"<user>",'</user>'),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, '<error>AdresssID fehlt</error>');
|
|
$this->app->ExitXentral();
|
|
}
|
|
$id = $xmldata['adresse'];
|
|
$jahr = date("Y");
|
|
$aktjahr = (int)date('Y');
|
|
$vorjahr = $jahr-1;
|
|
|
|
|
|
$xmlstr = <<<XML
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<stechuhrsummary>
|
|
</stechuhrsummary>
|
|
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('<?xml version="1.0" standalone="yes"?>',"<stechuhrsummary>",'</stechuhrsummary>'),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, "<error>AdresssID fehlt</error>");
|
|
$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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<stechuhrstatus>
|
|
</stechuhrstatus>
|
|
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('<?xml version="1.0" standalone="yes"?>',"<stechuhrstatus>",'</stechuhrstatus>'),array('','',''),$_xmlobj->asXML());
|
|
$this->XMLResponse(1,$xml);
|
|
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
function ApiStechuhrStatusSet()
|
|
{
|
|
|
|
$xmldata = $this->XMLPost();
|
|
if ($xmldata['cmd'] == '') {
|
|
$this->XMLResponse(5, "<error>CMD fehlt</error>");
|
|
$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, "<error>Userid oder Adressid fehlerhaft</error>");
|
|
$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, "<error>Fehlerhafter Status wird uebergeben. Es darf aktuell nur der Status \"kommen\" übergeben werden.</error>");
|
|
}
|
|
}
|
|
|
|
if($currentstatus === 'kommen'){
|
|
// es darf nur der Status 'gehen' und 'pausestart' funktionieren
|
|
if( ($cmd !== 'gehen') && ($cmd !== 'pausestart') ){
|
|
$this->XMLResponse(5, "<error>Fehlerhafter Status wird uebergeben. Es darf aktuell nur der Status \"gehen\" und \"pausestart\" übergeben werden.</error>");
|
|
}
|
|
|
|
}
|
|
|
|
if($currentstatus === 'pausestart'){
|
|
// es darf nur der Status 'gehen' und 'pausestart' funktionieren
|
|
if($cmd !== 'pausestop'){
|
|
$this->XMLResponse(5, "<error>Fehlerhafter Status wird uebergeben. Es darf aktuell nur der Status \"pausestop\" übergeben werden.</error>");
|
|
}
|
|
}
|
|
|
|
|
|
$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, "<error>Name und/oder Abkürzung fehlt</error>");
|
|
$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, "<error>Abkürzung schon vorhanden. Bitte eine andere wählen.</error>");
|
|
$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, "<id>".$xmldata['id']."</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,'<error>ID oder Projekt muss gesetzt sein</error>');
|
|
}
|
|
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,'<error>falsche ID oder Projektkennung</error>');
|
|
}
|
|
|
|
|
|
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, "<error>AdresseId oder Name fehlt</error>");
|
|
$this->app->ExitXentral();
|
|
}
|
|
$newId = $this->app->erp->CreateAnsprechpartner($xmldata['adresse'],$xmldata);
|
|
$this->XMLResponse(1,"<id>$newId</id>");
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
function ApiAnsprechpartnerEdit(){
|
|
$xmldata = $this->XMLPost();
|
|
if ($xmldata['id'] == '') {
|
|
$this->XMLResponse(5, "<error>AnsprechpartnerId fehlt</error>");
|
|
$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, "<error>AdresseId oder Name fehlt</error>");
|
|
$this->app->ExitXentral();
|
|
}
|
|
$newId = $this->app->erp->CreateLieferadresse($xmldata['adresse'],$xmldata);
|
|
$this->XMLResponse(1,"<id>$newId</id>");
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
function ApiLieferadresseEdit(){
|
|
$xmldata = $this->XMLPost();
|
|
if ($xmldata['id'] == '') {
|
|
$this->XMLResponse(5, "<error>LieferadresseId fehlt</error>");
|
|
$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, "<error>ArtikelId oder AdresseId fehlt</error>");
|
|
$this->app->ExitXentral();
|
|
}
|
|
if (($xmldata['menge'] == '') || ($xmldata['menge'] == '0')) {
|
|
$this->XMLResponse(5, "<error>Menge fehlt oder ist 0</error>");
|
|
$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, "<error>ID fehlt oder ist 0</error>");
|
|
$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, "<error>fehlerhaftes Feld preisart => (abo|monat|monatx|jahr|wochen|einmalig)</error>");
|
|
$this->app->ExitXentral();
|
|
}
|
|
if (!preg_match("(^rechnung$|^auftrag$)", $xmldata['dokument'])) {
|
|
$this->XMLResponse(5, "<error>fehlerhaftes Feld dokument => (rechnung|auftrag)</error>");
|
|
$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, "<error>fehlerhafte ArtikelId</error>");
|
|
$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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<gruppe>
|
|
</gruppe>
|
|
XML;
|
|
$_xmlobj = new SimpleXMLExtended($xmlstr);
|
|
// $xmlobj = $_xmlobj->AddChild("xml");
|
|
foreach($ArtikelDaten[0] as $key => $value){
|
|
$_xmlobj->AddChild($key,$value);
|
|
}
|
|
$out = str_replace(array('<?xml version="1.0" standalone="yes"?>',"<gruppe>",'</gruppe>'),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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<gruppeList>
|
|
</gruppeList>
|
|
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('<?xml version="1.0" standalone="yes"?>',"<gruppeList>",'</gruppeList>'),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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<gruppe>
|
|
</gruppe>
|
|
XML;
|
|
$_xmlobj = new SimpleXMLExtended($xmlstr);
|
|
// $xmlobj = $_xmlobj->AddChild("xml");
|
|
foreach($gruppeDaten[0] as $key => $value){
|
|
$_xmlobj->AddChild($key,$value);
|
|
}
|
|
$out = str_replace(array('<?xml version="1.0" standalone="yes"?>',"<gruppe>",'</gruppe>'),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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<gruppeList>
|
|
</gruppeList>
|
|
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('<?xml version="1.0" standalone="yes"?>',"<gruppeList>",'</gruppeList>'),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,"<error>Fehlerhafte Artikelnummer</error>");
|
|
}
|
|
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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<stueckliste1>
|
|
</stueckliste1>
|
|
XML;
|
|
$_xmlobj = new SimpleXMLExtended($xmlstr);
|
|
|
|
$xmlobj = $_xmlobj->AddChild('stueckliste','');
|
|
if(isset($sl[0]))
|
|
{
|
|
$stuecklistevonartikelnummer = $xmlobj->AddChild('stuecklistevonartikelnummer');
|
|
$stuecklistevonartikelnummer->value = $sl[0]['stuecklistevonartikelnummer'];
|
|
}
|
|
//$out = '<beleg_list>';
|
|
$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('<?xml version="1.0" standalone="yes"?>',"<stueckliste1>",'</stueckliste1>'),array('','',''),$_xmlobj->asXML());
|
|
unset($_xmlobj);
|
|
$this->XMLResponse(1, $out);
|
|
$this->app->ExitXentral();
|
|
}
|
|
$this->XMLResponse(5,"<error>Artikelhat keine Stückliste</error>");
|
|
$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 = '<artikelkategorien>';
|
|
foreach($kategorien as $kategorie)
|
|
{
|
|
$out .= '<kategorie>';
|
|
foreach($kategorie as $k => $v)
|
|
{
|
|
$out .= '<'.$k.'>'.htmlspecialchars($v).'</'.$k.'>';
|
|
}
|
|
$out .= '</kategorie>';
|
|
}
|
|
$out .= '</artikelkategorien>';
|
|
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('<?xml version="1.0" standalone="yes"?>','<?xml version="1.0" encoding="UTF-8"?>',"<response>",'</response>'),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('<?xml version="1.0" standalone="yes"?>','<?xml version="1.0" encoding="UTF-8"?>',"<response>",'</response>'),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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<belege_list1>
|
|
</belege_list1>
|
|
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('<?xml version="1.0" standalone="yes"?>',"<belege_list1>",'</belege_list1>'),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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<belege_list1>
|
|
</belege_list1>
|
|
XML;
|
|
$_xmlobj = new SimpleXMLExtended($xmlstr);
|
|
if($groupbyartikel)
|
|
{
|
|
$xmlobj = $_xmlobj->AddChild('artikel_list','');
|
|
}else{
|
|
$xmlobj = $_xmlobj->AddChild('beleg_list','');
|
|
}
|
|
//$out = '<beleg_list>';
|
|
$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 .= '</'.$position['beleg'].'>';
|
|
$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 .= '<belegid>'.$position['belegid'].'</belegid>';
|
|
//$out .= '<datum>'.$position['datum'].'</datum>';
|
|
//$out .= '<belegnr>'.$position['belegnr'].'</belegnr>';
|
|
//$out .= '<status>'.$position['status'].'</status>';
|
|
//$out .= '<adresse>'.$position['adresse'].'</adresse>';
|
|
}
|
|
$_positionobj = $belegobj->AddChild('position','');
|
|
//$out .= '<position>';
|
|
foreach($position as $k => $v)
|
|
{
|
|
$objn = $k.'_obj';
|
|
$$objn = $_positionobj->AddChild($k,'');
|
|
$$objn->value = $v;
|
|
//$out .= '<'.$k.'>'.htmlspecialchars($v).'</'.$k.'>';
|
|
}
|
|
//$out .= '</position>';
|
|
}
|
|
$i++;
|
|
}
|
|
}
|
|
//$out .= '</'.$position['beleg'].'>';
|
|
}
|
|
$anz_belegegesamt++;
|
|
//$out .= '</beleg_list><anz_gesamt>'.(!empty($belege)?count($belege):0).'</anz_gesamt><anz_result>'.$j.'</anz_result>';
|
|
$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('<?xml version="1.0" standalone="yes"?>',"<belege_list1>",'</belege_list1>'),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 = '<gruppen>';
|
|
foreach($gruppen as $gruppe)
|
|
{
|
|
$out .= '<gruppe>';
|
|
foreach($gruppe as $k => $v )
|
|
{
|
|
$out .= '<'.$k.'>'.$v.'</'.$k.'>';
|
|
}
|
|
$out .= '</gruppe>';
|
|
}
|
|
$out .= '</gruppen>';
|
|
$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 = '<gruppen>';
|
|
foreach($gruppen as $gruppe)
|
|
{
|
|
$out .= '<gruppe>';
|
|
foreach($gruppe as $k => $v )
|
|
{
|
|
$out .= '<'.$k.'>'.$v.'</'.$k.'>';
|
|
}
|
|
$out .= '</gruppe>';
|
|
}
|
|
$out .= '</gruppen>';
|
|
$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,'<sqlerror>'.$error.'</sqlerror>');
|
|
}
|
|
if($accounts)
|
|
{
|
|
$out = '<list>';
|
|
foreach($accounts as $account)
|
|
{
|
|
$out .= '<account>';
|
|
foreach($account as $key => $value)
|
|
{
|
|
$out .= '<'.$key.'>'.(is_null($value)?'':$value).'</'.$key.'>';
|
|
}
|
|
$out .= '</account>';
|
|
}
|
|
$out .= '</list>';
|
|
$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,'<id_int>'.$ergebnis[0]['id_int'].'</id_int><id_ext>'.$ergebnis[0]['id_ext'].'</id_ext><table>'.$ergebnis[0]['tabelle'].'</table>');
|
|
$this->app->ExitXentral();
|
|
}
|
|
$this->XMLResponse(4);
|
|
$this->app->ExitXentral();
|
|
}
|
|
$out = '<list>';
|
|
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 .= '<id_int>'.$ergebnis[0]['id_int'].'</id_int><id_ext>'.$ergebnis[0]['id_ext'].'</id_ext><table>'.$ergebnis[0]['tabelle'].'</table>';
|
|
}
|
|
}
|
|
}
|
|
$out = '</list>';
|
|
$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_int.'</id_int><id_ext>'.$id_ext.'</id_ext><table>'.$table.'</table><id>'.$insertid.'</id><sql>'."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."')".'</sql>');
|
|
$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_int.'</id_int><id_ext>'.$id_ext.'</id_ext><table>'.$table.'</table>');
|
|
$this->app->ExitXentral();
|
|
}
|
|
$this->XMLResponse(4);
|
|
$this->app->ExitXentral();
|
|
}
|
|
$out = '<list>';
|
|
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_int.'</id_int><id_ext>'.$id_ext.'</id_ext><table>'.$table.'</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_int.'</id_int><id_ext>'.$id_ext.'</id_ext><table>'.$table.'</table>';
|
|
}
|
|
}
|
|
}
|
|
$out = '</list>';
|
|
$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
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<response>
|
|
</response>
|
|
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>'.$md5sum.'</md5sum>';
|
|
if($this->usejson) {
|
|
$append .='<data>'.$xml_inside.'</data>';
|
|
}else
|
|
$append .='<xml>'.$xml_inside.'</xml>';
|
|
}
|
|
|
|
if($this->usejson) {
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
echo $this->XmlToJSON("<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
|
<response>
|
|
<status>
|
|
<action>$action</action>
|
|
<message>" . utf8_encode($this->MessageCode($messagecode)) . "</message>
|
|
<messageCode>" . $messagecode . "</messageCode>
|
|
</status>
|
|
" . $append . "
|
|
</response>");
|
|
|
|
}
|
|
else{
|
|
header('Content-Type: application/xml; charset=utf-8');
|
|
|
|
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
|
<response>
|
|
<status>
|
|
<action>$action</action>
|
|
<message>" . utf8_encode($this->MessageCode($messagecode)) . "</message>
|
|
<messageCode>" . $messagecode . "</messageCode>
|
|
</status>
|
|
" . $append . "
|
|
</response>";
|
|
}
|
|
$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 version=\"1.0\" encoding=\"UTF-8\"?>','<?xml version="1.0" encoding="UTF-8"?>',$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 version=\"1.0\" encoding=\"UTF-8\"?>','<?xml version="1.0" encoding="UTF-8"?>',$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>$id</id><kundennummer>".$xmldata['kundennummer']."</kundennummer>");
|
|
} else {
|
|
if($internal) return $xmldata['lieferantennummer'];
|
|
$this->XMLResponse(1,"<id>$id</id><lieferantennummer>".$xmldata['lieferantennummer']."</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>$id</id><belegnr>".$xmldata['belegnr'].'</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>$id</id><belegnr>".$ret['belegnr'].'</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>'.$id.'</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>'.$id.'</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, '<id>' . $returnOrderId . '</id>');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @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, '<id>' . $invoiceId . '</id>');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @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>'.$id.'</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>'.$id.'</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>'.$id.'</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>$id</id><belegnr>".$ret['belegnr'].'</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>$id</id><belegnr>".$ret['belegnr'].'</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>$id</id><belegnr>".$ret['belegnr'].'</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>$id</id><belegnr>".$ret['belegnr'].'</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>$id</id><belegnr>".$ret['belegnr'].'</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>$id</id><belegnr>".$xmldata['belegnr'].'</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, "<error>".ucfirst($doctype)." nicht gefunden</error>");
|
|
|
|
$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>$id</id><nummer>".$xmldata['nummer']."</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,"<error>kein Passwort übergeben</error>");
|
|
}
|
|
|
|
$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>$id</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>$id</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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<kontakte2>
|
|
</kontakte2>
|
|
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('<?xml version="1.0" standalone="yes"?>',"<kontakte2>",'</kontakte2>'),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
|
|
<?xml version="1.0" standalone="yes"?>
|
|
<adressen2>
|
|
</adressen2>
|
|
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 .= '<adresse>';
|
|
$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]).'</'.$RowKeys[$k].'>';
|
|
}
|
|
//$xml .= '</adresse>';
|
|
$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('<?xml version="1.0" standalone="yes"?>',"<adressen2>",'</adressen2>'),array('','',''),$_xmlobj->asXML());
|
|
unset($_xmlobj);
|
|
|
|
}else{
|
|
$xml = '<anz_result>0</anz_result><anz_gesamt>0</anz_gesamt>';
|
|
if($this->app->DB->error())
|
|
{
|
|
$xml .= '<sqlerror>' .$this->GetPlainText($this->app->DB->error()).'</sqlerror>';
|
|
}
|
|
}
|
|
//$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>$id</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 .= "<items>";
|
|
|
|
$cergebnis = (!empty($ergebnis)?count($ergebnis):0);
|
|
for($i=0;$i<$cergebnis;$i++)
|
|
{
|
|
$output .= "<item>";
|
|
|
|
foreach($ergebnis[$i] as $key=>$value){
|
|
if($this->usecdata) {
|
|
$output .= "<$key><![CDATA[" . htmlspecialchars($value) . "]]></$key>";
|
|
}else{
|
|
$output .= "<$key>" . htmlspecialchars($value) . "</$key>";
|
|
}
|
|
}
|
|
$output .= "</item>";
|
|
}
|
|
$output .= "<anz_gesamt>".$anz_gesamt."</anz_gesamt>";
|
|
$output .= "<anz_result>".(!empty($ergebnis)?count($ergebnis):0)."</anz_result>";
|
|
$output .= "<sql>".$sql."</sql>";
|
|
$output .= "</items>";
|
|
}
|
|
|
|
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, "<error>Adress-ID und/oder Bezeichnung fehlt</error>");
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
$newId = $this->app->erp->CreateAccount($xmldata['adresse'],$xmldata);
|
|
$this->XMLResponse(1,"<id>$newId</id>");
|
|
$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 ='<?xml version="1.0" encoding="UTF-8"?>
|
|
<request>
|
|
<status>
|
|
<function>'.$methodname.'</function>
|
|
</status>
|
|
<xml>'.$xml.'</xml>
|
|
</request>';
|
|
|
|
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 . "><![CDATA[" . ($value) . "]]></" . $key . ">";
|
|
}else{
|
|
$result .= "<" . $key . ">" . $this->GetPlainText($value) . "</" . $key . ">";
|
|
}
|
|
}
|
|
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 . "><![CDATA[" . ($value) . "]]></" . $key . ">";
|
|
}else{
|
|
$result .= "<" . $key . ">" . $this->GetPlainText($value) . "</" . $key . ">";
|
|
}
|
|
}
|
|
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 . "><![CDATA[" . ($value) . "]]></" . $key . ">";
|
|
}else{
|
|
$result .= "<" . $key . ">" . $this->GetPlainText($value) . "</" . $key . ">";
|
|
}
|
|
}
|
|
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 . "><![CDATA[" . ($value) . "]]></" . $key . ">";
|
|
}else{
|
|
$result .= "<" . $key . ">" . $this->GetPlainText($value) . "</" . $key . ">";
|
|
}
|
|
}
|
|
|
|
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 .='<artikelliste>';
|
|
$corder_arr = !empty($order_arr)?count($order_arr):0;
|
|
for($i=0;$i<$corder_arr;$i++)
|
|
{
|
|
$result .='<position>';
|
|
foreach($order_arr[$i] as $key=>$value)
|
|
{
|
|
if(is_array($value)){
|
|
$value='';
|
|
}
|
|
if($cdata && $value != '' && !is_numeric($value)) {
|
|
$result .= "<" . $key . "><![CDATA[" . ($value) . "]]></" . $key . ">";
|
|
}else{
|
|
$result .= "<" . $key . ">" . $this->GetPlainText($value) . "</" . $key . ">";
|
|
}
|
|
|
|
}
|
|
$result .='</position>';
|
|
}
|
|
$result .='</artikelliste>';
|
|
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).'</'.$key.'>';
|
|
else {
|
|
if($cdata && $value != '' && !is_numeric($value)) {
|
|
$result .= '<' . $key . '><![CDATA[' . ($value) . ']]></' . $key . '>';
|
|
}else {
|
|
$result .= '<' . $key . '>' . $this->GetPlainText($value) . '</' . $key . '>';
|
|
}
|
|
}
|
|
}
|
|
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 ='<adresse_accounts>';
|
|
foreach($result as $account)
|
|
{
|
|
$output .='<account>';
|
|
foreach($account as $key=>$value)
|
|
{
|
|
if($cdata && $value != '' && !is_numeric($value))
|
|
{
|
|
$output .= sprintf('<%1$s><![CDATA[%2$s]]></%1$s>', $key, $value);
|
|
}else
|
|
$output .= sprintf('<%1$s>%2$s</%1$s>', $key, $value);
|
|
}
|
|
$output .='</account>';
|
|
}
|
|
$output .='</adresse_accounts>';
|
|
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 ='<items>';
|
|
if(!empty($rows)) {
|
|
foreach($rows as $row) {
|
|
$output .='<item>';
|
|
foreach($row as $key=>$value)
|
|
{
|
|
if($cdata && $value != '' && !is_numeric($value)) {
|
|
$output .= "<" . $key . "><![CDATA[" . ($value) . "]]></" . $key . ">";
|
|
}else{
|
|
$output .= "<" . $key . ">" . $this->GetPlainText($value) . "</" . $key . ">";
|
|
}
|
|
}
|
|
$output .='</item>';
|
|
}
|
|
}
|
|
$output .='</items>';
|
|
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 = '<artikelkontingente>';
|
|
foreach($result as $artikelkontigent) {
|
|
$output .='<kontingent>';
|
|
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 . '><![CDATA[' . ($value) . ']]></' . $key . '>';
|
|
}else{
|
|
$output .= '<' . $key . '>' . $this->GetPlainText($value) . '</' . $key . '>';
|
|
}
|
|
}
|
|
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>'.$gebucht.'</gebucht>';
|
|
}
|
|
}
|
|
$output .='</kontingent>';
|
|
}
|
|
$output .='</artikelkontingente>';
|
|
|
|
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 .= '<item>';
|
|
foreach($field_name as $field_index => $fieldValue) {
|
|
$value = str_replace('"', '', $fields[$field_index]);
|
|
if($cdata && $value != '' && !is_numeric($value)){
|
|
$output .= '<' . $field_name[$field_index] . '><![CDATA[' . $value . ']]></' . $field_name[$field_index] . ">\r\n";
|
|
}else{
|
|
$output .= '<' . $field_name[$field_index] . '>' . $value . '</' . $field_name[$field_index] . ">\r\n";
|
|
}
|
|
}
|
|
$output .= '</item>';
|
|
}
|
|
$counter++;
|
|
}
|
|
}
|
|
return '<items>'.$output.'</items>';
|
|
}
|
|
|
|
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 .= '<id_ext>' . $this->GetPlainText($extid) . '</id_ext>';
|
|
}
|
|
}
|
|
if($key === 'projekt') $value = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$value' LIMIT 1");
|
|
$result .= '<' . $key . '>' . $this->GetPlainText($value) . "</" . $key . ">";
|
|
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 .= '<artikelkategorie>' . $this->GetPlainText($bezeichnung) . '</artikelkategorie>';
|
|
$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 .= '<typ_ext>' . $this->GetPlainText($extid) . '</typ_ext>';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
// 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 .= "<artikel_lagerbestand>$summe</artikel_lagerbestand>";
|
|
$result .= "<artikel_reserviert>$reserviert</artikel_reserviert>";
|
|
$result .= "<artikel_offeneauftraege>$liefern</artikel_offeneauftraege>";
|
|
$result .= "<artikel_verkaufte>$verkaufte</artikel_verkaufte>";
|
|
$result .= "<artikel_berechneterbestand>$berechnet</artikel_berechneterbestand>";
|
|
$result .= "<artikel_verkaufbare>$verkaufbare</artikel_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 .= '<stueckliste_artikel>';
|
|
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 .= '<artikel>';
|
|
$result .= '<menge>' . $arr_stueckliste[$stuecklisteKey]['menge'] . '</menge>';
|
|
$result .= '<nummer>' . $arr_stueckliste[$stuecklisteKey]['nummer'] . '</nummer>';
|
|
$result .= '<artikel>' . $arr_stueckliste[$stuecklisteKey]['artikel'] . '</artikel>';
|
|
$result .= '<projekt>' . $arr_stueckliste[$stuecklisteKey]['projekt'] . '</projekt>';
|
|
$result .= "</artikel>";
|
|
}
|
|
$result .= '</stueckliste_artikel>';
|
|
}
|
|
}
|
|
// 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 .='<einkaufspreise>';
|
|
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 .='<staffelpreis>';
|
|
$result .='<ab_menge>'.$einkaufValue['ab_menge'].'</ab_menge>';
|
|
$result .='<preis>'.$einkaufValue['preis'].'</preis>';
|
|
$result .='<waehrung>'.$einkaufValue['waehrung'].'</waehrung>';
|
|
$result .='<lieferantennummer>'.$einkaufValue['lieferantennummer'].'</lieferantennummer>';
|
|
$result .='<projekt>'.$einkaufValue['projekt'].'</projekt>';
|
|
$result .='<bestellnummer>'.$this->GetPlainText($einkaufValue['bestellnummer']).'</bestellnummer>';
|
|
$result .='<bezeichnunglieferant>'.$this->GetPlainText($einkaufValue['bezeichnunglieferant']).'</bezeichnunglieferant>';
|
|
$result .='</staffelpreis>';
|
|
}
|
|
$result .='</einkaufspreise>';
|
|
}
|
|
|
|
// 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 .='<verkaufspreise>';
|
|
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 .='<staffelpreis>';
|
|
$result .='<ab_menge>'.$verkaufValue['ab_menge'].'</ab_menge>';
|
|
$result .='<preis>'.$verkaufValue['preis'].'</preis>';
|
|
$result .='<vpe>'.$verkaufValue['vpe'].'</vpe>';
|
|
if($verkaufValue['vpe_menge'] > 0){
|
|
$result .= '<vpe_menge>' . $verkaufValue['vpe_menge'] . '</vpe_menge>';
|
|
}
|
|
|
|
$result .='<waehrung>'.$verkaufValue['waehrung'].'</waehrung>';
|
|
|
|
if($verkaufValue['kundennummer']!='')
|
|
{
|
|
$result .='<kundennummer>'.$verkaufValue['kundennummer'].'</kundennummer>';
|
|
$result .='<projekt>'.$verkaufValue['projekt'].'</projekt>';
|
|
if($verkaufValue['kundenartikelnummer']!=''){
|
|
$result .= '<kundenartikelnummer>' . $verkaufValue['kundenartikelnummer'] . '</kundenartikelnummer>';
|
|
}
|
|
}
|
|
$result .='</staffelpreis>';
|
|
}
|
|
$result .='</verkaufspreise>';
|
|
}
|
|
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("<div class=\"info\">Die Belege wurden importiert!</div>");
|
|
}else{
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Keine Belege zum Importieren gefunden!</div>");
|
|
}
|
|
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 "<p> $num Felder in Zeile $row: <br /></p>\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] . "<br />\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;
|
|
}
|
|
}
|