added new duplicate homeid view

This commit is contained in:
Luca Haid
2025-05-14 09:47:14 +02:00
parent f08178ada2
commit 287f4dea9a
3 changed files with 164 additions and 1 deletions

View File

@@ -158,5 +158,25 @@ class ADBWohneinheitController extends mfBaseController {
$this->redirect("AddressDB", "view", ["id" => $hausnummer_id]);
}
protected function duplicateAction() {
$duplicateHomes = ADBWohneinheitModel::searchDuplicateExtref();
$JSGlobals = ["BASE_URL" => self::getUrl(""),
"DASHBOARD_URL" => self::getUrl("Dashboard"),
"MFAPPNAME" => MFAPPNAME_SLUG,
"PAGE_TITLE" => "Doppelte Homes",
"PATH" => [
["text" => MFAPPNAME_SLUG, "href" => self::getUrl("Dashboard")],
["text" => "Doppelte Homes", "href" => self::getUrl("ADBWohneinheit", "duplicate")],
],
"DUPLICATE_HOMES" => $duplicateHomes,
"IS_ADMIN" => $this->me->is("Admin"),
];
$this->layout()->set("vueViewName", "ADBWohneinheitDuplicate");
$this->layout()->set("JSGlobals", $JSGlobals);
$this->layout()->setTemplate("VueViews/Vue");
}
}

View File

@@ -281,5 +281,60 @@ class ADBWohneinheitModel {
//var_dump($filter, $where);exit;
return $where;
}
public static function searchDuplicateExtref($filter = []) {
$duplicates = [];
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME)->link;
$where = self::getSqlFilter($filter);
$sql = "SELECT Wohneinheit.extref, COUNT(*) as count
FROM Wohneinheit
LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id)
WHERE $where AND Wohneinheit.extref IS NOT NULL
GROUP BY Wohneinheit.extref
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC";
$res = $db->query($sql);
$duplicateExtrefs = [];
while($data = $res->fetch_assoc()) {
$duplicateExtrefs[] = $data['extref'];
$duplicates[$data['extref']] = [
'extref' => $data['extref'],
'count' => $data['count'],
'homeData' => []
];
}
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";
$detailRes = $db->query($detailSql);
while($homeData = $detailRes->fetch_assoc()) {
$duplicates[$homeData['extref']]['homeData'][] = [
"id" => $homeData['id'],
"oaid" => $homeData['oaid'],
"hausnummer_id" => $homeData['hausnummer_id'],
"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);
}
}