diff --git a/scripts/fiberplan/sync_preorder_qgis.php b/scripts/fiberplan/sync_preorder_qgis.php new file mode 100644 index 000000000..16f416cfc --- /dev/null +++ b/scripts/fiberplan/sync_preorder_qgis.php @@ -0,0 +1,204 @@ +me = new User(INTERNAL_USER_ID); + $this->layout()->setTemplate(null); + } + + public static function returnJson($data) { + self::$capturedResult = $data; + } +} + +$apiParams = [ + 'mod' => 'Preorder', + 'action' => 'api', + 'do' => 'getFilteredPreorders', + 'filter' => [ + 'preordercampaign_id' => 99 + ] +]; + +new PreorderSyncWrapper($apiParams); +$response = PreorderSyncWrapper::$capturedResult; + +if (!$response || !isset($response['status']) || $response['status'] !== 'OK') { + die("Fehler beim Abrufen der Daten oder keine Daten erhalten.\n"); +} + +$preorders = $response['result']['preorders'] ?? []; + +try { + $dsn = "pgsql:host=$pgHost;port=$pgPort;dbname=$pgDb"; + $pdo = new PDO($dsn, $pgUser, $pgPass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); +} catch (PDOException $e) { + die("Verbindung zu PostgreSQL fehlgeschlagen: " . $e->getMessage() . "\n"); +} + +$pdo->exec("CREATE SCHEMA IF NOT EXISTS $targetSchema"); + +$createTableSql = <<exec($createTableSql); + +$pdo->exec("ALTER TABLE $targetSchema.\"$targetTable\" ADD COLUMN IF NOT EXISTS company VARCHAR(255)"); +$pdo->exec("ALTER TABLE $targetSchema.\"$targetTable\" ADD COLUMN IF NOT EXISTS firstname VARCHAR(255)"); +$pdo->exec("ALTER TABLE $targetSchema.\"$targetTable\" ADD COLUMN IF NOT EXISTS lastname VARCHAR(255)"); +$pdo->exec("ALTER TABLE $targetSchema.\"$targetTable\" ADD COLUMN IF NOT EXISTS phone VARCHAR(100)"); +$pdo->exec("ALTER TABLE $targetSchema.\"$targetTable\" ADD COLUMN IF NOT EXISTS email VARCHAR(255)"); +$pdo->exec("ALTER TABLE $targetSchema.\"$targetTable\" ADD COLUMN IF NOT EXISTS status_code INTEGER"); +$pdo->exec("ALTER TABLE $targetSchema.\"$targetTable\" ADD COLUMN IF NOT EXISTS status_id INTEGER"); +$pdo->exec("ALTER TABLE $targetSchema.\"$targetTable\" ADD COLUMN IF NOT EXISTS oaid VARCHAR(255)"); + +$sqlUpsert = <<prepare($sqlUpsert); + +$processedIds = []; +$countUpsert = 0; +$countUnchanged = 0; +$countSkipped = 0; + +$pdo->beginTransaction(); + +foreach ($preorders as $po) { + $id = $po->id; + $gps_lat = $po->gps_lat; + $gps_long = $po->gps_long; + + if (empty($gps_lat) || empty($gps_long)) { + $countSkipped++; + continue; + } + + $latVal = str_replace(',', '.', $gps_lat); + $lonVal = str_replace(',', '.', $gps_long); + + $params = [ + ':id' => $id, + ':type' => $po->type, + ':type_label' => $po->type_label, + ':strasse' => $po->adb_strasse, + ':hausnummer' => $po->adb_hausnummer, + ':plz' => $po->adb_plz, + ':ort' => $po->adb_ort, + ':company' => $po->company, + ':firstname' => $po->firstname, + ':lastname' => $po->lastname, + ':phone' => $po->phone, + ':email' => $po->email, + ':status_code' => $po->status_code, + ':status_id' => $po->status_id, + ':oaid' => $po->oaid, + ':lat' => $latVal, + ':lon' => $lonVal + ]; + + $stmt->execute($params); + $processedIds[] = $id; + if ($stmt->rowCount() > 0) { + $countUpsert++; + } else { + $countUnchanged++; + } +} + +$deletedCount = 0; +if (!empty($processedIds)) { + $inQuery = implode(',', array_map('intval', $processedIds)); + $deleteSql = "DELETE FROM $targetSchema.\"$targetTable\" WHERE id NOT IN ($inQuery)"; + $deletedCount = $pdo->exec($deleteSql); +} else { + + if (count($preorders) == 0) { + } +} + +$pdo->commit(); + +//echo "Sync fertig.\n"; +//echo "Neu erstellt oder aktualisiert: $countUpsert\n"; +//echo "Unverändert (kein Update nötig): $countUnchanged\n"; +//echo "Ohne Koordinaten (übersprungen): $countSkipped\n"; +//echo "Gelöscht (nicht mehr in Quelle): $deletedCount\n"; \ No newline at end of file