'))) as menux, '' as menu
FROM artikeleigenschaften e
INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften
WHERE ew.artikel = '$id')";
$sqla[] = "(SELECT ap.id, ae.name, aw.wert, aw.einheit, ap.property_to as eigenschafts, ap.property_value_to as werts, ap.language_to as spraches, s.bezeichnung as shops, IF(ap.article_id > 0, 'ja', '') as artikelspezifisch, IF(ap.article_id = 0, CONCAT('
';
$numbercols = array(3);
// SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS v.id,
if(v.art='Kunde',if(v.adresse='' or v.adresse=0,'Standardpreis',CONCAT(adr.kundennummer,' ',adr.name)),CONCAT(g.name,' ',g.kennziffer)) as kunde,
if(v.adresse > 0 OR v.gruppe >0,'','') as hinweis,
".$this->app->erp->FormatMenge('v.ab_menge').' as ab_menge, '.$this->app->YUI->FormatPreis('v.preis')." as preis, v.waehrung, DATE_FORMAT(v.gueltig_ab, '%d.%m.%Y') as gueltig_ab, DATE_FORMAT(v.gueltig_bis, '%d.%m.%Y') as gueltig_bis, v.id as menu
FROM verkaufspreise v LEFT JOIN adresse adr ON v.adresse=adr.id LEFT JOIN gruppen g ON g.id=v.gruppe ";
$more_data1 = $this->app->Secure->GetGET('more_data1');
// kunde
$more_data2 = $this->app->Secure->GetGET('more_data2');
if($more_data2=='1') {
$subwhere[] = ' v.adresse > 0 AND v.gruppe <= 0 ';
}
//Gruppe
$more_data3 = $this->app->Secure->GetGET('more_data3');
if($more_data3=='1') {
$subwhere[] = ' v.gruppe > 0 AND v.adresse<=0 ';
}
//listenpreise
$more_data4 = $this->app->Secure->GetGET('more_data4');
if($more_data4=='1') {
$subwhere[] = ' v.adresse = 0 AND v.gruppe=0 ';
}
$csubwhere = !empty($subwhere)?count($subwhere):0;
$tmp = '';
for ($j = 0;$j < $csubwhere;$j++) {
$tmp.= ' AND ' . $subwhere[$j];
}
if ($more_data1 == 1){
$where = "v.artikel='$id' " . $tmp;
}
else{
$where = "v.artikel='$id' AND v.geloescht='0' AND (v.gueltig_bis>NOW() OR v.gueltig_bis='0000-00-00') " . $tmp;
}
// gesamt anzahl
$count = "SELECT COUNT(v.id) FROM verkaufspreise v WHERE $where";
break;
case 'einkaufspreise':
$id = (int)$this->app->Secure->GetGET('id');
$allowed['artikel'] = array('einkauf');
$this->app->Tpl->Add('JQUERYREADY', "$('#alteeinkaufspreise').click( function() { fnFilterColumn1( 0 ); } );");
$defaultorder = 4; //Optional wenn andere Reihenfolge gewuenscht
$defaultorderdesc = 0;
for ($r = 1;$r < 2;$r++) {
$this->app->Tpl->Add('JAVASCRIPT', '
function fnFilterColumn' . $r . ' ( i )
{
if(oMoreData' . $r . $name . '==1)
oMoreData' . $r . $name . ' = 0;
else
oMoreData' . $r . $name . ' = 1;
$(\'#' . $name . '\').dataTable().fnFilter(
\'\',
i,
0,0
);
}
');
}
// headings
$heading = array('Lieferant', 'Bezeichnung', 'Bestellnummer', 'ab', 'VPE', 'Preis', 'Währung', 'bis', 'Rahmenvert.', 'Menü');
$width = array('35%', '20%', '3%', '3%', '1%', '1%', '1%', '1%', '10%', '10%');
$findcols = array('adr.name', 'bezeichnunglieferant', 'bestellnummer', 'ab_menge', 'vpe', 'preis', 'e.waehrung', 'e.gueltig_bis', "if(e.rahmenvertrag='1',CONCAT(e.rahmenvertrag_menge,' / ',IFNULL((SELECT trim(SUM(bp.menge)) FROM bestellung b LEFT JOIN bestellung_position bp ON bp.bestellung=b.id WHERE b.datum >=e.rahmenvertrag_von AND b.datum <= e.rahmenvertrag_bis AND b.status!='storniert' AND e.adresse=b.adresse AND bp.artikel=e.artikel),0)),'-')", 'id');
$searchsql = array('adr.name', 'e.bezeichnunglieferant', 'e.bestellnummer', 'e.ab_menge', 'e.vpe', $this->app->YUI->FormatPreis('e.preis'), 'e.waehrung', "DATE_FORMAT(e.gueltig_bis,'%d.%m.%Y')", "if(e.rahmenvertrag='1',CONCAT(e.rahmenvertrag_menge,' / ',IFNULL((SELECT trim(SUM(bp.menge)) FROM bestellung b LEFT JOIN bestellung_position bp ON bp.bestellung=b.id WHERE b.datum >=e.rahmenvertrag_von AND b.datum <= e.rahmenvertrag_bis AND b.status!='storniert' AND e.adresse=b.adresse AND bp.artikel=e.artikel),0)),'-')");
$menu = '';
//$menu = "";
$menu .= "app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
$menu .= '" . " ';
$menu .= "";
$menu .= "app->Conf->WFconf['defaulttheme']}/images/disable.png\" border=\"0\">";
$menu .= '" . " ';
$menu .= "";
$menu .= "app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
$menu .= '" . " ';
$menu .= "";
$menu .= "app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">";
$menu .= '';
// SQL statement
$datecols = array(7);
$numbercols = array(5);
$alignright=array(4,5,6,7,8,9);
$sql = "SELECT SQL_CALC_FOUND_ROWS e.id, CONCAT('',adr.name,'') as lieferant, e.bezeichnunglieferant, e.bestellnummer,
".$this->app->erp->FormatMenge('e.ab_menge')." as ab_menge ,e.vpe as vpe, ".$this->app->YUI->FormatPreis('e.preis')." as preis,e.waehrung as waehrung, if(e.gueltig_bis='0000-00-00','-',DATE_FORMAT(e.gueltig_bis, '%d.%m.%Y')) as gueltig_bis,
if(e.rahmenvertrag='1',CONCAT(e.rahmenvertrag_menge,' / ',IFNULL((SELECT trim(SUM(bp.menge)) FROM bestellung b LEFT JOIN bestellung_position bp ON bp.bestellung=b.id WHERE b.datum >=e.rahmenvertrag_von AND b.datum <= e.rahmenvertrag_bis AND b.status!='storniert' AND e.adresse=b.adresse AND bp.artikel=e.artikel),0)),'-') as rahmenvertrag, e.id as menu
FROM einkaufspreise e LEFT JOIN projekt p ON p.id=e.projekt LEFT JOIN adresse adr ON e.adresse=adr.id ";
$more_data1 = $this->app->Secure->GetGET('more_data1');
// if($tmp!="")$tmp .= " AND e.geloescht='1' ";
// Fester filter
if ($more_data1 == 1){
$where = "e.artikel='$id' AND e.geloescht='0' ";
}
else{
$where = "e.artikel='$id' AND e.geloescht='0' AND (e.gueltig_bis>NOW() OR e.gueltig_bis='0000-00-00') ";
}
// Fester filter
// $where = "e.artikel='$id' AND e.geloescht='0' ";
// gesamt anzahl
$count = "SELECT COUNT(e.id) FROM einkaufspreise e WHERE $where";
break;
case 'lagerbewegungartikel':
$id = (int)$this->app->Secure->GetGET('id');
$allowed['artikel'] = array('lager');
$heading = array('Datum', 'Lager', 'Menge', 'VPE', 'Richtung', 'Referenz', 'Bearbeiter', 'Projekt', 'Inventur','Menü');
$width = array('1%', '5%', '5%', '5%', '5%', '40%', '20%', '5%','10%', '1%');
$findcols = array('lpi.zeit', 'lp.kurzbezeichnung', 'lpi.menge', 'vpe', "if(lpi.eingang,'Eingang','Ausgang')", 'referenz', 'lpi.bearbeiter', 'p.abkuerzung', 'zeitstempel','id');
$searchsql = array('DATE_FORMAT(lpi.zeit,\'%d.%m.%Y\')', 'lp.kurzbezeichnung', 'lpi.menge', 'vpe', "if(lpi.eingang,'Eingang','Ausgang')", 'lpi.referenz', 'lpi.bearbeiter', 'p.abkuerzung');
$defaultorder = 10; //Optional wenn andere Reihenfolge gewuenscht
$alignright = array(3);
$defaultorderdesc = 1;
$menu = '-';
$datecols = array(0);
//$menu = "
";
//app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\" >
// $menucol=3;
/*
SELECT DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager, lpi.menge as menge, lpi.vpe as VPE, if(lpi.eingang,'Eingang','Ausgang') as Richtung, substring(lpi.referenz,1,60) as referenz, lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt,
lpi.id FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id WHERE lpi.artikel='$id' order by lpi.zeit DESC*/
// SQL statement
if($this->app->erp->GetKonfiguration('artikel_lager_bestandsanzeige')=='1')
{
$sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id,
DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager,
".$this->app->erp->FormatMenge('lpi.menge')." as menge,
lpi.vpe as VPE, if(lpi.eingang,'Eingang','Ausgang') as Richtung,
CONCAT(
lpi.referenz,
if(
lpi.bestand >= 0 AND DATE_FORMAT(lpi.zeit,'%Y-%m-%d') >='2015-06-07' ,
CONCAT(
' (Neuer Bestand: ',
".$this->app->erp->FormatMenge('lpi.bestand').",
')'
),
''
),
IF(art.mindesthaltbarkeitsdatum = 1,
CONCAT(' ',
IFNULL(
(
SELECT CONCAT(IFNULL(mhddatum,''),' ',IFNULL(charge,'') )
FROM mhd_log
WHERE artikel = art.id AND zeit >= lpi.zeit
ORDER BY id
LIMIT 1
),''
),''
),
IF(
art.chargenverwaltung > 0,
CONCAT(' ',
IFNULL(
(
SELECT IFNULL(bezeichnung,'')
FROM chargen_log
WHERE artikel = art.id AND zeit >= lpi.zeit
ORDER BY id
LIMIT 1
),
''
),''
),
''
)
)
) as referenz,
lpi.bearbeiter as bearbeiter, p.abkuerzung as projekt,
DATE_FORMAT(api.zeitstempel,'%d.%m.%Y'),
lpi.id
FROM lager_bewegung AS lpi
INNER JOIN `artikel` AS `art` ON lpi.artikel = art.id
LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id
LEFT JOIN projekt p ON lpi.projekt=p.id
LEFT JOIN artikel_permanenteinventur api ON api.id=lpi.permanenteinventur";
} else {
$sql = "SELECT SQL_CALC_FOUND_ROWS lpi.id,
DATE_FORMAT(lpi.zeit,'%d.%m.%Y') as datum, lp.kurzbezeichnung as lager,
".$this->app->erp->FormatMenge("lpi.menge")." as menge,
lpi.vpe as VPE, if(lpi.eingang,'Eingang','Ausgang') as Richtung,
CONCAT(
lpi.referenz,
IF(art.mindesthaltbarkeitsdatum = 1,
CONCAT(' ',
IFNULL(
(
SELECT CONCAT(IFNULL(mhddatum,''),' ',IFNULL(charge,'') )
FROM mhd_log
WHERE artikel = art.id AND zeit >= lpi.zeit
ORDER BY id
LIMIT 1
),''
),''
),
IF(
art.chargenverwaltung > 0,
CONCAT(' ',
IFNULL(
(
SELECT IFNULL(bezeichnung,'')
FROM chargen_log
WHERE artikel = art.id AND zeit >= lpi.zeit
ORDER BY id
LIMIT 1
),
''
),''
),
'')
)
) as referenz, lpi.bearbeiter as bearbeiter,
p.abkuerzung as projekt, DATE_FORMAT(api.zeitstempel,'%d.%m.%Y'),
lpi.id
FROM lager_bewegung lpi
INNER JOIN `artikel` AS `art` ON lpi.artikel = art.id
LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id
LEFT JOIN projekt p ON lpi.projekt=p.id
LEFT JOIN artikel_permanenteinventur api ON api.id=lpi.permanenteinventur";
}
// Fester filter
$where = " lpi.artikel='$id' ";
// gesamt anzahl
$count = "SELECT COUNT(lpi.id) FROM lager_bewegung lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id WHERE lpi.artikel='$id'";
break;
case 'stueckliste':
$id = (int)$this->app->Secure->GetGET('id');
$allowed['artikel'] = array('stueckliste');
$defaultorder = 7;
// headings
$heading = array('Artikel', 'Nummer','Referenz','Menge', 'Einheit', 'Lager', 'Reserviert', 'Menü');
$width = array('50%', '10%', '5%', '5%', '5%','5%', '5%', '9%');
$findcols = array('a.name_de', 'a.nummer','s.referenz', 's.menge','a.einheit',
'lag.menge', 'CASE WHEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) > 0
THEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id)
ELSE 0
END','id');
$searchsql = array('a.name_de', 'a.nummer','s.referenz','a.einheit', 's.menge','s.art',"CONCAT(IF(s.art='' OR s.art='et','Einkaufsteil',''),IF(s.art='it','Informationsteil/Dienstleistung',''),IF(s.art='bt','Beistellung',''))");
$menu = "
";
$alignright = array(3,5,6);
// SQL statement
$sql = "SELECT SQL_CALC_FOUND_ROWS
s.id,
CONCAT('',a.name_de,' ',
IF(s.art='it',' - Informationsteil/Dienstleistung',''),IF(s.art='bt',' - Beistellung',''), COALESCE((SELECT GROUP_CONCAT(' - ', art.nummer, ' ', art.name_de, ' (', alt.reason, ')', '' SEPARATOR '') FROM parts_list_alternative AS alt INNER JOIN artikel AS art ON art.id = alt.alternative_article_id WHERE alt.parts_list_id = s.id), '')) as artikel,
CONCAT('',a.nummer,'') as nummer,
s.referenz,
trim(s.menge)+0 as menge, a.einheit,
".$this->app->erp->FormatMenge('ifnull(lag.menge,0)').' as lager,
CASE WHEN (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=a.id) > 0
THEN (SELECT '.$this->app->erp->FormatMenge('SUM(lr.menge)')." FROM lager_reserviert lr WHERE lr.artikel=a.id)
ELSE 0
END as reserviert,
s.id as menu
FROM stueckliste s
INNER JOIN artikel a ON s.artikel=a.id
LEFT JOIN (SELECT sum(lpi.menge) as menge ,lpi.artikel
FROM lager_platz_inhalt AS lpi
INNER JOIN (
SELECT artikel
FROM stueckliste
WHERE stuecklistevonartikel='$id' GROUP BY artikel
) AS s2 ON lpi.artikel = s2.artikel
INNER JOIN lager_platz AS lp ON lpi.lager_platz = lp.id AND ifnull(lp.sperrlager,0) = 0
GROUP BY lpi.artikel) AS lag ON a.id = lag.artikel
";
// Fester filter
$where = "s.stuecklistevonartikel='$id' ";
// gesamt anzahl
$count = "SELECT COUNT(s.id) FROM stueckliste s WHERE s.stuecklistevonartikel='$id' ";
break;
case 'parts_list_alternatives':
$allowed['artikel'] = array('stueckliste');
$heading = array('Nummer','Artikel','Menü');
$width = array('40%','50%','5%');
$findcols = array('a.nummer', 'a.name_de', 'p.id');
$searchsql = array('a.nummer', 'a.name_de');
$id = $app->Secure->GetGET('more_data1');
$menu = "
";
$sql = "SELECT SQL_CALC_FOUND_ROWS al.id, e.name, al.amount, d.name, CONCAT(UCASE(LEFT(al.type, 1)), SUBSTRING(al.type, 2)), al.id
FROM article_label al
LEFT JOIN etiketten e ON al.label_id = e.id
LEFT JOIN drucker d ON al.printer_id = d.id";
$where = "al.article_id = '$artikelId'";
break;
}
$erg = [];
foreach($erlaubtevars as $k => $v)
{
if(isset($$v))
{
$erg[$v] = $$v;
}
}
return $erg;
}
public function __construct($app, $intern = false) {
//parent::GenArtikel($app);
$this->app=$app;
if($intern){
return;
}
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("create","ArtikelCreate");
$this->app->ActionHandler("demo","ArtikelDemo");
$this->app->ActionHandler("edit","ArtikelEdit");
$this->app->ActionHandler("list","ArtikelList");
$this->app->ActionHandler("newlist","ArtikelNewList");
$this->app->ActionHandler("stueckliste","ArtikelStueckliste");
$this->app->ActionHandler("stuecklisteimport","ArtikelStuecklisteImport");
$this->app->ActionHandler("stuecklisteupload","ArtikelStuecklisteUpload");
$this->app->ActionHandler("instueckliste","ArtikelInStueckliste");
$this->app->ActionHandler("delstueckliste","DelStueckliste");
$this->app->ActionHandler("stuecklisteempty","ArtikelStuecklisteEmpty");
$this->app->ActionHandler("stuecklisteexport","ArtikelStuecklisteExport");
$this->app->ActionHandler("upstueckliste","UpStueckliste");
$this->app->ActionHandler("downstueckliste","DownStueckliste");
$this->app->ActionHandler("editstueckliste","ArtikelStuecklisteEditPopup");
$this->app->ActionHandler("verkauf","ArtikelVerkauf");
$this->app->ActionHandler("copy","ArtikelCopy");
$this->app->ActionHandler("copyedit", "ArtikelCopyEdit");
$this->app->ActionHandler("copysave", "ArtikelCopySave");
$this->app->ActionHandler("schliessen","ArtikelSchliessen");
$this->app->ActionHandler("verkaufcopy","ArtikelVerkaufCopy");
$this->app->ActionHandler("verkaufdelete","ArtikelVerkaufDelete");
$this->app->ActionHandler("verkaufdisable","ArtikelVerkaufDisable");
$this->app->ActionHandler("einkauf","ArtikelEinkauf");
$this->app->ActionHandler("einkaufdelete","ArtikelEinkaufDelete");
$this->app->ActionHandler("einkaufdisable","ArtikelEinkaufDisable");
$this->app->ActionHandler("einkaufcopy","ArtikelEinkaufCopy");
$this->app->ActionHandler("projekte","ArtikelProjekte");
$this->app->ActionHandler("rabatt","ArtikelRabatt");
$this->app->ActionHandler("lager","ArtikelLager");
$this->app->ActionHandler("mindesthaltbarkeitsdatum","ArtikelMHD");
$this->app->ActionHandler("mhddelete","ArtikelMHDDelete");
$this->app->ActionHandler("bestbeforeadd","ArticleBestbeforeAdd");
$this->app->ActionHandler("bestbeforereduce","ArticleBestbeforeReduce");
$this->app->ActionHandler("batchadd","ArticleBatchAdd");
$this->app->ActionHandler("batchreduce","ArticleBatchReduce");
$this->app->ActionHandler("chargedelete","ArtikelChargeDelete");
$this->app->ActionHandler("chargen","ArtikelChargen");
$this->app->ActionHandler("wareneingang","ArtikelWareneingang");
$this->app->ActionHandler("offenebestellungen","ArtikelOffeneBestellungen");
$this->app->ActionHandler("belege","ArtikelBelege");
$this->app->ActionHandler("statistik","ArtikelStatistik");
$this->app->ActionHandler("offeneauftraege","ArtikelOffeneAuftraege");
$this->app->ActionHandler("dateien","ArtikelDateien");
$this->app->ActionHandler("eigenschaften","ArtikelEigenschaften");
$this->app->ActionHandler("eigenschaftensuche","ArtikelEigenschaftenSuche");
$this->app->ActionHandler("eigenschaftendelete","ArtikelEigenschaftenDelete");
$this->app->ActionHandler("eigenschaftencopy","ArtikelEigenschaftenCopy");
$this->app->ActionHandler("eigenschafteneditpopup","ArtikelEigenschaftenEditPopup");
$this->app->ActionHandler("provision","Artikelprovision");
$this->app->ActionHandler("delete","ArtikelDelete");
$this->app->ActionHandler("auslagern","ArtikelAuslagern");
$this->app->ActionHandler("einlagern","ArtikelEinlagern");
$this->app->ActionHandler("umlagern","ArtikelUmlagern");
$this->app->ActionHandler("ausreservieren","ArtikelAusreservieren");
$this->app->ActionHandler("etiketten","ArtikelEtiketten");
$this->app->ActionHandler("reservierung","ArtikelReservierung");
$this->app->ActionHandler("onlineshop","ArtikelOnlineShop");
$this->app->ActionHandler("ajaxwerte","ArtikelAjaxWerte");
$this->app->ActionHandler("profisuche","ArtikelProfisuche");
$this->app->ActionHandler("lagerlampe","ArtikelLagerlampe");
$this->app->ActionHandler("shopexport","ArtikelShopexport");
$this->app->ActionHandler("shopimport","ArtikelShopimport");
$this->app->ActionHandler("shopexportfiles","ArtikelShopexportFiles");
$this->app->ActionHandler("stuecklisteetiketten","ArtikelStuecklisteEtiketten");
$this->app->ActionHandler("minidetail","ArtikelMiniDetail");
$this->app->ActionHandler("artikelfreifelder", "ArtikelFreifelder");
$this->app->ActionHandler("artikelfreifelderedit", "ArtikelFreifelderEdit");
$this->app->ActionHandler("artikelfreifeldersave", "ArtikelFreifelderSave");
$this->app->ActionHandler("artikelfreifelderdelete", "ArtikelFreifelderDelete");
$this->app->ActionHandler("lagersync","ArtikelLagerSync");
$this->app->ActionHandler("thumbnail", "ArtikelThumbnail");
$this->app->ActionHandler("schnellanlegen", "ArtikelSchnellanlegen");
$this->app->ActionHandler("baum", "ArtikelBaum");
$this->app->ActionHandler("baumajax", "ArtikelBaumAjax");
$this->app->ActionHandler("baumdetail", "ArtikelBaumDetail");
$this->app->ActionHandler("baumedit","ArtikelBaumEdit");
$id = $this->app->Secure->GetGET('id');
$nummer = $this->app->Secure->GetPOST('nummer');
if(is_numeric($id) && $id > 0)
{
$arr = $this->app->DB->SelectRow("SELECT CONCAT(name_de,' (',nummer,')') as name2, name_de,nummer FROM artikel WHERE id='$id' LIMIT 1");
if(!empty($arr)){
$artikel = $arr['name2'];
$nummer = $arr['nummer'];
$namede = $arr['name_de'];
}
}
else{
$artikel = $nummer;
}
if($artikel!=''){
$this->app->Tpl->SetText('UEBERSCHRIFT', 'Artikel: ' . $artikel);
}
else {
$this->app->Tpl->SetText('UEBERSCHRIFT','Artikel');
}
$this->app->Tpl->SetText('ANZEIGENUMMER',$nummer);
if(isset($namede)){
$this->app->Tpl->SetText('ANZEIGENAMEDE',' '.$this->app->erp->LimitChar($namede,65));
}
$this->app->Tpl->Set('FARBE','[FARBE1]');
$this->app->erp->Headlines('Artikel');
$this->app->ActionHandlerListen($app);
$this->app = $app;
}
public function ArtikelRabatt()
{
$cmd = $this->app->Secure->GetGET('cmd');
$id = $this->app->Secure->GetGET('id');
$rabatt = $this->app->Secure->GetGET('rabatt');
$fmodul = $this->app->Secure->GetGET('fmodul');
$rabatt = str_replace(',','.',$rabatt);
if($cmd==='angebot' || $cmd==='auftrag' || $cmd==='rechnung' || $cmd==='gutschrift')
{
$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM $cmd WHERE id='$id'");
if($schreibschutz!='1')
{
$this->app->DB->Update(
"UPDATE `{$cmd}_position` AS `pos`
INNER JOIN `artikel` AS `art` ON pos.artikel = art.id
SET pos.rabatt='{$rabatt}',
pos.keinrabatterlaubt = 1
WHERE pos.{$cmd} = {$id}
AND (art.keinrabatterlaubt = 0 OR art.keinrabatterlaubt IS NULL)"
);
}
}
$this->app->Location->execute('index.php?module='.$cmd.'&action=positionen&id='.$id.'&fmodul='.$fmodul);
}
public function ArtikelDemo()
{
$projekt = $this->app->erp->Firmendaten('projekt');
if(class_exists('EtikettenPDFCustom'))
{
$Brief = new EtikettenPDFCustom($this->app,$projekt);
}else{
$Brief = new EtikettenPDF($this->app,$projekt);
}
$Brief->SetXML('
');
$Brief->Output('test.pdf','D');
$this->app->ExitXentral();
}
public function ArtikelEinkaufAdd()
{
$bezeichnunglieferant = '';
$artikel = (int)$this->app->Secure->GetPOST('artikel');
$lieferant = $this->app->Secure->GetPOST('lieferant');
$waehrung = $this->app->Secure->GetPOST('waehrung');
$bestellnummer = $this->app->Secure->GetPOST('bestellnummer');
$ab_menge = (float)str_replace(',','.',$this->app->Secure->GetPOST('ab_menge'));
$preis = (float)str_replace(',','.',$this->app->Secure->GetPOST('preis'));
if(!$artikel) {
echo json_encode(array('status'=>0,'error'=>'Kein Artikel'));
$this->app->ExitXentral();
}
$lieferantennummera = explode(' ',$lieferant);
$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer <> '' AND lieferantennummer = '".$this->app->DB->real_escape_string($lieferantennummera[0])."' LIMIT 1");
if(!$adresse) {
echo json_encode(array('status'=>0,'error'=>'Lieferant nicht gefunden'));
$this->app->ExitXentral();
}
$artikelprojekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id = '$artikel' LIMIT 1");
if($artikelprojekt && !$this->app->erp->UserProjektRecht($artikelprojekt))
{
echo json_encode(array('status'=>0,'error'=>'Fehlende Projektrechte'));
$this->app->ExitXentral();
}
$adressprojekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id = '$adresse' LIMIT 1");
if($adressprojekt && !$this->app->erp->UserProjektRecht($adressprojekt)) {
echo json_encode(array('status'=>0,'error'=>'Fehlende Projektrechte'));
$this->app->ExitXentral();
}
if($ab_menge < 0) {
echo json_encode(array('status'=>0,'error'=>'Menge ist kleiner 0'));
$this->app->ExitXentral();
}
$this->app->erp->AddEinkaufspreis($artikel,$ab_menge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung);
echo json_encode(array('status'=>1,'html'=>$this->app->erp->EinkaufspreiseTabelle($artikel)));
$this->app->ExitXentral();
}
public function ArtikelEigenschaften()
{
if(!$this->app->DB->Select('SELECT id FROM eigenschaften LIMIT 1'))// $this->app->erp->ModulVorhanden('artikeleigenschaften'))
{
$id = $this->app->Secure->GetGET('id');
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'save') {
$name = $this->app->Secure->GetPOST('name');
$wert = trim($this->app->Secure->GetPOST('wert'));
$einheit = $this->app->Secure->GetPOST('einheit');
$status = 0;
if($name)// && $wert != "")
{
$status = 1;
$checkkategorie = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht <> 1 LIMIT 1");
if(!$checkkategorie)
{
$this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) values ('$name')");
$checkkategorie = $this->app->DB->GetInsertID();
}
$checkwert = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte WHERE artikeleigenschaften = '$checkkategorie' AND artikel = '$id' AND wert = '$wert' LIMIT 1");
if(!$checkwert)$this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (wert, artikeleigenschaften, artikel, einheit) values ('$wert','$checkkategorie','$id','$einheit')");
}
echo json_encode(array('status'=>$status));
$this->app->ExitXentral();
}
if($cmd === 'get') {
$eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid');
$erg = $this->app->DB->SelectRow("SELECT ew.id, ew.wert, ew.einheit, e.name, ew.artikeleigenschaften, e.typ, ew.vorlage FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften
WHERE ew.id = '$eigenschaftid' AND ew.artikel = '$id' AND e.geloescht <> 1 LIMIT 1");
if(!$erg['vorlage']){
$erg['typ'] = 'einzeilig';
}
if($erg['typ'] === 'select'){
$tmp = $this->app->DB->SelectArr("SELECT wert FROM eigenschaften_vorlagen_werte WHERE name = '".$erg['name']."' AND vorlage='".$erg['vorlage']."'");
$erlaubteWerte = array();
foreach ($tmp as $wert){
$erlaubteWerte[] = $wert['wert'];
}
$erg['erlaubtewerte'] = $erlaubteWerte;
}
echo json_encode($erg);
$this->app->ExitXentral();
}
if($cmd === 'update')
{
$name = trim($this->app->Secure->GetPOST('e_name'));
$wert = trim($this->app->Secure->GetPOST('e_wert'));
$einheit = trim($this->app->Secure->GetPOST('e_einheit'));
$eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid');
$error = "";
if($name == ""){
$error .= "Bitte Eigenschaft ausfüllen\n";
}else{
$artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht = 0 LIMIT 1");
if($artikeleigenschaftid == "" || $artikeleigenschaftid <= 0){
$this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) VALUES ('$name')");
$artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' LIMIT 1");
}
}
if($wert == ""){
$error .= "Bitte Wert ausfüllen\n";
}
$eigenschaftvorhanden = $this->app->DB->Select("SELECT ew.id FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.id != '$eigenschaftid' AND ew.artikel = '$id' AND ew.artikeleigenschaften = '$artikeleigenschaftid' AND ew.wert = '$wert' AND e.geloescht = 0 LIMIT 1");
if($eigenschaftvorhanden != "" && $eigenschaftvorhanden > 0){
$error .= 'Eigenschaft ist bereits vorhanden.';
}
if($error == ''){
if($id && $eigenschaftid){
$this->app->DB->Update("UPDATE artikeleigenschaftenwerte SET artikeleigenschaften = '$artikeleigenschaftid', wert = '$wert', einheit = '$einheit' WHERE id = '$eigenschaftid' LIMIT 1");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
if($id){
$this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikeleigenschaften, wert, einheit, artikel)
VALUES ('$artikeleigenschaftid', '$wert', '$einheit', '$id')");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
echo json_encode(array('status'=>0,'statusText'=>"Fehler"));
$this->app->ExitXentral();
}
echo json_encode(array('status'=>0,'statusText'=>$error));
$this->app->ExitXentral();
}
if($cmd === 'copy'){
$name = trim($this->app->Secure->GetPOST('e_name'));
$wert = trim($this->app->Secure->GetPOST('e_wert'));
$einheit = trim($this->app->Secure->GetPOST('e_einheit'));
$eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid');
$error = "";
if($name == ""){
$error .= "Bitte Eigenschaft ausfüllen\n";
}else{
$artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht = 0 LIMIT 1");
if($artikeleigenschaftid == "" || $artikeleigenschaftid <= 0){
$this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) VALUES ('$name')");
$artikeleigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' LIMIT 1");
}
}
if($wert == ""){
$error .= "Bitte Wert ausfüllen\n";
}
$eigenschaftvorhanden = $this->app->DB->Select("SELECT ew.id FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.id != '$eigenschaftid' AND ew.artikel = '$id' AND ew.artikeleigenschaften = '$artikeleigenschaftid' AND ew.wert = '$wert' AND e.geloescht = 0 LIMIT 1");
if($eigenschaftvorhanden != "" && $eigenschaftvorhanden > 0){
$error .= 'Eigenschaft ist bereits vorhanden.';
}
if($error == ''){
if($id && $eigenschaftid == 0){
$this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikeleigenschaften, wert, einheit, artikel)
VALUES ('$artikeleigenschaftid', '$wert', '$einheit', '$id')");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
echo json_encode(array('status'=>0,'statusText'=>"Fehler"));
$this->app->ExitXentral();
}
echo json_encode(array('status'=>0,'statusText'=>$error));
$this->app->ExitXentral();
}
if($cmd === 'delete'){
$eigenschaftid = (int)$this->app->Secure->GetPOST('eigenschaftid');
$eigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte
WHERE artikel='$id' AND id='$eigenschaftid' LIMIT 1");
$status = 0;
if($eigenschaftid > 0)
{
$this->app->DB->Delete("DELETE FROM artikeleigenschaftenwerte WHERE id = '$eigenschaftid'");
$status = 1;
}
echo json_encode(array('status'=>$status,'statusText'=>'Fehler'));
$this->app->ExitXentral();
}
if($cmd === 'getuebersetzung'){
$uebersetzungid = (int)$this->app->Secure->GetPOST('id');
$data = $this->app->DB->SelectRow("SELECT ap.id, ap.article_id, ap.language_to, ap.property_to, ap.property_value_to,
ap.language_from, ap.property_from, ap.property_value_from, ap.shop_id
FROM article_property_translation ap
WHERE ap.id = '$uebersetzungid' AND ap.article_id = '$id' LIMIT 1");
if($data){
if($data['article_id'] > 0){
$articleNumber = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '".$data['article_id']."' LIMIT 1");
$articleName = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '".$data['article_id']."' LIMIT 1");
if($articleNumber != "" && $articleName != ""){
$data['article'] = $articleNumber." ".$articleName;
}
}
if($data['shop_id'] > 0){
$shopName = $this->app->DB->Select("SELECT bezeichnung FROM shopexport WHERE id = '".$data['shop_id']."' LIMIT 1");
$data['shop'] = $data['shop_id']." ".$shopName;
}else{
$data['shop'] = '';
}
}else{
$data['id'] = 0;
$articleNumber = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$id' LIMIT 1");
$articleName = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$id' LIMIT 1");
if($articleNumber != "" && $articleName != ""){
$data['article'] = $articleNumber." ".$articleName;
}else{
$data['article'] = '';
}
$data['language_to'] = '';
$data['property_to'] = '';
$data['property_value_to'] = '';
$data['language_from'] = '';
$data['property_from'] = '';
$data['property_value_from'] = '';
$data['shop'] = '';
}
echo json_encode($data);
$this->app->ExitXentral();
}
if($cmd === 'saveuebersetzung'){
$eintragid = (int)$this->app->Secure->GetPOST('id');
$languageTo = trim($this->app->Secure->GetPOST('languageTo'));
$propertyTo = trim($this->app->Secure->GetPOST('propertyTo'));
$propertyValueTo = trim($this->app->Secure->GetPOST('propertyValueTo'));
$languageFrom = trim($this->app->Secure->GetPOST('languageFrom'));
$propertyFrom = trim($this->app->Secure->GetPOST('propertyFrom'));
$propertyValueFrom = trim($this->app->Secure->GetPOST('propertyValueFrom'));
$shop = trim($this->app->Secure->GetPOST('shop'));
$error = "";
if($id != ""){
$id = (int)$this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' LIMIT 1");
if($id === 0){
$error .= "Bitte gültigen Artikel auswählen"."\n";
}
}
if($shop != ""){
$shop = explode(' ', $shop);
$shopId = $shop[0];
if($shopId != ""){
$shopId = (int)$this->app->DB->Select("SELECT id FROM shopexport WHERE id = '$shopId' LIMIT 1");
if($shopId === 0){
$error .= "Bitte gültigen Shop auswählen"."\n";
}
}
}else{
$shopId = 0;
}
if($propertyTo == "" && $propertyValueTo == ""){
$error .= "Bitte Eigenschaft oder Wert der Zielsprache ausfüllen"."\n";
}
//shop bedenken
$uebersetzungschonvorhanden = $this->app->DB->Select("SELECT id FROM article_property_translation WHERE article_id = '$id' AND language_from = '$languageFrom' AND language_to = '$languageTo' AND property_from = '$propertyFrom' AND property_to = '$propertyTo' AND property_value_from = '$propertyValueFrom' AND property_value_to = '$propertyValueTo' AND id != '$eintragid' LIMIT 1");
if($uebersetzungschonvorhanden != "" && $uebersetzungschonvorhanden > 0){
$error .= "Diese Übersetzung gibt es bereits für diesen Artikel.\n";
}
if($error == ''){
if($languageFrom === 'DE'){
if($propertyFrom != ''){
$propertyFromExists = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$propertyFrom' LIMIT 1");
if(!$propertyFromExists){
$this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) VALUES ('$propertyFrom')");
}
}
}
if($eintragid){
$this->app->DB->Update("UPDATE article_property_translation SET article_id = '$id', language_to = '$languageTo',
property_to = '$propertyTo', property_value_to = '$propertyValueTo', language_from = '$languageFrom',
property_from = '$propertyFrom', property_value_from = '$propertyValueFrom', shop_id = '$shopId'
WHERE id = '$eintragid'");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
$eigenschaftvorhanden = $this->app->DB->Select("SELECT aw.id FROM artikeleigenschaftenwerte aw JOIN artikeleigenschaften ae ON aw.artikeleigenschaften = ae.id WHERE aw.wert = '$propertyValueFrom' AND ae.name = '$propertyFrom' AND aw.artikel = '$id' LIMIT 1");
if($eigenschaftvorhanden == "" || $eigenschaftvorhanden <= 0){
$eigenschaftsid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$propertyFrom' LIMIT 1");
$this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikeleigenschaften, wert, artikel) VALUES ('$eigenschaftsid', '$propertyValueFrom', '$id')");
}
$this->app->DB->Insert("INSERT INTO article_property_translation (article_id, language_to, property_to, property_value_to,
language_from, property_from, property_value_from, shop_id)
VALUES ('$id', '$languageTo', '$propertyTo', '$propertyValueTo', '$languageFrom', '$propertyFrom',
'$propertyValueFrom', '$shopId')");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
echo json_encode(array('status'=>0,'statusText'=>$error));
$this->app->ExitXentral();
}
if($cmd === 'deleteuebersetzung'){
$eintragid = (int)$this->app->Secure->GetPOST('id');
if($eintragid){
$this->app->DB->Update("DELETE FROM article_property_translation WHERE id = '$eintragid'");
}
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
//VORLAGE LADEN
$laden = $this->app->Secure->GetPOST('laden');
if($laden){
$vorlage = $this->app->Secure->GetPOST('vorlage');
if(trim($vorlage) !== ''){
$vorlagenid = $this->app->DB->Select("SELECT id FROM eigenschaften_vorlagen WHERE bezeichnung = '$vorlage'");
$query = sprintf("SELECT evw.name, evw.wert, evw.einheit, ae.id FROM eigenschaften_vorlagen_werte evw
LEFT JOIN artikeleigenschaften ae ON evw.name = ae.name
WHERE evw.vorlage=%d AND (ISNULL(ae.name) OR ae.typ<>'select'
AND NOT ae.name IN(SELECT name FROM artikeleigenschaften WHERE geloescht=0 AND typ='select'))
GROUP BY ae.name, evw.wert, evw.einheit",
$vorlagenid);
$alleigenschaften = $this->app->DB->SelectArr($query);
$eigenschaftenNurSelect= $this->app->DB->SelectArr("SELECT evw.name, evw.wert, evw.einheit, ae.id FROM eigenschaften_vorlagen_werte evw JOIN artikeleigenschaften ae ON evw.name = ae.name WHERE ae.geloescht = 0 AND evw.vorlage='$vorlagenid' AND ae.typ='select' GROUP BY evw.name");
foreach ($eigenschaftenNurSelect as $eigenschaft){
$alleigenschaften[] = $eigenschaft;
}
foreach($alleigenschaften as $eigenschaft){
$eigenschaftid = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE id='$eigenschaft[id]' LIMIT 1");
if(!$eigenschaftid){
$this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) values ('".$eigenschaft['name']."')");
$eigenschaftid = $this->app->DB->GetInsertID();
}
$checkwert = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte WHERE artikeleigenschaften = '$eigenschaftid' AND artikel = '$id' AND wert = '".$eigenschaft['wert']."' LIMIT 1");
if(!$checkwert){
$this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (wert, artikeleigenschaften, artikel, einheit, vorlage) values ('".$eigenschaft['wert']."','$eigenschaftid','$id','".$eigenschaft['einheit']."', '$vorlagenid')");
}
}
}
}
$sprachen = $this->app->DB->SelectArr("SELECT iso, bezeichnung_de FROM sprachen");
$select = '';
foreach($sprachen as $key=>$value){
$select .= "";
}
$this->app->Tpl->Add("SPRACHEN", $select);
$this->app->YUI->AutoComplete('u_propertyFrom', 'artikeleigenschaften');
$this->app->YUI->AutoComplete('u_propertyValueFrom', 'artikeleigenschaftenwerte');
$this->app->YUI->AutoComplete('u_shop', 'shopnameid');
$this->app->YUI->AutoComplete('e_einheit','artikeleinheit');
$this->app->YUI->AutoComplete('e_name','artikeleigenschaften');
$this->app->YUI->AutoComplete('e_textwert', 'artikeleigenschaftenwerte');
$this->app->YUI->AutoComplete('vorlage','eigenschaften_vorlagen');
$this->ArtikelMenu();
$this->app->YUI->TableSearch('TAB1','artikel_eigenschaften_neu', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','artikel_artikeleigenschaften.tpl');
}else{
$this->app->Tpl->Add('UEBERSCHRIFT',' (Verkauf)');
$this->app->Tpl->Set('SUBSUBHEADING','Verkaufspreise'); $this->ArtikelMenu();
$id = $this->app->Secure->GetGET('id'); // neues arbeitspaket
$this->app->YUI->AutoComplete('einheit','artikeleinheit');
$this->app->YUI->AutoComplete('einheit2','artikeleinheit');
$this->app->YUI->AutoComplete('einheit3','artikeleinheit');
$widget = new WidgetEigenschaften($this->app,'TAB2');
$widget->form->SpecialActionAfterExecute('none',
"index.php?module=artikel&action=eigenschaften&id=$id");
if($this->app->Secure->GetPOST('submit')!=''){
$this->app->erp->EnableTab('tabs-2');
}
$widget->Create();
$this->app->YUI->TableSearch('TAB1','eigenschaften', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','eigenschaftenuebersicht.tpl');
}
}
public function CheckRights()
{
if($this->app->User->GetType()==='admin'){
return true;
}
$id = (int)$this->app->Secure->GetGET('id');
$action = $this->app->Secure->GetGET('action');
if($id && ($action == 'verkaufdisable' || $action == 'verkaufcopy' || $action == 'verkaufdelete' || $action == 'verkaufeditpopup'))
{
$projekt = $this->app->DB->Select("SELECT a.projekt FROM artikel a INNER JOIN verkaufspreise v on v.artikel = a.id WHERE v.id = '$id' LIMIT 1");
if($projekt){
return $this->app->erp->UserProjektRecht($projekt);
}
}elseif($id && ($action == 'einkaufdisable' || $action == 'einkaufcopy' || $action == 'einkaufdelete' || $action == 'einkaufeditpopup'))
{
$projekt = $this->app->DB->Select("SELECT a.projekt FROM artikel a INNER JOIN einkaufspreise e on e.artikel = a.id WHERE e.id = '$id' LIMIT 1");
if($projekt){
return $this->app->erp->UserProjektRecht($projekt);
}
}
return true;
}
public function ArtikelEigenschaftenEditPopup()
{
$id = $this->app->Secure->GetGET('id');
$this->app->Tpl->Set('OPENDISABLE','');
$this->app->YUI->AutoComplete('einheit','artikeleinheit');
$this->app->YUI->AutoComplete('einheit2','artikeleinheit');
$this->app->YUI->AutoComplete('einheit3','artikeleinheit');
$sid = $this->app->DB->Select("SELECT artikel FROM eigenschaften WHERE id='$id' LIMIT 1");
$this->ArtikelMenu($sid);
$this->app->Tpl->Set('ABBRECHEN',"");
$widget = new WidgetEigenschaften($this->app,'TAB1');
$widget->form->SpecialActionAfterExecute('close_refresh',
"index.php?module=artikel&action=eigenschaften&id=$sid&&22#tabs-1");
$widget->Edit();
$this->app->Tpl->Add('TAB2','Sie bearbeiten gerade eine Eigenschaft. Erst nach dem Speichern können neue Preise angelegt werden.');
$this->app->Tpl->Add('TAB3','Sie bearbeiten gerade eine Eigenschaft. Erst nach dem Speichern können Statistiken betrachtet werden.');
$this->app->Tpl->Parse('PAGE','eigenschaftenuebersicht.tpl');
}
public function ArtikelEigenschaftenDelete()
{
$id = $this->app->Secure->GetGET('id');
$sid = $this->app->DB->Select("SELECT artikel FROM eigenschaften WHERE id='$id' LIMIT 1");
if($id > 0){
$this->app->DB->Delete("DELETE FROM eigenschaften WHERE id='$id' LIMIT 1");
}
$this->app->Location->execute('index.php?module=artikel&action=eigenschaften&id='.$sid);
}
public function ArtikelLagerSync()
{
$id = $this->app->Secure->GetGET('id');
if($id > 0){
$this->app->DB->Update("UPDATE artikel SET cache_lagerplatzinhaltmenge='-100' WHERE id='$id'");
}
$sync = $this->app->erp->LagerSync($id,true);
if($sync==1) {
echo 'gruen';
}
else {
echo 'gelb';
}
$this->app->ExitXentral();
}
function Preisrechner()
{
$steuer_normal_komma = ($this->app->erp->GetStandardSteuersatzNormal() + 100)/100.0;
$steuer_ermaessigt_komma = ($this->app->erp->GetStandardSteuersatzErmaessigt() + 100)/100.0;
$this->app->Tpl->Set('PREISRECHNER',"app->erp->GetStandardSteuersatzNormal()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))*$steuer_normal_komma;\">");
$this->app->Tpl->Add('PREISRECHNER',"app->erp->GetStandardSteuersatzNormal()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))/$steuer_normal_komma;\">");
if($this->app->erp->Version()!=='stock')
{
$this->app->Tpl->Add('PREISRECHNER'," app->erp->GetStandardSteuersatzErmaessigt()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))*$steuer_ermaessigt_komma;\">");
$this->app->Tpl->Add('PREISRECHNER',"app->erp->GetStandardSteuersatzErmaessigt()."\" onclick=\"this.form.preis.value=parseFloat(this.form.preis.value.split(',').join('.'))/$steuer_ermaessigt_komma;\">");
}
}
public function ArtikelMiniDetail($parsetarget='',$menu=true)
{
$id=$this->app->Secure->GetGET('id');
$this->app->Tpl->Set('ID',$id);
$artikelarr = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id='$id' LIMIT 1");
$kurztext_de = '';
$name_de = '';
$nummer = '';
$lagerartikel = 0;
$lager_platz = 0;
$standardbild = 0;
if(!empty($artikelarr)) {
$kurztext_de = $artikelarr['anabregs_text'];
//$kurztext_de = !empty($artikelarr['kurztext_de'])?$artikelarr['kurztext_de']:$artikelarr['anabregs_text'];
$name_de = $artikelarr['name_de'];
$nummer = $artikelarr['nummer'];
$lagerartikel = $artikelarr['lagerartikel'];
$lager_platz = $artikelarr['lager_platz'];
$standardbild = $this->app->erp->GetArtikelStandardbild($id,true);
}
$this->app->Tpl->Set('NAME_DE',$name_de);
$this->app->Tpl->Set('NUMMER',$nummer);
if($standardbild > 0) {
//index.php?module=artikel&action=thumbnail&id=2&bildvorschau=62_100_100
//$this->app->Tpl->Set('ARTIKELBILD', "");
$this->app->Tpl->Set('ARTIKELBILD',
''
);
}
if($lagerartikel>0){
$this->app->Tpl->Set('LAGERLINK', " ⇒");
}
else{
$this->app->Tpl->Set('LAGERLINK', '');
}
$this->app->Tpl->Set('KURZTEXT',$kurztext_de);
// easy table mit arbeitspaketen YUI als template
$table = new EasyTable($this->app);
$table->Query("SELECT CONCAT(l.bezeichnung,' / ',lp.kurzbezeichnung, if(lp.sperrlager,' (Kein Auto-Versand Lager)',''),
if(lp.poslager,' (POS Lager)',''),if(lp.verbrauchslager,' (Verbrauchslager)',''),if(lp.autolagersperre,' (Nachschublager)','')) as lager, trim(lpi.menge)+0 as menge
FROM lager_platz_inhalt lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id
LEFT JOIN lager l ON l.id=lp.lager WHERE lpi.artikel='$id' ");
$table->DisplayNew('ARTIKEL','Menge','noAction');
if($lager_platz > 0)
{
$lagerarr = $this->app->DB->SelectRow("SELECT lp.lager,lp.kurzbezeichnung,lag.bezeichnung
FROM lager_platz AS lp LEFT JOIN lager AS lag ON lp.lager = lag.id
WHERE lp.id = '$lager_platz' LIMIT 1");
if(!empty($lagerarr))
{
$lager = $lagerarr['lager'];
$lagerhauptbezeichung = $lagerarr['bezeichnung'];
$lagerbezeichnung = $lagerarr['kurzbezeichnung'];
}else{
$lagerhauptbezeichung = '';
}
}else{
$lagerhauptbezeichung = '';
}
if($lagerhauptbezeichung=='') {
$lagerhauptbezeichung='kein Standardlager eingestellt';
}
$this->app->Tpl->Add('ARTIKEL'," Standardlager: $lagerhauptbezeichung ".(!empty($lagerbezeichnung)?"/ $lagerbezeichnung":'')."
");
$this->app->Tpl->Add('ARTIKEL',$this->ArtikelLagerInfo($id));
$table = new EasyTable($this->app);
$table->Query("SELECT adr.name as kunde, adr.kundennummer as kdnr, trim(r.menge)+0 as menge ,p.abkuerzung as projekt,r.grund FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id WHERE r.firma='{$this->app->User->GetFirma()}' AND a.id='$id'");
$table->DisplayNew('RESERVIERT','Grund','noAction');
$table = new EasyTable($this->app);
$table->Query("SELECT p.belegnr,a.name, a.kundennummer as kdnr, p.status,trim(po.menge)+0 as menge FROM auftrag_position po LEFT JOIN auftrag p ON p.id=po.auftrag LEFT JOIN adresse a ON a.id=p.adresse WHERE po.artikel='$id' AND (p.status!='abgeschlossen' AND p.status!='storniert')");
$table->DisplayNew('AUFTRAG','Menge','noAction');
$table = new EasyTable($this->app);
/* $table->Query("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('',b.belegnr,'') as 'bestellung Nr.', bp.bestellnummer as Nummer, bp.menge, bp.geliefert, bp.vpe as VPE, a.lieferantennummer as lieferant, a.name as name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum, b.status as status
FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id
WHERE artikel='$id' AND b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefertQuery("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('',b.belegnr,'') as 'bestellung', trim(bp.menge)+0 as menge, trim(bp.geliefert)+0 as geliefert, a.name as name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum
FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id
WHERE artikel='$id' AND b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefertDisplayNew('BESTELLUNG','Lieferdatum','noAction');
$table = new EasyTable($this->app);
$table->Query('SELECT a.name as lieferant, trim(e.ab_menge)+0 ab, '.$this->app->erp->FormatPreis("e.preis")." as preis, e.waehrung FROM einkaufspreise e LEFT JOIN adresse a ON a.id=e.adresse
WHERE e.artikel='$id' AND e.geloescht!=1 AND (e.gueltig_bis >= curdate() OR e.gueltig_bis='0000-00-00')");
$table->DisplayNew('EINKAUFSPREISE','Waehrung','noAction');
$verwendeberechneterek = $this->app->DB->Select("SELECT verwendeberechneterek FROM artikel WHERE id='$id' LIMIT 1");
$berechneterek = $this->app->DB->Select('SELECT '.$this->app->erp->FormatPreis("berechneterek")." FROM artikel WHERE id='$id' LIMIT 1");
$berechneterekwaehrung = $this->app->DB->Select("SELECT berechneterekwaehrung FROM artikel WHERE id='$id' LIMIT 1");
if($verwendeberechneterek > 0){
$this->app->Tpl->Set('KALKULIERTEREK', 'Kalkulierter EK-Preis: ' . $berechneterek . ' ' . $berechneterekwaehrung);
}
$table = new EasyTable($this->app);
$table->Query("SELECT if(a.name='' OR a.id IS NULL,if(v.gruppe > 0,(SELECT CONCAT(g.name,' ',g.kennziffer) FROM gruppen g WHERE g.id=v.gruppe ),'Alle'),a.name) as kunde, trim(v.ab_menge)+0 ab, ".$this->app->erp->FormatPreis("v.preis")." as preis, v.waehrung FROM verkaufspreise v LEFT JOIN adresse a ON a.id=v.adresse
WHERE v.artikel='$id' AND v.geloescht!=1 AND (v.gueltig_bis >= curdate() OR v.gueltig_bis='0000-00-00')");
$table->DisplayNew('VERKAUFSPREISE','Waehrung','noAction');
$table = new EasyTable($this->app);
$table->Query("
SELECT e.name, CONCAT(ew.wert,' ') as wert, ew.einheit FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.artikel='$id'
/* SELECT t.hauptkategorie, t.unterkategorie,format(sum(t.wert),2) as wert,t.einheit
FROM (
(SELECT e.hauptkategorie, e.unterkategorie, e.wert, e.einheit
FROM eigenschaften e LEFT JOIN artikel a ON a.id=e.artikel
WHERE a.id='$id')UNION ALL
(SELECT e.hauptkategorie, e.unterkategorie, (s.menge* e.wert) as wert, e.einheit
FROM eigenschaften e LEFT JOIN stueckliste s ON s.artikel=e.artikel
WHERE s.stuecklistevonartikel='$id')
)t GROUP BY t.hauptkategorie, t.unterkategorie,t.einheit*/
");// ORDER by e.bezeichnung
$table->DisplayNew('EIGENSCHAFTEN','Einheit','noAction');
$table = new EasyTable($this->app);
$table->Query('SELECT a.nummer, a.name_de as artikel, '.$this->app->erp->FormatMenge('s.menge')." as menge FROM stueckliste s
LEFT JOIN artikel a ON s.artikel=a.id
WHERE s.stuecklistevonartikel='$id' ORDER by a.nummer");
$table->DisplayNew('STUECKLISTE','Menge','noAction');
$this->app->erp->RunHook('artikel_minidetail_hook1', 1, $id);
$this->app->Tpl->Output('artikel_minidetail.tpl');
$this->app->ExitXentral();
}
public function ArtikelShopimport()
{
$id = $this->app->Secure->GetGET('id');
$shop = $this->app->Secure->GetGET('shop');
$artikel = array($id);
$artikelshopid = (int)$this->app->Secure->GetGET('artikelshopid');
if($artikelshopid > 0)
{
$shop = $this->app->DB->Select("SELECT shop FROM artikel_onlineshops WHERE id = '$artikelshopid' AND artikel = '$id' AND aktiv = 1 LIMIT 1");
}else{
if($shop=='1'){
$shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1");
}
elseif($shop=='2'){
$shop = $this->app->DB->Select("SELECT shop2 FROM artikel WHERE id='$id' LIMIT 1");
}
elseif($shop=='3'){
$shop = $this->app->DB->Select("SELECT shop3 FROM artikel WHERE id='$id' LIMIT 1");
}
}
$nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1");
$extnummer = $this->app->DB->Select("SELECT nummer FROM artikelnummer_fremdnummern WHERE artikel = '$id' AND shopid='$shop' AND aktiv = 1 AND nummer <> '' LIMIT 1");
if($extnummer){
$nummer = $extnummer;
}
$result = $this->app->remote->RemoteGetArticle($shop,$nummer);
$update = $this->updateShopArticle($id, $result);
$msg = $update['msg_encoded'];
$this->app->Location->execute("index.php?module=artikel&action=edit&id=$id&msg=$msg#tabs-4");
}
/**
* @param int $id
* @param array|string $result
*
* @return array
*/
public function updateShopArticle($id, $result)
{
if(is_array($result)) {
$result['uebersicht_de'] = htmlentities($result['uebersicht_de'],ENT_QUOTES, 'UTF-8');
$result['uebersicht_en'] = htmlentities($result['uebersicht_en'],ENT_QUOTES, 'UTF-8');
if($result['name_de']=='' && $result['name']!='') {
$result['name_de']=$result['name'];
}
}
$isOk = false;
$error = '';
$info = '';
if(is_array($result) && $result['name_de']!='' && !is_array($result['name_de']) && !empty($result['name_de'])) {
$isOk = true;
//$result['name_de'] = $result['name'];
if($result['aktiv'] !='1'){
$result['inaktiv']=1;
}
else{
$result['inaktiv']=0;
}
$fields = [
'name_de','kurztext_de','uebersicht_de','name_en','kurztext_en','uebersicht_en','beschreibung_de',
'beschreibung_en','metakeywords_de','metakeywords_en','metatitle_de','metatitle_en','metadescription_de',
'metadescription_en',
'inaktiv','pseudopreis','lieferzeitmanuell','pseudolager','autolagerlampe','restmenge','gewicht',
'downloadartikel','ean','herstellernummer','hersteller'
];
if($result['restmenge']!='1') {
$result['restmenge']=0;
}
// pseudolager
$result['autolagerlampe']=1;
//name
foreach($fields as $nameofcolumn) {
if(isset($result[$nameofcolumn])) {
if(
($result[$nameofcolumn]!='' && !is_array($result[$nameofcolumn]))
|| $nameofcolumn==='lieferzeitmanuell' || $nameofcolumn==='pseudopreis'
){
$this->app->DB->Update(
"UPDATE artikel
SET " . $nameofcolumn . "='" . $this->app->DB->real_escape_string($result[$nameofcolumn]) . "'
WHERE id='$id' LIMIT 1"
);
}
}
}
//preis_netto
if($result['preis_netto'] > 0) {
$this->app->erp->AddVerkaufspreis($id,1,0,$result['preis_netto']);
}
$info = 'Der Artikel wurde aus dem Shop geladen und nach Xentral importiert!';
$msg = $this->app->erp->base64_url_encode('
Der Artikel konnte nicht zum Shop übertragen werden! In den Shopeinstellungen ist festgelegt, dass die Artikelinformation- und Lagerbestandsübertragung nicht erlaubt ist!$pageContents $linkToImporterSettings
Es gab einen Fehler beim Aktualisieren des Artikels im Shop! Stellen Sie sicher, dass die Zugangsdaten und URL's korrekt sind! Möglicherweise kein Artikelpreis hinterlegt
Es gab einen Fehler beim Aktualisieren des Artikels im Shop! Stellen Sie sicher, dass die Zugangsdaten und URL's korrekt sind!$pageContents $linkToImporterSettings
");
$error = 1;
}
}
if($error!=1)
{
$sort = (int)$this->app->DB->Select("SELECT IFNULL(MAX(sort),0) FROM {$cmd}_position WHERE {$cmd}='$id' LIMIT 1");
$sort++;
$tmp = trim($adresse);
$rest = $this->app->erp->FirstTillSpace($tmp);
if($rest > 0){
$adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$rest' AND geloescht=0 AND firma='" . $this->app->User->GetFirma() . "' AND lieferantennummer!='' LIMIT 1");
}
else {
$adresse='';
}
if($adresse <= 0 && $cmd==='bestellung')
{
$adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id='$id' LIMIT 1");
}
$artikelart = $typ;
$lieferant = $adresse;
$bezeichnung = $name_de;
$waehrung = 'EUR';
$lieferdatum = '00.00.0000';
$vpe = '';
$preis = str_replace(',','.',$preis);
if($projekt!=''){
$projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$projekt' AND firma='" . $this->app->User->GetFirma() . "' LIMIT 1");
}
else {
$projekt_bevorzugt = (int)$this->app->DB->Select("SELECT u.projekt_bevorzugen FROM `user` AS u WHERE u.id = '".$this->app->User->GetID()."' LIMIT 1");
if($projekt_bevorzugt === 1){
$projekt = $this->app->DB->Select("SELECT u.projekt FROM `user` AS u WHERE u.id = '".$this->app->User->GetID()."' LIMIT 1");
}else{
$projekt = $this->app->User->DefaultProjekt();
}
}
$neue_nummer = $this->app->erp->GetNextArtikelnummer($artikelart,$this->app->User->GetFirma(),$projekt);
// anlegen als artikel
$umsatzsteuerArtikel = (empty($umsatzsteuer)) ? 'normal' : $umsatzsteuer;
$this->app->DB->Insert("INSERT INTO artikel (typ,nummer,projekt,name_de,anabregs_text,umsatzsteuer,adresse,firma,internerkommentar,lagerartikel,allelieferanten)
VALUES ('$artikelart','$neue_nummer','$projekt','$bezeichnung','$kurztext_de','$umsatzsteuerArtikel','$lieferant','".$this->app->User->GetFirma()."','$internerkommentar','$lagerartikel','$allelieferanten')");
$artikel_id = $this->app->DB->GetInsertID();
// einkaufspreis anlegen
$lieferdatum = $this->app->String->Convert($lieferdatum,"%1.%2.%3","%3-%2-%1");
if($cmd==="lieferschein")
{
$this->app->DB->Insert("INSERT INTO lieferschein_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, status,projekt,vpe)
VALUES ('','$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe')");
}
else if($cmd==="anfrage")
{
$this->app->DB->Insert("INSERT INTO anfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, projekt,vpe)
VALUES ('','$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$sort','$lieferdatum','$projekt','$vpe')");
$this->app->erp->AddEinkaufspreis($artikel_id,$menge,$lieferant,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung);
}
else if($cmd=="preisanfrage")
{
$this->app->DB->Insert("INSERT INTO preisanfrage_position (id,{$cmd},artikel,bezeichnung,beschreibung,nummer,menge,sort,lieferdatum, projekt,vpe)
VALUES ('','$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$sort','$lieferdatum','$projekt','$vpe')");
$this->app->erp->AddEinkaufspreis($artikel_id,$menge,$lieferant,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung);
}
else if($cmd==="bestellung")
{
if($bezeichnunglieferant=="") $bezeichnunglieferant=$bezeichnung;
$this->app->DB->Insert("INSERT INTO bestellung_position ({$cmd},artikel,beschreibung,menge,sort,lieferdatum, status,projekt,vpe,bestellnummer,bezeichnunglieferant,preis,waehrung,umsatzsteuer,steuersatz)
VALUES ('$id','$artikel_id','$kurztext_de','$menge','$sort','$lieferdatum','angelegt','$projekt','$vpe','$bestellnummer','$bezeichnunglieferant','$preis','$waehrung','$umsatzsteuer',$steuersatzSqlValue)");
// $this->app->DB->Insert("INSERT INTO einkaufspreise (id,artikel,adresse,objekt,projekt,preis,ab_menge,angelegt_am,bearbeiter,bestellnummer,bezeichnunglieferant)
// VALUES ('','$artikel_id','$lieferant','Standard','$projekt','$preis','$menge',NOW(),'".$this->app->User->GetName()."','$bestellnummer','$bezeichnunglieferant')");
$this->app->erp->AddEinkaufspreis($artikel_id,$menge,$lieferant,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung);
} else { // angebot auftrag rechnung gutschrift
$this->app->DB->Insert("INSERT INTO verkaufspreise (artikel,adresse,objekt,projekt,preis,ab_menge,angelegt_am,bearbeiter)
VALUES ('$artikel_id','0','Standard','$projekt','$preis','$menge',NOW(),'".$this->app->User->GetName()."')");
$this->app->DB->Insert("INSERT INTO {$cmd}_position ({$cmd},artikel,bezeichnung,beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, steuersatz, status,projekt,vpe)
VALUES ('$id','$artikel_id','$bezeichnung','$kurztext_de','$neue_nummer','$menge','$preis','$waehrung','$sort','$lieferdatum','$umsatzsteuer',$steuersatzSqlValue,'angelegt','$projekt','$vpe')");
}
$this->app->Location->execute("index.php?module={$cmd}&action=positionen&id=$id");
}
}
$umsatzsteuerauswahl = '';
$umsatzsteuerauswahl .= '';
$umsatzsteuerauswahl .= '';
$this->app->Tpl->Set('UMSATZSTEUERAUSWAHL',$umsatzsteuerauswahl);
$this->app->Tpl->Set('INDIVIDUELLERSTEUERSATZ',$steuersatz);
$this->app->Tpl->Set('PROJEKT',$projekt);
$this->app->Tpl->Set('ADRESSE',$adresse);
$this->app->Tpl->Set('MENGE',$menge);
$this->app->Tpl->Set('PREIS',$preis);
$this->app->Tpl->Set('BESTELLNUMMER',$bestellnummer);
$this->app->Tpl->Set('BEZEICHNUNGLIEFERANT',$bezeichnunglieferant);
$this->app->Tpl->Set('NAME_DE',$name_de);
$this->app->Tpl->Set('KURZTEXT_DE',$kurztext_de);
$this->app->Tpl->Set('INTERNERKOMMENTAR',$internerkommentar);
if (!empty($steuersatz)) {
$this->app->Tpl->Set('STEUERSATZEINBLENDEN','checked');
}
if($lagerartikel=='1'){
$this->app->Tpl->Set('LAGERARTIKEL','checked');
}
$this->app->YUI->AutoComplete('projekt','projektname',1);
$this->app->YUI->AutoComplete('adresse','lieferant');
$this->app->YUI->AutoComplete('steuersatz-individuell','steuersatz',1);
if($cmd==='auftrag' || $cmd==='rechnung' || $cmd==='lieferschein' || $cmd==='angebot' || $cmd==='gutschrift' || $cmd==='anfrage')
{
$adresse = $this->app->DB->Select("SELECT adresse FROM {$cmd} WHERE id='$id' LIMIT 1");
$kunde = $this->app->DB->Select("SELECT CONCAT(name,' ',kundennummer,'') FROM adresse WHERE id='$adresse' LIMIT 1");
} else if ($cmd==='bestellung' || $cmd==='preisanfrage') {
$adresse = $this->app->DB->Select("SELECT adresse FROM {$cmd} WHERE id='$id' LIMIT 1");
$kunde = $this->app->DB->Select("SELECT CONCAT(name,' ',lieferantennummer,'') FROM adresse WHERE id='$adresse' LIMIT 1");
}
if($cmd==='lieferschein'){
$this->app->YUI->ParserVarIf('LIEFERSCHEIN', 1);
}
else{
$this->app->YUI->ParserVarIf('LIEFERSCHEIN', 0);
}
$this->app->Tpl->Set('KUNDE',$kunde);
if($cmd==='bestellung' || $cmd==='preisanfrage'){
$this->app->YUI->TableSearch('ARTIKEL', 'lieferantartikelpreise', 'show','','',basename(__FILE__), __CLASS__);
}
else{
$this->app->YUI->TableSearch('ARTIKEL', 'kundeartikelpreise', 'show','','',basename(__FILE__), __CLASS__);
}
$this->app->Tpl->Set('ID', $id);
$this->app->Tpl->Set('FMODULE', $cmd);
$this->app->Tpl->Set('ARTIKELBAUM',$this->app->Tpl->Parse('return', 'artikel_artikelbaum.tpl',true));
$this->app->Tpl->Set('PAGE',"
Sie können hier die Stammdaten durchsuchen oder einen neuen Artikel angelegen Abbrechen
");
$artikelart = $this->app->erp->GetArtikelgruppe($projekt);
$typ = $this->app->Secure->GetPOST('typ');
$this->app->Tpl->Set('ARTIKELGRUPPE',$this->app->erp->GetSelectAsso($artikelart, $typ));
if($this->app->erp->Firmendaten('briefhtml')=='1')
{
$this->app->YUI->CkEditor("kurztext_de","belege",array('height'=>'100px'));
$this->app->YUI->CkEditor("internerkommentar","basic",array('height'=>'100px'));
}
$this->app->Tpl->Add('PROCESSID', $id);
$this->app->Tpl->Add('PROCESSTYPE', $cmd);
if ($cmd==='bestellung' || $cmd==='preisanfrage'){
$this->app->Tpl->Parse('PAGE', 'aarlg_artikelbestellungneu.tpl');
} else{
$this->app->Tpl->Parse('PAGE', 'aarlg_artikelneu.tpl');
}
$this->app->BuildNavigation=false;
}
public function ArtikelAjaxWerte()
{
$id = $this->app->Secure->GetGET('id', 'base64');
if(!is_numeric($id)) {
$id = base64_decode($id);
}
$name = $this->app->Secure->GetGET('name');
$sid = $this->app->Secure->GetGET('sid');
$smodule = $this->app->Secure->GetGET('smodule');
$menge = $this->app->Secure->GetGET('menge');
$mengeold = $menge;
$menge = str_replace(',','.',$menge);
$cmd = $this->app->Secure->GetGET('cmd');
$adresse = $this->app->Secure->GetGET('adresse');
$vpe = $this->app->Secure->GetGET('vpe');
// wenn plus in Artikelnummer IN GET
//$id = str_replace('++',' ',$id);
// if($id=="") exit;
if($smodule==='bestellung')
{
if($name!=''){
$id = $this->app->DB->Select("SELECT id FROM artikel WHERE name_de='$name' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1");
if($id<=0){
$id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$name' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1");
}
} else {
$commandline = $id;
$tmp_id = explode(',',$commandline);
$tmp_id = $tmp_id[0];
// $id = substr($id,0,6);
if($tmp_id!='')
{
$id = $tmp_id;
$tmp_id = $commandline;
// hole ab menge aus
$n = strpos($tmp_id, $id.' ');
if ( false!==$n ) {
$tmp_id = substr($tmp_id, 0, $n);
}
$start_pos = strpos ($commandline, 'ab Menge ');
$commandline = substr($commandline,$start_pos + strlen('ab Menge '));
$end_pos = strpos ($commandline, ' ');
if(trim(substr($commandline,0,$end_pos)) > 0)
$menge = trim(substr($commandline,0,$end_pos));
} else {
$this->app->ExitXentral();
}
$id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$id' AND geloescht!=1 AND intern_gesperrt!=1 LIMIT 1");
}
if(!is_numeric($id))
{
echo '#*##*##*##*##*##*##*#';
$this->app->ExitXentral();
}
$waehrung = $this->app->DB->Select("SELECT waehrung FROM $smodule WHERE id='$sid' LIMIT 1");
if(strtoupper($waehrung)==='EURO') {
$waehrung='EUR';
} // nur fuer den uebergang damit nicht alte Kunden dauern mit Tickets kommen 2.2.2019 BS
$adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id='$sid' LIMIT 1");
// $id = substr($id,0,6);
$name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1");
$sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1");
$name_en = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id='$id' LIMIT 1");
if($sprache==='englisch' && $name_en!=''){
$name = $name_en;
}
$bestellnummer = $this->app->DB->Select("SELECT bestellnummer FROM einkaufspreise
WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1");
$bezeichnunglieferant = $this->app->DB->Select("SELECT bezeichnunglieferant FROM einkaufspreise
WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1");
if(empty($vpe)){
$vpe = $this->app->DB->Select("SELECT vpe FROM einkaufspreise
WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1");
}
if($bestellnummer=="") {
$bestellnummer = $this->app->DB->Select("SELECT bestellnummer FROM einkaufspreise
WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1");
}
if($bezeichnunglieferant=="") {
$bezeichnunglieferant = $this->app->DB->Select("SELECT bezeichnunglieferant FROM einkaufspreise
WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1");
}
$nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1");
$projekt = $this->app->DB->Select("SELECT p.abkuerzung FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id='$id' LIMIT 1");
//$projekt_id = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$id' LIMIT 1");
//$ab_menge = $this->app->DB->Select("SELECT ab_menge FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1");
//$vpe = $this->app->DB->Select("SELECT vpe FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 LIMIT 1");
$vpe = str_replace(',','.',$vpe);
if($vpe == 1){
$andVpe = '';
}
else{
$andVpe = 'AND e.vpe = \''.$vpe.'\'';
}
if($waehrung=="" || $waehrung=="EUR")
{
$ek = $this->app->DB->Select(
"SELECT e.preis
FROM `einkaufspreise` AS `e`
WHERE e.artikel='$id'
AND e.adresse='$adresse'
AND e.ab_menge<='$menge'
AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00')
AND e.geloescht=0
$andVpe
ORDER BY e.ab_menge DESC
LIMIT 1"
);
$waehrung = $this->app->DB->Select(
"SELECT e.waehrung
FROM `einkaufspreise` AS `e`
WHERE e.artikel='$id'
AND e.adresse='$adresse'
AND e.ab_menge<='$menge'
AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00')
AND e.geloescht=0
$andVpe
ORDER BY e.ab_menge DESC
LIMIT 1"
);
} else{
$ek = $this->app->DB->Select(
"SELECT e.preis
FROM `einkaufspreise` AS `e`
WHERE e.artikel='$id'
AND e.adresse='$adresse'
AND e.ab_menge<='$menge'
AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00')
AND e.waehrung='$waehrung'
AND e.geloescht=0
$andVpe
ORDER BY e.ab_menge DESC
LIMIT 1"
);
}
if($bezeichnunglieferant=='') {
$bezeichnunglieferant=$name;
}
$name = html_entity_decode($name, ENT_QUOTES, 'UTF-8');
if($vpe > 1)
{
if($menge < $vpe) {
$menge = $vpe;
}
else {
$menge_vpe = $menge / $vpe;
$menge = ceil($menge_vpe)*$vpe;
}
//$ek = $menge*$ek;
}
$menge = (float)$menge;
// bei Bestellung
echo "$name#*#$nummer#*#$projekt#*#$ek#*#$menge#*#$bestellnummer#*#$bezeichnunglieferant#*#$vpe#*#$waehrung";
} else {
//Pinguio fehler
if($id=='')
{
$name = $this->app->Secure->GetGET('name');
if(trim($name)!='')
{
$id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE nummer LIKE '$name' AND intern_gesperrt!=1 LIMIT 1");
if($id =='')
{
$id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE name_de LIKE '$name' AND intern_gesperrt!=1 LIMIT 1");
if($id=='')
{
$name = str_replace(' ',' ',$name);
$id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE name_de LIKE '$name' AND intern_gesperrt!=1 LIMIT 1");
//naechster fall
}
}
} else {
if(trim($name)!='')
{
// wenn name leer ist hole max position id
$id = $this->app->DB->Select("SELECT MAX(id) FROM ".$smodule."_position WHERE $smodule='$sid'");
$id = $this->app->DB->Select("SELECT artikel FROM ".$smodule."_position WHERE id='$id' LIMIT 1");
$id = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' AND intern_gesperrt!=1 LIMIT 1");
}
}
if($id ==''){
$this->app->ExitXentral();
}
}
// $id = substr($id,0,6);
//echo $id;
// if(!is_numeric($id))
// exit;
$tmp_id = explode(',',$id);
$id = $tmp_id[0];
$id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$id' AND intern_gesperrt!=1 LIMIT 1");
$warnung = 1-(int)$this->app->DB->Select("SELECT if(rabatt=1,1,vkmeldungunterdruecken) FROM artikel WHERE id = '$id' LIMIT 1");
if (!is_null($id)) {
$adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id='$sid' LIMIT 1");
}
if (!is_null($module)) {
if ($this->app->DB->Select("SHOW COLUMNS FROM `$module` LIKE 'waehrung'")) {
$waehrung = $this->app->DB->Select("SELECT waehrung FROM $smodule WHERE id='$sid' LIMIT 1");
}
}
if (!is_null($id)) {
$posanz = (int)$this->app->DB->Select("SELECT count(id) FROM $smodule"."_position WHERE $smodule = '$sid'");
}
//if($posanz == 0){
// $waehrung = '';
//}
$sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1");
$name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1");
$name_en = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id='$id' LIMIT 1");
if($sprache==='englisch' && $name_en!=''){
$name = $name_en;
}
$nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1");
$projekt = $this->app->DB->Select("SELECT p.abkuerzung FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id='$id' LIMIT 1");
//$projekt_id = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$id' LIMIT 1");
// $ab_menge = $this->app->DB->Select("SELECT ab_menge FROM verkaufspreise WHERE artikel='$id' AND ab_menge=1 AND geloescht=0 LIMIT 1");
$ab_menge = $menge;
if($smodule==="inventur")
$preis = $this->app->erp->GetEinkaufspreis($id,$menge,$adresse);
else {
if(method_exists($this->app->erp, 'GetVerkaufspreisMitWaehrung'))
{
$preis = $this->app->erp->GetVerkaufspreisMitWaehrung($id,$menge,$adresse, $waehrung);
}else{
$preis = $this->app->erp->GetVerkaufspreis($id,$menge,$adresse, $waehrung);
}
}
if($smodule === 'auftrag' || $smodule === 'rechnung' || $smodule === 'gutschrift' || $smodule === 'angebot' || $smodule === 'proformarechnung')
{
$_anrede = $this->app->DB->Select("SELECT typ FROM $smodule WHERE id = '$sid' LIMIT 1");
$_projekt = $this->app->DB->Select("SELECT projekt FROM $smodule WHERE id = '$sid' LIMIT 1");
$_adresse = $this->app->DB->Select("SELECT adresse FROM $smodule WHERE id = '$sid' LIMIT 1");
$funktion = ucfirst($smodule).'MitUmsatzeuer';
if($this->app->erp->AnzeigePositionenBrutto($_anrede, $smodule, $_projekt, $_adresse) && $this->app->erp->$funktion($sid))
{
$umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$id' LIMIT 1");
if($umsatzsteuer === 'ermaessigt')
{
$preis = round($preis* (1+ (float)$this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $smodule WHERE id = '$sid' LIMIT 1")/100),7);
}elseif($umsatzsteuer !== 'befreit')
{
$preis = round($preis * (1+ (float)$this->app->DB->Select("SELECT steuersatz_normal FROM $smodule WHERE id = '$sid' LIMIT 1")/100),7);
}
}
}
$name = html_entity_decode($name, ENT_QUOTES, 'UTF-8');
$ab_menge = round((float)$ab_menge,8);
switch($smodule)
{
case 'auftrag':
case 'gutschrift':
case 'angebot':
case 'rechnung':
case 'proformarechnung':
if(!isset($waehrung) || $waehrung == ''){
$waehrung = $this->app->erp->GetVerkaufspreisWaehrung($id,$menge,$adresse);
}
if(strpos($mengeold, ',') && strpos($ab_menge,'.') && strpos($ab_menge ,',') === false){
$ab_menge = str_replace('.',',',$ab_menge);
}
$this->app->erp->RunHook('artikel_ajaxwerte',8, $id, $smodule, $name,$nummer, $preis, $ab_menge, $waehrung, $warnung);
echo "$name#*#$nummer#*#$projekt#*#$preis#*#$ab_menge#*#$waehrung#*#$warnung#";
break;
default:
echo "$name#*#$nummer#*#$projekt#*#$preis#*#$ab_menge";
break;
}
}
$this->app->ExitXentral();
}
public function ArtikelWareneingang()
{
$this->app->Tpl->Add('UEBERSCHRIFT',' (Wareneingang)');
$this->ArtikelMenu();
$this->app->Tpl->Set('PAGE','wareneingang');
}
public function ArtikelReservierung()
{
$this->app->Tpl->Add('UEBERSCHRIFT',' (Reservierungen)');
$this->ArtikelMenu();
$this->app->Tpl->Set('PAGE','reservierung');
}
public function ArtikelOffeneAuftraege()
{
$id = $this->app->Secure->GetGET('id');
$this->app->Tpl->Add('TABTEXT','Aufträge');
$this->ArtikelMenu();
// easy table mit arbeitspaketen YUI als template
$this->app->YUI->TableSearch('TAB1','artikel_auftraege_offen', 'show','','',basename(__FILE__), __CLASS__);
$summe = $this->app->DB->Select("SELECT TRIM(SUM(ap.menge)-SUM(ap.geliefert_menge))+0 FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'");
$euro= $this->app->DB->Select("SELECT FORMAT(SUM(ap.preis*(100-ap.rabatt)/100*ap.menge),2,'de_DE') FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben'");
$this->app->Tpl->Add('TAB1',"
Summe offen: $summe Stück (Summe EUR: $euro EUR)
");
$this->app->YUI->TableSearch('TAB2','artikel_auftraege_versendet', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','artikel_auftraege.tpl');
}
public function ArtikelDateien()
{
$id = $this->app->Secure->GetGET('id');
$this->ArtikelMenu();
$this->app->Tpl->Add('UEBERSCHRIFT',' (Dateien)');
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'down' || $cmd === 'up') {
$this->app->DB->Update(
sprintf(
'UPDATE artikel SET bildvorschau = \'\' WHERE id = %d LIMIT 1',
(int)$id
)
);
}
$this->app->YUI->DateiUpload('PAGE','Artikel',$id);
}
public function ArtikelCopyWaehrungen($id, $typ = 'verkauf')
{
$res = array('status' => 0);
$dat = $this->app->Secure->GetPOST('dat');
$menge_ab = (int)$this->app->Secure->GetPOST('menge_ab');
$art = $this->app->Secure->GetPOST('art');
$bezeichnunglieferant = $this->app->Secure->GetPOST('bezeichnunglieferant');
$bestellnummer = $this->app->Secure->GetPOST('bestellnummer');
$gruppe = $this->app->erp->ReplaceGruppe(true, $this->app->Secure->GetPOST('gruppe'),true);
$kundenartikelnummer = $this->app->Secure->GetPOST('kundenartikelnummer');
$gueltig_bis = $this->app->Secure->GetPOST('gueltig_bis');
if($gueltig_bis){
$gueltig_bis = $this->app->String->Convert($gueltig_bis,'%1.%2.%3','%3-%2-%1');
}
$vpe = (int)$this->app->Secure->GetPOST('vpe');
if($vpe < 1){
$vpe = 1;
}
if($menge_ab < 1){
$menge_ab = 1;
}
if(!$dat)
{
echo json_encode($res);
$this->app->ExitXentral();
}
$data = explode(';',$dat);
foreach($data as $k => $v)
{
$v = trim($v);
if(strpos($v,':'))
{
$va = explode(':',$v);
if((!empty($va)?count($va):0) > 1){
$waehrung = trim($va[0]);
$preis = (float)str_replace(',','.',trim($va[1]));
if($waehrung)
{
$waehrungen[$waehrung] = $preis;
}
}
}
}
if(!isset($waehrungen))
{
echo json_encode($res);
$this->app->ExitXentral();
}
switch($typ)
{
case 'einkauf':
$adresse = $this->app->erp->ReplaceLieferant(true,$this->app->Secure->GetPOST('adresse'),true);
$artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' LIMIT 1");
if(!$artikel)
{
echo json_encode($res);
$this->app->ExitXentral();
}
foreach($waehrungen as $waehrung => $preis)
{
$this->app->erp->AddEinkaufspreis($artikel,$menge_ab,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung,$vpe);
}
$res['status'] = 1;
echo json_encode($res);
$this->app->ExitXentral();
break;
case 'einkaufeditpopup':
$artikel = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id = '$id' LIMIT 1");
if(!$artikel)
{
echo json_encode($res);
$this->app->ExitXentral();
}
foreach($waehrungen as $waehrung => $preis)
{
$newid = $this->app->DB->MysqlCopyRow("einkaufspreise","id",$id);
$this->app->DB->Update("UPDATE einkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', nichtberechnet = 0,preis = '$preis', waehrung = '".$waehrung."' WHERE id='$newid' LIMIT 1");
}
$res['status'] = 1;
echo json_encode($res);
$this->app->ExitXentral();
break;
case 'verkauf':
$adresse = $this->app->erp->ReplaceKunde(true,$this->app->Secure->GetPOST('adresse'),true);
$artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' LIMIT 1");
if(!$artikel)
{
echo json_encode($res);
$this->app->ExitXentral();
}
foreach($waehrungen as $waehrung => $preis)
{
$this->app->erp->AddVerkaufspreis($artikel,$menge_ab,$adresse,$preis,$waehrung,$kundenartikelnummer, $gruppe);
}
$res['status'] = 1;
echo json_encode($res);
$this->app->ExitXentral();
break;
case 'verkaufeditpopup':
$artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id = '$id' LIMIT 1");
if(!$artikel)
{
echo json_encode($res);
$this->app->ExitXentral();
}
foreach($waehrungen as $waehrung => $preis)
{
$newid = $this->app->DB->MysqlCopyRow('verkaufspreise','id',$id);
$this->app->DB->Update("UPDATE verkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', nichtberechnet = 0,preis = '$preis', waehrung = '".$waehrung."' WHERE id='$newid' LIMIT 1");
}
$res['status'] = 1;
echo json_encode($res);
$this->app->ExitXentral();
break;
}
echo json_encode($res);
$this->app->ExitXentral();
}
public function ArtikelVerkauf()
{
// rechne gueltig_bis gestern aus
// erstelle array objekt, adressse, ab_menge,preis
// wenn es doppelte gibt rote meldung!!!
//$this->app->Tpl->Set('MESSAGE',"
Achtung es gibt für eine Kundengruppe bei einer gleichen Menge den Preis öfters! Deaktvieren oder löschen Sie doppelte Preise!
");
if($this->app->Secure->GetPOST('newpreis'))
{
$id = $this->app->Secure->GetGET('id');
$this->ArtikelCopyWaehrungen($id, 'verkauf');
}
$waehrungenstringvk = '';
$standardwaehrung = $this->app->erp->GetStandardWaehrung();
$waehrungenvk = $this->app->DB->SelectArr("SELECT DISTINCT waehrung FROM (SELECT DISTINCT waehrung_von AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00') UNION SELECT DISTINCT waehrung_nach AS waehrung FROM waehrung_umrechnung WHERE (ISNULL(gueltig_bis) OR gueltig_bis >= NOW() OR gueltig_bis = '0000-00-00')) AS waehrungen");
if($waehrungenvk != ''){
$standardwvorhanden = false;
if($standardwaehrung == '') {
$standardwaehrung = $waehrungenvk[0]['waehrung'];
}
foreach($waehrungenvk as $key=>$value) {
if($value['waehrung'] == $standardwaehrung){
$standardwvorhanden = true;
}
$waehrungenstringvk .= "';
}
$this->app->Tpl->Set('STANDARDWAEHRUNGV', $standardwaehrung);
if($standardwvorhanden == false){
$waehrungenstringvk .= "';
}
}else{
if($standardwaehrung != ''){
if($standardwaehrung !== 'EUR' && $standardwaehrung !== 'USD' && $standardwaehrung !== 'CAD' && $standardwaehrung !== 'CHF' && $standardwaehrung !== 'GBP'){
$waehrungenstringvk .= "
";
}
$this->app->Tpl->Set('WAEHRUNGVERKAUF', $waehrungenstringvk);
$this->app->Tpl->Add('UEBERSCHRIFT',' (Verkauf)');
$this->app->Tpl->Set('SUBSUBHEADING','Verkaufspreise');
$this->ArtikelMenu();
$this->Preisrechner();
$id = $this->app->Secure->GetGET('id');
// neues arbeitspaket
$widget = new WidgetVerkaufspreise($this->app,'TAB2');
$widget->form->SpecialActionAfterExecute('none',
"index.php?module=artikel&action=verkauf&id=$id");
//if($this->app->Secure->GetPOST("submit")!="")
//$this->app->erp->EnableTab("tabs-2");
//$widget->Create();
$this->app->YUI->TableSearch('TAB1','verkaufspreise', 'show','','',basename(__FILE__), __CLASS__);
$stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id='$id' LIMIT 1");
$porto = $this->app->DB->Select("SELECT porto FROM artikel WHERE id='$id' LIMIT 1");
if($stueckliste!='1') {
$max_preis = $this->app->DB->Select("SELECT MAX(preis) FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00'
OR gueltig_bis >= curdate()) AND geloescht!=1 LIMIT 1");
$min_preis = $this->app->DB->Select("SELECT MIN(preis) FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00'
OR gueltig_bis >= curdate()) AND geloescht!=1 LIMIT 1");
$waehrung = $this->app->DB->Select("SELECT waehrung FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00'
OR gueltig_bis >= curdate()) AND geloescht!=1 ORDER by preis LIMIT 1");
$max_preis2 = $max_preis;
$min_preis2 = $min_preis;
$min_preis = $this->app->erp->EUR($min_preis*(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0);
$max_preis = $this->app->erp->EUR($max_preis*(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0);
$min_preis2 = $this->app->erp->EUR($min_preis2/(100-$this->app->erp->GetStandardMarge())*100);
$max_preis2 = $this->app->erp->EUR($max_preis2/(100-$this->app->erp->GetStandardMarge())*100);
}
if($porto=='1') {
$this->app->Tpl->Add('TAB1',"
Kundenspezifische Preise werden immer priorisiert!
';
$this->app->Tpl->Set('TAB5KALKULATION',$nicht_vorhanden);
$this->app->Tpl->Set('TAB5',$nicht_vorhanden);
$this->app->Tpl->Set('TABELLE',$nicht_vorhanden);
}
$check = $this->app->DB->Select("SELECT id FROM stueckliste WHERE stuecklistevonartikel='$id' AND art='bt' LIMIT 1");
// neues arbeitspaket
$widget = new WidgetEinkaufspreise($this->app,'TAB2');
$widget->form->SpecialActionAfterExecute('none',
"index.php?module=artikel&action=einkauf&id=$id");
if($this->app->Secure->GetPOST('submit')!=''){
$this->app->erp->EnableTab('tabs-2');
}
$widget->Create();
if($this->app->Secure->GetPOST('objekt')!=''){
$this->app->Tpl->Set('AKTIV_TAB2', 'selected');
}
else{
$this->app->Tpl->Set('AKTIV_TAB1', 'selected');
}
if ($stueckliste=='1') {
$preis_min_ek = $this->getCalcPriceByMinBasePrice($id);
$preis_max_ek =$this->getCalcPriceByMaxBasePrice($id);
if (empty($kursusd)) {
$kursusd = 0;
}
if (empty($kurschf)) {
$kurschf = 0;
}
$this->app->Tpl->Set('TAB5KALKULATION','
Dies ist nur ein grober Richtpreis aus dem kleinsten und größten Einkaufspreis.
');
$kalkulationstabelle = "
";
$kalkulationstabelle .= "
";
$kalkulationstabelle .= "
Artikel
";
$kalkulationstabelle .= "
Nummer
";
$kalkulationstabelle .= "
Menge
";
$kalkulationstabelle .= "
Lieferant
";
$kalkulationstabelle .= "
Bestellnummer
";
$kalkulationstabelle .= "
Basierend auf EK (Min)
";
$kalkulationstabelle .= "
Basierend auf EK (Max)
";
$kalkulationstabelle .= "
Kalkulierter EK
";
$kalkulationstabelle .= "
";
$sql_query = "SELECT a.id as artikelid, a.name_de as artikelname, a.nummer, trim(s.menge)+0 as menge,
(SELECT l2.name FROM einkaufspreise e LEFT JOIN adresse l2 ON l2.id=e.adresse WHERE e.artikel=a.id AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by e.preis ASC LIMIT 1) as lieferant,
(SELECT e.bestellnummer FROM einkaufspreise e WHERE e.artikel=a.id AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by e.preis ASC LIMIT 1) as bestellnummer,
".$this->app->erp->FormatPreis("if(a.stueckliste,
(SELECT SUM(
(SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e
LEFT JOIN (
SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach
) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung)
WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='')
AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge)
FROM stueckliste s2
WHERE s2.stuecklistevonartikel=s.artikel),
(SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e
LEFT JOIN (
SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach
) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung)
WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge",4)."
as 'ekmin',
".$this->app->erp->FormatPreis("if(a.stueckliste,
(SELECT SUM(
(SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e
LEFT JOIN (
SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach
) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung)
WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='')
AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge)
FROM stueckliste s2
WHERE s2.stuecklistevonartikel=s.artikel),(SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e
LEFT JOIN (
SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach
) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung)
WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge",4)."
as 'ekmax'
FROM stueckliste s
LEFT JOIN artikel a ON a.id=s.artikel
LEFT JOIN adresse l ON l.id=a.adresse
WHERE s.stuecklistevonartikel='$id' ORDER by s.sort";
$artikelkalkulation = $this->app->DB->SelectArr($sql_query);
$calculatedPurchasePriceService = $this->app->Container->get('PurchasePriceService');
$kalkulierterekgesamt = 0;
foreach($artikelkalkulation as $artikelindex => $kalkulierterArtikel){
$kalkulationstabelle .= "
Stücklisten Grundpreis bei Menge 1: $preis EUR - $preis_max EUR (Anzahl Positionen $pos / Teile $teile)
");
$this->app->Tpl->Parse('TAB1','rahmen70.tpl');
$sql = "SELECT s.artikel, SUM(s.menge) FROM stueckliste s LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id' GROUP by a.id";
$array_artikel = $this->app->DB->SelectArr($sql);
$array_mindestmengen = array();
$runden = true;
$carray_artikel = $array_artikel?count($array_artikel):0;
for($i_stk=0;$i_stk < $carray_artikel;$i_stk++) {
$artikel = $array_artikel[$i_stk]['artikel'];
$menge = $array_artikel[$i_stk]['menge'];
// gehe einkaufspreis fuer einkaufspreis durch
$einkaufspreise = $this->app->DB->SelectArr("SELECT ab_menge FROM einkaufspreise WHERE artikel='$artikel' AND
(gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) AND geloescht!=1 AND ab_menge >='$menge' ORDER by ab_menge");
// liste mit artikel wo e keinen 1er Preis gibt
$check_ek_eins = $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE artikel='$artikel' AND
(gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) AND geloescht!=1 AND ab_menge =1 LIMIT 1");
if($check_ek_eins <=0) {
$artikel_ohne_ek_eins[]=$artikel;
}
$ceinkaufspreise = $einkaufspreise?count($einkaufspreise):0;
for($i_ek = 0;$i_ek < $ceinkaufspreise; $i_ek++) {
if(!in_array($einkaufspreise[$i_ek]['ab_menge'],$array_mindestmengen)) {
$array_mindestmengen[] = $einkaufspreise[$i_ek]['ab_menge'];
if(round($einkaufspreise[$i_ek]['ab_menge']) != $einkaufspreise[$i_ek]['ab_menge']) {
$runden = false;
}
}
}
}
if($runden) {
foreach($array_mindestmengen as $k => $v){
$array_mindestmengen[$k] = round($v);
}
}
sort($array_mindestmengen);
$tpl = '';
$tpl2 = '';
$tpl3 = '';
$tpl4 = '';
$tpl5 = '';
$tpl22 = '';
$teile_tpl ='';
$carray_mindestmengen = isset($array_mindestmengen)?count($array_mindestmengen):0;
for($j_am=0;$j_am<$carray_mindestmengen;$j_am++) {
$sql = "SELECT SUM(
(SELECT e.preis FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='')
AND e.ab_menge <= ".$array_mindestmengen[$j_am]." AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by preis ASC LIMIT 1)*s.menge)
FROM stueckliste s
LEFT JOIN artikel a ON a.id=s.artikel
WHERE s.stuecklistevonartikel='$id'";
$preis = $this->app->DB->Select($sql);
$sql = "SELECT s.artikel
FROM stueckliste s
LEFT JOIN artikel a ON a.id=s.artikel
WHERE s.stuecklistevonartikel='$id' AND (SELECT e.preis FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='')
AND e.ab_menge <= ".$array_mindestmengen[$j_am]." AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ORDER by preis ASC LIMIT 1) IS NULL GROUP by s.artikel ORDER by s.artikel";
$fehlende_preise = $this->app->DB->SelectArr($sql);
$tpl .= "
';
}
$fehlende_artikel_links='';
$summe_fehlende_preise_max = 0;
$summe_fehlende_preise_min = 0;
$cfehlende_preise = $fehlende_preise?count($fehlende_preise):0;
for($jj=0;$jj<$cfehlende_preise;$jj++) {
$nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$fehlende_preise[$jj]['artikel']."' LIMIT 1");
$menge = $this->app->DB->Select("SELECT SUM(s.menge) FROM stueckliste s LEFT JOIN artikel a ON a.id=s.artikel
WHERE s.stuecklistevonartikel='$id' AND s.artikel='".$fehlende_preise[$jj]['artikel']."'");
//TODO VK
$preis_min = $this->app->DB->Select("SELECT MIN(preis) FROM einkaufspreise WHERE artikel='".$fehlende_preise[$jj]['artikel']."' AND geloescht!=1
AND (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) ")*$menge;
//TODO VK
$preis_max = $this->app->DB->Select("SELECT MAX(preis) FROM einkaufspreise WHERE artikel='".$fehlende_preise[$jj]['artikel']."' AND geloescht!=1
AND (gueltig_bis='0000-00-00' OR gueltig_bis >= curdate()) ")*$menge;
$fehlende_artikel_links .="$nummer ";
//target=\"_blink\">$nummer/$preis_min/$preis_max ";
$summe_fehlende_preise_max = $summe_fehlende_preise_max + $preis_max;
$summe_fehlende_preise_min = $summe_fehlende_preise_min + $preis_min;
}
$teile_tpl .="
Die Preismatrix (Kosten Stueckzahl abängig von Einkaufspreisen ist nur mit dem Modul Produktion verfügbar");
}
//$this->app->Tpl->Parse('PAGE',"einkaufspreiseuebersicht_stueckliste.tpl");
}
// easy table mit arbeitspaketen YUI als template
$this->app->YUI->TableSearch('TAB7','einkaufspreise', 'show','','',basename(__FILE__), __CLASS__);
$adresse = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id='$id' LIMIT 1");
$hauptlieferant = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' LIMIT 1");
/*$min_preis = $this->app->DB->Select("SELECT FORMAT(MIN(preis),2) FROM verkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00'
OR gueltig_bis >= curdate()) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= curdate()) AND geloescht!=1 LIMIT 1");
$max_preis = $this->app->DB->Select("SELECT FORMAT(MAX(preis),2) FROM verkaufspreise WHERE artikel='$id' AND (gueltig_bis='0000-00-00'
OR gueltig_bis >= curdate()) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= curdate()) AND geloescht!=1 LIMIT 1");*/
$this->app->Tpl->Add('TAB1',"
Der Hauptlieferant ist $hauptlieferant
");
//$min_preis = $this->app->erp->EUR($min_preis/(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0);
//$max_preis = $this->app->erp->EUR($max_preis/(($this->app->erp->GetStandardMarge()/100.0)+1.0)*1.0);
$this->app->erp->CheckArtikel($id);
$this->app->Tpl->Parse('PAGE','einkaufspreiseuebersicht.tpl');
}
/**
* @param int $articleId
*
* @return float
*/
public function getCalcPriceByMinBasePrice($articleId)
{
$kursusd = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','USD');
$kurschf = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','CHF');
$sql = "
SELECT
SUM(if(a.stueckliste,
(SELECT SUM(
(SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e
LEFT JOIN (
SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach
) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung)
WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='')
AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge)
FROM stueckliste s2
WHERE s2.stuecklistevonartikel=s.artikel),(SELECT MIN(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e
LEFT JOIN (
SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach
) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung)
WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge)
FROM stueckliste s
LEFT JOIN artikel a ON a.id=s.artikel
LEFT JOIN adresse l ON l.id=a.adresse
WHERE s.stuecklistevonartikel=$articleId";
return (float)$this->app->DB->Select($sql);
}
/**
* @param int $articleId
*
* @return float mixed
*/
public function getCalcPriceByMaxBasePrice($articleId)
{
$kursusd = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','USD');
$kurschf = (float)$this->app->erp->GetWaehrungUmrechnungskurs('EUR','CHF');
$sql = "
SELECT
SUM(if(a.stueckliste,
(SELECT SUM(
(SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e
LEFT JOIN (
SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach
) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung)
WHERE e.artikel=s2.artikel AND (e.objekt='Standard' OR e.objekt='')
AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1) * s2.menge)
FROM stueckliste s2
WHERE s2.stuecklistevonartikel=s.artikel),(SELECT MAX(e.preis/ifnull(wt.kurs,if(e.waehrung = 'CHR',$kurschf,if(e.waehrung = 'USD',$kursusd,1)))) FROM einkaufspreise e
LEFT JOIN (
SELECT max(kurs) as kurs, waehrung_von, waehrung_nach FROM waehrung_umrechnung WHERE (isnull(gueltig_bis) OR gueltig_bis >= now() OR gueltig_bis = '0000-00-00') AND (waehrung_von LIKE 'EUR' OR waehrung_nach LIKE 'EUR') GROUP BY waehrung_von,waehrung_nach
) wt ON (wt.waehrung_nach <> 'EUR' AND wt.waehrung_nach = e.waehrung) OR (wt.waehrung_von <> 'EUR' AND wt.waehrung_von = e.waehrung)
WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis='0000-00-00' OR e.gueltig_bis >= curdate()) AND e.geloescht!=1 ))*s.menge)
FROM stueckliste s
LEFT JOIN artikel a ON a.id=s.artikel
LEFT JOIN adresse l ON l.id=a.adresse
WHERE s.stuecklistevonartikel=$articleId";
return (float)$this->app->DB->Select($sql);
}
public function ArtikelEinkaufEditPopup()
{
if($this->app->Secure->GetPOST('newpreis'))
{
$id = $this->app->Secure->GetGET('id');
$this->ArtikelCopyWaehrungen($id, 'einkaufeditpopup');
}
//$frame = $this->app->Secure->GetGET('frame');
$id = $this->app->Secure->GetGET('id');
$this->app->Tpl->Set('OPENDISABLE','');
$this->Preisrechner();
$sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1");
$this->ArtikelMenu($sid);
$artikel = $this->app->DB->Select("SELECT CONCAT(name_de,' (',nummer,')') FROM artikel WHERE id='$sid' LIMIT 1");
$this->app->Tpl->Set('UEBERSCHRIFT','Artikel: '.$artikel);
$this->app->Tpl->Add('UEBERSCHRIFT',' (Einkauf)');
$this->app->Tpl->Set('ABBRECHEN',"");
$widget = new WidgetEinkaufspreise($this->app,'TAB7');
$widget->form->SpecialActionAfterExecute('close_refresh',
"index.php?module=artikel&action=einkauf&id=$sid#tabs-1");
$widget->Edit();
$this->app->Tpl->Add('TAB2','Sie bearbeiten gerade einen Einkaufspreis. Erst nach dem Speichern können neue Preise angelegt werden.');
$this->app->Tpl->Add('TAB3','Sie bearbeiten gerade einen Einkaufspreis. Erst nach dem Speichern können Statistiken betrachtet werden.');
$this->app->Tpl->Parse('PAGE','einkaufspreiseuebersicht.tpl');
}
public function ArtikelEinkaufDisable()
{
// $this->ArtikelMenu();
$id = $this->app->Secure->GetGET('id');
$sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1");
$tagespreise = $this->app->DB->Select("SELECT tagespreise FROM artikel WHERE id = '$sid' LIMIT 1");
if(!$tagespreise || $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE id='$id' AND (gueltig_bis = '0000-00-00' || isnull(gueltig_bis) || gueltig_bis >= date(now()) LIMIT 1")){
$this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY), logdatei = now() WHERE id='$id' LIMIT 1");
}
$this->app->erp->ObjektProtokoll('einkaufspreise', $id, 'einkaufspreise_edit', 'Einkaufspreis deaktiviert');
$this->app->Location->execute('index.php?module=artikel&action=einkauf&id='.$sid);
}
public function ArtikelEinkaufDelete()
{
// $this->ArtikelMenu();
$id = $this->app->Secure->GetGET('id');
$sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1");
$tagespreise = $this->app->DB->Select("SELECT tagespreise FROM artikel WHERE id = '$sid' LIMIT 1");
if(!$tagespreise || $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE id='$id' AND (gueltig_bis = '0000-00-00' || isnull(gueltig_bis) || gueltig_bis >= date(now()) LIMIT 1")){
$this->app->DB->Update("UPDATE einkaufspreise SET geloescht='1',gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY), logdatei = now() WHERE id='$id' LIMIT 1");
}
$this->app->erp->ObjektProtokoll('einkaufspreise', $id, 'einkaufspreise_edit', 'Einkaufspreis gelöscht');
$this->app->Location->execute('index.php?module=artikel&action=einkauf&id='.$sid);
}
public function ArtikelEigenschaftenCopy()
{
$id = $this->app->Secure->GetGET('id');
$id = $this->app->DB->MysqlCopyRow('eigenschaften','id',$id);
$this->app->Location->execute('index.php?module=artikel&action=eigenschafteneditpopup&id='.$id);
}
public function ArtikelEinkaufCopy()
{
$id = $this->app->Secure->GetGET('id');
$id = $this->app->DB->MysqlCopyRow('einkaufspreise','id',$id);
$this->app->DB->Update("UPDATE einkaufspreise SET geloescht='0', gueltig_bis='0000-00-00', logdatei = now() WHERE id='$id' LIMIT 1");
$this->app->erp->ObjektProtokoll('einkaufspreise', $id, 'einkaufspreise_create', 'Einkaufspreis kopiert');
//$this->app->DB->Update("UPDATE einkaufspreise SET geloescht='1' WHERE id='$id' LIMIT 1");
$sid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE id='$id' LIMIT 1");
$this->app->Location->execute("index.php?module=artikel&action=einkauf&id=".$sid);
}
public function ArtikelCopyEdit()
{
//$id = (int)$this->app->Secure->GetGET('id');
if($this->app->Secure->GetGET('cmd')==='get'){
$id = (int)$this->app->Secure->GetPOST('id');
$data = $this->app->DB->SelectRow("SELECT id FROM artikel WHERE id = \"$id\" LIMIT 1 ");
echo json_encode($data);
$this->app->ExitXentral();
}
$this->app->Tpl->Parse('PAGE', 'artikeluebersicht.tpl');
}
public function ArtikelCopySave(){
$id = (int)$this->app->Secure->GetPOST('editid');
$einkaufspreise = $this->app->Secure->GetPOST('editeinkaufspreise');
$verkaufspreise = $this->app->Secure->GetPOST('editverkaufspreise');
$dateien = $this->app->Secure->GetPOST('editdateien');
$eigenschaften = $this->app->Secure->GetPOST('editeigenschaften');
$anweisungen = $this->app->Secure->GetPOST('editanweisungen');
$stuecklisten = $this->app->Secure->GetPOST('editstuecklisten');
$freifelderuebersetzung = $this->app->Secure->GetPOST('editfreifelderuebersetzung');
if($id == '' || $id <= 0){
$id = 0;
}
if($einkaufspreise == '' || $einkaufspreise <= 0){
$einkaufspreise = 0;
}
if($verkaufspreise == '' || $einkaufspreise <= 0){
$verkaufspreise = 0;
}
if($dateien == '' || $dateien <= 0){
$dateien = 0;
}
if($eigenschaften == '' || $eigenschaften <= 0){
$eigenschaften = 0;
}
if($anweisungen == '' || $anweisungen <= 0){
$anweisungen = 0;
}
if($stuecklisten == '' || $stuecklisten <= 0){
$stuecklisten = 0;
}
if($freifelderuebersetzung == '' || $freifelderuebersetzung <= 0){
$freifelderuebersetzung = 0;
}
$data = array($id, $einkaufspreise, $verkaufspreise, $dateien, $eigenschaften, $anweisungen, $stuecklisten, $freifelderuebersetzung);
$idnew = $this->ArtikelCopy($data, true);
echo json_encode(array('status'=>1,'url'=>'index.php?module=artikel&action=edit&id='.$idnew));
$this->app->ExitXentral();
}
function ArtikelCopy($data = null, $return = false)
{
//$id = $this->app->Secure->GetGET("id");
$id = $data[0];
$einkaufspreise = $data[1];
$verkaufspreise = $data[2];
$dateien = $data[3];
$eigenschaften = $data[4];
$anweisungen = $data[5];
$stuecklisten = $data[6];
$freifelderuebersetzung = $data[7];
$this->app->DB->MysqlCopyRow('artikel','id',$id);
$idnew = $this->app->DB->GetInsertID();
$steuersatz = $this->app->DB->Select("SELECT steuersatz FROM artikel WHERE id = '$id' LIMIT 1");
if($steuersatz == ''){
$steuersatz = -1.00;
$this->app->DB->Update("UPDATE artikel SET steuersatz = '$steuersatz' WHERE id = '$idnew' LIMIT 1");
}
$this->app->DB->Update("UPDATE artikel SET nummer='' WHERE id='$idnew' LIMIT 1");
if($this->app->DB->Select("SELECT variante_kopie FROM artikel WHERE id = '$id' LIMIT 1"))$this->app->DB->Update("UPDATE artikel SET variante = 1, variante_von = '$id' WHERE id = '$idnew' LIMIT 1");
if($stuecklisten == 1){
// wenn stueckliste
$stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id='$id' LIMIT 1");
if($stueckliste==1)
{
$artikelarr = $this->app->DB->SelectArr("SELECT * FROM stueckliste WHERE stuecklistevonartikel='$id'");
$cartikelarr = $artikelarr?count($artikelarr):0;
for($i=0;$i<$cartikelarr;$i++)
{
$sort = $artikelarr[$i]['sort'];
$artikel = $artikelarr[$i]['artikel'];
$referenz = $artikelarr[$i]['referenz'];
$place = $artikelarr[$i]['place'];
$layer = $artikelarr[$i]['layer'];
$stuecklistevonartikel = $idnew;
$menge = $artikelarr[$i]['menge'];
$firma = $artikelarr[$i]['firma'];
$this->app->DB->Insert("INSERT INTO stueckliste (id,sort,artikel,referenz,place,layer,stuecklistevonartikel,menge,firma) VALUES
('','$sort','$artikel','$referenz','$place','$layer','$stuecklistevonartikel','$menge','$firma')");
}
}
}
/*$arbeitsanweisungen = $this->app->DB->SelectArr("SELECT id FROM `artikel_arbeitsanweisung` WHERE artikel = '$id'");
if($arbeitsanweisungen)
{
foreach($arbeitsanweisungen as $arbeitsanweisung)
{
$newarbeitsanweisung = $this->app->DB->MysqlCopyRow('artikel_arbeitsanweisung', 'id', $arbeitsanweisung['id']);
$this->app->DB->Update("UPDATE `artikel_arbeitsanweisung` SET artikel = '$idnew' WHERE id = '$newarbeitsanweisung' LIMIT 1");
}
}*/
//TODO hinweis es wuren keine Preise kopiert
if($einkaufspreise == 1){
$einkaufspreise = $this->app->DB->SelectArr("SELECT id FROM einkaufspreise WHERE artikel = '$id'");
if($einkaufspreise){
foreach($einkaufspreise as $preis){
$neuereinkaufspreis = $this->app->DB->MysqlCopyRow("einkaufspreise", "id", $preis['id']);
$this->app->DB->Update("UPDATE einkaufspreise SET artikel = '$idnew' WHERE id = '$neuereinkaufspreis' LIMIT 1");
}
}
}
if($verkaufspreise == 1){
$verkaufspreise = $this->app->DB->SelectArr("SELECT id FROM verkaufspreise WHERE artikel = '$id'");
if($verkaufspreise){
foreach($verkaufspreise as $preis){
$neuerverkaufspreis = $this->app->DB->MysqlCopyRow("verkaufspreise", "id", $preis['id']);
$this->app->DB->Update("UPDATE verkaufspreise SET artikel = '$idnew' WHERE id = '$neuerverkaufspreis' LIMIT 1");
}
}
}
if($dateien == 1){
$dateien = $this->app->DB->SelectArr("SELECT DISTINCT datei FROM datei_stichwoerter WHERE parameter = '$id' AND objekt = 'Artikel'");
$datei_stichwoerter = $this->app->DB->SelectArr("SELECT id,datei FROM datei_stichwoerter WHERE parameter = '$id' AND objekt = 'Artikel'");
if($dateien){
foreach($dateien as $datei){
$titel = $this->app->DB->Select("SELECT titel FROM datei WHERE id='".$datei['datei']."' LIMIT 1");
$beschreibung = $this->app->DB->Select("SELECT beschreibung FROM datei WHERE id='".$datei['datei']."' LIMIT 1");
$nummer = $this->app->DB->Select("SELECT nummer FROM datei WHERE id='".$datei['datei']."' LIMIT 1");
$name = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE datei='".$this->app->DB->real_escape_string($datei['datei'])."' ORDER by version DESC LIMIT 1");
$ersteller = $this->app->User->GetName();
$tmpnewdateiid = $this->app->erp->CreateDatei($name,$titel,$beschreibung,$nummer,$this->app->erp->GetDateiPfad($datei['datei']),$ersteller);
$datei_mapping[$datei['datei']] = $tmpnewdateiid;
}
}
if($datei_stichwoerter){
foreach($datei_stichwoerter as $datei){
$neuesstichwort = $this->app->DB->MysqlCopyRow("datei_stichwoerter", "id", $datei['id']);
$newdatei = $datei_mapping[$datei['datei']];
$this->app->DB->Update("UPDATE datei_stichwoerter SET datei='$newdatei', parameter = '$idnew', objekt = 'Artikel' WHERE id = '$neuesstichwort' LIMIT 1");
}
}
}
if($eigenschaften == 1){
$aeigenschaften = $this->app->DB->SelectArr("SELECT id FROM artikeleigenschaftenwerte WHERE artikel = '$id'");
if($aeigenschaften){
foreach($aeigenschaften as $eigenschaft){
$neue_eigenschaft = $this->app->DB->MysqlCopyRow("artikeleigenschaftenwerte", "id", $eigenschaft['id']);
$this->app->DB->Update("UPDATE artikeleigenschaftenwerte SET artikel = '$idnew' WHERE id = '$neue_eigenschaft' LIMIT 1");
}
}
}
//WERDEN AUCH SCHON IMMER KOPIERT
if($anweisungen == 1){
$arbeitsanweisungen = $this->app->DB->SelectArr("SELECT id FROM artikel_arbeitsanweisung WHERE artikel = '$id'");
if($arbeitsanweisungen){
foreach($arbeitsanweisungen as $anweisung){
$neue_anweisung = $this->app->DB->MysqlCopyRow("artikel_arbeitsanweisung", "id", $anweisung['id']);
$this->app->DB->Update("UPDATE artikel_arbeitsanweisung SET artikel = '$idnew' WHERE id = '$neue_anweisung' LIMIT 1");
}
}
}
if($freifelderuebersetzung == 1){
$freifelderuebersetzungen = $this->app->DB->SelectArr("SELECT id FROM artikel_freifelder WHERE artikel = '$id'");
if($freifelderuebersetzungen){
$this->app->DB->Insert("INSERT INTO artikel_freifelder (artikel, sprache, nummer, wert) SELECT '$idnew', sprache, nummer, wert FROM artikel_freifelder WHERE artikel = '$id'");
}
}
// artikelbilder kopieren
if($return){
return $idnew;
}
// eventuell einkaufspreise verkaufspreise und stueckliste kopieren?
$msg = $this->app->erp->base64_url_encode("
Sie befinden sich in der neuen Kopie des Artikels. Bitte legen Sie Verkaufs- und Einkaufspreise und Bilder bzw. Dateien an! Diese wurden nicht kopiert!
");
$this->app->Location->execute("index.php?module=artikel&action=edit&msg=$msg&id=".$idnew);
}
public function ArtikelProjekte()
{
$this->app->Tpl->Add('UEBERSCHRIFT',' (Projekte)');
$this->ArtikelMenu();
$this->app->Tpl->Set('PAGE','hier sieht man in welchen projekten es verwendet wird');
}
public function ArtikelLager()
{
$id = $this->app->Secure->GetGET('id');
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'getvpe')
{
$lpiid = (int)$this->app->Secure->GetPOST('lpiid');
$erg = $this->app->DB->SelectRow("SELECT lpv.* FROM lager_platz_inhalt lpi LEFT JOIN lager_platz_vpe lpv ON lpi.lager_platz_vpe = lpv.id WHERE lpi.id = '".$lpiid."' LIMIT 1");
echo json_encode($erg);
$this->app->ExitXentral();
}
if($cmd === 'getvpevorlage')
{
$vpeid = (int)$this->app->Secure->GetPOST('vpeid');
$erg = $this->app->DB->SelectRow("SELECT lpv.* FROM lager_platz_vpe lpv WHERE lpv.id = '".$vpeid."' LIMIT 1");
echo json_encode($erg);
$this->app->ExitXentral();
}
if($cmd === 'savevpe')
{
$lpiid = (int)$this->app->Secure->GetPOST('lpiid');
$artikel = $this->app->DB->Select("SELECT artikel FROM lager_platz_inhalt WHERE id = '".$lpiid."' LIMIT 1");
$status = 0;
if($artikel)
{
$status = 1;
$menge = str_replace(',','.',$this->app->Secure->GetPOST('menge'));
$menge2 = str_replace(',','.',$this->app->Secure->GetPOST('menge2'));
$gewicht = str_replace(',','.',$this->app->Secure->GetPOST('gewicht'));
$breite = str_replace(',','.',$this->app->Secure->GetPOST('breite'));
$laenge = str_replace(',','.',$this->app->Secure->GetPOST('laenge'));
$hoehe = str_replace(',','.',$this->app->Secure->GetPOST('hoehe'));
$gewicht2 = str_replace(',','.',$this->app->Secure->GetPOST('gewicht2'));
$breite2 = str_replace(',','.',$this->app->Secure->GetPOST('breite2'));
$laenge2 = str_replace(',','.',$this->app->Secure->GetPOST('laenge2'));
$hoehe2 = str_replace(',','.',$this->app->Secure->GetPOST('hoehe2'));
$check = str_replace(',','.',$this->app->DB->Select("SELECT id FROM lager_platz_vpe WHERE artikel = '$artikel' AND
menge = '$menge' AND menge2 = '$menge2'
AND gewicht = '$gewicht' AND gewicht2 = '$gewicht2'
AND breite = '$breite' AND breite2 = '$breite2'
AND laenge = '$laenge' AND laenge2 = '$laenge2'
AND hoehe = '$hoehe' AND hoehe2 = '$hoehe2'
LIMIT 1
"));
if(!$check && ($menge > 0 || $gewicht > 0 || $breite > 0 || $laenge > 0 || $hoehe > 0))
{
$this->app->DB->Insert("INSERT INTO lager_platz_vpe (artikel, menge, menge2, gewicht, gewicht2, breite, breite2, laenge, laenge2, hoehe, hoehe2)
VALUES ('$artikel','$menge','$menge2','$gewicht','$gewicht2','$breite','$breite2','$laenge','$laenge2','$hoehe','$hoehe2')
");
$check = $this->app->DB->GetInsertID();
}
$menge = $this->app->DB->Select("SELECT menge FROM lager_platz_inhalt WHERE id = '$lpiid' LIMIT 1");
$lager_platz = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id = '$lpiid' LIMIT 1");
$lager_platz_vpe = $this->app->DB->Select("SELECT lager_platz_vpe FROM lager_platz_inhalt WHERE id = '".$lpiid."' LIMIT 1");
if(!$lager_platz_vpe)
{
$lagerbewegung = $this->app->DB->SelectArr("SELECT * FROM lager_bewegung WHERE lager_platz = '$lager_platz' AND artikel = '$artikel' AND menge = '$menge' AND eingang = 1 ORDER BY zeit DESC, id DESC LIMIT 1");
if($lagerbewegung)
{
if(!$lagerbewegung[0]['vpeid'])
{
$this->app->DB->Update("UPDATE lager_bewegung SET vpeid = '$check' WHERE id = '".$lagerbewegung[0]['id']."' LIMIT 1");
}
if(stripos($lagerbewegung[0]['referenz'],'(VPE') === false)
{
$referenz = $this->app->DB->real_escape_string($lagerbewegung[0]['referenz'].$this->app->erp->GetVPEBezeichnung($check));
$this->app->DB->Update("UPDATE lager_bewegung SET referenz = '$referenz' WHERE id = '".$lagerbewegung[0]['id']."' LIMIT 1");
}
}
}
$this->app->DB->Update("UPDATE lager_platz_inhalt SET lager_platz_vpe = '$check' WHERE id = '$lpiid' LIMIT 1");
}
echo json_encode(array('status'=>$status));
$this->app->ExitXentral();
}
$msg = $this->app->Secure->GetGET('msg');
if(!is_numeric($id))
{
$tmp = explode('_',$id);
$id = $tmp[0];
if(is_numeric($id))
{
$this->app->Location->execute("index.php?module=artikel&action=lager&id=$id");
return;
}
}
$this->app->erp->LagerArtikelZusammenfassen($id);
if(method_exists($this->app->erp,'GetTmpMessageOut'))
{
$this->app->Tpl->Set('MESSAGE',$this->app->erp->GetTmpMessageOut());
}else{
$msg = $this->app->erp->base64_url_decode($msg);
$this->app->Tpl->Set('MESSAGE',$msg);
}
if($this->app->DB->Select("SELECT id FROM lager_platz_inhalt WHERE artikel = '$id' AND lager_platz <> 0 AND NOT isnull(inventur) LIMIT 1"))
{
$this->app->Tpl->Add('MESSAGE','
Für diesen Artikel läuft aktuell eine Inventur
');
}
$check = $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM zwischenlager WHERE artikel='$id'");
if($check > 0)
{
$this->app->Tpl->Add('MESSAGE','
Hinweis: Es befinden sich noch '.$check.' Stück des Artikels im Zwischenlager!
');
// easy table mit arbeitspaketen YUI als template
$table = new EasyTable($this->app);
$bestbeforeBatchSn = $this->app->DB->SelectRow(
sprintf(
'SELECT mindesthaltbarkeitsdatum, seriennummern, chargenverwaltung
FROM artikel
WHERE id=%d
LIMIT 1',
$id
)
);
$mindesthaltbarkeitsdatum = $bestbeforeBatchSn['mindesthaltbarkeitsdatum'];
$seriennummern = $bestbeforeBatchSn['seriennummern'];
$chargenverwaltung= $bestbeforeBatchSn['chargenverwaltung'];
$artikelvpe = 'lpi.vpe';
$artikeljoin = '';
if($seriennummern!=='vomprodukteinlagern' && $chargenverwaltung <1 && $mindesthaltbarkeitsdatum!='1')
{
$table->Query("SELECT CONCAT(l.bezeichnung,' / ',lp.kurzbezeichnung, if(lp.sperrlager,' (Kein Auto-Versand Lager)',''),
if(lp.poslager,' (POS Lager)',''),if(lp.verbrauchslager,' (Verbrauchslager)',''),if(lp.autolagersperre,' (Nachschublager)',''),if(isnull(lpi.inventur),'',concat(' (Inventurwert: ',(trim(lpi.inventur)+0),')'))) as lager , trim(lpi.menge)+0 as menge,
$artikelvpe as VPE,
p.abkuerzung as projekt,
lpi.id FROM lager_platz_inhalt lpi
LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id
LEFT JOIN projekt p ON lpi.projekt=p.id
LEFT JOIN lager l ON l.id=lp.lager
$artikeljoin
WHERE lpi.artikel='$id' ");
$submenu='';
if($this->app->erp->RechteVorhanden('artikel','auslagern')){
$submenu .= " 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=auslagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\">";
}
if($this->app->erp->RechteVorhanden('artikel','einlagern')){
$submenu .= " 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=einlagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\">";
}
if($this->app->erp->RechteVorhanden('artikel','umlagern')){
$submenu .=" 0 && (grund!=null && grund!='')) { window.location.href='index.php?module=artikel&action=umlagern&id=$id&lid=%value%&menge='+menge+'&grund='+grund;}\" href=\"#\">";
}
if($this->app->erp->RechteVorhanden('artikel','auslagern') || $this->app->erp->RechteVorhanden('artikel','einlagern')
|| $this->app->erp->RechteVorhanden('artikel','umlagern'))
{
$table->DisplayNew('INHALT',$submenu);
}
else {
$table->DisplayNew('INHALT','');
}
} else {
$table->Query("SELECT CONCAT(l.bezeichnung,' / ',lp.kurzbezeichnung, if(lp.sperrlager,' (Kein Auto-Versand Lager)',''),
if(lp.poslager,' (POS Lager)',''),if(lp.verbrauchslager,' (Verbrauchslager)',''),if(lp.autolagersperre,' (Nachschublager)','')) as lager , trim(lpi.menge)+0 as menge,
$artikelvpe as VPE,
p.abkuerzung as projekt
FROM lager_platz_inhalt lpi LEFT JOIN lager_platz as lp ON lpi.lager_platz=lp.id LEFT JOIN projekt p ON lpi.projekt=p.id
LEFT JOIN lager l ON l.id=lp.lager
$artikeljoin
WHERE lpi.artikel='$id'");
if($this->app->erp->RechteVorhanden('artikel','auslagern') || $this->app->erp->RechteVorhanden('artikel','einlagern')
|| $this->app->erp->RechteVorhanden('artikel','umlagern')){
$table->DisplayNew('INHALT', 'Projekt', 'noAction');
}
else{
$table->DisplayNew('INHALT', '');
}
}
$this->app->Tpl->Parse('TAB1','rahmen70.tpl');
$this->app->Tpl->Set('INHALT','');
$mindesthaltbarkeitsdatum = $this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id='$id' LIMIT 1");
$chargenverwaltung = $this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id='$id' LIMIT 1");
$seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id='$id' LIMIT 1");
if($seriennummern==='vomprodukteinlagern' || $mindesthaltbarkeitsdatum=='1' || $chargenverwaltung=='2')
{
$this->app->Tpl->Add('TAB1',"
");
} else {
$this->app->Tpl->Add('TAB1',"
");
}
// $this->app->Tpl->Set('SUBSUBHEADING',"Reservierungen Stand ".date('d.m.Y'));
$this->app->Tpl->Add('TAB1',$this->ArtikelLagerInfo($id));
if($this->app->erp->Version()!=='stock')
{
$this->app->Tpl->Add('TAB1','
Reservierungen
');
// easy table mit arbeitspaketen YUI als template
$table = new EasyTable($this->app);
$table->Query("SELECT adr.name as kunde, trim(r.menge)+0 as menge, if(r.datum='0000-00-00','Kein Datum hinterlegt',r.datum) as bis,
p.abkuerzung as projekt,r.grund, IF(".$this->app->erp->RechteVorhanden("artikel","ausreservieren")."=1,CONCAT(' 0) window.location.href=\'index.php?module=artikel&action=ausreservieren&id=$id&lid=',r.id,'&menge=\'+menge;\" href=\"#\">'),'') AS Aktion FROM lager_reserviert r LEFT JOIN artikel a ON a.id=r.artikel LEFT JOIN projekt p ON
p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id WHERE r.artikel='$id'");
//$summe = round($this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$id'"),4);
//$reserviert = round($this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$id'"),4);// AND datum >= NOW()");
// if($this->app->User->GetType()=="admin")
$table->DisplayNew('INHALT');
$this->app->Tpl->Parse('TAB1','rahmen70.tpl');
$this->app->Tpl->Set('INHALT','');
$this->app->Tpl->Add('TAB1','
Offene Aufträge
');
// easy table mit arbeitspaketen YUI als template
$table = new EasyTable($this->app);
$table->Query("SELECT
CONCAT('',a.belegnr,'') as belegnr, DATE_FORMAT(a.datum,'%d.%m.%Y') as datum,
DATE_FORMAT(a.tatsaechlicheslieferdatum,'%d.%m.%Y') as 'Auslieferung Lager',
trim(SUM(ap.menge))+0 as menge,
CONCAT(
(SELECT trim(SUM(li.menge))+0 FROM lager_reserviert li WHERE li.objekt='auftrag' AND li.parameter=a.id AND li.artikel='$id'),'
') as reserviert,
a.zahlungsweise, adr.kundenfreigabe as freigabe, CONCAT(a.name, ' ',a.ansprechpartner
,' ', a.email) as Kunde,
if(
(SELECT b.belegnr FROM auftrag sub_a Left Join auftrag_position ap on ap.auftrag=sub_a.id LEFT JOIN bestellung_position bp on ap.id=bp.auftrag_position_id LEFT JOIN bestellung b on b.id= bp.bestellung where sub_a.id=a.id LIMIT 1)
,CONCAT('',
(SELECT b.belegnr FROM auftrag sub_a Left Join auftrag_position ap on ap.auftrag=sub_a.id LEFT JOIN bestellung_position bp on ap.id=bp.auftrag_position_id LEFT JOIN bestellung b on b.id= bp.bestellung where sub_a.id=a.id LIMIT 1),''),'-') as 'Bestell Nr.',
a.zahlungsweise,
format(ap.geliefert_menge,4) as gelieferte,
FORMAT(ap.preis,2) as preis FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag, adresse adr WHERE adr.id=a.adresse AND ap.artikel='$id' AND ap.geliefert_menge < ap.menge AND a.status='freigegeben' GROUP by a.belegnr
ORDER by a.tatsaechlicheslieferdatum, a.id
");
if($table->datasets)
{
$lagerrunden = true;
foreach($table->datasets as $k => $v)
{
if($v['menge'] != round($v['menge'])){
$lagerrunden = false;
}
if($v['gelieferte'] != round($v['gelieferte'])){
$lagerrunden = false;
}
}
if($lagerrunden)
{
foreach($table->datasets as $k => $v)
{
$table->datasets[$k]['menge'] = round($v['menge']);
$table->datasets[$k]['gelieferte'] = round($v['gelieferte']);
}
}
}
//$table->DisplayNew('INHALT',"Bestellung");
$table->DisplayNew('INHALT','Preis','noAction');
$this->app->Tpl->Parse('TAB1','rahmen70.tpl');
$this->app->Tpl->Set('INHALT','');
$this->app->Tpl->Set('INHALT','');
$this->app->Tpl->Add('TAB1','
Offene Bestellungen
');
$table = new EasyTable($this->app);
$table->Query("SELECT DATE_FORMAT(b.datum,'%d.%m.%Y') as datum, CONCAT('',b.belegnr,'') as 'bestellung Nr.',
if(
(SELECT nummer from auftrag_position where id=bp.auftrag_position_id LIMIT 1),CONCAT('',
(SELECT a.belegnr from auftrag a LEFT JOIN auftrag_position ap on a.id=ap.auftrag where ap.id=bp.auftrag_position_id LIMIT 1),''),'-') as 'Auftrag Nr.',
bp.bestellnummer as Nummer,
bp.menge, bp.geliefert, bp.vpe as VPE, a.lieferantennummer as lieferant, a.name as name, if(bp.lieferdatum!='0000-00-00', DATE_FORMAT(bp.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum,
if(b.bestaetigteslieferdatum!='0000-00-00', DATE_FORMAT(b.bestaetigteslieferdatum,'%d.%m.%Y'),'-') as 'best. Lieferdatum', b.status as status_Bestellung, bp.bestellung
FROM bestellung_position bp LEFT JOIN bestellung b ON bp.bestellung=b.id LEFT JOIN adresse a ON b.adresse=a.id
WHERE artikel='$id' AND b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefertdatasets)
{
$lagerrunden = true;
foreach($table->datasets as $k => $v)
{
if($v['menge'] != round($v['menge'])){
$lagerrunden = false;
}
if($v['geliefert'] != round($v['geliefert'])){
$lagerrunden = false;
}
}
if($lagerrunden)
{
foreach($table->datasets as $k => $v)
{
$table->datasets[$k]['menge'] = round($v['menge']);
$table->datasets[$k]['geliefert'] = round($v['geliefert']);
}
}
}
$table->DisplayNew('INHALT',"");
$this->app->Tpl->Parse('TAB1','rahmen70.tpl');
}
$this->app->Tpl->Set('INHALT','');
$this->app->Tpl->Add('TAB1','
Lagerplatz Bewegungen
');
// easy table mit arbeitspaketen YUI als template
$this->app->YUI->TableSearch('TAB1','lagerbewegungartikel', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Set('INHALT','');
//$this->app->Tpl->Set('TABTEXT',"Lagerbestand");
$lager_platz_vpe = $this->app->DB->SelectArr("SELECT * FROM lager_platz_vpe WHERE artikel = '$id'");
if($lager_platz_vpe)
{
foreach($lager_platz_vpe as $v)
{
$this->app->Tpl->Add('SELECTVPE','');
}
}
$this->app->Tpl->Parse('PAGE','artikel_lager.tpl');
}
public function ArtikelChargeDelete()
{
$id = $this->app->Secure->GetGET('id');
$sid = $this->app->Secure->GetGET('sid');
if($sid > 0){
$data = $this->app->DB->SelectRow("SELECT * FROM lager_charge WHERE id='$sid' LIMIT 1");
}
if(!empty($data)){
$lager_platz = $data['lager_platz'];
$artikel = $data['artikel'];
$menge = $data['menge'];
$this->app->DB->Delete("DELETE FROM lager_charge WHERE id='$sid' LIMIT 1");
if($this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id = '$artikel' LIMIT 1"))
{
$this->app->erp->Chargenlog($artikel, $lager_platz, 0, $data['charge'], $menge, 'Charge und/oder MHD gelöscht', "", 0);
}else{
$this->app->erp->Chargenlog($artikel, $lager_platz, 0, $data['charge'], $menge, 'Charge gelöscht', "", 0);
}
}
$this->app->Location->execute("index.php?module=artikel&action=chargen&id=$id");
}
public function ArticleBatchAdd()
{
$id = $this->app->Secure->GetGET('id');
$lid = $this->app->Secure->GetGET('lid');
$grund = $this->app->Secure->GetGET('grund');
$menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1);
if($menge <= 0) {
$this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id);
}
if($lid > 0){
$data = $this->app->DB->SelectRow(
sprintf(
'SELECT * FROM `lager_charge` WHERE `id` = %d LIMIT 1',
$lid
)
);
}
if(!empty($data)){
$lager_platz = $data['lager_platz'];
$artikel = $data['artikel'];
$this->app->erp->LagerEinlagern($artikel, $menge, $lager_platz, 0, $grund);
}
$this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id);
}
public function ArticleBestbeforeAdd()
{
$id = $this->app->Secure->GetGET('id');
$lid = $this->app->Secure->GetGET('lid');
$grund = $this->app->Secure->GetGET('grund');
$menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1);
if($menge <= 0) {
$this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$lid);
}
if($lid > 0){
$data = $this->app->DB->SelectRow(
sprintf(
'SELECT * FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = %d LIMIT 1',
$lid
)
);
}
if(!empty($data)){
$lager_platz = $data['lager_platz'];
$artikel = $data['artikel'];
$this->app->erp->LagerEinlagern($artikel, $menge, $lager_platz, 0, $grund);
}
$this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$id);
}
public function ArticleBatchReduce()
{
$id = $this->app->Secure->GetGET('id');
$lid = $this->app->Secure->GetGET('lid');
$grund = $this->app->Secure->GetGET('grund');
$menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1);
if($menge <= 0) {
$this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id);
}
if($lid > 0){
$data = $this->app->DB->SelectRow(
sprintf(
'SELECT * FROM `lager_charge` WHERE `id` = %d LIMIT 1',
$lid
)
);
}
if(!empty($data)){
$lager_platz = $data['lager_platz'];
$artikel = $data['artikel'];
$lpi = round((float)$this->app->DB->Select(
sprintf(
'SELECT SUM(menge) FROM `lager_platz_inhalt` WHERE `artikel` = %d AND `lager_platz` = %d',
$artikel, $lager_platz
)
),8);
if($menge > $lpi) {
$menge = $lpi;
}
$this->app->erp->LagerAuslagernRegal($artikel, $lager_platz, $menge, 0, $grund);
}
$this->app->Location->execute('index.php?module=artikel&action=chargen&id='.$id);
}
public function ArticleBestbeforeReduce()
{
$id = $this->app->Secure->GetGET('id');
$lid = $this->app->Secure->GetGET('lid');
$grund = $this->app->Secure->GetGET('grund');
$menge = $this->app->erp->ReplaceMenge(1, $this->app->Secure->GetGET('menge'), 1);
if($menge <= 0) {
$this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$id);
}
if($lid > 0){
$data = $this->app->DB->SelectRow(
sprintf(
'SELECT * FROM `lager_mindesthaltbarkeitsdatum` WHERE `id` = %d LIMIT 1',
$lid
)
);
}
if(!empty($data)){
$lager_platz = $data['lager_platz'];
$artikel = $data['artikel'];
$lpi = round((float)$this->app->DB->Select(
sprintf(
'SELECT SUM(menge) FROM `lager_platz_inhalt` WHERE `artikel` = %d AND `lager_platz` = %d',
$artikel, $lager_platz
)
),8);
if($menge > $lpi) {
$menge = $lpi;
}
$this->app->erp->LagerAuslagernRegal($artikel, $lager_platz, $menge, 0, $grund);
}
$this->app->Location->execute('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id='.$id);
}
public function ArtikelMHDDelete()
{
$id = $this->app->Secure->GetGET('id');
$sid = $this->app->Secure->GetGET('sid');
if($sid > 0){
$data = $this->app->DB->SelectArr("SELECT * FROM lager_mindesthaltbarkeitsdatum WHERE id='$sid' LIMIT 1");
}
if(!empty($data)){
$lager_platz = $data[0]['lager_platz'];
$artikel = $data[0]['artikel'];
$menge = $data[0]['menge'];
$charge = $data[0]['charge'];
$this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id='$sid' LIMIT 1");
if($this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$artikel' LIMIT 1")){
if(!empty($charge))
{
$charge = $this->app->DB->real_escape_string($charge);
$amount_mhdcharge = $this->app->DB->Select("SELECT IFNULL(SUM(lm.menge),0)
FROM lager_mindesthaltbarkeitsdatum as lm
WHERE lm.artikel = $artikel AND lm.charge = '$charge'");
$amount_charge = $this->app->DB->Select("SELECT IFNULL(SUM(lc.menge),0)
FROM lager_charge AS lc
WHERE lc.artikel = $artikel AND lc.charge = '$charge'");
if($amount_charge >= $amount_mhdcharge + $menge)
{
$chargen = $this->app->DB->SelectArr("SELECT lc.*
FROM lager_charge AS lc
WHERE lc.artikel = $artikel AND lc.charge = '$charge' ORDER BY lc.menge >= $menge DESC");
$nochmenge = $menge;
foreach($chargen as $chargenrow)
{
if($nochmenge <= 0)
{
break;
}
if($nochmenge >= $chargenrow['menge'])
{
$this->app->DB->Delete("DELETE FROM lager_charge WHERE id = ".$chargenrow['id']);
if($this->app->DB->affected_rows() > 0){
$nochmenge = round($nochmenge - $chargenrow['menge'], 8);
}
}else{
$this->app->DB->Update("UPDATE lager_charge SET menge = menge - $nochmenge WHERE id = ".$chargenrow['id']);
if($this->app->DB->affected_rows() > 0){
$nochmenge = 0;
break;
}
}
}
if($nochmenge < $menge)
{
$this->app->erp->Chargenlog($artikel, $lager_platz, 0, $charge, round($menge-$nochmenge,8), 'Charge und / oder MHD gelöscht');
}
}
}
$this->app->erp->MHDLog($artikel, $lager_platz, 0, $data[0]['mhddatum'], $menge, 'Charge und / oder MHD gelöscht', "", 0, $data[0]['charge'], 0);
}else{
$this->app->erp->MHDLog($artikel, $lager_platz, 0, $data[0]['mhddatum'], $menge, 'MHD gelöscht', "", 0, $data[0]['charge'], 0);
}
}
$this->app->Location->execute("index.php?module=artikel&action=mindesthaltbarkeitsdatum&id=$id");
}
public function ArtikelChargen()
{
$this->ArtikelMenu();
$obj = $this->app->erp->LoadModul('chargen');
if($obj)
{
$obj->ChargenArtikelChargen();
}
}
public function ArtikelMHD()
{
$id = $this->app->Secure->GetGET('id');
$this->ArtikelMenu();
//$this->app->Tpl->Set('TABTEXT','Mindesthaltbarkeitsdatum');
$this->app->YUI->DatePicker('datum');
$this->app->YUI->AutoComplete('lagerplatz','lagerplatz');
if($this->app->Secure->GetPOST('anlegen')!='')
{
$formmenge = str_replace(',','.',$this->app->Secure->GetPOST('menge'));
$datum = $this->app->Secure->GetPOST('datum');
$charge = $this->app->Secure->GetPOST('charge');
$lagerplatz = $this->app->Secure->GetPOST('lagerplatz');
$datum = $this->app->String->Convert($datum,'%1.%2.%3','%3-%2-%1');
$lagerplatz = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$lagerplatz' LIMIT 1");
if(is_numeric($formmenge) && is_numeric($lagerplatz) && $datum!='--')
{
if($this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$id' LIMIT 1"))
{
if(!empty($charge)){
$this->app->erp->AddChargeLagerOhneBewegung(
$id,
$formmenge,
$lagerplatz,
$datum,
$charge,
'Charge und / oder MHD angelegt');
}
$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($id,$formmenge,$lagerplatz,$datum,$charge,0 , '', 0, 'Charge und / oder MHD angelegt');
}else{
$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($id,$formmenge,$lagerplatz,$datum,$charge,0 , '', 0, 'MHD angelegt');
}
} else {
$this->app->Tpl->Add('TAB1','
Fehler: Bitte Menge, MHD und Lager angeben!
');
}
}
$menge = $this->app->erp->ArtikelImLager($id);
$mhd = $this->app->DB->Select("SELECT SUM(menge) FROM lager_mindesthaltbarkeitsdatum WHERE artikel='$id'");
if($menge > $mhd)
$this->app->Tpl->Add('TAB1',"
Achtung: Es sind ".($menge-$mhd)." Einträge zu wenig vorhanden!
");
else if ($menge < $mhd)
$this->app->Tpl->Add('TAB1',"
Achtung: Es sind ".($mhd-$menge)." Einträge zu viel vorhanden!
{|Diese Stückliste enthält Artikel die einen Zirkelbezug verursachen!|}
');
}
$addAlternative = '';
$addAlternative .= "app->Conf->WFconf['defaulttheme']}/images/pluspaket_gruen_kl.png\" border=\"0\">";
$addAlternative .= '';
if($this->app->Secure->GetGET('cmd') === 'getalternative'){
$id = (int)$this->app->Secure->GetPOST('id');
$data = $this->app->DB->SelectRow("SELECT s.id, s.art FROM stueckliste s WHERE s.id = '$id' LIMIT 1");
if(empty($data)) {
$data['id'] = 0;
$data['art'] = '';
}
echo json_encode($data);
$this->app->ExitXentral();
}
elseif($this->app->Secure->GetGET('cmd') === 'getalternativedetails') {
$alternativeId = (int)$this->app->Secure->GetPOST('id');
$data = $this->app->DB->SelectArr("SELECT id as alternativeId, alternative_article_id, reason FROM parts_list_alternative WHERE id = '$alternativeId'");
if($data){
$data = reset($data);
$data['article'] = $this->app->DB->Select("SELECT CONCAT(nummer, ' ', name_de) FROM artikel WHERE id = '".$data['alternative_article_id']."' LIMIT 1");
}else{
$data['id'] = 0;
$data['art'] = '';
}
echo json_encode($data);
$this->app->ExitXentral();
}
elseif($this->app->Secure->GetGET('cmd') === 'savealternative') {
$id = (int)$this->app->Secure->GetPOST('id');
$alternativeId = $this->app->Secure->GetPOST('alternativeId');
$alternativeArticle = trim($this->app->Secure->GetPOST('alternativeArticle'));
$reason = trim($this->app->Secure->GetPOST('reason'));
$error = "";
if($alternativeArticle == ""){
$error .= "Bitte alternativen Artikel ausfüllen\n";
}else{
$alternativeArticleNo = explode(' ', $alternativeArticle);
$alternativeArticleNo = $alternativeArticleNo[0];
if($alternativeArticleNo != ""){
$alternativeArticleId = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$alternativeArticleNo' LIMIT 1 ");
if($alternativeArticleId <= 0 || $alternativeArticleId == ''){
$error .= "Kein gültiger Artikel\n";
}
}else{
$error .= "Keine Artikelnummer\n";
}
}
if($alternativeArticleId > 0){
//NOCH PRUEFEN
$alternativeArticleAlreadyExists = $this->app->DB->Select("SELECT id FROM parts_list_alternative WHERE alternative_article_id = '$alternativeArticleId' AND parts_list_id = '$id' AND id != '$alternativeId' LIMIT 1");
if($alternativeArticleAlreadyExists != '' && $alternativeArticleAlreadyExists > 0){
$error .= "Alternativer Artikel existiert bereits\n";
}
}
if($error == ""){
if($id){
if($alternativeId > 0 && $alternativeId != ''){
$this->app->DB->Update("UPDATE parts_list_alternative SET alternative_article_id = '$alternativeArticleId', reason = '$reason' WHERE id = '$alternativeId'");
}else{
$this->app->DB->Insert("INSERT INTO parts_list_alternative (parts_list_id, alternative_article_id, reason) VALUES ('$id', '$alternativeArticleId', '$reason')");
}
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}else{
echo json_encode(array('status'=>0,'statusText'=>'Fehler'));
$this->app->ExitXentral();
}
}else{
echo json_encode(array('status'=>0,'statusText'=>$error));
$this->app->ExitXentral();
}
}elseif($this->app->Secure->GetGET('cmd') === 'deletealternative'){
$id = (int) $this->app->Secure->GetPOST('id');
if($id)
$this->app->DB->Update("DELETE FROM parts_list_alternative WHERE id = '$id'");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}elseif($this->app->Secure->GetGET('cmd') === 'savetype'){
$id = (int) $this->app->Secure->GetPOST('id');
$type = $this->app->Secure->GetPOST('type');
if($type != "" && $id > 0){
$this->app->DB->Update("UPDATE stueckliste SET art = '$type' WHERE id = '$id'");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}else{
echo json_encode(array('status'=>0,'statusText'=>'Fehler'));
$this->app->ExitXentral();
}
}
//$this->app->Tpl->Add('ADDALTERNATIVE', $addAlternative );
$this->app->YUI->AutoComplete('parts_list_alternative_article', 'artikelnummer');
$this->app->YUI->TableSearch('PARTSLISTALTERNATIVES', 'parts_list_alternatives', 'show', '', '', basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','stuecklisteuebersicht.tpl');
}
public function ArtikelStuecklisteEmpty()
{
$id = $this->app->Secure->GetGET('id');
if($id > 0){
$this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel='$id'");
}
$this->app->Location->execute("index.php?module=artikel&action=stueckliste&id=$id");
}
function ArtikelStuecklisteExport()
{
$id = $this->app->Secure->GetGET('id');
if($id > 0){
$sql = "SELECT avon.nummer as stuecklistevon, a.nummer, a.name_de, a.hersteller,a.herstellernummer, REPLACE(TRIM(s.menge)+0,'.',',') as menge, s.referenz, s.place, s.layer, s.wert, s.bauform, s.zachse,s.xpos, s.ypos, s.art FROM stueckliste s LEFT JOIN artikel a ON a.id=s.artikel LEFT JOIN artikel avon ON avon.id=s.stuecklistevonartikel WHERE s.stuecklistevonartikel='$id'";
$result = $this->app->DB->SelectArr($sql);
}
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename=file.csv');
header('Pragma: no-cache');
header('Expires: 0');
$out = fopen('php://output', 'w');
$cresult = !empty($result)?count($result):0;
for($i=0;$i<$cresult;$i++)
{
if($i==0) {
foreach($result[$i] as $spalte=>$wert)
echo '"'.$spalte.'";';
echo "\r\n";
}
fputcsv($out, $result[$i],';','"');
}
fclose($out);
$this->app->ExitXentral();
}
public function UpStueckliste()
{
$this->app->YUI->SortListEvent('up','stueckliste','stuecklistevonartikel');
$this->ArtikelStueckliste();
}
public function DownStueckliste()
{
$this->app->YUI->SortListEvent('down','stueckliste','stuecklistevonartikel');
$this->ArtikelStueckliste();
}
public function DelStueckliste()
{
$id = $this->app->Secure->GetGET('id');
if($id > 0){
$sort = $this->app->DB->Select("SELECT sort FROM stueckliste WHERE id='$id' LIMIT 1");
$sid = $this->app->DB->Select("SELECT stuecklistevonartikel FROM stueckliste WHERE id='$id' LIMIT 1");
$this->app->DB->Delete("DELETE FROM stueckliste WHERE id='$id'");
$this->app->DB->Delete("UPDATE stueckliste SET sort=sort-1 WHERE stuecklistevonartikel='$sid' AND sort > $sort LIMIT 1");
}
$this->app->Location->execute('index.php?module=artikel&action=stueckliste&id='.$sid);
}
function ArtikelInStueckliste()
{
$this->ArtikelMenu();
$this->app->Tpl->Set('TABTEXT','In Stückliste von folgenden Artikel vorhanden');
$this->app->YUI->TableSearch('TAB1','instueckliste', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','tabview.tpl');
}
public function ArtikelStuecklisteEditPopup()
{
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'edit'){
$id = (int)$this->app->Secure->GetPOST('id');
$data = $this->app->DB->SelectRow("SELECT s.id, s.artikel, trim(s.menge)+0 as menge, s.art, s.referenz, s.layer, s.place, s.wert, s.bauform, s.zachse, s.xpos, s.ypos FROM stueckliste s WHERE s.id = '$id' LIMIT 1");
if($data){
if($data['artikel'] == 0){
$data['artikel'] = '';
}else{
if($data['artikel'] != ''){
$artikel = $this->app->DB->SelectRow("SELECT nummer, name_de FROM artikel WHERE id = '".$data['artikel']."' LIMIT 1");
if(!empty($artikel)){
$data['artikel'] = $artikel['nummer'].' '.$artikel['name_de'];
}
}
}
if($data['art'] == ''){
$data['art'] = 'et';
}
/*if($data['alternative'] == 0){
$data['alternative'] = '';
}else{
if($data['alternative'] != ''){
$alternative = $this->app->DB->SelectRow("SELECT nummer, name_de FROM artikel WHERE id = '".$data['alternative']."' LIMIT 1");
if(!empty($alternative)){
$data['alternative'] = $alternative['nummer'].' '.$alternative['name_de'];
}
}
}*/
}else{
$data['id'] = 0;
$data['artikel'] = '';
$data['menge'] = '';
$data['art'] = 'et';
//$data['alternative'] = '';
$data['referenz'] = '';
$data['layer'] = 'Top';
$data['place'] = 'DP';
$data['wert'] = '';
$data['bauform'] = '';
$data['zachse'] = '';
$data['xpos'] = '';
$data['ypos'] = '';
}
echo json_encode($data);
$this->app->ExitXentral();
}
if($cmd === 'save' || $cmd === 'doppeltsave'){
$cmdsave = $cmd;
$id = (int)$this->app->Secure->GetPOST('eid');
$startikelid = (int)$this->app->Secure->GetPOST('estartikelid');
$artikel = trim($this->app->Secure->GetPOST('eartikel'));
$menge = str_replace(',','.',trim($this->app->Secure->GetPOST('emenge')));
$art = trim($this->app->Secure->GetPOST('eart'));
//$alternative = trim($this->app->Secure->GetPOST('ealternative'));
$referenz = trim($this->app->Secure->GetPOST('ereferenz'));
$layer = trim($this->app->Secure->GetPOST('elayer'));
$place = trim($this->app->Secure->GetPOST('eplace'));
$wert = trim($this->app->Secure->GetPOST('ewert'));
$bauform = trim($this->app->Secure->GetPOST('ebauform'));
$zachse = trim($this->app->Secure->GetPOST('ezachse'));
$xpos = trim($this->app->Secure->GetPOST('expos'));
$ypos = trim($this->app->Secure->GetPOST('eypos'));
if($cmdsave === 'doppeltsave'){
$einfuegen = trim($this->app->Secure->GetPOST('eeinfuegen'));
$mengeerhoehen = trim($this->app->Secure->GetPOST('emengeerhoehen'));
}
$error = '';
if($artikel == ''){
$error .= "Bitte Artikel ausfüllen\n";
}else{
$artikelnr = explode(' ', $artikel);
$artikelnr = $artikelnr[0];
$artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$artikelnr' LIMIT 1");
if($artikelid != ''){
}else{
$error .= "Bitte gültigen Artikel ausfüllen\n";
}
}
//12.07.19 LG keine menge 0 bei stuecklistenposition
if($menge == '' || $menge <= 0){
$error .= "Bitte Menge ausfüllen"."\n";
}
$errordoppelt = '';
$doppeltid = '';
$ergebnis = $this->artinsturec($startikelid, $artikelid, $cmdsave, $id);
$errordoppelt = $ergebnis['errordoppelt'];
$doppeltid = $ergebnis['doppeltid'];
/*$alternativeid = 0;
if($alternative != ''){
$alternativenr = explode(' ', $alternative);
$alternativenr = $alternativenr[0];
$alternativeid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '$alternativenr' LIMIT 1");
if($alternativeid != ''){
}else{
$error .= "Bitte gültigen Alternativ Artikel ausfüllen\n";
}
}*/
if($this->app->erp->IstStuecklistenZirkel($artikelid, $startikelid)){
$error .= 'Stückliste enthält Artikel die einen Zirkelbezug verursachen!';
}
if($error == "" && $errordoppelt == ''){
if($cmdsave === 'doppeltsave' && $mengeerhoehen == 1 && $doppeltid > 0){
$this->app->DB->Update("UPDATE stueckliste SET menge = menge + '$menge' WHERE id = '$doppeltid'");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
if($id){
$this->app->DB->Update("UPDATE stueckliste SET artikel = '$artikelid', menge = '$menge', art = '$art', referenz = '$referenz', layer = '$layer', place = '$place', wert = '$wert', bauform = '$bauform', zachse = '$zachse', xpos = '$xpos', ypos = '$ypos' WHERE id = '$id'");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
if(($cmdsave === 'doppeltsave' && $einfuegen == 1) || $cmdsave === 'save'){
$this->app->DB->Insert("INSERT INTO stueckliste (sort, artikel, referenz, place, layer, stuecklistevonartikel, menge, art, firma, wert, bauform, zachse, xpos, ypos) VALUES (0, '$artikelid', '$referenz', '$place', '$layer', '$startikelid', '$menge', '$art', 1, '$wert', '$bauform', '$zachse', '$xpos', '$ypos')");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
echo json_encode(array('status'=>0,'statusText'=>'Fehler'));
$this->app->ExitXentral();
}
if($error != ''){
echo json_encode(array('status'=>0,'statusText'=>$error,'doppelt'=>''));
$this->app->ExitXentral();
}
if($error == '' && $errordoppelt != ''){
echo json_encode(array('status' => 0, 'statusText' => '', 'doppelt' => $errordoppelt));
$this->app->ExitXentral();
}
}
}
function artinsturec($hauptartikelid, $unterartikelid, $cmdsave, $id){
$stuecklistenunterartikel = $this->app->DB->SelectArr("SELECT id, artikel FROM stueckliste WHERE stuecklistevonartikel = '$hauptartikelid' AND id != '$id'");
foreach($stuecklistenunterartikel as $key=>$value){
if($unterartikelid == $value['artikel']){
$ergebnis['doppeltid'] = $value['id'];
//$doppeltid = $value['id'];
if($cmdsave === 'save'){
$ergebnis['errordoppelt'] = 'doppelt';
//$errordoppelt .= "doppelt";
}
}else{
$ergebnis = $this->artinsturec($value['artikel'], $unterartikelid, $cmdsave, $id);
}
}
return $ergebnis;
}
public function ArtikelStatistik()
{
$id = $this->app->Secure->GetGET('id');
$this->ArtikelMenu();
//$this->app->Tpl->Set('TABTEXT',"Statistik");
//$this->app->Tpl->Set('TAB1',"
Statistik Mengen
");
$summe['jahr']='Summe';
$summe['monat']='';
$auftraege = $this->app->DB->SelectArr("SELECT EXTRACT(YEAR FROM a.datum) as jahr, EXTRACT(MONTH FROM a.datum) as monat, TRIM(sum(ap.menge))+0 as menge
FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag
WHERE ap.artikel='$id' AND (a.status<>'storniert' and a.status <> 'angelegt') GROUP By monat,jahr ORDER by jahr DESC, monat DESC"
);
$mengeauftraege = 0;
$mengeanfragen = 0;
$mengeangebote = 0;
$mengelieferscheine = 0;
$mengebestellungen = 0;
if($auftraege)
{
foreach($auftraege as $el)
{
$tab[$el['jahr']][$el['monat']]['auftraege'] = $el['menge'];
$summe['auftrag'] += $el['menge'];
}
} else {
$summe['auftrag']='';
}
$lieferscheine = $this->app->DB->SelectArr(
"SELECT EXTRACT(YEAR FROM l.datum) as jahr, EXTRACT(MONTH FROM l.datum) as monat, TRIM(sum(lp.menge))+0 as menge
from lieferschein l
LEFT JOIN lieferschein_position lp on l.id = lp.lieferschein
WHERE lp.artikel='$id' AND (l.status='versendet') GROUP By monat,jahr ORDER by jahr DESC, monat DESC"
);
if($lieferscheine)
{
foreach($lieferscheine as $el)
{
$tab[$el['jahr']][$el['monat']]['lieferscheine'] = $el['menge'];
$summe['lieferscheine'] += $el['menge'];
}
} else {
$summe['lieferschein']='';
}
$rechnungen = $this->app->DB->SelectArr(
"SELECT EXTRACT(YEAR FROM r.datum) as jahr, EXTRACT(MONTH FROM r.datum) as monat, TRIM(sum(rp.menge))+0 as menge
from rechnung r
LEFT JOIN rechnung_position rp on r.id = rp.rechnung
WHERE rp.artikel='$id' AND (r.status!='angelegt' AND r.status!='storniert') GROUP By monat,jahr ORDER by jahr DESC, monat DESC"
);
if($rechnungen)
{
foreach($rechnungen as $el)
{
$tab[$el['jahr']][$el['monat']]['rechnungen'] = $el['menge'];
$summe['rechnungen'] += $el['menge'];
}
} else {
$summe['rechnungen'] = '';
}
$angebote = $this->app->DB->SelectArr("SELECT EXTRACT(YEAR FROM a.datum) as jahr, EXTRACT(MONTH FROM a.datum) as monat, TRIM(sum(ap.menge))+0 as menge
FROM angebot_position ap LEFT JOIN angebot a ON a.id=ap.angebot
WHERE ap.artikel='$id' AND (a.status<>'storniert' and a.status <> 'angelegt') GROUP By monat,jahr ORDER by jahr DESC, monat DESC"
);
if($angebote)
{
foreach($angebote as $el)
{
$tab[$el['jahr']][$el['monat']]['angebote'] = $el['menge'];
$summe['angebote'] += $el['menge'];
}
} else {
$summe['angebote']='';
}
$bestellungen = $this->app->DB->SelectArr("SELECT EXTRACT(YEAR FROM a.datum) as jahr, EXTRACT(MONTH FROM a.datum) as monat, TRIM(sum(ap.menge))+0 as menge
FROM bestellung_position ap LEFT JOIN bestellung a ON a.id=ap.bestellung
WHERE ap.artikel='$id' AND (a.status<>'storniert' and a.status <> 'angelegt') GROUP By monat,jahr ORDER by jahr DESC, monat DESC"
);
if($bestellungen)
{
foreach($bestellungen as $el)
{
$tab[$el['jahr']][$el['monat']]['bestellungen'] = $el['menge'];
$summe['bestellungen'] += $el['menge'];
}
} else {
$summe['bestellungen']='';
}
if($tab)
{
$table = new EasyTable($this->app);
$table->headings = array('Jahr','Monat','Aufträge','Lieferscheine','Rechnungen','Angebote','Bestellungen');
krsort($tab);
foreach($tab as $jahr => $monate)
{
krsort($monate);
foreach($monate as $monat => $row)
{
$displayrow[0] = $jahr;
$displayrow[1] = $monat;
$displayrow[2] = isset($row['auftraege'])?$row['auftraege']:'';
$displayrow[6] = isset($row['lieferscheine'])?$row['lieferscheine']:'';
$displayrow[3] = isset($row['rechnungen'])?$row['rechnungen']:'';
$displayrow[4] = isset($row['angebote'])?$row['angebote']:'';
$displayrow[5] = isset($row['bestellungen'])?$row['bestellungen']:'';
$table->AddRow($displayrow);
}
}
$table->AddRow($summe);
//$html .= "
Fehler: Unbekannte oder falsche Menge: $menge bei Artikel \"$name_de\". Die Artikel wurden nicht ausgelagert!
");
}
$this->app->Location->execute("index.php?module=artikel&action=lager&id=$id&msg=$msg");
}
public function ArtikelAusreservieren()
{
$id = $this->app->Secure->GetGET('id');
$lid = $this->app->Secure->GetGET('lid');
$menge = str_replace(',','.',$this->app->Secure->GetGET('menge'));
$seriennummern = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id = '$id' LIMIT 1");
if($seriennummern != '' && $seriennummern !== 'keine'){
$menge = (int)$menge;
}
// menge holen in lagerregaplplatz
$menge_lager = $this->app->DB->Select("SELECT menge FROM lager_reserviert WHERE id='$lid' LIMIT 1");
$neuemenge = $menge_lager - $menge;
//echo "menge_lager = $menge_lager; menge raus = $menge; neuemenge = $neuemenge; lid=$lid";
if($menge_lager <= $menge){
$this->app->DB->Delete("DELETE FROM lager_reserviert WHERE id='$lid' LIMIT 1");
}
else{
$this->app->DB->Update("UPDATE lager_reserviert SET menge='$neuemenge' WHERE id='$lid' LIMIT 1");
}
if($menge_lager < $menge) {
$menge = $menge_lager;
}
$name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1");
$msg = $this->app->erp->base64_url_encode("
Die Reservierung \"$name_de\" wurde $menge mal entfernt.
");
$this->app->Location->execute("index.php?module=artikel&action=lager&id=$id&msg=$msg");
}
/**
* @param int $id
*
* @return array
*/
public function isPossibleToDeleteArticle($id) {
$check_tables = array('anfrage','angebot','auftrag','rechnung','gutschrift','lieferschein','produktion','bestellung','retoure');
$anzahl = 0;
foreach($check_tables as $table)
{
$anzahl = (int)$this->app->DB->Select("SELECT id FROM ".$table."_position WHERE artikel='$id'");
if($anzahl > 0) {
return ['status'=>false, 'article_in'=>$table];
}
}
$anzahl_stueckliste = $this->app->DB->Select("SELECT id FROM stueckliste WHERE artikel='$id'");
if($anzahl_stueckliste > 0) {
return ['status'=>false, 'article_in'=>'stueckliste'];
}
$abos = $this->app->DB->Select("SELECT COUNT(id) FROM abrechnungsartikel WHERE artikel='$id'");
if($abos > 0) {
return ['status'=>false, 'article_in'=>'abrechnungsartikel'];
}
return ['status'=>true];
}
public function deleteArticleById($id, $sperrenbeiLager = false)
{
$name_de = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1");
$check_tables = array('anfrage','angebot','auftrag','rechnung','gutschrift','lieferschein','produktion','bestellung','retoure');
$anzahl = 0;
foreach($check_tables as $table) {
$anzahl += (int)$this->app->DB->Select("SELECT COUNT(id) FROM ".$table."_position WHERE artikel='$id'");
}
$anzahl_stueckliste = $this->app->DB->Select("SELECT SUM(menge) FROM stueckliste WHERE artikel='$id'");
$abos = $this->app->DB->Select("SELECT COUNT(id) FROM abrechnungsartikel WHERE artikel='$id'");
$anzahl += (int)$abos;
$sperren = false;
if($sperrenbeiLager){
if(
$this->app->DB->Select(sprintf('SELECT id FROM lager_platz_inhalt WHERE artikel = %d', $id))
|| $this->app->DB->Select(sprintf('SELECT id FROM lager_mindesthaltbarkeitsdatum WHERE artikel = %d', $id))
|| $this->app->DB->Select(sprintf('SELECT id FROM lager_charge WHERE artikel = %d', $id))
|| $this->app->DB->Select(sprintf('SELECT id FROM lager_seriennummern WHERE artikel = %d', $id))
|| $this->app->DB->Select(sprintf('SELECT id FROM mhd_log WHERE artikel = %d', $id))
|| $this->app->DB->Select(sprintf('SELECT id FROM chargen_log WHERE artikel = %d', $id))
) {
$sperren = true;
}
}
if($anzahl <=0 && $anzahl_stueckliste <=0) {
if($sperren) {
$this->app->DB->Update("UPDATE artikel SET intern_gesperrt = 1 WHERE id='$id'");
}
else{
$this->app->DB->Update("UPDATE artikel SET geloescht='1', nummer='DEL' WHERE id='$id'");
// Lager reseten
$this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE artikel='$id'");
$this->app->DB->Delete("DELETE FROM lager_reserviert WHERE artikel='$id'");
$this->app->DB->Delete("DELETE FROM lager_charge WHERE artikel='$id'");
$this->app->DB->Delete("DELETE FROM lager_bewegung WHERE artikel='$id'");
$this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE artikel='$id'");
$this->app->DB->Delete("DELETE FROM einkaufspreise WHERE artikel='$id'");
$this->app->DB->Delete("DELETE FROM verkaufspreise WHERE artikel='$id'");
$this->app->DB->Delete("DELETE FROM artikelbaum_artikel WHERE artikel='$id'");
$this->app->DB->Delete("DELETE FROM artikel_arbeitsanweisung WHERE artikel='$id'");
$this->app->DB->Delete("DELETE FROM eigenschaften WHERE artikel='$id'");
$this->app->DB->Delete(
sprintf('DELETE FROM shopexport_artikel WHERE artikel = %d', $id)
);
$this->app->DB->Delete(
sprintf('DELETE FROM shopexport_artikeluebertragen WHERE artikel = %d', $id)
);
//TODO vielleicht besser machen? mit Hinweis oder so
}
$this->app->DB->Update("UPDATE artikel SET variante=0,variante_von=0 WHERE variante_von='$id' AND variante_von > 0");
$this->app->erp->RunHook('article_delete', 1, $id);
return ['success'=>true, 'msg'=>["
Der Artikel \"$name_de\" und der Lagerbestand wurde gelöscht
"]];
}
$msg = [];
if($anzahl > 0){
$msg[] = "
Der Artikel \"$name_de\" ist Belegen eingebucht. Gefunden: $anzahl
";
}
if($anzahl_stueckliste > 0){
$msg[] = "
Der Artikel \"$name_de\" ist in $anzahl_stueckliste Stückliste(n) vorhanden.
";
}
return ['success'=>true, 'msg'=>$msg];
}
/**
* @param null|int $id
*
* @return bool|void
*/
public function ArtikelDelete($id = null)
{
$intern = false;
if($id !== null) {
$intern = true;
} else{
$id = $this->app->Secure->GetGET('id');
}
$ret = $this->deleteArticleById($id);
if($intern) {
return $ret;
}
$msg = '';
foreach($ret['msg'] as $m) {
$msg .= $this->app->erp->base64_url_encode($m);
}
$this->app->Location->execute('index.php?module=artikel&action=list&msg='.$msg);
}
public function ArtikelCreate()
{
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'getkategorien')
{
$projekttmp = $this->app->Secure->GetPOST('projekt');
if($projekttmp)
{
$projekttmp = explode(' ', $projekttmp);
$projekttmp = reset($projekttmp);
$projekttmp = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '$projekttmp' LIMIT 1");
}
$_artikelart = $this->app->erp->GetArtikelgruppe($projekttmp);
foreach($_artikelart as $k => $v){
echo '';
}
$this->app->ExitXentral();
}
$this->app->Tpl->Add('JQUERYREADY','
$(\'#projekt\').on("change",function(){
$.ajax({
url: \'index.php?module=artikel&action=create&cmd=getkategorien\',
type: \'POST\',
dataType: \'text\',
data: {projekt:$("#projekt").val() },
success: function(data) {
$(\'select[name="typ"]\').html(data);
}});
});
$(\'#projekt\').on("focusout",function(){
$.ajax({
url: \'index.php?module=artikel&action=create&cmd=getkategorien\',
type: \'POST\',
dataType: \'text\',
data: {projekt:$("#projekt").val() },
success: function(data) {
$(\'select[name="typ"]\').html(data);
}});
});
');
$this->app->Tpl->Set('UEBERSCHRIFT','Artikel (Neu anlegen)');
$this->app->Tpl->Set('ABBRECHEN',"");
// $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Artikel anlegen");
$this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Zurück zur Übersicht');
parent::ArtikelCreate();
}
function ArtikelListMenu()
{
$this->app->erp->MenuEintrag('index.php?module=artikel&action=list','Übersicht');
$this->app->erp->MenuEintrag('index.php?module=artikel&action=create','Neuen Artikel anlegen');
}
protected function formatArticleList($articleListStr, $delimiter = ';')
{
$articleListStr = explode($delimiter, $articleListStr);
foreach($articleListStr as $key => $value) {
if((int)$value > 0) {
$articleListStr[$key] = (int)$value;
} else {
unset($articleListStr[$key]);
}
}
return array_unique($articleListStr);
}
public function ArtikelList()
{
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'delete') {
$ret = ['success' => 0];
if($this->app->erp->RechteVorhanden('artikel', 'delete')) {
$articleList = $this->formatArticleList($this->app->Secure->GetPOST('list'));
if(!empty($articleList)) {
foreach($articleList as $article) {
$r = $this->deleteArticleById($article, true);
if($r['success']){
$ret['success'] = 1;
} else {
$ret['error'] = reset($r['msg']);
}
}
} else {
$ret['error'] = 'Es sind keine Artikel ausgewählt worden';
}
}else{
$ret['error'] = 'Sie haben nicht die Rechte Artikel zu löschen';
}
echo json_encode($ret);
$this->app->ExitXentral();
}
if($cmd === 'getshopuebertragung')
{
$liste = $this->formatArticleList($this->app->Secure->GetPOST('list'));
$ret = array('html'=>'','success'=>0);
if(!empty($liste))
{
$ret['articlelist'] = implode(';', $liste);
foreach($liste as $v)
{
$this->app->erp->CheckShopTabelle($v);
}
$shops = $this->app->DB->SelectArr('SELECT s.id,s.bezeichnung FROM artikel_onlineshops AS ao
INNER JOIN shopexport s ON ao.shop = s.id AND s.aktiv = 1 AND (s.lagerexport = 1 OR s.artikelexport = 1)
WHERE ao.aktiv = 1 AND ao.artikel IN ('.implode(', ',$liste).')
GROUP BY s.id, s.bezeichnung
');
if(empty($shops))
{
$ret['error'] = 'Es sind keine aktiven Shops verknüpft';
}else{
$ret['success'] = 1;
foreach($shops as $shop)
{
$this->app->Tpl->Add('LISTE','
'.$shop['bezeichnung'].':
');
}
$ret['html'] = $this->app->Tpl->Parse('', 'artikel_listonlineshops.tpl', 1);
}
}
echo json_encode($ret);
$this->app->ExitXentral();
}
if(($frmshops = $this->app->Secure->GetPOST('shop')) && ($articlelist = $this->app->Secure->GetPOST('articlelist'))){
$articlelist = explode(';',$articlelist);
$articlelista = [];
foreach($articlelist as $v)
{
if((int)$v > 0)
{
$articlelista[] = (int)$v;
}
}
$allready = (int)$this->app->DB->Select('SELECT count(DISTINCT ao.shop,ao.artikel)
FROM artikel_onlineshops AS ao
INNER JOIN shopexport s ON ao.shop = s.id AND s.aktiv = 1 AND (s.lagerexport = 1 OR s.artikelexport = 1)
INNER JOIN shopexport_artikeluebertragen AS sa ON ao.artikel = sa.artikel AND ao.shop = sa.shop
WHERE ao.aktiv = 1 AND ao.artikel IN ('.implode(', ',$articlelista).') AND s.id IN ('.implode(', ',$frmshops).')');
$this->app->DB->Insert('INSERT INTO `shopexport_artikeluebertragen` (shop, artikel)
SELECT ao.shop,ao.artikel FROM artikel_onlineshops AS ao
INNER JOIN shopexport s ON ao.shop = s.id AND s.aktiv = 1 AND (s.lagerexport = 1 OR s.artikelexport = 1)
LEFT JOIN shopexport_artikeluebertragen AS sa ON ao.artikel = sa.artikel AND ao.shop = sa.shop
WHERE ISNULL(sa.id) AND ao.aktiv = 1 AND ao.artikel IN ('.implode(', ',$articlelista).') AND s.id IN ('.implode(', ',$frmshops).')');
$anz = $this->app->DB->affected_rows();
$msg = $this->app->erp->base64_url_encode('
Es wurden '.($anz > 0?$anz:'keine') .' Artikel zum Übertragen übergeben'.($allready > 0?' (Es sind bereits '. $allready.' Einträge vorhanden)':'').'.
");
$standardbild = $this->app->erp->GetEtikettenbild($id,true);
if($standardbild==''){
$standardbild = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$id' LIMIT 1");
}
if($standardbild > 0){
//$this->app->Tpl->Add('BILD', "");
$this->app->Tpl->Set('BILD',
''
);
}
if($external=='1')
{
$menge = $this->app->Secure->GetGET('menge');
}
if($menge!='')
{
//$nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1");
//$projekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$id' LIMIT 1");
$name_de = $this->app->erp->UmlauteEntfernen($this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1"));
//$name_de_base64 = $this->app->erp->base64_url_encode($name_de);
if(!is_numeric($etikettenauswahl)) {
$etikettenauswahl = 'artikel_klein';
}
$variablen = null;
if($mhd){
$variablen['mhd'] = $this->app->String->Convert($mhd,'%3.%2.%1','%1-%2-%3');
$variablen['mhd2'] = $mhd;
$variablen['mhd3'] = date('ymd',strtotime($mhd));
}
if($charge){
$variablen['charge'] = $charge;
}
if($seriennummer){
$variablen['seriennummer'] = $seriennummer;
}
$this->app->erp->EtikettenDrucker($etikettenauswahl,$menge,'artikel',$id,$variablen,'',$etikettendrucker);
}
if($external=='1')
{
$this->app->Location->execute($_SERVER['HTTP_REFERER']);
}
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd === 'get'){
$id = (int)$this->app->Secure->GetPOST('id');
$data = $this->app->DB->SelectRow("SELECT al.id, e.id as label, al.type, al.amount, d.id as printer
FROM article_label al
LEFT JOIN etiketten e ON al.label_id = e.id
LEFT JOIN drucker d ON al.printer_id = d.id
WHERE al.id = '$id' LIMIT 1");
if(empty($data)) {
$data['id'] = 0;
$data['labelname'] = '';
$data['type'] = '';
$data['amount'] = '';
$data['printername'] = 1;
}
echo json_encode($data);
$this->app->ExitXentral();
}
elseif($cmd === 'save'){
$id = (int)$this->app->Secure->GetPOST('id');
$articleId = $this->app->Secure->GetPOST('article');
$label = trim($this->app->Secure->GetPOST('label'));
$type = trim($this->app->Secure->GetPOST('type'));
$amount = trim($this->app->Secure->GetPOST('amount'));
$printer = $this->app->Secure->GetPOST('printer');
$error = "";
if($label == ""){
$error .= "Bitte ein Etikett auswählen\n";
}else{
$labelId = $this->app->DB->Select("SELECT id FROM etiketten WHERE id = '$label' LIMIT 1");
if($labelId <= 0 || $labelId == ''){
$error .= "Bitte gültiges Etikett auswählen\n";
}
}
if($type == ""){
$error .= "Bitte Art auswählen"."\n";
}
if($amount == "" || $amount <= 0){
$error .= "Mindestmenge ist 1"."\n";
}else{
$amount = (int)$amount;
}
//PFLICHTFELD?
if($printer == ""){
$error .= "Bitte einen Drucker auswählen"."\n";
}else{
$printerId = $this->app->DB->Select("SELECT id FROM drucker WHERE id = '$printer' LIMIT 1");
if($printerId <= 0 || $printerId == ''){
$error .= "Bitte gültigen Drucker auswählen\n";
}
}
$labelAlreadyExists = $this->app->DB->Select("SELECT id
FROM article_label
WHERE label_id = '$labelId' AND type = '$type' AND article_id = '$articleId'
AND id != '$id' LIMIT 1");
if($labelAlreadyExists != '' && $labelAlreadyExists > 0){
$error .= "Dieses Label gibt es bereits für diesen Artikel mit dieser Art";
}
if($error == ""){
if($id){
$this->app->DB->Update("UPDATE article_label SET label_id = '$labelId', type = '$type', amount = '$amount', printer_id = '$printerId' WHERE id = '$id'");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}else{
$this->app->DB->Insert("INSERT INTO article_label (article_id, label_id, type, amount, printer_id)
VALUES ('$articleId', '$labelId', '$type', '$amount', '$printerId')");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
}else{
echo json_encode(array('status'=>0,'statusText'=>$error));
$this->app->ExitXentral();
}
}elseif($cmd == 'delete'){
$id = (int) $this->app->Secure->GetPOST('id');
if($id)
$this->app->DB->Update("DELETE FROM article_label WHERE id = '$id'");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
$articleLabels = $this->app->erp->GetSelectEtiketten('artikel_klein',$etikettenauswahl);
$this->app->Tpl->Set("ARTICLELABELS", $articleLabels);
$articleLabelPrinter = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='2'");
$articleLabelPrinterSelection = "";
for($i=0;$i<(!empty($articleLabelPrinter)?count($articleLabelPrinter):0);$i++)
{
$articleLabelPrinterSelection .="";
}
$this->app->Tpl->Set("ARTICLELABELPRINTER", $articleLabelPrinterSelection);
$this->app->YUI->TableSearch('TAB1','artikel_etiketten', "show","","",basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','artikel_etiketten.tpl');
}
public function ArtikelOnlineShop()
{
$id = $this->app->Secure->GetGET('id');
// neue warengruppe hinzugefuegt
$artikelgruppe = $this->app->Secure->GetPOST('artikelgruppe');
$ok= $this->app->Secure->GetPOST('ok');
if($artikelgruppe!='' && $ok=='') {
$this->app->DB->Insert("INSERT INTO artikel_artikelgruppe (id,artikel,artikelgruppe) VALUES ('','$id','$artikelgruppe')");
}
//warengruppe geloescht
$sid= $this->app->Secure->GetGET('sid');
$cmd= $this->app->Secure->GetGET('cmd');
if($sid!='' && $cmd==='del') {
$this->app->DB->DELETE("DELETE FROM artikel_artikelgruppe WHERE id='$sid' LIMIT 1");
}
if($sid!='' && $cmd==='image') {
$this->app->DB->DELETE("UPDATE artikel SET standardbild='$sid' WHERE id='$id' LIMIT 1");
}
$name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$id' LIMIT 1");
$nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$id' LIMIT 1");
$this->app->Tpl->Set('SUBSUBHEADING',"Online-Shop Attribute: $name ($nummer)");
$this->app->Tpl->Set('AKTIV_TAB1','selected');
//Warengruppen
$tmp = new EasyTable($this->app);
$tmp->Query("SELECT a.bezeichnung, aa.id FROM artikel_artikelgruppe aa LEFT JOIN artikelgruppen a ON a.id=aa.artikelgruppe WHERE artikel='$id'");
$tmp->DisplayNew('WARENGRUPPEN',"");
$shop = $this->app->DB->Select("SELECT shop FROM artikel WHERE id='$id' LIMIT 1");
$arr = $this->app->DB->SelectArr("SELECT bezeichnung,id FROM artikelgruppen WHERE shop='$shop'");
$html = '';
if(!empty($arr)){
foreach ($arr as $key => $value) {
$html .= "";
}
}
$this->app->Tpl->Add('WARENGRUPPEN',"
");
$this->app->Tpl->Add('WARENGRUPPEN',"
");
// standard bild
$standardbild = $this->app->DB->Select("SELECT standardbild FROM artikel WHERE id='$id'");
$tmp = new EasyTable($this->app);
$tmp->Query("SELECT d.titel, d.id FROM datei d LEFT JOIN datei_stichwoerter s ON d.id=s.datei
LEFT JOIN datei_version v ON v.datei=d.id
WHERE s.objekt='Artikel' AND s.parameter='$id' AND s.subjekt='Shopbild' AND d.geloescht=0");
$tmp->DisplayNew('HAUPTBILD',
"");
$standardbild_name = $this->app->DB->Select("SELECT titel FROM datei WHERE id='$standardbild'");
$this->app->Tpl->Add('HAUPTBILD'," Standardbild: $standardbild_name");
$this->app->Tpl->Parse('PAGE','onlineshop.tpl');
$this->app->BuildNavigation=false;
}
function ArtikelNewList()
{
$this->app->Tpl->Parse('PAGE','datatable.tpl');
}
function ArtikelStuecklisteUpload()
{
$this->app->Tpl->Set('TAB1','
Datei:
');
$this->app->Tpl->Parse('PAGE','tabview.tpl');
}
function ArtikelStuecklisteImport($parsetarget='')
{
$id = $this->app->Secure->GetGET('id');
//$this->app->BuildNavigation=false;
$vorlage = $this->app->Secure->GetPOST('vorlage');
if($vorlage==='altium'){
$result = $this->StuecklisteImport(
array('menge'=>'Menge','nummer'=>'Artikelnummer','wert'=>'Wert','bauform'=>'Package','referenz'=>'Referenz'),
array('menge'=>2,'nummer'=>13,'bauform'=>5,'wert'=>6,'referenz'=>3),
';',$parsetarget);
}
else if($vorlage==='solidedgest2'){
$result = $this->StuecklisteImport(
array('nummer'=>'Artikelnummer','menge'=>'Menge'),
array('nummer'=>2,'menge'=>5),
';',$parsetarget);
}
else if($vorlage==='minimal'){
$result = $this->StuecklisteImport(
array('nummer'=>'Artikelnummer','menge'=>'Menge'),
array('nummer'=>1,'menge'=>2),
';',$parsetarget);
}
else {
$result = $this->StuecklisteImport(
array('nummer'=>'Artikelnummer','menge'=>'Menge'),
array('nummer'=>1,'menge'=>2),
';',$parsetarget);
}
if(is_array($result))
{
$fehlerhaftes_bauteil = '';
$this->app->DB->Delete("DELETE FROM stueckliste WHERE stuecklistevonartikel='$id'");
foreach($result as $key=>$value)
{
$value['menge'] = str_replace(',','.',$value['menge']);
$artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$value['nummer']."' AND nummer!='' LIMIT 1");
$maxsort = $this->app->DB->Select("SELECT MAX(sort) FROM stueckliste WHERE stuecklistevonartikel='".$id."'") + 1;
if($artikelid > 0)
{
if(!$this->app->erp->IstStuecklistenZirkel($artikelid, $id))
{
$this->app->DB->Insert("INSERT INTO stueckliste
(id,sort,artikel,menge,wert,bauform,referenz,stuecklistevonartikel,firma) VALUE ('','$maxsort','$artikelid','".$value['menge']."',
'".$value['wert']."','".$value['bauform']."','".$value['referenz']."','$id','".$this->app->User->GetFirma()."')");
}else{
$fehlerhaftes_bauteil .= 'Stückliste enthält Artikel die einen Zirkelbezug verursachen! ';
}
}else {
if($value['nummer']!=''){
$fehlerhaftes_bauteil .= 'Unbekannte Artikelnummer: ' . $value['nummer'] . ' (Menge ' . $value['menge'] . ' Stück) ';
}
}
}
if($fehlerhaftes_bauteil!='')
{
$this->app->Tpl->Set($parsetarget,"
Die erste Zeile die Daten Ihrer Stueckliste enthält
Die Spalten: Menge und Artikelnummer
";
} else {
$findcols .= "
";
}
$this->app->Tpl->Set($parsetarget,$findcols);
if(!empty($result)) {
return $result;
}
}
function getArtikelThumbnailDateiVersion($id)
{
$datei = $this->app->DB->SelectArr('
SELECT
datei_version.id
FROM
datei_stichwoerter
INNER JOIN datei_version ON datei_version.datei = datei_stichwoerter.datei
WHERE
datei_stichwoerter.objekt LIKE "artikel"
AND
datei_stichwoerter.parameter = "' . $id . '"
AND
(datei_stichwoerter.subjekt like "Shopbild" OR datei_stichwoerter.subjekt like "Druckbild" OR datei_stichwoerter.subjekt like "Bild" OR datei_stichwoerter.subjekt like "Gruppenbild")
ORDER BY datei_stichwoerter.subjekt like "Shopbild" DESC,subjekt like "Druckbild" DESC, datei_stichwoerter.subjekt like "Bild" DESC,datei_stichwoerter.sort, datei_version.version DESC
');
if(empty($datei)){
return;
}
foreach($datei as $v)
{
$pfad = $this->app->erp->GetDateiPfadVersion($v['id']);
if(file_exists($pfad)){
return $v['id'];
}
}
}
/**
* @param int $articleId
* @param int $projectId
* @param int $size
*
* @return string
*/
public function getThumbnailCacheFilename($articleId, $projectId, $size = 100)
{
return $this->app->getTmpFolder().$this->app->Conf->WFdbname
.'/'.implode('/',str_split($articleId)).'/'.$articleId.'_'.$projectId.'_'.$size.'_'.$size;
}
public function ArtikelThumbnailCache()
{
$ajaxthumbnail = !empty($this->app->Secure->POST['ajaxthumbnail'])?(int)$this->app->Secure->POST['ajaxthumbnail']:'';
if(!empty($ajaxthumbnail)) {
return;
}
$direct = !empty($this->app->Secure->GET['direkt'])?(int)$this->app->Secure->GET['direkt']:'';
if(!empty($direct)) {
return;
}
$vorschau = !empty($this->app->Secure->GET['bildvorschau'])?$this->app->Secure->GET['bildvorschau']:'';
$dark = !empty($this->app->Secure->GET['dark']);
$projectid = !empty($this->app->Secure->GET['projectid'])?(int)$this->app->Secure->GET['projectid']:0;
$noPicture = $vorschau === 'KEINBILD' || $vorschau == '';
$projectOk = null;
if(!$noPicture) {
$projectOk = $this->app->User->projectOk($projectid);
if($projectOk === null) {
return;
}
}
if($noPicture || !$projectOk){
if($dark) {
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png');
}else{
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png');
}
header('Content-type: image/png');
if($vorschau === 'KEINBILD') {
header('Cache-Control: public, max-age=14400, s-maxage=14400');
header('Pragma: ');
header('Expires: '.date('D, d M Y H:i:s e'), time()+14400);
header('Content-type: image/jpg');
}
echo $str;
exit; //kein ExitXentral, damit die Datenbank nicht geladen wird (mit isset)
}
$id = !empty($this->app->Secure->GET['id'])?(int)$this->app->Secure->GET['id']:0;
if($id <= 0) {
return;
}
$file = $this->getThumbnailCacheFilename($id, $projectid);
if(!file_exists($file) || filesize($file) === 0) {
return;
}
$type = mime_content_type($file);
switch($type) {
case 'image/png':
case 'png':
header('Content-type: image/png');
break;
case 'image/gif':
case 'gif':
header('Content-type: image/gif');
break;
default:
header('Content-type: image/jpg');
break;
}
header('Cache-Control: public, max-age=14400, s-maxage=14400');
header('Pragma: ');
header('Expires: '.date('D, d M Y H:i:s e'), time()+14400);
header('Content-type: image/jpg');
echo file_get_contents($file);
exit;
}
/**
* @param int $fileId
*
* @return array|null
*/
public function getPreviewFileFromFileId($fileId)
{
if($fileId <= 0) {
return null;
}
return $this->app->DB->SelectRow(
sprintf(
'SELECT dv.*
FROM `datei_version` AS `dv`
WHERE dv.datei = %d
ORDER BY dv.version DESC
LIMIT 1',
$fileId
)
);
}
/**
* @param int $articleId
*
* @return array|null
*/
public function getPreviewFileFromArticleId($articleId)
{
if($articleId <= 0) {
return null;
}
return $this->app->DB->SelectRow(
sprintf(
"SELECT dv.*
FROM `datei_stichwoerter` AS `ds`
INNER JOIN `datei_version` AS `dv` ON dv.datei = ds.datei
INNER JOIN `datei` AS `d` ON dv.datei = d.id AND IFNULL(d.geloescht, 0) = 0
WHERE ds.objekt LIKE 'artikel' AND ds.parameter = '%d'
AND
(
ds.subjekt like 'Shopbild'
OR ds.subjekt like 'Druckbild'
OR ds.subjekt like 'Bild'
OR ds.subjekt like 'Gruppenbild'
)
ORDER BY ds.subjekt like 'Shopbild' DESC,
ds.subjekt like 'Druckbild' DESC,
ds.subjekt like 'Bild' DESC,
ds.sort,
dv.version DESC
LIMIT 1",
$articleId
)
);
}
/**
* @param int $id
* @param int $fileId
* @param int $size
*
* @return array
*/
public function ajaxGenerateThumbnail($id, $fileid = 0, $size = 100)
{
$res = ['result' => 0];
if($id <= 0) {
return $res;
}
$bildvorschau = $this->app->DB->SelectRow(
sprintf(
'SELECT `id`, `bildvorschau`, `projekt` FROM `artikel` WHERE `id` = %d LIMIT 1',
$id
)
);
if(empty($bildvorschau)) {
return $res;
}
if(!$size){
$size = 100;
}
$cachefolder = $this->app->Conf->WFuserdata . '/dms/' . $this->app->Conf->WFdbname . '/cache';
$datei = 0;
if($fileid > 0){
$datei = $this->getPreviewFileFromFileId($fileid);
}
if(empty($datei)) {
$datei = $this->getPreviewFileFromArticleId($id);
}
if(!empty($datei)) {
$contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true);
$created = false;
if(file_exists($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)
&& filesize($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size) === 0
&& @unlink($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)) {
$contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true);
}
if(!file_exists($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)) {
if(!class_exists('image')){
include dirname(__DIR__).'/lib/class.image.php';
}
$img = new image($this->app);
$img->scaledPicByFileId($datei['id'], $size, $size);
$created = true;
}
if(!file_exists($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size)) {
return $res;
}
if($bildvorschau['bildvorschau'] != $datei['id'].'_'.$size.'_'.$size) {
$this->app->DB->Update(
sprintf(
"UPDATE `artikel`
SET `bildvorschau` = '%d_%d_%d'
WHERE `id` = %d
LIMIT 1",
$datei['id'], $size, $size, $id
)
);
$res['reload'] = 1;
}
$res['status'] = 1;
$res['bildvorschau'] = $datei['id'].'_'.$size.'_'.$size;
$cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']);
$cachedir = dirname($cachefile);
if(!is_dir($cachedir) && !mkdir($cachedir, 0777,true) && !is_dir($cachedir)) {
return $res;
}
if(empty($bildvorschau['bildvorschau']) || $created || !is_file($cachefile) || filesize($cachefile) === 0) {
@copy($contentfile.'/'.$datei['id'].'_'.$size.'_'.$size, $cachefile);
}
return $res;
}
$cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']);
$cachedir = dirname($cachefile);
if(!is_dir($cachedir) && !mkdir($cachedir, 0777, true) && !is_dir($cachedir)) {
}
elseif(!is_file($cachefile) || filesize($cachefile) > 0) {
@file_put_contents($cachefile, '');
}
if($bildvorschau['bildvorschau'] !== 'KEINBILD') {
$this->app->DB->Update(
sprintf(
"UPDATE `artikel` SET `bildvorschau` = 'KEINBILD' WHERE `id` = %d LIMIT 1",
$id
)
);
$res['reload'] = 1;
}
$res['status'] = 1;
$res['bildvorschau'] = 'KEINBILD';
return $res;
}
public function ArtikelThumbnail() {
$id = $this->app->Secure->GetGET('id');
$fileid = $this->app->Secure->GetGET('fileid');
$size = $this->app->Secure->GetGET('size');
if(!$size){
$size = 100;
}
$cachefolder = $this->app->Conf->WFuserdata . '/dms/' . $this->app->Conf->WFdbname . '/cache';
if($this->app->Secure->GetPOST('ajaxthumbnail')) {
$res = $this->ajaxGenerateThumbnail($id, $fileid, $size);
echo json_encode($res);
$this->app->ExitXentral();
}
$direkt = $this->app->Secure->GetGET('direkt');
if($direkt && $id) {
$bildvorschau = $this->app->DB->SelectRow(
sprintf(
'SELECT `id`, `bildvorschau`, `projekt` FROM `artikel` WHERE `id` = %d LIMIT 1',
$id
)
);
$datei = 0;
if($fileid > 0){
$datei = $this->getPreviewFileFromFileId($fileid);
}
if(empty($datei)){
$datei = $this->getPreviewFileFromArticleId($id);
}
if($datei) {
$contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true)
.'/'.$datei['id'].'_'.$size.'_'.$size;
if(is_file($contentfile) && filesize($contentfile) === 0 && @unlink($contentfile)) {
$contentfileOld = $contentfile;
$contentfile = $this->app->erp->GetDMSPath($datei['id'].'_'.$size.'_'.$size, $cachefolder, true)
.'/'.$datei['id'].'_'.$size.'_'.$size;
if($contentfile !== $contentfileOld && is_file($contentfile) && filesize($contentfile) === 0) {
@unlink($contentfile);
}
}
if(!file_exists($contentfile)) {
$img = new image($this->app);
$img->scaledPicByFileId($datei['id'], $size, $size);
$contentfile = $this->app->erp->GetDMSPath(
$datei['id'].'_'.$size.'_'.$size, $cachefolder, true
)
.'/'.$datei['id'].'_'.$size.'_'.$size;
$cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']);
if(is_file($contentfile) && is_file($cachefile) && filesize($cachefile) === 0) {
@copy($contentfile, $cachefile);
}
}
if(file_exists($contentfile)) {
$str = file_get_contents($contentfile);
header('Cache-Control: public, max-age=14400, s-maxage=14400');
header('Pragma: ');
header('Expires: '.date('D, d M Y H:i:s e'), time()+14400);
header('Content-type: image/jpg');
echo $str;
$this->app->ExitXentral();
}
}
}
$vorschau = $this->app->Secure->GetGET('bildvorschau');
if(!$vorschau) {
if ($this->app->erp->Firmendaten('iconset_dunkel')) {
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png');
} else {
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png');
}
header('Content-type: image/png');
echo $str;
$this->app->ExitXentral();
}
if($vorschau === 'KEINBILD') {
if ($this->app->erp->Firmendaten('iconset_dunkel')) {
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png');
} else {
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png');
}
header('Content-type: image/png');
echo $str;
$this->app->ExitXentral();
}
if(file_exists($cachefolder)) {
$vorschaua = explode('_',$vorschau);
if((!empty($vorschaua)?count($vorschaua):0) == 3) {
$cachefolderPrev = $cachefolder;
$cachefolder = $this->app->erp->GetDMSPath($vorschau, $cachefolderPrev, true);
if(is_numeric($vorschaua[0]) && is_numeric($vorschaua[1]) && is_numeric($vorschaua[2])
&& file_exists($cachefolder.'/'.$vorschau) && filesize($cachefolder.'/'.$vorschau) === 0) {
if(@unlink($cachefolder.'/'.$vorschau)) {
$cachefolder = $this->app->erp->GetDMSPath($vorschau, $cachefolderPrev, true);
}
}
if(is_numeric($vorschaua[0]) && is_numeric($vorschaua[1]) && is_numeric($vorschaua[2]) && file_exists($cachefolder.'/'.$vorschau)) {
if($this->app->DB->Select(
sprintf(
"SELECT ds.id
FROM datei_stichwoerter AS ds
INNER JOIN datei_version AS dv ON dv.datei = ds.datei
WHERE ds.objekt LIKE 'artikel' AND ds.parameter = '%d' AND dv.id = %d LIMIT 1",
$id, $vorschaua[0]
)
)
) {
$bildvorschau = $this->app->DB->SelectRow(
"SELECT id, bildvorschau, projekt FROM artikel WHERE id = '$id' LIMIT 1"
);
$cachefile = $this->getThumbnailCacheFilename($id, (int)$bildvorschau['projekt']);
$cachedir = dirname($cachefile);
if(!is_dir($cachedir) && !mkdir($cachedir, 0777,true) && !is_dir($cachedir)) {
} elseif(!is_file($cachefile) || filesize($cachefile) === 0) {
@copy($cachefolder.'/'.$vorschau, $cachefile);
}
$str = file_get_contents($cachefolder.'/'.$vorschau);
header('Content-type: image/jpg');
echo $str;
$this->app->ExitXentral();
}
}
}
if($id) {
$this->app->DB->Update(sprintf("UPDATE artikel SET bildvorschau = '' WHERE id = %d", $id));
}
}
if ($this->app->erp->Firmendaten('iconset_dunkel')) {
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_dunkel.png');
}
else {
$str = file_get_contents(dirname(__DIR__) . '/themes/new/images/keinbild_hell.png');
}
header('Content-type: image/png');
echo $str;
$this->app->ExitXentral();
}
function ArtikelSchnellanlegen()
{
$submit_barcode = $this->app->Secure->GetPOST('submit_barcode');
$submit_anlegen = $this->app->Secure->GetPOST('submit_anlegen');
$barcode = $this->app->Secure->GetPOST('barcode');
$this->app->erp->MenuEintrag('index.php?module=artikel&action=list','zurück zur Übersicht');
$this->app->erp->MenuEintrag('index.php?module=artikel&action=schnellanlegen','Schnell anlegen');
if($submit_barcode!='' && $barcode!='')
{
$checkbarcode = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$barcode' OR herstellernummer='$barcode' OR nummer='$barcode' LIMIT 1");
if($checkbarcode > 0)
{
$name_nummer = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) FROM artikel WHERE id='$checkbarcode' LIMIT 1");
$msg = $this->app->erp->base64_url_encode("
Es gibt bereits einen Artikel mit dieser Nummer ($name_nummer).
");
$this->app->Location->execute("index.php?module=artikel&action=schnellanlegen&msg=$msg");
return;
}
// Default einträge laden wenn vorhanden
$mhd = $this->app->User->GetParameter('artikel_schnellanlegen_mhd');
$chargen = $this->app->User->GetParameter('artikel_schnellanlegen_chargen');
if($mhd=='1') {
$this->app->Tpl->Set('MHD','checked');
}
if($chargen=='1') {
$this->app->Tpl->Set('CHARGEN','checked');
}
$this->app->Tpl->Parse('PAGE','artikel_schnellanlegen_formular.tpl');
}
else if ($submit_anlegen=='') {
$this->app->Tpl->Parse('PAGE','artikel_schnellanlegen.tpl');
}
}
// Zum Uberladen in Custom
function ArtikelEigenschaftenSuche()
{
}
public function ArtikelBaumDetail()
{
$id = (int)$this->app->Secure->GetGET('id');
$todo = $this->app->Secure->GetGET('todo');
$artikel = (int)$this->app->Secure->GetGET('artikel');
if($todo === 'check')
{
if($artikel && $id)
{
$check = $this->app->DB->Select("SELECT id FROM artikelbaum_artikel WHERE artikel = '$artikel' AND kategorie = '$id' LIMIT 1");
if(!$check)
{
$this->app->DB->Insert("INSERT INTO artikelbaum_artikel (artikel, kategorie) VALUES ('$artikel','$id')");
}
}
$this->app->ExitXentral();
}
if($todo === 'uncheck'){
$this->app->DB->Delete("DELETE FROM artikelbaum_artikel WHERE artikel = '$artikel' AND kategorie = '$id'");
$this->app->ExitXentral();
}
echo "
hallo $id
";
$this->app->ExitXentral();
}
function getKategorien(&$kategorien, $parent)
{
$res = $this->app->DB->SelectArr("SELECT id, bezeichnung, parent FROM artikelkategorien WHERE geloescht != 1 AND parent = '$parent' ORDER by bezeichnung");
if($res)
{
foreach($res as $k => $v)
{
$kategorien[] = $v;
$this->getKategorien($kategorien, $v['id']);
}
}
}
public function ArtikelBaumAjax()
{
$disabled = true;
if($this->app->Secure->GetGET('enabled') == 1){
$disabled = false;
}
$id = (int)$this->app->Secure->GetGET('artikel');
$kategorien = null;
$this->getKategorien($kategorien, 0);
$kategorie = $this->app->DB->SelectArr("SELECT kategorie FROM artikelbaum_artikel WHERE artikel = '$id'");
if(!empty($kategorien))
{
$maxlvl = 0;
foreach($kategorien as $k => $v)
{
$ind[$v['id']] = $k;
if($v['parent'] == 0)
{
$kategorien[$k]['lvl'] = 0;
$name = 'node'.$k;
$$name = new stdClass();
$$name->id = $v['id'];
$$name->label = $v['bezeichnung'];
$$name->checkbox = true;
$$name->inode = false;
$$name->radio = false;
if($disabled)$$name->disabled = true;
if($kategorie)
{
foreach($kategorie as $ka)
{
if($ka['kategorie'] == $v['id'])$$name->checked = true;
}
}
$baum[] = $$name;
$kategorien[$k]['node'] = $$name;
}else{
if(isset($ind[$v['parent']]))
{
$name = 'node'.$k;
$$name = new stdClass();
$$name->id = $v['id'];
$$name->label = $v['bezeichnung'];
$$name->checkbox = true;
$$name->inode = false;
$$name->radio = false;
if($disabled)$$name->disabled = true;
if($kategorie)
{
foreach($kategorie as $ka)
{
if($ka['kategorie'] == $v['id'])$$name->checked = true;
}
}
$kategorien[$k]['node'] = $$name;
$kategorien[$k]['lvl'] = 1+$kategorien[$ind[$v['parent']]]['lvl'];
if($kategorien[$k]['lvl'] > $maxlvl)$maxlvl = $kategorien[$k]['lvl'];
$kategorien[$ind[$v['parent']]]['inode'] = true;
//$kategorien[$ind[$v['parent']]]['node']->inode = true;
$kategorien[$ind[$v['parent']]]['node']->open = true;
$kategorien[$ind[$v['parent']]]['node']->branch[] = $$name;
}
}
}
echo json_encode($baum);
$this->app->erp->ExitWawi();
}
echo '[]';
$this->app->erp->ExitWawi();
}
public function ArtikelBaum()
{
$extraurl = '';
if($this->app->Secure->GetPOST('enabled'))
{
$extraurl = '&enabled=1';
$this->app->Tpl->Set('BUTTONBEARBEITEN','');
}elseif($this->app->erp->RechteVorhanden('artikel','baumedit')){
$this->app->Tpl->Set('BUTTONBEARBEITEN', '');
}
$id = $this->app->Secure->GetGET('id');
$url = 'index.php?module=artikel&action=baumajax'.$extraurl.'&artikel='.$id;
$this->ArtikelMenu();
$this->app->Tpl->Set('URL',$url);
$this->app->Tpl->Parse('PAGE','artikel_baum.tpl');
}
public function ArtikelBaumEdit()
{
//Rechte
$this->app->ExitXentral();
}
public function ArtikelFreifelder(){
$this->ArtikelMenu();
$artikelid = $this->app->Secure->GetGET('id');
if($this->app->Secure->GetPOST('nachladen') != ''){
$sqla = null;
for ($i = 1; $i <= 40; $i++) {
$sqla[] = ' SELECT '.$i.' as nummer ';
}
$sql = "INSERT INTO artikel_freifelder (artikel, sprache, nummer, wert)
SELECT '$artikelid', s.iso, n.nummer,''
FROM (SELECT iso FROM sprachen WHERE aktiv = 1 AND iso <> 'DE' AND iso <> '' GROUP BY iso) s
INNER JOIN (".implode(' UNION ', $sqla).") n
LEFT JOIN artikel_freifelder af ON s.iso = af.sprache AND af.artikel = '$artikelid' AND n.nummer = af.nummer
WHERE isnull(af.id)
";
$this->app->DB->Insert($sql);
}
$this->app->YUI->TableSearch('TAB1','artikelfreifelder_list', 'show','','',basename(__FILE__), __CLASS__);
$this->app->Tpl->Parse('PAGE','artikelfreifelder_list.tpl');
}
public function ArtikelFreifelderEdit(){
if($this->app->Secure->GetGET('cmd')==='get'){
$id = (int)$this->app->Secure->GetPOST('id');
$sprache = $this->app->Secure->GetPOST('sprache');
$nummer = (int)$this->app->Secure->GetPOST('nummer');
for($i=1; $i<=40; $i++){
$freifelderfirmendaten[] = '(SELECT '.$i.' AS nummer, if(f.freifeld'.$i." != '', f.freifeld".$i.", CONCAT('Freifeld ',".$i.')) AS bezeichnung FROM firmendaten f)';
$freifeldtypen[] = '(SELECT '.$i.' AS nummer, wert AS inputtyp FROM firmendaten_werte WHERE name = CONCAT("freifeld",'.$i.',"typ"))';
}
if($sprache != '' && $sprache !== 'DE'){
$data = $this->app->DB->SelectRow('SELECT af.id, af.nummer as nummer, af.wert, af.sprache, f.bezeichnung, ft.inputtyp
FROM artikel_freifelder af
LEFT JOIN ('.implode(' UNION ALL ', $freifelderfirmendaten).") f ON af.nummer = f.nummer
LEFT JOIN (".implode(' UNION ALL ', $freifeldtypen).") ft ON af.nummer = ft.nummer
WHERE af.id = '$id'
LIMIT 1");
}elseif($sprache === 'DE'){
$data = $this->app->DB->SelectRow('SELECT a.id, '.$nummer.' as nummer, a.freifeld'.$nummer." AS wert, 'DE' AS sprache,
(SELECT IF(f.freifeld".$nummer." != '', f.freifeld".$nummer.", CONCAT('Freifeld ',".$nummer.")) FROM firmendaten f) AS bezeichnung,
(SELECT wert AS inputtyp FROM firmendaten_werte ft WHERE name = CONCAT('freifeld',".$nummer.",'typ')) AS inputtyp
FROM artikel a
WHERE a.id = '$id'
LIMIT 1");
}else{
$data = null;
}
if(empty($data)){
$data['id'] = 0;
$data['wert'] = '';
$data['sprache'] = '';
$data['bezeichnung'] = '';
$data['nummer'] = '';
$data['inputtyp'] = 'einzeilig';
}
echo json_encode($data);
$this->app->ExitXentral();
}
$this->app->Tpl->Parse('PAGE', 'artikelfreifelder_list.tpl');
}
public function ArtikelFreifelderSave(){
$id = (int)$this->app->Secure->GetPOST('id');
$inhalt = trim($this->app->Secure->GetPOST('freifeldinhalttext'));
$sprache = $this->app->Secure->GetPOST('sprache');
$nummer = (int)$this->app->Secure->GetPOST('nummer');
$error = '';
if($error == ''){
if($id){
if($sprache === 'DE'){
if($nummer > 0)
$this->app->DB->Update("UPDATE artikel SET freifeld".$nummer." = '$inhalt' WHERE id = '$id'");
}else{
$this->app->DB->Update("UPDATE artikel_freifelder SET wert = '$inhalt' WHERE id = '$id'");
}
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
if($sprache === 'DE'){
echo json_encode(array('status'=>0,'statusText'=>'Kein gültiger Artikel'));
$this->app->ExitXentral();
}
$this->app->DB->Insert("INSERT INTO artikel_freifelder (wert) VALUES ('$inhalt')");
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
echo json_encode(array('status'=>0,'statusText'=>$error));
$this->app->ExitXentral();
}
public function ArtikelFreifelderDelete(){
$id = (int) $this->app->Secure->GetPOST('id');
if($id > 0){
$this->app->DB->Delete("DELETE FROM artikel_freifelder WHERE id = '$id' LIMIT 1");
}
echo json_encode(array('status'=>1));
$this->app->ExitXentral();
}
public function Install(){
$this->app->erp->CheckTable('artikel_freifelder');
$this->app->erp->CheckColumn('id', 'int(11)', 'artikel_freifelder', 'NOT NULL AUTO_INCREMENT');
$this->app->erp->CheckColumn('artikel', 'int(11)', 'artikel_freifelder', 'NOT NULL DEFAULT 0');
$this->app->erp->CheckColumn('sprache', 'varchar(255)', 'artikel_freifelder', 'NOT NULL');
$this->app->erp->CheckColumn('nummer', 'int(11)', 'artikel_freifelder', 'NOT NULL');
$this->app->erp->CheckColumn('wert', 'text', 'artikel_freifelder', 'NOT NULL');
$this->app->erp->CheckIndex('artikel_freifelder', 'artikel');
$this->app->erp->CheckColumn('lieferzeit_standard_einheit', 'varchar(64)', 'einkaufspreise', 'NOT NULL');
$this->app->erp->CheckColumn('lieferzeit_aktuell_einheit', 'varchar(64)', 'einkaufspreise', 'NOT NULL');
$this->app->erp->CheckAlterTable("ALTER TABLE `artikel_freifelder` CHANGE `wert` `wert` text NOT NULL");
$this->app->erp->CheckTable('parts_list_alternative');
$this->app->erp->CheckColumn('id', 'int(11)', 'parts_list_alternative', 'NOT NULL AUTO_INCREMENT');
$this->app->erp->CheckColumn('parts_list_id', 'int(11)', 'parts_list_alternative', 'DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('alternative_article_id', 'int(11)', 'parts_list_alternative', 'DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('reason', 'varchar(255)', 'parts_list_alternative', 'DEFAULT "" NOT NULL');
$this->app->erp->CheckTable('artikel_cached_fields');
$this->app->erp->CheckColumn('id','int(11)','artikel_cached_fields','NOT NULL AUTO_INCREMENT');
$this->app->erp->CheckColumn('artikel','INT(11)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('project_id','INT(11)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('project_name','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('number','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('ean','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('factory_number','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('name','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('manufactor','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('customfield1','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('customfield2','VARCHAR(255)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('ek_customnumber','VARCHAR(1024)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('vk_customnumber','VARCHAR(1024)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('eigenschaften','VARCHAR(1024)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('is_storage_article','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('is_variant','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('variant_from_id','INT(11)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('variant_from_name','VARCHAR(64)','artikel_cached_fields','DEFAULT \'\' NOT NULL');
$this->app->erp->CheckColumn('is_partlist','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('is_shipping','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('locked','TINYINT(1)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('zeitstempel','TIMESTAMP','artikel_cached_fields','DEFAULT CURRENT_TIMESTAMP NOT NULL');
$this->app->erp->CheckColumn('lager_verfuegbar','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('ek_netto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('ek_brutto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('vk_netto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('vk_brutto','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('inzulauf','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('imsperrlager','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('inproduktion','DECIMAL(14,4)','artikel_cached_fields','DEFAULT 0 NOT NULL');
$this->app->DB->Select('SELECT lager_gesamt FROM artikel_cached_fields LIMIT 1');
if($this->app->DB->error()){
$this->app->erp->CheckColumn('lager_gesamt', 'DECIMAL(14,4)', 'artikel_cached_fields', 'DEFAULT 0 NOT NULL');
$this->app->DB->Update("UPDATE artikel_cached_fields acf
INNER JOIN artikel a ON acf.artikel = a.id AND a.lagerartikel = 1
LEFT JOIN (
SELECT lpi2.artikel, sum(lpi2.menge) as minmenge
FROM lager_platz_inhalt lpi2
GROUP BY lpi2.artikel
) verf ON a.id = verf.artikel
SET acf.lager_gesamt = ifnull(verf.minmenge,0)
");
}
$this->app->erp->CheckIndex('artikel_cached_fields', 'artikel');
$this->app->erp->CheckTable('article_label');
$this->app->erp->CheckColumn('id', 'int(11)', 'article_label', 'NOT NULL AUTO_INCREMENT');
$this->app->erp->CheckColumn('article_id', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('label_id', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('printer_id', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('amount', 'int(11)', 'article_label', 'DEFAULT 0 NOT NULL');
$this->app->erp->CheckColumn('type', 'varchar(64)', 'article_label', 'NOT NULL');
$this->app->erp->RegisterHook('supersearch_detail', 'artikel', 'ArtikelSupersearchDetail');
$this->app->erp->RegisterHook('LayouttemplateAttachmentItemsDelete', 'artikel', 'ArtikelDeleteFile');
$totalArticles = $this->app->DB->Select('SELECT COUNT(a.id) AS `total` FROM `artikel` AS `a` LIMIT 1');
if ($totalArticles > 0) {
$this->app->DB->Update('UPDATE `artikel` SET `intern_gesperrt` = `gesperrt` WHERE `gesperrt` = 1');
}
}
/**
* @param int $fileId
* @param string $cmd
*
* @return void
*/
public function ArtikelDeleteFile($fileId, $cmd)
{
if ($cmd !== 'artikel') {
return;
}
$query = sprintf("UPDATE `artikel` AS `a`
INNER JOIN `datei_stichwoerter` AS `ds` ON a.id = ds.parameter
INNER JOIN `datei_version` AS `dv` ON ds.id = dv.datei
INNER JOIN (SELECT MAX(dv.version) AS `version` FROM `datei_version` AS `dv` WHERE dv.datei = %d) AS `v` ON v.version = dv.version
SET a.bildvorschau = ''
WHERE ds.id = %d AND a.bildvorschau = CONCAT(dv.id,'_100_100')", $fileId, $fileId);
$this->app->DB->Update($query);
}
/**
* @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery
* @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult
*
* @return void
*/
public function ArtikelSupersearchDetail($detailQuery, $detailResult)
{
if ($detailQuery->getGroupKey() !== 'articles') {
return;
}
$articleId = $detailQuery->getItemIdentifier();
$sql = sprintf(
"SELECT a.id, CONCAT(a.name_de, ' (', a.nummer, ')') AS title, a.name_de, a.kurztext_de, a.nummer
FROM artikel AS a
WHERE a.id = '%s' LIMIT 1",
$this->app->DB->real_escape_string($articleId)
);
$article = $this->app->DB->SelectRow($sql);
if (empty($article)) {
return;;
}
$detailResult->setTitle($article['title']);
$detailResult->addButton('Artikel Details', sprintf('index.php?module=artikel&action=edit&id=%s', $article['id']));
$detailResult->setDescription(sprintf('
%s
', strip_tags($article['kurztext_de'])));
$detailResult->setMiniDetailUrl(sprintf('index.php?module=artikel&action=minidetail&id=%s', $article['id']));
}
public function createNewAricleCache()
{
$this->app->DB->Insert(
"INSERT INTO artikel_cached_fields
(artikel,lager_verfuegbar, ek_netto, vk_netto, ek_brutto, vk_brutto, inzulauf,imsperrlager,inproduktion)
SELECT a.id,0, 0, 0, 0, 0, 0, 0, 0
FROM artikel a
LEFT JOIN artikel_cached_fields acf ON a.id = acf.artikel
WHERE isnull(acf.id)"
);
}
public function createAricleCache()
{
$ermaessigt = (float)$this->app->erp->Firmendaten('steuersatz_ermaessigt');
if($ermaessigt <= 0)
{
$ermaessigt = 7;
}
$normal = (float)$this->app->erp->Firmendaten('steuersatz_normal');
if($normal <= 0)
{
$normal = 19;
}
$normal = 1+ $normal / 100;
$ermaessigt = 1+ $ermaessigt / 100;
$this->app->DB->Update(
"UPDATE artikel_cached_fields AS acf
INNER JOIN artikel AS a ON acf.artikel = a.id
LEFT JOIN (
SELECT artikel, min(preis) as minpreis
FROM einkaufspreise
WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate())
AND preis > 0
GROUP BY artikel
) AS ek ON a.id = ek.artikel
LEFT JOIN (
SELECT artikel, min(preis) as minpreis
FROM einkaufspreise
WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate())
AND preis > 0
AND (ifnull(waehrung,'EUR') = 'EUR' OR waehrung = '')
GROUP BY artikel
) AS ek2 ON a.id = ek2.artikel
SET acf.ek_netto = ifnull( ifnull(ek2.minpreis,ek.minpreis),0),
acf.ek_brutto = if(a.umsatzsteuer = 'befreit', 1, if(a.umsatzsteuer = 'ermaessigt', $ermaessigt,$normal))
*ifnull( ifnull(ek2.minpreis,ek.minpreis),0)
WHERE a.geloescht <> 1"
);
$this->app->DB->Update(
"UPDATE artikel_cached_fields AS acf
INNER JOIN artikel AS a ON acf.artikel = a.id
LEFT JOIN (
SELECT artikel, min(preis) as minpreis
FROM verkaufspreise
WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate())
AND (gueltig_ab = '0000-00-00' OR gueltig_ab <= curdate())
AND art <> 'Gruppe' AND art <> 'gruppe'
AND adresse=0 AND preis > 0
GROUP BY artikel
) AS vk ON a.id = vk.artikel
LEFT JOIN (
SELECT artikel, min(preis) as minpreis
FROM verkaufspreise
WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate())
AND (gueltig_ab = '0000-00-00' OR gueltig_ab <= curdate())
AND art <> 'Gruppe' AND art <> 'gruppe'
AND adresse=0 AND preis > 0 AND (ifnull(waehrung,'EUR') = 'EUR' OR waehrung = '')
GROUP BY artikel
) AS vk2 ON a.id = vk2.artikel
LEFT JOIN (
SELECT artikel, min(preis) as minpreis
FROM verkaufspreise
WHERE (gueltig_bis = '0000-00-00' OR gueltig_bis >= curdate())
AND (gueltig_ab = '0000-00-00' OR gueltig_ab <= curdate())
AND art <> 'Gruppe' AND art <> 'gruppe'
AND adresse=0 AND preis > 0 AND (ifnull(waehrung,'EUR') = 'EUR' OR waehrung = '') AND ab_menge = 1
GROUP BY artikel
) AS vk3 ON a.id = vk3.artikel
SET acf.vk_netto = ifnull( ifnull( ifnull(vk3.minpreis,vk2.minpreis),vk.minpreis),0),
acf.vk_brutto = if(a.umsatzsteuer = 'befreit', 1, if(a.umsatzsteuer = 'ermaessigt', $ermaessigt,$normal))
*ifnull( ifnull( ifnull(vk3.minpreis,vk2.minpreis),vk.minpreis),0)
WHERE a.geloescht <> 1"
);
$this->app->DB->Update(
"UPDATE artikel_cached_fields AS acf
INNER JOIN artikel AS a ON acf.artikel = a.id
LEFT JOIN artikel AS a2 ON a.variante_von = a2.id AND a.variante = 1 AND IFNULL(a2.geloescht,0) = 0 AND a2.nummer <> 'DEL'
LEFT JOIN projekt as pr ON a.projekt = pr.id
LEFT JOIN (
SELECT pos.artikel, SUM(pos.menge) AS produktion
FROM produktion_position pos
LEFT JOIN produktion p ON pos.produktion = p.id
WHERE p.status = 'gestartet' AND pos.sort = 1
GROUP BY pos.artikel
) AS prod ON a.id = prod.artikel
LEFT JOIN (
SELECT artikel, sum(bp.menge - bp.geliefert) as zulauf
FROM bestellung_position AS bp
LEFT JOIN bestellung b ON bp.bestellung=b.id
WHERE b.status!='storniert' AND b.status!='abgeschlossen' AND bp.geliefert 1"
);
$ekNumbers = $this->app->DB->Query(
sprintf(
"SELECT DISTINCT artikel, bestellnummer FROM einkaufspreise WHERE IFNULL(bestellnummer,'') <> '' ORDER BY artikel"
)
);
if($ekNumbers) {
$lastArtikel = 0;
$numbers = [];
while($row = $this->app->DB->Fetch_Assoc($ekNumbers)) {
if($row['artikel'] != $lastArtikel) {
if($lastArtikel > 0 && !empty($numbers)) {
$this->app->DB->Update(
sprintf(
"UPDATE artikel_cached_fields SET ek_customnumber = '%s' WHERE artikel = %d",
implode(',', $numbers), $lastArtikel
)
);
}
$numbers = [];
$lastArtikel = $row['artikel'];
}
$numbers[] = $this->app->DB->real_escape_string($row['bestellnummer']);
}
$this->app->DB->free($ekNumbers);
if($lastArtikel > 0 && !empty($numbers)) {
$this->app->DB->Update(
sprintf(
"UPDATE artikel_cached_fields SET ek_customnumber = '%s' WHERE artikel = %d",
implode(',', $numbers), $lastArtikel
)
);
}
}
$ekNumbers = $this->app->DB->Query(
sprintf(
"SELECT DISTINCT artikel, kundenartikelnummer
FROM verkaufspreise WHERE IFNULL(kundenartikelnummer,'') <> ''
ORDER BY artikel"
)
);
if($ekNumbers) {
$lastArtikel = 0;
$numbers = [];
while($row = $this->app->DB->Fetch_Assoc($ekNumbers)) {
if($row['artikel'] != $lastArtikel) {
if($lastArtikel > 0 && !empty($numbers)) {
$this->app->DB->Update(
sprintf(
"UPDATE artikel_cached_fields SET vk_customnumber = '%s' WHERE artikel = %d",
implode(',', $numbers), $lastArtikel
)
);
}
$numbers = [];
$lastArtikel = $row['artikel'];
}
$numbers[] = $this->app->DB->real_escape_string($row['kundenartikelnummer']);
}
$this->app->DB->free($ekNumbers);
if($lastArtikel > 0 && !empty($numbers)) {
$this->app->DB->Update(
sprintf(
"UPDATE artikel_cached_fields SET vk_customnumber = '%s' WHERE artikel = %d",
implode(',', $numbers), $lastArtikel
)
);
}
}
}
public function updateStorageToAricleCache()
{
$this->app->DB->Update(
"UPDATE artikel_cached_fields AS acf
INNER JOIN artikel AS a ON acf.artikel = a.id AND a.lagerartikel = 1
LEFT JOIN (
SELECT lpi2.artikel, sum(lpi2.menge) AS minmenge
FROM lager_platz_inhalt lpi2
GROUP BY lpi2.artikel
) AS verf ON a.id = verf.artikel
SET acf.lager_gesamt = ifnull(verf.minmenge,0)"
);
}
public function updateAttributesToArticleCache()
{
$this->app->DB->Update(
sprintf(
"UPDATE artikel_cached_fields AS acf
LEFT JOIN artikeleigenschaftenwerte AS aew ON acf.artikel = aew.artikel
LEFT JOIN artikeleigenschaften AS ae
ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name <> ''
SET acf.eigenschaften = ''
WHERE ISNULL(ae.name)"
)
);
$attributes = $this->app->DB->Query(
"SELECT aew.artikel, ae.name,aew.wert
FROM artikeleigenschaftenwerte AS aew
INNER JOIN artikeleigenschaften AS ae
ON aew.artikeleigenschaften = ae.id AND ifnull(ae.geloescht,0) = 0 AND ae.name != ''
ORDER BY aew.artikel, ae.name, aew.wert"
);
if(!$attributes) {
return;
}
$value = [];
$actAricle = 0;
while($row = $this->app->DB->Fetch_Assoc($attributes)) {
if($actAricle > 0 && $row['artikel'] != $actAricle) {
$this->app->DB->Update(
sprintf(
"UPDATE artikel_cached_fields SET eigenschaften = '%s' WHERE artikel = %d",
implode(', ', $value), $actAricle
)
);
$value = [];
}
$actAricle = $row['artikel'];
$value[] = $this->app->DB->real_escape_string($row['name']).': '
.$this->app->DB->real_escape_string($row['wert']);
}
$this->app->DB->free($attributes);
if(empty($value)) {
return;
}
$this->app->DB->Update(
sprintf(
"UPDATE artikel_cached_fields SET eigenschaften = '%s' WHERE artikel = %d",
implode(', ', $value), $actAricle
)
);
}
/**
* @return int
*/
public function updateArticlePicturePreview($limit = 1000)
{
$articleIds = $this->app->DB->SelectFirstCols(
sprintf(
"SELECT art.id
FROM `artikel` AS `art`
WHERE IFNULL(art.bildvorschau,'') = ''
LIMIT %d",
$limit
)
);
$res = 0;
if(empty($articleIds)) {
return 0;
}
$files = $this->app->DB->SelectFirstCols(
sprintf(
"SELECT ds.parameter
FROM `datei_stichwoerter` AS `ds`
WHERE ds.objekt LIKE 'artikel' AND ds.parameter IN ('%s') AND ds.datei > 0",
implode("','", $articleIds)
)
);
$toSetNull = array_diff($articleIds, $files);
if(!empty($toSetNull)) {
$this->app->DB->Update(
sprintf(
"UPDATE `artikel` SET `bildvorschau` = 'KEINBILD' WHERE IFNULL(bildvorschau,'') = '' AND `id` IN (%s)",
implode(',', $toSetNull)
)
);
$res = $this->app->DB->affected_rows();
if($res <= 0) {
$res = 0;
}
}
if(!empty($files)) {
foreach($files as $id) {
try {
$ret = $this->ajaxGenerateThumbnail($id);
}
catch(Exception $e) {
$ret = ['result' => 0];
}
if(!empty($ret['bildvorschau'])) {
$res++;
}
}
}
return $res;
}
public function updateExplodingPartListSellableToAricleCache()
{
$this->app->DB->Update(
"UPDATE artikel_cached_fields AS acf
INNER JOIN artikel AS a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 1
LEFT JOIN
(
SELECT s.stuecklistevonartikel, min(FLOOR((ifnull(lpi.menge,0) - if(ifnull(r.menge,0) > ifnull(off.menge,0),ifnull(r.menge,0),ifnull(off.menge,0))) / s.menge)) as minmenge
FROM
(
SELECT artikel,sum(menge) as menge ,stuecklistevonartikel
FROM stueckliste
WHERE art!='it'
GROUP BY artikel,stuecklistevonartikel
) AS s
INNER JOIN artikel AS a2 ON s.artikel = a2.id
LEFT JOIN (
SELECT lpi2.artikel, sum(lpi2.menge) as menge
FROM lager_platz_inhalt lpi2
INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id
WHERE lp.sperrlager <> 1
GROUP BY lpi2.artikel
) AS lpi ON a2.id = lpi.artikel
LEFT JOIN (
SELECT artikel, ifnull(sum(menge),0) as menge
FROM lager_reserviert
GROUP BY artikel
) AS r ON a2.id = r.artikel
LEFT JOIN (
SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel
FROM auftrag_position ap
INNER JOIN auftrag a ON a.id=ap.auftrag
WHERE a.status='freigegeben'
GROUP BY ap.artikel
) AS off ON a2.id = off.artikel
GROUP BY s.stuecklistevonartikel
) AS verf ON acf.artikel = verf.stuecklistevonartikel
SET acf.lager_verfuegbar = if(ifnull(verf.minmenge,0) <= 0,0, verf.minmenge)"
);
}
public function updatePartListJitArticleStorageCache()
{
$jitArticles = $this->app->DB->Query(
'SELECT `id`
FROM `artikel`
WHERE `juststueckliste` = 1 AND `lagerartikel` = 0 AND (`geloescht` = 0 OR `geloescht` IS NULL)'
);
while($article = $this->app->DB->Fetch_Assoc($jitArticles)) {
$article = $article['id'];
$inStock = (float)$this->app->erp->ArtikelAnzahlLagerStueckliste($article);
if($inStock < 0) {
$inStock = 0;
}
$this->app->DB->Update(
sprintf(
'UPDATE `artikel_cached_fields` SET `lager_gesamt` = %f WHERE `artikel` = %d',
$inStock, $article
)
);
}
$this->app->DB->free($jitArticles);
}
public function updatePartListSellableToAricleCache()
{
$this->app->DB->Update(
"UPDATE artikel_cached_fields AS acf
INNER JOIN artikel AS a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 1
LEFT JOIN
(
SELECT s.stuecklistevonartikel, min(FLOOR((ifnull(lpi.menge,0) - if(ifnull(r.menge,0) > ifnull(off.menge,0),ifnull(r.menge,0),ifnull(off.menge,0))) / s.menge)) as minmenge
FROM
(
SELECT artikel,sum(menge) as menge ,stuecklistevonartikel
FROM stueckliste
WHERE art!='it'
GROUP BY artikel,stuecklistevonartikel
) AS s
INNER JOIN artikel a2 ON s.artikel = a2.id
LEFT JOIN (
SELECT lpi2.artikel, sum(lpi2.menge) as menge
FROM lager_platz_inhalt lpi2
INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id
WHERE lp.sperrlager <> 1
GROUP BY lpi2.artikel
) AS lpi ON a2.id = lpi.artikel
LEFT JOIN (SELECT artikel, ifnull(sum(menge),0) as menge FROM lager_reserviert GROUP BY artikel ) r ON a2.id = r.artikel
LEFT JOIN (SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel FROM auftrag_position ap INNER JOIN auftrag a ON a.id=ap.auftrag WHERE a.status='freigegeben' GROUP BY ap.artikel) off ON a2.id = off.artikel
GROUP BY s.stuecklistevonartikel
) verf ON acf.artikel = verf.stuecklistevonartikel
LEFT JOIN (
SELECT artikel, ifnull(sum(menge),0) as menge
FROM lager_reserviert
GROUP BY artikel
) AS r2 ON acf.artikel = r2.artikel
LEFT JOIN (
SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel
FROM auftrag_position ap
INNER JOIN auftrag a ON a.id=ap.auftrag
WHERE a.status='freigegeben'
GROUP BY ap.artikel
) AS off2 ON acf.artikel = off2.artikel
SET acf.lager_verfuegbar =
if(
ifnull(verf.minmenge,0) -
if(
ifnull(r2.menge,0) > ifnull(off2.menge,0),
ifnull(r2.menge,0),
ifnull(off2.menge,0)
) <= 0,
0,
verf.minmenge -
if(
ifnull(r2.menge,0) > ifnull(off2.menge,0),
ifnull(r2.menge,0),
ifnull(off2.menge,0)
)
)
");
}
public function updateQuarantineStoreToAricleCache() {
$this->app->DB->Update(
"UPDATE artikel_cached_fields acf
INNER JOIN artikel a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 0
LEFT JOIN (
SELECT lpi2.artikel, sum(lpi2.menge) as minmenge
FROM lager_platz_inhalt lpi2
INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id
WHERE lp.sperrlager = 1
GROUP BY lpi2.artikel
) verf ON a.id = verf.artikel
SET acf.imsperrlager = ifnull(verf.minmenge,0)"
);
}
public function updateSellableToAricleCache()
{
$this->app->DB->Update(
"UPDATE artikel_cached_fields acf
INNER JOIN artikel a ON acf.artikel = a.id AND a.lagerartikel = 1 AND a.juststueckliste = 0
LEFT JOIN (SELECT artikel, ifnull(sum(menge),0) as menge FROM lager_reserviert GROUP BY artikel ) r2 ON acf.artikel = r2.artikel
LEFT JOIN (SELECT ifnull(SUM(ap.menge),0) as menge,ap.artikel FROM auftrag_position ap INNER JOIN auftrag a ON a.id=ap.auftrag WHERE a.status='freigegeben' GROUP BY ap.artikel) off2 ON acf.artikel = off2.artikel
LEFT JOIN (SELECT lpi2.artikel, sum(lpi2.menge) as minmenge FROM lager_platz_inhalt lpi2 INNER JOIN lager_platz lp ON lpi2.lager_platz = lp.id WHERE lp.sperrlager <> 1 GROUP BY lpi2.artikel ) verf ON a.id = verf.artikel
SET acf.lager_verfuegbar =
if(
ifnull(verf.minmenge,0) -
if(
ifnull(r2.menge,0) > ifnull(off2.menge,0),
ifnull(r2.menge,0),
ifnull(off2.menge,0)
) <= 0,
0,
verf.minmenge -
if(
ifnull(r2.menge,0) > ifnull(off2.menge,0),
ifnull(r2.menge,0),
ifnull(off2.menge,0
)
)
)"
);
}
public function ArtikelLagerInfo($artikel)
{
$summe = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz
WHERE lpi.artikel='$artikel' AND lp.sperrlager!=1");
$reserviert = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$artikel'");// AND datum >= NOW()");
$auftraege = $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap
LEFT JOIN artikel a ON a.id=ap.artikel LEFT JOIN auftrag auf ON auf.id=ap.auftrag WHERE a.id='$artikel' AND a.lagerartikel=1 AND auf.status='freigegeben'");
$liefern= $this->app->DB->Select("SELECT SUM(ap.menge) as menge,ap.bezeichnung FROM auftrag_position ap, auftrag aa, artikel a WHERE a.id=ap.artikel AND aa.id = ap.auftrag AND a.id='$artikel' AND a.lagerartikel=1 AND aa.status='freigegeben'");
$reserviert_im_versand = $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$artikel' AND objekt='lieferschein'");
$berechnet = $summe - $auftraege - $reserviert_im_versand;
$offenebestellungen = $this->app->DB->Select("SELECT SUM(bp.menge-bp.geliefert) as menge FROM bestellung_position bp, bestellung bs, artikel a WHERE a.id=bp.artikel AND bs.id = bp.bestellung AND a.id='$artikel' AND a.lagerartikel=1 AND (bs.status='freigegeben' OR bs.status='versendet') AND bp.menge > bp.geliefert");
$verkaufte = $auftraege + $reserviert_im_versand;
$berechnetmitoffenebestellungen = $berechnet + $offenebestellungen;
if($reserviert=='') {
$reserviert =0;
}
if($liefern <=0) {
$liefern=0;
}
$verkaufbare = $this->app->erp->ArtikelAnzahlVerkaufbar($artikel);
$summe = round($summe, $this->app->erp->GetLagerNachkommastellen());
$reserviert = round($reserviert ,$this->app->erp->GetLagerNachkommastellen());
$liefern = round($liefern ,$this->app->erp->GetLagerNachkommastellen());
$verkaufte = round($verkaufte ,$this->app->erp->GetLagerNachkommastellen());
$berechnet = round($berechnet ,$this->app->erp->GetLagerNachkommastellen());
$verkaufbare = round($verkaufbare ,$this->app->erp->GetLagerNachkommastellen());
$berechnetmitoffenebestellungen = round($berechnetmitoffenebestellungen ,$this->app->erp->GetLagerNachkommastellen());
return " Lagerbestand: $summe | Reserviert: $reserviert | Offene Aufträge: $liefern | Verkaufte: $verkaufte | Berechneter Bestand: $berechnet | Verkaufbare: $verkaufbare | Berechneter Bestand mit offenen Bestellungen: $berechnetmitoffenebestellungen