240 lines
8.5 KiB
PHP
240 lines
8.5 KiB
PHP
<?php
|
|
// get for intelectra geraetezuordnung
|
|
|
|
/*if ($obj->attribute_17 != '') {
|
|
$sql = "SELECT * FROM import_geraetezuordnung WHERE anr='".$obj->attribute_17."'";
|
|
$result = $this->db->query($sql);
|
|
}
|
|
else {
|
|
$sql = "SELECT * FROM import_geraetezuordnung WHERE anr='".$obj->number."'";
|
|
$result = $this->db->query($sql);
|
|
}*/
|
|
|
|
$result = null;
|
|
|
|
// COMMENTED OUT - Wrong mapping logic
|
|
/*if (strlen($obj->number) == 8) {
|
|
$sql = "SELECT g.*
|
|
FROM krempl_geraete_22 g
|
|
INNER JOIN krempl_artikelgeraet_22 ag ON g.id = ag.geraet
|
|
INNER JOIN krempl_passendwie pw ON ag.ersatzteil = pw.id
|
|
INNER JOIN items i ON pw.navisionid = i.krempl_id
|
|
WHERE i.number = ".$this->db->real_escape_string($obj->number).";";
|
|
$result = $this->db->query($sql);
|
|
}*/
|
|
|
|
// ORIGINAL MONSTER-SQL (PERFORMANCE-KILLER!)
|
|
// 4-fach JOIN über 1.3M Zeilen krempl_artikelgeraet_22 = HORROR!
|
|
/*
|
|
ORIGINAL MONSTER-QUERY - AUSKOMMENTIERT FÜR STEP-BY-STEP ZERLEGUNG:
|
|
SELECT g.*
|
|
FROM krempl_geraete_22 g -- Gerätedaten (Ziel)
|
|
INNER JOIN krempl_artikelgeraet_22 ag ON g.id = ag.geraet -- 1.3M ROWS N:M Mapping!
|
|
INNER JOIN krempl_passendwie pw ON ag.ersatzteil = pw.id -- Ersatzteil-Mapping
|
|
INNER JOIN items i ON ( -- Item-Verknüpfung
|
|
pw.navisionid = i.attribute_7 -- Legacy Items
|
|
OR (LENGTH(i.number) >= 8 AND pw.navisionid = i.number) -- Moderne Items
|
|
)
|
|
WHERE i.number = obj->number
|
|
|
|
LOGIK:
|
|
1. Items (i) → finde Ersatzteile über attribute_7 oder number
|
|
2. Ersatzteile (pw) → finde krempl_artikelgeraet_22 Mappings
|
|
3. Mappings (ag) → finde passende Geräte
|
|
4. Geräte (g) → liefere Gerätedaten
|
|
*/
|
|
|
|
// STEP-BY-STEP ZERLEGUNG (Performance-Optimiert):
|
|
// FIX: Läuft für number >= 8 ODER wenn attribute_7 vorhanden (Legacy-Artikel)
|
|
if (strlen($obj->number) >= 8 || !empty($obj->attribute_7)) {
|
|
|
|
// STEP 1: Finde Ersatzteil-IDs für dieses Item
|
|
$ersatzteil_ids = array();
|
|
|
|
// Query 1A: Legacy Items (über attribute_7)
|
|
if (!empty($obj->attribute_7)) {
|
|
$sql1a = "SELECT id FROM krempl_passendwie WHERE navisionid = ".$this->db->real_escape_string($obj->attribute_7);
|
|
$result1a = $this->db->query($sql1a);
|
|
if ($result1a) {
|
|
while ($row = $result1a->fetch_assoc()) {
|
|
$ersatzteil_ids[] = $row['id'];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Query 1B: Moderne Items (über number, wenn >= 8 Zeichen)
|
|
$sql1b = "SELECT id FROM krempl_passendwie WHERE navisionid = ".$this->db->real_escape_string($obj->number);
|
|
$result1b = $this->db->query($sql1b);
|
|
if ($result1b) {
|
|
while ($row = $result1b->fetch_assoc()) {
|
|
$ersatzteil_ids[] = $row['id'];
|
|
}
|
|
}
|
|
|
|
// STEP 2: Finde Geräte-IDs für diese Ersatzteile
|
|
$geraet_ids = array();
|
|
if (!empty($ersatzteil_ids)) {
|
|
$ersatzteil_list = implode(',', array_map('intval', $ersatzteil_ids));
|
|
$sql2 = "SELECT DISTINCT geraet FROM krempl_artikelgeraet_22 WHERE ersatzteil IN ($ersatzteil_list)";
|
|
$result2 = $this->db->query($sql2);
|
|
if ($result2) {
|
|
while ($row = $result2->fetch_assoc()) {
|
|
$geraet_ids[] = $row['geraet'];
|
|
}
|
|
}
|
|
}
|
|
|
|
// STEP 3: Hole finale Gerätedaten
|
|
$result = false;
|
|
if (!empty($geraet_ids)) {
|
|
$geraet_list = implode(',', array_map('intval', $geraet_ids));
|
|
$sql3 = "SELECT * FROM krempl_geraete_22 WHERE id IN ($geraet_list)";
|
|
$result = $this->db->query($sql3);
|
|
if (!$result) {
|
|
$result = false; // Explizit setzen für Fallback
|
|
}
|
|
} else {
|
|
$result = false; // Explizit setzen für Fallback
|
|
}
|
|
}
|
|
|
|
if (!empty($obj->krempl_id) && (!isset($result) || !$result || $result->num_rows < 1)) {
|
|
$sql = "SELECT * FROM krempl_artikelgeraet_22 ka
|
|
left join krempl_geraete_22 kg on kg.id=ka.geraet
|
|
WHERE ka.ersatzteil=".$this->db->real_escape_string($obj->krempl_id)." AND not isnull(nr)";
|
|
$result = $this->db->query($sql);
|
|
}
|
|
|
|
$obj->geraetezuordnung = array();
|
|
if ($result) {
|
|
while ($obj1 = $result->fetch_object()) {
|
|
$obj->geraetezuordnung[] = $obj1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// get parent warengruppe
|
|
$sql = "select i.name, s.name, s2.name as wg from items i
|
|
left join item_structure_assign isa on isa.item_id=i.id
|
|
left join structure s on s.id=isa.structure_id
|
|
left join structure s2 on s2.id=s.parent_id
|
|
where i.id=".$obj->id.' AND s.active=1 LIMIT 1';
|
|
$result = $this->db->query($sql);
|
|
$parent_warengruppe = '';
|
|
if ($result) {
|
|
while ($obj1 = $result->fetch_object()) {
|
|
$parent_warengruppe = $obj1->wg;
|
|
}
|
|
}
|
|
|
|
$table_data = array();
|
|
foreach ($obj->geraetezuordnung as $geraet) {
|
|
$nr1 = str_replace('#', '', $geraet->nr);
|
|
$nr1 = str_replace('_', ' ', $nr1);
|
|
$nr2 = str_replace('#', '', $geraet->produktionsstart);
|
|
$nr2 = str_replace('_', ' ', $nr2);
|
|
$nr3 = str_replace('#', '', $geraet->produktionsende);
|
|
$nr3 = str_replace('_', ' ', $nr3);
|
|
$nr3 = empty($nr3) ? "" : " - ".$nr3;
|
|
$nr2 = $nr2.$nr3;
|
|
$bezeichnungoriginal = str_replace('#', '', $geraet->bezeichnungoriginal);
|
|
$bezeichnungoriginal = str_replace('_', ' ', $bezeichnungoriginal);
|
|
$bezeichnungoriginal = preg_replace('/\r\n|\n|\r/', '', $bezeichnungoriginal);
|
|
|
|
// Überprüfe, ob $bezeichnungoriginal leer ist, und verwende $geraet->modellBezeichnung falls ja
|
|
if (empty($bezeichnungoriginal) && !empty($geraet->modellBezeichnung)) {
|
|
$bezeichnungoriginal = str_replace('#', '', $geraet->modellBezeichnung);
|
|
$bezeichnungoriginal = str_replace('_', ' ', $bezeichnungoriginal);// Ersetze durch modellBezeichnung
|
|
} elseif (empty($bezeichnungoriginal)) {
|
|
$bezeichnungoriginal = "-"; // Oder einen Platzhalter, wenn auch modellBezeichnung leer ist
|
|
}
|
|
|
|
|
|
$einkaufsmoeglichkeitencached = $nr1." ".$nr2;
|
|
$table_data[$einkaufsmoeglichkeitencached][$bezeichnungoriginal][] = array($nr1, $nr2);
|
|
}
|
|
|
|
|
|
/* $html = '<table border="0" cellpadding="2" cellspacing="0">';
|
|
foreach ($table_data as $key => $marken) {
|
|
$y = 0;
|
|
$html .= '<tr class="intelectra_item_table_header"><td colspan="3"><h4><b>'.$obj->name.' passend zu '.$key.' '.$parent_warengruppe.'</b></h4></tr>';
|
|
$html .= '<tr class="intelectra_item_table_header"><td>Geräte-/Modellbezeichnung</td><td>E-, Service-, Produktions- oder Hauptnummer</td><td>Zusatz-, F- oder Seriennummer oder Fertigungsdatum</td></tr>';
|
|
foreach ($marken as $geraet => $nummern) {
|
|
$color = 'intelectra_table_row1';
|
|
if ($y % 2 == 1) {
|
|
$color = 'intelectra_table_row2';
|
|
}
|
|
$z = 0;
|
|
foreach ($nummern as $nummer) {
|
|
if ($z == 0) {
|
|
$html .= '<tr class="'.$color.'"><td>'.$geraet.'</td><td>'.$nummer[0].'</td><td>'.$nummer[1].'</td></tr>';
|
|
} else {
|
|
$html .= '<tr class="'.$color.'"><td> </td><td>'.$nummer[0].'</td><td>'.$nummer[1].'</td></tr>';
|
|
}
|
|
$z++;
|
|
}
|
|
$y++;
|
|
}
|
|
}
|
|
$html .= '</table>'; */
|
|
|
|
|
|
$html = '<div class="tba_container">';
|
|
|
|
foreach ($table_data as $key => $marken) {
|
|
$y = 0;
|
|
|
|
// Eine einzige Überschrift pro Artikel
|
|
if ($y == 0) {
|
|
$html .= '<div class="tba_section">';
|
|
$html .= '<div class="tba_header"><h4><b>'.$obj->name.' passend zu '.$key.' '.$parent_warengruppe.'</b></h4></div>';
|
|
$html .= '<div class="tba_grid_header">';
|
|
$html .= '<div class="tba_col">Geräte-/Modellbezeichnung</div>';
|
|
$html .= '<div class="tba_col">E-, Service-, Produktions- oder Hauptnummer</div>';
|
|
$html .= '<div class="tba_col">Zusatz-, F- oder Seriennummer oder Fertigungsdatum</div>';
|
|
$html .= '</div>'; // Header-Ende
|
|
}
|
|
|
|
foreach ($marken as $geraet => $nummern) {
|
|
$colorClass = ($y % 2 == 1) ? 'tba_row_odd' : 'tba_row_even';
|
|
$z = 0;
|
|
|
|
foreach ($nummern as $nummer) {
|
|
$html .= '<div class="tba_grid ' . $colorClass . '">';
|
|
if ($z == 0) {
|
|
$html .= '<div class="tba_col">'.$geraet.'</div>';
|
|
} else {
|
|
$html .= '<div class="tba_col"> </div>';
|
|
}
|
|
$html .= '<div class="tba_col mitlink"><a href="#" class="geraete-link" data-nr="'.htmlentities($nummer[0]).'">'.htmlentities($nummer[0]).'</a></div>';
|
|
$html .= '<div class="tba_col">'.$nummer[1].'</div>';
|
|
$html .= '</div>'; // Zeile Ende
|
|
$z++;
|
|
}
|
|
$y++;
|
|
}
|
|
|
|
$html .= '</div>'; // Section Ende
|
|
}
|
|
|
|
$html .= '</div>'; // Container Ende
|
|
|
|
$shopArticle->geraetezuordnung = $html;
|
|
|
|
|
|
|
|
$int = $this->createIntWithTableData($html);
|
|
|
|
|
|
// base price calc
|
|
if ($obj->attribute_11 && $obj->attribute_15) {
|
|
$obj->sample_unit = $obj->attribute_15;
|
|
if (strstr($obj->sample_unit, '100')) {
|
|
$obj->sample_price = $obj->shop_price_1 / ($obj->attribute_11 * 10);
|
|
} else {
|
|
$obj->sample_price = $obj->shop_price_1 / $obj->attribute_11;
|
|
}
|
|
}
|