res_id in (
SELECT res_id FROM listinstance li
WHERE res_view_letterbox.res_id = li.res_id
AND difflist_type = 'VISA_CIRCUIT'
AND process_date ISNULL
GROUP BY res_id
HAVING count(res_id) > 1
)
Changer la dernière condition pour changer la condition sur le nombre. Ici : “> 1” soit tout sauf dernier viseur.
Si cette clause est paramétrée pour une action, l'action n'apparaît que si l'utilisateur N'EST PAS le dernier viseur.
Pour que l'action apparaisse seulement pour le dernier viseur (souvent signataire), reprendre l'ensemble de la cause en modifiant la dernière ligne telle que :
HAVING count(res_id) = 1
L'action n’apparaît pas si je suis le premier viseur
res_id in (
SELECT res_id
FROM listinstance
WHERE difflist_type='VISA_CIRCUIT'
AND item_id = @user_id
AND process_date is null
AND sequence > 0
)
Explication de la clause :
difflist_type = 'VISA_CIRCUIT' :
Le circuit est un circuit de visa et non d'avis
item_id = @user_id :
Je fais partie du circuit du courrier
process_date is null :
Date de signature non renseigné
sequence > 0 :
Tous les membres du circuit sauf le premier
res_id in (
SELECT res_id FROM listinstance li
WHERE li.listinstance_id in (
SELECT MIN(listinstance_id) + 1 FROM listinstance
WHERE listinstance.res_id = res_view_letterbox.res_id
AND difflist_type = 'VISA_CIRCUIT'
AND process_date ISNULL)
AND requested_signature
)
L'action n’apparaît que si je suis le dernier viseur
((res_id, @user_id) IN
(SELECT res_id, item_idFROM listinstance
WHERE difflist_type = 'VISA_CIRCUIT'
AND process_date ISNULL
AND item_mode = 'visa'
AND res_view_letterbox.res_id = res_id
AND sequence = (select max(sequence) FROM listinstance l
WHERE res_view_letterbox.res_id = res_id
AND item_mode = ('visa'))
ORDER BY listinstance_id asc limit 1))
Explication de la clause (faites par Lionel) :
difflist_type = 'VISA_CIRCUIT' :
Le circuit est un circuit de visa et non d'avis
item_mode = ‘visa’ :
L'utilisateur est au statut “viseur"'
process_date is null :
Date de signature non renseigné
Variante :
item_mode = ‘sign’ : L'utilisateur est au statut “signataire"'
res_id in (
SELECT res_id FROM listinstance li
WHERE li.listinstance_id in (
SELECT MIN(listinstance_id) + 1 FROM listinstance
WHERE listinstance.res_id = res_view_letterbox.res_id
AND difflist_type = 'VISA_CIRCUIT'
AND process_date ISNULL )
AND item_id = '16')
Explication de la clause :
SELECT MIN(listinstance_id) + 1 FROM listinstance :
L'utilisateur suivant dans le circuit
AND difflist_type = 'VISA_CIRCUIT' :
C'est un circuit de visa
AND process_date ISNULL :
Date de signature non renseigné
AND item_id = '16' :
Identifiant du prochain utilisateur souhaité
res_id in (
SELECT res_id
FROM listinstance
WHERE difflist_type='VISA_CIRCUIT'
AND item_id = @user_id
AND process_date is null
AND item_mode = 'visa')
difflist_type = 'VISA_CIRCUIT' :
Le circuit est un circuit de visa et non d'avis
item_mode = ‘visa’ :
L'utilisateur est au statut “viseur"'
process_date is null :
Date de signature non renseigné
Variante :
item_mode = ‘sign’ :
L'utilisateur est au statut "signataire"
res_id in (SELECT li.res_id
FROM listinstance li
WHERE li.difflist_type = 'VISA_CIRCUIT'
AND li.item_mode = 'visa'
AND li.process_date IS NULL
AND EXISTS (
SELECT 1
FROM listinstance next_li
WHERE next_li.res_id = li.res_id
AND next_li.item_mode = 'visa'
AND next_li.sequence > li.sequence
))
status <> 'PSIG' and res_id in (SELECT li.res_id
FROM listinstance li
WHERE li.difflist_type = 'VISA_CIRCUIT'
AND li.item_mode = 'visa'
AND li.process_date IS NULL
AND NOT EXISTS (
SELECT 1
FROM listinstance prev_li
WHERE prev_li.res_id = li.res_id
AND prev_li.item_mode = 'visa'
AND prev_li.sequence < li.sequence
AND prev_li.process_date IS NULL
)
AND NOT EXISTS (
SELECT 1
FROM listinstance next_li
WHERE next_li.res_id = li.res_id
AND next_li.item_mode = 'visa'
AND next_li.sequence > li.sequence
))