Merge branch 'fixes/fix-update-agenda-devis' into staging

This commit is contained in:
Tiavina 2025-03-13 10:45:43 +03:00
commit 0d3c5a1dea
4 changed files with 79 additions and 63 deletions

View File

@ -3787,7 +3787,7 @@ class Bdd {
if(empty($devisProducts)){ if(empty($devisProducts)){
return ""; return "";
} }
$productMessage = ". ACTE A FAIRE : "; $productMessage = "ACTE A FAIRE : ";
foreach($devisProducts as $product){ foreach($devisProducts as $product){
$productMessage.= html_entity_decode($product->produit_reference).", "; $productMessage.= html_entity_decode($product->produit_reference).", ";
} }
@ -3797,7 +3797,7 @@ class Bdd {
} }
private function getDevisTalkRoomClientContent($clientPrenom){ private function getDevisTalkRoomClientContent($clientPrenom){
$message = ". Pour PF: "; $message = "Pour PF: ";
$clientNameContent = "aucun"; $clientNameContent = "aucun";
$clientPrenomIsSet = $clientPrenom != null && $clientPrenom != "" && $clientPrenom != "-"; $clientPrenomIsSet = $clientPrenom != null && $clientPrenom != "" && $clientPrenom != "-";
if($clientPrenomIsSet){ if($clientPrenomIsSet){
@ -3816,20 +3816,25 @@ class Bdd {
$devisDate = new Datetime($devis->date); $devisDate = new Datetime($devis->date);
$devisDate = $devisDate->format('d/m/Y'); $devisDate = $devisDate->format('d/m/Y');
$message = "NOUVELLE INTERVENTION: "; $message = "NOUVELLE INTERVENTION: ";
$message .= html_entity_decode($devis->nom_defunt) . ' '; $message .= html_entity_decode($devis->nom_defunt);
$message .= 'le '.$devisDate. ' '; $message .= '
le '.$devisDate;
$message .= 'à '.$devis->startTime. ' '; $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); $clientMessageContent = $this->getDevisTalkRoomClientContent($devis->prenom);
$message .= $clientMessageContent; $message .= '
'.$clientMessageContent;
$productMessage = $this->getDevisTalkRoomProductSectionMessage($devis->products); $productMessage = $this->getDevisTalkRoomProductSectionMessage($devis->products);
$message .= $productMessage; $message .= '
'.$productMessage;
$comment = "aucun"; $comment = "aucun";
if(strtolower($devis->comment) != "commentaire" && $devis->comment != ""){ if(strtolower($devis->comment) != "commentaire" && $devis->comment != ""){
$comment = html_entity_decode($devis->comment); $comment = html_entity_decode($devis->comment);
} }
$message .= ". COMMENTAIRES: ".$comment.". "; $message .= "
COMMENTAIRES: ".$comment;
$locationCodes = [ $locationCodes = [
"Code portail" => $devis->portal_code, "Code portail" => $devis->portal_code,
"Code alarme" => $devis->alarm_code, "Code alarme" => $devis->alarm_code,
@ -3844,7 +3849,8 @@ class Bdd {
$locationCodeMessageContent .= $label. ": ".$value.". "; $locationCodeMessageContent .= $label. ": ".$value.". ";
} }
$locationCodeMessageContent = trim($locationCodeMessageContent); $locationCodeMessageContent = trim($locationCodeMessageContent);
$message .= $locationCodeMessageContent; $message .= '
'.$locationCodeMessageContent;
return $message; return $message;
} }
@ -3858,6 +3864,8 @@ class Bdd {
devis.id_defunt as defunt_id, devis.id_defunt as defunt_id,
devis.num, devis.num,
devis.comment, devis.comment,
devis.mentions,
devis.date,
devis.id_lieu as lieu_id, devis.id_lieu as lieu_id,
devis.id_client as client_id, devis.id_client as client_id,
defunt.nom as defunt_nom 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){ public function deleteDevisProduit($devisProductId){
$sql = "DELETE FROM ".$this->tableprefix."produit_devis WHERE id = ?;"; $sql = "DELETE FROM ".$this->tableprefix."produit_devis WHERE id = ?;";
$this->execSQLNoData($sql, array($devisProductId)); $this->execSQLNoData($sql, array($devisProductId));

View File

@ -153,7 +153,7 @@ class TalkDb {
$rooms = $this->execSQLNoJsonReturn( $rooms = $this->execSQLNoJsonReturn(
$sql, $sql,
[$names['createdByUser'],$names['createdByAdmin']]); [$names['target'],$names['sender']]);
if(!empty($rooms)){ if(!empty($rooms)){
return $rooms[0]; return $rooms[0];
@ -161,13 +161,13 @@ class TalkDb {
return null; return null;
} }
public function createDevisTalkRoomAndReturnDevisTalkRoom($idNextCloud,$token){ public function createDevisTalkRoomAndReturnDevisTalkRoom($targetUser,$senderUser,$token){
$roomName = '["'.$idNextCloud.'","'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"]'; $roomName = '["'.$targetUser.'","'.$senderUser.'"]';
$this->createDevisTalkRoom($roomName,$token); $this->createDevisTalkRoom($roomName,$token);
$room = $this->getDevisTalkRoomByName($roomName); $room = $this->getDevisTalkRoomByName($roomName);
$attendees = [ $attendees = [
$idNextCloud, $targetUser,
BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD $senderUser
]; ];
$this->createDevisTalkRoomAttendeesByActors($attendees,$room['id']); $this->createDevisTalkRoomAttendeesByActors($attendees,$room['id']);
return $room; return $room;

View File

@ -26,9 +26,11 @@ declare(strict_types=1);
namespace OCA\Gestion\Service; namespace OCA\Gestion\Service;
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;
use OCA\Gestion\Db\Bdd; use OCA\Gestion\Db\Bdd;
use OCP\IUserSession;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use OCA\Gestion\Helpers\VCalendarHelpers; use OCA\Gestion\Helpers\VCalendarHelpers;
@ -42,13 +44,22 @@ class GestionService {
/** @var TalkService */ /** @var TalkService */
private $talkService; private $talkService;
private $userConnectedUuid;
public function __construct( public function __construct(
Bdd $gestionBdd, Bdd $gestionBdd,
LoggerInterface $logger, LoggerInterface $logger,
TalkService $talkService) { TalkService $talkService,
IUserSession $userSession) {
$this->logger = $logger; $this->logger = $logger;
$this->gestionBdd = $gestionBdd; $this->gestionBdd = $gestionBdd;
$this->talkService = $talkService; $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{ private function GetIsCalendarPendingFromVCalendarString(string $vCalendarString): bool{
@ -82,24 +93,13 @@ class GestionService {
private function GetThanatoIdFromVCalendarString(string $vCalendarString) private function GetThanatoIdFromVCalendarString(string $vCalendarString)
{ {
$thanatoId = 0; $thanatoId = 0;
$thanatoNames = $this->GetAttendeesNameFromVCalendarString($vCalendarString); $organizerName = $this->getPrincipalUsernameFromVCalendarString($vCalendarString);
if(count($thanatoNames) > 0){ if($organizerName != null){
$thanatoName = $thanatoNames[0]; $thanatoIdFromDb = $this->gestionBdd->getThanatoIdByUserUuid($organizerName);
$thanatoIdFromDb = $this->gestionBdd->getThanatoIdByUserUuid($thanatoName);
if($thanatoIdFromDb != null){ if($thanatoIdFromDb != null){
$thanatoId = $thanatoIdFromDb; $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; return $thanatoId;
} }
@ -170,6 +170,8 @@ class GestionService {
$requestedDevisComment = $this->GetDevisCommentFromVCalendarString($vCalendarString); $requestedDevisComment = $this->GetDevisCommentFromVCalendarString($vCalendarString);
$this->gestionBdd->updateDevisComment($devis['id'],$requestedDevisComment,$devis['comment']); $this->gestionBdd->updateDevisComment($devis['id'],$requestedDevisComment,$devis['comment']);
$requestedDevisDate = $this->GetCalendarDateFromVCalendarString($vCalendarString);
$this->gestionBdd->updateDevisDate($devis['id'],$requestedDevisDate);
$articlesValue = $this->GetArticlesNameFromVCalendarString($vCalendarString); $articlesValue = $this->GetArticlesNameFromVCalendarString($vCalendarString);
if(!empty($articlesValue)){ if(!empty($articlesValue)){
$articleIds = $this->gestionBdd->getArticleIdsByArticleReferences($articlesValue); $articleIds = $this->gestionBdd->getArticleIdsByArticleReferences($articlesValue);
@ -184,6 +186,7 @@ class GestionService {
$requestedDevisComment = $this->GetDevisCommentFromVCalendarString($vCalendarString); $requestedDevisComment = $this->GetDevisCommentFromVCalendarString($vCalendarString);
$requestedArticleReferences = $this->GetArticlesNameFromVCalendarString($vCalendarString); $requestedArticleReferences = $this->GetArticlesNameFromVCalendarString($vCalendarString);
$requestedArticleIds = $this->gestionBdd->getArticleIdsByArticleReferences($requestedArticleReferences); $requestedArticleIds = $this->gestionBdd->getArticleIdsByArticleReferences($requestedArticleReferences);
$requestedDevisDate = $this->GetCalendarDateFromVCalendarString($vCalendarString);
$articleDevis = $this->gestionBdd->getProduitDevisByDevisId($devis['id']); $articleDevis = $this->gestionBdd->getProduitDevisByDevisId($devis['id']);
$articleDevisIds = []; $articleDevisIds = [];
foreach($articleDevis as $currentArticleDevis){ foreach($articleDevis as $currentArticleDevis){
@ -197,7 +200,8 @@ class GestionService {
$devis['client_id'] == $requestedClientId && $devis['client_id'] == $requestedClientId &&
$devis['lieu_id'] == $requestLocationId && $devis['lieu_id'] == $requestLocationId &&
$devis['comment'] == $requestedDevisComment && $devis['comment'] == $requestedDevisComment &&
$requestedArticleIds == $articleDevisIds; $requestedArticleIds == $articleDevisIds &&
$devis['date'] == $requestedDevisDate;
} }
public function HandleUpdatedCalendarObject(string $vCalendarString){ public function HandleUpdatedCalendarObject(string $vCalendarString){
@ -214,15 +218,17 @@ class GestionService {
$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->updateDevisMention($devis['id'],DevisMentionConstant::NEW);
$isDevisAlreadyUpdated = $this->CheckIfDevisIsAlreadyUpdated($devis,$vCalendarString); $isDevisAlreadyUpdated = $this->CheckIfDevisIsAlreadyUpdated($devis,$vCalendarString);
if($isDevisAlreadyUpdated){ if($isDevisAlreadyUpdated){
return true; return true;
} }
$devisIsAlreadyFactured = $devis['mentions'] == DevisMentionConstant::FACTURED || $devis['mentions'] == DevisMentionConstant::FACTURED_FORMATTED;
$this->UpdateDevisDataByVCalendarString($devis,$vCalendarString); $this->UpdateDevisDataByVCalendarString($devis,$vCalendarString);
$userName = $this->GetThanatoNameFromVCalendarString($vCalendarString); if($devisIsAlreadyFactured == false){
$devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName); $userName = $this->GetThanatoNameFromVCalendarString($vCalendarString);
$this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName); $devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName);
$this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid);
}
} }
else{ else{
//update from calendar leave or calendar pending to calendar devis //update from calendar leave or calendar pending to calendar devis
@ -280,22 +286,14 @@ class GestionService {
$articleIds = $this->gestionBdd->getArticleIdsByArticleReferences($articlesValue); $articleIds = $this->gestionBdd->getArticleIdsByArticleReferences($articlesValue);
$this->gestionBdd->insertDevisArticleFromDevisIdAndArticlesIdArray($devisId, $articleIds); $this->gestionBdd->insertDevisArticleFromDevisIdAndArticlesIdArray($devisId, $articleIds);
} }
$this->gestionBdd->createDevisTrajetFromVCalendar($devisId,$userName);
$devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($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){ private function GetThanatoNameFromVCalendarString($vCalendarString){
$thanatoName = null; $thanatoName = $this->getPrincipalUsernameFromVCalendarString($vCalendarString);
$thanatoNames = $this->GetAttendeesNameFromVCalendarString($vCalendarString); return $thanatoName ?? BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD;
if(count($thanatoNames) > 0){
$thanatoName = $thanatoNames[0];
}
else{
//get from calendar object
$thanatoName = $this->getPrincipalUsernameFromVCalendarString($vCalendarString);
}
return $thanatoName;
} }
private function GetClientIdFromVCalendarString(string $vCalendarString){ private function GetClientIdFromVCalendarString(string $vCalendarString){

View File

@ -48,12 +48,12 @@ class TalkService {
$this->talkDb = $talkDb; $this->talkDb = $talkDb;
} }
private function getUserDevisTalkRoomNames($idNextCloud){ private function getUserDevisTalkRoomNames($target ,$senderUser){
$roomNamesCreatedByUser = '["'.$idNextCloud.'","'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"]'; $roomNamesCreatedBytargetUser = '["'.$target.'","'.$senderUser.'"]';
$roomNamesCreatedByAdmin = '["'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'","'.$idNextCloud.'"]'; $roomNamesCreatedBySenderUser = '["'.$senderUser.'","'.$target.'"]';
return [ return [
"createdByUser" => $roomNamesCreatedByUser, "target" => $roomNamesCreatedBytargetUser,
"createdByAdmin" => $roomNamesCreatedByAdmin "sender" => $roomNamesCreatedBySenderUser
]; ];
} }
@ -68,36 +68,39 @@ class TalkService {
return $randomToken; return $randomToken;
} }
private function getNotificationsSubjectsParameters(){ private function getNotificationsSubjectsParameters(string $senderUser){
return '{"userType":"users","userId":"'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"}'; return '{"userType":"users","userId":"'.$senderUser.'"}';
} }
private function getNotificationsMessageParameters($commentId){ private function getNotificationsMessageParameters($commentId){
return '{"commentId":"'.$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); $room = $this->talkDb->getDevisTalkRoomByNames($roomNames);
if($room == null){ if($room == null){
$roomToken = $this->generateTalkRandomToken(); $roomToken = $this->generateTalkRandomToken();
$room = $this->talkDb->createDevisTalkRoomAndReturnDevisTalkRoom($idNextcloud,$roomToken); $room = $this->talkDb->createDevisTalkRoomAndReturnDevisTalkRoom($targetUser,$senderUser, $roomToken);
$initialMessage = $this->talkDb->setDevisTalkRoomInitialMessageAndReturnMessage($room['id'],$idNextcloud); $this->talkDb->setDevisTalkRoomInitialMessageAndReturnMessage($room['id'],$targetUser);
} }
else{ else{
$roomToken = $room['token']; $roomToken = $room['token'];
} }
$devisMessage = $this->talkDb->createDevisTalkRoomMessageAndReturnMessage($room['id'],$message); $devisMessage = $this->talkDb->createDevisTalkRoomMessageAndReturnMessage($room['id'],$message);
$this->talkDb->updateRoomLastMessage($room['id'],$devisMessage['id']); $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 //send notifications
$notificationsSubjectsParameters = $this->getNotificationsSubjectsParameters(); $notificationsSubjectsParameters = $this->getNotificationsSubjectsParameters($senderUser);
$notificationsMessageParameters = $this->getNotificationsMessageParameters($devisMessage['id']); $notificationsMessageParameters = $this->getNotificationsMessageParameters($devisMessage['id']);
$this->talkDb->sendAttendeeNotifications($idNextcloud,$roomToken,$notificationsSubjectsParameters,$notificationsMessageParameters); $this->talkDb->sendAttendeeNotifications($targetUser,$roomToken,$notificationsSubjectsParameters,$notificationsMessageParameters);
return true;
} }
} }