app=$app; if($intern==true) { return; } //parent::GenExportvorlage($app); $this->app->ActionHandlerInit($this); $this->app->ActionHandler("create","ExportvorlageCreate"); $this->app->ActionHandler("edit","ExportvorlageEdit"); $this->app->ActionHandler("export","ExportvorlageExport"); $this->app->ActionHandler("list","ExportvorlageList"); $this->app->ActionHandler("delete","ExportvorlageDelete"); $this->app->ActionHandler("adressen","ExportvorlageAdressen"); $this->app->ActionHandler("adresseedit","ExportvorlageAdresseEdit"); $this->app->ActionHandlerListen($app); $this->app->erp->Headlines('Daten Export'); } function ExportvorlageAdresseEdit() { $this->app->Tpl->Parse('TAB1',"exportvorlage_uebersicht.tpl"); $this->app->Tpl->Set('TABTEXT',"Export"); $this->app->Tpl->Parse('PAGE',"tabview.tpl"); } function ExportvorlageAdressen() { // $this->app->Tpl->Parse(TAB1,"exportvorlage_adressen.tpl"); $this->app->YUI->TableSearch('TAB1',"adresse_export"); $this->app->erp->MenuEintrag("index.php?module=importvorlage&action=uebersicht","Zurück zur Übersicht"); $this->app->Tpl->Set('TABTEXT',"Export"); $this->app->Tpl->Parse('PAGE',"tabview.tpl"); } function ExportvorlageCreate() { $this->ExportvorlageMenu(); parent::ExportvorlageCreate(); } function ExportvorlageDelete() { $id = $this->app->Secure->GetGET("id"); if(is_numeric($id)) { $this->app->DB->Delete("DELETE FROM exportvorlage WHERE id='$id'"); } $this->ExportvorlageList(); } function ExportvorlageList() { $this->ExportvorlageMenu(); if($this->app->DB->Select("SELECT COUNT(id) FROM exportvorlage") <=0) { $this->app->DB->Insert("INSERT INTO `exportvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterexport`, `mitarbeiterletzterexport`, `exporttrennzeichen`, `exporterstezeilenummer`, `exportdatenmaskierung`, `exportzeichensatz`) VALUES ('', 'Standard Artikel Export (Format siehe Wiki)', 'nummer;\r\nname_de;\r\nname_en;\r\nbeschreibung_de;\r\nbeschreibung_en;\r\nkurztext_de;\r\nkurztext_en;\r\ninternerkommentar;\r\nhersteller;\r\nherstellernummer;\r\nherstellerlink;\r\nean;', '', 'artikel', '0000-00-00 00:00:00', '', 'semikolon', 2, 'keine', '');"); } parent::ExportvorlageList(); } function ExportvorlageMenu() { $id = $this->app->Secure->GetGET("id"); $bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM exportvorlage WHERE id='$id' LIMIT 1"); $this->app->Tpl->Set('KURZUEBERSCHRIFT2',$bezeichnung); if($this->app->Secure->GetGET("action")=="list") { $this->app->erp->MenuEintrag("index.php?module=exportvorlage&action=create","Neue Exportvorlage anlegen"); $this->app->erp->MenuEintrag("index.php?module=importvorlage&action=uebersicht","Zurück zur Übersicht"); } else { $this->app->erp->MenuEintrag("index.php?module=exportvorlage&action=edit&id=$id","Details"); $this->app->erp->MenuEintrag("index.php?module=exportvorlage&action=list","Zurück zur Übersicht"); $this->app->erp->MenuEintrag("index.php?module=exportvorlage&action=export&id=$id","Export starten: CSV Datei herunterladen"); //Excel herunterladen hat nicht funktioniert, stattdessen kam eine CSV, wurde wegen Ticket 127034 erstmal rausgenommen //$this->app->erp->MenuEintrag("index.php?module=exportvorlage&action=export&format=xls&id=$id","Export starten: Excel Datei herunterladen"); } } function ExportvorlageEdit() { $this->ExportvorlageMenu(); parent::ExportvorlageEdit(); } function ExportvorlageGetFields($id) { $fields = $this->app->DB->Select("SELECT fields FROM exportvorlage WHERE id='$id' LIMIT 1"); $fields = nl2br($fields); $fields = str_replace('
',';',$fields); $fields = str_replace(';;',';',$fields); $fieldsarray = explode(';',$fields); for($i=0;$i $v)$fieldsarray_items[$k] = trim($v); if($fieldsarray_items[1]!=""){ $csv_fields[$fieldsarray_items[0]]= $fieldsarray_items[1]; $csv_fields_keys[] = $fieldsarray_items[0]; } } return $csv_fields; } function ExportvorlageExport($internal=false,$id="",$filter=array(), $parameter = null) { //$output = ""; $xls = false; if($internal!=true) { $id = $this->app->Secure->GetGET('id'); $this->app->erp->MenuEintrag("index.php?module=exportvorlage&action=list","Zurück zur Übersicht"); $this->app->erp->MenuEintrag("index.php?module=exportvorlage&action=edit&id=$id","Details"); $this->app->erp->MenuEintrag("index.php?module=exportvorlage&action=export&id=$id","Export Einstellungen für aktuellen Export anpassen"); $exportvorlageArr = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM exportvorlage WHERE id = %d LIMIT 1', (int)$id ) ); if($this->app->Secure->GetGET('format') === 'xls') { $xls = true; } //$bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM exportvorlage WHERE id='$id' LIMIT 1"); $exporttrennzeichen = $exportvorlageArr['exporttrennzeichen']; $exporterstezeilenummer = $exportvorlageArr['exporterstezeilenummer']; $exportdatenmaskierung = $exportvorlageArr['exportdatenmaskierung']; //$exportzeichensatz = $this->app->DB->Select("SELECT exportzeichensatz FROM exportvorlage WHERE id='$id' LIMIT 1"); $fields = $exportvorlageArr['fields']; $fields_where = $exportvorlageArr['fields_where']; $ziel = $exportvorlageArr['ziel']; $filterdatum = $exportvorlageArr['filterdatum']; $filterprojekt = $exportvorlageArr['filterprojekt']; $submit = $this->app->Secure->GetPOST('submit'); if(($filterdatum=='1' || $filterprojekt=='1') && $submit=='') { $this->app->YUI->DatePicker('datum_von'); $this->app->YUI->DatePicker('datum_bis'); $this->app->YUI->AutoComplete('projekt','projektname',1); $this->app->Tpl->Parse('PAGE','exportvorlage_filter.tpl'); return ''; } }elseif($parameter && $internal && !$id) { if(!empty($parameter['format']) && $parameter['format'] === 'xls') { $xls = true; } //$bezeichnung = isset($parameter['bezeichnung'])?$parameter['bezeichnung']:''; $exporttrennzeichen = isset($parameter['exporttrennzeichen'])?$parameter['exporttrennzeichen']:'semikolon'; $exporterstezeilenummer = isset($parameter['exporterstezeilenummer'])?$parameter['exporterstezeilenummer']:1; $exportdatenmaskierung = isset($parameter['exportdatenmaskierung'])?$parameter['exportdatenmaskierung']:'gaensefuesschen'; //$exportzeichensatz = isset($parameter['exportzeichensatz'])?$parameter['exportzeichensatz']:''; $fields = isset($parameter['fields'])?$parameter['fields']:'nummer; name_de; name_en; beschreibung_de; beschreibung_en; kurztext_de; kurztext_en; internerkommentar; hersteller; herstellernummer; herstellerlink; ean;'; $fields_where = isset($parameter['fields_where'])?$parameter['fields_where']:''; $ziel = isset($parameter['ziel'])?$parameter['ziel']:'artikel'; $filterdatum = isset($parameter['filterdatum'])?$parameter['filterdatum']:''; $filterprojekt = isset($parameter['filterprojekt'])?$parameter['filterprojekt']:''; }elseif($internal && $id){ $exportvorlageArr = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM exportvorlage WHERE id = %d LIMIT 1', (int)$id ) ); if($this->app->Secure->GetGET('format') === 'xls') { $xls = true; } $exporttrennzeichen = $exportvorlageArr['exporttrennzeichen']; $exporterstezeilenummer = $exportvorlageArr['exporterstezeilenummer']; $exportdatenmaskierung = $exportvorlageArr['exportdatenmaskierung']; $fields = $exportvorlageArr['fields']; $fields_where = $exportvorlageArr['fields_where']; $ziel = $exportvorlageArr['ziel']; } $fields = nl2br($fields); $fields = str_replace('
',';',$fields); $fields = str_replace(';;',';',$fields); $fieldsarray = explode(';',$fields); list($fields_array, $joins) = $this->getFieldSqlCols($fieldsarray, $ziel); $join = implode( ' ', $joins); $subwhere = ''; $this->app->erp->RunHook('exportvorlage_export',4,$ziel,$fields_array, $join, $subwhere); //for($i=0;$iapp->Secure->GetPOST('datum_von'); $datum_bis = $this->app->Secure->GetPOST('datum_bis'); $projekt = $this->app->Secure->GetPOST('projekt'); } if($ziel==="angebot_position" || $ziel==="auftrag_position" || $ziel==="rechnung_position" || $ziel==="gutschrift_position" || $ziel==="lieferschein_position" || $ziel==="bestellung_position") { if($datum_von !="") { $datum_von = $this->app->String->Convert($datum_von,"%1.%2.%3","%3-%2-%1"); $fields_array_where[] = "b.datum >='$datum_von'"; } if($datum_bis !="") { $datum_bis = $this->app->String->Convert($datum_bis,"%1.%2.%3","%3-%2-%1"); $fields_array_where[] = "b.datum <='$datum_bis'"; } if($projekt !="") { $projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); $fields_array_where[] = "bp.projekt =$projektid"; } } else { if($datum_von !="") { $datum_von = $this->app->String->Convert($datum_von,"%1.%2.%3","%3-%2-%1"); $fields_array_where[] = "datum >='$datum_von'"; } if($datum_bis !="") { $datum_bis = $this->app->String->Convert($datum_bis,"%1.%2.%3","%3-%2-%1"); $fields_array_where[] = "datum <='$datum_bis'"; } if($projekt !="") { $projektid = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' LIMIT 1"); $fields_array_where[] = "projekt =$projektid"; } } $fields_array_where = array_filter($fields_array_where); $sql_fields_where = implode(' AND ',$fields_array_where); $sql_fields_where = rtrim($sql_fields_where,'AND'); $sql_fields_where = ltrim($sql_fields_where,' AND'); switch($ziel) { case "artikel": $sql = "SELECT $sql_fields, art.id as systemid FROM artikel AS art "; break; case "ansprechpartner": $sql = "SELECT $sql_fields FROM ansprechpartner AS anspr "; break; case "adresse": $sql = "SELECT $sql_fields,adr.id as systemid FROM adresse AS adr "; break; case "angebot": $sql = "SELECT $sql_fields FROM angebot AS b "; break; case "auftrag": $sql = "SELECT $sql_fields FROM auftrag AS b "; break; case "rechnung": $sql = "SELECT $sql_fields,b.id as systemid FROM rechnung AS b "; break; case "lieferschein": $sql = "SELECT $sql_fields FROM lieferschein AS b "; break; case "bestellung": $sql = "SELECT $sql_fields FROM bestellung AS b "; break; case "gutschrift": $sql = "SELECT $sql_fields,b.id as systemid FROM gutschrift AS b "; break; case "angebot_position": $sql = "SELECT $sql_fields,bp.id as systemid FROM angebot_position bp LEFT JOIN angebot b ON b.id=bp.angebot"; break; case "auftrag_position": $sql = "SELECT $sql_fields,bp.id as systemid FROM auftrag_position bp LEFT JOIN auftrag b ON b.id=bp.auftrag"; break; case "rechnung_position": $sql = "SELECT $sql_fields,bp.id as systemid FROM rechnung_position bp LEFT JOIN rechnung b ON b.id=bp.rechnung"; break; case "gutschrift_position": $sql = "SELECT $sql_fields,-bp.preis as preis_negativ, bp.id as systemid FROM gutschrift_position bp LEFT JOIN gutschrift b ON b.id=bp.gutschrift"; break; case "lieferschein_position": $sql = "SELECT $sql_fields,bp.id as systemid FROM lieferschein_position bp LEFT JOIN lieferschein b ON b.id=bp.lieferschein"; break; case "bestellung_position": $sql = "SELECT $sql_fields,bp.id as systemid FROM bestellung_position bp LEFT JOIN bestellung b ON b.id=bp.bestellung"; break; } $sql .= ' '.$join. ' '; if(count($fields_array_where) > 0 && trim($sql_fields_where)!=''){ $sql .= ' WHERE ' . trim($sql_fields_where).' '.$subwhere ; } elseif(!empty($subwhere)) { $sql .= ' WHERE '.$subwhere; } if($exporttrennzeichen==='semikolon') { $exporttrennzeichen=';'; }elseif($exporttrennzeichen==='komma') { $exporttrennzeichen=','; } if($exportdatenmaskierung==='gaensefuesschen') { $exportdatenmaskierung='"'; } else if($exportdatenmaskierung==='hochkomma') { $exportdatenmaskierung="'"; } else { $exportdatenmaskierung=''; } $memory_limit = @ini_get('memory_limit'); $max_execution_time = @ini_get('max_execution_time'); if($memory_limit) { if(strpos($memory_limit, 'M') !== false) { $memory_limit = str_replace('M','', $memory_limit); $memory_limit *= 1024*1024; } } if(class_exists('DevTools')) { DevTools::$aktiv = false; } return $this->generateExport($xls, $sql, $exporterstezeilenummer, $exportdatenmaskierung,$exporttrennzeichen,$ziel,$internal,$memory_limit,$max_execution_time); } public function getFieldSqlCols($fieldsarray, $ziel) { $fields_array = []; $joins = []; $artikeleigenscahftenJoinen = false; $verkaufspreiseJoinen = false; foreach($fieldsarray as $fieldarray) { switch(trim($fieldarray)) { case 'verkaufspreisnetto': $fields_array[] = "'VAR:VERKAUFSPREISNETTO' as verkaufspreisnetto"; break; case strpos($fieldarray, 'verkaufspreisnetto') !== false || strpos($fieldarray,'verkaufspreispreisfuermenge') !== false || strpos($fieldarray, 'verkaufspreismenge') !== false || strpos($fieldarray,'verkaufspreiswaehrung') !== false || strpos($fieldarray, 'verkaufspreisgruppe') !== false || strpos($fieldarray,'verkaufspreiskundennummer') !== false || strpos($fieldarray, 'verkaufspreisartikelnummerbeikunde') !== false || strpos($fieldarray,'verkaufspreisgueltigab') !== false || strpos($fieldarray, 'verkaufspreisgueltigbis') !== false || strpos($fieldarray,'verkaufspreisinternerkommentar') !== false : if($ziel==='artikel' && !empty(trim($fieldarray))){ $verkaufspreiseJoinen = true; $fieldarray = str_replace(["\r\n","\r","\n"],'',$fieldarray); $fields_array[] = 'vp.'.$fieldarray; } break; case strpos($fieldarray, 'eigenschaftname') !== false || strpos($fieldarray,'eigenschaftwert') !== false: if($ziel==='artikel' && !empty(trim($fieldarray))){ $artikeleigenscahftenJoinen = true; $fieldarray = str_replace(["\r\n","\r","\n"],'',$fieldarray); $fields_array[] = 'ae.'.$fieldarray; } break; case strpos($fieldarray, 'freifeldname') !== false: if($ziel==='artikel' && !empty(trim($fieldarray))){ $join = ' LEFT JOIN firmendaten AS fd ON 1 '; $fieldarray = str_replace(["\r\n","\r","\n"],'',$fieldarray); $feldname = str_replace('name','',$fieldarray); $fields_array[] = 'fd.'.$feldname.' AS '.$fieldarray; if(!in_array($join, $joins, true)){ $joins[] = $join; } } break; case strpos($fieldarray, 'freifeld') !== false: $fieldarray = str_replace(["\r\n","\r","\n"],'',$fieldarray); if($ziel==='artikel' && !empty(trim($fieldarray))){ $fields_array[] = 'art.'.$fieldarray; } else if ($ziel==='adresse' && !empty(trim($fieldarray))){ $fields_array[] = 'adr.'.$fieldarray; } break; case 'aktiv': if($ziel==='artikel' && !empty(trim($fieldarray))){ $fields_array[] = 'IF(inaktiv=1,0,1) AS aktiv'; } break; case 'inaktiv': if($ziel==='artikel' && !empty(trim($fieldarray))){ $fields_array[] = 'IF(inaktiv=1,1,0) AS inaktiv'; } break; case 'variante_von': $fields_array[] = "'VAR:VARIANTE_VON' as variante_von"; break; case 'projekt': $fields_array[] = "'VAR:PROJEKT' as projekt"; break; case "einkaufspreisnetto": $fields_array[] = "'VAR:EINKAUFSPREISNETTO' as einkaufspreisnetto"; break; case "lieferantname": if($ziel === 'artikel') { $join = ' LEFT JOIN adresse AS adr ON art.adresse = adr.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $fields_array[] = ' adr.name AS lieferantname '; }else{ $fields_array[] = "'VAR:LIEFERANTNAME' as lieferantname"; } break; case "lieferantnummer": if($ziel === 'artikel') { $join = ' LEFT JOIN adresse AS adr ON art.adresse = adr.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $fields_array[] = ' adr.lieferantennummer AS lieferantnummer '; }else{ $fields_array[] = "'VAR:LIEFERANTNUMMER' as lieferantnummer"; } break; case "lager_menge": $fields_array[] = "'VAR:LAGER_MENGE' as lager_menge"; break; case "gegenkonto": $fields_array[] = "'VAR:GEGENKONTO' as gegenkonto"; break; case "auftrag_internet": if($ziel === 'gutschrift') { $join = ' LEFT JOIN rechnung AS re ON b.rechnungid = re.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $join = ' LEFT JOIN auftrag AS ab ON re.auftragid = ab.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $fields_array[] = "ab.internet AS auftrag_internet"; } elseif($ziel === 'rechnung') { $join = ' LEFT JOIN auftrag AS ab ON b.auftragid = ab.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $fields_array[] = "ab.internet as auftrag_internet"; }else{ $fields_array[] = "'VAR:AUFTRAG_INTERNET' as auftrag_internet"; } break; case "auftrag_transaktionsnummer": if($ziel === 'gutschrift') { $join = ' LEFT JOIN rechnung AS re ON b.rechnungid = re.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $join = ' LEFT JOIN auftrag AS ab ON re.auftragid = ab.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $fields_array[] = "ab.transaktionsnummer AS auftrag_internet"; } elseif($ziel === 'rechnung') { $join = ' LEFT JOIN auftrag AS ab ON b.auftragid = ab.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $fields_array[] = "ab.transaktionsnummer AS auftrag_transaktionsnummer"; }else{ $fields_array[] = "ab.transaktionsnummer AS auftrag_transaktionsnummer"; } break; case "steuersatz_normal_betrag": $fields_array[] = "'VAR:STEUER_NORMAL_BETRAG' as steuersatz_normal_betrag"; break; case "steuersatz_ermaessigt_betrag": $fields_array[] = "'VAR:STEUER_ERMAESSIGT_BETRAG' as steuersatz_ermaessigt_betrag"; break; case "beleg_kundennummer": $fields_array[] = "'VAR:BELEG_KUNDENNUMMER' as beleg_kundennummer"; break; case "beleg_name": $fields_array[] = "'VAR:BELEG_NAME' as beleg_name"; break; case "beleg_land": $fields_array[] = "'VAR:BELEG_LAND' as beleg_land"; break; case "beleg_belegnr": $fields_array[] = "'VAR:BELEG_BELEGNR' as beleg_belegnr"; break; case "beleg_datum": $fields_array[] = "'VAR:BELEG_DATUM' as beleg_datum"; break; case "beleg_status": $fields_array[] = "'VAR:BELEG_STATUS' as beleg_status"; break; case 'beleg_bearbeiter': $fields_array[] = "'VAR:BELEG_BEARBEITER' as beleg_bearbeiter"; break; case 'beleg_vertrieb': $fields_array[] = "'VAR:BELEG_VERTRIEB' as beleg_vertrieb"; break; case 'projekt': if($ziel === 'artikel'){ $join = ' LEFT JOIN projekt AS pr ON art.projekt = pr.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $fields_array[] = ' pr.abkuerzung AS projekt '; }elseif($ziel === 'adresse') { $join = ' LEFT JOIN projekt AS pr ON adr.projekt = pr.id '; if(!in_array($join, $joins)){ $joins[] = $join; } $fields_array[] = ' pr.abkuerzung AS projekt '; }else{ $fields_array[] = "'VAR:PROJEKT' as projekt"; } break; case 'bp.nummer': if( $ziel==="bestellung_position") { $fields_array[] = "'VAR:NUMMER' as nummer"; } break; case 'bp.bezeichnung': if( $ziel==="bestellung_position") { $fields_array[] = "bp.bezeichnunglieferant as bezeichnung"; } break; case 'einheit': if($ziel === 'artikel') { $fields_array[] = ' art.einheit '; } else{ $fields_array[] = "'VAR:EINHEIT' as einheit"; } break; case 'inventurek': if($ziel === 'artikel') { $fields_array[] = ' art.inventurek '; } else{ $fields_array[] = "'VAR:INVENTUREK' as inventurek"; } break; case 'inventurekaktiv': if($ziel === 'artikel') { $fields_array[] = ' art.inventurekaktiv '; } else{ $fields_array[] = "'VAR:INVENTUREKAKTIV' as inventurekaktiv"; } break; case 'artikelbeschreibung_de': if($ziel === 'artikel'){ $fields_array[] = 'art.anabregs_text AS artikelbeschreibung_de'; }else { $fields_array[] = "'VAR:ARTIKELBESCHREIBUNG_DE' as artikelbeschreibung_de"; } break; case 'artikelbeschreibung_en': if($ziel === 'artikel'){ $fields_array[] = 'art.anabregs_text_en AS artikelbeschreibung_en'; }else{ $fields_array[] = "'VAR:ARTIKELBESCHREIBUNG_EN' as artikelbeschreibung_en"; } break; case 'artikelkategorie': $fields_array[] = "'VAR:ARTIKELKATEGORIE' as artikelkategorie"; break; case 'artikelkategorie_name': $fields_array[] = "'VAR:ARTIKELKATEGORIE_NAME' as artikelkategorie_name"; break; case (strpos($fieldarray, 'artikelbaum') !== false): $fieldarray = str_replace(["\r\n","\r","\n"],'',$fieldarray); $fields_array[] = "'VAR:".strtoupper($fieldarray)."' AS ".$fieldarray; break; case 'standardlagerplatz': $fields_array[] = "'VAR:STANDARDLAGERPLATZ' AS standardlagerplatz"; break; case 'typ': if($ziel === 'artikel'){ $fields_array[] = 'art.typ'; }else{ $fields_array[] = "typ"; } break; case 'geloescht': if($ziel === 'artikel'){ $fields_array[] = 'art.geloescht'; }else{ $fields_array[] = "geloescht"; } break; default: if(($ziel==='angebot' || $ziel==='auftrag' || $ziel === 'rechnung' || $ziel === 'lieferschein' || $ziel === 'bestellung' || $ziel === 'gutschrift') && preg_match('/^[\w]+$/',trim($fieldarray))){ $fields_array[] = 'b.'.trim($fieldarray); }else{ $fields_array[] = trim($fieldarray); } } } if($artikeleigenscahftenJoinen){ $pivotParts = []; for ($i=1;$i<=50;$i++){ $pivotParts[] = "MAX((CASE WHEN ae.row_number=$i THEN ae.name ELSE '' END)) AS eigenschaftname$i"; $pivotParts[] = "MAX((CASE WHEN ae.row_number=$i THEN ae.wert ELSE '' END)) AS eigenschaftwert$i"; } $join = 'SELECT ae.artikel AS artikel, '.implode(',',$pivotParts).' FROM (SELECT IF(@previd=e.artikel,@rownum := @rownum + 1,@rownum := 1) as row_number, @previd ,@previd:=e.artikel, e.artikel AS artikel, e.name AS name, e.wert AS wert FROM (SELECT aew.artikel, ae.name, aew.wert FROM artikeleigenschaften ae JOIN artikeleigenschaftenwerte aew ON ae.id = aew.artikeleigenschaften WHERE ae.geloescht=0 ORDEr BY aew.artikel) AS e JOIN (select @rownum := 0) r JOIN (select @previd := 0) p) AS ae GROUP BY ae.artikel'; $joins[] = 'LEFT JOIN ('.$join.') AS ae ON ae.artikel = art.id'; } if($verkaufspreiseJoinen){ $pivotParts = []; for ($i=1;$i<=100;$i++){ $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.preis ELSE '' END)) AS verkaufspreisnetto$i"; $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.ab_menge ELSE '' END)) AS verkaufspreisabmenge$i"; $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.vpe_menge ELSE'' END)) AS verkaufspreisvpemenge$i"; $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.waehrung ELSE'' END)) AS verkaufspreiswaehrung$i"; $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.kennziffer ELSE'' END)) AS verkaufspreisgruppe$i"; $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.kundennummer ELSE'' END)) AS verkaufspreiskundennummer$i"; $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.kundenartikelnummer ELSE'' END)) AS verkaufspreisartikelnummerbeikunde$i"; $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.gueltig_ab ELSE'' END)) AS verkaufspreisgueltigab$i"; $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.gueltig_bis ELSE'' END)) AS verkaufspreisgueltigbis$i"; $pivotParts[] = "MAX((CASE WHEN vp.row_number=$i THEN vp.bemerkung ELSE'' END)) AS verkaufspreisinternerkommentar$i"; } $join = 'SELECT vp.artikel, '.implode(',',$pivotParts).' FROM( SELECT IF(@previdvp=vp.artikel,@rownumvp := @rownumvp + 1,@rownumvp := 1) AS row_number,@previdvp:=vp.artikel, vp.* FROM (SELECT vp.*, a.kundennummer,g.kennziffer FROM verkaufspreise vp LEFT JOIN adresse a ON vp.adresse = a.id LEFT JOIN gruppen g ON vp.gruppe = g.id WHERE vp.geloescht =0 ORDER BY vp.artikel ASC, vp.preis ASC) AS vp JOIN (select @rownumvp := 0) r JOIN (select @previdvp := 0) p ) AS vp GROUP BY vp.artikel'; $joins[] = 'LEFT JOIN ('.$join.') AS vp ON vp.artikel = art.id'; } return [$fields_array, $joins]; } public function generateExport($xls, $sql, $exporterstezeilenummer, $exportdatenmaskierung, $exporttrennzeichen, $ziel, $returnResultByFunction = false, $maxMemory = 0, $maxTime = 0) { if(!$returnResultByFunction) { if($xls) { header('Content-Type: application/excel'); header('Content-Disposition: attachment; filename="export.csv"'); }else{ header('Content-Type: text/plain;'); header('Content-Disposition: attachment; filename=export.csv'); } } $returnValue = ''; $limit = 10000; $offset = 0; $firstLinePassed = false; $queryContainsLimit = false; if(preg_match('/\s(LIMIT\s*\d)+|(OFFSET\s*\d)+/i', $sql) === 1){ $queryContainsLimit = true; } do{ if($queryContainsLimit){ $workingQuery = $sql; }else{ $workingQuery = $sql." LIMIT $limit OFFSET $offset"; } $query = $this->app->DB->Query($workingQuery); if(!$firstLinePassed && $exporterstezeilenummer=='1') { foreach($this->app->DB->Fetch_Assoc($query) as $value=>$tmp) { if($xls) { $value = iconv('UTF-8','ISO-8859-1//TRANSLIT', $value); } $returnValue .= $exportdatenmaskierung.$value.$exportdatenmaskierung.$exporttrennzeichen; } $returnValue .= "\r\n"; if(!$returnResultByFunction) { echo $returnValue; } $query->data_seek(0); } while($row = $this->app->DB->Fetch_Assoc($query)) { $line = $this->Exportinner($row,$exportdatenmaskierung,$exporttrennzeichen, $returnResultByFunction, $ziel, $xls); if(!$returnResultByFunction) { echo $line; }else { $returnValue .= $line; } } $firstLinePassed = true; $offset += $limit; }while(!$queryContainsLimit && $query->num_rows === $limit); if(!$returnResultByFunction) { $this->app->ExitXentral(); } return $returnValue; } function Exportinner($row,&$exportdatenmaskierung,&$exporttrennzeichen, &$internal, &$ziel, &$xls) { $output = ''; $systemid = $row['systemid']; if($systemid <=0) { $systemid = $row['id']; } $replaces = [ 'VAR:VERKAUFSPREISNETTO' => 'verkaufspreis', 'VAR:EINKAUFSPREISNETTO' => 'einkaufspreis', 'VAR:LIEFERANTNAME' => 'lieferantname', 'VAR:LIEFERANTNUMMER' => 'lieferantnummer', 'VAR:LAGER_MENGE' => 'lager_menge', 'VAR:GEGENKONTO' => 'gegenkonto', 'VAR:AUFTRAG_INTERNET' => 'auftrag_internet', 'VAR:AUFTRAG_TRANSAKTIONSNUMMER' => 'auftrag_transaktionsnummer', 'VAR:STEUER_NORMAL_BETRAG' => 'steuersatz_normal_betrag', 'VAR:STEUER_ERMAESSIGT_BETRAG' => 'steuersatz_ermaessigt_betrag', 'VAR:BELEG_KUNDENNUMMER' => 'beleg_kundennummer', 'VAR:BELEG_DATUM' => 'beleg_datum', 'VAR:BELEG_STATUS' => 'beleg_status', 'VAR:BELEG_NAME' => 'beleg_name', 'VAR:BELEG_LAND' => 'beleg_land', 'VAR:BELEG_BELEGNR' => 'beleg_belegnr', 'VAR:BELEG_BEARBEITER' => 'beleg_bearbeiter', 'VAR:BELEG_VERTRIEB' => 'beleg_vertrieb', 'VAR:EINHEIT' => 'einheit', 'VAR:NUMMER' => 'nummer', 'VAR:PROJEKT' => 'projekt', 'VAR:INVENTUREKAKTIV' => 'inventurekaktiv', 'VAR:INVENTUREK' => 'inventurek', 'VAR:ARTIKELBESCHREIBUNG_DE' => 'anabregs_text', 'VAR:ARTIKELBESCHREIBUNG_EN' => 'anabregs_text_en', 'VAR:ARTIKELKATEGORIE' => 'artikelkategorie', 'VAR:ARTIKELKATEGORIE_NAME' => 'artikelkategorie_name', 'VAR:STANDARDLAGERPLATZ' => 'standardlagerplatz', 'VAR:VARIANTE_VON' => 'variante_von' ]; for($i = 1; $i <= 20; $i++){ $replaces['VAR:ARTIKELBAUM'.$i] = 'artikelbaum'.$i; } $replacesKey = array_keys($replaces); $notFounds = $replacesKey; foreach($row as $value) { $value = $this->app->erp->fixeUmlaute($value); foreach($notFounds as $key => $notFound) { if(strpos($value, $notFound) !== false) { unset($notFounds[$key]); } } } foreach($notFounds as $notFound) { unset($replaces[$notFound]); } $replacesR = array_flip($replaces); $params=array(); switch($ziel) { case "adresse": if(!empty($replacesR['projekt'])){ $projektid = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$systemid' LIMIT 1"); $params['projekt'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projektid' LIMIT 1"); } break; case "artikel": if($systemid > 0 && is_numeric($systemid)) { if(!empty($replacesR['lager_menge'])) { $params['lager_menge'] = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='" . $systemid . "'"); $intlager_menge = (int)$params['lager_menge']; if($intlager_menge == $params['lager_menge']){ $params['lager_menge'] = $intlager_menge; } } if(!empty($replacesR['projekt'])){ $projektid = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$systemid' LIMIT 1"); $params['projekt'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projektid' LIMIT 1"); } if(!empty($replacesR['variante_von'])){ $hauptartikelid = $this->app->DB->Select("SELECT variante_von FROM artikel WHERE id='$systemid' LIMIT 1"); $params['variante_von'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$hauptartikelid' LIMIT 1"); } if(!empty($replacesR['lieferantname'])) { $params['lieferantname'] = $this->app->DB->Select( "SELECT adr.name FROM artikel a LEFT JOIN adresse adr ON adr.id=a.adresse WHERE a.id=$systemid LIMIT 1"); } if(!empty($replacesR['lieferantnummer'])){ $params['lieferantnummer'] = $this->app->DB->Select("SELECT adr.lieferantennummer FROM artikel a LEFT JOIN adresse adr ON adr.id=a.adresse WHERE a.id=$systemid LIMIT 1"); } if(!empty($replacesR['einkaufspreis'])){ $params['einkaufspreis'] = $this->app->erp->GetEinkaufspreis($systemid, 1); } if(!empty($replacesR['verkaufspreis'])){ $params['verkaufspreis'] = $this->app->erp->GetVerkaufspreis($systemid, 1); } if(!empty($replacesR['inventurek'])){ $params['inventurek'] = $this->app->DB->Select("SELECT inventurek FROM artikel WHERE id = '$systemid' LIMIT 1"); } if(!empty($replacesR['standardlagerplatz'])){ $params['standardlagerplatz'] = $this->app->DB->Select("SELECT lp.kurzbezeichnung FROM artikel a LEFT JOIN lager_platz lp ON lp.id=a.lager_platz WHERE a.id = '$systemid' LIMIT 1"); } if(!empty($replacesR['inventurekaktiv'])){ $params['inventurekaktiv'] = $this->app->DB->Select("SELECT inventurekaktiv FROM artikel WHERE id = '$systemid' LIMIT 1"); } if(!empty($replacesR['anabregs_text'])){ $params['anabregs_text'] = $this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id = '$systemid' LIMIT 1"); } if(!empty($replacesR['anabregs_text_en'])){ $params['anabregs_text_en'] = $this->app->DB->Select("SELECT anabregs_text_en FROM artikel WHERE id = '$systemid' LIMIT 1"); } if(!empty($replacesR['artikelkategorie']) || !empty($replacesR['artikelkategorie_name'])){ $params['artikelkategorie'] = $this->app->DB->Select("SELECT if(CONVERT(SUBSTRING_INDEX(typ,'_', 1),UNSIGNED INTEGER)=0,'',CONVERT(SUBSTRING_INDEX(typ,'_', 1),UNSIGNED INTEGER)) as artikelkategorie FROM artikel WHERE id = '$systemid' LIMIT 1"); if($params['artikelkategorie'] > 0){ $params['artikelkategorie_name'] = $this->app->DB->Select("SELECT bezeichnung AS artikelkategorie_name FROM artikelkategorien WHERE id = '{$params['artikelkategorie']}' LIMIT 1"); }else{ $params['artikelkategorie_name'] = ''; } } $markierteArtikelkategorien = $this->app->DB->SelectArr("SELECT * FROM artikelkategorien WHERE id IN (SELECT kategorie FROM artikelbaum_artikel WHERE artikel = '$systemid')"); $alleArtikelkategorien = []; foreach($markierteArtikelkategorien as $key => $value){ $alleArtikelkategorien[$value['id']] = $value; } for($i = 1; $i <= 20; $i++){ if(!empty($replacesR['artikelbaum'.$i]) && !empty($markierteArtikelkategorien[$i-1])){ $params['artikelbaum'.$i] = $this->ExportvorlageArtikelbaum($markierteArtikelkategorien[$i-1]['id'], $alleArtikelkategorien); }else{ $params['artikelbaum'.$i] = ''; } } } break; case "rechnung": if($systemid > 0 && is_numeric($systemid)) { if(!empty($replacesR['gegenkonto'])){ $ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM rechnung WHERE id='$systemid' LIMIT 1"); $ustid = $this->app->DB->Select("SELECT ustid FROM rechnung WHERE id='$systemid' LIMIT 1"); $params['gegenkonto'] = $this->app->erp->Gegenkonto($ust_befreit, $ustid, 'rechnung', $systemid); } if(!empty($replacesR['auftrag_internet']) || !empty($replacesR['auftrag_transaktionsnummer'])){ $auftragid = $this->app->DB->Select("SELECT auftragid FROM rechnung WHERE id='$systemid' LIMIT 1"); $params['auftrag_internet'] = $this->app->DB->Select("SELECT internet FROM auftrag WHERE id='$auftragid' LIMIT 1"); $params['auftrag_transaktionsnummer'] = $this->app->DB->Select("SELECT transaktionsnummer FROM auftrag WHERE id='$auftragid' LIMIT 1"); } if(!empty($replacesR['steuersatz_normal_betrag'])) { $params['steuersatz_normal_betrag'] = round($this->app->erp->RechnungZwischensummeSteuersaetzeBrutto($systemid, "normal"), 2); } if(!empty($replacesR['steuersatz_ermaessigt_betrag'])) { $params['steuersatz_ermaessigt_betrag'] = round($this->app->erp->RechnungZwischensummeSteuersaetzeBrutto($systemid, "ermaessigt"), 2); } } break; case "gutschrift": if($systemid > 0 && is_numeric($systemid)) { if(!empty($replacesR['gegenkonto'])) { $ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM gutschrift WHERE id='$systemid' LIMIT 1"); $ustid = $this->app->DB->Select("SELECT ustid FROM gutschrift WHERE id='$systemid' LIMIT 1"); $params['gegenkonto'] = $this->app->erp->Gegenkonto($ust_befreit, $ustid, 'gutschrift', $systemid); } if(!empty($replacesR['auftrag_internet']) || !empty($replacesR['auftrag_transaktionsnummer'])){ $rechnungid = $this->app->DB->Select("SELECT rechnungid FROM gutschrift WHERE id='$systemid' LIMIT 1"); $auftragid = $this->app->DB->Select("SELECT auftragid FROM rechnung WHERE id='$rechnungid' LIMIT 1"); $params['auftrag_internet'] = $this->app->DB->Select("SELECT internet FROM auftrag WHERE id='$auftragid' LIMIT 1"); $params['auftrag_transaktionsnummer'] = $this->app->DB->Select("SELECT transaktionsnummer FROM auftrag WHERE id='$auftragid' LIMIT 1"); } if(!empty($replacesR['steuersatz_normal_betrag'])){ $params['steuersatz_normal_betrag'] = round($this->app->erp->GutschriftZwischensummeSteuersaetzeBrutto($systemid, "normal"), 2); } if(!empty($replacesR['steuersatz_ermaessigt_betrag'])){ $params['steuersatz_ermaessigt_betrag'] = round($this->app->erp->GutschriftZwischensummeSteuersaetzeBrutto($systemid, "ermaessigt"), 2); } } break; case "auftrag_position": case "angebot_position": case "rechnung_position": case "lieferschein_position": case "gutschrift_position": case "bestellung_position": $tmp = explode('_',$ziel); $tabellenname = $tmp[0]; unset($tmp); if($systemid > 0 && is_numeric($systemid)) { $tmpsystemid = $this->app->DB->Select("SELECT $tabellenname FROM ".$tabellenname."_position WHERE id='$systemid' LIMIT 1"); $params['beleg_name'] =$this->app->DB->Select("SELECT name FROM ".$tabellenname." WHERE id='$tmpsystemid' LIMIT 1"); $params['beleg_kundennummer'] =$this->app->DB->Select("SELECT kundennummer FROM ".$tabellenname." WHERE id='$tmpsystemid' LIMIT 1"); if($params['beleg_kundennummer']=="") { $tmpadresse = $this->app->DB->Select("SELECT adresse FROM ".$tabellenname." WHERE id='$tmpsystemid' LIMIT 1"); $params['beleg_kundennummer'] =$this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='$tmpadresse' LIMIT 1"); } $params['beleg_belegnr'] =$this->app->DB->Select("SELECT belegnr FROM ".$tabellenname." WHERE id='$tmpsystemid' LIMIT 1"); $params['beleg_datum'] =$this->app->DB->Select("SELECT datum FROM ".$tabellenname." WHERE id='$tmpsystemid' LIMIT 1"); $params['beleg_status'] =$this->app->DB->Select("SELECT status FROM ".$tabellenname." WHERE id='$tmpsystemid' LIMIT 1"); $params['beleg_land'] =$this->app->DB->Select("SELECT land FROM ".$tabellenname." WHERE id='$tmpsystemid' LIMIT 1"); $params['beleg_bearbeiter'] =$this->app->DB->Select("SELECT bearbeiter FROM ".$tabellenname." WHERE id='$tmpsystemid' LIMIT 1"); $params['beleg_vertrieb'] =$this->app->DB->Select("SELECT vertrieb FROM ".$tabellenname." WHERE id='$tmpsystemid' LIMIT 1"); if(!empty($replacesR['projekt'])){ $projektid = $this->app->DB->Select("SELECT projekt FROM " . $tabellenname . "_position WHERE id='$systemid' LIMIT 1"); $params['projekt'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projektid' LIMIT 1"); } if(!empty($replacesR['nummer'])){ $tmpartikelid = $this->app->DB->Select("SELECT artikel FROM " . $tabellenname . "_position WHERE id='$systemid' LIMIT 1"); $params['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$tmpartikelid' LIMIT 1"); } if(!empty($replacesR['einheit'])) { $einheitcheck = $this->app->DB->Select("SELECT einheit FROM " . $tabellenname . "_position WHERE id='$systemid' LIMIT 1"); if($einheitcheck == ''){ $einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE id='$tmpartikelid' LIMIT 1"); unset($tmpartikelid); if($einheit == ''){ $einheit = $this->app->erp->Firmendaten("artikeleinheit_standard"); } $params['einheit'] = $einheit; unset($einheit); }else{ $params['einheit'] = $einheitcheck; unset($einheitcheck); } } } break; } foreach($row as $value) { $value = $this->app->erp->fixeUmlaute($value); // ersetzte platzhalter foreach($replaces as $k => $v) { $value = str_replace($k, $params[$v], $value); } $value = $this->app->erp->ParseDecimalForCSV($value); if($xls) { $value = iconv('UTF-8','ISO-8859-1//TRANSLIT', $value); } $output .= $exportdatenmaskierung.$value.$exportdatenmaskierung.$exporttrennzeichen; } return $output."\r\n"; } function ExportvorlageArtikelbaum($kategorieId, &$alleArtikelkategorien){ if(!array_key_exists($kategorieId, $alleArtikelkategorien)){ $fehlendeArtikelkategorie = $this->app->DB->SelectRow("SELECT * FROM artikelkategorien WHERE id = '$kategorieId' LIMIT 1"); $alleArtikelkategorien[$kategorieId] = $fehlendeArtikelkategorie; } $artikelkategorieBezeichnung = $alleArtikelkategorien[$kategorieId]['bezeichnung']; if($alleArtikelkategorien[$kategorieId]['parent'] != 0){ $artikelkategorieBezeichnung = $this->ExportvorlageArtikelbaum($alleArtikelkategorien[$kategorieId]['parent'], $alleArtikelkategorien).'|'.$artikelkategorieBezeichnung; } return $artikelkategorieBezeichnung; } function ExportvorlageDo() { $id = $this->app->Secure->GetGET("id"); $ziel = $this->app->DB->Select("SELECT ziel FROM exportvorlage WHERE id='$id' LIMIT 1"); $fields = $this->ExportvorlageGetFields($id); $ekpreisaenderungen = 0; $vkpreisaenderungen = 0; $tmp = $this->app->Secure->GetPOST("row"); $number_of_rows = count($tmp['cmd']); for($i=1;$i<=$number_of_rows;$i++) { $lieferantid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$tmp['lieferantennummer'][$i]."' AND lieferantennummer!='' LIMIT 1"); $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$tmp['nummer'][$i]."' AND nummer!='' LIMIT 1"); $kundenid = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$tmp['kundennummer'][$i]."' AND kundennummer!='' LIMIT 1"); if($kundenid<=0) $kundenid=0; if($lieferantid<=0) $lieferantid=0; if($lieferantid<=0) $lieferantid = $this->app->DB->Select("SELECT id FROM adresse WHERE name='".$tmp['lieferantname'][$i]."' LIMIT 1"); switch($ziel) { case "einkauf": case "artikel": // wenn es artikel nicht gibt muss man diesen neu anlegen if($tmp['cmd'][$i]=="create" && $tmp['checked'][$i]=="1") { if($tmp['name_de']!="") { foreach($fields as $key=>$value) $felder[$value]=$tmp[$value][$i]; } if($tmp['nummer'][$i]=="") $felder['nummer']=$this->app->erp->GetNextArtikelnummer($tmp['typ'][$i]); else $felder['nummer']=$tmp['nummer'][$i]; // ek preis if($lieferantid <=0 && $tmp['lieferantname'][$i]!="") { $lieferantid = $this->app->erp->CreateAdresse($tmp['lieferantname'][$i]); $this->app->erp->AddRolleZuAdresse($lieferantid, "Lieferant", "von","Projekt",""); } if($lieferantid>0) $felder['adresse']=$lieferantid; // mit welcher Artikelgruppe? $artikelid = $this->app->erp->ExportCreateArtikel($felder); // vk preis if($tmp['lieferanteinkaufnetto'][$i]!="" && $lieferantid > 0){ if($tmp['lieferantbestellnummer'][$i]!="") $nr = $tmp['lieferantbestellnummer'][$i]; else if($tmp['herstellernummer'][$i]!="") $nr = $tmp['herstellernummer'][$i]; else $nr = $tmp['name_de'][$i]; if($tmp['lieferanteinkaufvpemenge'][$i] > 0 && $tmp['lieferanteinkaufmenge'][$i]<=0) $tmp['lieferanteinkaufmenge'][$i] = $tmp['lieferanteinkaufvpemenge'][$i]; if($tmp['lieferanteinkaufmenge'][$i] > 1) { $tmp['lieferanteinkaufnetto'][$i] = $tmp['lieferanteinkaufnetto'][$i] / $tmp['lieferanteinkaufmenge'][$i]; $tmp['lieferanteinkaufmenge'][$i] = 1; } if($tmp['lieferanteinkaufmenge'][$i]<=0) $tmp['lieferanteinkaufmenge'][$i] = 1; $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge'][$i], $lieferantid,$nr,$nr, str_replace(',','.',$tmp['lieferanteinkaufnetto'][$i]),$tmp['lieferanteinkaufwaehrung'][$i],$tmp['lieferanteinkaufvpemenge'][$i]); } if($tmp['verkaufspreis1netto'][$i]!=""){ $this->app->erp->AddVerkaufspreis($artikelid,$tmp['verkaufspreis1menge'][$i], $kundenid,str_replace(',','.',$tmp['verkaufspreis1netto'][$i]),$tmp['verkaufspreis1waehrung'][$i]); } if($tmp['verkaufspreis2netto'][$i]!=""){ $this->app->erp->AddVerkaufspreis($artikelid,$tmp['verkaufspreis2menge'][$i], $kundenid,str_replace(',','.',$tmp['verkaufspreis2netto'][$i]),$tmp['verkaufspreis2waehrung'][$i]); } if($tmp['verkaufspreis3netto'][$i]!=""){ $this->app->erp->AddVerkaufspreis($artikelid,$tmp['verkaufspreis3menge'][$i], $kundenid,str_replace(',','.',$tmp['verkaufspreis3netto'][$i]),$tmp['verkaufspreis3waehrung'][$i]); } $lager_id = $this->app->DB->Select("SELECT id FROM lager WHERE geloescht!='1' LIMIT 1"); if($tmp['lager'][$i]!=''){ if(empty($lager_id)) { $this->app->DB->Insert( "INSERT INTO lager (bezeichnung,firma,manuell,logdatei,projekt,geloescht,beschreibung) VALUES ('Hauptlager',1,0,NOW(),0,0,'')" ); $lager_id = $this->app->DB->GetInsertID(); } $this->app->DB->Update("UPDATE artikel SET lagerartikel='1' WHERE id='$artikelid' LIMIT 1"); $regal = $this->app->erp->CreateLagerplatz($lager_id,$tmp['lager'][$i]); $this->app->erp->LagerEinlagernDifferenz($artikelid,$tmp['lagermenge'][$i],$regal,"","Erstbefüllung",1); } //17:lieferanteinkaufvpemenge; } else if ($tmp['cmd'][$i]=="update" && $tmp['checked'][$i]=="1") { // wenn er vorhanden ist nur ein Update braucht if($artikelid > 0) { foreach($fields as $key=>$value) { switch($value) { case "name_de": case "name_en": case "kurztext_en": case "kurztext_de": case "beschreibung_de": case "beschreibung_en": case "anabregs_text": case "typ": case "ean": case "gewicht": case "hersteller": case "herstellerlink": case "herstellernummer": $this->app->DB->Update("UPDATE artikel SET ".$value."='".$tmp[$value][$i]."' WHERE id='".$artikelid."' LIMIT 1"); break; case "lieferanteinkaufnetto": $alterek = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE ab_menge='".$tmp['lieferanteinkaufmenge'][$i]."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND adresse='".$lieferantid."' LIMIT 1"); if($alterek != str_replace(',','.',$tmp['lieferanteinkaufnetto'][$i])) { $ekpreisaenderungen++; $this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE adresse='".$lieferantid."' AND artikel='".$artikelid."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND ab_menge='".$tmp['lieferanteinkaufmenge'][$i]."' LIMIT 1"); if($tmp['lieferantbestellnummer'][$i]!="") $nr = $tmp['lieferantbestellnummer'][$i]; else if($tmp['herstellernummer'][$i]!="") $nr = $tmp['herstellernummer'][$i]; else $nr = $tmp['name_de'][$i]; if($tmp['lieferanteinkaufvpemenge'][$i] > 0 && $tmp['lieferanteinkaufmenge'][$i]<=0) $tmp['lieferanteinkaufmenge'][$i] = $tmp['lieferanteinkaufvpemenge'][$i]; if($tmp['lieferanteinkaufmenge'][$i] > 1) { $tmp['lieferanteinkaufnetto'][$i] = $tmp['lieferanteinkaufnetto'][$i] / $tmp['lieferanteinkaufmenge'][$i]; $tmp['lieferanteinkaufmenge'][$i] = 1; } if($tmp['lieferanteinkaufmenge'][$i]<=0) $tmp['lieferanteinkaufmenge'][$i] = 1; $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge'][$i], $lieferantid,$nr,$nr, str_replace(',','.',$tmp['lieferanteinkaufnetto'][$i]),$tmp['lieferanteinkaufwaehrung'][$i],$tmp['lieferanteinkaufvpemenge'][$i]); } break; case "verkaufspreis1netto": $altervk = $this->app->DB->Select("SELECT preis FROM verkaufspreis WHERE ab_menge='".$tmp['verkaufspreis1menge'][$i]."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW() ) WHERE adresse <='$kundenid' LIMIT 1"); if($altervk != str_replace(',','.',$tmp['verkaufspreis1netto'][$i])) { $vkpreisaenderungen++; $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE artikel='".$artikelid."' AND adresse='$kundenid' AND ab_menge='".$tmp['verkaufspreis1menge'][$i]."' LIMIT 1"); $this->app->erp->AddVerkaufspreis($artikelid,$tmp['verkaufspreis1menge'][$i], $kundenid,str_replace(',','.',$tmp['verkaufspreis1netto'][$i]),$tmp['verkaufspreis1waehrung'][$i]); } break; case "verkaufspreis2netto": $altervk = $this->app->DB->Select("SELECT preis FROM verkaufspreis WHERE ab_menge='".$tmp['verkaufspreis2menge'][$i]."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW() ) WHERE adresse <='$kundenid' LIMIT 1"); if($altervk != str_replace(',','.',$tmp['verkaufspreis2netto'][$i])) { $vkpreisaenderungen++; $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE artikel='".$artikelid."' AND adresse='$kundenid' AND ab_menge='".$tmp['verkaufspreis2menge'][$i]."' LIMIT 1"); $this->app->erp->AddVerkaufspreis($artikelid,$tmp['verkaufspreis2menge'][$i], $kundenid,str_replace(',','.',$tmp['verkaufspreis2netto'][$i]),$tmp['verkaufspreis2waehrung'][$i]); } break; case "verkaufspreis3netto": $altervk = $this->app->DB->Select("SELECT preis FROM verkaufspreis WHERE ab_menge='".$tmp['verkaufspreis3menge'][$i]."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW() ) WHERE adresse <='$kundenid' LIMIT 1"); if($altervk != str_replace(',','.',$tmp['verkaufspreis3netto'][$i])) { $vkpreisaenderungen++; $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE artikel='".$artikelid."' AND adresse='$kundenid' AND ab_menge='".$tmp['verkaufspreis3menge'][$i]."' LIMIT 1"); $this->app->erp->AddVerkaufspreis($artikelid,$tmp['verkaufspreis3menge'][$i], $kundenid,str_replace(',','.',$tmp['verkaufspreis3netto'][$i]),$tmp['verkaufspreis3waehrung'][$i]); } break; } } } } break; case "zeiterfassung": if($tmp['cmd'][$i]=="create" && $tmp['checked'][$i]=="1") { if($tmp['nummer'][$i]!="") { foreach($fields as $key=>$value) $felder[$value]=$tmp[$value][$i]; $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$tmp['nummer'][$i]."' LIMIT 1"); } $vonZeit = $felder['datum_von']." ".$felder['zeit_von'].":00"; $bisZeit = $felder['datum_bis']." ".$felder['zeit_bis'].":00"; $ort = ""; $projekt = ""; $art = ""; $kunde = $adresse; if($felder['taetigkeit']=="")$felder['taetigkeit']="Zeiterfassung"; $this->app->erp->AddArbeitszeit($this->app->User->GetID(), $vonZeit, $bisZeit, $felder['taetigkeit'], $felder['details'],$ort, $projekt, 0,$art,$kunde); } break; case "adresse": if($tmp['cmd'][$i]=="create" && $tmp['checked'][$i]=="1") { $adresse=0; foreach($fields as $key=>$value) $felder[$value]=$tmp[$value][$i]; if($tmp['kundennummer'][$i]!="" || $tmp['lieferantennummer'][$i]!="") { $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$tmp['kundennummer'][$i]."' AND kundennummer!='' LIMIT 1"); if($adresse <=0) $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$tmp['lieferantennummer'][$i]."' AND lieferantennummer!='' LIMIT 1"); } if($adresse <=0 && $felder['name']!="") { //adresse anlegen $adresse =$this->app->erp->ExportCreateAdresse($felder); if($tmp['lieferantennummer'][$i]!="") $this->app->erp->AddRolleZuAdresse($adresse, "Lieferant", "von","Projekt",""); if($tmp['kundennummer'][$i]!="") $this->app->erp->AddRolleZuAdresse($adresse, "Kunde", "von","Projekt",""); //rolle verpassen } } else if($tmp['cmd'][$i]=="update" && $tmp['checked'][$i]=="1") { $adresse=0; // foreach($fields as $key=>$value) // $felder[$value]=$tmp[$value][$i]; if($tmp['kundennummer'][$i]!="" || $tmp['lieferantennummer'][$i]!="") { $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$tmp['kundennummer'][$i]."' AND kundennummer!='' LIMIT 1"); if($adresse <=0) $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$tmp['lieferantennummer'][$i]."' AND lieferantennummer!='' LIMIT 1"); } if($adresse > 0) { foreach($fields as $key=>$value) { $felder[$key]=$tmp[$value][$i]; if($key=="typ" || $key=="zahlungsweise") $tmp[$value][$i] = strtolower($tmp[$value][$i]); if($key=="land") { if($tmp[$value][$i]=="Deutschland" || $tmp[$value][$i]=="Germany" || $tmp[$value][$i]=="") $tmp[$value][$i] = "DE"; } $this->app->DB->Update("UPDATE adresse SET ".$fields[$key]."='".$tmp[$value][$i]."' WHERE id='$adresse' LIMIT 1"); } } } break; } } if($ziel=="zeiterfassung") { $msg=$this->app->erp->base64_url_encode("
Export durchgeführt.
"); header("Location: index.php?module=exportvorlage&action=export&id=$id&msg=$msg"); exit; } else { $msg=$this->app->erp->base64_url_encode("
Export durchgeführt.
"); header("Location: index.php?module=exportvorlage&action=export&id=$id&msg=$msg"); exit; } } function ExportPrepareHeader($ziel,$csv_fields_keys,$csv_fields) { $number_of_fields =count($csv_fields_keys); switch($ziel) { case "einkauf": case "artikel": $this->app->Tpl->Add('ERGEBNIS','AuswahlAktionArtikel'); break; case "adresse": $this->app->Tpl->Add('ERGEBNIS','AuswahlAktionAdresse'); break; case "zeiterfassung": $this->app->Tpl->Add('ERGEBNIS','Auswahl AktionKunde'); break; } for($j=0;$j<$number_of_fields;$j++) { $this->app->Tpl->Add('ERGEBNIS',''.$csv_fields[($csv_fields_keys[$j])].''); } $this->app->Tpl->Add('ERGEBNIS',''); } function ExportPrepareRow($rowcounter,$ziel,$data,$csv_fields_keys,$csv_fields) { $number_of_fields =count($csv_fields_keys); //Standard $fields[waehrung] = 'EUR'; for($j=0;$j<$number_of_fields;$j++) { $value = trim($data[($csv_fields_keys[$j]-1)]); $fieldname = $csv_fields[$csv_fields_keys[$j]]; switch($fieldname) { case "herstellernummer": $fields['herstellernummer'] = $value; $fields['herstellernummer'] = $this->app->DB->Select("SELECT herstellernummer FROM artikel WHERE herstellernummer='".$fields['herstellernummer']."' LIMIT 1"); // if($fields[herstellernummer]<=0) $fields[herstellernummer]=""; break; case "nummer": $fields['nummer'] = $value; $fields['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE nummer='".$fields['nummer']."' LIMIT 1"); //if($fields[nummer]==0) $fields[nummer]=""; break; case "lieferantennummer": $fields['lieferantennummer'] = $value; $fields['lieferantennummer'] = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE lieferantennummer='".$fields['lieferantennummer']."' LIMIT 1"); $lieferantid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$fields['lieferantennummer']."' LIMIT 1"); if($fields['lieferantennummer']<=0) $fields['lieferantennummer']=""; break; case "kundennummer": $fields['kundennummer'] = $value; $fields['kundennummer'] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE lieferantennummer='".$fields['lieferantennummer']."' LIMIT 1"); if($fields['kundennummer']<=0) $fields['kundennummer']=""; break; case "ab_menge": $fields['ab_menge'] = $value; break; case "ean": $fields['ab_menge'] = $value; break; case "waehrung": $fields['waehrung'] = $value; break; case "ekpreis": $value = str_replace('EUR','',$value); $value = str_replace(' ','',$value); if(preg_match('#^(?.*)(?[\.,])(?[0-9]+)$#', $value, $matches)) { /* clean integer and append decimals with your own separator */ $number = ((int) preg_replace('#[^0-9]+#', '', $matches['integer']) . ',' . $matches['decimals']); } else { $number = (int) preg_replace('#[^0-9]+#', '', $input); } // $formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY); // prüfe von rechts letztes zeichen das keine 0 ist // let's print the international format for the en_US locale $value = $number; $fields['ekpreis'] = $value; break; case "datum_von": $value = $this->app->String->Convert($value,"%1.%2.%3","20%3-%2-%1"); $fields['datum_von'] = $value; break; case "datum_bis": $value = $this->app->String->Convert($value,"%1.%2.%3","20%3-%2-%1"); $fields['datum_bis'] = $value; break; case "kennung": $fields['kennung'] = $value; break; case "zeit_bis": $fields['zeit_bis'] = $value; break; case "zeit_von": $fields['zeit_von'] = $value; break; default: $fields[$fieldname] = $value; //$value = $data[($csv_fields_keys[$j]-1)]; // $value = $data[($csv_fields_keys[$j]-1)]; } $output .= ''; } switch($ziel) { case "einkauf": $checked = "checked"; if($fields['lieferantennummer']=="") { $action_anzeige = "Keine (Lieferant fehlt)"; $action="none"; $checked=""; } else if($fields['lieferantennummer']!="" && $fields['nummer']!="") { $nummer = $fields['nummer']; $action_anzeige = "Update (Artikelnr. gefunden)"; $action="update"; } else if($fields['lieferantennummer']!="" && $fields['herstellernummer']!="") { $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE herstellernummer='".$fields['herstellernummer']."' LIMIT 1"); $action_anzeige = "Update (Herstellernr. gefunden)"; $action="update"; } else if($fields['lieferantennummer']!="" && $fields['bestellnummer']!="") { $artikelid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE bestellnummer='".$fields['bestellnummer']."' AND adresse='".$lieferantid."' LIMIT 1"); $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$artikelid."' LIMIT 1"); $action_anzeige = "Update (Bestellnr. gefunden)"; $action="update"; } else { $action_anzeige = "Keine (Artikel- oder Herstellernr. fehlt)"; $action="none"; $checked=""; } break; case "adresse": if($fields['kundennummer']=="" && $fields['lieferantennummer']=="" && $fields['name']=="") { $action_anzeige = "Keine (Kd.- und Lieferanten-Nr. und name fehlt)"; $action="none"; $checked=""; } else if($fields['kundennummer']=="" && $fields['name']!="" && $fields['lieferantennummer']=="") { $action_anzeige = "Neu (Adresse neu anlegen)"; $action="create"; $checked="checked"; } else if($fields['lieferantennummer']!="" || $fields['kundennummer']!="") { $checkkunde = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$fields['kundennummer']."' AND kundennummer!='' LIMIT 1"); if($checkkunde <= 0) { $action_anzeige = "Neu (Adresse neu anlegen)"; $action="create"; $checked="checked"; } else { $action_anzeige = "Update (Kundennummer gefunden)"; $action="update"; $checked="checked"; } $checklieferant = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$fields['lieferantennummer']."' AND lieferantennummer!='' LIMIT 1"); if($checklieferant <= 0) { $action_anzeige = "Neu (Adresse neu anlegen)"; $action="create"; $checked="checked"; } else { $action_anzeige = "Update (Lieferantennummer gefunden)"; $action="update"; $checked="checked"; } } break; case "artikel": if($fields['nummer']=="" && $fields['name_de']=="") { $action_anzeige = "Keine (Artikel Nr. und name_de fehlt)"; $action="none"; $checked=""; } else if($fields['nummer']=="" && $fields['name_de']!="") { $action_anzeige = "Neu (Artikel neu anlegen)"; $action="create"; $checked="checked"; } else if($fields['nummer']!="") { $action_anzeige = "Update (Artikel update)"; $action="update"; $checked="checked"; } break; case "zeiterfassung": $checked = "checked"; if($fields['kennung']!="") $nummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE kennung='".$fields['kennung']."' LIMIT 1"); else $nummer=""; if($nummer=="") { $action_anzeige = "Keine (Kennung oder Kundennummer fehlt)"; $action="none"; $checked=""; } else { $action="create"; } break; } $this->app->Tpl->Add('ERGEBNIS',' '.$action_anzeige.' '.$nummer.''.$output); $this->app->Tpl->Add('ERGEBNIS',''); } }