diff --git a/application/ADBWohneinheit/ADBWohneinheitController.php b/application/ADBWohneinheit/ADBWohneinheitController.php index 5e2fa8c27..c8bba5761 100644 --- a/application/ADBWohneinheit/ADBWohneinheitController.php +++ b/application/ADBWohneinheit/ADBWohneinheitController.php @@ -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, diff --git a/application/ADBWohneinheit/ADBWohneinheitModel.php b/application/ADBWohneinheit/ADBWohneinheitModel.php index 3accd717a..80befdc11 100644 --- a/application/ADBWohneinheit/ADBWohneinheitModel.php +++ b/application/ADBWohneinheit/ADBWohneinheitModel.php @@ -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; + } + } diff --git a/public/js/pages/ADBWohneinheitDuplicate/ADBWohneinheitDuplicate.js b/public/js/pages/ADBWohneinheitDuplicate/ADBWohneinheitDuplicate.js index 53467c1f9..352b27215 100644 --- a/public/js/pages/ADBWohneinheitDuplicate/ADBWohneinheitDuplicate.js +++ b/public/js/pages/ADBWohneinheitDuplicate/ADBWohneinheitDuplicate.js @@ -3,7 +3,7 @@ Vue.component('a-d-b-wohneinheit-duplicate', { 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',