2024-04-29 00:17:15 +02:00
# frozen_string_literal: true
2023-09-04 12:07:04 +02:00
class Gestionnaire < ApplicationRecord
2023-10-06 17:12:00 +02:00
include UserFindByConcern
2023-09-04 12:07:04 +02:00
has_and_belongs_to_many :groupe_gestionnaires
2023-10-24 17:45:20 +02:00
has_many :commentaire_groupe_gestionnaires
2023-11-02 12:23:21 +01:00
has_many :follow_commentaire_groupe_gestionnaires
2023-08-25 22:53:30 +02:00
belongs_to :user
delegate :email , to : :user
default_scope { eager_load ( :user ) }
2023-09-28 17:45:39 +02:00
def email
user & . email
end
def active?
user & . active?
end
2023-08-25 22:53:30 +02:00
def can_be_deleted?
2023-10-01 12:52:05 +02:00
groupe_gestionnaires . roots . each do | rt |
return false unless rt . gestionnaires . size > 1
end
true
2023-08-25 22:53:30 +02:00
end
def registration_state
if user . active?
'Actif'
elsif user . reset_password_period_valid?
'En attente'
else
'Expiré'
end
end
2023-11-02 12:23:21 +01:00
def unread_commentaires? ( groupe_gestionnaire )
2023-12-10 18:25:58 +01:00
commentaires = CommentaireGroupeGestionnaire
2023-11-02 12:23:21 +01:00
. joins ( :groupe_gestionnaire )
. joins ( " LEFT JOIN follow_commentaire_groupe_gestionnaires ON follow_commentaire_groupe_gestionnaires.groupe_gestionnaire_id = commentaire_groupe_gestionnaires.groupe_gestionnaire_id AND follow_commentaire_groupe_gestionnaires.sender_id = commentaire_groupe_gestionnaires.sender_id AND follow_commentaire_groupe_gestionnaires.sender_type = commentaire_groupe_gestionnaires.sender_type AND follow_commentaire_groupe_gestionnaires.gestionnaire_id = #{ self . id } " )
2023-12-10 18:25:58 +01:00
. where ( groupe_gestionnaire_id : groupe_gestionnaire . id , sender_type : " Administrateur " )
unless groupe_gestionnaire . child_ids . empty?
commentaires = commentaires . or ( CommentaireGroupeGestionnaire . where ( groupe_gestionnaire_id : groupe_gestionnaire . child_ids , sender_type : " Gestionnaire " ) )
end
if groupe_gestionnaire . parent_id && ! groupe_gestionnaires . exists? ( id : groupe_gestionnaire . parent_id )
commentaires = commentaires . or ( CommentaireGroupeGestionnaire . where ( groupe_gestionnaire_id : groupe_gestionnaire . id , sender : self ) )
end
commentaires = commentaires . where ( 'follow_commentaire_groupe_gestionnaires.commentaire_seen_at IS NULL OR follow_commentaire_groupe_gestionnaires.commentaire_seen_at <= commentaire_groupe_gestionnaires.created_at' )
commentaires . exists?
2023-11-02 12:23:21 +01:00
end
2023-11-06 14:55:31 +01:00
def commentaire_seen_at ( groupe_gestionnaire , sender_id , sender_type )
2023-11-02 12:23:21 +01:00
FollowCommentaireGroupeGestionnaire
2023-11-06 14:55:31 +01:00
. where ( gestionnaire : self , groupe_gestionnaire : , sender_id : , sender_type : )
2023-11-02 12:23:21 +01:00
. order ( id : :desc )
. last
& . commentaire_seen_at
end
2023-11-06 14:55:31 +01:00
def mark_commentaire_as_seen ( groupe_gestionnaire , sender_id , sender_type )
2023-11-02 12:23:21 +01:00
FollowCommentaireGroupeGestionnaire
2023-11-06 14:55:31 +01:00
. where ( gestionnaire : self , groupe_gestionnaire : , sender_id : , sender_type : , unfollowed_at : nil )
2023-11-02 12:23:21 +01:00
. first_or_initialize . update ( commentaire_seen_at : Time . zone . now )
end
2023-08-25 22:53:30 +02:00
end