91 lines
2.8 KiB
PHP
91 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace Espo\Custom\Api\CPuls;
|
|
|
|
use Espo\Core\Api\Action;
|
|
use Espo\Core\Api\Request;
|
|
use Espo\Core\Api\Response;
|
|
use Espo\Core\Api\ResponseComposer;
|
|
use Espo\Core\Exceptions\BadRequest;
|
|
use Espo\Core\Exceptions\Forbidden;
|
|
use Espo\Core\Exceptions\NotFound;
|
|
use Espo\ORM\EntityManager;
|
|
|
|
class AbschliessenFuerTeam implements Action
|
|
{
|
|
public function __construct(
|
|
private EntityManager $entityManager
|
|
) {}
|
|
|
|
public function process(Request $request): Response
|
|
{
|
|
$id = $request->getRouteParam('id');
|
|
if (!$id) {
|
|
throw new BadRequest('ID fehlt.');
|
|
}
|
|
|
|
$puls = $this->entityManager->getEntityById('CPuls', $id);
|
|
if (!$puls) {
|
|
throw new NotFound('Puls nicht gefunden.');
|
|
}
|
|
|
|
// Prüfe, ob bereits finalisiert
|
|
if ($puls->get('status') === 'Finalisiert') {
|
|
throw new Forbidden('Puls wurde bereits finalisiert.');
|
|
}
|
|
|
|
// Prüfe syncStatus
|
|
if ($puls->get('syncStatus') === 'unclean') {
|
|
throw new BadRequest('Neue Dokumente vorhanden. Bitte warten Sie auf die KI-Analyse.');
|
|
}
|
|
|
|
// Hole aktuelle Team-ID des Benutzers
|
|
$user = $this->entityManager->getEntityById('User', $request->getServerParam('ESPO_USER_ID'));
|
|
if (!$user) {
|
|
throw new Forbidden('Benutzer nicht gefunden.');
|
|
}
|
|
|
|
$teamIds = $user->getLinkMultipleIdList('teams');
|
|
if (empty($teamIds)) {
|
|
throw new Forbidden('Sie sind keinem Team zugeordnet.');
|
|
}
|
|
|
|
// Finde Zuordnung für erstes Team des Benutzers
|
|
$zuordnung = $this->entityManager->getRDBRepositoryByClass('CPulsTeamZuordnung')
|
|
->where([
|
|
'pulsId' => $id,
|
|
'teamId' => $teamIds,
|
|
'aktiv' => true
|
|
])
|
|
->findOne();
|
|
|
|
if (!$zuordnung) {
|
|
throw new Forbidden('Sie sind diesem Puls nicht zugeordnet oder nicht aktiv.');
|
|
}
|
|
|
|
// Markiere Zuordnung als abgeschlossen
|
|
$zuordnung->set([
|
|
'abgeschlossen' => true,
|
|
'abgeschlossenAm' => date('Y-m-d H:i:s'),
|
|
'abgeschlossenVon' => $user->getId()
|
|
]);
|
|
$this->entityManager->saveEntity($zuordnung);
|
|
|
|
// FIRST-READ-CLOSES: Finalisiere den Puls sofort
|
|
$puls->set([
|
|
'status' => 'Finalisiert',
|
|
'finalisiertAm' => date('Y-m-d H:i:s'),
|
|
'finalisiertVon' => $user->getId()
|
|
]);
|
|
$this->entityManager->saveEntity($puls);
|
|
|
|
$GLOBALS['log']->info("Puls {$id} durch Team {$zuordnung->get('teamId')} finalisiert (First-Read-Closes).");
|
|
|
|
return ResponseComposer::json([
|
|
'success' => true,
|
|
'finalized' => true,
|
|
'message' => 'Puls wurde finalisiert (First-Read-Closes).'
|
|
]);
|
|
}
|
|
}
|