Remaster (#38)

* setup new 'statistiques' module

* added 'graphos' package and created first test graph

* put graphos in requirements, deleted local folder

* added "load_csv" management command !

* added update of premiere_rencontre field in 'load_csv' management command

* added missing urls.py file

* added 'merge' action and view

* added 'info_completed' ratio

* linked sujets:merge views inside suivi:details

* added link to maraudes:details in notes table headers, if any

* Major reorganisation, moved 'suivi' and 'sujets' to 'notes', cleanup in 'maraudes', dropping 'website' mixins (mostly useless)

* small cleanup

* worked on Maraude and Sujet lists

* corrected missing line in notes.__init__

* restored 'details' view for maraudes and sujets insie 'notes' module

* worked on 'notes': added navigation between maraude's compte-rendu, right content in details, header to list tables

* changed queryset for CompteRenduDetailsView to all notes of same date, minor layout changes

* added right content to 'details-sujet', created 'statistiques' view and update templates

* restored 'statistiques' ajax view in 'details-sujet', fixed 'merge_two' util function

* added auto-creation of FicheStatistique (plus some tests), pagination for notes in 'details-sujet'

* added error-prone cases in paginator

* fixed non-working modals, added titles

* added UpdateStatistiques capacity in CompteRenduCreate view

* fixed missing AjaxTemplateMixin for CreateSujetView, worked on compte-rendu creation scripts

* fixed MaraudeManager.all_of() for common Maraudeurs, added color hints in planning

* re-instated statistiques module link and first test page

* added FinalizeView to send a mail before finalizing compte-rendu

* Added PieChart view for FicheStatistique fields

* small style updates, added 'age' and 'genre' fields from sujets in statistiques.PieChartView

* worked on statistiques, fixed small issues in 'notes' list views

* small theme change

* removed some dead code

* fixed notes.tests, fixed statistiques.info_completed display, added filter in SujetLisView

* added some tests

* added customised admin templates

* added authenticate in CustomAuthenticatationBackend, more verbose login thanks to messages

* added django-nose for test coverage

* Corrected raising exception on first migration

On first migration, qs.exists() would previously be called and raising an Exception, sot he migrations would fail.

* Better try block

* cleaned up custom settings.py, added some overrides of django base_settings

* corrected bad dictionnary key
This commit is contained in:
artus40
2017-06-11 17:16:17 +02:00
committed by GitHub
parent 0be59a61a7
commit be087464fc
155 changed files with 3568 additions and 1988 deletions

View File

@@ -0,0 +1,20 @@
{% extends "base.html" %}
{% load static %}
{% block extrahead %}
<script type="text/javascript" src="{% static "scripts/jquery.flot.min.js" %}"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
</script>
{% endblock %}
{% block title %}Statistiques >{% endblock %}
{% block breadcrumbs %}
<li><a href="{% url "statistiques:index" %}">Statistiques</a></li>
{% endblock %}
{% block sidebar %}
{% include "statistiques/menu.html" %}
{% endblock %}

View File

@@ -0,0 +1,42 @@
{% load boolean_icons bootstrap3 %}
<table class="table">
<tr>
<th colspan="4" class="active">Problématiques</th>
</tr>
<tr>
<th>Psychiatrique</th>
<td>{{ object.prob_psychiatrie|as_icon }}</td>
<th>Addiction</th>
<td>{{ object.prob_addiction|as_icon }}</td>
</tr>
<tr>
<th>Administratif</th>
<td>{{ object.prob_administratif|as_icon }}</td>
<th>Somatique</th>
<td>{{ object.prob_somatique|as_icon }}</td>
</tr>
<tr>
<th colspan="4" class="active">Habitation</th>
</tr>
<tr>
<th>Type</th>
<td>{{ object.habitation }}</td>
<th>Connu du SIAO</th>
<td>{{ object.connu_siao|as_icon }}</td>
</tr>
<tr>
<th colspan="4" class="active">Ressources</th>
</tr>
<tr>
<td colspan="4">{{ object.ressources }}</td>
</tr>
<tr>
<th colspan="4" class="active">Parcours de vie</th>
</tr>
<tr>
<td colspan="2">{{ object.parcours_de_vie }}</td>
<th>Lien familial</th>
<td>{{ object.lien_familial|as_icon }}</td>
</tr>
</table>

View File

@@ -0,0 +1,44 @@
{% load bootstrap3 %}
<form action="{% url "statistiques:update" form.instance.pk %}" method="post" id="update-stats-form">{% csrf_token%}
<table class="table">
<tr>
<th colspan="4" class="active">Problématiques</th>
</tr>
<tr>
<th>Psychiatrique</th>
<td>{% bootstrap_field form.prob_psychiatrie show_label=False size="small" %}</td>
<th>Addiction</th>
<td>{% bootstrap_field form.prob_addiction show_label=False size="small" %}</td>
</tr>
<tr>
<th>Administratif</th>
<td>{% bootstrap_field form.prob_administratif show_label=False size="small" %}</td>
<th>Somatique</th>
<td>{% bootstrap_field form.prob_somatique show_label=False size="small" %}</td>
</tr>
<tr>
<th colspan="4" class="active">Habitation</th>
</tr>
<tr>
<th>Type</th>
<td>{% bootstrap_field form.habitation show_label=False size="small" %}</td>
<th>Connu du SIAO</th>
<td>{% bootstrap_field form.connu_siao show_label=False size="small" %}</td>
</tr>
<tr>
<th colspan="4" class="active">Ressources</th>
</tr>
<tr>
<td colspan="4">{% bootstrap_field form.ressources show_label=False size="small" %}</td>
</tr>
<tr>
<th colspan="4" class="active">Parcours de vie</th>
</tr>
<tr>
<td colspan="2">{% bootstrap_field form.parcours_de_vie show_label=False size="small" %}</td>
<th>Lien familial</th>
<td>{% bootstrap_field form.lien_familial show_label=False size="small" %}</td>
</tr>
</table>
<input type="submit" id="submit-form" class="hidden"></input>
</form>

View File

@@ -0,0 +1,7 @@
{% load bootstrap3 %}
<h4>Période</h4>
<form action="" method="get">
{% bootstrap_form form layout="inline" %}
{% bootstrap_button "Ok" button_type="submit" %}
</form>

View File

@@ -0,0 +1,5 @@
<div class="row text-center" id="wrapper-{{ chart.get_html_id}}">
<div id="{{ chart.get_html_id }}" style="width: {{ chart.width }}px; height: {{ chart.height }}px;"></div>
<a class="btn btn-sm btn-default" href="#" id="image-{{ chart.get_html_id }}"><span class="glyphicon glyphicon-save-file"></span> Télécharger l'image</a>
</div>

View File

@@ -0,0 +1,13 @@
{% extends "graphos/gchart/base.html" %}
{% block create_chart %}
var chart_data = data
var chart_div = document.getElementById('{{ chart.get_html_id }}');
var chart = new google.visualization.PieChart(chart_div);
// Wait for the chart to finish drawing before calling the getImageURI() method.
google.visualization.events.addListener(chart, 'ready', function () {
$("#image-{{ chart.get_html_id }}").attr("href", chart.getImageURI());
$("#wrapper-{{ chart.get_html_id}}").hide();
});
{% endblock %}

View File

@@ -0,0 +1,60 @@
{% extends "statistiques/base.html" %}
{% load static %}
{% block title %}{{ block.super }} Maraudes{% endblock %}
{% block sidebar %}
{{ block.super }}
<div class="panel panel-primary">
<div class="panel-body text-right">
{% include "statistiques/filter_form.html" %}
</div>
</div>
{% endblock %}
{% block breadcrumbs %}
{{ block.super }}
<li>Maraudes</li>
{% endblock %}
{% block page_content %}
<div class="alert alert-info alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<p>Voici les données permettant une analyse statistiques des maraudes.</p>
<p>Vous pouvez sélectionner une période particulière ou l'ensemble des données</p>
<p>Les données sont réparties en trois catégories, accessibles par le menu sur la gauche</p>
</div>
<div class="col-lg-4">
<h3 class="page-header">Données générales</h3>
<ul class="list-group">
<li class="list-group-item list-group-item-danger">
<span class="badge">{{ nbr_maraudes }}</span>
Nombre de maraudes
</li>
<li class="list-group-item">
<span class="badge">{{ nbr_maraudes_jour }}</span>
dont, Maraudes de journée
</li>
<li class="list-group-item list-group-item-danger">
<span class="badge">{{ nbr_rencontres }}</span>
Nombre total de rencontres
</li>
<li class="list-group-item">
<span class="badge">{{ moy_rencontres }}</span>
soit, en <strong>moyenne</strong> par maraude
</li>
<li class="list-group-item list-group-item-danger">
<span class="badge">{{ nbr_sujets_rencontres }}</span>
Nombre de sujets rencontrés
</li>
</ul>
</div>
{% if rencontres_par_mois %}
<div class="col-lg-8">
<h3 class="page-header">Rencontres par mois</h3>
{{ rencontres_par_mois.as_html }}
</div>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,14 @@
{% load navbar %}
<ul class="nav nav-pills nav-stacked text-right">
<li role="presentation" {% active namespace="statistiques" viewname="index" %}>
<a href="{% url "statistiques:index" %}?year={{year|default:0}}{% if month %}&month={{month}}{% endif %}">Maraudes&nbsp;
<span class="glyphicon glyphicon-road"></span>
</a>
</li>
<li role="presentation" {% active namespace="statistiques" viewname="pies" %}>
<a href="{% url "statistiques:pies" %}?year={{year|default:0}}{% if month %}&month={{month}}{% endif %}">Typologie du public&nbsp;
<span class="glyphicon glyphicon-adjust"></span>
</a>
</li>
</ul>
<hr />

View File

@@ -0,0 +1,46 @@
{% extends "statistiques/base.html" %}
{% block title %}{{block.super}} Typologie{% endblock %}
{% block breadcrumbs %}{{block.super}}<li>Typologie</li>{% endblock %}
{% block sidebar %}
{{ block.super }}
<hr />
<div class="panel panel-primary">
<div class="panel-body text-right">
{% include "statistiques/filter_form.html" %}
<hr />
<p>Échantillon : {{ queryset.count }} sujets</p>
</div>
</div>
{% endblock %}
{% block page_content %}
<script type="text/javascript">
function hideAll() {
{% for _, graph in graphs %}{% with graph.get_html_id as id %}
$("#tab-{{id}}").attr("class", "");
$("#wrapper-{{id}}").hide();
{% endwith %}{% endfor %}
}
function showGraph(id) {
hideAll();
$("#tab-" + id).attr("class", "active");
$("#wrapper-" + id).show();
}
/*$( function() {
hideAll();
});*/
</script>
<ul class="nav nav-tabs">
{% for title, graph in graphs %}<li role="presentation" id="tab-{{graph.get_html_id}}"><a href="#" onclick="showGraph('{{graph.get_html_id}}');">{{ title }}</a></li>{% endfor %}
</ul>
{% for title, graph in graphs %}
{{ graph.as_html }}
{% endfor %}
{% endblock %}