ADBWohneinheit/add-new-greenfield-check

This commit is contained in:
2025-09-12 10:54:26 +02:00
parent 892c12881e
commit 23e59246dd
3 changed files with 86 additions and 11 deletions

View File

@@ -185,20 +185,29 @@ class ADBWohneinheitController extends mfBaseController {
}
protected function duplicateAction() {
if (!$this->me->is("Admin") && !$this->me->can("ADBExtended")) {
protected function duplicateAction()
{
if (!$this->user->is("Admin") && !$this->user->can("ADBExtended")) {
$this->redirect("Dashboard");
}
$address_id = $this->me->is("Admin") ? null : $this->me->address->id;
$address_id = $this->user->is("Admin") ? null : $this->user->address->id;
$isAdmin = $this->user->is("Admin");
$duplicateHomes = array_merge(
ADBWohneinheitModel::searchDuplicateExtref([], $address_id),
ADBWohneinheitModel::searchDuplicateOAID([], $address_id),
ADBWohneinheitModel::getRimoDeletedHomes([], $address_id),
($this->me->is("Admin") || $address_id === "4807") ? ADBWohneinheitModel::getUnscheduledOrderHomes([], 4807) : []
ADBWohneinheitModel::getRimoDeletedHomes([], $address_id)
);
if ($isAdmin || $address_id === "4807") {
$duplicateHomes = array_merge($duplicateHomes, ADBWohneinheitModel::getUnscheduledOrderHomes([], 4807));
}
if ($isAdmin) {
$duplicateHomes = array_merge($duplicateHomes, ADBWohneinheitModel::getGreenfieldWithActivePreorders([], $address_id));
}
$getUniqueValues = fn($key) => array_values(array_unique(array_filter(array_column($duplicateHomes, $key))));
$networkOwners = array_map(
@@ -217,10 +226,10 @@ class ADBWohneinheitController extends mfBaseController {
"BASE_URL" => self::getUrl(""),
"DASHBOARD_URL" => self::getUrl("Dashboard"),
"MFAPPNAME" => MFAPPNAME_SLUG,
"PAGE_TITLE" => "Doppelte Homes",
"PAGE_TITLE" => "Datenqualitäts-Checks",
"PATH" => [
["text" => MFAPPNAME_SLUG, "href" => self::getUrl("Dashboard")],
["text" => "Doppelte Homes", "href" => self::getUrl("ADBWohneinheit", "duplicate")],
["text" => "Datenqualitäts-Checks", "href" => self::getUrl("ADBWohneinheit", "duplicate")],
],
"DUPLICATE_HOMES" => $duplicateHomes,
"ADB_NETZGEBIETE" => $networks,

View File

@@ -485,4 +485,69 @@ class ADBWohneinheitModel {
return array_values($deletedHomes);
}
public static function getGreenfieldWithActivePreorders($filter = [], $network_owner = null) {
$homes = [];
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME)->link;
$where = self::getSqlFilter($filter);
if ($network_owner) {
$where .= " AND Network.owner_id = '" . $db->real_escape_string($network_owner) . "'";
}
$detailSql = "
SELECT
W.*,
Owner.company AS company,
H.rimo_id AS hausnummer_extref,
NG.id AS netzgebiet_id,
Owner.company as netzgebiet_owner
FROM ". ADDRESSDB_DBNAME .".Wohneinheit W
JOIN ". ADDRESSDB_DBNAME .".Hausnummer H ON H.id = W.hausnummer_id
JOIN ". FRONKDB_DBNAME .".Preorder P ON P.adb_wohneinheit_id = W.id
JOIN ". FRONKDB_DBNAME .".Preorderstatus PS ON PS.id = P.status_id
LEFT JOIN ". ADDRESSDB_DBNAME .".Netzgebiet NG ON NG.id = H.netzgebiet_id
LEFT JOIN ". FRONKDB_DBNAME .".Network Network ON Network.adb_netzgebiet_id = NG.id
LEFT JOIN ". FRONKDB_DBNAME .".Address Owner ON Network.owner_id = Owner.id
WHERE $where
AND H.rimo_type = 'greenfield'
AND PS.code < 899
AND P.deleted = 0
GROUP BY W.id -- Ensure each Wohneinheit appears only once
ORDER BY W.oaid";
$detailRes = $db->query($detailSql);
if (!$detailRes) {
return [];
}
while($homeData = $detailRes->fetch_assoc()) {
if (empty($homeData['netzgebiet_owner'])) continue;
$homes[] = [
"duplicateType" => "greenfield_with_order",
'oaid' => $homeData['oaid'] ?? 'Keine OAID',
'extref' => $homeData['extref'],
'netzgebiet_id' => $homeData['netzgebiet_id'],
'netzgebiet_owner' => $homeData['netzgebiet_owner'],
'count' => 1,
'homeData' => [[
"id" => $homeData['id'],
'oaid' => $homeData['oaid'] ?? 'Keine 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'],
"rimo_op_state" => $homeData['rimo_op_state'],
"create" => $homeData['create'],
"edit" => $homeData['edit'],
]]
];
}
return $homes;
}
}

View File

@@ -3,7 +3,7 @@ Vue.component('a-d-b-wohneinheit-duplicate', {
template: `
<tt-card>
<tt-table :data="window['TT_CONFIG']['DUPLICATE_HOMES']" :config="DuplicateHomesTableConfig" excel-export>
<template v-slot:extref="{ row }">
<span class="badge badge-warning">{{ row.duplicateType === 'extref' ? row.extref : row.oaid }}</span>
</template>
@@ -66,18 +66,19 @@ Vue.component('a-d-b-wohneinheit-duplicate', {
markedForDeletion: [],
DuplicateHomesTableConfig: {
key: 'DuplicateHomesTable',
tableHeader: 'Doppelte HomeID Liste',
tableHeader: 'Datenqualitäts-Checks',
defaultPageSize: 10,
headers: [
{text: 'Netzgebiet', key: 'netzgebiet_id', sortable: true, class: 'text-nowrap', priority: 11, filter: 'select', filterOptions: window['TT_CONFIG']['ADB_NETZGEBIETE']},
{text: 'Firma', key: 'netzgebiet_owner', sortable: true, class: 'text-nowrap', priority: 11, filter: 'select', filterOptions: window['TT_CONFIG']['NETWORK_OWNERS']},
{text: 'HomeID/OAID', key: 'extref', sortable: true, class: 'text-nowrap', priority: 10},
{text: 'Check-Typ', key: 'duplicateType', sortable: true, class: 'text-nowrap', priority: 9, filter: 'select', filterOptions: [
{text: 'HomeID', value: 'extref'},
{text: 'HomeID', value: 'extref'},
{text: 'OAID', value: 'oaid'},
{text: 'RIMO gelöscht', value: 'rimo_deleted'},
{text: 'Unsch. + BE', value: 'rml_unscheduled_with_order'},
]},
{text: 'Greenfield + BE', value: 'greenfield_with_order'},
]},
{text: 'Anz. HomeIDs', key: 'count', sortable: true, class: 'text-center', priority: 8},
{
text: 'Home Details',