overhauled workorder module

This commit is contained in:
Luca Haid
2025-10-08 13:18:48 +02:00
parent 200226a4bd
commit 2ce870746b
9 changed files with 314 additions and 50 deletions

View File

@@ -54,6 +54,7 @@ class WorkorderAdminController extends WorkorderBaseController
public function indexAction()
{
$this->createWorkordersFromPreorders();
$this->archiveWorkorders();
parent::indexAction();
}
@@ -177,6 +178,40 @@ class WorkorderAdminController extends WorkorderBaseController
self::returnJson(['success' => true, 'message' => 'Dokumentation akzeptiert und Arbeitsauftrag abgeschlossen.']);
}
protected function chargeWorkorderAction()
{
if (!$this->user->can('RMLAdmin')) {
self::sendError("Keine Berechtigung.");
}
if (empty($this->postData['workorderId'])) {
self::sendError("Arbeitsauftrags-ID fehlt.");
}
$workorder = WorkorderModel::get($this->postData['workorderId']);
if (!$workorder) {
self::sendError("Arbeitsauftrag nicht gefunden.");
}
if ($workorder->status !== 'completed') {
self::sendError("Nur abgeschlossene Arbeitsaufträge können verrechnet werden.");
}
$oldStatus = $workorder->status;
$workorder->status = 'charged';
WorkorderModel::update((array)$workorder);
WorkorderJournalModel::create([
'workorderId' => $workorder->id,
'text' => 'Arbeitsauftrag wurde als verrechnet markiert.',
'statusChange' => $this->getStatusText($oldStatus) . " -> " . $this->getStatusText('charged'),
'create' => time(),
'createBy' => $this->user->id,
]);
self::returnJson(['success' => true, 'message' => 'Arbeitsauftrag als verrechnet markiert.']);
}
protected function setToProblemSolvedAction()
{
if (empty($this->postData['workorderId']) || empty($this->postData['text'])) self::sendError("Arbeitsauftrags-ID und Text sind erforderlich.");
@@ -276,32 +311,5 @@ class WorkorderAdminController extends WorkorderBaseController
}
return true;
}
private function createWorkordersFromPreorders()
{
$configs = WorkorderTenantConfigModel::getAll();
foreach ($configs as $config) {
$filters = json_decode($config->workorderCreationFilters, true);
if (empty($filters)) continue;
$networks = NetworkModel::search(['owner_id' => $config->addressId]);
if (empty($networks)) continue;
$tenantCampaigns = array_map(fn($n) => $n->id, PreordercampaignModel::getAll(['network_id' => array_map(fn($n) => $n->id, $networks)]));
if (empty($tenantCampaigns)) continue;
$filters['preordercampaign_id'] = $tenantCampaigns;
$newPreorders = PreorderModel::searchActive($filters);
foreach ($newPreorders as $preorder) {
if (!WorkorderModel::getFirst(['preorderId' => $preorder->id])) {
WorkorderModel::create([
'preorderId' => $preorder->id, 'clusterId' => $preorder->preordercampaign_id,
'status' => 'new', 'create' => time(), 'createBy' => 0 // System User
]);
}
}
}
}
//endregion
}
}