* 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 '
';
// 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 '
';
}
// 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 '| Grundriss | Räume | Fläche | Quelle | Erstellt | | ';
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 '| '.dol_escape_htmltag($projekt['name'] ?? '-').' | ';
print ''.count($raeume).' | ';
print ''.($flaeche > 0 ? price($flaeche, 0, '', 0, 2).' m²' : '-').' | ';
print ''.dol_escape_htmltag($quelleLabel).' | ';
print ''.dol_print_date(strtotime($projekt['geaendert'] ?? $projekt['erstellt'] ?? ''), 'dayhour').' | ';
print '';
if (!empty($pwa_url)) {
print 'Öffnen';
}
print ' | ';
print '
';
} else {
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 '
';
print '
'; // fichecenter
print dol_get_fiche_end();
llxFooter();
$db->close();