2021-05-21 08:49:41 +02:00
< ? php
2023-12-15 19:03:16 +01:00
/*
**** 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 ****
2021-05-21 08:49:41 +02:00
*/
?>
2023-12-15 19:03:16 +01:00
< ? 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 ;
}
}