diff --git a/apps/maarch_entreprise/admin/users/users_management_controler.php b/apps/maarch_entreprise/admin/users/users_management_controler.php
index 447a731ef8114b99331877218af3470e0bc8fa38..536fd522b001b445b59bb71ae9b0f4effd26e749 100644
--- a/apps/maarch_entreprise/admin/users/users_management_controler.php
+++ b/apps/maarch_entreprise/admin/users/users_management_controler.php
@@ -518,31 +518,150 @@ function display_up_check($user_id)
         $old_user=$_POST['id'];
         $new_user=$_POST['user_id'];
 
-        if ($new_user <> 'NO_USER') {
+        if ($new_user <> 'no_user') {
             //LIST OF ENTITIES
-            $entitiesList = [];
+            $resListToCheck = [];
+
             foreach ($_SESSION['m_admin']['entitiesUserToRedirect']['entity_id'] as $entity) {
-                $query = "SELECT res_id FROM res_letterbox WHERE confidentiality = 'Y' AND destination = ? AND dest_user = ? AND status <> 'END'";
+                //CHECK LISTMODEL
+                if (isset($_POST['entityModels'])) {
+                    $query = "UPDATE listmodels SET item_id = ? WHERE object_id = ? AND item_id = ?";
+                    $arrayPDO = array($new_user,$entity,$old_user);
+                    $db->query($query, $arrayPDO);
+                }
+
+                //CHECK DIFFLIST
+                $query = "SELECT distinct(r.res_id),r.dest_user FROM res_view_letterbox r INNER JOIN listinstance l ON r.res_id = l.res_id WHERE confidentiality = 'Y' AND destination = ? AND item_id = ? AND closing_date is null AND difflist_type = 'entity_id' and process_date is null";
                 $arrayPDO = array($entity,$old_user);
                 $stmt =  $db->query($query, $arrayPDO);
-                $res = $stmt->fetchObject();
-                $resListToCheck[] = $res->res_id;
+                while ($res = $stmt->fetchObject()) {
+                    $resListToCheck[] = $res->res_id;
+                    $destList[] = $res->dest_user;
+                }
+                
             }
-
+            $i=0;
             foreach ($resListToCheck as $res_id) {
-                //UPDATE res_letterbox
-                $query = "UPDATE res_letterbox SET dest_user = ? WHERE res_id = ?";
-                $arrayPDO = array($new_user,$res_id);
+                if ($destList[$i] == $old_user) {
+                    //UPDATE res_letterbox for dest
+                    $query = "UPDATE res_letterbox SET dest_user = ? WHERE res_id = ?";
+                    $arrayPDO = array($new_user,$res_id);
+                    $db->query($query, $arrayPDO);
+                }
+
+                //UDPATE listinstance for all item_mode
+                $query = "UPDATE listinstance SET item_id = ? WHERE res_id = ? AND item_id = ? AND difflist_type = 'entity_id'";
+                $arrayPDO = array($new_user, $res_id, $old_user);
+                $db->query($query, $arrayPDO);
+
+                //ADD history entry
+                $query = "SELECT listinstance_id, item_mode FROM listinstance WHERE res_id = ? and item_id = ? AND difflist_type = 'entity_id'";
+                $arrayPDO = array($res_id,$new_user);
                 $stmt =  $db->query($query, $arrayPDO);
+                while ($res = $stmt->fetchObject()) {
+                    $listinstance_id = $res->listinstance_id;
+                    $item_mode = $res->item_mode;
+                    include_once 'core' . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'class_history.php';
+                    $hist = new history();
+                    $hist->add(
+                        ENT_LISTINSTANCE,
+                        $listinstance_id,
+                        'UP',
+                        'diff'.$item_mode.'user',
+                        'Réaffectation du document confidentiel '.$res_id.' de '. $old_user .' à '. $new_user . ' en tant que "'.$item_mode.'"',
+                        $_SESSION['config']['databasetype'],
+                        'entities'
+                    );
+                }
+                $i++;
+            }
+
+            $resListToCheck = [];
+            foreach ($_SESSION['m_admin']['entitiesUserToRedirect']['entity_id'] as $entity) {
+                //CHECK VISA_CIRCUIT
+                $query = "SELECT distinct(r.res_id) FROM res_view_letterbox r INNER JOIN listinstance l ON r.res_id = l.res_id WHERE confidentiality = 'Y' AND destination = ? AND item_id = ? AND closing_date is null AND difflist_type = 'VISA_CIRCUIT' and process_date is null";
+                $arrayPDO = array($entity,$old_user);
+                $stmt =  $db->query($query, $arrayPDO);
+                while ($res = $stmt->fetchObject()) {
+                    $resListToCheck[] = $res->res_id;
+                }                
+            }
+            foreach ($resListToCheck as $res_id) {
 
                 //UDPATE listinstance
-                $query = "UPDATE listinstance SET item_id = ? WHERE res_id = ? and item_mode = 'dest'";
-                $arrayPDO = array($new_user,$res_id);
+                $query = "UPDATE listinstance SET item_id = ? WHERE res_id = ? AND item_id = ? AND difflist_type = 'VISA_CIRCUIT' and process_date is null";
+                $arrayPDO = array($new_user,$res_id,$old_user);
+                $db->query($query, $arrayPDO);
+
+                //ADD history entry
+                $query = "SELECT listinstance_id FROM listinstance WHERE res_id = ? AND item_id = ? AND difflist_type = 'VISA_CIRCUIT'";
+                $arrayPDO = array($res_id,$new_user);
                 $stmt =  $db->query($query, $arrayPDO);
+                $res = $stmt->fetchObject();
+                $listinstance_id = $res->listinstance_id;
+                include_once 'core' . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'class_history.php';
+                $hist = new history();
+                $hist->add(
+                    ENT_LISTINSTANCE,
+                    $listinstance_id,
+                    'UP',
+                    'diffvisauser',
+                    'Réaffectation du document confidentiel '.$res_id.' de '. $old_user .' à '. $new_user . ' dans le circuit de visa',
+                    $_SESSION['config']['databasetype'],
+                    'entities'
+                );
+
+            }      
+        } else {
+            
+            $resListToCheck = [];
+            foreach ($_SESSION['m_admin']['entitiesUserToRedirect']['entity_id'] as $entity) {
+                if (isset($_POST['entityModels'])) {
+                    //CHECK LISTMODELS
+                    $query = "DELETE FROM listmodels WHERE item_id = ? AND object_id = ? AND item_mode <> 'dest'";
+                    $arrayPDO = array($old_user,$entity);
+                    $db->query($query, $arrayPDO);
+
+                    //FIX AND RESET POS AND MODE VISA CIRCUIT
+                    /*$query = "SELECT item_id FROM listmodels WHERE object_id = ? AND object_type = 'VISA_CIRCUIT' ORDER BY item_mode DESC, sequence ASC";
+                    $arrayPDO = array($entity);
+                    $stmt = $db->query($query, $arrayPDO);
+                    $nbRes = $stmt->rowCount();
+                    $i = 1;
+                    
+                    while ($res = $stmt->fetchObject()) {
+                        if ($i == $nbRes) {
+                            $query = "UPDATE listmodels SET SEQUENCE = '0', item_mode = 'sign' WHERE item_id = ? AND object_id = ? AND object_type = 'VISA_CIRCUIT'";
+                            $arrayPDO = array($res->item_id,$entity);
+                            $db->query($query, $arrayPDO);
+                        } else {
+                            $query = "UPDATE listmodels SET SEQUENCE = ?, item_mode = 'visa' WHERE item_id = ? AND object_id = ? AND object_type = 'VISA_CIRCUIT'";
+                            $arrayPDO = array($i-1,$entity,$res->item_id);
+                            $db->query($query, $arrayPDO);
+                        }
+                        $i++;
+                    }*/
+                }
+
+                //CHECK VISA_CIRCUIT
+                $query = "SELECT distinct(r.res_id) FROM res_view_letterbox r INNER JOIN listinstance l ON r.res_id = l.res_id WHERE confidentiality = 'Y' AND destination = ? AND item_id = ? AND closing_date is null AND difflist_type = 'VISA_CIRCUIT' and process_date is null";
+                $arrayPDO = array($entity,$old_user);
+                $stmt =  $db->query($query, $arrayPDO);
+                while ($res = $stmt->fetchObject()) {
+                    $resListToCheck[] = $res->res_id;
+                }  
+            }
+
+            foreach ($resListToCheck as $res_id) {
+
+                //UDPATE listinstance
+                $query = "UPDATE listinstance SET item_id = ?, process_comment = '[DEL] supprimé - changement d’entité', process_date = CURRENT_TIMESTAMP WHERE res_id = ? AND item_id = ? AND difflist_type = 'VISA_CIRCUIT' and process_date is null";
+                $arrayPDO = array($old_user,$res_id,$old_user);
+                $db->query($query, $arrayPDO);
 
                 //ADD history entry
-                $query = "SELECT listinstance_id FROM listinstance WHERE res_id = ? and item_mode = 'dest'";
-                $arrayPDO = array($res_id);
+                $query = "SELECT listinstance_id FROM listinstance WHERE res_id = ? AND item_id = ? AND difflist_type = 'VISA_CIRCUIT'";
+                $arrayPDO = array($res_id,$old_user);
                 $stmt =  $db->query($query, $arrayPDO);
                 $res = $stmt->fetchObject();
                 $listinstance_id = $res->listinstance_id;
@@ -552,61 +671,109 @@ function display_up_check($user_id)
                     ENT_LISTINSTANCE,
                     $listinstance_id,
                     'UP',
-                    'diffdestuser',
-                    'Réaffectation du document confidentiel '.$res_id.' de '. $old_user .' à '. $new_user . ' en tant que "dest"',
+                    'diffvisauser',
+                    'Désactivation de l\'utilisateur '. $old_user .' dans le circuit de visa du document confidentiel '.$res_id,
                     $_SESSION['config']['databasetype'],
                     'entities'
                 );
 
-            }        
+            }
+            $resListToCheck = [];
+            foreach ($_SESSION['m_admin']['entitiesUserToRedirect']['entity_id'] as $entity) {
+                //CHECK Listinstance
+                $query = "SELECT distinct(r.res_id)  FROM res_view_letterbox r INNER JOIN listinstance l ON r.res_id = l.res_id WHERE confidentiality = 'Y' AND destination = ? AND closing_date is null AND item_id = ? AND difflist_type = 'entity_id' AND item_mode <> 'dest' AND process_date is null";
+                $arrayPDO = array($entity,$old_user);
+                $stmt =  $db->query($query, $arrayPDO);
+                while ($res = $stmt->fetchObject()) {
+                    $resListToCheck[] = $res->res_id;
+                }  
+            }
+
+            foreach ($resListToCheck as $res_id) {
+
+                //UDPATE listinstance
+                $query = "UPDATE listinstance SET item_id = ?, process_comment = '[DEL] supprimé - changement d’entité', process_date = CURRENT_TIMESTAMP WHERE res_id = ? AND item_id = ? AND difflist_type = 'entity_id' AND process_date is null and item_mode <> 'dest'";
+                $arrayPDO = array($old_user,$res_id,$old_user);
+                $db->query($query, $arrayPDO);
+
+                //ADD history entry
+                $query = "SELECT listinstance_id,item_mode FROM listinstance WHERE res_id = ? AND item_id = ? AND difflist_type = 'entity_id'";
+                $arrayPDO = array($res_id,$old_user);
+                $stmt =  $db->query($query, $arrayPDO);
+                while ($res = $stmt->fetchObject()) {
+                    $listinstance_id = $res->listinstance_id;
+                    $item_mode = $res->item_mode;
+                    include_once 'core' . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'class_history.php';
+                    $hist = new history();
+                    $hist->add(
+                        ENT_LISTINSTANCE,
+                        $listinstance_id,
+                        'UP',
+                        'diff'.$item_mode.'user',
+                        'Désactivation de l\'utilisateur '. $old_user .' en tant que "'.$item_mode.'" du document confidentiel '.$res_id,
+                        $_SESSION['config']['databasetype'],
+                        'entities'
+                    );
+                }
+
+            }
+
         }
         $_SESSION['info'] = _USER_UPDATED;
+        //echo '<script type="text/javascript">window.top.location=\''.$_SESSION['config']['businessappurl'] .'index.php?page=users_management_controler&admin=users&id='.$old_user.'&mode=up\'</script>';
         echo '<script type="text/javascript">window.top.location=\''.$_SESSION['config']['businessappurl'] .'index.php?page=users_management_controler&admin=users&mode=list\'</script>';
     }
+    $frm = '';
+    $frm .= '<h1><i class="fa fa-user fa-2x"></i> '._UPDATE.' '.strtolower(_USER).': <i>'.$user_id.'</i></h1>';
+    $frm .= '<div class="error" id="main_error">'.$_SESSION['error'].'</div>';
+    $_SESSION['error'] = "";
+    $frm .= '<br>';
+    $frm .= '<div class="block">';
+
+    //INFO BLOCK
+    $frm .= '<h3 style="text-align:center;"><i class="fa fa-info-circle"></i> '._INFO_MESSAGE_UPDATE_USER.' <i class="fa fa-info-circle"></i></h3>';
+
+    //RESLIST
+    $frm .= '<br/>';
+    $frm .= '<ul style="width: 400px;margin: auto;">';
+    for ($i=0;$i<count($_SESSION['m_admin']['entitiesUserToRedirect']['entity_id']);$i++) {
+        $frm .= '<li style="list-style: inside;"><b>'.$_SESSION['m_admin']['entitiesUserToRedirect']['nbDocs'][$i].'</b> '._CONFIDENTIAL_DOCUMENTS .' ('._ENTITY.' <b>'.$_SESSION['m_admin']['entitiesUserToRedirect']['entity_id'][$i].')</b></li>';
+    }
+    $frm .= '</ul>';
+    $frm .= '<br/>';
+
+    //USER LIST REPLACEMENT
+    $frm .= '<form name="user_del" id="user_del" style="width: 100%;text-align:center;margin:auto;" method="post" class="forms">';
+    $frm .= '<input type="hidden" value="'.$user_id.'" name="id">';
+    $frm .= '<select name="user_id" id="user_id">';
+    $frm .= '<option value="no_user">'._NO_REPLACEMENT.'</option>';
+    $stmt = $db->query("select * from users order by user_id ASC");
+    while ($users = $stmt->fetchObject()) {
+        if ($users->user_id != $user_id) {
+            $frm .= '<option value="'.$users->user_id.'">'.$users->lastname.' '.$users->firstname.'</option>';
+        }
+    }
+    $frm .= '</select>';
 
-        echo '<h1><i class="fa fa-users fa-2x"></i>'._UPDATE.' '.strtolower(_USER).': <i>'.$user_id.'</i></h1>';
-        echo "<div class='error' id='main_error'>".$_SESSION['error']."</div>";
-        $_SESSION['error'] = "";
-        ?>
-        <br>
-        <div class="block">
-        <div id="main_error" style="text-align:center;">
-            <b><?php
-            echo _WARNING_MESSAGE_UPDATE_USER;
-            ?></b>
-        </div>
-        <br/>
-        <form name="user_del" id="user_del" style="width: 350px;margin:auto;" method="post" class="forms">
-            <input type="hidden" value="<?php functions::xecho($user_id);?>" name="id">
-            <?php
-            for ($i=0;$i<count($_SESSION['m_admin']['entitiesUserToRedirect']['entity_id']);$i++) {
-                echo "<h3>".$_SESSION['m_admin']['entitiesUserToRedirect']['nbDocs'][$i]." "._CONFIDENTIAL_DOCUMENTS ." ("._TO." ".$user_id." - ".$_SESSION['m_admin']['entitiesUserToRedirect']['entity_id'][$i]."):</h3>";
-            }
-            ?>
-            <br>
-            <br>
-            <select name="user_id" id="user_id" onchange=''>
-                <option value="no_user"><?php echo _NO_REPLACEMENT;?></option>
-                <?php
-                $stmt = $db->query("select * from users order by user_id ASC");
-                while ($users = $stmt->fetchObject()) {
-                    if ($users->user_id != $user_id) {
-                        ?>
-                    <option value="<?php functions::xecho($users->user_id);?>"><?php functions::xecho($users->lastname . " " . $users->firstname);?></option>
-                    <?php
-                    }
-                    
-                }
-                    ?>
-                </select>
-                 <p class="buttons">
-                    <input type="submit" value="<?php echo _DEL_AND_REAFFECT;?>" name="valid" class="button" onclick='if(document.getElementById("doc_type_id").options[document.getElementById("doc_type_id").selectedIndex].value == ""){alert("<?php echo _CHOOSE_REPLACEMENT_DOCTYPES ?> !");return false;}else{return(confirm("<?php echo _REALLY_DELETE.$s_id;?> \n\r\n\r<?php echo _DEFINITIVE_ACTION?>"));}'/>
-                    <input type="button" value="<?php echo _CANCEL;?>" class="button" onclick="window.location.href='<?php echo $_SESSION['config']['businessappurl'] ?>index.php?page=usergroups_management_controler&mode=list&admin=groups&order=<?php functions::xecho($_REQUEST['order']);?>&order_field=<?php functions::xecho($_REQUEST['order_field']);?>&start=<?php functions::xecho($_REQUEST['start']);?>&what=<?php functions::xecho($_REQUEST['what']);?>';"/>
-                </p>
-            </form>
-            </div>
-        <?php
-        exit();  
+    //CLEAN LISTMODEL BUTTON
+    $frm .= '<input type="checkbox" name="entityModels" id="entityModels" /> '._MESSAGE_REAFFECT_USER_LISTMODEL;
+
+    $frm .= '<br/>';
+    $frm .= '<br/>';
+
+    //WARNING BLOCK
+    $frm .= '<p style="text-align:center;color:red;"><i class="fa fa-warning"></i> '._WARNING_MESSAGE_UPDATE_USER.' <i class="fa fa-warning"></i></p>';
+
+    //ACTIONS BUTTONS
+    $frm .= '<p class="buttons">';
+    $frm .= '<input type="submit" value="'._DEL_AND_REAFFECT.'" name="valid" class="button" />';
+    $frm .= ' <input type="button" value="'._CANCEL.'" class="button" onclick="window.location.href=\''.$_SESSION['config']['businessappurl'].'index.php?page=users_management_controler&mode=up&admin=users&id='.$user_id.'&order='.$_REQUEST['order'].'&order_field='.$_REQUEST['order_field'].'&start='.$_REQUEST['start'].'&what='.$_REQUEST['what'].'\'" />';
+    $frm .= '</p>';
+
+    $frm .= '</form>';
+    $frm .= '</div>';
+    echo $frm;
+    exit();  
 }
 
 /**
@@ -735,8 +902,8 @@ function validate_user_submit()
     }
     for ($i=0;$i<count($entitiesUserCheck);$i++) {
         if (!in_array($entitiesUserCheck[$i]['ENTITY_ID'], $newUserEntitiesList)) {
-            $query = "SELECT count(res_id) FROM res_letterbox WHERE confidentiality = 'Y' AND destination = ? AND dest_user = ? AND status <> 'END'";
-            $arrayPDO = array($entitiesUserCheck[$i]['ENTITY_ID'],$_REQUEST['user_id']);
+            $query = "SELECT count(distinct(r.res_id)) FROM res_view_letterbox r INNER JOIN listinstance l ON r.res_id = l.res_id WHERE ((dest_user = ? and item_id = ?) OR (item_id = ? AND difflist_type = 'entity_id' AND process_comment is null) OR (item_id = ? AND difflist_type = 'VISA_CIRCUIT' AND process_date is null)) AND closing_date is null AND confidentiality = 'Y' AND destination = ?";
+            $arrayPDO = array($_REQUEST['user_id'],$_REQUEST['user_id'],$_REQUEST['user_id'],$_REQUEST['user_id'],$entitiesUserCheck[$i]['ENTITY_ID']);
             $stmt =  $db->query($query, $arrayPDO);
             $res = $stmt->fetchObject();   
             if ($res->count > 0) {
@@ -894,6 +1061,7 @@ function validate_user_submit()
         }
         unset($_SESSION['m_admin']);
         header("location: ".$_SESSION['config']['businessappurl']."index.php?page=".$pageName."&mode=list&admin=users&order=".$status['order']."&order_field=".$status['order_field']."&start=".$status['start']."&what=".$status['what']);
+        //header("location: ".$_SESSION['config']['businessappurl']."index.php?page=".$pageName."&mode=up&admin=users&id=".$_REQUEST['user_id']."&order=".$status['order']."&order_field=".$status['order_field']."&start=".$status['start']."&what=".$status['what']);
     }
 }
 
diff --git a/apps/maarch_entreprise/index.php b/apps/maarch_entreprise/index.php
index 220bb57d71706937986ab178b6dd27f364026aa1..98940818e980c3208c84fd022822550ab779edfa 100644
--- a/apps/maarch_entreprise/index.php
+++ b/apps/maarch_entreprise/index.php
@@ -327,7 +327,7 @@ if (file_exists($path)) {
                 <script>
                     var main_error = $j('#main_error_popup');
                     if (main_error != null) {
-                        main_error.style.display = 'table-cell';
+                        main_error.css({"display":"table-cell"})
                         Element.hide.delay(10, 'main_error_popup');
                     }
                 </script>
@@ -339,7 +339,7 @@ if (file_exists($path)) {
                 <script>
                     var main_info = $j('#main_info');
                     if (main_info != null) {
-                        main_info.style.display = 'table-cell';
+                        main_info.css({"display":"table-cell"})
                         Element.hide.delay(10, 'main_info');
                     }
                 </script>
diff --git a/apps/maarch_entreprise/lang/en.php b/apps/maarch_entreprise/lang/en.php
index 00914a2257d8695fea4ff9371e208509bbfae189..83830e903cb0b36c877ce4ebdd01abec937c8e3f 100644
--- a/apps/maarch_entreprise/lang/en.php
+++ b/apps/maarch_entreprise/lang/en.php
@@ -149,6 +149,12 @@ if (!defined("_WARNING_MESSAGE_DEL_GROUP"))
     define("_WARNING_MESSAGE_DEL_GROUP", "Warning :<br>There are users associated to this group. Choose a replacement group:");
 if (!defined("_WARNING_MESSAGE_DEL_USER"))
     define("_WARNING_MESSAGE_DEL_USER", "Warning :<br> There are diffusion lists associated to this user. Choose a replacement user:");
+if (!defined("_INFO_MESSAGE_UPDATE_USER"))
+    define("_INFO_MESSAGE_UPDATE_USER", "In order to keep confidentiality of documents in progress of current user's entity, you can replace him with another user");
+if (!defined("_WARNING_MESSAGE_UPDATE_USER"))
+    define("_WARNING_MESSAGE_UPDATE_USER", "If you choose \"NO REPLACEMENT\" and current user is in dest, he can't be removed !");
+if (!defined("_MESSAGE_REAFFECT_USER_LISTMODEL"))
+    define("_MESSAGE_REAFFECT_USER_LISTMODEL", "Include user reassignment in list models");
 if (!defined("_USERS_IN_GROUPS"))
     define("_USERS_IN_GROUPS", "Users in the group");
 if (!defined("_LISTE_DIFFUSION_IN_USER")) define("_LISTE_DIFFUSION_IN_USER", "Diffusion list(s) for the user");
diff --git a/apps/maarch_entreprise/lang/fr.php b/apps/maarch_entreprise/lang/fr.php
index 912f6e52388f2208a382c9c65d33d6d0d1e4abcc..6975039a1dae17a26a8b34e57ef916b107539703 100755
--- a/apps/maarch_entreprise/lang/fr.php
+++ b/apps/maarch_entreprise/lang/fr.php
@@ -148,9 +148,13 @@ if (!defined("_WARNING_MESSAGE_DEL_TYPE"))
 if (!defined("_WARNING_MESSAGE_DEL_GROUP"))
     define("_WARNING_MESSAGE_DEL_GROUP", "Avertissement :<br> Il existe des utilisateurs associés à ce groupe. Choisissez un groupe de remplacement :");
 if (!defined("_WARNING_MESSAGE_DEL_USER"))
-    define("_WARNING_MESSAGE_DEL_USER", "Avertissement :<br> Il existe des modèles de liste de diffusion avec cet utilisateur. Choisissez un utilisateur de remplacement :");
+    define("_WARNING_MESSAGE_DEL_USER", "Avertissement :<br> Il existe des listes de diffusion associées à cet utilisateur. Choisissez un utilisateur de remplacement :");
+if (!defined("_INFO_MESSAGE_UPDATE_USER"))
+    define("_INFO_MESSAGE_UPDATE_USER", "Afin de garder la confidentialité des courriers en cours de traitement du service, il est recommandé de réaffecter ceux-ci à un autre utilisateur");
 if (!defined("_WARNING_MESSAGE_UPDATE_USER"))
-    define("_WARNING_MESSAGE_UPDATE_USER", "Avertissement :<br>Afin de garder la confidentialité des courriers en cours de traitement du service, il est recommandé de réaffecter ceux-ci à un autre utilisateur :");
+    define("_WARNING_MESSAGE_UPDATE_USER", "Si vous choisissez \"AUCUN REMPLACEMENT\" et que l'utilisateur actuel est en destinataire, celui ne sera pas supprimé !");
+if (!defined("_MESSAGE_REAFFECT_USER_LISTMODEL"))
+    define("_MESSAGE_REAFFECT_USER_LISTMODEL", "Inclure la réaffectation dans les modèles de liste de diffusion");
 if (!defined("_USERS_IN_GROUPS"))
     define("_USERS_IN_GROUPS", "utilisateur(s) dans le groupe");
 if (!defined("_LISTE_DIFFUSION_IN_USER")) define("_LISTE_DIFFUSION_IN_USER", "liste(s) de diffusion pour l'utilisateur ");
diff --git a/modules/entities/difflist_display.php b/modules/entities/difflist_display.php
index 40c3c67840160570ea70173c37a0ea51bf7ebf50..ee7a3f08293b757125781958ddb6c13966aa2893 100644
--- a/modules/entities/difflist_display.php
+++ b/modules/entities/difflist_display.php
@@ -1,103 +1,112 @@
-<?php
-# Display list
-/* Requires 
-    $difflist = diffusion list array 
-        $_SESSION[m_admin]['entities'][listmodel]
-        $_SESSION[$origin][listinstance]
-    $roles = list of available roles
-    $onlyCC =  hide 'dest';
-*/
-    echo '<div style="max-height:490px;overflow:auto;">';
-    $empty = 0;
-    $nb_roles = 0;
-    if($origin == 'indexing' && $category == 'outgoing'){
-        //$difflist['copy'] = array();
-    }
-
-    foreach($roles as $role_id => $role_label) {
-        $nb_role++;
-        if($category == 'outgoing' && $role_label == 'Destinataire'){
-            $role_label = _SHIPPER;
-        }
-        if(($specific_role != $role_id && $specific_role.'_copy' != $role_id && $specific_role.'_info' != $role_id) && isset($specific_role) && $specific_role <> '') 
-            continue;
-        if(count($difflist[$role_id]['users']) > 0
-            || count($difflist[$role_id]['entities']) > 0
-        ) { 
-            $empty++;
-            ?>
-            <h3 class="sstit" style="font-size: 1.2em;"><?php functions::xecho($role_label);?></h3><?php
-        if(count($difflist[$role_id]['users']) > 0) { ?>
-            <table cellpadding="0" cellspacing="0" border="0" class="listingsmall liste_diff spec" style="width:100%;margin:0;"><?php
-            $color = ' class="col"';
-            for($i=0, $l=count($difflist[$role_id]['users']);
-                $i<$l;
-                $i++
-            ) {
-                $user = $difflist[$role_id]['users'][$i];
-                
-                if ($color == ' class="col"') $color = ' ';
-                else $color = ' class="col"';?>
-                <tr <?php echo $color;?> >
-                    <td style="width:15%;text-align:center;">
-                        <i class="fa fa-user fa-2x" title="<?php echo _USER;?>"></i>
-                    </td>
-                    <td style="width:10%;"><?php
-                    /* if($user['visible'] == 'Y') { ?>
-                        <i class="fa fa-check fa-2x" title="<?php echo _VISIBLE;?>"></i> <?php
-                    } else {?>
-                        <i class="fa fa-times fa-2x" title="<?php echo _NOT_VISIBLE;?>"></i><?php
-                    } */?>
-                    </td>
-                    <td style="width:37%;"><?php functions::xecho($user['lastname'] . " " . $user['firstname']);?></td>
-                    <td style="width:38%;"><?php functions::xecho($user['entity_label']);?></td>
-                    <?php
-                    if($showStatus == true){
-                        if(!empty($difflist[$role_id]['users'][$i]['process_date'])){
-                            echo '<td style="width:5%;"><i class="fa fa-check" aria-hidden="true" style="color:green;"></i></td>';
-                        }else{
-                            echo '<td style="width:5%;"><i class="fa fa-hourglass-half" aria-hidden="true"></i></td>';
-                        }
-                    }
-                    
-                    ?>
-                </tr><?php
-            } ?>
-            </table><?php
-        } 
-        if(count($difflist[$role_id]['entities']) > 0) { ?>
-            <table cellpadding="0" cellspacing="0" border="0" class="listingsmall liste_diff spec" style="width:100%;margin:0;"><?php
-            $color = ' class="col"';
-            for ($i=0, $l=count($difflist[$role_id]['entities']);
-                $i<$l;
-                $i++
-            ) {
-                $entity = $difflist[$role_id]['entities'][$i];
-                if ($color == ' class="col"') $color = '';
-                else $color = ' class="col"';?>
-                <tr <?php echo $color;?> >
-                    <td style="width:15%;text-align:center;">
-                        <i class="fa fa-sitemap fa-2x" title="<?php echo _ENTITY . " " . $role_label ;?>" ></i>
-                    </td>
-                    <td style="width:10%;"><?php
-                    /*if($entity['visible'] == 'Y') { ?>
-                        <i class="fa fa-check fa-2x" title="<?php echo _VISIBLE;?>"></i><?php
-                    } else {?>
-                        <i class="fa fa-times fa-2x" title="<?php echo _NOT_VISIBLE;?>"></i><?php
-                    }*/ ?>
-                    </td>
-                    <td style="width:37%;"><?php functions::xecho($entity['entity_id']);?></td>
-                    <td style="width:38%;"><?php functions::xecho($entity['entity_label']);?></td>
-                </tr> <?php
-            } ?>
-            </table><?php
-        } ?>
-        <br/><?php
-        }
-    }
-
-    if($empty == $nb_roles){
-       echo '<div style="font-style:italic;text-align:center;color:#ea0000;margin:10px;">'._DIFF_LIST.' '._IS_EMPTY.'</div>';
-    } 
-echo '</div>';
-?>
+<?php
+# Display list
+/* Requires 
+    $difflist = diffusion list array 
+        $_SESSION[m_admin]['entities'][listmodel]
+        $_SESSION[$origin][listinstance]
+    $roles = list of available roles
+    $onlyCC =  hide 'dest';
+*/
+    echo '<div style="max-height:490px;overflow:auto;">';
+    $empty = 0;
+    $nb_roles = 0;
+    if($origin == 'indexing' && $category == 'outgoing'){
+        //$difflist['copy'] = array();
+    }
+
+    foreach($roles as $role_id => $role_label) {
+        $nb_role++;
+        if($category == 'outgoing' && $role_label == 'Destinataire'){
+            $role_label = _SHIPPER;
+        }
+        if(($specific_role != $role_id && $specific_role.'_copy' != $role_id && $specific_role.'_info' != $role_id) && isset($specific_role) && $specific_role <> '') 
+            continue;
+        if(count($difflist[$role_id]['users']) > 0
+            || count($difflist[$role_id]['entities']) > 0
+        ) { 
+            $empty++;
+            ?>
+            <h3 class="sstit" style="font-size: 1.2em;"><?php functions::xecho($role_label);?></h3><?php
+        if(count($difflist[$role_id]['users']) > 0) { ?>
+            <table cellpadding="0" cellspacing="0" border="0" class="listingsmall liste_diff spec" style="width:100%;margin:0;"><?php
+            $color = ' class="col"';
+            for($i=0, $l=count($difflist[$role_id]['users']);
+                $i<$l;
+                $i++
+            ) {
+                $user = $difflist[$role_id]['users'][$i];
+                
+                if ($color == ' class="col"') $color = ' ';
+                else $color = ' class="col"';
+                
+                if (preg_match("/[DEL]/", $difflist[$role_id]['users'][$i]['process_comment'])) {
+                    $styleMoved=" style='text-decoration: line-through;opacity:0.5;' ";
+                    $descMoved=$difflist[$role_id]['users'][$i]['process_comment'];
+                } else {
+                    $styleMoved="";
+                    $descMoved="";
+                }
+                ?>
+                <tr <?php echo $color.$styleMoved;?> title="<?php echo $descMoved;?>">
+                    <td style="width:15%;text-align:center;">
+                        <i class="fa fa-user fa-2x" title="<?php echo _USER;?>"></i>
+                    </td>
+                    <td style="width:10%;"><?php
+                    /* if($user['visible'] == 'Y') { ?>
+                        <i class="fa fa-check fa-2x" title="<?php echo _VISIBLE;?>"></i> <?php
+                    } else {?>
+                        <i class="fa fa-times fa-2x" title="<?php echo _NOT_VISIBLE;?>"></i><?php
+                    } */?>
+                    </td>
+                    <td style="width:37%;"><?php functions::xecho($user['lastname'] . " " . $user['firstname']);?></td>
+                    <td style="width:38%;"><?php functions::xecho($user['entity_label']);?></td>
+                    <?php
+                    if($showStatus == true){
+                        if(!empty($difflist[$role_id]['users'][$i]['process_date'])){
+                            echo '<td style="width:5%;"><i class="fa fa-check" aria-hidden="true" style="color:green;"></i></td>';
+                        }else{
+                            echo '<td style="width:5%;"><i class="fa fa-hourglass-half" aria-hidden="true"></i></td>';
+                        }
+                    }
+                    
+                    ?>
+                </tr><?php
+            } ?>
+            </table><?php
+        } 
+        if(count($difflist[$role_id]['entities']) > 0) { ?>
+            <table cellpadding="0" cellspacing="0" border="0" class="listingsmall liste_diff spec" style="width:100%;margin:0;"><?php
+            $color = ' class="col"';
+            for ($i=0, $l=count($difflist[$role_id]['entities']);
+                $i<$l;
+                $i++
+            ) {
+                $entity = $difflist[$role_id]['entities'][$i];
+                if ($color == ' class="col"') $color = '';
+                else $color = ' class="col"';?>
+                <tr <?php echo $color;?> >
+                    <td style="width:15%;text-align:center;">
+                        <i class="fa fa-sitemap fa-2x" title="<?php echo _ENTITY . " " . $role_label ;?>" ></i>
+                    </td>
+                    <td style="width:10%;"><?php
+                    /*if($entity['visible'] == 'Y') { ?>
+                        <i class="fa fa-check fa-2x" title="<?php echo _VISIBLE;?>"></i><?php
+                    } else {?>
+                        <i class="fa fa-times fa-2x" title="<?php echo _NOT_VISIBLE;?>"></i><?php
+                    }*/ ?>
+                    </td>
+                    <td style="width:37%;"><?php functions::xecho($entity['entity_id']);?></td>
+                    <td style="width:38%;"><?php functions::xecho($entity['entity_label']);?></td>
+                </tr> <?php
+            } ?>
+            </table><?php
+        } ?>
+        <br/><?php
+        }
+    }
+
+    if($empty == $nb_roles){
+       echo '<div style="font-style:italic;text-align:center;color:#ea0000;margin:10px;">'._DIFF_LIST.' '._IS_EMPTY.'</div>';
+    } 
+echo '</div>';
+?>
diff --git a/modules/visa/class/class_modules_tools_Abstract.php b/modules/visa/class/class_modules_tools_Abstract.php
index 9753faf7cbfa604aaa98ed3b9b0c7a3756fd9f09..e29657cc1d9397a90a260249557caa2f32d8b241 100644
--- a/modules/visa/class/class_modules_tools_Abstract.php
+++ b/modules/visa/class/class_modules_tools_Abstract.php
@@ -552,11 +552,11 @@ abstract class visa_Abstract extends Database
             }else{
                 $str .= '<div id="emptyVisa" style="display:none;"><strong><em>' . _EMPTY_VISA_WORKFLOW . '</em></strong></div>';
                 if(count($circuit['visa']['users']) > 0){
+					$isCurrentVisa = false;
                     foreach ($circuit['visa']['users'] as $it=>$info_userVis) {
                         if(empty($info_userVis['process_date'])){
-                            if(($lastUserVis == true && $isVisaStep == true)){
+                            if($lastUserVis == true && $isVisaStep == true && $isCurrentVisa === false){
                                 $vised = ' currentVis';
-                                
                                 $disabled = '';
                                 $link_vis = 'arrow-right ';
                                 $del_vis = '<div class="delete_visa"></div>';
@@ -594,20 +594,31 @@ abstract class visa_Abstract extends Database
 
                                $info_vised = '';
                                $link_vis = 'hourglass-half';
-
                             }
                             
 
 
                             $lastUserVis = false;
+							$isCurrentVisa = true;
                         }else{
                             $lastUserVis = true;
                             $modif = 'false';
-                            $vised = ' vised';
-                            $link_vis = 'check';
+                            
+                            
                             $disabled = ' disabled="disabled"';
-                            $info_vised = '<br/><sub>visé le : '.functions::format_date_db($info_userVis['process_date'],'','',true).'</sub>';
-                            $del_vis = '';
+							if(preg_match("/[DEL]/", $info_userVis['process_comment'])){
+								$info_vised = '';
+								$link_vis = 'times';
+								$vised = ' moved vised';
+								$del_vis = '<i class="fa fa-trash" aria-hidden="true" onclick="delVisaUser(this.parentElement.parentElement);" title="'._DELETE.'"></i>';
+							}else{
+								$info_vised = '<br/><sub>visé le : '.functions::format_date_db($info_userVis['process_date'],'','',true).'</sub>';
+								$link_vis = 'check';
+								$vised = ' vised';
+								$del_vis = '';
+							}
+                            
+                            
                         }
                         //VISA USER LINE CIRCUIT
                         $str .= '<div class="droptarget'.$vised.'" id="visa_'.$i.'" draggable="'.$modif.'">';
@@ -639,9 +650,8 @@ abstract class visa_Abstract extends Database
 
                 //FOR USER SIGN
                 foreach ($circuit['sign']['users'] as $info_userSign) {
-
-                    if(empty($info_userSign['process_date'])){
-                        if($lastUserVis == true && $isVisaStep == true){
+                    if(empty($info_userSign['process_date'])) {
+                        if(($lastUserVis == true && $isVisaStep == true)) {
                             $vised = ' currentVis';
                             $modif = 'false';
                             $disabled = '';
@@ -682,10 +692,18 @@ abstract class visa_Abstract extends Database
                         }
                         
                     }else{
-                        $modif = 'false';
-                        $vised = ' vised';
-                        $link_vis = 'check';
-                        $info_vised = '<br/><sub>signé le : '.functions::format_date_db($info_userSign['process_date'],'','',true).'</sub>';
+						$modif = 'false';
+                        if (preg_match("/[DEL]/", $info_userSign['process_comment'])) {
+							$info_vised = '';
+							$link_vis = 'times';
+							$vised = ' moved vised';
+							$del_vis = '<i class="fa fa-trash" aria-hidden="true" onclick="delVisaUser(this.parentElement.parentElement);" title="'._DELETE.'"></i>';
+						}else{
+                        	$vised = ' vised';
+                        	$link_vis = 'check';
+                        	$info_vised = '<br/><sub>signé le : '.functions::format_date_db($info_userSign['process_date'],'','',true).'</sub>';
+						}
+                        
                     }
                     //VISA USER LINE CIRCUIT
                     $str .= '<div class="droptarget'.$vised.'" id="visa_'.$i.'" draggable="'.$modif.'">';
diff --git a/modules/visa/css/module.css b/modules/visa/css/module.css
index 12a27aca50fffd9b024c5a3796c6cd98c7775e0b..39a9ea3b6c0c19c1be06f6a60ba5dce8b998a806 100644
--- a/modules/visa/css/module.css
+++ b/modules/visa/css/module.css
@@ -144,6 +144,12 @@
   border: solid 2px green;
 }
 
+.moved{
+  opacity: 0.5 !important;
+  color : #666 !important;
+  border: solid 2px white !important;
+}
+
 .droptarget input{
     width : 100%;
 }