XML;
$_xmlobj = new SimpleXMLExtended($xmlstr);
$xmlobj = $_xmlobj->AddChild('adressen','');
//$sxe->addAttribute('type', 'documentary');
$xml = '';
$anz_gesamt = 0;
$anz_result = 0;
$i = 0;
$gesamt_umsatz = 0;
$anzeige_umsatz = 0;
while($adresse = $this->app->DB->Fetch_Array($adressen))
{
$do = true;
if($re && $gu)
{
if(isset($xmldata['umsatzvon']))
{
if((float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto'] < (float)$xmldata['umsatzvon'])$do = false;
}
if(isset($xmldata['umsatzbis']))
{
if((float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto'] > (float)$xmldata['umsatzbis'])$do = false;
}
}elseif($re)
{
if(isset($xmldata['umsatzvon']))
{
if((float)$adresse['rechnung_umsatz_netto'] < (float)$xmldata['umsatzvon'])$do = false;
}
if(isset($xmldata['umsatzbis']))
{
if((float)$adresse['rechnung_umsatz_netto'] > (float)$xmldata['umsatzbis'])$do = false;
}
}
if($filterkategorie && $do)
{
$do2 = false;
if($re && $adresse['re_iskat'])$do2 = true;
if($gu && $adresse['gu_iskat'])$do2 = true;
if($be && $adresse['be_iskat'])$do2 = true;
if($ab && $adresse['ab_iskat'])$do2 = true;
if($an && $adresse['an_iskat'])$do2 = true;
if(!$do2)$do = false;
}
if($do && $re && $gu)
{
$gesamt_umsatz += (float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto'];
}
if($do && $i >= $offset && $i < $offset+$_limit)
{
$anzeige_umsatz += (float)$adresse['rechnung_umsatz_netto'] - (float)$adresse['gutschrift_umsatz_netto'];
$adrobj = $xmlobj->AddChild('adresse','');
//$xml .= '';
$RowKeys = array_keys($adresse);
$RowValues = array_values($adresse);
$cRowKeys = count($RowKeys);
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 .= '';
$anz_result++;
}
if($do)$i++;
}
$xmlobj->AddChild('anz_gesamt',$i);
$xmlobj->AddChild('anz_result',$anz_result);
if($re && $gu)
{
$xmlobj->AddChild('anzeige_umsatz',number_format($anzeige_umsatz,2,'.',''));
$xmlobj->AddChild('gesamt_umsatz',number_format($gesamt_umsatz,2,'.',''));
}
$xml = str_replace(array('',"",''),array('','',''),$_xmlobj->asXML());
unset($_xmlobj);
}else{
$xml = '00';
if($this->app->DB->error())
{
$xml .= '' .$this->GetPlainText($this->app->DB->error()).'';
}
}
//$xml .= $xmldata;
if ($intern != false) {
return $xml;
}
$this->XMLResponse(1,$xml);
$this->app->ExitXentral();
}
function ApiGruppeCreate()
{
$id = $this->app->Secure->GetGET("id");
$xmldata = $this->XMLPost();
$this->app->DB->Insert("INSERT INTO gruppen (id) VALUES ('')");
$id = $this->app->DB->GetInsertID();
$this->ApiGruppeEdit($id,true);
$this->XMLResponse(1,"$id");
$this->app->ExitXentral();
}
function ApiGruppeEdit($id="",$internal=false)
{
$xmldata = $this->XMLPost();
$id = $xmldata['id'];
if($id <=0)
$id = $this->app->Secure->GetGET("id");
$id = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='$id' LIMIT 1");
// Key gibt es nicht
if($id <= 0)
$this->XMLResponse(5);
$xmldata = $this->XMLPost();
if($xmldata['porto_preis']!="" && $xmldata['porto_artikelid']!="" && !is_array($xmldata['porto_preis']))
{
$this->app->erp->AddVerkaufspreisGruppe($xmldata['porto_artikelid'],1,$id,$xmldata['porto_preis']);
}
foreach($xmldata as $key=>$value)
{
if(is_array($value)) {
$value='';
}
if($key==='internebemerkung') {
$value = html_entity_decode($value);
}
if($key!=='id'){
$this->app->DB->Update("UPDATE gruppen SET $key='$value' WHERE id='$id' LIMIT 1");
}
}
if($internal){
return $id;
}
$this->XMLResponse(1);
$this->app->ExitXentral();
}
public function ApiGruppeGet()
{
$xmldata = $this->XMLPost();
if($xmldata['id'] == '') {
$id = $this->app->Secure->GetGET("id");
}else{
$id =$xmldata['id'];
}
//checl
$id = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='$id' LIMIT 1");
if($id > 0){
$this->XMLResponse(1, $this->app->erp->XMLGruppe($id, $this->usecdata));
$this->app->ExitXentral();
}
$this->XMLResponse(5);
$this->app->ExitXentral();
}
// alte funktion
public function ApiShopimages()
{
$artikel = $this->app->Secure->GetGET("artikel");
$number = $this->app->Secure->GetGET("number");
$datei = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel'");
if($number <= 0) $number = 1;
$datei = $datei[$number-1]['datei'];
$mimetype = mime_content_type($this->app->erp->GetDateiPfad($datei));
// Wir werden eine PDF Datei ausgeben
header('Content-type: '.$mimetype);
echo $this->app->erp->GetDatei($datei);
$this->app->ExitXentral();
}
public function ApiExportVorlageGet()
{
$id = $this->app->Secure->GetGET("id");
$projekt = $this->app->Secure->GetGET("projekt");
$von = $this->app->Secure->GetGET("von");
$bis = $this->app->Secure->GetGET("bis");
if($id!="")
{
if($projekt!="")
{
$projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1");
}
}
//check
$id = $this->app->DB->Select("SELECT id FROM exportvorlage WHERE id='$id' AND apifreigabe=1 LIMIT 1");
$filter['projekt']=$projekt;
$filter['von']=$von;
$filter['bis']=$bis;
if($id > 0){
$this->XMLResponse(1, $this->app->erp->XMLExportVorlage($id, $filter, $this->usecdata));
$this->app->ExitXentral();
}
$this->XMLResponse(5);
$this->app->ExitXentral();
}
public function ApiBerichteGet()
{
$id = $this->app->Secure->GetGET("id");
$xmldata = $this->XMLPost();
if($id=="") $id = $xmldata['id'];
$id = $this->app->DB->Select("SELECT id FROM berichte WHERE id='$id' LIMIT 1");
if($id > 0){
$this->XMLResponse(1, $this->app->erp->XMLBerichte($id, $this->usecdata));
$this->app->ExitXentral();
}
$this->XMLResponse(5);
$this->app->ExitXentral();
}
public function ApiArtikelList($intern = false)
{
$xmldata = $this->XMLPost();
$keys = array_keys($xmldata);
$sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.* FROM artikel a";
if($xmldata['kategorie'] != ''){
$sql = "SELECT SQL_CALC_FOUND_ROWS a.id, a.*,ak.bezeichnung FROM artikel a";
$tabellenkuerzel = "a.";
$sql .= " inner join artikelkategorien ak on ak.id = SUBSTRING_INDEX(a.typ,'_',1)";
}
$wherevorhanden = false;
$ckeys = count($keys);
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(count($ergebnis)>0)
{
$output .= "";
$cergebnis = count($ergebnis);
for($i=0;$i<$cergebnis;$i++)
{
$output .= "- ";
foreach($ergebnis[$i] as $key=>$value){
if($this->usecdata) {
$output .= "<$key>$key>";
}else{
$output .= "<$key>" . htmlspecialchars($value) . "$key>";
}
}
$output .= "
";
}
$output .= "".$anz_gesamt."";
$output .= "".count($ergebnis)."";
$output .= "".$sql."";
$output .= "";
}
if($output != ""){
if ($intern != false) {
return $output;
}
$this->XMLResponse(1, $output);
$this->app->ExitXentral();
}
if ($intern != false) {
return false;
}
$this->XMLResponse(4);
$this->app->ExitXentral();
}
public function ApiArtikelStueckliste()
{
$xmldata = $this->XMLPost();
$keys = array_keys($xmldata);
//$this->app->erp->LogFile(print_r($xmldata, 1));
$mineininserterfolgreich = false;
if(array_key_exists('stuecklistevonartikel', $xmldata)){
$artikelvorhanden = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$xmldata['stuecklistevonartikel']."' LIMIT 1");
if($artikelvorhanden != ""){
$altestueckliste = $this->app->DB->SelectArr("SELECT id FROM stueckliste WHERE stuecklistevonartikel = '$artikelvorhanden'");
if(array_key_exists('items', $xmldata)){
if(is_array($xmldata['items'])){
if($xmldata['items']['item'][1] != ""){
$stuecklistearray = $xmldata['items']['item'];
}else{
$stuecklistearray = $xmldata['items'];
}
foreach($stuecklistearray as $key=>$value){
if(array_key_exists('stuecklistemenge', $value)){
$stuecklistemenge = str_replace(',', '.', $value['stuecklistemenge']);
if($stuecklistemenge > 0){
if(array_key_exists('nummer', $value)){
$nummervorhanden = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$value['nummer']."' LIMIT 1");
if($nummervorhanden != ""){
//hier optional
if(array_key_exists('stuecklisteart', $value) && !is_array($value['stuecklisteart'])){//standard et
$stuecklisteart = $value['stuecklisteart'];
if($stuecklisteart != "et" && $stuecklisteart != "it" && $stuecklisteart != "bt"){
$stuecklisteart = "et";
}else{
$stuecklisteart = $value['stuecklisteart'];
}
if($stuecklisteart == ""){
$stuecklisteart = "et";
}
}else{
$stuecklisteart = "et";
}
if(array_key_exists('stuecklistealternative', $value) && !is_array($value['stuecklistealternative'])){
$stuecklistealternative = $value['stuecklistealternative'];
if($stuecklistealternative == ""){
$stuecklistealternative = "0";
}else{
$alternativevorhanden = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$stuecklistealternative' LIMIT 1");
if($alternativevorhanden != ""){
$stuecklistealternative = $alternativevorhanden;
}else{
$stuecklistealternative = 0;
}
}
}else{
$stuecklistealternative = "0";
}
if(array_key_exists('stuecklistereferenz', $value) && !is_array($value['stuecklistereferenz'])){
$stuecklistereferenz = $value['stuecklistereferenz'];
if($stuecklistereferenz == ""){
$stuecklistereferenz = "";
}
}else{
$stuecklistereferenz = "";
}
if(array_key_exists('stuecklistelayer', $value) && !is_array($value['stuecklistelayer'])){//standard Top
if($value['stuecklistelayer'] != "Top" && $value['$stuecklistelayer'] != "Bottom"){
$stuecklistelayer = "Top";
}else{
$stuecklistelayer = $value['stuecklistelayer'];
}
if($stuecklistelayer == ""){
$stuecklistelayer = "Top";
}
}else{
$stuecklistelayer = "Top";
}
if(array_key_exists('stuecklisteplatzierung', $value) && !is_array($value['stuecklisteplatzierung'])){//standard DP
if($value['stuecklisteplatzierung'] != "DP" && $value['$stuecklisteplatzierung'] != "DNP"){
$stuecklisteplatzierung = "DP";
}else{
$stuecklisteplatzierung = $value['stuecklisteplatzierung'];
}
if($stuecklisteplatzierung == ""){
$stuecklisteplatzierung = "DP";
}
}else{
$stuecklisteplatzierung = "DP";
}
if(array_key_exists('stuecklistewert', $value) && !is_array($value['stuecklistewert'])){
$stuecklistewert = $value['stuecklistewert'];
if($stuecklistewert == ""){
$stuecklistewert = "";
}
}else{
$stuecklistewert = "";
}
if(array_key_exists('stuecklistebauform', $value) && !is_array($value['stuecklistebauform'])){
$stuecklistebauform = $value['stuecklistebauform'];
if($stuecklistebauform == ""){
$stuecklistebauform = "";
}
}else{
$stuecklistebauform = "";
}
if(array_key_exists('stuecklistezachse', $value) && !is_array($value['stuecklistezachse'])){
$stuecklistezachse = $value['stuecklistezachse'];
if($stuecklistezachse == ""){
$stuecklistezachse = "";
}
}else{
$stuecklistezachse = "";
}
if(array_key_exists('stuecklistexposition', $value) && !is_array($value['stuecklistexposition'])){
$stuecklistexposition = $value['stuecklistexposition'];
if($stuecklistexposition == ""){
$stuecklistexposition = "";
}
}else{
$stuecklistexposition = "";
}
if(array_key_exists('stuecklisteyposition', $value) && !is_array($value['stuecklisteyposition'])){
$stuecklisteyposition = $value['stuecklisteyposition'];
if($stuecklisteyposition == ""){
$stuecklisteyposition = "";
}
}else{
$stuecklisteyposition = "";
}
$this->app->DB->Insert("INSERT INTO stueckliste (artikel, referenz, place, layer, stuecklistevonartikel,
menge, firma, wert, bauform, alternative, zachse, xpos, ypos, art)
VALUES ('$nummervorhanden', '$stuecklistereferenz', '$stuecklisteplatzierung', '$stuecklistelayer', '$artikelvorhanden',
'$stuecklistemenge', 1, '$stuecklistewert', '$stuecklistebauform', '$stuecklistealternative', '$stuecklistezachse', '$stuecklistexposition', '$stuecklisteyposition', '$stuecklisteart')");
if(!$this->app->DB->error()){
$this->app->DB->Update("UPDATE artikel SET stueckliste = 1 WHERE id = '$artikelvorhanden'");
$mineininserterfolgreich = true;
}
}else{
$this->XMLResponse(4);
}
}
}else{
$this->XMLResponse(4);
}
}
}
if($mineininserterfolgreich == true){
foreach($altestueckliste as $key2=>$value2){
$this->app->DB->Delete("DELETE FROM stueckliste WHERE id = '".$value2['id']."'");
}
$this->XMLResponse(1);
$this->app->ExitXentral();
}
}
}
}else{
$this->XMLResponse(4);
}
}else{
$this->XMLResponse(4);
}
}
public function ApiAdresseAccountsGet()
{
$xmldata = $this->XMLPost();
$id = $this->app->Secure->GetGET("id");
$art = $this->app->Secure->GetGET("art");
if($xmldata['id']!=''){
$id = $xmldata['id'];
}
if($xmldata['art']!=''){
$art = $xmldata['art'];} else{$art = '%%';
}
$filter['art']=$art;
$filter['id']=$id;
if($id > 0 ) {
$this->XMLResponse(1, $this->app->erp->XMLAdresseAccounts($filter, $this->usecdata));
} else {
$this->XMLResponse(5);
}
$this->app->ExitXentral();
}
public function ApiAdresseAccountCreate()
{
$xmldata = $this->XMLPost();
if($xmldata['adresse'] == '' || is_array($xmldata['adresse']) || $xmldata['bezeichnung'] == '' || is_array($xmldata['bezeichnung'])){
$this->XMLResponse(5, "Adress-ID und/oder Bezeichnung fehlt");
$this->app->ExitXentral();
}
$newId = $this->app->erp->CreateAccount($xmldata['adresse'],$xmldata);
$this->XMLResponse(1,"$newId");
$this->app->ExitXentral();
}
public function ApiAdresseAccountEdit(){
$id = $this->app->Secure->GetGET("id");
if($id==''){
$xmldata = $this->XMLPost();
$id = $xmldata['id'];
}
$id = $this->app->DB->Select("SELECT id FROM adresse_accounts WHERE id='$id' LIMIT 1");
// Key gibt es nicht
if($id <= 0){
$this->XMLResponse(5);
}
$xmldata = $this->XMLPost();
foreach($xmldata as $key=>$value)
{
if(is_array($value))
{
$value='';
}
if($key!=="id"){
if($key === "gueltig_ab" || $key === "gueltig_bis"){
if($value == "" || $value == "0000-00-00" || $value === "00.00.0000"){
$value = '0000-00-00';
}else{
$value = date('Y-m-d',strtotime($value));
}
}
$this->app->DB->Update("UPDATE adresse_accounts SET $key='$value' WHERE id='$id' LIMIT 1");
}
}
$this->XMLResponse(1);
$this->app->ExitXentral();
}
public function ApiArtikelkontingenteGet()
{
$xmldata = $this->XMLPost();
if(is_array($xmldata) && !empty($xmldata)){
$filter = $xmldata;
}else{
$filter['id'] = $this->app->Secure->GetGET("id");
$filter['projekt'] = $this->app->Secure->GetGET("projekt");
$filter['nummer'] = $this->app->Secure->GetGET("nummer");
$filter['von'] = $this->app->Secure->GetGET("von");
$filter['bis'] = $this->app->Secure->GetGET("bis");
}
if($filter['nummer']!="" || $filter['id']!=""){
$this->XMLResponse(1, $this->app->erp->XMLArtikelkontingente($filter, $this->usecdata));
}
else{
$this->XMLResponse(5);
}
$this->app->ExitXentral();
}
protected function getApiAccount(){
if(!$this->apiAccount){
$this->apiAccount = $this->apiAccountService->getApiAccountById($this->api_id);
}
return $this->apiAccount;
}
public function EventAPIAdd($eventname,$parameter,$module,$action,$kommentar='', $api = 0)
{
$module_call_from = isset($this->app->Secure)?$this->app->Secure->GetGET('module'):'';
try {
$apiaktiv = $this->getApiAccount()->isActive();
} catch (ApiAccountNotFoundException $e){
$apiaktiv = false;
}
if($module_call_from !=='api')
{
$uebertragungen = $this->app->DB->SelectArr("select a.id FROM api_account a INNER JOIN uebertragungen_account u ON a.id = u.api AND a.aktiv=1 AND u.aktiv = 1 INNER JOIN uebertragungen_event_einstellungen e ON u.id = e.uebertragung_account AND e.aktiv = 1 WHERE e.eventname = '$eventname' group by a.id");
if($uebertragungen)
{
foreach($uebertragungen as $uebertragung)
{
$aacount = $uebertragung['id'];
if($aacount){
$this->app->DB->Insert("INSERT INTO event_api (id,cachetime,eventname,parameter,retries,module,action,kommentar,api)
VALUES ('',NOW(),'$eventname','$parameter','0','$module','$action','$kommentar','$aacount')");
$tmpid = $this->app->DB->GetInsertID();
$this->EventCall($tmpid);
}
}
}
}
if($apiaktiv === true && $module_call_from !== 'api')
{
$this->app->DB->Insert("INSERT INTO event_api (cachetime,eventname,parameter,retries,module,action,kommentar,api)
VALUES (NOW(),'$eventname','$parameter','0','$module','$action','$kommentar','$api')");
$tmpid = $this->app->DB->GetInsertID();
$this->EventCall($tmpid);
} else {
return false;
}
return null;
}
/**
* @param int $id
*
* @return bool
*/
public function EventCall($id)
{
$eventApiArr = $id <= 0?null:$this->app->DB->SelectRow(
sprintf(
'SELECT * FROM `event_api` WHERE `id` = %d LIMIT 1',
$id
)
);
if(empty($eventApiArr)) {
return false;
}
$eventname = $eventApiArr['eventname'];
$parameter = $eventApiArr['parameter'];
$module = $eventApiArr['module'];
$action = $eventApiArr['action'];
$api = $eventApiArr['api'];
switch($module)
{
case "adresse":
$xml = $this->app->erp->XMLAdresse($parameter);
break;
case "artikel":
$xml = $this->app->erp->XMLArtikel($parameter, $api);
break;
case "auftrag":
$xml = $this->app->erp->XMLAuftrag($parameter);
break;
case "gruppe":
$xml = $this->app->erp->XMLGruppe($parameter);
break;
case "adresse_kontakt":
$xml = $this->app->erp->XMLAdresseKontakt($parameter);
break;
default:
$this->app->DB->Delete("DELETE FROM event_api WHERE id='$id' LIMIT 1");
return false;
}
$hash = $this->generateHashFromApi($api);
//$result = $this->EventSendRequest($eventname,$xml,$hash,"&id=".$parameter);
//Hack
$result_body = null;
$result = $this->EventSendRequest($eventname,$xml,$hash,"&id=".$parameter,$result_body, $api);
switch($eventname) {
case "EventArtikelCreate":
if($api && $parameter)
{
if(isset($result_body['xml']['id']) && $result_body['xml']['id']!="")
{
$this->app->DB->Insert("INSERT INTO api_mapping (tabelle, id_int, id_ext, api, zeitstempel) VALUES ('artikel','$parameter','".$this->app->DB->real_escape_string($result_body['xml']['id'])."','$api',now())");
}
}
break;
case "EventAuftragEdit":
//print_r($result_body);
if(isset($result_body['xml']['belegnr']) && $result_body['xml']['belegnr']!="")
{
$this->app->DB->Update("UPDATE auftrag SET belegnr='".$result_body['xml']['belegnr']."' WHERE id='".$parameter."' AND id > 0 LIMIT 1");
$this->app->DB->Delete("DELETE FROM event_api WHERE id='$id' LIMIT 1");
}
break;
default:
$result = true;
}
if($result===false) {
$this->app->DB->Update("UPDATE event_api SET retries=retries+1 WHERE id='$id' LIMIT 1");
return false;
}
$this->app->DB->Delete("DELETE FROM event_api WHERE id='$id' LIMIT 1");
return true;
}
public function EventSendRequest($methodname,$xml,$hash,$parameter='',&$result_body='', $api = 0)
{
try {
$url = $this->getApiAccount()->getEventUrl();
} catch (ApiAccountNotFoundException $e){
return false;
}
if($url == ''){
return false;
}
$xml ='
'.$methodname.'
'.$xml.'
';
if(strpos($url,'?') === false){
$url = $url.'?hash='.$hash.$parameter;
} else{
$url = $url.'&hash='.$hash.$parameter;
}
if(strpos($url,'module=api') === false){
$url .= '&module=api';
}
$url .= '&action='.substr($methodname,5);
$data = array('xml' => $xml);
// use key 'http' even if you send the request to https://...
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if($result===false) {
return false;
}
$deXml = simplexml_load_string($result);
$deJson = json_encode($deXml);
$xml_array = json_decode($deJson,TRUE);
$result_body = $xml_array;
if(isset($xml_array['xml']['status']['messageCode'])){
$xml_array['xml']['status']['messageCode'] = strtolower($xml_array['xml']['status']['messageCode']);
return $xml_array['xml']['status']['messageCode'] == 0;
}
return false;
}
/**
* @param string $initKey
* @param string $remoteDomain
*
* @return string
*/
public function generateHashFromDomainAndKey($initKey, $remoteDomain)
{
$date = gmdate('dmY');
$hash = '';
for($i = 0; $i <= 200; $i++) {
$hash = sha1($hash . $initKey . $remoteDomain . $date);
}
return $hash;
}
/**
* @param int $id
*
* @return string
*/
public function generateHashFromApi($id = 0)
{
try {
$initKey = $this->getApiAccount()->getInitKey();
$remoteDomain = $this->getApiAccount()->getRemoteDomain();
} catch (ApiAccountNotFoundException $e){
$initKey = '';
$remoteDomain = '';
}
return $this->generateHashFromDomainAndKey($initKey, $remoteDomain);
}
public function GetPlainText($string)
{
$string = str_replace('NONBLOCKINGZERO','',$string);
return htmlspecialchars(trim(html_entity_decode($string, ENT_QUOTES, 'UTF-8')));
}
public function XMLGruppe($id, $cdata = false)
{
if($id > 0){
$arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM gruppen WHERE id=%d LIMIT 1',$id));
}
if(empty($arr)){
return '';
}
$result = '';
foreach($arr as $key=>$value) {
if(is_array($value)){
$value='';
}
if($cdata && $value != '' && !is_numeric($value)) {
$result .= "<" . $key . ">" . $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 . ">" . $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 . ">" . $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 . ">" . $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 .='';
$corder_arr = !empty($order_arr)?count($order_arr):0;
for($i=0;$i<$corder_arr;$i++)
{
$result .='';
foreach($order_arr[$i] as $key=>$value)
{
if(is_array($value)){
$value='';
}
if($cdata && $value != '' && !is_numeric($value)) {
$result .= "<" . $key . ">" . $key . ">";
}else{
$result .= "<" . $key . ">" . $this->GetPlainText($value) . "" . $key . ">";
}
}
$result .='';
}
$result .='';
return $result;
}
public function XMLBenutzer($id, $cdata = false)
{
if($id > 0){
$address_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM user WHERE id=%d LIMIT 1',$id));
}
if(empty($address_arr))
{
return '';
}
$result = '';
foreach($address_arr as $key=>$value)
{
if(is_array($value))$value='';
if($key==='startseite')
$result .='<'.$key.'>'.$this->app->erp->base64_url_encode($value).''.$key.'>';
else {
if($cdata && $value != '' && !is_numeric($value)) {
$result .= '<' . $key . '>' . $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 ='';
foreach($result as $account)
{
$output .='';
foreach($account as $key=>$value)
{
if($cdata && $value != '' && !is_numeric($value))
{
$output .= sprintf('<%1$s>%1$s>', $key, $value);
}else
$output .= sprintf('<%1$s>%2$s%1$s>', $key, $value);
}
$output .='';
}
$output .='';
return $output;
}
public function XMLBerichte($id, $cdata = false){
if($id > 0){
$result = $this->app->DB->SelectRow(sprintf('SELECT * FROM berichte WHERE id = %d LIMIT 1', $id));
}
if(empty($result) || empty($result['struktur']))
{
return '';
}
$rows = $this->app->DB->SelectArr($result['struktur']);
$output ='';
if(!empty($rows)) {
foreach($rows as $row) {
$output .='- ';
foreach($row as $key=>$value)
{
if($cdata && $value != '' && !is_numeric($value)) {
$output .= "<" . $key . ">" . $key . ">";
}else{
$output .= "<" . $key . ">" . $this->GetPlainText($value) . "" . $key . ">";
}
}
$output .='
';
}
}
$output .='';
return $output;
}
public function XMLArtikelkontingente($filter=array(), $cdata = false)
{
if($filter['id']=='')
{
if($filter['projekt']!='')
{
$projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$filter['projekt']."' AND abkuerzung!=''");
if($projekt > 0){
$artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='" . $filter['nummer'] . "' AND projekt = $projekt AND nummer!='' LIMIT 1");
}else{
$artikel = 0;
}
} else {
$artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$filter['nummer']."' AND nummer!='' LIMIT 1");
}
} else {
$artikel = $filter['id'];
}
if($artikel > 0){
$artikel = $this->app->DB->Select(sprintf('SELECT id FROM artikel WHERE id = %d LIMIT 1', $artikel));
}
if($artikel <= 0)
{
return '';
}
if($filter['von']!='')
{
$fall = 1;
$result = $this->app->DB->SelectArr("SELECT SUM(ap.menge) as gebucht,
if(ak.menge IS NULL,(SELECT ak2.menge FROM artikelkontingente ak2 WHERE (ak2.datum='1970-01-01' OR ak2.datum='0000-00-00' OR ak2.datum IS NULL) AND ak2.artikel=ap.artikel),ak.menge)
as menge,
if(a.lieferdatum ='0000-00-00' OR a.lieferdatum is NULL, a.datum, a.lieferdatum) as datum
FROM auftrag_position ap
LEFT JOIN auftrag a ON a.id=ap.auftrag
LEFT JOIN artikelkontingente ak ON ak.artikel=ap.artikel AND if(a.lieferdatum ='0000-00-00' OR a.lieferdatum is NULL, a.datum, a.lieferdatum)=ak.datum
WHERE
if(a.lieferdatum ='0000-00-00' OR a.lieferdatum is NULL,
(a.datum >='".$filter['von']."' AND a.datum <='".$filter['bis']."'),(a.lieferdatum >='".$filter['von']."' AND a.lieferdatum <='".$filter['bis']."'))
AND a.status='freigegeben'
AND ap.artikel='$artikel' GROUP by 3 ORDER by 3");
}
else {
$fall = 2;
$result = $this->app->DB->SelectArr("SELECT * FROM artikelkontingente ak WHERE ak.artikel='$artikel' AND (datum >= DATE_FORMAT(NOW(),'%Y-%m-%d') OR datum='0000-00-00' OR datum='1970-01-01')");
}
if(empty($result))
{
return '';
}
$output = '';
foreach($result as $artikelkontigent) {
$output .='';
foreach($artikelkontigent as $key=>$value)
{
if($key==='datum') {
$value=str_replace('1970-01-01','0000-00-00',$value);
}
if($key!=='id' && $key!=='artikel')
{
if($cdata && $value != '' && !is_numeric($value)) {
$output .= '<' . $key . '>' . $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.'';
}
}
$output .='';
}
$output .='';
return $output;
}
public function XMLExportVorlage($id,$filter=array(), $cdata = false)
{
/** @var Exportvorlage $tmp */
$tmp = $this->app->erp->LoadModul('exportvorlage');
$csv = $tmp->ExportvorlageExport(true,$id,$filter);
$csv_array = preg_split ('/$\R?^/m', $csv);
if($id > 0){
$vorlageArr = $this->app->DB->SelectRow(sprintf('SELECT exporttrennzeichen, exporterstezeilenummer,exportdatenmaskierung FROM exportvorlage WHERE id= %d LIMIT 1', $id));
}
if(!empty($vorlageArr))
{
$exporttrennzeichen = $vorlageArr['exporttrennzeichen'];
$exportdatenmaskierung = $vorlageArr['exportdatenmaskierung'];
$exporterstezeilenummer = $vorlageArr['exporterstezeilenummer'];
}else{
$exporttrennzeichen = '';
$exportdatenmaskierung = '';
$exporterstezeilenummer = '';
}
if($exporttrennzeichen==='semikolon') {
$exporttrennzeichen=';';
}
else if($exporttrennzeichen==='komma') {
$exporttrennzeichen=',';
}
else if($exporttrennzeichen==='tab') {
$exporttrennzeichen="\t";
}
else {
$exporttrennzeichen=';';
}
if($exportdatenmaskierung==='gaensefuesschen') {
$exportdatenmaskierung='"';
} else {
$exportdatenmaskierung='';
}
$output = '';
$field_name = [];
$counter = 0;
if(!empty($csv_array)){
foreach ($csv_array as $row) {
$fields = explode($exporttrennzeichen, $row);
if($counter == 0){
foreach ($fields as $value) {
if($exportdatenmaskierung != ''){
$value = str_replace($exportdatenmaskierung, '', $value);
}
$field_name[] = $value;
}
}else{
$output .= '- ';
foreach($field_name as $field_index => $fieldValue) {
$value = str_replace('"', '', $fields[$field_index]);
if($cdata && $value != '' && !is_numeric($value)){
$output .= '<' . $field_name[$field_index] . '>' . $field_name[$field_index] . ">\r\n";
}else{
$output .= '<' . $field_name[$field_index] . '>' . $value . '' . $field_name[$field_index] . ">\r\n";
}
}
$output .= '
';
}
$counter++;
}
}
return ''.$output.'';
}
public function XMLArtikel($id, $api = 0)
{
if($id > 0){
$artikel_arr = $this->app->DB->SelectRow(sprintf('SELECT * FROM artikel WHERE id=%d LIMIT 1',$id));
}
$result = '';
if(!empty($artikel_arr)){
foreach ($artikel_arr as $key => $value) {
if($key !== 'usereditid' && $key !== 'useredittimestamp'){
if(is_array($value)){
$value = '';
}
if($key === 'id' && $api){
$extid = $this->app->DB->Select("SELECT id_ext FROM api_mapping WHERE tabelle = 'artikel' AND id_int = '$id' AND api = '$api' LIMIT 1");
if($extid){
$result .= '' . $this->GetPlainText($extid) . '';
}
}
if($key === 'projekt') $value = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$value' LIMIT 1");
$result .= '<' . $key . '>' . $this->GetPlainText($value) . "" . $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 .= '' . $this->GetPlainText($bezeichnung) . '';
$extid = $this->app->DB->Select("SELECT id_ext FROM api_mapping WHERE tabelle = 'artikelkategorien' AND id_int = '$kategorie' AND api = '$api' LIMIT 1");
if($extid){
$result .= '' . $this->GetPlainText($extid) . '';
}
}
}
}
}
}
}
// Lagerbestand
$summe = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz WHERE lpi.artikel='$id' AND lp.sperrlager!=1");
$reserviert = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$id'");// AND datum >= NOW()");
$auftraege = $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel LEFT JOIN auftrag auf ON auf.id=ap.auftrag WHERE a.id='$id' AND a.lagerartikel=1 AND auf.status='freigegeben'");
$liefern= $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap, auftrag aa, artikel a WHERE a.id=ap.artikel AND aa.id = ap.auftrag AND a.id='$id' AND a.lagerartikel=1 AND aa.status='freigegeben'");
$reserviert_im_versand = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$id' AND objekt='lieferschein'");
$berechnet = $summe - $auftraege - $reserviert_im_versand;
$verkaufte = $auftraege + $reserviert_im_versand;
$rest = $summe - $liefern;
if($reserviert=='') {
$reserviert =0;
}
if($liefern <=0) {
$liefern=0;
}
if($rest > 0) {
$verfuegbar = (string)$rest;
} else {
$verfuegbar = '0';
}
$verkaufbare = $this->app->erp->ArtikelAnzahlVerkaufbar($id);
$summe = round($summe, $this->app->erp->GetLagerNachkommastellen());
$reserviert = round($reserviert ,$this->app->erp->GetLagerNachkommastellen());
$liefern = round($liefern ,$this->app->erp->GetLagerNachkommastellen());
$verkaufte = round($verkaufte ,$this->app->erp->GetLagerNachkommastellen());
$berechnet = round($berechnet ,$this->app->erp->GetLagerNachkommastellen());
$verkaufbare = round($verkaufbare ,$this->app->erp->GetLagerNachkommastellen());
$result .= "$summe";
$result .= "$reserviert";
$result .= "$liefern";
$result .= "$verkaufte";
$result .= "$berechnet";
$result .= "$verkaufbare";
// stueckliste
if($artikel_arr['stueckliste']=='1'){
$arr_stueckliste = $this->app->DB->SelectArr(sprintf('SELECT * FROM stueckliste WHERE stuecklistevonartikel=%d',$id));
if(!empty($arr_stueckliste)){
$result .= '';
foreach($arr_stueckliste as $stuecklisteKey => $stuecklisteRow) {
$artikelArr = $this->app->DB->SelectRow(sprintf('SELECT nummer, projekt
FROM artikel WHERE id = %d LIMIT 1', $stuecklisteRow['artikel']));
if(!empty($artikelArr))
{
$arr_stueckliste[$stuecklisteKey]['nummer'] = $artikelArr['nummer'];
$projekt = $artikelArr['projekt'];
if($projekt > 0)
{
$arr_stueckliste[$stuecklisteKey]['projekt'] = $this->app->DB->Select(
sprintf('SELECT abkuerzung
FROM projekt
WHERE id = %d LIMIT 1', $projekt));
}else{
$arr_stueckliste[$stuecklisteKey]['projekt'] = '';
}
}else{
$arr_stueckliste[$stuecklisteKey]['nummer'] = '';
$arr_stueckliste[$stuecklisteKey]['projekt'] = '';
}
$result .= '';
$result .= '' . $arr_stueckliste[$stuecklisteKey]['menge'] . '';
$result .= '' . $arr_stueckliste[$stuecklisteKey]['nummer'] . '';
$result .= '' . $arr_stueckliste[$stuecklisteKey]['artikel'] . '';
$result .= '' . $arr_stueckliste[$stuecklisteKey]['projekt'] . '';
$result .= "";
}
$result .= '';
}
}
// einkaufspreise
$arr_einkauf = $this->app->DB->SelectArr("SELECT * FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis >= NOW() OR gueltig_bis='0000-00-00')");
if(!empty($arr_einkauf))
{
$result .='';
foreach($arr_einkauf as $einkaufKey => $einkaufValue) {
if($einkaufValue['adresse'] > 0){
$adresseArr = $this->app->DB->SelectRow(sprintf(
'SELECT projekt, lieferantennummer FROM adresse WHERE id = %d ', $einkaufValue['adresse']
));
}else{
$adresseArr = null;
}
if(!empty($adresseArr))
{
$einkaufValue['lieferantennummer'] = $adresseArr['lieferantennummer'];
$einkaufValue['projekt'] = $adresseArr['projekt'];
}else{
$einkaufValue['lieferantennummer'] = '';
$einkaufValue['projekt'] = 0;
}
if($einkaufValue['projekt'] > 0)
{
$einkaufValue['projekt'] = $this->app->DB->SelectRow(sprintf('SELECT projekt FROM adresse WHERE id= %d LIMIT 1', $einkaufValue['projekt']));
}else{
$einkaufValue['projekt'] = '';
}
$result .='';
$result .=''.$einkaufValue['ab_menge'].'';
$result .=''.$einkaufValue['preis'].'';
$result .=''.$einkaufValue['waehrung'].'';
$result .=''.$einkaufValue['lieferantennummer'].'';
$result .=''.$einkaufValue['projekt'].'';
$result .=''.$this->GetPlainText($einkaufValue['bestellnummer']).'';
$result .=''.$this->GetPlainText($einkaufValue['bezeichnunglieferant']).'';
$result .='';
}
$result .='';
}
// verkaufspreise
$arr_verkauf = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise WHERE artikel='$id' AND (gueltig_bis >= NOW() OR gueltig_bis='0000-00-00' ) AND geloescht!='1'");
if(!empty($arr_verkauf))
{
$result .='';
foreach($arr_verkauf as $verkaufValue) {
if($einkaufValue['adresse'] > 0){
$adresseArr = $this->app->DB->SelectRow(sprintf(
'SELECT projekt, lieferantennummer FROM adresse WHERE id = %d ', $verkaufValue['adresse']
));
}else{
$adresseArr = null;
}
if(!empty($adresseArr))
{
$verkaufValue['lieferantennummer'] = $adresseArr['lieferantennummer'];
$verkaufValue['projekt'] = $adresseArr['projekt'];
}else{
$verkaufValue['lieferantennummer'] = '';
$verkaufValue['projekt'] = 0;
}
if($verkaufValue['projekt'] > 0)
{
$verkaufValue['projekt'] = $this->app->DB->SelectRow(sprintf('SELECT projekt FROM adresse WHERE id= %d LIMIT 1', $einkaufValue['projekt']));
}else{
$verkaufValue['projekt'] = '';
}
$arr_verkauf[$i]['kundennummer'] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='".$arr_verkauf[$i]['adresse']."' LIMIT 1");
$arr_verkauf[$i]['projekt'] = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='".$arr_verkauf[$i]['adresse']."' LIMIT 1");
$arr_verkauf[$i]['projekt'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr_verkauf[$i]['projekt']."' LIMIT 1");
$result .='';
$result .=''.$verkaufValue['ab_menge'].'';
$result .=''.$verkaufValue['preis'].'';
$result .=''.$verkaufValue['vpe'].'';
if($verkaufValue['vpe_menge'] > 0){
$result .= '' . $verkaufValue['vpe_menge'] . '';
}
$result .=''.$verkaufValue['waehrung'].'';
if($verkaufValue['kundennummer']!='')
{
$result .=''.$verkaufValue['kundennummer'].'';
$result .=''.$verkaufValue['projekt'].'';
if($verkaufValue['kundenartikelnummer']!=''){
$result .= '' . $verkaufValue['kundenartikelnummer'] . '';
}
}
$result .='';
}
$result .='';
}
return $result;
}
public function BelegeimportAusfuehren($idliste = null, $uebertragungen = false)
{
$ret = null;
$erlaubtebelege = array(
'auftrag',
'lieferschein',
'rechnung',
'gutschrift',
'angebot',
'preisanfrage',
'bestellung',
'produktion',
'proformarechnung',
'retoure'
);
$belege = $this->app->DB->SelectArr('SELECT *
FROM belegeimport
WHERE '.($idliste?' id in ('.implode(', ',$idliste).') ':"userid='".$this->app->User->GetID()."'").'
ORDER BY art, beleg_hauptbelegnr, beleg_belegnr,artikel_sort, id');
if($belege) {
if($uebertragungen) {
$transferData = $this->app->DB->SelectRow(
sprintf(
'SELECT `api`, `projekt`,`auftrageingang`,`bestellungeingang`, `createproduction`, `ownaddress`,
`createarticleifnotexists`, `createarticleasstoragearticle`
FROM `uebertragungen_account`
WHERE `id` = %d
LIMIT 1',
$uebertragungen
)
);
$this->uebertragung_account = $uebertragungen;
$this->api_id = $transferData['api'];
$projekt = $transferData['projekt'];
$ret = null;
if(empty($transferData['alldoctypes'])) {
$erlaubtebelege = array();
if($transferData['auftrageingang']) {
$erlaubtebelege[] = 'auftrag';
$erlaubtebelege[] = 'angebot';
}
if($transferData['bestellungeingang']) {
$erlaubtebelege[] = 'bestellung';
$erlaubtebelege[] = 'produktion';
}
}
}
$aktbelegart = false;
$aktbelegnr = false;
$aktbelegid = false;
$hauptbelegnr = false;
//Für Belegstatus "angelegt", um die Belegnr entfernen zu können
$erstelltebelegeids = array();
$erstelltebelegeNichtAngelegtids = [];
foreach($belege as $beleg) {
if(!empty($beleg['art'])) {
$beleg['art'] = trim(strtolower($beleg['art']));
}
if($beleg['art'] && $beleg['beleg_belegnr'] && in_array($beleg['art'],$erlaubtebelege)) {
if($beleg['art'] != $aktbelegart || $beleg['beleg_belegnr'] != $aktbelegnr)
{
$projekt = !empty($beleg['projekt'])?$beleg['projekt']:0;
if(empty($projekt)) {
$projekt = !empty($beleg['beleg_projekt'])?$beleg['beleg_projekt']:0;
}
$aktbelegnr = $beleg['beleg_belegnr'];
$hauptbelegnr = $beleg['beleg_hauptbelegnr'];
$aktbelegart = $beleg['art'];
$aktbelegid = false;
$alteadresse = $beleg['adresse'];
if($beleg['adresse'] && $uebertragungen) {
$beleg['adresse'] = $this->GetFromExtID('adresse', $beleg['adresse']);
}
if(!$beleg['adresse'] && $uebertragungen && $beleg['beleg_lieferantennummer'] != '' && ($beleg['art'] === 'bestellung' || $beleg['art'] === 'produktion')) {
$beleg['adresse'] = $this->app->DB->Select(
sprintf(
'SELECT id
FROM adresse
WHERE lieferantennummer <> \'\' AND lieferantennummer = \'%s\' AND IFNULL(geloescht,0) = 0
ORDER BY projekt = %d DESC
LIMIT 1',
$this->app->DB->real_escape_string($beleg['beleg_lieferantennummer']), (int)$beleg['projekt']
)
);
}
if($uebertragungen && !empty($beleg['adresse']) && $beleg['art'] === 'bestellung'
&& !empty($transferData['createproduction']) && $beleg['adresse'] == $transferData['ownaddress']
) {
$beleg['art'] = 'produktion';
}
if($uebertragungen) {
$hauptbelegnr = $this->GetFromExtID($beleg['art'], $hauptbelegnr);
if($hauptbelegnr != '')$hauptbelegnr = $this->app->DB->Select("SELECT belegnr
FROM '".$beleg['art']."' WHERE id = '$hauptbelegnr' LIMIT 1");
if(!$beleg['beleg_projekt']) {
$beleg['beleg_projekt'] = $projekt;
}
}
if($uebertragungen && !$beleg['adresse'] && $beleg['art'] === 'produktion' && !empty($beleg['beleg_auftragid'])){
$beleg['adresse'] = $this->app->DB->Select(
sprintf(
'SELECT adresse FROM auftrag WHERE id = %d LIMIT 1', $beleg['beleg_auftragid']
)
);
}
if(!$beleg['adresse'] && $uebertragungen) {
$adresseprojekt = '';
if($projekt) {
$adresseprojekt = " AND projekt = '$projekt' ";
}
if(in_array($beleg['art'],
array('auftrag','lieferschein','rechnung','gutschrift','angebot','produktion','retoure')
)) {
$beleg['adresse'] = $this->app->DB->Select("SELECT id FROM adresse
WHERE name='".$this->app->DB->real_escape_string($beleg['beleg_name'])."'
AND email='".$this->app->DB->real_escape_string($beleg['beleg_email'])."'
AND strasse='".$this->app->DB->real_escape_string((string)$beleg['beleg_strasse'])."'
AND plz='".$this->app->DB->real_escape_string((string)$beleg['beleg_plz'])."'
AND ort='".$this->app->DB->real_escape_string((string)$beleg['beleg_ort'])."'
AND kundennummer <> '' AND geloescht!=1 $adresseprojekt LIMIT 1");
}
else {
$beleg['adresse'] = $this->app->DB->Select("SELECT id FROM adresse
WHERE name='".
$this->app->DB->real_escape_string($beleg['beleg_name'])."'
AND email='".$this->app->DB->real_escape_string($beleg['beleg_email'])."'
AND strasse='".$this->app->DB->real_escape_string((string)$beleg['beleg_strasse'])."'
AND plz='".$this->app->DB->real_escape_string((string)$beleg['beleg_plz'])."'
AND ort='".$this->app->DB->real_escape_string((string)$beleg['beleg_ort'])."'
AND lieferantennummer <> '' AND geloescht!=1 $adresseprojekt LIMIT 1");
}
if($beleg['beleg_kundennummer'] == '' && $beleg['adresse']) {
$beleg['beleg_kundennummer'] = $this->app->DB->Select("SELECT kundennummer
FROM adresse WHERE id = '".$beleg['adresse']."' LIMIT 1");
}
}
$belegKundennummer = !empty($beleg['beleg_kundennummer'])?$beleg['beleg_kundennummer']:'';
if(empty($belegKundennummer)) {
$belegKundennummer = !empty($beleg['kundennummer'])?$beleg['kundennummer']:'';
}
if(strtoupper((string)$belegKundennummer) === 'NEU' || strtoupper($belegKundennummer) === 'NEW') {
$beleg['adresse'] = 0;
}
if(!$beleg['adresse']) {
if(in_array($beleg['art'],array('auftrag','lieferschein','rechnung','gutschrift','angebot', 'produktion'))) {
$adr['kundennummer'] = $beleg['beleg_kundennummer'];
if((string)$adr['kundennummer'] === '' || strtoupper((string)$adr['kundennummer']) === 'NEU' ||
strtoupper($adr['kundennummer']) === 'NEW') {
$adr['kundennummer'] = $this->app->erp->GetNextKundennummer($beleg['beleg_projekt']);
}
}else{
$adr['lieferantennummer'] = $this->app->erp->GetNextLieferantennummer($beleg['beleg_projekt']);
}
if(!$beleg['beleg_projekt'])$beleg['beleg_projekt'] = $this->app->erp->Firmendaten('projekt');
$adr['name'] = $beleg['beleg_name'];
$adr['abteilung'] = $beleg['beleg_abteilung'];
$adr['unterabteilung'] = $beleg['beleg_unterabteilung'];
$adr['adresszusatz'] = $beleg['beleg_adresszusatz'];
$adr['ansprechpartner'] = $beleg['beleg_ansprechpartner'];
$adr['telefon'] = $beleg['beleg_telefon'];
$adr['adresszusatz'] = $beleg['beleg_adresszusatz'];
$adr['email'] = $beleg['beleg_email'];
$adr['land'] = $beleg['beleg_land'];
if($adr['land']=="") {
$adr['land'] = $this->app->erp->Firmendaten("land");
$beleg['beleg_land'] = $adr['land'];
}
$adr['strasse'] = $beleg['beleg_strasse'];
$adr['plz'] = $beleg['beleg_plz'];
$adr['ort'] = $beleg['beleg_ort'];
$adr['lieferbedingung'] = $beleg['beleg_lieferbedingung'];
$adr['projekt'] = $beleg['beleg_projekt'];
$beleg['adresse'] = $this->app->erp->InsertUpdateAdresse($adr);
if($alteadresse && $alteadresse != $beleg['adresse'])
{
$this->SetExtIDMapping('adresse', $beleg['adresse'], $alteadresse);
}
unset($adr);
}
if($beleg['adresse'])
{
if($uebertragungen)
{
$check = $this->GetFromExtID($beleg['art'], $beleg['beleg_belegnr']);
}else{
$check = $this->app->DB->Select("SELECT id FROM ".$beleg['art']."
WHERE belegnr = '".$this->app->DB->real_escape_string($beleg['beleg_belegnr'])."' LIMIT 1");
}
if(!$check)
{
$methode = 'Create'.ucfirst($beleg['art']);
$methodeLoad = 'Load'.ucfirst($beleg['art']).'Standardwerte';
if(method_exists($this->app->erp, $methode))
{
$check = $this->app->erp->$methode($beleg['adresse']);
if($uebertragungen)
{
$beleg['id'] = $check;
$ret[] = $beleg;
}
if(method_exists($this->app->erp, $methodeLoad)){
$this->app->erp->$methodeLoad($check, $beleg['adresse']);
}
if($beleg['status'] !== 'angelegt')
{
if($beleg['beleg_belegnr']==='NEU' || $beleg['beleg_belegnr']==='NEW' || $beleg['beleg_belegnr']=='' ||
$beleg['beleg_belegnr']==='ENTWURF' || !isset($beleg['beleg_belegnr']) || $uebertragungen) {
$beleg['beleg_belegnr'] = $this->app->erp->GetNextNummer($beleg['art'],$beleg['beleg_projekt'],$check);
}
}else {
$beleg['beleg_belegnr'] = '';
}
if($check)
{
$adressArr = $this->app->DB->SelectRow(
sprintf(
'SELECT * FROM adresse WHERE id = %d LIMIT 1',
$beleg['adrese']
)
);
if(!$beleg['beleg_projekt']) {
$beleg['beleg_projekt'] = $this->app->DB->Select("SELECT projekt
FROM adresse
WHERE id = '".$beleg['adresse']."'
LIMIT 1");
}
if($beleg['beleg_projekt'] &&
$beleg['beleg_projekt'] != $this->app->DB->Select("SELECT projekt
FROM ".$beleg['art']."
WHERE id = '$check' LIMIT 1"))
{
$this->app->DB->Update("UPDATE ".$beleg['art']." SET projekt = '".$beleg['beleg_projekt']."'
WHERE id = '$check' LIMIT 1");
if($beleg['art'] === 'auftrag')
{
$standardlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '".$beleg['beleg_projekt']."' LIMIT 1");
if($standardlager)$this->app->DB->Update("UPDATE auftrag SET standardlager = '$standardlager'
WHERE id = '$check' LIMIT 1");
if($this->app->erp->StandardZahlungsweise($beleg['beleg_projekt'])==="rechnung")
{
$this->app->DB->Update("UPDATE auftrag
set zahlungsweise = '".$this->app->erp->StandardZahlungsweise($beleg['beleg_projekt'])."',
zahlungszieltage = '".$this->app->erp->ZahlungsZielTage($beleg['beleg_projekt'])."',
zahlungszieltageskonto = '".$this->app->erp->ZahlungsZielTageSkonto($beleg['beleg_projekt'])."',
zahlungszielskonto = '".$this->app->erp->ZahlungsZielSkonto($beleg['beleg_projekt'])."'
WHERE id = '$check' LIMIT 1");
}else{
$this->app->DB->Update("UPDATE auftrag
set zahlungsweise = '".$this->app->erp->StandardZahlungsweise($beleg['beleg_projekt'])."',
zahlungszieltage = '0', zahlungszieltageskonto = '0', zahlungszielskonto = '0'
WHERE id = '".$check."' LIMIT 1");
}
}
$this->app->erp->LoadSteuersaetzeWaehrung($check,$beleg['art'],$beleg['beleg_projekt']);
}
$teillieferungvon = false;
if($hauptbelegnr)
{
$teillieferungvon = $this->app->DB->Select("SELECT id
FROM auftrag
WHERE belegnr = '".$this->app->DB->real_escape_string($hauptbelegnr)."'
LIMIT 1");
if($teillieferungvon)
{
$teillieferungnummer= $this->app->DB->Select("SELECT MAX(teillieferungnummer) FROM auftrag WHERE teillieferungvon='$teillieferungvon'");
$teillieferungnummer++;
$this->app->DB->Update("UPDATE ".$beleg['art']."
SET teillieferungvon = '".$teillieferungvon."',teillieferungnummer='$teillieferungnummer'
WHERE id = '$check' LIMIT 1");
}
}
$fields_fromdb = array('name','strasse','ort','land','plz');
foreach($fields_fromdb as $fieldname)
{
if($beleg['beleg_'.$fieldname]=='') {
$beleg['beleg_'.$fieldname] = $this->app->DB->Select("SELECT ".$fieldname."
FROM adresse
WHERE id='".$beleg['adresse']."'
LIMIT 1");
}
}
$belegArt = $beleg['art'];
if($beleg['beleg_status']) {
$this->app->DB->Update("UPDATE ".$belegArt."
SET status = '".$this->app->DB->real_escape_string($beleg['beleg_status'])."' WHERE id = '$check' LIMIT 1");
}else{
$this->app->DB->Update("UPDATE ".$belegArt."
SET status = '".$this->app->DB->real_escape_string($beleg['status'])."' WHERE id = '$check' LIMIT 1");
}
if($beleg['beleg_datum'])
{
$this->app->DB->Update("UPDATE ".$belegArt."
SET datum = '".$this->app->DB->real_escape_string($beleg['beleg_datum'])."' WHERE id = '$check' LIMIT 1");
}else{
$this->app->DB->Update("UPDATE ".$belegArt."
SET datum = now() WHERE id = '$check' AND datum = '0000-00-00' LIMIT 1");
}
if($beleg['beleg_lieferdatum'])
{
if($belegArt === 'bestellung') {
$this->app->DB->Update("UPDATE bestellung
SET gewuenschteslieferdatum = '" . $this->app->DB->real_escape_string($beleg['beleg_lieferdatum']) . "' WHERE id = '$check' LIMIT 1");
}else{
$this->app->DB->Update("UPDATE " . $belegArt . "
SET lieferdatum = '" . $this->app->DB->real_escape_string($beleg['beleg_lieferdatum']) . "' WHERE id = '$check' LIMIT 1");
}
}
if($beleg['beleg_tatsaechlicheslieferdatum'])
{
$this->app->DB->Update("UPDATE ".$belegArt."
SET tatsaechlicheslieferdatum = '".$this->app->DB->real_escape_string($beleg['beleg_tatsaechlicheslieferdatum'])."' WHERE id = '$check' LIMIT 1");
}
if($beleg['beleg_art'])
{
$this->app->DB->Update("UPDATE ".$belegArt."
SET art = '".$this->app->DB->real_escape_string($beleg['beleg_art'])."' WHERE id = '$check' LIMIT 1");
}
if($beleg['beleg_versandart'])
{
$this->app->DB->Update("UPDATE ".$belegArt." SET versandart = '".$this->app->DB->real_escape_string($beleg['beleg_versandart'])."' WHERE id = '$check' LIMIT 1");
}
if($beleg['beleg_zahlungsweise'])
{
$this->app->DB->Update("UPDATE ".$belegArt." SET zahlungsweise = '".$this->app->DB->real_escape_string($beleg['beleg_zahlungsweise'])."' WHERE id = '$check' LIMIT 1");
}
$this->app->DB->Update("UPDATE ".$belegArt." SET belegnr = '".$this->app->DB->real_escape_string($beleg['beleg_belegnr'])."' WHERE id = '$check' LIMIT 1");
if(empty($beleg['kundennummer']) && $beleg['art'] !== 'bestellung') {
$beleg['kundennummer'] = $adressArr['kundennummer'];
}
if(empty($beleg['beleg_name'])) {
$beleg['beleg_name'] = $adressArr['name'];
$beleg['beleg_plz'] = $adressArr['plz'];
$beleg['beleg_ort'] = $adressArr['ort'];
$beleg['beleg_land'] = $adressArr['land'];
$beleg['beleg_abteilung'] = $adressArr['abteilung'];
$beleg['beleg_unterabteilung'] = $adressArr['unterabteilung'];
$beleg['beleg_adresszusatz'] = $adressArr['adresszusatz'];
}
$this->app->DB->Update("UPDATE ".$belegArt." SET name = '".$this->app->DB->real_escape_string($beleg['beleg_name'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET abteilung = '".$this->app->DB->real_escape_string($beleg['beleg_abteilung'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET unterabteilung = '".$this->app->DB->real_escape_string($beleg['beleg_unterabteilung'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET strasse = '".$this->app->DB->real_escape_string($beleg['beleg_strasse'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET plz = '".$this->app->DB->real_escape_string($beleg['beleg_plz'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET ort = '".$this->app->DB->real_escape_string($beleg['beleg_ort'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET land = '".$this->app->DB->real_escape_string($beleg['beleg_land'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET email = '".$this->app->DB->real_escape_string($beleg['beleg_email'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET telefon = '".$this->app->DB->real_escape_string($beleg['beleg_telefon'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET adresszusatz = '".$this->app->DB->real_escape_string($beleg['beleg_adresszusatz'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET kundennummer = '".$this->app->DB->real_escape_string($beleg['beleg_kundennummer'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET adresse = '".$this->app->DB->real_escape_string($beleg['adresse'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET internebemerkung = '".$this->app->DB->real_escape_string($beleg['beleg_internebemerkung'])."' WHERE id = '$check' LIMIT 1");
$this->app->DB->Update("UPDATE ".$belegArt." SET internebezeichnung = '".$this->app->DB->real_escape_string($beleg['beleg_internebezeichnung'])."' WHERE id = '$check' LIMIT 1");
if($belegArt !== 'bestellung') {
$this->app->DB->Update("UPDATE " . $belegArt . " SET aktion = '" . $this->app->DB->real_escape_string($beleg['beleg_aktion']) . "' WHERE id = '$check' LIMIT 1");
}
if($belegArt === 'bestellung') {
$this->app->DB->Update("UPDATE ".$belegArt." SET lieferantennummer = '".$this->app->DB->real_escape_string($beleg['beleg_lieferantennummer'])."' WHERE id = '$check' LIMIT 1");
}
$this->app->DB->Update("UPDATE ".$belegArt." SET freitext = '".$this->app->DB->real_escape_string($beleg['beleg_freitext'])."' WHERE id = '$check' LIMIT 1");
if($belegArt !== 'bestellung'){
$this->app->DB->Update("UPDATE " . $belegArt . " SET ihrebestellnummer = '" . $this->app->DB->real_escape_string($beleg['beleg_ihrebestellnummer']) . "' WHERE id = '$check' LIMIT 1");
}
$this->app->DB->Update("UPDATE ".$belegArt." SET lieferbedingung = '".$this->app->DB->real_escape_string($beleg['beleg_lieferbedingung'])."' WHERE id = '$check' LIMIT 1");
if($belegArt === 'produktion') {
$this->app->DB->Update(
sprintf(
'UPDATE produktion SET unterlistenexplodieren = %d WHERE id = %d LIMIT 1',
$beleg['beleg_unterlistenexplodieren'], $check
)
);
if(!empty($beleg['beleg_auftragid'])) {
$this->app->DB->Update(
sprintf(
'UPDATE produktion SET auftragid = %d WHERE id = %d LIMIT 1',
$beleg['beleg_auftragid'], $check
)
);
$datumauslieferung = $this->app->DB->Select(
sprintf(
'SELECT datumauslieferung FROM produktion WHERE id = %d', $check
)
);
IF($datumauslieferung == '' || $datumauslieferung === '0000-00-00') {
$datumauslieferung = $this->app->DB->Select(
sprintf(
'SELECT lieferdatum FROM auftrag WHERE id = %d', $beleg['beleg_auftragid']
)
);
IF($datumauslieferung == '' || $datumauslieferung === '0000-00-00') {
$datumauslieferung = $this->app->DB->Select(
sprintf(
'SELECT datum FROM auftrag WHERE id = %d', $beleg['beleg_auftragid']
)
);
}
if($datumauslieferung != '' && $datumauslieferung !== '0000-00-00') {
$this->app->DB->Update(
sprintf(
"UPDATE produktion SET datumauslieferung = '%s' WHERE id = %d",
$datumauslieferung, $check
)
);
}
}
}
}
}
}
}
if($check)
{
$aktbelegid = $check;
if($beleg['status'] === 'angelegt'){
//Merken der Belegids für nachträgliches löschen der Belegnummern aus der Angebotstabelle
$erstelltebelegeids[$check] = $beleg['art'];
} else {
$erstelltebelegeNichtAngelegtids[$check] = $beleg['art'];
}
}
}
}
if($aktbelegid && ($beleg['artikel'] || $beleg['artikel_nummer'])) {
if(!$beleg['artikel']) {
$beleg['artikel'] = $this->app->DB->Select("SELECT id
FROM artikel
WHERE nummer = '".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."' and geloescht <> 1
ORDER BY projekt = '".$beleg['beleg_projekt']."' DESC
LIMIT 1");
if(!$beleg['artikel'] && isset($beleg['artikel_ean']) && $beleg['artikel_ean'] != '') {
$beleg['artikel'] = $this->app->DB->Select("SELECT id
FROM artikel
WHERE ean = '".$this->app->DB->real_escape_string($beleg['artikel_ean'])."' AND ean <> '' and geloescht <> 1
ORDER BY projekt = '".$beleg['beleg_projekt']."' DESC
LIMIT 1");
}
}
if(!$beleg['artikel']) {
$art['nummer'] = $beleg['artikel_nummer'];
if(isset($beleg['artikel_ean']) && $beleg['artikel_ean'] != '') {
$art['ean'] = $beleg['artikel_ean'];
}
$art['projekt'] = $beleg['beleg_projekt'];
$art['name_de'] = $beleg['artikel_bezeichnung'];
$art['anabregs_text'] = $beleg['artikel_bezeichnung'];
if($beleg['artikel_umsatzsteuer'] === 'ermaessigt') {
$art['umsatzsteuer'] = $beleg['artikel_umsatzsteuer'];
}
$art['einheit'] = $beleg['artikel_einheit'];
$art['zolltarifnummer'] = $beleg['artikel_zolltarifnummer'];
$art['herkunftsland'] = $beleg['artikel_herkunftsland'];
if(!empty($uebertragungen)
&& !empty($transferData['createarticleifnotexists'])
&& !empty($transferData['createarticleasstoragearticle'])
) {
$art['lagerartikel'] = 1;
}
$beleg['artikel'] = $this->app->erp->InsertUpdateArtikel($art);
unset($art);
}
if($beleg['artikel'])
{
if(empty($beleg['artikel_nummer'])) {
$beleg['artikel_nummer'] = $this->app->DB->Select(
sprintf(
'SELECT nummer FROM artikel WHERE id = %d LIMIT 1',
$beleg['artikel']
)
);
}
if(empty($beleg['artikel_bezeichnung'])) {
$article = $this->app->DB->SelectRow(
sprintf(
'SELECT art.name_de, art.name_en, art.`anabregs_text_en`, art.anabregs_text
FROM `artikel` AS `art` WHERE art.id = %d',
$beleg['artikel']
)
);
$sprache = $this->app->DB->Select(
sprintf(
'SELECT `sprache` FROM `%s` WHERE `id` = %d LIMIT 1',
$aktbelegart, $aktbelegid
)
);
if(empty($sprache)) {
$sprache = $this->app->DB->Select(
sprintf(
'SELECT `sprache` FROM `adresse` WHERE `id` = %d LIMIT 1',
$beleg['adresse']
)
);
}
if($sprache !== 'deutsch' && $sprache != '' && strtolower($sprache) !== 'de') {
if(!empty($article['name_en'])) {
$beleg['artikel_bezeichnung'] = $article['name_en'];
if(!empty($aricle['anabregs_text_en'])) {
$beleg['artikel_beschreibung'] = $aricle['anabregs_text_en'];
}
}
}
if(empty($beleg['artikel_bezeichnung'])){
$beleg['artikel_bezeichnung'] = $aricle['name_de'];
}
}
elseif($uebertragungen > 0) {
$article = $this->app->DB->SelectRow(
sprintf(
'SELECT art.name_de, art.name_en, art.`anabregs_text_en`, art.anabregs_text
FROM `artikel` AS `art` WHERE art.id = %d',
$beleg['artikel']
)
);
if(!empty($article['name_en']) && $beleg['artikel_bezeichnung'] !== $article['name_en']) {
$sprache = $this->app->DB->Select(
sprintf(
'SELECT `sprache` FROM `%s` WHERE `id` = %d LIMIT 1',
$aktbelegart, $aktbelegid
)
);
if(empty($sprache)) {
$sprache = $this->app->DB->Select(
sprintf(
'SELECT `sprache` FROM `adresse` WHERE `id` = %d LIMIT 1',
$beleg['adresse']
)
);
}
if($sprache !== 'deutsch' && $sprache != '' && strtolower($sprache) !== 'de') {
$beleg['artikel_bezeichnung'] = $article['name_en'];
if(!empty($article['anabregs_text_en'])) {
$beleg['artikel_beschreibung'] = $article['anabregs_text_en'];
}
}
}
}
$belegpos = false;
switch($aktbelegart)
{
case 'auftrag':
$belegpos = $this->app->erp->AddAuftragPositionManuell($aktbelegid, $beleg['artikel'],
($beleg['artikel_preis']/$beleg['artikel_preisfuermenge']), $beleg['artikel_menge'],
$beleg['artikel_bezeichnung'],$beleg['artikel_beschreibung']);
if(!$belegpos) {
$belegpos = $this->app->DB->GetInsertID();
}
if($teillieferungvon)
{
if(!$this->app->DB->Select("SELECT porto FROM artikel WHERE id = '".$beleg['artikel']."' LIMIT 1"))
{
$checkhauptartikel = $this->app->DB->SelectArr("SELECT id, menge, sort
FROM auftrag_position
WHERE artikel = '".$beleg['artikel']."' AND auftrag = '$teillieferungvon'
ORDER BY sort, menge = '".$beleg['menge']."' DESC, menge > '".$beleg['menge']."' DESC");
if($checkhauptartikel)
{
foreach($checkhauptartikel as $k => $v)
{
if($beleg['artikel_menge'] > 0)
{
if($v['menge'] > $beleg['artikel_menge'])
{
$this->app->DB->Update("UPDATE auftrag_position SET menge = menge - ".$beleg['artikel_menge']."
WHERE id = '".$v['id']."' LIMIT 1");
$beleg['artikel_menge'] = 0;
}else{
$this->app->DB->Delete("DELETE FROM auftrag_position WHERE id = '".$v['id']."' LIMIT 1");
$this->app->DB->Update("UPDATE auftrag_position SET sort = sort - 1
WHERE auftrag = '$teillieferungvon' AND sort > '".$v['sort']."'");
$beleg['artikel_menge'] -= $v['menge'];
}
}
}
$checkmengen = $this->app->DB->Select("SELECT ap.id FROM auftrag_position ap.left
join artikel a on ap.artikel = a.id WHERE ap.auftrag = '$teillieferungvon' AND a.porto <> 1 LIMIT 1");
if(!$checkmengen) {
$this->app->DB->Update("UPDATE auftrag SET status = 'abgeschlossen'
WHERE id = '$teillieferungvon' LIMIT 1");
}
$this->app->erp->ANABREGSNeuberechnen($teillieferungvon,$aktbelegart);
}
}
}
if($beleg['artikel_rabatt']) {
$this->app->DB->Update("UPDATE auftrag_position SET rabatt = '".$beleg['artikel_rabatt']."'
WHERE id = '$belegpos' LIMIT 1");
}
if($beleg['artikel_waehrung']) {
$this->app->DB->Update("UPDATE auftrag_position
SET waehrung = '".$this->app->DB->real_escape_string($beleg['artikel_waehrung'])."'
WHERE id = '$belegpos' LIMIT 1");
}
break;
case 'rechnung':
$belegpos = $this->app->erp->AddRechnungPositionManuell($aktbelegid, $beleg['artikel'],
($beleg['artikel_preis']/$beleg['artikel_preisfuermenge']),$beleg['artikel_menge'],$beleg['artikel_bezeichnung'],
$beleg['artikel_bezeichnung'],$beleg['artikel_waehrung']);
if(!$belegpos) {
$belegpos = $this->app->DB->GetInsertID();
}
if($beleg['artikel_rabatt'])$this->app->DB->Update("UPDATE rechnung_position
SET rabatt = '".$beleg['artikel_rabatt']."' WHERE id = '$belegpos' LIMIT 1");
break;
case 'gutschrift':
$sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM gutschrift_position WHERE gutschrift = '$aktbelegid'");
$this->app->DB->Insert("INSERT INTO gutschrift_position (gutschrift, artikel, sort,
preis, menge, waehrung, rabatt, bezeichnung,beschreibung)
values ('".$aktbelegid."','".$beleg['artikel']."','".$sort."',
'".($beleg['artikel_preis']/$beleg['artikel_preisfuermenge'])."','".$beleg['artikel_menge']."',
'".$this->app->DB->real_escape_string($beleg['artikel_waehrung'])."','".$beleg['artikel_rabatt']."',
'".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."')");
$belegpos = $this->app->DB->GetInsertID();
break;
case 'bestellung':
$sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM bestellung_position WHERE bestellung = '$aktbelegid'");
$umsatzsteuer = $beleg['artikel_umsatzsteuer'] === 'ermaessigt'?'ermaessigt':'';
$datum = $this->app->DB->Select("SELECT datum FROM bestellung WHERE id = '$aktbelegid' LIMIT 1");
$einkauf = $this->app->erp->Einkaufspreis($beleg['artikel'],$beleg['artikel_menge'],$beleg['adresse']);
if(!empty($einkauf)){
$bestellnummer = $this->app->DB->Select(
sprintf(
'SELECT e.bestellnummer FROM `einkaufspreise` AS `e` WHERE e.id = %d',
$einkauf
)
);
$bestellnummer = $this->app->DB->real_escape_string($bestellnummer);
}
if(empty($bestellnummer)){
$bestellnummer = $this->app->DB->real_escape_string($beleg['artikel_nummer']);
}
$this->app->DB->Insert(
sprintf(
"INSERT INTO bestellung_position (bestellung,artikel,bezeichnunglieferant,bestellnummer,menge,preis,
waehrung, sort,lieferdatum, umsatzsteuer, status,projekt, beschreibung)
VALUES (%d,%d,'%s','%s',%f,%f,
'%s',%d,'%s','%s',
'angelegt','%s','%s')",
(int)$aktbelegid,
(int)$beleg['artikel'],
$this->app->DB->real_escape_string($beleg['artikel_bezeichnung']),
$bestellnummer,
(float)$beleg['artikel_menge'],
(float)($beleg['artikel_preis']/$beleg['artikel_preisfuermenge']),
$this->app->DB->real_escape_string($beleg['artikel_waehrung']),
$sort,$datum,$umsatzsteuer,
$this->app->DB->real_escape_string($beleg['artikel_bezeichnung']),
$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])
)
);
$belegpos = $this->app->DB->GetInsertID();
break;
case 'angebot':
$sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM angebot_position WHERE angebot = '$aktbelegid'");
$umsatzsteuer = $beleg['artikel_umsatzsteuer'] === 'ermaessigt'?'ermaessigt':'';
$datum = $this->app->DB->Select("SELECT datum FROM angebot WHERE id = '$aktbelegid' LIMIT 1");
$this->app->DB->Insert("INSERT INTO angebot_position (angebot,artikel,beschreibung,bezeichnung,nummer,menge,preis,
waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe)
VALUES ($aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."',
'".$beleg['artikel_menge']."','".($beleg['artikel_preis']/$beleg['artikel_preisfuermenge'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_waehrung'])."','$sort','$datum','$umsatzsteuer','angelegt',
'$projekt','')");
$belegpos = $this->app->DB->GetInsertID();
break;
case 'lieferschein':
$datum = '0000-00-00';
$sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM lieferschein_position WHERE lieferschein = '$aktbelegid'");
$this->app->DB->Insert("INSERT INTO lieferschein_position (lieferschein,artikel,beschreibung,bezeichnung,nummer,menge,
sort,lieferdatum, status,projekt)
VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."',
'$sort','$datum','angelegt','$projekt')");
$belegpos = $this->app->DB->GetInsertID();
break;
case 'retoure':
$datum = '0000-00-00';
$sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM retoure_position WHERE retoure = '$aktbelegid'");
$this->app->DB->Insert("INSERT INTO retoure_position (retoure,artikel,beschreibung,bezeichnung,nummer,menge,
sort,lieferdatum, projekt)
VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."',
'$sort','$datum','$projekt')");
$belegpos = $this->app->DB->GetInsertID();
break;
case 'preisanfrage':
$sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM preisanfrage_position WHERE preisanfrage= '$aktbelegid'");
$datum = $this->app->DB->Select("SELECT datum FROM preisanfrage WHERE id = '$aktbelegid' LIMIT 1");
$this->app->DB->Insert("INSERT INTO preisanfrage_position (preisanfrage,artikel,beschreibung,bezeichnung,nummer,menge,
sort,lieferdatum, status,projekt)
VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."',
'$sort','$datum','angelegt','$projekt')");
$belegpos = $this->app->DB->GetInsertID();
break;
case 'proformarechnung':
$sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM proformarechnung_position WHERE proformarechnung = '$aktbelegid'");
$datum = $this->app->DB->Select("SELECT datum FROM proformarechnung WHERE id = '$aktbelegid' LIMIT 1");
$umsatzsteuer = $beleg['artikel_umsatzsteuer'] === 'ermaessigt'?'ermaessigt':'';
$this->app->DB->Insert("INSERT INTO proformarechnung_position (proformarechnung,artikel,beschreibung,bezeichnung,
nummer,menge, sort,lieferdatum, status,projekt,umsatzsteuer)
VALUES ($aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."','$sort',
'$datum','angelegt','$projekt','$umsatzsteuer')");
$belegpos = $this->app->DB->GetInsertID();
break;
case 'produktion':
$sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM produktion_position WHERE produktion= '$aktbelegid'");
$datum = $this->app->DB->Select("SELECT datum FROM produktion WHERE id = '$aktbelegid' LIMIT 1");
$this->app->DB->Insert("INSERT INTO produktion_position (produktion,artikel,beschreibung,bezeichnung,nummer,menge,
sort,lieferdatum, status,projekt)
VALUES ('$aktbelegid','".$beleg['artikel']."','".$this->app->DB->real_escape_string($beleg['artikel_beschreibung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_bezeichnung'])."',
'".$this->app->DB->real_escape_string($beleg['artikel_nummer'])."','".$beleg['artikel_menge']."','$sort',
'$datum','angelegt','$projekt')");
$belegpos = $this->app->DB->GetInsertID();
$already_new_item_is_bom = $this->app->DB->Select(
sprintf('SELECT stueckliste FROM artikel WHERE id=%d AND produktion=1',
$beleg['artikel']
)
);
$already = $this->app->DB->Select(
sprintf(
'SELECT id FROM produktion_position WHERE produktion=%d AND explodiert=1 LIMIT 1',
$aktbelegid
)
);
if(!$already || !$already_new_item_is_bom) {
/** @var Produktion $objProduction */
$objProduction = $this->app->erp->LoadModul('produktion');
if(!empty($objProduction) && method_exists($objProduction, 'addArbeitsanweisungenFunktionsprotokoll')) {
$objProduction->addArbeitsanweisungenFunktionsprotokoll($aktbelegid,$belegpos, $beleg['artikel']);
}
}
if(!empty($objProduction)){
$this->app->erp->AuftragExplodieren($aktbelegid, 'produktion');
$objProduction->ProduktionEinzelnBerechnen($aktbelegid);
$objProduction->ProduktionNeuberechnen($aktbelegid);
}
break;
default:
break;
}
if($belegpos)
{
$artikelnummerkunde = $this->app->DB->real_escape_string(
$this->app->DB->Select(
"SELECT kundenartikelnummer
FROM verkaufspreise
WHERE adresse='".$beleg['beleg_adresse']."' AND artikel='".$beleg['artikel']."'
AND kundenartikelnummer!='' AND ab_menge <=".
(float)$beleg['artikel_menge']."
AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00')
ORDER by ab_menge DESC
LIMIT 1"
));
if($artikelnummerkunde == ''){
// Anzeige Artikel Nummer von Gruppe aus Verkaufspreis
$returnwaehrung = null;
$gruppevkresult = $this->app->erp->GetVerkaufspreis(
$beleg['artikel'],
(float)$beleg['artikel_menge'],
$beleg['adresse'],
!empty($beleg['artikel_waehrung'])?$beleg['artikel_waehrung']:'EUR',
$returnwaehrung,
true
);
if($gruppevkresult['kundenartikelnummer'] != ''){
$artikelnummerkunde = $gruppevkresult['kundenartikelnummer'];
}
}
if(!empty($artikelnummerkunde)) {
$this->app->DB->Update(
sprintf(
"UPDATE `%s` SET artikelnummerkunde = '%s' WHERE id = %d ",
$aktbelegart.'_position',
$this->app->DB->real_escape_string($artikelnummerkunde),
$belegpos
)
);
}
$felder = array('artikelnummerkunde','herkunftsland','zolltarifnummer','einheit','lieferdatum');
for($i = 1; $i <= 20; $i++) {
$felder[] = 'freifeld'.$i;
}
foreach($felder as $feld)
{
$this->app->DB->Update("UPDATE ".$aktbelegart."_position
SET $feld = '".$this->app->DB->real_escape_string($beleg['artikel_'.$feld])."'
WHERE id = '$belegpos' LIMIT 1");
}
$this->app->erp->ANABREGSNeuberechnen($aktbelegid,$aktbelegart);
$this->app->DB->Delete("DELETE FROM belegeimport WHERE id = '".$beleg['id']."' LIMIT 1");
}
}
}
}
}
foreach ($erstelltebelegeids as $belegid => $belegart) {
//Nachträgliches löschen aller Belegnummern aus den Angeboten wenn Status == angelegt
$this->app->DB->Update("UPDATE " . $belegart . " SET belegnr = '' WHERE id = '$belegid' LIMIT 1");
}
foreach ($erstelltebelegeNichtAngelegtids as $belegid => $belegart) {
if($this->app->DB->Select(
sprintf('
SELECT id
FROM `%s`
WHERE id = %d AND (status = \'freigegeben\' OR status = \'abgeschlossen\' OR status = \'versendet\') AND belegnr = \'\'
', $belegart, $belegid
)
)
){
$this->app->erp->BelegFreigabe($belegart, $belegid);
}
}
$msg = $this->app->erp->base64_url_encode("Die Belege wurden importiert!
");
}else{
$msg = $this->app->erp->base64_url_encode("Keine Belege zum Importieren gefunden!
");
}
if($uebertragungen) {
return $ret;
}
if($idliste) {
return !empty($belege)?count($belege):0;
}
return $msg;
}
public function BelegeimportDatei($_datei = null, $uebertragungen = false)
{
$ret = null;
$_projekt = 0;
if($uebertragungen) {
$_projekt = $this->app->DB->Select("SELECT projekt FROM uebertragungen_account WHERE id = '$uebertragungen' LIMIT 1");
}
if($_datei === null)
{
//$this->app->erp->BelegeimportMenu();
//$this->app->YUI->TableSearch('TAB1','belegeimport_list', 'show','','',basename(__FILE__), __CLASS__);
$art = $this->app->Secure->GetPOST("art");
$status = $this->app->Secure->GetPOST("status");
$datei = (int)$this->app->Secure->GetGET('datei');
}else{
$ret = null;
$art = '';
$datei = $_datei;
$status = 'angelegt';
}
if($uebertragungen) {
$api = $this->app->DB->Select("SELECT api FROM uebertragungen_account WHERE id = '$uebertragungen' LIMIT 1");
}
$row = 1;
if($_datei === null)
{
$art = $this->app->Secure->GetPOST("art");
$status = $this->app->Secure->GetPOST("status");
$datei = (int)$this->app->Secure->GetGET('datei');
}else{
$ret = null;
$art = '';
$datei = $_datei;
$status = 'angelegt';
}
if($datei || (!empty($_FILES['datei']) && !empty($_FILES['datei']['tmp_name'])))
{
if (
($handle = fopen(
$_datei === null?(isset($_FILES['datei'])?$_FILES['datei']['tmp_name']:$this->app->erp->GetDateiPfad($datei)):$datei,
'r')
) !== FALSE
) {
$vkpreisex = false;
$artikel_bezeichnung = false;
$beleg_datum = false;
$menge = false;
$beleg_art = false;
$beleg_nr_parent = 0;
$oldbeleg_belegnr = '';
$fields = [];
$csvseparator = $this->app->DB->Select(
sprintf(
'SELECT csvseparator FROM uebertragungen_account WHERE id = %d',
$uebertragungen
)
);
if(empty($csvseparator)) {
$csvseparator = ';';
}
while (($data = fgetcsv($handle, 0, $csvseparator,'"')) !== FALSE) {
$num = count($data);
//echo " $num Felder in Zeile $row:
\n";
if($row > 1){
if($_datei !== null) {
$status = 'angelegt';
}
for ($c=0; $c < $num; $c++){
if($fields[$c] === 'art' && $data[$c]) {
$art = trim(strtolower($data[$c]));
}
}
$this->app->DB->Insert("INSERT INTO belegeimport (userid,status,art) VALUES ('".($_datei === null?$this->app->User->GetID():0)."','$status','$art')");
$rowid = $this->app->DB->GetInsertID();
if($uebertragungen) {
$this->app->DB->Update("UPDATE belegeimport SET beleg_projekt = '$_projekt' WHERE id = '$rowid' LIMIT 1");
}
$ret[] = $rowid;
}
$preis = 0;
$preisfuermenge = 1;
$projekt = $_projekt;
$tmpartikelid = 0;
$tmpadresseid = 0;
for ($c=0; $c < $num; $c++){
if($row==1){
$fields[$c]=$this->app->DB->real_escape_string($data[$c]);
if($fields[$c] === 'artikel_preis')$vkpreisex = str_replace(',','.',$c);
if($fields[$c] === 'artikel_menge')$menge = str_replace(',','.',$c);
if($fields[$c] === 'artikel_bezeichnung')$artikel_bezeichnung = $c;
if($fields[$c] === 'beleg_datum')$beleg_datum = $c;
if($fields[$c] === 'beleg_art')$beleg_art = $c;
}else{
switch($fields[$c])
{
case 'beleg_status':
if(in_array($data[$c],['angelegt','freigegeben','storniert','abgeschlossen','gestartet','versendet'])) {
$status = $data[$c];
}
break;
case 'beleg_belegnr':
if($uebertragungen && ($data[$c] != '' && $data[$c] == $oldbeleg_belegnr))
{
$data[$c] = 'PARENT';
}elseif($uebertragungen && $oldbeleg_belegnr != $data[$c] && $data[$c] !== 'NEW' && $data[$c] !== 'PARENT')
{
$oldbeleg_belegnr = $data[$c];
}
if(($data[$c] !== 'PARENT' && $status === 'angelegt') || $data[$c] == ''){
$data[$c] = "NEW";
}
if($data[$c] === 'PARENT'){
if($beleg_nr_parent){
//Übernimm Belegnummer der vorherigen Zeile
$data[$c] = $beleg_nr_parent;
}else{
//Falls vor dieser PARENT Zeile kein Eintrag vorhanden ist soll sie als NEW betrachtet werden
$data[$c] = 'NEW';
}
}
if($data[$c] === 'NEW'){
if($status === 'angelegt'){
//Neue Entwurfsbelegnummer
$data[$c] = 'ENTWURF_'.$rowid.'_';
}else{
//suche nächste freie Belegnummer falls NEW oder leere Belegnummer
$data[$c] = $this->app->erp->GetNextNummer($art);
}
$oldbeleg_belegnr = $data[$c];
}
//Merke die aktuelle Belegnummer falls der nächste Eintrag PARENT ist
$beleg_nr_parent = $data[$c];
break;
case 'beleg_projekt':
if((!is_numeric($data[$c]) || strpos($data[$c],'.') !== false) && $data[$c])
{
$data[$c] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($data[$c])."' LIMIT 1");
if($data[$c]) {
$projekt = $data[$c];
}
}
break;
case 'artikel':
if($uebertragungen && $api)
{
if(!$tmpartikelid)
{
$tmpartikelid = $this->app->DB->Select(
"SELECT id_int
FROM api_mapping
WHERE id_ext = '%s' AND id_ext != '' AND id_int <> 0 AND tabelle = 'artikel' AND api = %d
LIMIT 1",
$data[$c], (int)$api
);
if($tmpartikelid > 0) {
$this->app->DB->Update("UPDATE belegeimport SET artikel='$tmpartikelid' WHERE id='".$rowid."' LIMIT 1");
}
}
}
break;
case 'artikel_nummer':
if(!$tmpartikelid) {
$tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$this->app->DB->real_escape_string($data[$c])."' AND nummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1");
}
if($tmpartikelid > 0) {
$this->app->DB->Update("UPDATE belegeimport SET artikel='$tmpartikelid' WHERE id='".$rowid."' LIMIT 1");
}
break;
case 'artikel_ean':
if(!$tmpartikelid)$tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='".$this->app->DB->real_escape_string($data[$c])."' AND ean != '' AND nummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1");
if($tmpartikelid > 0) {
$this->app->DB->Update("UPDATE belegeimport SET artikel='$tmpartikelid' WHERE id='".$rowid."' LIMIT 1");
}
break;
case 'adresse':
if($uebertragungen && $api)
{
$tmpadresseid = (int)$data[$c];
}
break;
case 'beleg_kundennummer':
if(!$tmpadresseid)
{
$tmpadresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$this->app->DB->real_escape_string($data[$c])."' AND kundennummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1");
if($tmpadresseid > 0) {
$this->app->DB->Update("UPDATE belegeimport SET adresse='$tmpadresseid' WHERE id='".$rowid."' LIMIT 1");
}
else $tmpadresseid = 0;
}
if($data[$c]=='') {
$data[$c] = 'NEW';
}
break;
case 'beleg_lieferantennummer':
if(!$tmpadresseid)
{
$tmpadresseid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$this->app->DB->real_escape_string($data[$c])."' AND lieferantennummer!='' AND geloescht!=1 ORDER BY projekt = '$projekt' DESC LIMIT 1");
if($tmpadresseid > 0) {
$this->app->DB->Update("UPDATE belegeimport SET adresse='$tmpadresseid' WHERE id='".$rowid."' LIMIT 1");
}
else $tmpadresseid = 0;
}
if($data[$c]=='') {
$data[$c] = 'NEW';
}
break;
case 'beleg_datum':
if(strpos($data[$c],'.') !== false)
{
$datuma = explode('.',$data[$c]);
if(count($datuma) == 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(count($datuma) == 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(count($datuma) == 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(count($datuma) == 3)
{
if(strlen($datuma[2]) == 2)
{
$curryear = date("Y")-2000;
if((int)$datuma[2] <= $curryear)
{
$data[$c] = $datuma[0].'.'.$datuma[1].'.20'.$datuma[2];
}else{
$data[$c] = $datuma[0].'.'.$datuma[1].'.19'.$datuma[2];
}
}
}
$data[$c] = date('Y-m-d',strtotime($data[$c]));
}
break;
case 'artikel_preis':
$preis = str_replace(',','.',$data[$c]);
if ($preisfuermenge == 0) {
$preisfuermenge =1;
}
$data[$c] = $preis / $preisfuermenge;
break;
case 'artikel_preisfuermenge':
$preisfuermenge = str_replace(',','.',$data[$c]);
if ($preisfuermenge == 0) {
$preisfuermenge =1;
}
$data['artikel_preis'] = $preis / $preisfuermenge;
break;
case 'artikel_rabatt':
case 'artikel_menge':
$data[$c] = str_replace(',','.',$data[$c]);
break;
}
if(isset($fields[$c]) && $fields[$c])
{
$this->app->DB->Update("UPDATE belegeimport SET ".$fields[$c]." = '".$this->app->DB->real_escape_string($data[$c])."' WHERE id='".$rowid."' LIMIT 1");
}
if(!empty($status)) {
$this->app->DB->Update(
sprintf(
"UPDATE belegeimport SET status = '%s' WHERE id = %d",
$this->app->DB->real_escape_string($status), $rowid
)
);
}
}
//echo $data[$c] . "
\n";
}
if($row > 1){
if($menge === false)
{
$this->app->DB->Update("UPDATE belegeimport SET artikel_menge = 1 WHERE id='".$rowid."' LIMIT 1");
}
if($beleg_datum === false)
{
$this->app->DB->Update("UPDATE belegeimport SET beleg_datum = now() WHERE id = '".$rowid."' LIMIT 1");
}
if($tmpadresseid && $beleg_art === false)
{
$arttmp = $this->app->DB->Select("SELECT art FROM adresse WHERE id = '$tmpadresseid' LIMIT 1");
if($arttmp) {
$this->app->DB->Update("UPDATE belegeimport SET beleg_art = '".$this->app->DB->real_escape_string($arttmp)."' WHERE id = '".$rowid."' LIMIT 1");
}
}
if( $tmpartikelid)
{
if($vkpreisex === false)
{
$this->app->DB->Update("UPDATE belegeimport SET artikel_preis = '".$this->app->erp->GetVerkaufspreis($tmpartikelid,($menge === false?1: ($data[$menge]>0?$data[$menge]:1)),$tmpadresseid )."' WHERE id = '".$rowid."' LIMIT 1");
}
if($artikel_bezeichnung === false)
{
$this->app->DB->Update("UPDATE belegeimport SET artikel_bezeichnung = '".$this->app->DB->real_escape_string($this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$tmpartikelid' LIMIT 1" ))."' WHERE id = '".$rowid."' LIMIT 1");
}
}
if(!$data[$menge]){
//Artikel mit Menge 0 entfernen
$this->app->DB->Update("DELETE FROM belegeimport WHERE id='".$rowid."'");
}
}
$row++;
}
fclose($handle);
}
}
return $ret;
}
}