add error handling for calendar object creation and update processes

This commit is contained in:
Tiavina 2025-03-26 19:41:01 +03:00
parent 22f5d8f535
commit b34c0ff13a
3 changed files with 90 additions and 55 deletions

View File

@ -25,6 +25,7 @@ declare(strict_types=1);
namespace OCA\Gestion\Listener; namespace OCA\Gestion\Listener;
use Exception;
use OCA\DAV\Events\CalendarObjectCreatedEvent; use OCA\DAV\Events\CalendarObjectCreatedEvent;
use OCA\Gestion\Service\GestionService; use OCA\Gestion\Service\GestionService;
use OCP\EventDispatcher\Event; use OCP\EventDispatcher\Event;
@ -50,8 +51,16 @@ class CalendarObjectCreatedListener implements IEventListener {
return; return;
} }
$calendarData = $event->getObjectData(); $calendarData = $event->getObjectData();
$vCalendarString = $calendarData["calendardata"]; try{
$this->gestionService->HandleCreatedCalendarObject($vCalendarString); $vCalendarString = $calendarData["calendardata"];
$this->gestionService->HandleCreatedCalendarObject($vCalendarString);
}
catch(\OC\OCS\Exception $e){
$this->logger->error("Error while handling created calendar object: ".$e->getMessage());
}
catch(Exception $e){
$this->logger->error("Error while handling created calendar object: ".$e->getMessage());
}
} }
} }

View File

@ -25,6 +25,7 @@ declare(strict_types=1);
namespace OCA\Gestion\Listener; namespace OCA\Gestion\Listener;
use Exception;
use OCA\DAV\Events\CalendarObjectCreatedEvent; use OCA\DAV\Events\CalendarObjectCreatedEvent;
use OCA\DAV\Events\CalendarObjectUpdatedEvent; use OCA\DAV\Events\CalendarObjectUpdatedEvent;
use OCA\Gestion\Service\GestionService; use OCA\Gestion\Service\GestionService;
@ -51,8 +52,16 @@ class CalendarObjectUpdatedListener implements IEventListener {
return; return;
} }
$calendarData = $event->getObjectData(); $calendarData = $event->getObjectData();
$vCalendarString = $calendarData["calendardata"]; try{
$this->gestionService->HandleUpdatedCalendarObject($vCalendarString); $vCalendarString = $calendarData["calendardata"];
$this->gestionService->HandleUpdatedCalendarObject($vCalendarString);
}
catch(\OC\OCS\Exception $e){
$this->logger->error("Error while handling updated calendar object: ".$e->getMessage());
}
catch(Exception $e){
$this->logger->error("Error while handling updated calendar object: ".$e->getMessage());
}
} }
} }

View File

@ -26,6 +26,7 @@ declare(strict_types=1);
namespace OCA\Gestion\Service; namespace OCA\Gestion\Service;
use Exception;
use OCA\Gestion\Constants\BddConstant; use OCA\Gestion\Constants\BddConstant;
use OCA\Gestion\Constants\DevisMentionConstant; use OCA\Gestion\Constants\DevisMentionConstant;
use OCA\Gestion\Constants\VCalendarPropertyConstant; use OCA\Gestion\Constants\VCalendarPropertyConstant;
@ -205,34 +206,42 @@ class GestionService {
} }
public function HandleUpdatedCalendarObject(string $vCalendarString){ public function HandleUpdatedCalendarObject(string $vCalendarString){
$isCalendarForLeave = $this->GetIsLeaveFromVCalendarString($vCalendarString); try{
if($isCalendarForLeave){ $isCalendarForLeave = $this->GetIsLeaveFromVCalendarString($vCalendarString);
//from devis calendar to leave calendar if($isCalendarForLeave){
//from devis calendar to leave calendar
$calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString);
$devis = $this->gestionBdd->getDevisByCalendarUuid($calendarUuid);
if($devis != null){
$this->gestionBdd->updateDevisMentionToCanceled($devis['id']);
}
return;
}
$calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString); $calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString);
$devis = $this->gestionBdd->getDevisByCalendarUuid($calendarUuid); $devis = $this->gestionBdd->getDevisByCalendarUuid($calendarUuid);
if($devis != null){ if($devis != null){
$this->gestionBdd->updateDevisMentionToCanceled($devis['id']); $isDevisAlreadyUpdated = $this->CheckIfDevisIsAlreadyUpdated($devis,$vCalendarString);
if($isDevisAlreadyUpdated){
return true;
}
$devisIsAlreadyFactured = $devis['mentions'] == DevisMentionConstant::FACTURED || $devis['mentions'] == DevisMentionConstant::FACTURED_FORMATTED;
$this->UpdateDevisDataByVCalendarString($devis,$vCalendarString);
if($devisIsAlreadyFactured == false){
$userName = $this->GetThanatoNameFromVCalendarString($vCalendarString);
$devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName);
$this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid);
}
} }
return; else{
} //update from calendar leave or calendar pending to calendar devis
$calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString); $this->HandleCreatedCalendarObject($vCalendarString);
$devis = $this->gestionBdd->getDevisByCalendarUuid($calendarUuid);
if($devis != null){
$isDevisAlreadyUpdated = $this->CheckIfDevisIsAlreadyUpdated($devis,$vCalendarString);
if($isDevisAlreadyUpdated){
return true;
}
$devisIsAlreadyFactured = $devis['mentions'] == DevisMentionConstant::FACTURED || $devis['mentions'] == DevisMentionConstant::FACTURED_FORMATTED;
$this->UpdateDevisDataByVCalendarString($devis,$vCalendarString);
if($devisIsAlreadyFactured == false){
$userName = $this->GetThanatoNameFromVCalendarString($vCalendarString);
$devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName);
$this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid);
} }
} }
else{ catch(\OC\OCS\Exception $e){
//update from calendar leave or calendar pending to calendar devis $this->logger->error("Error while handling created calendar object: ".$e->getMessage());
$this->HandleCreatedCalendarObject($vCalendarString); }
catch(Exception $e){
$this->logger->error("Error while handling created calendar object: ".$e->getMessage());
} }
return true; return true;
} }
@ -258,37 +267,45 @@ class GestionService {
} }
} }
public function HandleCreatedCalendarObject(string $vCalendarString){ public function HandleCreatedCalendarObject(string $vCalendarString){
$isCalendarForLeave = $this->GetIsLeaveFromVCalendarString($vCalendarString); try{
if($isCalendarForLeave){ $isCalendarForLeave = $this->GetIsLeaveFromVCalendarString($vCalendarString);
return; if($isCalendarForLeave){
return;
}
$isCalendarPending = $this->GetIsCalendarPendingFromVCalendarString($vCalendarString);
if($isCalendarPending){
return;
}
$calendarSummary = $this->GetCalendarSummaryFromVCalendarString($vCalendarString);
$clientId = $this->GetClientIdFromVCalendarString($vCalendarString);
$locationId = $this->GetLocationIdFromVCalendarString($vCalendarString);
$thanatoId = $this->GetThanatoIdFromVCalendarString($vCalendarString);
$calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString);
$userName = $this->GetThanatoNameFromVCalendarString($vCalendarString);
$devisAlreadyCreated = $this->IsDevisAlreadyCreated($clientId,$locationId,$thanatoId,$calendarSummary,$calendarUuid);
if($devisAlreadyCreated){
return;
}
$defuntId = $this->gestionBdd->insertDefuntByNameAndReturnId($calendarSummary);
$calendarStartDate = $this->GetCalendarDateFromVCalendarString($vCalendarString);
$devisComment = $this->GetDevisCommentFromVCalendarString($vCalendarString);
$devisId = $this->gestionBdd->insertDevisFromVCalendarAndReturnId($thanatoId,$clientId,$locationId,$defuntId,$calendarUuid,$calendarStartDate,$devisComment);
$articlesValue = $this->GetArticlesNameFromVCalendarString($vCalendarString);
if(!empty($articlesValue)){
$articleIds = $this->gestionBdd->getArticleIdsByArticleReferences($articlesValue);
$this->gestionBdd->insertDevisArticleFromDevisIdAndArticlesIdArray($devisId, $articleIds);
}
$devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devisId,$userName);
$this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid);
$this->gestionBdd->createDevisTrajetFromVCalendar($devisId,$userName);
}
catch(\OC\OCS\Exception $e){
$this->logger->error("Error while handling created calendar object: ".$e->getMessage());
} }
$isCalendarPending = $this->GetIsCalendarPendingFromVCalendarString($vCalendarString); catch(Exception $e){
if($isCalendarPending){ $this->logger->error("Error while handling created calendar object: ".$e->getMessage());
return;
} }
$calendarSummary = $this->GetCalendarSummaryFromVCalendarString($vCalendarString);
$clientId = $this->GetClientIdFromVCalendarString($vCalendarString);
$locationId = $this->GetLocationIdFromVCalendarString($vCalendarString);
$thanatoId = $this->GetThanatoIdFromVCalendarString($vCalendarString);
$calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString);
$userName = $this->GetThanatoNameFromVCalendarString($vCalendarString);
$devisAlreadyCreated = $this->IsDevisAlreadyCreated($clientId,$locationId,$thanatoId,$calendarSummary,$calendarUuid);
if($devisAlreadyCreated){
return;
}
$defuntId = $this->gestionBdd->insertDefuntByNameAndReturnId($calendarSummary);
$calendarStartDate = $this->GetCalendarDateFromVCalendarString($vCalendarString);
$devisComment = $this->GetDevisCommentFromVCalendarString($vCalendarString);
$devisId = $this->gestionBdd->insertDevisFromVCalendarAndReturnId($thanatoId,$clientId,$locationId,$defuntId,$calendarUuid,$calendarStartDate,$devisComment);
$articlesValue = $this->GetArticlesNameFromVCalendarString($vCalendarString);
if(!empty($articlesValue)){
$articleIds = $this->gestionBdd->getArticleIdsByArticleReferences($articlesValue);
$this->gestionBdd->insertDevisArticleFromDevisIdAndArticlesIdArray($devisId, $articleIds);
}
$devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devisId,$userName);
$this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid);
$this->gestionBdd->createDevisTrajetFromVCalendar($devisId,$userName);
} }
private function GetThanatoNameFromVCalendarString($vCalendarString){ private function GetThanatoNameFromVCalendarString($vCalendarString){