110 lines
4.1 KiB
PHP
110 lines
4.1 KiB
PHP
#!/usr/bin/php
|
|
<?php
|
|
|
|
require("../config/config.php");
|
|
|
|
define('FRONKDB_SQLDEBUG',false);
|
|
error_reporting(E_ALL & ~(E_NOTICE | E_STRICT | E_DEPRECATED));
|
|
|
|
require_once(LIBDIR."/mvcfronk/mfRouter/mfRouter.php");
|
|
require_once(LIBDIR."/mvcfronk/mfBase/mfBaseModel.php");
|
|
require_once(LIBDIR."/mvcfronk/mfBase/mfBaseController.php");
|
|
|
|
$me = new User(1);
|
|
|
|
echo "[" . date('Y-m-d H:i:s') . "] Starting WorkorderMph creation from Hausnummer\n";
|
|
|
|
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
|
|
|
|
// Build netzgebiet filter
|
|
$netzgebietIds = defined('TT_WORKORDER_MPH_NETZGEBIET_IDS') ? TT_WORKORDER_MPH_NETZGEBIET_IDS : [];
|
|
$netzgebietFilter = '';
|
|
if (!empty($netzgebietIds)) {
|
|
$escapedIds = array_map(fn($id) => $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 hn.rimo_ex_state NOT IN ('grossplaning', 'not2connect')
|
|
AND 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";
|