* GPL v3+ * * Tab "Aufmaß" auf der Auftragskarte */ $res = 0; if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; $tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { $i--; $j--; } if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; if (!$res && file_exists("../main.inc.php")) $res = @include "../main.inc.php"; if (!$res && file_exists("../../main.inc.php")) $res = @include "../../main.inc.php"; if (!$res) die("Include of main fails"); require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/order.lib.php'; $langs->loadLangs(array('orders', 'eplan@eplan')); $id = GETPOSTINT('id'); $ref = GETPOST('ref', 'alpha'); $object = new Commande($db); if ($id > 0 || !empty($ref)) { $object->fetch($id, $ref); } if (!$object->id) { llxHeader('', 'Aufmaß'); print '
Auftrag nicht gefunden
'; llxFooter(); exit; } $pwa_url = getDolGlobalString('EPLAN_PWA_URL'); // Sicherheit if (!$user->hasRight('eplan', 'read')) accessforbidden(); llxHeader('', 'Aufmaß — '.$object->ref, '', '', 0, 0, '', '', '', 'mod-eplan'); // Auftrag-Header + Tabs $head = commande_prepare_head($object); print dol_get_fiche_head($head, 'aufmass', $langs->trans("Order"), -1, 'order'); // Auftrag-Info-Leiste dol_banner_tab($object, 'ref', '', 1, 'ref', 'ref'); print '
'; print '
'; // PWA-Link mit Auftrags-Kontext if (!empty($pwa_url)) { $pwa_link = $pwa_url . '/?auftrag=' . urlencode($object->ref) . '&kunde=' . urlencode($object->thirdparty->name ?? '') . '&auftrag_id=' . $object->id; print '
'; print '
'; print '
'; print 'Aufmaß für ' . dol_escape_htmltag($object->ref) . ''; if (!empty($object->thirdparty->name)) { print '
' . dol_escape_htmltag($object->thirdparty->name) . ''; } print '
QR mit Handy scannen oder Button klicken — Auftrag wird automatisch verknüpft.'; print '
'; print ''; print 'Aufmaß starten'; print '
'; print '
'; // QR-Code (clientseitig generiert, kein externer Tracking-Service) print '
'; print '
'; print '
'; // qrcode-generator (selbsthosting wäre besser, aber CDN ist akzeptabel — // bei fehlender Internet-Verbindung bleibt zumindest der Text-Link nutzbar) print ''; print ''; } else { print '
'; print ' ElektroPlan PWA-URL nicht konfiguriert. '; print 'Einstellungen öffnen'; print '
'; } // Aufmaß-Daten aus dem ElektroPlan-Backend laden — nur das mit DIESEM Auftrag // verknüpfte Projekt (über die Verknüpfungstabelle im Backend). $api_url = rtrim(getDolGlobalString('EPLAN_PWA_URL'), '/'); $projekt = null; $raeume = array(); if (!empty($api_url)) { // Kleiner GET-Helfer: liefert dekodiertes JSON-Array oder null $eplan_get = function ($pfad) use ($api_url) { $ch = curl_init($api_url.$pfad); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $resp = curl_exec($ch); $code = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($resp === false || $code < 200 || $code >= 300) return null; $daten = json_decode($resp, true); return is_array($daten) ? $daten : null; }; // Auftrag → projekt_id auflösen $verkn = $eplan_get('/api/dolibarr/auftraege/'.((int) $object->id).'/projekt'); $projekt_id = $verkn['projekt_id'] ?? null; if (!empty($projekt_id)) { $projekt = $eplan_get('/api/projekte/'.rawurlencode($projekt_id)); $raeume = $eplan_get('/api/projekte/'.rawurlencode($projekt_id).'/raeume'); if (!is_array($raeume)) $raeume = array(); } } print ''; print ''; print ''; print ''; if (!empty($projekt)) { // Gesamtfläche + Quellen aus den Räumen aggregieren $flaeche = 0.0; $quellen = array(); foreach ($raeume as $r) { $flaeche += (float) ($r['flaeche_m2'] ?? 0); $q = $r['quelle'] ?? ''; if ($q !== '' && !in_array($q, $quellen, true)) $quellen[] = $q; } $quelleLabel = empty($quellen) ? '-' : implode(', ', array_map(function ($q) { return $q === 'aufmass' ? 'Baustelle' : ($q === 'editor' ? 'Editor' : $q); }, $quellen)); // Öffnen-Link mit Auftrags-Kontext → PWA lädt das verknüpfte Projekt automatisch $open_link = $pwa_url . '/?auftrag=' . urlencode($object->ref) . '&kunde=' . urlencode($object->thirdparty->name ?? '') . '&auftrag_id=' . ((int) $object->id); print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; } else { print ''; } print '
GrundrissRäumeFlächeQuelleErstellt
'.dol_escape_htmltag($projekt['name'] ?? '-').''.count($raeume).''.($flaeche > 0 ? price($flaeche, 0, '', 0, 2).' m²' : '-').''.dol_escape_htmltag($quelleLabel).''.dol_print_date(strtotime($projekt['geaendert'] ?? $projekt['erstellt'] ?? ''), 'dayhour').''; if (!empty($pwa_url)) { print 'Öffnen'; } print '
'; if (empty($api_url)) { print 'ElektroPlan-Backend nicht erreichbar (PWA-URL nicht konfiguriert).'; } else { print 'Noch kein Aufmaß mit diesem Auftrag verknüpft. Starte ein neues Aufmaß über den Button oben.'; } print '
'; print '
'; // fichecenter print dol_get_fiche_end(); llxFooter(); $db->close();