#!/usr/bin/php $db->escape($id), $netzgebietIds); $netzgebietFilter = " AND hn.netzgebiet_id IN (" . implode(',', $escapedIds) . ")"; } // Find Hausnummer with >2 Wohneinheiten and state not in grossplaning/not2connect $sql = " SELECT hn.id, hn.netzgebiet_id, COUNT(we.id) as we_count FROM Hausnummer hn LEFT JOIN Wohneinheit we ON hn.id = we.hausnummer_id WHERE COALESCE(hn.rimo_ex_state, '') NOT IN ('grossplaning', 'not2connect') AND COALESCE(hn.rimo_op_state, '') NOT IN ('grossplaning', 'not2connect') $netzgebietFilter GROUP BY hn.id HAVING we_count > 2 "; $result = $db->query($sql); $hausnummern = $result ? $result->fetch_all(MYSQLI_ASSOC) : []; echo "[" . date('Y-m-d H:i:s') . "] Found " . count($hausnummern) . " Hausnummern with >2 Wohneinheiten\n"; // Get valid hausnummer IDs $validHausnummerIds = array_column($hausnummern, 'id'); $createdCount = 0; $reactivatedCount = 0; foreach ($hausnummern as $hn) { // Check if WorkorderMph already exists $existing = WorkorderMphModel::getFirst(['hausnummerId' => $hn['id']]); if (!$existing) { // Create new WorkorderMph WorkorderMphModel::create([ 'hausnummerId' => $hn['id'], 'status' => 'new', 'create' => time(), 'createBy' => 1 // System user ]); $createdCount++; echo "[" . date('Y-m-d H:i:s') . "] Created new WorkorderMph for Hausnummer ID {$hn['id']}\n"; } elseif ($existing->status === 'archived') { // Reactivate archived workorder $existing->status = 'new'; $existing->companyId = null; $existing->deadlineDate = null; $existing->appointmentDate = null; WorkorderMphModel::update((array)$existing); WorkorderMphJournalModel::create([ 'workorderMphId' => $existing->id, 'text' => 'Arbeitsauftrag wurde automatisch reaktiviert.', 'statusChange' => 'archiviert -> neu', 'create' => time(), 'createBy' => 1, ]); $reactivatedCount++; echo "[" . date('Y-m-d H:i:s') . "] Reactivated WorkorderMph #{$existing->id} for Hausnummer ID {$hn['id']}\n"; } } echo "[" . date('Y-m-d H:i:s') . "] Created: $createdCount, Reactivated: $reactivatedCount\n"; // Archive workorders for Hausnummer that are no longer in allowed netzgebiete or don't meet criteria if (!empty($netzgebietIds)) { $allWorkorders = WorkorderMphModel::getAll(['status' => ['new', 'assigned', 'scheduled', 'in_progress']]); $archivedCount = 0; foreach ($allWorkorders as $workorder) { if (!in_array($workorder->hausnummerId, $validHausnummerIds)) { $workorder->status = 'archived'; WorkorderMphModel::update((array)$workorder); WorkorderMphJournalModel::create([ 'workorderMphId' => $workorder->id, 'text' => 'Arbeitsauftrag automatisch archiviert (Netzgebiet deaktiviert oder Kriterien nicht mehr erfüllt).', 'statusChange' => 'active -> archived', 'create' => time(), 'createBy' => 1, ]); $archivedCount++; echo "[" . date('Y-m-d H:i:s') . "] Archived WorkorderMph #{$workorder->id}\n"; } } echo "[" . date('Y-m-d H:i:s') . "] Archived: $archivedCount\n"; } echo "[" . date('Y-m-d H:i:s') . "] WorkorderMph creation/update completed successfully\n";