work on admin interface, fix bugs
This commit is contained in:
		@ -208,6 +208,8 @@ class Station(Nameable):
 | 
			
		||||
                logs.filter(date__gt = diff.end, date__lt = diff_.start) \
 | 
			
		||||
                    if diff_ else \
 | 
			
		||||
                logs.filter(date__gt = diff.end)
 | 
			
		||||
            print(diff.end, *[str(log.date > diff.end) + " " + str(log.date) for log in logs])
 | 
			
		||||
 | 
			
		||||
            diff_ = diff
 | 
			
		||||
            items.extend(logs_)
 | 
			
		||||
            items.append(diff)
 | 
			
		||||
@ -217,7 +219,7 @@ class Station(Nameable):
 | 
			
		||||
        if diff_:
 | 
			
		||||
            if count and len(items) >= count:
 | 
			
		||||
                return items[:count]
 | 
			
		||||
            logs_ = logs.filter(date__lt = diff_.end)
 | 
			
		||||
            logs_ = logs.filter(date__lt = diff_.start)
 | 
			
		||||
        else:
 | 
			
		||||
            logs_ = logs.all()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										58
									
								
								aircox/static/aircox/css/layout.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								aircox/static/aircox/css/layout.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
    background-color: #373737;
 | 
			
		||||
    background-color: #F2F2F2;
 | 
			
		||||
    font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif;
 | 
			
		||||
    font-size: 18px;
 | 
			
		||||
    line-height: 1.5;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main {
 | 
			
		||||
    padding: 1em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
input {
 | 
			
		||||
    padding: 0.4em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
table {
 | 
			
		||||
    background-color: #f2f2f2;
 | 
			
		||||
    border: 1px black solid;
 | 
			
		||||
    width: 80%;
 | 
			
		||||
    margin: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
td {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0 0.4em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
th {
 | 
			
		||||
    text-align: left;
 | 
			
		||||
    font-weight: normal;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0.4em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tr:not(.header):hover {
 | 
			
		||||
    background-color: rgba(0, 0, 0, 0.1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tr.header {
 | 
			
		||||
    background-color: #212121;
 | 
			
		||||
    color: #eee;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tr.bottom > td {
 | 
			
		||||
    vertical-align: top;
 | 
			
		||||
    padding: 0.4em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tr.subdata {
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
    font-size: 0.9em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								aircox/templates/aircox/controllers/base_site.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								aircox/templates/aircox/controllers/base_site.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
{% load static %}
 | 
			
		||||
 | 
			
		||||
<html>
 | 
			
		||||
    <head>
 | 
			
		||||
        <title>Aircox</title>
 | 
			
		||||
        <link rel="stylesheet" href="{% static 'aircox/css/layout.css' %}" type="text/css" />
 | 
			
		||||
    </head>
 | 
			
		||||
    <body>
 | 
			
		||||
        <sidebar class="sidebar main-sidebar">
 | 
			
		||||
        </sidebar>
 | 
			
		||||
 | 
			
		||||
        <main>
 | 
			
		||||
        {% block title %}
 | 
			
		||||
        <h1>{{ title|default:"Aircox" }}</h1>
 | 
			
		||||
        {% endblock %}
 | 
			
		||||
 | 
			
		||||
        <div class="content">
 | 
			
		||||
        {% block content %}
 | 
			
		||||
 | 
			
		||||
        {% endblock %}
 | 
			
		||||
        </div>
 | 
			
		||||
        </main>
 | 
			
		||||
    </body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,46 +1,77 @@
 | 
			
		||||
{% extends "aircox/controllers/base_site.html" %}
 | 
			
		||||
{% load i18n %}
 | 
			
		||||
 | 
			
		||||
{% block title %}
 | 
			
		||||
<h1>Statistics of the stations</h1>
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
<div id='stats'>
 | 
			
		||||
 | 
			
		||||
    {# TODO here #}
 | 
			
		||||
    <form action="?" method="GET">
 | 
			
		||||
        Go to this date:
 | 
			
		||||
        <input name="day" type="number" placeholder="{% trans "day" %}"
 | 
			
		||||
               value="{{ statistics.0.date.day }}"></input>
 | 
			
		||||
        <input name="month" type="number" placeholder="{% trans "month" %}"
 | 
			
		||||
               value="{{ statistics.0.date.month }}"></input>
 | 
			
		||||
        <input name="year" type="number" placeholder="{% trans "year" %}"
 | 
			
		||||
               value="{{ statistics.0.date.year }}"></input>
 | 
			
		||||
        <button type="submit">Show</button>
 | 
			
		||||
    </form>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    {% for stats in statistics %}
 | 
			
		||||
    <section class="station">
 | 
			
		||||
        <header>
 | 
			
		||||
            <h1>{{ stats.station.name }}</h1>
 | 
			
		||||
            <h2>- {{ stats.date|date:'l d F Y' }}</h2>
 | 
			
		||||
            <h2>{{ stats.station.name }},
 | 
			
		||||
                {{ stats.date|date:'l d F Y' }}</h2>
 | 
			
		||||
        </header>
 | 
			
		||||
 | 
			
		||||
        <table border=1>
 | 
			
		||||
            <tr>
 | 
			
		||||
        <table cellspacing="0" cellpading="0" class="object">
 | 
			
		||||
            <tr class="header">
 | 
			
		||||
                <th>{% trans "Date" %}</th>
 | 
			
		||||
                <th width="10%">{% trans "Type" %}
 | 
			
		||||
                {# Translators "Header for statistics view" #}
 | 
			
		||||
                <th>{% trans "Diffusion or sound played" %}
 | 
			
		||||
                <th></th>
 | 
			
		||||
                <th width="50%">{% trans "Diffusion or sound played" %}
 | 
			
		||||
                <th width="30%">{% trans "Tags" %}</th>
 | 
			
		||||
            </tr>
 | 
			
		||||
 | 
			
		||||
            {% for item in stats.items %}
 | 
			
		||||
                <tr class="log">
 | 
			
		||||
                    <th>{{ item.date|date:"H:i" }}</th>
 | 
			
		||||
                <tr>
 | 
			
		||||
                    <th>{{ item.date|time:"H:i" }}</th>
 | 
			
		||||
                    <th>{{ item.type }}</th>
 | 
			
		||||
                    <th>{{ item.name }}</th>
 | 
			
		||||
                    <th>{% for tag,count in item.tags.items %}
 | 
			
		||||
                        {{ tag }}: {{ count }};
 | 
			
		||||
                        {% endfor %}</th>
 | 
			
		||||
                    <th>{{ item.type }}</th>
 | 
			
		||||
                </tr>
 | 
			
		||||
 | 
			
		||||
                {% for track in item.tracks %}
 | 
			
		||||
                <tr class="track">
 | 
			
		||||
                    <td>{{ track.date|date:"H:i" }}</td>
 | 
			
		||||
                <tr class="subdata">
 | 
			
		||||
                    <td>{{ track.date|time:"H:i" }}</td>
 | 
			
		||||
                    <td>{% trans "Track" %}</td>
 | 
			
		||||
                    <td>{{ track.artist }} -- <emph>{{ track.title }}</emph> {{ track.version }}</td>
 | 
			
		||||
                    <td>{{ track.tags.all|join:', ' }}</td>
 | 
			
		||||
                </tr>
 | 
			
		||||
                {% endfor %}
 | 
			
		||||
            {% endfor %}
 | 
			
		||||
 | 
			
		||||
            <tr>
 | 
			
		||||
            <tr class="bottom">
 | 
			
		||||
                <td>{{ stats.date|date:'d/m/Y' }}</td>
 | 
			
		||||
                <td>{% trans "Total" %}</td>
 | 
			
		||||
                {# TODO: translation block #}
 | 
			
		||||
                <td>{% trans "Total and average" %} ({{ stats.count }} tracks)</td>
 | 
			
		||||
                <td>
 | 
			
		||||
                    {% with stats.items|length as items_count %}
 | 
			
		||||
                    {% with stats.count as tracks_count %}
 | 
			
		||||
                    {% blocktrans %}
 | 
			
		||||
                    {{ items_count }} items, with a total of {{ tracks_count }} tracks
 | 
			
		||||
                    {% endblocktrans %}
 | 
			
		||||
                    {% endwith %}
 | 
			
		||||
                    {% endwith %}
 | 
			
		||||
                </td>
 | 
			
		||||
                <td>{% for tag, count, average in stats.tags %}
 | 
			
		||||
                    {{ tag }}: <b>{{ count }} / {{ average|floatformat }}%</b>;
 | 
			
		||||
                    <span>{{ tag }}: <b>{{ average|floatformat }}%</b> ({{ count }})<br>
 | 
			
		||||
                {% endfor %}
 | 
			
		||||
                </td>
 | 
			
		||||
            </tr>
 | 
			
		||||
@ -48,9 +79,6 @@
 | 
			
		||||
    </section>
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,3 @@
 | 
			
		||||
 | 
			
		||||
from django.conf.urls import include, url
 | 
			
		||||
import aircox.views as views
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -181,7 +181,7 @@ class StatisticsView(View,TemplateResponseMixin,LoginRequiredMixin):
 | 
			
		||||
                           items = [], tags = {})
 | 
			
		||||
 | 
			
		||||
        last_item = None
 | 
			
		||||
        for elm in station.on_air(date):
 | 
			
		||||
        for elm in reversed(station.on_air(date)):
 | 
			
		||||
            qs = None
 | 
			
		||||
            item = None
 | 
			
		||||
            if type(elm) == models.Diffusion:
 | 
			
		||||
@ -215,7 +215,7 @@ class StatisticsView(View,TemplateResponseMixin,LoginRequiredMixin):
 | 
			
		||||
                    stats.items.append(item)
 | 
			
		||||
 | 
			
		||||
                elm.related.date = elm.date
 | 
			
		||||
                item.tracks.insert(0, elm.related)
 | 
			
		||||
                item.tracks.append(elm.related)
 | 
			
		||||
                item.date = min(elm.date, item.date)
 | 
			
		||||
                item.add_tags(qs)
 | 
			
		||||
                stats.count += 1
 | 
			
		||||
@ -223,7 +223,6 @@ class StatisticsView(View,TemplateResponseMixin,LoginRequiredMixin):
 | 
			
		||||
            last_item = item
 | 
			
		||||
            stats.add_tags(qs)
 | 
			
		||||
 | 
			
		||||
        print(stats.tags)
 | 
			
		||||
        stats.tags = [
 | 
			
		||||
            (name, count, count / stats.count * 100)
 | 
			
		||||
            for name, count in stats.tags.items()
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user