'))) 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->service = $this->app->Container->get('ArticleService');
$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('
");
$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;
}
$idnew = $this->service->CopyArticle($id, $einkaufspreise, $verkaufspreise, $dateien, $eigenschaften, $anweisungen, $stuecklisten, $freifelderuebersetzung);
echo json_encode(array('status'=>1,'url'=>'index.php?module=artikel&action=edit&id='.$idnew));
$this->app->ExitXentral();
}
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 d.geloescht = 0
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