From 4716c3156a3e58571d95617f332e6e24f456daf5 Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Thu, 15 May 2025 10:47:34 +0200 Subject: [PATCH] enhanced duplicate finder --- .../ADBWohneinheitController.php | 3 +- .../ADBWohneinheit/ADBWohneinheitModel.php | 77 +++++++++++++++++-- .../ADBWohneinheitDuplicate.js | 16 +++- 3 files changed, 86 insertions(+), 10 deletions(-) diff --git a/application/ADBWohneinheit/ADBWohneinheitController.php b/application/ADBWohneinheit/ADBWohneinheitController.php index face55bdb..65759b029 100644 --- a/application/ADBWohneinheit/ADBWohneinheitController.php +++ b/application/ADBWohneinheit/ADBWohneinheitController.php @@ -160,7 +160,8 @@ class ADBWohneinheitController extends mfBaseController { } protected function duplicateAction() { - $duplicateHomes = ADBWohneinheitModel::searchDuplicateExtref(); + $duplicateHomes = array_merge(ADBWohneinheitModel::searchDuplicateExtref(), + ADBWohneinheitModel::searchDuplicateOAID()); $JSGlobals = ["BASE_URL" => self::getUrl(""), "DASHBOARD_URL" => self::getUrl("Dashboard"), diff --git a/application/ADBWohneinheit/ADBWohneinheitModel.php b/application/ADBWohneinheit/ADBWohneinheitModel.php index 5fea54a18..ce2181c80 100644 --- a/application/ADBWohneinheit/ADBWohneinheitModel.php +++ b/application/ADBWohneinheit/ADBWohneinheitModel.php @@ -301,6 +301,7 @@ class ADBWohneinheitModel { while($data = $res->fetch_assoc()) { $duplicateExtrefs[] = $data['extref']; $duplicates[$data['extref']] = [ + "duplicateType" => "extref", 'extref' => $data['extref'], 'count' => $data['count'], 'homeData' => [] @@ -309,18 +310,83 @@ class ADBWohneinheitModel { if (!empty($duplicateExtrefs)) { $extrefList = "'" . implode("','", array_map([$db, 'real_escape_string'], $duplicateExtrefs)) . "'"; - $detailSql = "SELECT Wohneinheit.* - FROM Wohneinheit - LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id) - WHERE $where AND Wohneinheit.extref IN ($extrefList) - ORDER BY Wohneinheit.extref"; + $detailSql = "SELECT Wohneinheit.*, thetool.Address.company AS company, Hausnummer.rimo_id AS hausnummer_extref + FROM Wohneinheit + LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id) + LEFT JOIN Netzgebiet ON (Netzgebiet.id = Hausnummer.netzgebiet_id) + LEFT JOIN thetool.Network ON (Network.adb_netzgebiet_id = Netzgebiet.id) + LEFT JOIN thetool.Address ON (Network.owner_id = Address.id) + WHERE $where AND Wohneinheit.extref IN ($extrefList) + ORDER BY Wohneinheit.extref"; + $detailRes = $db->query($detailSql); while($homeData = $detailRes->fetch_assoc()) { $duplicates[$homeData['extref']]['homeData'][] = [ "id" => $homeData['id'], "oaid" => $homeData['oaid'], + "network_company" => $homeData['company'], "hausnummer_id" => $homeData['hausnummer_id'], + "hausnummer_extref" => $homeData['hausnummer_extref'], + "num" => $homeData['num'], + "nutzung" => $homeData['nutzung'], + "rimo_ex_state" => $homeData['rimo_ex_state'], + "rimo_op_state" => $homeData['rimo_op_state'], + "create" => $homeData['create'], + "edit" => $homeData['edit'], + ]; + } + } + + return array_values($duplicates); + } + + public static function searchDuplicateOAID($filter = []) { + $duplicates = []; + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME)->link; + $where = self::getSqlFilter($filter); + + $sql = "SELECT Wohneinheit.oaid, COUNT(*) as count + FROM Wohneinheit + LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id) + WHERE $where AND Wohneinheit.oaid IS NOT NULL + GROUP BY Wohneinheit.oaid + HAVING COUNT(*) > 1 + ORDER BY COUNT(*) DESC"; + + $res = $db->query($sql); + $duplicateOaids = []; + + while($data = $res->fetch_assoc()) { + $duplicateOaids[] = $data['oaid']; + $duplicates[$data['oaid']] = [ + "duplicateType" => "oaid", + 'oaid' => $data['oaid'], + 'count' => $data['count'], + 'homeData' => [] + ]; + } + + if (!empty($duplicateOaids)) { + $oaidList = "'" . implode("','", array_map([$db, 'real_escape_string'], $duplicateOaids)) . "'"; + $detailSql = "SELECT Wohneinheit.*, thetool.Address.company AS company, Hausnummer.rimo_id AS hausnummer_extref + FROM Wohneinheit + LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id) + LEFT JOIN Netzgebiet ON (Netzgebiet.id = Hausnummer.netzgebiet_id) + LEFT JOIN thetool.Network ON (Network.adb_netzgebiet_id = Netzgebiet.id) + LEFT JOIN thetool.Address ON (Network.owner_id = Address.id) + WHERE $where AND Wohneinheit.oaid IN ($oaidList) + ORDER BY Wohneinheit.oaid"; + + $detailRes = $db->query($detailSql); + while($homeData = $detailRes->fetch_assoc()) { + $duplicates[$homeData['oaid']]['homeData'][] = [ + "id" => $homeData['id'], + 'oaid' => $homeData['oaid'], + "extref" => $homeData['extref'], + "network_company" => $homeData['company'], + "hausnummer_id" => $homeData['hausnummer_id'], + "hausnummer_extref" => $homeData['hausnummer_extref'], "num" => $homeData['num'], "nutzung" => $homeData['nutzung'], "rimo_ex_state" => $homeData['rimo_ex_state'], @@ -337,4 +403,5 @@ class ADBWohneinheitModel { + } diff --git a/public/js/pages/ADBWohneinheitDuplicate/ADBWohneinheitDuplicate.js b/public/js/pages/ADBWohneinheitDuplicate/ADBWohneinheitDuplicate.js index 8197dbfd9..1179c00bb 100644 --- a/public/js/pages/ADBWohneinheitDuplicate/ADBWohneinheitDuplicate.js +++ b/public/js/pages/ADBWohneinheitDuplicate/ADBWohneinheitDuplicate.js @@ -5,7 +5,7 @@ Vue.component('a-d-b-wohneinheit-duplicate', {