diff options
-rw-r--r-- | ishtar_common/static/media/style.css | 27 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/dashboards/dashboard_main.html | 133 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html | 88 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/dashboards/dashboard_main_detail_users.html | 36 | ||||
-rw-r--r-- | ishtar_common/urls.py | 2 | ||||
-rw-r--r-- | ishtar_common/views.py | 43 |
6 files changed, 206 insertions, 123 deletions
diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css index 4990fa111..32e957b74 100644 --- a/ishtar_common/static/media/style.css +++ b/ishtar_common/static/media/style.css @@ -573,6 +573,33 @@ table.confirm tr.spacer td:last-child{ right:135px; } +.ui-widget-header { + background:none; +} + +.ui-tabs .ui-tabs-nav li a{ + color: #D14; +} + +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { + background:none; + background-color: #F1F2F6; + border: 1px solid #CCC; + border-radius-top: 4px; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active a{ + background-color:#fff; +} + +#dashboard{ + padding-top: 20px; +} + +#dash-tabs .ui-tabs .ui-tabs-panel{ + padding:0; +} + .dashboard > div, .dashboard h3{ width:760px; diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main.html index 3242da9a3..06b671343 100644 --- a/ishtar_common/templates/ishtar/dashboards/dashboard_main.html +++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main.html @@ -1,6 +1,6 @@ {% extends "base.html" %} {% load i18n %} -{% load range %} +{% load url from future %} {% block extra_head %} {{form.media}} <script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/jqplot/jquery.jqplot.min.js"></script> @@ -11,128 +11,15 @@ <link rel="stylesheet" href="{{STATIC_URL}}js/jqplot/jquery.jqplot.min.css" /> {% endblock %} {% block content %} -<div class='dashboard'> -{% for lbl, dashboard in items %} -<script language="javascript" type="text/javascript"> -$(document).ready(function(){ -var values{{forloop.counter0}} = []; - -{% for idx, lbl, values in dashboard.values %} {% for value in values %} -{% ifequal forloop.parentloop.counter0 0 %}values{{forloop.parentloop.parentloop.counter0}}.push([{{value}}, 0]); -{% else %}values{{forloop.parentloop.parentloop.counter0}}[{{forloop.counter0}}][1] = {{value}};{% endifequal %}{% endfor%}{% endfor%} - -var plot{{forloop.counter0}} = $.jqplot('chart{{forloop.counter0}}', - [values{{forloop.counter0}}], { - series:[{showMarker:false}], - axes:{ - xaxis:{ - label:'{% trans "Year" %}' - }, - yaxis:{ - label:'{% trans "Number"%}', - min:0 - } - }, - highlighter: { - show: true, - sizeAdjust: 7.5 - } - }); -}); + <script> +$(function() { $( "#dash-tabs" ).tabs(); }); </script> - <h3>{{lbl}}</h3> - <div> - <h4>{% trans "Numbers" %}</h4> - <p><strong>{% trans "Total:" %}</strong> {{dashboard.total_number}}</p> - <div class='table'> - <div id="chart{{forloop.counter0}}" style="height:400px; width:700px;"></div> - {% comment %} - <table> - {% for idx, lbl, values in dashboard.values %} - <tr class='idx {% if forloop.counter0|divisibleby:"2" %}even{%else%}odd{%endif%}'> - <th>{{lbl}}</th> - {% for value in values %}<td>{{value}}</td>{% endfor%} - </tr> - {% endfor%} - </table>{% endcomment %} - </div> - {% if dashboard.years %} - <h4>{% trans "By years" %}</h4> - <ul> - <li><strong>{% trans "Average:" %}</strong> {{dashboard.average}}</li> - <li><strong>{% trans "Variance:" %}</strong> {{dashboard.variance}}</li> - <li><strong>{% trans "Standard deviation:" %}</strong> {{dashboard.standard_deviation}}</li> - <li><strong>{% trans "Median:" %}</strong> {{dashboard.median}}</li> - <li><strong>{% trans "Mode:" %}</strong> {{dashboard.mode}}</li> - </ul> - {% endif %} - {% if dashboard.operation_average %} - <h4>{% trans "By operations" %}</h4> - <ul> - <li><strong>{% trans "Average:" %}</strong> {{dashboard.operation_average}}</li> - <li><strong>{% trans "Variance:" %}</strong> {{dashboard.operation_variance}}</li> - <li><strong>{% trans "Standard deviation:" %}</strong> {{dashboard.operation_standard_deviation}}</li> - <li><strong>{% trans "Median:" %}</strong> {{dashboard.operation_median}}</li> - <li><strong>{% trans "Mode:" %}</strong> {{dashboard.operation_mode}}</li> - </ul> - {% endif %} - <h4>{% trans "Created last" %}</h4> - <div class='table'> - <table> - <tr><th>{{lbl}}</th><th>{% trans "Created" %}</th><th></th></tr> - {% for item in dashboard.lasts %}<tr> - <td class='ref'>{{item}}</td> - <td>{{item.history_date}}</td> - <td>{% if item.get_show_url %}<a href="#" onclick='load_window("{{item.get_show_url}}")'>{%trans "Show"%}</a>{%endif%}</td> - </tr>{% endfor %} - </table> - </div> - <h4>{% trans "Recent changes" %}</h4> - <div class='table'> - <table> - <tr><th>{{lbl}}</th><th>{% trans "Modified" %}</th><th></th></tr> - {% for item in dashboard.recents %}<tr> - <td class='ref'>{{item}}</td> - <td>{{item.history_date}}</td> - <td>{% if item.get_show_url %}<a href="#" onclick='load_window("{{item.get_show_url}}")'>{%trans "Show"%}</a>{%endif%}</td> - </tr>{% endfor %} - </table> - </div> - </div> -{% endfor%} - - <h3>{% trans "Users" %}</h3> - <div> -<script language="javascript" type="text/javascript"> -$(document).ready(function(){ -var values_users = []; -{% for user_type in ishtar_users.types %} -values_users.push(['{{user_type.person__person_types__label}}', {{user_type.number}}]); {% endfor%} - -var plot_users = jQuery.jqplot ('user_chart', [values_users], - { - seriesDefaults: { - renderer: jQuery.jqplot.PieRenderer, - rendererOptions: { - showDataLabels: true - } - }, - legend: { show:true, location: 's' } - } - ); -}); -</script> - <div id="user_chart" style="height:400px; width:700px;"></div> - <div class='table'> - <table> - <tr><th>{% trans "User type" %}</th><th>{% trans "Number" %}</th></tr> - {% for user_type in ishtar_users.types %} - <tr> - <td class='string'>{{user_type.person__person_types__label}}{#TODO: Display all#}</td> - <td>{{user_type.number}}</td> - </tr> - {% endfor%} - </table> - </div> +<div id='dashboard'> + <div id="dash-tabs"> + <ul> + {% for label, app in app_list %} + <li><a href="{% url 'dashboard-main-detail' app %}">{{label}}</a></li> + {% endfor %}</ul> + </div> </div> {% endblock %} diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html new file mode 100644 index 000000000..6a99c4fdd --- /dev/null +++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail.html @@ -0,0 +1,88 @@ +{% load i18n %} +<div class='dashboard'> +<script language="javascript" type="text/javascript"> +$(document).ready(function(){ +var values_{{item_name}} = []; + +{% for idx, lbl, values in dashboard.values %} {% for value in values %} +{% ifequal forloop.parentloop.counter0 0 %}values_{{item_name}}.push([{{value}}, 0]); +{% else %}values_{{item_name}}[{{forloop.counter0}}][1] = {{value}};{% endifequal %}{% endfor%}{% endfor%} + +var plot_{{item_name}} = $.jqplot('chart_{{item_name}}', + [values_{{item_name}}], { + series:[{showMarker:false}], + axes:{ + xaxis:{ + label:'{% trans "Year" %}' + }, + yaxis:{ + label:'{% trans "Number"%}', + min:0 + } + }, + highlighter: { + show: true, + sizeAdjust: 7.5 + } + }); +}); +</script> + <h3>{{lbl}}</h3> + <div> + <h4>{% trans "Numbers" %}</h4> + <p><strong>{% trans "Total:" %}</strong> {{dashboard.total_number}}</p> + <div class='table'> + <div id="chart_{{item_name}}" style="height:400px; width:700px;"></div> + {% comment %} + <table> + {% for idx, lbl, values in dashboard.values %} + <tr class='idx {% if forloop.counter0|divisibleby:"2" %}even{%else%}odd{%endif%}'> + <th>{{lbl}}</th> + {% for value in values %}<td>{{value}}</td>{% endfor%} + </tr> + {% endfor%} + </table>{% endcomment %} + </div> + {% if dashboard.years %} + <h4>{% trans "By years" %}</h4> + <ul> + <li><strong>{% trans "Average:" %}</strong> {{dashboard.average}}</li> + <li><strong>{% trans "Variance:" %}</strong> {{dashboard.variance}}</li> + <li><strong>{% trans "Standard deviation:" %}</strong> {{dashboard.standard_deviation}}</li> + <li><strong>{% trans "Median:" %}</strong> {{dashboard.median}}</li> + <li><strong>{% trans "Mode:" %}</strong> {{dashboard.mode}}</li> + </ul> + {% endif %} + {% if dashboard.operation_average %} + <h4>{% trans "By operations" %}</h4> + <ul> + <li><strong>{% trans "Average:" %}</strong> {{dashboard.operation_average}}</li> + <li><strong>{% trans "Variance:" %}</strong> {{dashboard.operation_variance}}</li> + <li><strong>{% trans "Standard deviation:" %}</strong> {{dashboard.operation_standard_deviation}}</li> + <li><strong>{% trans "Median:" %}</strong> {{dashboard.operation_median}}</li> + <li><strong>{% trans "Mode:" %}</strong> {{dashboard.operation_mode}}</li> + </ul> + {% endif %} + <h4>{% trans "Created last" %}</h4> + <div class='table'> + <table> + <tr><th>{{lbl}}</th><th>{% trans "Created" %}</th><th></th></tr> + {% for item in dashboard.lasts %}<tr> + <td class='ref'>{{item}}</td> + <td>{{item.history_date}}</td> + <td>{% if item.get_show_url %}<a href="#" onclick='load_window("{{item.get_show_url}}")'>{%trans "Show"%}</a>{%endif%}</td> + </tr>{% endfor %} + </table> + </div> + <h4>{% trans "Recent changes" %}</h4> + <div class='table'> + <table> + <tr><th>{{lbl}}</th><th>{% trans "Modified" %}</th><th></th></tr> + {% for item in dashboard.recents %}<tr> + <td class='ref'>{{item}}</td> + <td>{{item.history_date}}</td> + <td>{% if item.get_show_url %}<a href="#" onclick='load_window("{{item.get_show_url}}")'>{%trans "Show"%}</a>{%endif%}</td> + </tr>{% endfor %} + </table> + </div> + </div> diff --git a/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail_users.html b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail_users.html new file mode 100644 index 000000000..6602d5193 --- /dev/null +++ b/ishtar_common/templates/ishtar/dashboards/dashboard_main_detail_users.html @@ -0,0 +1,36 @@ +{% load i18n %} + <h3>{% trans "Users" %}</h3> + <div> +<script language="javascript" type="text/javascript"> +$(document).ready(function(){ +var values_users = []; +{% for user_type in ishtar_users.types %} +values_users.push(['{{user_type.person__person_types__label}}', {{user_type.number}}]); {% endfor%} + +var plot_users = jQuery.jqplot ('user_chart', [values_users], + { + seriesDefaults: { + renderer: jQuery.jqplot.PieRenderer, + rendererOptions: { + showDataLabels: true + } + }, + legend: { show:true, location: 's' } + } + ); +}); +</script> + <div id="user_chart" style="height:400px; width:700px;"></div> + <div class='table'> + <table> + <tr><th>{% trans "User type" %}</th><th>{% trans "Number" %}</th></tr> + {% for user_type in ishtar_users.types %} + <tr> + <td class='string'>{{user_type.person__person_types__label}}{#TODO: Display all#}</td> + <td>{{user_type.number}}</td> + </tr> + {% endfor%} + </table> + </div> +</div> + diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index c46f555e9..8b148530e 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -63,6 +63,8 @@ urlpatterns += patterns('ishtar_common.views', # General url(r'dashboard-main/$', 'dashboard_main', name='dashboard-main'), + url(r'dashboard-main/(?P<item_name>[a-z-]+)/$', 'dashboard_main_detail', + name='dashboard-main-detail'), url(r'update-current-item/$', 'update_current_item', name='update-current-item'), url(r'new-person/(?:(?P<parent_name>[^/]+)/)?(?:(?P<limits>[^/]+)/)?$', diff --git a/ishtar_common/views.py b/ishtar_common/views.py index c3e6dbb33..9f193fdec 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -703,6 +703,7 @@ def dashboard_main(request, dct, obj_id=None, *args, **kwargs): """ Main dashboard """ + """ items = [] if 'archaeological_files' in settings.INSTALLED_APPS: from archaeological_files.models import File @@ -718,5 +719,47 @@ def dashboard_main(request, dct, obj_id=None, *args, **kwargs): items.append((_(u"Finds"), models.Dashboard(Find))) dct = {'items':items, 'ishtar_users':models.UserDashboard()} + """ + app_list = [] + if 'archaeological_files' in settings.INSTALLED_APPS: + app_list.append((_(u"Archaeological files"), 'files')) + app_list.append((_(u"Operations"), 'operations')) + if 'archaeological_context_records' in settings.INSTALLED_APPS: + app_list.append((_(u"Context records"), 'context-records')) + if 'archaeological_finds' in settings.INSTALLED_APPS: + app_list.append((_(u"Finds"), 'finds')) + dct = {'app_list':app_list} return render_to_response('ishtar/dashboards/dashboard_main.html', dct, context_instance=RequestContext(request)) + +def dashboard_main_detail(request, item_name): + """ + Specific tab of the main dashboard + """ + if item_name == 'users': + dct = {'ishtar_users':models.UserDashboard()} + return render_to_response( + 'ishtar/dashboards/dashboard_main_detail_users.html', + dct, context_instance=RequestContext(request)) + lbl, dashboard = None, None + if item_name == 'files' and \ + 'archaeological_files' in settings.INSTALLED_APPS: + from archaeological_files.models import File + lbl, dashboard = (_(u"Archaeological files"), models.Dashboard(File)) + if item_name == 'operations': + from archaeological_operations.models import Operation + lbl, dashboard = (_(u"Operations"), models.Dashboard(Operation)) + if item_name == 'context-records' and \ + 'archaeological_context_records' in settings.INSTALLED_APPS: + from archaeological_context_records.models import ContextRecord + lbl, dashboard = (_(u"Context records"), models.Dashboard(ContextRecord)) + if item_name == 'finds' and \ + 'archaeological_finds' in settings.INSTALLED_APPS: + from archaeological_finds.models import Find + lbl, dashboard = (_(u"Finds"), models.Dashboard(Find)) + if not lbl: + raise Http404 + dct = {'lbl':lbl, 'dashboard':dashboard, + 'item_name':item_name.replace('-', '_')} + return render_to_response('ishtar/dashboards/dashboard_main_detail.html', + dct, context_instance=RequestContext(request)) |