Add date and mentions to devis, update talk room creation logic

WIP : update message format
This commit is contained in:
Tiavina 2025-03-13 10:19:04 +03:00
parent e4b62e2678
commit 7e6992dfad
4 changed files with 64 additions and 54 deletions

View File

@ -3858,6 +3858,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 +3951,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));

View File

@ -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;

View File

@ -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){

View File

@ -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);
}
}