diff --git a/manager/module/chart.php b/manager/module/chart.php index 87943e9..808ef01 100755 --- a/manager/module/chart.php +++ b/manager/module/chart.php @@ -295,20 +295,18 @@ /* [2] On initialise les valeurs =========================================================*/ - /* (1) On initialise les compteurs */ - $age_classes = array(); - for( $i = 0 ; $i < 18 ; $i++ ) - $age_classes[$i] = 0; - - /* (2) On charge le dictionnaire */ + /* (1) On charge le dictionnaire */ $dict = self::loadDictionary(); if( $dict === false ) return array( 'ModuleError' => ManagerError::ParsingFailed ); - /* (2) On initialise les labels */ + /* (2) On initialise les compteurs et les labels */ + $age_classes = array(); $labels = array(); - foreach($dict['contacts']['age'] as $i=>$label) + foreach($dict['contacts']['age'] as $i=>$label){ array_push($labels, $label); + $age_classes[$i] = 0; + } /* [3] S'il a un journal d'appel, on renvoie les données @@ -391,20 +389,21 @@ /* [2] On initialise les valeurs =========================================================*/ - /* (1) On initialise les compteurs */ - $relations = array(); - for( $i = 0 ; $i < 18 ; $i++ ) - $relations[$i] = 0; - - /* (2) On charge le dictionnaire */ + /* (1) On charge le dictionnaire */ $dict = self::loadDictionary(); if( $dict === false ) return array( 'ModuleError' => ManagerError::ParsingFailed ); - /* (2) On initialise les labels */ - $labels = array(); - foreach($dict['contacts']['reltype'] as $i=>$label) + /* (2) On initialise les compteurs et labels */ + $relations = array(); // relations en fonction du log + $relationsByContact = array(); // relations en fonction de la répartition des contacts + $labels = array(); + + foreach($dict['contacts']['reltype'] as $i=>$label){ array_push($labels, $label); + $relations[$i] = 0; + $relationsByContact[$i] = 0; + } /* [3] S'il a un journal d'appel, on renvoie les données @@ -413,6 +412,7 @@ /* (2) On incrémente les compteurs */ + $tot = 0; foreach($data['logs'] as $log){ /* (3) On récupère le contact associé */ @@ -426,19 +426,43 @@ continue; /* (4) On incrémente le compteur de la classe d'age en question */ - if( isset($relations[ $associatedContact['reltype'] ]) ) + if( isset($relations[ $associatedContact['reltype'] ]) ){ $relations[ $associatedContact['reltype'] ]++; + $tot++; + } } + foreach($relations as $r=>$rel) + $relations[$r] = 100 * $relations[$r] / $tot; + + } + + /* [4] On récupère les données par CONTACT + =========================================================*/ + /* (1) On incrémente les compteurs */ + $tot = 0; + foreach($data['contacts'] as $contact){ + + /* (2) On incrémente le compteur de la classe d'age en question */ + if( isset($relationsByContact[ $contact['reltype'] ]) ){ + $relationsByContact[ $contact['reltype'] ]++; + $tot++; + } + } + foreach($relationsByContact as $r=>$rel) + $relationsByContact[$r] = 100 * $relationsByContact[$r] / $tot; - /* [4] Gestion des couleurs + + + /* [5] Gestion des couleurs =========================================================*/ $colors = array(); $colors['default'] = array(); + $colors['defaultContact'] = array(); $step = (int) (50/count($relations)); @@ -448,17 +472,35 @@ $colors['hover'] = self::cFilter($colors['default'], 0, 0, -2); + // Pour chaque classe PAR CONTACT, on ajoute une couleur + for( $i = 0 ; $i < count($relationsByContact) ; $i++ ) + array_push($colors['defaultContact'], 'hsla(20,100%,'.(25+(50-$step*$i)).'%,.5)'); + + $colors['hoverContact'] = self::cFilter($colors['defaultContact'], 0, 0, -2); + + return array( 'ModuleError' => ManagerError::Success, 'labels' => $labels, - 'datasets' => array(array( - 'data' => $relations, - 'backgroundColor' => $colors['default'], - 'hoverBackgroundColor' => $colors['hover'], - 'borderWidth' => 1, - 'borderColor' => 'hsla(216,100%,80%,1)' - )) + 'datasets' => array( + array( // En fonction du log + 'label' => 'Répartition des communications', + 'data' => $relations, + 'backgroundColor' => $colors['default'], + 'hoverBackgroundColor' => $colors['hover'], + 'borderWidth' => 1, + 'borderColor' => 'hsla(216,100%,80%,1)' + ), + array( // Répartition dans les contacts + 'label' => 'Répartition des contacts', + 'data' => $relationsByContact, + 'backgroundColor' => $colors['defaultContact'], + 'hoverBackgroundColor' => $colors['hoverContact'], + 'borderWidth' => 1, + 'borderColor' => 'hsla(20,100%,80%,1)' + ) + ) ); } diff --git a/view/js/charts-min.js b/view/js/charts-min.js index 300da6a..6101f44 100644 --- a/view/js/charts-min.js +++ b/view/js/charts-min.js @@ -1,2 +1,3 @@ -var subPhone=$('section[data-sublink="phone"]');Chart.defaults.global.responsive=!1;Chart.defaults.global.onClick=function(a,b){console.log(a);console.log(b[0]._datasetIndex,b[0]._index)};subject=273;var charts=["sexe","direction","type","ages","relation"],types=["doughnut","doughnut","doughnut","doughnut","bar"],canvas=[],instances=[],c;for(c in charts)canvas[c]=document.createElement("canvas"),canvas[c].id=charts[c],canvas[c].width=300,canvas[c].height=300,subPhone.appendChild(canvas[c]); -for(c=0;c