added new permissions and changed handling of ADBWohneinheitController.php/duplicate

This commit is contained in:
Luca Haid
2025-06-12 10:01:01 +02:00
parent 3050603474
commit 528f3680d2
7 changed files with 91 additions and 26 deletions
@@ -186,9 +186,19 @@ class ADBWohneinheitController extends mfBaseController {
}
protected function duplicateAction() {
$duplicateHomes = array_merge(ADBWohneinheitModel::searchDuplicateExtref(),
ADBWohneinheitModel::searchDuplicateOAID(),
ADBWohneinheitModel::getRimoDeletedHomes()
// if me is not admin or netowner, redirect to dashboard
if(!$this->me->is("Admin") && !$this->me->can("ADBExtended")) {
$this->redirect("Dashboard");
}
$address_id = null;
if (!$this->me->is("Admin")) {
$address_id = $this->me->address->id;
}
$duplicateHomes = array_merge(ADBWohneinheitModel::searchDuplicateExtref([], $address_id),
ADBWohneinheitModel::searchDuplicateOAID([], $address_id),
ADBWohneinheitModel::getRimoDeletedHomes([], $address_id)
);
$ADBNetzgebiete = array_map(function($network) {
@@ -198,10 +208,13 @@ class ADBWohneinheitController extends mfBaseController {
];
}, ADBNetzgebietModel::getAll());
$filteredNetzgebiete = [];
foreach ($ADBNetzgebiete as $network) {
if (!strstr($network["text"], "SBIDI") && !strstr($network["text"], "Liezen")) {
$filteredNetzgebiete[] = $network;
$networkOwners = [];
foreach ($duplicateHomes as $home) {
if ($home['netzgebiet_owner'] && !in_array($home['netzgebiet_owner'], array_column($networkOwners, 'value'))) {
$networkOwners[] = [
"value" => $home['netzgebiet_owner'],
"text" => $home['netzgebiet_owner'],
];
}
}
@@ -214,7 +227,8 @@ class ADBWohneinheitController extends mfBaseController {
["text" => "Doppelte Homes", "href" => self::getUrl("ADBWohneinheit", "duplicate")],
],
"DUPLICATE_HOMES" => $duplicateHomes,
"ADB_NETZGEBIETE" => $filteredNetzgebiete,
"ADB_NETZGEBIETE" => $ADBNetzgebiete,
"NETWORK_OWNERS" => $networkOwners,
"IS_ADMIN" => $this->me->is("Admin"),
];
@@ -292,15 +292,19 @@ class ADBWohneinheitModel {
return $where;
}
public static function searchDuplicateExtref($filter = []) {
public static function searchDuplicateExtref($filter = [], $network_owner = null) {
$duplicates = [];
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME)->link;
$where = self::getSqlFilter($filter);
$sql = "SELECT Wohneinheit.extref, COUNT(*) as count, Hausnummer.netzgebiet_id as netzgebiet_id, Netzgebiet.name as netzgebiet_name
if ($network_owner) $where .= " AND Network.owner_id = '" . FronkDB::singleton()->escape($network_owner) . "'";
$sql = "SELECT Wohneinheit.extref, COUNT(*) as count, Hausnummer.netzgebiet_id as netzgebiet_id, Netzgebiet.name as netzgebiet_name, Address.company as netzgebiet_owner
FROM Wohneinheit
LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id)
LEFT JOIN Netzgebiet ON (Netzgebiet.id = Hausnummer.netzgebiet_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 IS NOT NULL AND Netzgebiet.name NOT LIKE 'SBIDI%'
GROUP BY Wohneinheit.extref, Hausnummer.netzgebiet_id
HAVING COUNT(*) > 1
@@ -310,12 +314,13 @@ class ADBWohneinheitModel {
$duplicateExtrefs = [];
while($data = $res->fetch_assoc()) {
if (!$data['netzgebiet_owner']) continue; // Skip if no owner is set
$duplicateExtrefs[] = $data['extref'];
$duplicates[$data['extref']] = [
"duplicateType" => "extref",
'extref' => $data['extref'],
'netzgebiet_id' => $data['netzgebiet_id'],
'netzgebiet_owner' => strstr($data['netzgebiet_name'], 'Liezen') ? 'RML' : 'ESTMK',
'netzgebiet_owner' => $data['netzgebiet_owner'],
'count' => $data['count'],
'homeData' => []
];
@@ -354,16 +359,20 @@ class ADBWohneinheitModel {
return array_values($duplicates);
}
public static function searchDuplicateOAID($filter = []) {
public static function searchDuplicateOAID($filter = [], $network_owner = null) {
$duplicates = [];
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME)->link;
$where = self::getSqlFilter($filter);
$sql = "SELECT Wohneinheit.oaid, COUNT(*) as count, Hausnummer.netzgebiet_id as netzgebiet_id, Netzgebiet.name as netzgebiet_name
if ($network_owner) $where .= " AND Network.owner_id = '" . FronkDB::singleton()->escape($network_owner) . "'";
$sql = "SELECT Wohneinheit.oaid, COUNT(*) as count, Hausnummer.netzgebiet_id as netzgebiet_id, Netzgebiet.name as netzgebiet_name, Address.company as netzgebiet_owner
FROM Wohneinheit
LEFT JOIN Hausnummer ON (Hausnummer.id = Wohneinheit.hausnummer_id)
LEFT JOIN Netzgebiet ON (Netzgebiet.id = Hausnummer.netzgebiet_id)
WHERE $where AND Wohneinheit.oaid IS NOT NULL AND Netzgebiet.name NOT LIKE 'SBIDI%'
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 IS NOT NULL
GROUP BY Wohneinheit.oaid, Hausnummer.netzgebiet_id
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC";
@@ -372,13 +381,14 @@ class ADBWohneinheitModel {
$duplicateOaids = [];
while($data = $res->fetch_assoc()) {
if (!$data['netzgebiet_owner']) continue; // Skip if no owner is set
$duplicateOaids[] = $data['oaid'];
$duplicates[$data['oaid']] = [
"duplicateType" => "oaid",
'oaid' => $data['oaid'],
'count' => $data['count'],
'netzgebiet_id' => $data['netzgebiet_id'],
'netzgebiet_owner' => strstr($data['netzgebiet_name'], 'Liezen') ? 'RML' : 'ESTMK',
'netzgebiet_owner' => $data['netzgebiet_owner'],
'homeData' => []
];
}
@@ -416,30 +426,33 @@ class ADBWohneinheitModel {
return array_values($duplicates);
}
public static function getRimoDeletedHomes($filter = []) {
public static function getRimoDeletedHomes($filter = [], $network_owner = null) {
$deletedHomes = [];
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME)->link;
$where = self::getSqlFilter($filter);
$detailSql = "SELECT Wohneinheit.*, thetool.Address.company AS company, Hausnummer.rimo_id AS hausnummer_extref, Netzgebiet.name AS netzgebiet_name
if ($network_owner) $where .= " AND Network.owner_id = '" . FronkDB::singleton()->escape($network_owner) . "'";
$detailSql = "SELECT Wohneinheit.*, thetool.Address.company AS company, Hausnummer.rimo_id AS hausnummer_extref, Netzgebiet.name AS netzgebiet_name, Netzgebiet.id AS netzgebiet_id, Address.company as netzgebiet_owner
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.rimo_deleted = 1 AND Netzgebiet.name NOT LIKE 'SBIDI%'
WHERE $where AND Wohneinheit.rimo_deleted = 1
ORDER BY Wohneinheit.oaid";
$counter = 0;
$detailRes = $db->query($detailSql);
while($homeData = $detailRes->fetch_assoc()) {
if (!$homeData['netzgebiet_owner']) continue; // Skip if no owner is set
$counter++;
$deletedHomes[$counter] = [
"duplicateType" => "rimo_deleted",
'oaid' => $homeData['oaid'] ?? 'Keine OAID',
'extref' => $homeData['extref'],
'netzgebiet_id' => $homeData['netzgebiet_id'],
'netzgebiet_owner' => strstr($homeData['netzgebiet_name'], 'Liezen') ? 'RML' : 'ESTMK',
'netzgebiet_owner' => $homeData['netzgebiet_owner'],
'count' => 1, // Each entry is unique in this context
'homeData' => []
];
+1
View File
@@ -262,6 +262,7 @@ class UserController extends mfBaseController
$user->permissions->canWarehouseAdmin = "false";
$user->permissions->canWarehouseEShop = "false";
$user->permissions->canWarehouseUser = "false";
$user->permissions->canADBExtended = "false";
if($r->get("can") && is_array($r->can)) {
foreach($r->can as $key => $can) {