From 98f889cf17ac794a6d77a8585193b0686decb9e9 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Tue, 9 Oct 2018 16:15:02 +0200
Subject: [PATCH] FEAT #8544 Contacts filling color run

---
 apps/maarch_entreprise/actions/process.php    | 15 +++++++--
 .../actions/validate_mail.php                 |  9 ++++++
 .../autocomplete_contacts.php                 |  7 +++++
 .../indexing_searching/details.php            | 14 ++++++++-
 apps/maarch_entreprise/js/indexing.js         |  5 +--
 .../contact/controllers/ContactController.php | 31 +++++++++++++++++++
 6 files changed, 75 insertions(+), 6 deletions(-)

diff --git a/apps/maarch_entreprise/actions/process.php b/apps/maarch_entreprise/actions/process.php
index 14a1d000514..d31c94b9156 100755
--- a/apps/maarch_entreprise/actions/process.php
+++ b/apps/maarch_entreprise/actions/process.php
@@ -305,10 +305,19 @@ function get_form_txt($values, $path_manage_action, $id_action, $table, $module,
                     $frm_str .= 'onClick = "previsualiseAdminRead(event, '.$frameContacts.');"';
                     $frm_str .= '/>';
                 } else {
+                    $rate = [];
+                    if ($key == 'exp_contact_id') {
+                        if (!empty($data[$key]['address_value'])) {
+                            $contactData = \Contact\models\ContactModel::getOnView(['select' => ['*'], 'where' => ['ca_id = ?'], 'data' => [$data[$key]['address_value']]]);
+                            $rate = \Contact\controllers\ContactController::getFillingRate(['contact' => (array)$contactData[0]]);
+                        }
+                    }
                     $frm_str .= '<textarea name="'.$key.'" id="'.$key.'" rows="3" readonly="readonly" class="readonly" '
-                        .'title="'.$data[$key]['show_value'].'" style="width: 150px; max-width: 150px; border: none; color: #666666;">'
-                        .$data[$key]['show_value']
-                        .'</textarea>';
+                        .'title="'.$data[$key]['show_value'].'" style="width: 150px; max-width: 150px; border: none; color: #666666;';
+                    if (!empty($rate['color'])) {
+                        $frm_str .= 'background-color:'.$rate['color'];
+                    }
+                    $frm_str .= '">' . $data[$key]['show_value'] .'</textarea>';
                 }
             } elseif ($data[$key]['field_type'] == 'radio') {
                 for ($k = 0; $k < count($data[$key]['radio']); ++$k) {
diff --git a/apps/maarch_entreprise/actions/validate_mail.php b/apps/maarch_entreprise/actions/validate_mail.php
index b7fdc00e342..4839e4c3514 100755
--- a/apps/maarch_entreprise/actions/validate_mail.php
+++ b/apps/maarch_entreprise/actions/validate_mail.php
@@ -702,10 +702,19 @@ function get_form_txt($values, $path_manage_action, $id_action, $table, $module,
 
     $frm_str .= ' <i class="fa fa-users" title="'._MULTI_CONTACT.'" style="cursor:pointer;" id="type_multi_contact_external_icon" onclick="$j(\'#type_multi_contact_external\')[0].click();$j(\'#type_contact_internal_icon\').css(\'color\',\'#666\');$j(\'#type_contact_external_icon\').css(\'color\',\'#666\');$j(\'#type_multi_contact_external_icon\').css(\'color\',\'#135F7F\');"></i>';
 
+    if (!empty($data['addressId'])) {
+        $contactData = \Contact\models\ContactModel::getOnView(['select' => ['*'], 'where' => ['ca_id = ?'], 'data' => [$data['addressId']]]);
+        $rate = \Contact\controllers\ContactController::getFillingRate(['contact' => (array)$contactData[0]]);
+    }
+
     $frm_str .= '<span style="position:relative;"><input type="text" onkeyup="erase_contact_external_id(\'contact\', \'contactid\');erase_contact_external_id(\'contact\', \'addressid\');" name="contact" id="contact" onchange="clear_error(\'frm_error_'.$id_action.'\');display_contact_card(\'visible\');" onblur="display_contact_card(\'visible\');if(document.getElementById(\'type_contact_external\').checked == true){check_date_exp(\''.$path_to_script.'\',\''.$path_check_date_link.'\');}"';
     if (isset($data['contact']) && !empty($data['contact'])) {
         $frm_str .= ' value="'.$data['contact'].'" ';
     }
+    if (!empty($rate['color'])) {
+        $frm_str .= ' style="background-color:'.$rate['color'].'" ';
+    }
+
     $frm_str .= ' /><div id="show_contacts" class="autocomplete autocompleteIndex" style="width:100%;left:0px;top:17px;"></div><div class="autocomplete autocompleteIndex" id="searching_autocomplete" style="display: none;text-align:left;padding:5px;left:0px;width:100%;top:17px;"><i class="fa fa-spinner fa-spin" aria-hidden="true"></i> chargement ...</div></span></td>';
     $frm_str .= '<td><span class="red_asterisk" id="contact_mandatory" style="display:inline;vertical-align:text-top"><i class="fa fa-star"></i></span></td>';
     $frm_str .= '</tr>';
diff --git a/apps/maarch_entreprise/indexing_searching/autocomplete_contacts.php b/apps/maarch_entreprise/indexing_searching/autocomplete_contacts.php
index 3ffb85b0f13..c88e6d5e443 100755
--- a/apps/maarch_entreprise/indexing_searching/autocomplete_contacts.php
+++ b/apps/maarch_entreprise/indexing_searching/autocomplete_contacts.php
@@ -193,6 +193,13 @@ if ($_SESSION['is_multi_contact'] == 'OK') {
                     $address
                 );
             }
+            $color                        = 'LightYellow';
+
+            $rate = \Contact\controllers\ContactController::getFillingRate(['contact' => (array)$res]);
+            if (!empty($rate)) {
+                $color = $rate['color'];
+            }
+
             $arrContact[] = "<li id='".$res->contact_id.','.$res->ca_id."' style='font-size:12px;background-color:$color;'>".$contact_icon.' '
             .'<span style="display:table-cell;vertical-align:middle;">'.$contact_info.'</span>'
             .'<div style="font-size:9px;font-style:italic;"> - '.$address.'</div>'
diff --git a/apps/maarch_entreprise/indexing_searching/details.php b/apps/maarch_entreprise/indexing_searching/details.php
index ce220470e57..4bd0c94db2a 100755
--- a/apps/maarch_entreprise/indexing_searching/details.php
+++ b/apps/maarch_entreprise/indexing_searching/details.php
@@ -697,7 +697,19 @@ if ($stmt->rowCount() == 0) {
                 if (in_array($key, ['exp_contact_id', 'dest_contact_id', 'exp_user_id', 'dest_user_id'])) {
                     unset($_SESSION['adresses']);
 
-                    echo "<textarea name='contact' id='contact' rows='3' class='{$disabledClass}' {$disabledAttr}/>{$inputValue}</textarea>";
+                    $rate = [];
+                    if ($key == 'exp_contact_id') {
+                        if (!empty($data[$key]['address_value'])) {
+                            $contactData = \Contact\models\ContactModel::getOnView(['select' => ['*'], 'where' => ['ca_id = ?'], 'data' => [$data[$key]['address_value']]]);
+                            $rate = \Contact\controllers\ContactController::getFillingRate(['contact' => (array)$contactData[0]]);
+                        }
+                    }
+
+                    echo "<textarea name='contact' id='contact' rows='3' class='{$disabledClass}' {$disabledAttr}";
+                    if (!empty($rate['color'])) {
+                        echo ' style="background-color:'.$rate['color'].'" ';
+                    }
+                    echo "/>{$inputValue}</textarea>";
 
                     $inputValue = $data[$key]['value'];
                     $inputAddressValue = $data[$key]['address_value'];
diff --git a/apps/maarch_entreprise/js/indexing.js b/apps/maarch_entreprise/js/indexing.js
index d43e9bca2fb..3a62e11bd0d 100755
--- a/apps/maarch_entreprise/js/indexing.js
+++ b/apps/maarch_entreprise/js/indexing.js
@@ -1081,7 +1081,8 @@ function launch_autocompleter_contacts_v2(path_script, id_text, id_div, cat_id,
                 parent.$(address_id).value = res[1];
                 if (path_script2 && res[1]) {
                     getDepartment(path_script2, res[1]);
-                };
+                }
+                $j("#" + input).css('background-color', li.getStyle('background-color'));
             }
         });
     } else {
@@ -1765,7 +1766,7 @@ function check_date_exp(path_manage_script, path_link){
             },
             onSuccess: function(answer){
                 if(answer.responseText == "success"){
-                    document.getElementById('contact').style.backgroundColor='#ffffff';
+                    // document.getElementById('contact').style.backgroundColor='#ffffff';
                     document.getElementById('contact_check').style.display='none';
                     document.getElementById('contactcheck').value = answer.responseText;
                 } else {
diff --git a/src/app/contact/controllers/ContactController.php b/src/app/contact/controllers/ContactController.php
index cb3cbbdd8dd..8140738e39e 100644
--- a/src/app/contact/controllers/ContactController.php
+++ b/src/app/contact/controllers/ContactController.php
@@ -22,6 +22,7 @@ use Respect\Validation\Validator;
 use Slim\Http\Request;
 use Slim\Http\Response;
 use SrcCore\models\TextFormatModel;
+use SrcCore\models\ValidatorModel;
 
 class ContactController
 {
@@ -217,6 +218,36 @@ class ContactController
         return $response->withJson(['success' => 'success']);
     }
 
+    public static function getFillingRate(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['contact']);
+        ValidatorModel::arrayType($aArgs, ['contact']);
+
+        $contactsFilling = ContactFillingModel::get();
+        $contactsFilling['rating_columns'] = json_decode($contactsFilling['rating_columns']);
+
+        if ($contactsFilling['enable'] && !empty($contactsFilling['rating_columns'])) {
+            $percent = 0;
+            foreach ($contactsFilling['rating_columns'] as $ratingColumn) {
+                if (!empty($aArgs['contact'][$ratingColumn])) {
+                    $percent++;
+                }
+            }
+            $percent = $percent * 100 / count($contactsFilling['rating_columns']);
+            if ($percent <= $contactsFilling['first_threshold']) {
+                $color = '#f87474';
+            } elseif ($percent <= $contactsFilling['second_threshold']) {
+                $color = '#f6cd81';
+            } else {
+                $color = '#ccffcc';
+            }
+
+            return ['rate' => $percent, 'color' => $color];
+        }
+
+        return [];
+    }
+
     public static function formatContactAddressAfnor(array $aArgs)
     {
         $formattedAddress = '';
-- 
GitLab