diff --git a/gestion/lib/Db/Bdd.php b/gestion/lib/Db/Bdd.php index 79407ee..6d607ff 100644 --- a/gestion/lib/Db/Bdd.php +++ b/gestion/lib/Db/Bdd.php @@ -3787,7 +3787,7 @@ class Bdd { if(empty($devisProducts)){ return ""; } - $productMessage = ". ACTE A FAIRE : "; + $productMessage = "ACTE A FAIRE : "; foreach($devisProducts as $product){ $productMessage.= html_entity_decode($product->produit_reference).", "; } @@ -3797,7 +3797,7 @@ class Bdd { } private function getDevisTalkRoomClientContent($clientPrenom){ - $message = ". Pour PF: "; + $message = "Pour PF: "; $clientNameContent = "aucun"; $clientPrenomIsSet = $clientPrenom != null && $clientPrenom != "" && $clientPrenom != "-"; if($clientPrenomIsSet){ @@ -3816,20 +3816,25 @@ class Bdd { $devisDate = new Datetime($devis->date); $devisDate = $devisDate->format('d/m/Y'); $message = "NOUVELLE INTERVENTION: "; - $message .= html_entity_decode($devis->nom_defunt) . ' '; - $message .= 'le '.$devisDate. ' '; + $message .= html_entity_decode($devis->nom_defunt); + $message .= ' +le '.$devisDate; $message .= 'à '.$devis->startTime. ' '; - $message .= 'à '.html_entity_decode($devis->lieu). ' '. html_entity_decode($devis->adresse_soin); + $message .= ' +à '.html_entity_decode($devis->lieu). ' '. html_entity_decode($devis->adresse_soin); $clientMessageContent = $this->getDevisTalkRoomClientContent($devis->prenom); - $message .= $clientMessageContent; + $message .= ' +'.$clientMessageContent; $productMessage = $this->getDevisTalkRoomProductSectionMessage($devis->products); - $message .= $productMessage; + $message .= ' +'.$productMessage; $comment = "aucun"; if(strtolower($devis->comment) != "commentaire" && $devis->comment != ""){ $comment = html_entity_decode($devis->comment); } - $message .= ". COMMENTAIRES: ".$comment.". "; + $message .= " +COMMENTAIRES: ".$comment; $locationCodes = [ "Code portail" => $devis->portal_code, "Code alarme" => $devis->alarm_code, @@ -3844,7 +3849,8 @@ class Bdd { $locationCodeMessageContent .= $label. ": ".$value.". "; } $locationCodeMessageContent = trim($locationCodeMessageContent); - $message .= $locationCodeMessageContent; + $message .= ' +'.$locationCodeMessageContent; return $message; } @@ -3858,6 +3864,8 @@ class Bdd { devis.id_defunt as defunt_id, devis.num, devis.comment, + devis.mentions, + devis.date, devis.id_lieu as lieu_id, devis.id_client as client_id, defunt.nom as defunt_nom @@ -3949,6 +3957,13 @@ class Bdd { } } + public function updateDevisDate($devisId,$requestedDate){ + $sql= "UPDATE ".$this->tableprefix."devis as devis + SET devis.date = ? + WHERE devis.id = ?"; + $this->execSQLNoData($sql,[$requestedDate,$devisId]); + } + public function deleteDevisProduit($devisProductId){ $sql = "DELETE FROM ".$this->tableprefix."produit_devis WHERE id = ?;"; $this->execSQLNoData($sql, array($devisProductId)); diff --git a/gestion/lib/Db/TalkDb.php b/gestion/lib/Db/TalkDb.php index 530f037..77e9658 100644 --- a/gestion/lib/Db/TalkDb.php +++ b/gestion/lib/Db/TalkDb.php @@ -153,7 +153,7 @@ class TalkDb { $rooms = $this->execSQLNoJsonReturn( $sql, - [$names['createdByUser'],$names['createdByAdmin']]); + [$names['target'],$names['sender']]); if(!empty($rooms)){ return $rooms[0]; @@ -161,13 +161,13 @@ class TalkDb { return null; } - public function createDevisTalkRoomAndReturnDevisTalkRoom($idNextCloud,$token){ - $roomName = '["'.$idNextCloud.'","'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"]'; + public function createDevisTalkRoomAndReturnDevisTalkRoom($targetUser,$senderUser,$token){ + $roomName = '["'.$targetUser.'","'.$senderUser.'"]'; $this->createDevisTalkRoom($roomName,$token); $room = $this->getDevisTalkRoomByName($roomName); $attendees = [ - $idNextCloud, - BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD + $targetUser, + $senderUser ]; $this->createDevisTalkRoomAttendeesByActors($attendees,$room['id']); return $room; diff --git a/gestion/lib/Service/GestionService.php b/gestion/lib/Service/GestionService.php index ab5b259..0f3098a 100644 --- a/gestion/lib/Service/GestionService.php +++ b/gestion/lib/Service/GestionService.php @@ -26,9 +26,11 @@ declare(strict_types=1); namespace OCA\Gestion\Service; +use OCA\Gestion\Constants\BddConstant; use OCA\Gestion\Constants\DevisMentionConstant; use OCA\Gestion\Constants\VCalendarPropertyConstant; use OCA\Gestion\Db\Bdd; +use OCP\IUserSession; use Psr\Log\LoggerInterface; use OCA\Gestion\Helpers\VCalendarHelpers; @@ -42,13 +44,22 @@ class GestionService { /** @var TalkService */ private $talkService; + private $userConnectedUuid; + public function __construct( Bdd $gestionBdd, LoggerInterface $logger, - TalkService $talkService) { + TalkService $talkService, + IUserSession $userSession) { $this->logger = $logger; $this->gestionBdd = $gestionBdd; $this->talkService = $talkService; + try{ + $this->userConnectedUuid = $userSession->getUser()->getUID(); + } + catch(Exception){ + $this->userConnectedUuid = BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD; + } } private function GetIsCalendarPendingFromVCalendarString(string $vCalendarString): bool{ @@ -82,24 +93,13 @@ class GestionService { private function GetThanatoIdFromVCalendarString(string $vCalendarString) { $thanatoId = 0; - $thanatoNames = $this->GetAttendeesNameFromVCalendarString($vCalendarString); - if(count($thanatoNames) > 0){ - $thanatoName = $thanatoNames[0]; - $thanatoIdFromDb = $this->gestionBdd->getThanatoIdByUserUuid($thanatoName); + $organizerName = $this->getPrincipalUsernameFromVCalendarString($vCalendarString); + if($organizerName != null){ + $thanatoIdFromDb = $this->gestionBdd->getThanatoIdByUserUuid($organizerName); if($thanatoIdFromDb != null){ $thanatoId = $thanatoIdFromDb; } } - else{ - //get from calendar object - $organizerName = $this->getPrincipalUsernameFromVCalendarString($vCalendarString); - if($organizerName != null){ - $thanatoIdFromDb = $this->gestionBdd->getThanatoIdByUserUuid($organizerName); - if($thanatoIdFromDb != null){ - $thanatoId = $thanatoIdFromDb; - } - } - } return $thanatoId; } @@ -170,6 +170,8 @@ class GestionService { $requestedDevisComment = $this->GetDevisCommentFromVCalendarString($vCalendarString); $this->gestionBdd->updateDevisComment($devis['id'],$requestedDevisComment,$devis['comment']); + $requestedDevisDate = $this->GetCalendarDateFromVCalendarString($vCalendarString); + $this->gestionBdd->updateDevisDate($devis['id'],$requestedDevisDate); $articlesValue = $this->GetArticlesNameFromVCalendarString($vCalendarString); if(!empty($articlesValue)){ $articleIds = $this->gestionBdd->getArticleIdsByArticleReferences($articlesValue); @@ -184,6 +186,7 @@ class GestionService { $requestedDevisComment = $this->GetDevisCommentFromVCalendarString($vCalendarString); $requestedArticleReferences = $this->GetArticlesNameFromVCalendarString($vCalendarString); $requestedArticleIds = $this->gestionBdd->getArticleIdsByArticleReferences($requestedArticleReferences); + $requestedDevisDate = $this->GetCalendarDateFromVCalendarString($vCalendarString); $articleDevis = $this->gestionBdd->getProduitDevisByDevisId($devis['id']); $articleDevisIds = []; foreach($articleDevis as $currentArticleDevis){ @@ -197,7 +200,8 @@ class GestionService { $devis['client_id'] == $requestedClientId && $devis['lieu_id'] == $requestLocationId && $devis['comment'] == $requestedDevisComment && - $requestedArticleIds == $articleDevisIds; + $requestedArticleIds == $articleDevisIds && + $devis['date'] == $requestedDevisDate; } public function HandleUpdatedCalendarObject(string $vCalendarString){ @@ -214,15 +218,17 @@ class GestionService { $calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString); $devis = $this->gestionBdd->getDevisByCalendarUuid($calendarUuid); if($devis != null){ - $this->gestionBdd->updateDevisMention($devis['id'],DevisMentionConstant::NEW); $isDevisAlreadyUpdated = $this->CheckIfDevisIsAlreadyUpdated($devis,$vCalendarString); if($isDevisAlreadyUpdated){ return true; } + $devisIsAlreadyFactured = $devis['mentions'] == DevisMentionConstant::FACTURED || $devis['mentions'] == DevisMentionConstant::FACTURED_FORMATTED; $this->UpdateDevisDataByVCalendarString($devis,$vCalendarString); - $userName = $this->GetThanatoNameFromVCalendarString($vCalendarString); - $devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName); - $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName); + if($devisIsAlreadyFactured == false){ + $userName = $this->GetThanatoNameFromVCalendarString($vCalendarString); + $devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName); + $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid); + } } else{ //update from calendar leave or calendar pending to calendar devis @@ -280,22 +286,14 @@ class GestionService { $articleIds = $this->gestionBdd->getArticleIdsByArticleReferences($articlesValue); $this->gestionBdd->insertDevisArticleFromDevisIdAndArticlesIdArray($devisId, $articleIds); } - $this->gestionBdd->createDevisTrajetFromVCalendar($devisId,$userName); $devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devisId,$userName); - $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName); + $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid); + $this->gestionBdd->createDevisTrajetFromVCalendar($devisId,$userName); } private function GetThanatoNameFromVCalendarString($vCalendarString){ - $thanatoName = null; - $thanatoNames = $this->GetAttendeesNameFromVCalendarString($vCalendarString); - if(count($thanatoNames) > 0){ - $thanatoName = $thanatoNames[0]; - } - else{ - //get from calendar object - $thanatoName = $this->getPrincipalUsernameFromVCalendarString($vCalendarString); - } - return $thanatoName; + $thanatoName = $this->getPrincipalUsernameFromVCalendarString($vCalendarString); + return $thanatoName ?? BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD; } private function GetClientIdFromVCalendarString(string $vCalendarString){ diff --git a/gestion/lib/Service/TalkService.php b/gestion/lib/Service/TalkService.php index 837f7c5..295b7ed 100644 --- a/gestion/lib/Service/TalkService.php +++ b/gestion/lib/Service/TalkService.php @@ -48,12 +48,12 @@ class TalkService { $this->talkDb = $talkDb; } - private function getUserDevisTalkRoomNames($idNextCloud){ - $roomNamesCreatedByUser = '["'.$idNextCloud.'","'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"]'; - $roomNamesCreatedByAdmin = '["'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'","'.$idNextCloud.'"]'; + private function getUserDevisTalkRoomNames($target ,$senderUser){ + $roomNamesCreatedBytargetUser = '["'.$target.'","'.$senderUser.'"]'; + $roomNamesCreatedBySenderUser = '["'.$senderUser.'","'.$target.'"]'; return [ - "createdByUser" => $roomNamesCreatedByUser, - "createdByAdmin" => $roomNamesCreatedByAdmin + "target" => $roomNamesCreatedBytargetUser, + "sender" => $roomNamesCreatedBySenderUser ]; } @@ -68,36 +68,39 @@ class TalkService { return $randomToken; } - private function getNotificationsSubjectsParameters(){ - return '{"userType":"users","userId":"'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"}'; + private function getNotificationsSubjectsParameters(string $senderUser){ + return '{"userType":"users","userId":"'.$senderUser.'"}'; } private function getNotificationsMessageParameters($commentId){ return '{"commentId":"'.$commentId.'"}'; } - public function sendDevisTalkNotifications(string $message,string $idNextcloud){ - if($idNextcloud === BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD || $idNextcloud === BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD){ - return true; + + + public function sendDevisTalkNotifications(string $message,string $targetUser ,string $senderUser){ + $senderAndTargetIsTheSameUser = $targetUser == $senderUser; + $senderUser = $senderAndTargetIsTheSameUser ? BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD : $senderUser; + if( $targetUser == BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD && $senderUser == BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD){ + return; } - $roomNames = $this->getUserDevisTalkRoomNames($idNextcloud); + $roomNames = $this->getUserDevisTalkRoomNames($targetUser , $senderUser); $room = $this->talkDb->getDevisTalkRoomByNames($roomNames); if($room == null){ $roomToken = $this->generateTalkRandomToken(); - $room = $this->talkDb->createDevisTalkRoomAndReturnDevisTalkRoom($idNextcloud,$roomToken); - $initialMessage = $this->talkDb->setDevisTalkRoomInitialMessageAndReturnMessage($room['id'],$idNextcloud); + $room = $this->talkDb->createDevisTalkRoomAndReturnDevisTalkRoom($targetUser,$senderUser, $roomToken); + $this->talkDb->setDevisTalkRoomInitialMessageAndReturnMessage($room['id'],$targetUser); } else{ $roomToken = $room['token']; } $devisMessage = $this->talkDb->createDevisTalkRoomMessageAndReturnMessage($room['id'],$message); $this->talkDb->updateRoomLastMessage($room['id'],$devisMessage['id']); - $this->talkDb->setAttendeeLastReadMessage($room['id'],$devisMessage['id'],BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD); + $this->talkDb->setAttendeeLastReadMessage($room['id'],$devisMessage['id'],$senderUser); //send notifications - $notificationsSubjectsParameters = $this->getNotificationsSubjectsParameters(); + $notificationsSubjectsParameters = $this->getNotificationsSubjectsParameters($senderUser); $notificationsMessageParameters = $this->getNotificationsMessageParameters($devisMessage['id']); - $this->talkDb->sendAttendeeNotifications($idNextcloud,$roomToken,$notificationsSubjectsParameters,$notificationsMessageParameters); - return true; + $this->talkDb->sendAttendeeNotifications($targetUser,$roomToken,$notificationsSubjectsParameters,$notificationsMessageParameters); } }