mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-26 22:50:29 +01:00
1638 lines
69 KiB
PHP
1638 lines
69 KiB
PHP
<?php
|
|
/*
|
|
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*
|
|
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
|
|
*
|
|
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
|
|
*
|
|
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
|
|
* to obtain the text of the corresponding license version.
|
|
*
|
|
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*/
|
|
?>
|
|
<?php
|
|
include '_gen/exportvorlage.php';
|
|
|
|
class Exportvorlage extends GenExportvorlage {
|
|
/** @var Application $app */
|
|
var $app;
|
|
|
|
/**
|
|
* Exportvorlage constructor.
|
|
*
|
|
* @param Application $app
|
|
* @param bool $intern
|
|
*/
|
|
public function __construct($app,$intern=false)
|
|
{
|
|
$this->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('<br />',';',$fields);
|
|
$fields = str_replace(';;',';',$fields);
|
|
|
|
$fieldsarray = explode(';',$fields);
|
|
for($i=0;$i<(!empty($fieldsarray)?count($fieldsarray):0);$i++)
|
|
{
|
|
$fieldsarray_items = explode(':',$fieldsarray[$i]);
|
|
foreach($fieldsarray_items as $k => $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('<br />',';',$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;$i<(!empty($fieldsarray)?count($fieldsarray):0);$i++)
|
|
|
|
|
|
$sql_fields = implode(',',$fields_array);
|
|
$sql_fields = trim($sql_fields);
|
|
$sql_fields = rtrim($sql_fields,',');
|
|
|
|
$fields_where = str_replace(''',"'",$fields_where);
|
|
|
|
$fieldsarray = explode(';',$fields_where);
|
|
foreach($fieldsarray as $fieldarray) {
|
|
$fields_array_where[] = $fieldarray;
|
|
}
|
|
|
|
if($internal==true)
|
|
{
|
|
$datum_von = isset($filter['von'])?$filter['von']:'';
|
|
$datum_bis = isset($filter['bis'])?$filter['bis']:'';
|
|
$projekt = isset($filter['projekt'])?$filter['projekt']:'';
|
|
} else {
|
|
$datum_von = $this->app->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((!empty($fields_array_where)?count($fields_array_where):0) > 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("<div class=\"info\">Export durchgeführt.</div>");
|
|
header("Location: index.php?module=exportvorlage&action=export&id=$id&msg=$msg");
|
|
exit;
|
|
} else {
|
|
$msg=$this->app->erp->base64_url_encode("<div class=\"info\">Export durchgeführt.</div>");
|
|
header("Location: index.php?module=exportvorlage&action=export&id=$id&msg=$msg");
|
|
exit;
|
|
}
|
|
}
|
|
|
|
|
|
function ExportPrepareHeader($ziel,$csv_fields_keys,$csv_fields)
|
|
{
|
|
$number_of_fields =(!empty($csv_fields_keys)?count($csv_fields_keys):0);
|
|
|
|
switch($ziel)
|
|
{
|
|
case "einkauf":
|
|
case "artikel":
|
|
$this->app->Tpl->Add('ERGEBNIS','<tr><td width="100"><b>Auswahl</b></td><td width="100"><b>Aktion</b></td><td><b>Artikel</b></td>');
|
|
break;
|
|
case "adresse":
|
|
$this->app->Tpl->Add('ERGEBNIS','<tr><td width="100"><b>Auswahl</b></td><td width="100"><b>Aktion</b></td><td><b>Adresse</b></td>');
|
|
break;
|
|
|
|
case "zeiterfassung":
|
|
$this->app->Tpl->Add('ERGEBNIS','<tr><td width="100"><b>Auswahl</b></td>
|
|
<td width="100"><b>Aktion</b></td><td><b>Kunde</b></td>');
|
|
break;
|
|
}
|
|
|
|
for($j=0;$j<$number_of_fields;$j++)
|
|
{
|
|
$this->app->Tpl->Add('ERGEBNIS','<td><b>'.$csv_fields[($csv_fields_keys[$j])].'</b></td>');
|
|
}
|
|
$this->app->Tpl->Add('ERGEBNIS','</tr>');
|
|
}
|
|
|
|
function ExportPrepareRow($rowcounter,$ziel,$data,$csv_fields_keys,$csv_fields)
|
|
{
|
|
$number_of_fields =(!empty($csv_fields_keys)?count($csv_fields_keys):0);
|
|
//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('#^(?<integer>.*)(?<separator>[\.,])(?<decimals>[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 .= '<td><input type="text" size="15" name="row['.$fieldname.']['.$rowcounter.']" value="'.$value.'"></td>';
|
|
}
|
|
|
|
|
|
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','<tr><td width="100"><input type="hidden" name="row[cmd]['.$rowcounter.']" value="'.$action.'">
|
|
<input type="checkbox" name="row[checked]['.$rowcounter.']" '.$checked.' value="1"></td><td nowrap>'.$action_anzeige.'</td>
|
|
<td>'.$nummer.'<input type="hidden" name="row[nummer]['.$rowcounter.']" value="'.$nummer.'"></td>'.$output);
|
|
$this->app->Tpl->Add('ERGEBNIS','</tr>');
|
|
}
|
|
|
|
}
|