+3
-1
@@ -11,4 +11,6 @@ infoscreen/migrations/*
|
||||
webapp/migrations/*
|
||||
.idea/
|
||||
logs/
|
||||
logs/*
|
||||
static/
|
||||
node_modules/
|
||||
media/
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
.footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
text-align: center;
|
||||
background-color: #cfcfcf;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
#fi-button {
|
||||
background: url("/static/img/fi.png") no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
#en-button {
|
||||
background: url("/static/img/en.png") no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.lang-button {
|
||||
height: 20px;
|
||||
width: 30px;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 267 B |
@@ -1,5 +1,5 @@
|
||||
table {
|
||||
font-size: 3vw;
|
||||
font-size: 5vh;
|
||||
font-family: 'Droid Sans Mono', monospace;
|
||||
}
|
||||
.red {
|
||||
@@ -39,3 +39,36 @@ table {
|
||||
50% { opacity: 0.1; }
|
||||
100% { opacity: 1.0; }
|
||||
}
|
||||
thead{
|
||||
background: #f0f0f0;
|
||||
}
|
||||
.header-row{
|
||||
background: #f0f0f0;
|
||||
font-size: 7vh;
|
||||
font-family: 'Droid Sans Mono', monospace;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100vw;
|
||||
padding: 0 0 0 0;
|
||||
}
|
||||
|
||||
.container .table {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
.repeat-item.ng-leave {
|
||||
-webkit-transition:0.5s linear all;
|
||||
transition:0.5s linear all;
|
||||
}
|
||||
|
||||
.repeat-item.ng-leave.ng-leave-active {
|
||||
opacity: 0;
|
||||
font-size: 0vh;
|
||||
}
|
||||
|
||||
.repeat-item.ng-leave{
|
||||
opacity: 1;
|
||||
font-size: 5vh;
|
||||
}
|
||||
|
||||
@@ -1,38 +1,43 @@
|
||||
<link rel="stylesheet" href="/static/css/hsl.css">
|
||||
<link href="https://fonts.googleapis.com/css?family=Droid+Sans+Mono" rel="stylesheet">
|
||||
<div ng-app="myApp" ng-controller="timetableCtrl">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
Aika
|
||||
</th>
|
||||
<th>
|
||||
Numero
|
||||
</th>
|
||||
<th>
|
||||
Pysäkki
|
||||
</th>
|
||||
<th>
|
||||
Päätepysäkki
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="x in arr | orderBy: ['date','time'] | limitTo: 10">
|
||||
<td ng-class='{red : x.hurry, black: !x.hurry}'>
|
||||
{{x.time}}
|
||||
</td>
|
||||
<td style="margin-left: 15px">
|
||||
{{x.bus}}
|
||||
</td>
|
||||
<td>
|
||||
{{x.stop}}
|
||||
</td>
|
||||
<td>
|
||||
{{x.laststop}}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="container" ng-app="myApp" ng-controller="timetableCtrl">
|
||||
<div class="header-row row">
|
||||
<div class="col-sm-2"></div>
|
||||
<div class="col-sm-8">HSL-Aikataulut</div>
|
||||
<div class="col-sm-2 time"><p>{{ clock | date:'HH:mm'}}</p></div>
|
||||
</div>
|
||||
<table class="table table-striped row">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
Aika
|
||||
</th>
|
||||
<th>
|
||||
Linja
|
||||
</th>
|
||||
<th>
|
||||
Pysäkki
|
||||
</th>
|
||||
<th>
|
||||
Päätepysäkki
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="repeat-item" ng-repeat="x in arr | orderBy: ['date','time'] | limitTo: 10">
|
||||
<td ng-class='{red : x.hurry, black: !x.hurry}'>
|
||||
{{x.timedelta < 10 ?x.timedelta + ' min' : x.time}}
|
||||
</td>
|
||||
<td>
|
||||
{{x.bus}}
|
||||
</td>
|
||||
<td>
|
||||
{{x.stop}}
|
||||
</td>
|
||||
<td>
|
||||
{{x.laststop}}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
<div class="row" ng-controller="infoadmin_ctrl">
|
||||
<div class="col-xs-12 col-md-6">
|
||||
<h2>Info items</h2>
|
||||
<div>Infoitems available for rotations:</div>
|
||||
<table class="table table-striped">
|
||||
<tr><th>Item</th><th>Set duration</th><th>Add to rotation</th><th>Delete</th></tr>
|
||||
<tr ng-repeat="i in infoitems">
|
||||
<td>{{i.name}}</td>
|
||||
<td><input type="text" class="form-control" ng-model="i.duration"></input></td>
|
||||
<td><input type="button" class="btn btn-success" ng-click="createInstance(selected_rot.id, i.id, i.item_type, i.duration);" value="add"></input></td>
|
||||
<td><input type="button" class="btn btn-danger" ng-click="deleteItem(i.item_type, i.id);" value="delete"></input></td>
|
||||
</tr>
|
||||
</table>
|
||||
<h2>Create new item</h2>
|
||||
<table class="table table-striped">
|
||||
<tr><td>Item type</td>
|
||||
<td><select class="form-control form-control-sm" ng-model="createtype", ng-options="t.name for t in infotypes">
|
||||
<option value=""></option>
|
||||
</select></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div ng-include="createtype.create_template_url"></div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-6">
|
||||
<h2>Rotations</h2>
|
||||
<div>
|
||||
Select rotation to edit:
|
||||
</div>
|
||||
<table class="table table-striped">
|
||||
<tr><th>Rotation</th>
|
||||
<th>Select</th>
|
||||
<th>Delete</th></tr>
|
||||
<tr ng-repeat="r in rotations">
|
||||
<td>{{r.name}}</td>
|
||||
<td><input type="button" class="btn btn-info" ng-click="selectRotation(r.id)" value="select"></td>
|
||||
<td><input type="button" class="btn btn-danger" ng-click="deleteRotation(r.id)" value="delete"></input></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" class="form-control" ng-model="r.name" placeholder="Name"></input></td>
|
||||
<td><input type="button" class="btn btn-success" ng-click="createRotation(r.name)" value="create new"></input></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2>Rotation: {{selected_rot.name}}</h2>
|
||||
<div>Instances in currently selected rotation:</div>
|
||||
<table class="table table-striped">
|
||||
<tr><th>Instance</th><th>Duration</th><th>Delete</th></tr>
|
||||
<tr ng-repeat="i in selected_rot.instances">
|
||||
<td>{{i.item.name}}</td><td>{{i.duration}}s</td>
|
||||
<td><input type="button" ng-click="deleteInstance(i.id);" value="delete" class="btn btn-danger"></input></td>
|
||||
</tr>
|
||||
</div>
|
||||
|
||||
</div
|
||||
@@ -1,8 +1,15 @@
|
||||
var app = angular.module('infoAdmin',['ngFileUpload']);
|
||||
|
||||
app.config(['$httpProvider', function ($httpProvider) {
|
||||
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
|
||||
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
|
||||
}]);
|
||||
|
||||
app.config(function($interpolateProvider) {
|
||||
$interpolateProvider.startSymbol('{$');
|
||||
$interpolateProvider.endSymbol('$}');
|
||||
});
|
||||
|
||||
app.service("InstanceList", ["$http", function($http){
|
||||
var self = this;
|
||||
this.selected_rot = {}
|
||||
|
||||
@@ -83,6 +83,7 @@ app.controller('timetableCtrl',
|
||||
$scope.$on('$destroy', function() {
|
||||
$interval.cancel(inter1);
|
||||
$interval.cancel(inter2);
|
||||
$interval.cancel(inter3);
|
||||
});
|
||||
var objects;
|
||||
$scope.arr=[];
|
||||
@@ -169,6 +170,7 @@ app.controller('timetableCtrl',
|
||||
d.setHours(time[0]);
|
||||
d.setMinutes(time[1]);
|
||||
var diff=(d.getTime()-f.getTime());
|
||||
$scope.arr[a]['timedelta']=Math.floor(diff/60000);
|
||||
if(diff < tooSoon*60000) {
|
||||
$scope.arr.splice(a,1);
|
||||
}
|
||||
@@ -177,10 +179,14 @@ app.controller('timetableCtrl',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateTime(){
|
||||
$scope.clock = Date.now();
|
||||
}
|
||||
$scope.clock = Date.now();
|
||||
load();
|
||||
var inter1=$interval(delOld,2000);
|
||||
var inter2=$interval(load,10000);
|
||||
var inter3=$interval(updateTime, 1000);
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
<!DOCTYPE html>
|
||||
<html ng-app="infoAdmin">
|
||||
<head>
|
||||
@@ -13,13 +15,96 @@
|
||||
</head>
|
||||
<body>
|
||||
<div id="header" class="row">
|
||||
<div class="col-xs-1 col-xs-offset-11 col-sm-1 col-lg-1">
|
||||
<form action="/logout" method="post"> {% csrf_token %}
|
||||
<input type="Submit" value="Logout" name="Logout" class="btn btn-danger"/>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-xs-1 col-xs-offset-11 col-sm-1 col-lg-1">
|
||||
<form action="/logout" method="post"> {% csrf_token %}
|
||||
<input type="Submit" value="{% trans "Log out" %}" name="Logout" class="btn btn-danger"/>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h1>{% trans "Infoscreen Admin Pane" %}</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" ng-controller="infoadmin_ctrl">
|
||||
<div class="col-xs-12 col-md-6">
|
||||
<h2>{% trans "Info items" %}</h2>
|
||||
<div>{% trans "Infoitems available for rotations" %}</div>
|
||||
<table class="table table-striped">
|
||||
<tr>
|
||||
<th>{% trans "Item" %}</th>
|
||||
<th>{% trans "Set duration" %}</th>
|
||||
<th>{% trans "Add to rotation" %}</th>
|
||||
<th>{% trans "Delete" %}</th>
|
||||
</tr>
|
||||
<tr ng-repeat="i in infoitems">
|
||||
<td>{$ i.name $}</td>
|
||||
<td><input type="text" class="form-control" ng-model="i.duration"></input></td>
|
||||
<td><input type="button" class="btn btn-success" ng-click="createInstance(selected_rot.id, i.id, i.item_type, i.duration);" value="{% trans "Add" %}"></input></td>
|
||||
<td><input type="button" class="btn btn-danger" ng-click="deleteItem(i.item_type, i.id);" value="{% trans "Delete" %}"></input></td>
|
||||
</tr>
|
||||
</table>
|
||||
<h2>{% trans "Create new item" %}</h2>
|
||||
<table class="table table-striped">
|
||||
<tr>
|
||||
<td>{% trans "Item type" %}</td>
|
||||
<td>
|
||||
<select class="form-control form-control-sm" ng-model="createtype", ng-options="t.name for t in infotypes">
|
||||
<option value=""></option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div ng-include="createtype.create_template_url"></div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-6">
|
||||
<h2>{% trans "Rotations" %}</h2>
|
||||
<div>
|
||||
{% trans "Select rotation to edit" %}:
|
||||
</div>
|
||||
<table class="table table-striped">
|
||||
<tr>
|
||||
<th>{% trans "Rotation" %}</th>
|
||||
<th>{% trans "id" %}</th>
|
||||
<th>{% trans "Select" %}</th>
|
||||
<th>{% trans "Preview" %}</th>
|
||||
<th>{% trans "Delete" %}</th>
|
||||
</tr>
|
||||
<tr ng-repeat="r in rotations">
|
||||
<td>{$ r.name $}</td>
|
||||
<td>{$ r.id $}</td>
|
||||
<td><input type="button" class="btn btn-info" ng-click="selectRotation(r.id)" value="{% trans "Select" %}"></td>
|
||||
<td><a href="/infoscreen/{$ r.id $}"><input type="button" class="btn btn-primary" value="{% trans "Preview" %}"></a></td>
|
||||
<td><input type="button" class="btn btn-danger" ng-click="deleteRotation(r.id)" value="{% trans "Delete" %}"></input></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" class="form-control" ng-model="r.name" placeholder="{% trans "Name" %}"></input></td>
|
||||
<td><input type="button" class="btn btn-success" ng-click="createRotation(r.name)" value="{% trans "Create new" %}"></input></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="container" ng-include="'/static/html/infoscreen_admin.html'"></div>
|
||||
<h2>{% trans "Rotation" %}: {$ selected_rot.name $}</h2>
|
||||
<div>{% trans "Instances in currently selected rotation" %}:</div>
|
||||
<table class="table table-striped">
|
||||
<tr>
|
||||
<th>{% trans "Instance" %}</th>
|
||||
<th>{% trans "Duration" %}</th>
|
||||
<th>{% trans "Delete" %}</th>
|
||||
</tr>
|
||||
<tr ng-repeat="i in selected_rot.instances">
|
||||
<td>{$ i.item.name $}</td><td>{$ i.duration $} s</td>
|
||||
<td><input type="button" ng-click="deleteInstance(i.id);" value="{% trans "Delete" %}" class="btn btn-danger"></input></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: 100px;">
|
||||
{% include "footer.html" %}
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,264 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-02-12 00:46+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:20
|
||||
#: members/templates/members_base.html:67
|
||||
msgid "Log out"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:27
|
||||
msgid "Infoscreen Admin Pane"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:32
|
||||
msgid "Info items"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:33
|
||||
msgid "Infoitems available for rotations"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:36
|
||||
msgid "Item"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:37
|
||||
msgid "Set duration"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:38
|
||||
msgid "Add to rotation"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:39
|
||||
#: infoscreen/templates/infoscreen_admin.html:45
|
||||
#: infoscreen/templates/infoscreen_admin.html:72
|
||||
#: infoscreen/templates/infoscreen_admin.html:79
|
||||
#: infoscreen/templates/infoscreen_admin.html:96
|
||||
#: infoscreen/templates/infoscreen_admin.html:100
|
||||
#: members/templates/member_list.html:63
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:44
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:48
|
||||
msgid "Create new item"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:51
|
||||
msgid "Item type"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:62
|
||||
msgid "Rotations"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:64
|
||||
msgid "Select rotation to edit"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:68
|
||||
#: infoscreen/templates/infoscreen_admin.html:90
|
||||
msgid "Rotation"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:69
|
||||
msgid "id"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:70
|
||||
#: infoscreen/templates/infoscreen_admin.html:77
|
||||
msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:71
|
||||
#: infoscreen/templates/infoscreen_admin.html:78
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:82
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:83
|
||||
msgid "Create new"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:91
|
||||
msgid "Instances in currently selected rotation"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:94
|
||||
msgid "Instance"
|
||||
msgstr ""
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:95
|
||||
msgid "Duration"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:13 members/templates/member_list.html:45
|
||||
msgid "Added"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:14
|
||||
msgid "Added after"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:15
|
||||
msgid "Added before"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:20 members/templates/member_list.html:46
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:21
|
||||
msgid "Paid after"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:22
|
||||
msgid "Paid before"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:27
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:28
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:29
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:32 members/templates/members_base.html:13
|
||||
msgid "Member register"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:33
|
||||
msgid "Download CSV"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:39
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:40
|
||||
msgid "First name"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:41
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:42
|
||||
msgid "AYY member"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:43
|
||||
msgid "JAS recipient"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:44
|
||||
msgid "Residence"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:47
|
||||
msgid "Member count"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:61
|
||||
msgid "Update payment"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:62
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/member_list.html:63
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/members_base.html:49
|
||||
msgid "Member list"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/members_base.html:50
|
||||
msgid "Add member"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/members_base.html:51
|
||||
msgid "Add multiple"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/members_base.html:52
|
||||
msgid "Member application"
|
||||
msgstr ""
|
||||
|
||||
#: members/templates/members_base.html:62
|
||||
msgid "Member register of SIK ry"
|
||||
msgstr ""
|
||||
|
||||
#: sikweb/settings-sample.py:146 sikweb/settings.py:146
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: sikweb/settings-sample.py:147 sikweb/settings.py:147
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: templates/footer.html:11
|
||||
msgid "Copyright Aalto-yliopiston Sähköinsinöörikilta ry"
|
||||
msgstr ""
|
||||
|
||||
#: webapp/templates/admin_index.html:6
|
||||
msgid "SIK Admin"
|
||||
msgstr ""
|
||||
|
||||
#: webapp/templates/main_index.html:7
|
||||
msgid "Members"
|
||||
msgstr ""
|
||||
|
||||
#: webapp/templates/main_index.html:8
|
||||
msgid "Infoscreen"
|
||||
msgstr ""
|
||||
|
||||
#: webapp/templates/main_index.html:9
|
||||
msgid "Admin tools"
|
||||
msgstr ""
|
||||
|
||||
#: webapp/templates/navigation.html:29
|
||||
msgid "Event calendar"
|
||||
msgstr ""
|
||||
|
||||
#: webapp/templates/navigation.html:30
|
||||
msgid "International"
|
||||
msgstr ""
|
||||
|
||||
#: webapp/templates/navigation.html:31
|
||||
msgid "Sössö"
|
||||
msgstr ""
|
||||
|
||||
#: webapp/templates/navigation.html:32
|
||||
msgid "Contact"
|
||||
msgstr ""
|
||||
Binary file not shown.
@@ -0,0 +1,266 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-02-12 00:46+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:20
|
||||
#: members/templates/members_base.html:67
|
||||
msgid "Log out"
|
||||
msgstr "Kirjaudu ulos"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:27
|
||||
msgid "Infoscreen Admin Pane"
|
||||
msgstr "Infonäyttöjen hallintapaneeli"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:32
|
||||
msgid "Info items"
|
||||
msgstr "Diat"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:33
|
||||
msgid "Infoitems available for rotations"
|
||||
msgstr "Rotaatioon lisättävät diat"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:36
|
||||
msgid "Item"
|
||||
msgstr "Dia"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:37
|
||||
msgid "Set duration"
|
||||
msgstr "Aseta kesto"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:38
|
||||
msgid "Add to rotation"
|
||||
msgstr "Lisää rotaatioon"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:39
|
||||
#: infoscreen/templates/infoscreen_admin.html:45
|
||||
#: infoscreen/templates/infoscreen_admin.html:72
|
||||
#: infoscreen/templates/infoscreen_admin.html:79
|
||||
#: infoscreen/templates/infoscreen_admin.html:96
|
||||
#: infoscreen/templates/infoscreen_admin.html:100
|
||||
#: members/templates/member_list.html:63
|
||||
msgid "Delete"
|
||||
msgstr "Poista"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:44
|
||||
msgid "Add"
|
||||
msgstr "Lisää"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:48
|
||||
msgid "Create new item"
|
||||
msgstr "Luo uusi dia"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:51
|
||||
msgid "Item type"
|
||||
msgstr "Diatyyppi"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:62
|
||||
msgid "Rotations"
|
||||
msgstr "Rotaatiot"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:64
|
||||
msgid "Select rotation to edit"
|
||||
msgstr "Valitse muokattava rotaatio"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:68
|
||||
#: infoscreen/templates/infoscreen_admin.html:90
|
||||
msgid "Rotation"
|
||||
msgstr "Rotaatio"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:69
|
||||
msgid "id"
|
||||
msgstr "id"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:70
|
||||
#: infoscreen/templates/infoscreen_admin.html:77
|
||||
msgid "Select"
|
||||
msgstr "Valitse"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:71
|
||||
#: infoscreen/templates/infoscreen_admin.html:78
|
||||
msgid "Preview"
|
||||
msgstr "Esikatsele"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:82
|
||||
msgid "Name"
|
||||
msgstr "Nimi"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:83
|
||||
msgid "Create new"
|
||||
msgstr "Luo uusi"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:91
|
||||
msgid "Instances in currently selected rotation"
|
||||
msgstr "Nykyisen rotaation diat"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:94
|
||||
msgid "Instance"
|
||||
msgstr "Dia"
|
||||
|
||||
#: infoscreen/templates/infoscreen_admin.html:95
|
||||
msgid "Duration"
|
||||
msgstr "Kesto"
|
||||
|
||||
#: members/templates/member_list.html:13 members/templates/member_list.html:45
|
||||
msgid "Added"
|
||||
msgstr "Lisätty"
|
||||
|
||||
#: members/templates/member_list.html:14
|
||||
msgid "Added after"
|
||||
msgstr "Lisätty jälkeen"
|
||||
|
||||
#: members/templates/member_list.html:15
|
||||
msgid "Added before"
|
||||
msgstr "Lisätty ennen"
|
||||
|
||||
#: members/templates/member_list.html:20 members/templates/member_list.html:46
|
||||
msgid "Paid"
|
||||
msgstr "Maksettu"
|
||||
|
||||
#: members/templates/member_list.html:21
|
||||
msgid "Paid after"
|
||||
msgstr "Maksettu jälkeen"
|
||||
|
||||
#: members/templates/member_list.html:22
|
||||
msgid "Paid before"
|
||||
msgstr "Maksettu ennen"
|
||||
|
||||
#: members/templates/member_list.html:27
|
||||
msgid "Search"
|
||||
msgstr "Haku"
|
||||
|
||||
#: members/templates/member_list.html:28
|
||||
msgid "Filter"
|
||||
msgstr "Suodata"
|
||||
|
||||
#: members/templates/member_list.html:29
|
||||
msgid "Reset"
|
||||
msgstr "Nollaa"
|
||||
|
||||
#: members/templates/member_list.html:32 members/templates/members_base.html:13
|
||||
msgid "Member register"
|
||||
msgstr "Jäsenrekisteri"
|
||||
|
||||
#: members/templates/member_list.html:33
|
||||
msgid "Download CSV"
|
||||
msgstr "Lataa CSV"
|
||||
|
||||
#: members/templates/member_list.html:39
|
||||
msgid "Last name"
|
||||
msgstr "Sukunimi"
|
||||
|
||||
#: members/templates/member_list.html:40
|
||||
msgid "First name"
|
||||
msgstr "Etunimi"
|
||||
|
||||
#: members/templates/member_list.html:41
|
||||
msgid "Email"
|
||||
msgstr "Sähköposti"
|
||||
|
||||
#: members/templates/member_list.html:42
|
||||
msgid "AYY member"
|
||||
msgstr "AYY:n jäsen"
|
||||
|
||||
#: members/templates/member_list.html:43
|
||||
msgid "JAS recipient"
|
||||
msgstr "JAS-vastaanottaja"
|
||||
|
||||
#: members/templates/member_list.html:44
|
||||
msgid "Residence"
|
||||
msgstr "Asuinpaikka"
|
||||
|
||||
#: members/templates/member_list.html:47
|
||||
msgid "Member count"
|
||||
msgstr "Lukumäärä"
|
||||
|
||||
#: members/templates/member_list.html:61
|
||||
msgid "Update payment"
|
||||
msgstr "Päivitä maksu"
|
||||
|
||||
#: members/templates/member_list.html:62
|
||||
msgid "Edit"
|
||||
msgstr "Muokkaa"
|
||||
|
||||
#: members/templates/member_list.html:63
|
||||
msgid "Are you sure?"
|
||||
msgstr "Oletko varma?"
|
||||
|
||||
#: members/templates/members_base.html:49
|
||||
msgid "Member list"
|
||||
msgstr "Jäsenlistaus"
|
||||
|
||||
#: members/templates/members_base.html:50
|
||||
msgid "Add member"
|
||||
msgstr "Lisää jäsen"
|
||||
|
||||
#: members/templates/members_base.html:51
|
||||
msgid "Add multiple"
|
||||
msgstr "Lisää useita"
|
||||
|
||||
#: members/templates/members_base.html:52
|
||||
msgid "Member application"
|
||||
msgstr "Jäsenhakemus"
|
||||
|
||||
#: members/templates/members_base.html:62
|
||||
msgid "Member register of SIK ry"
|
||||
msgstr "Aalto-yliopiston Sähköinsinöörikilta ry:n jäsenrekisteri"
|
||||
|
||||
#: sikweb/settings-sample.py:146 sikweb/settings.py:146
|
||||
msgid "English"
|
||||
msgstr "englanti"
|
||||
|
||||
#: sikweb/settings-sample.py:147 sikweb/settings.py:147
|
||||
msgid "Finnish"
|
||||
msgstr "suomi"
|
||||
|
||||
#: templates/footer.html:11
|
||||
msgid "Copyright Aalto-yliopiston Sähköinsinöörikilta ry"
|
||||
msgstr "Copyright Aalto-yliopiston Sähköinsinöörikilta ry"
|
||||
|
||||
#: webapp/templates/admin_index.html:6
|
||||
msgid "SIK Admin"
|
||||
msgstr "SIK Hallintapaneeli"
|
||||
|
||||
#: webapp/templates/main_index.html:7
|
||||
#, fuzzy
|
||||
msgid "Members"
|
||||
msgstr "Jäsenlistaus"
|
||||
|
||||
#: webapp/templates/main_index.html:8
|
||||
msgid "Infoscreen"
|
||||
msgstr "Infonäyttö"
|
||||
|
||||
#: webapp/templates/main_index.html:9
|
||||
msgid "Admin tools"
|
||||
msgstr "Hallintatyökalut"
|
||||
|
||||
#: webapp/templates/navigation.html:29
|
||||
msgid "Event calendar"
|
||||
msgstr "Tapahtumakalenteri"
|
||||
|
||||
#: webapp/templates/navigation.html:30
|
||||
msgid "International"
|
||||
msgstr "International"
|
||||
|
||||
#: webapp/templates/navigation.html:31
|
||||
msgid "Sössö"
|
||||
msgstr "Sössö"
|
||||
|
||||
#: webapp/templates/navigation.html:32
|
||||
msgid "Contact"
|
||||
msgstr "Yhteystiedot"
|
||||
@@ -1,3 +1,6 @@
|
||||
from django.contrib import admin
|
||||
from members.models import Member, MemberRequest
|
||||
|
||||
# Register your models here.
|
||||
admin.site.register(Member)
|
||||
admin.site.register(MemberRequest)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
.content-area {
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
padding-bottom: 2rem;
|
||||
}
|
||||
|
||||
.content-area-title {
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
<h3> Jäsenhakemukset </h3>
|
||||
|
||||
<div>
|
||||
<div class="panel panel-primary" ng-repeat="x in applications | orderBy: 'submitted'">
|
||||
<div class="panel-heading">{{ x.member.first_name }} {{ x.member.last_name}}</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-4">Sähköposti: {{ x.member.email }}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">AYY-jäsen: {{ x.member.AYY }}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">JAS-listaan: {{ x.member.jas }}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">Asuinpaikka: {{ x.member.POR }}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">Lisätty: {{ x.member.created }}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<input type="button" value="Hyväksy" class="btn btn-success" confirmed-click="sendAppl(x.id)" ng-confirm-click="Oletko varma, että haluat hyväksyä?"/>
|
||||
<input type="button" value="Hylkää" class="btn btn-danger" confirmed-click="deleteAppl(x.id)" ng-confirm-click="Oletko varma, että haluat hylätä hakemuksen?"/>
|
||||
<a href="#/applications/edit/{{x.member.id}}"<input type="button" value="Edit" class="btn btn-info">Muokkaa</input></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,66 +0,0 @@
|
||||
<link rel="stylesheet" href="/static/css/jasenlista.css">
|
||||
<div class="row">
|
||||
</div>
|
||||
<div class="row content-area">
|
||||
<div class="form-inline col-md-12 filters first-filter">
|
||||
<div class="form-group">
|
||||
<label for="addedBeforeDatePicker"><h4>Lisätty</h4></label>
|
||||
<md-datepicker class="filter-field" id="addedAfterDatePicker" ng-model="addedAfterDatePicker" md-placeholder="Lisätty jälkeen"></md-datepicker>
|
||||
<md-datepicker class="filter-field" id="addedBeforeDatePicker" ng-model="addedBeforeDatePicker" md-placeholder="Lisätty ennen"></md-datepicker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-inline col-md-12 filters">
|
||||
<div class="form-group">
|
||||
<label for="paidBeforeDatePicker"><h4>Maksettu</h4></label>
|
||||
<md-datepicker class="filter-field" id="paidAfterDatePicker" ng-model="paidAfterDatePicker" md-placeholder="Maksettu jälkeen"></md-datepicker>
|
||||
<md-datepicker class="filter-field" id="paidBeforeDatePicker" ng-model="paidBeforeDatePicker" md-placeholder="Maksettu ennen"></md-datepicker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-inline col-md-12 last-filter">
|
||||
<div class="form-group filters">
|
||||
<input class="filter-field form-control" type="text" id="searchFilter" placeholder="Haku" ng-keypress="pressKeyOnSearch($event)" ng-model="searchFilter"></input>
|
||||
<input type="button" value="Suodata" class="filter-field btn btn-success" ng-click="doFilter()" />
|
||||
<input type="button" value="Nollaa" class="filter-field btn btn-warning" ng-click="clearFilter()" />
|
||||
</div>
|
||||
<div class="content-area-title form-group">
|
||||
<h3 class="inline-title">Jäsenlista (jäseniä: {{members.length}})</h3>
|
||||
<input type="button" value="Lataa CSV" id="download-csv" class="btn btn-info" ng-click="loadCSV()"/>
|
||||
</div>
|
||||
</div>
|
||||
<table id="choose-address-table" class="table table-striped">
|
||||
<thead>
|
||||
<tr class="ui-widget-header">
|
||||
<th>Sukunimi</th>
|
||||
<th>Etunimi</th>
|
||||
<th>Sähköposti</th>
|
||||
<th>AYY-jäsen</th>
|
||||
<th>JAS-listalla</th>
|
||||
<th>Asuinpaikka</th>
|
||||
<th>Lisätty</th>
|
||||
<th>Maksanut</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="x in shown_members | orderBy: 'last_name'">
|
||||
<td>{{ x.last_name }}</td>
|
||||
<td>{{ x.first_name }}</td>
|
||||
<td>{{ x.email }}</td>
|
||||
<td>{{ x.AYY }}</td>
|
||||
<td>{{ x.jas }}</td>
|
||||
<td>{{ x.POR }}</td>
|
||||
<td>{{ x.created }}</td>
|
||||
<td>{{ x.paid }}</td>
|
||||
<td class="table-button-column">
|
||||
<input type="button" value="Päivitä maksu" class="table-button btn btn-success" ng-click="updatePayment(x.id)" />
|
||||
<a href="#/edit/{{x.id}}"<input type="button" value="Edit" class="table-button btn btn-info">Muokkaa</input></a>
|
||||
<input type="button" value="Poista" class="table-button btn btn-danger" confirmed-click="deleteMember(x.id)" ng-confirm-click="Are you sure?"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row" id="tommy">
|
||||
<div class="col-sm-4">
|
||||
<a href="#/tommy">Tommy</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,31 +0,0 @@
|
||||
<h3> Lisää jäsen </h3>
|
||||
|
||||
<div id="input_form">
|
||||
<form name="memberForm">
|
||||
<div class="form-group">
|
||||
<label>Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="member.first_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="member.last_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="member.email"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>AYY jäsen: </label>
|
||||
<input type="checkbox" id="AYY" value="0" ng-model="member.AYY"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>JAS-listaan: </label>
|
||||
<input type="checkbox" id="JAS" value="0" ng-model="member.jas"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="member.POR"></input>
|
||||
</div>
|
||||
<button ng-click="memberForm.$valid && send()" type="submit" class="btn btn-success" id="sendmember">Tallenna</button>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,24 +0,0 @@
|
||||
<div class="container" style="align:middle;">
|
||||
<div class="instructions">
|
||||
<h3> Lisää useampi jäsen </h3>
|
||||
<h5>
|
||||
Syötä jäsentiedot pilkuilla erotettuina formaatissa <b>Etunimi, Sukunimi, Sähköposti, Asuinkunta, AYY-jäsen(0 tai 1), JAS-listaan(0 tai 1)</b>
|
||||
<br>
|
||||
<br>
|
||||
Erota jäsenet rivinvaihdoilla toisistaan.
|
||||
</h5>
|
||||
<!--<img src="/static/img/members_example.png" alt="exampleImg" style="max-width:100%; height:auto; margin-bottom:10px; opacity:0.7;">-->
|
||||
</div>
|
||||
<form name="memberTextForm">
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<textarea ng-model="memberData" rows="20" cols="120" placeholder="Salli, Vahvonen, salli.vahvonen@notmail.dom, Kerava, 0, 0" style="border:solid 3px #c9c9c9; transition:box-shadow 0.3s, border 0.3s; align:middle;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<button ng-click="sendCSV()" type="submit" class="btn btn-success" id="sendMembers">Lähetä</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,32 +0,0 @@
|
||||
<h1> Muokkaa hakemuksen jäsentietoja </h1>
|
||||
|
||||
<div id="input_form">
|
||||
<form name="applicationForm">
|
||||
<div class="form-group">
|
||||
<label>Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="application.member.first_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="application.member.last_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="application.member.email"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>AYY jäsen: </label>
|
||||
<input type="checkbox" id="AYY" ng-model="application.member.AYY"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>JAS-listaan: </label>
|
||||
<input type="checkbox" id="jas" ng-model="application.member.jas"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="application.member.POR"></input>
|
||||
</div>
|
||||
<button class="btn btn-success" ng-click="applicationForm.$valid && sendappl()" type="submit" id="sendmember">Tallenna</button>
|
||||
<button class="btn btn-warning" ng-click="cancelappl()" type="submit" id="sendmember">Peruuta</button>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,32 +0,0 @@
|
||||
<h1> Muokkaa jäsentietoja </h1>
|
||||
|
||||
<div id="input_form">
|
||||
<form name="memberForm">
|
||||
<div class="form-group">
|
||||
<label>Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="member.first_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="member.last_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="member.email"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>AYY jäsen: </label>
|
||||
<input type="checkbox" id="AYY" ng-model="member.AYY"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>JAS-listaan: </label>
|
||||
<input type="checkbox" id="jas" ng-model="member.jas"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="member.POR"></input>
|
||||
</div>
|
||||
<button class="btn btn-success" ng-click="memberForm.$valid && send()" type="submit" id="sendmember">Tallenna</button>
|
||||
<button class="btn btn-warning" ng-click="cancel()" type="submit" id="sendmember">Peruuta</button>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,6 +1,11 @@
|
||||
var app = angular.module('memberApp', ['ngRoute','ngMaterial','ngMessages']);
|
||||
|
||||
app.config(['$httpProvider', function ($httpProvider) {
|
||||
app.config(['$httpProvider', '$locationProvider', function ($httpProvider, $locationProvider) {
|
||||
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
|
||||
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
|
||||
}]);
|
||||
}]);
|
||||
|
||||
app.config(function($interpolateProvider) {
|
||||
$interpolateProvider.startSymbol('{$');
|
||||
$interpolateProvider.endSymbol('$}');
|
||||
});
|
||||
|
||||
@@ -19,21 +19,22 @@ function notyfication(type, timeout) {
|
||||
var notyError = notyfication('error', 2500);
|
||||
var notySuccess = notyfication('success', 2500);
|
||||
|
||||
function memberDataEditor(returnpath) {
|
||||
return function($scope, $http, $route, $routeParams, $window, $location) {
|
||||
$scope.member = {"id": $routeParams.id};
|
||||
$http.get("/members/api/member/" + $scope.member.id).then(function(response) {
|
||||
function memberDataEditor(returnPath) {
|
||||
return function($scope, $http, $window, $location) {
|
||||
var id = memberId;
|
||||
console.log("id: " + id);
|
||||
$http.get("/members/api/member/" + id).then(function(response) {
|
||||
$scope.member = response.data;
|
||||
});
|
||||
|
||||
$scope.send = function() {
|
||||
$http.put("/members/api/member/" + $scope.member.id, $scope.member).then(function(response){
|
||||
$http.put("/members/api/member/" + id, $scope.member).then(function(response){
|
||||
notySuccess("Jäsentiedot tallennettu");
|
||||
$location.path(returnpath);
|
||||
$window.location = returnPath;
|
||||
});
|
||||
}
|
||||
$scope.cancel = function() { //user canceled. return to list
|
||||
$location.path(returnpath);
|
||||
$window.location = returnPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -47,7 +48,7 @@ app.directive('ngConfirmClick', [ function() { return {
|
||||
buttons: [ {
|
||||
addClass: 'btn btn-danger', text: 'Kyllä', onClick: function($noty) {
|
||||
$noty.close();
|
||||
scope.$eval(clickAction)
|
||||
scope.$eval(clickAction);
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -214,7 +215,6 @@ app.controller("postController", function($scope, $http, $location) {
|
||||
$scope.send = function() {
|
||||
$http.post("/members/api/member/", $scope.member).then(function(response){
|
||||
notySuccess("Jäsen lisätty!");
|
||||
$location.path("/list");
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -258,8 +258,8 @@ app.controller("applController", function($scope, $http){
|
||||
};
|
||||
});
|
||||
|
||||
app.controller("editController", memberDataEditor("/list"));
|
||||
app.controller("applEditController", memberDataEditor("/applications"));
|
||||
app.controller("editController", memberDataEditor("/members/list"));
|
||||
app.controller("applEditController", memberDataEditor("/members/applications"));
|
||||
|
||||
app.controller("addManyController", function($scope, $http, $window) {
|
||||
$scope.memberData = '';
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
app.config(['$routeProvider', function($routeProvider){
|
||||
$routeProvider
|
||||
.when('/',{
|
||||
templateUrl:"/static/html/jasenlista.html",
|
||||
controller:'getController',
|
||||
})
|
||||
.when('/list/',{
|
||||
templateUrl:"/static/html/jasenlista.html",
|
||||
controller:'getController',
|
||||
})
|
||||
.when('/add/',{
|
||||
templateUrl:"/static/html/lisaa_jasen.html",
|
||||
controller:'postController',
|
||||
})
|
||||
.when('/edit/:id',{
|
||||
templateUrl:"/static/html/muokkaa_jasenta.html",
|
||||
controller:'editController',
|
||||
})
|
||||
.when('/applications/',{
|
||||
templateUrl:"/static/html/jasenhakemukset.html",
|
||||
controller:'applController',
|
||||
})
|
||||
.when('/applications/edit/:id',{
|
||||
templateUrl:"/static/html/muokkaa_jasenta.html",
|
||||
controller:'applEditController',
|
||||
})
|
||||
.when('/addmany/',{
|
||||
templateUrl:"/static/html/lisaa_jasenia.html",
|
||||
controller:'addManyController',
|
||||
})
|
||||
.when('/tommy/',{
|
||||
templateUrl:"/static/html/tommy.html"
|
||||
})
|
||||
.otherwise({
|
||||
'redirectTo':"/"
|
||||
})
|
||||
}]);
|
||||
@@ -0,0 +1,28 @@
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container" style="align:middle;" ng-controller="addManyController">
|
||||
<div class="instructions">
|
||||
<h3> Lisää useampi jäsen </h3>
|
||||
<h5>
|
||||
Syötä jäsentiedot pilkuilla erotettuina formaatissa <b>Etunimi, Sukunimi, Sähköposti, Asuinkunta, AYY-jäsen(0 tai 1), JAS-listaan(0 tai 1)</b>
|
||||
<br>
|
||||
<br>
|
||||
Erota jäsenet rivinvaihdoilla toisistaan.
|
||||
</h5>
|
||||
<!--<img src="/static/img/members_example.png" alt="exampleImg" style="max-width:100%; height:auto; margin-bottom:10px; opacity:0.7;">-->
|
||||
</div>
|
||||
<form name="memberTextForm">
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<textarea ng-model="memberData" rows="20" cols="120" placeholder="Salli, Vahvonen, salli.vahvonen@notmail.dom, Kerava, 0, 0" style="border:solid 3px #c9c9c9; transition:box-shadow 0.3s, border 0.3s; align:middle;"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<button ng-click="sendCSV()" type="submit" class="btn btn-success" id="sendMembers">Lähetä</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
@@ -0,0 +1,39 @@
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div ng-controller="postController">
|
||||
<h3> Lisää jäsen </h3>
|
||||
|
||||
<div id="input_form">
|
||||
<form name="memberForm">
|
||||
<div class="form-group">
|
||||
<label>Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="member.first_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="member.last_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="member.email"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>AYY jäsen: </label>
|
||||
<input type="checkbox" id="AYY" value="0" ng-model="member.AYY"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>JAS-listaan: </label>
|
||||
<input type="checkbox" id="JAS" value="0" ng-model="member.jas"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="member.POR"></input>
|
||||
</div>
|
||||
<a href="/members/list">
|
||||
<button ng-click="memberForm.$valid && send()" type="submit" class="btn btn-success" id="sendmember">Tallenna</button>
|
||||
</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
@@ -0,0 +1,43 @@
|
||||
{% load staticfiles %}
|
||||
{% load i18n %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="applicationApp">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="uli uli">
|
||||
<meta name="author" content="veedeeämkoo">
|
||||
|
||||
<title>Jäsenhakemus</title>
|
||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" rel = "stylesheet">
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.js"></script>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.js"></script>
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
|
||||
|
||||
<!-- DatePicker -->
|
||||
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.css">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-messages.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-animate.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-aria.min.js"></script>
|
||||
|
||||
<!-- reCaptcha -->
|
||||
<script src="/static/js/angular-recaptcha.js"></script>
|
||||
<script src="https://www.google.com/recaptcha/api.js?onload=vcRecaptchaApiLoaded&render=explicit" async defer></script>
|
||||
|
||||
<script src="/static/js/jquery.noty.packaged.js"></script>
|
||||
<script src="/static/js/appconfig.js"></script>
|
||||
<script src="/static/js/application_controllers.js"></script>
|
||||
<script src="/static/js/moment.js"></script>
|
||||
<link href="/static/css/simple-sidebar.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
{% block content %}
|
||||
{% endblock content %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,88 +1,67 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="applicationApp" ng-controller="applicationController">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="uli uli">
|
||||
<meta name="author" content="veedeeämkoo">
|
||||
{% extends "application_base.html" %}
|
||||
{% load static %}
|
||||
|
||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
||||
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<link href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" rel = "stylesheet">
|
||||
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.js"></script>
|
||||
<script src = "http://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
|
||||
{%load staticfiles %}
|
||||
<script src="/static/js/jquery.noty.packaged.js"></script>
|
||||
<script src="/static/js/application_controllers.js"></script>
|
||||
<link rel="stylesheet" href="/static/css/application.css">
|
||||
<!-- reCaptcha -->
|
||||
<script src="https://www.google.com/recaptcha/api.js?onload=vcRecaptchaApiLoaded&render=explicit" async defer></script>
|
||||
<script src="/static/js/angular-recaptcha.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- include finnish form and then button for changing the language -->
|
||||
<div ng-include="">
|
||||
{% block content %}
|
||||
<link rel="stylesheet" href="{% static "css/application.css" %}">
|
||||
|
||||
</div>
|
||||
<title>Jäseneksi Aalto-yliopiston Sähköinsinöörikiltaan</title>
|
||||
<h3>Killan jäseneksi liittyminen on helppoa ja hauskaa!</h3>
|
||||
<h3>Täytä vain alla oleva lomake</h3>
|
||||
<h4>Muista myös maksaa jäsenmaksusi!</h4>
|
||||
<div id="input_form">
|
||||
<form name="applicationForm">
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label for="firstNameField">Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="member.first_name"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label for="lastNameField">Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="member.last_name"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label for="emailField">Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="member.email"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label>Olen AYY:n jäsen: </label>
|
||||
<input type="checkbox" autocomplete="off" id="AYY" value="0" ng-model="member.AYY">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label>Haluan saada viikottaisia jäsenmaileja: </label>
|
||||
<input type="checkbox" class="custom-control-input" autocomplete="off" id="JAS" value="0" ng-model="member.jas">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="member.POR"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div
|
||||
id="captcha"
|
||||
vc-recaptcha
|
||||
theme="'light'"
|
||||
key="'6LevHAcUAAAAAA45B7c-7qja-2aSwHztr9xb4K2Z'"
|
||||
on-create="setWidgetId(widgetId)"
|
||||
on-success="setResponse(response)"
|
||||
on-expire="cbExpiration()"
|
||||
></div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<button ng-click="applicationForm.$valid && send()" type="submit" class="btn btn-success" id="sendmember">Liity</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
<div id="input_form" ng-controller="applicationController">
|
||||
<form name="applicationForm">
|
||||
<div class="col-xs-12">
|
||||
<h3>Killan jäseneksi liittyminen on helppoa ja hauskaa!</h3>
|
||||
<h3>Täytä vain alla oleva lomake</h3>
|
||||
<h4>Muista myös maksaa jäsenmaksusi!</h4>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label for="firstNameField">Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="member.first_name"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label for="lastNameField">Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="member.last_name"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label for="emailField">Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="member.email"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label>Olen AYY:n jäsen: </label>
|
||||
<input type="checkbox" autocomplete="off" id="AYY" value="0" ng-model="member.AYY">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label>Haluan saada viikottaisia jäsenmaileja: </label>
|
||||
<input type="checkbox" class="custom-control-input" autocomplete="off" id="JAS" value="0" ng-model="member.jas">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="member.POR"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<div
|
||||
id="captcha"
|
||||
vc-recaptcha
|
||||
theme="'light'"
|
||||
key="'6LevHAcUAAAAAA45B7c-7qja-2aSwHztr9xb4K2Z'"
|
||||
on-create="setWidgetId(widgetId)"
|
||||
on-success="setResponse(response)"
|
||||
on-expire="cbExpiration()"
|
||||
></div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-1">
|
||||
<button ng-click="applicationForm.$valid && send()" type="submit" class="btn btn-success" id="sendmember">Liity</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
||||
@@ -1,15 +1,6 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="uli uli">
|
||||
<meta name="author" content="veedeeämkoo">
|
||||
|
||||
<title>Hienoa! Jäsenhakemuksesi on nyt lähetetty.</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hienoa! Jäsenhakemuksesi on nyt lähetetty.</h1>
|
||||
<a href="http://sahkoinsinoorikilta.fi">Takaisin Sähköinsinöörikillan web-sivuille</a>
|
||||
</body>
|
||||
</html>
|
||||
{% extends "application_base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Hienoa! Jäsenhakemuksesi on nyt lähetetty.</h1>
|
||||
<a href="http://sahkoinsinoorikilta.fi">Takaisin Sähköinsinöörikillan web-sivuille</a>
|
||||
{% endblock content %}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<script>
|
||||
var memberId = {{ member_id }};
|
||||
</script>
|
||||
<div ng-controller="applEditController">
|
||||
<h1> Muokkaa hakemuksen jäsentietoja </h1>
|
||||
|
||||
<div id="input_form">
|
||||
<form name="applicationForm">
|
||||
<div class="form-group">
|
||||
<label>Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="member.first_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="member.last_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="member.email"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>AYY jäsen: </label>
|
||||
<input type="checkbox" id="AYY" ng-model="member.AYY"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>JAS-listaan: </label>
|
||||
<input type="checkbox" id="jas" ng-model="member.jas"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="member.POR"></input>
|
||||
</div>
|
||||
<button class="btn btn-success" ng-click="applicationForm.$valid && sendappl()" type="submit" id="sendmember">Tallenna</button>
|
||||
<button class="btn btn-warning" ng-click="cancelappl()" type="submit" id="sendmember">Peruuta</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
@@ -0,0 +1,41 @@
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<script>
|
||||
var memberId = {{ member_id }};
|
||||
</script>
|
||||
<div ng-controller="editController">
|
||||
<h1> Muokkaa jäsentietoja </h1>
|
||||
|
||||
<div id="input_form">
|
||||
<form name="memberForm">
|
||||
<div class="form-group">
|
||||
<label>Etunimi: </label>
|
||||
<input id="firstNameField" required type="text" placeholder="Sähkö" class="form-control" ng-model="member.first_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sukunimi: </label>
|
||||
<input id="lastNameField" required type="text" placeholder="Insinööri" class="form-control" ng-model="member.last_name"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Sähköposti: </label>
|
||||
<input id="emailField" required type="text" placeholder="sahko.insinoori@aalto.fi" class="form-control" ng-model="member.email"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>AYY jäsen: </label>
|
||||
<input type="checkbox" id="AYY" ng-model="member.AYY"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>JAS-listaan: </label>
|
||||
<input type="checkbox" id="jas" ng-model="member.jas"></input>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Asuinkunta: </label>
|
||||
<input id="PORField" required type="text" placeholder="Otaniemi" class="form-control" ng-model="member.POR"></input>
|
||||
</div>
|
||||
<button class="btn btn-success" ng-click="memberForm.$valid && send()" type="submit" id="sendmember">Tallenna</button>
|
||||
<button class="btn btn-warning" ng-click="cancel()" type="submit" id="sendmember">Peruuta</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
@@ -0,0 +1,40 @@
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div ng-controller="applController">
|
||||
<h3> Jäsenhakemukset </h3>
|
||||
|
||||
<div>
|
||||
<div class="panel panel-primary" ng-repeat="x in applications | orderBy: 'submitted'">
|
||||
<div class="panel-heading">{$ x.member.first_name $} {$ x.member.last_name$}</div>
|
||||
<div class="panel-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-4">Sähköposti: {$ x.member.email $}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">AYY-jäsen: {$ x.member.AYY $}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">JAS-listaan: {$ x.member.jas $}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">Asuinpaikka: {$ x.member.POR $}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">Lisätty: {$ x.member.created $}</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-4">
|
||||
<input type="button" value="Hyväksy" class="btn btn-success" confirmed-click="sendAppl(x.id)" ng-confirm-click="Oletko varma, että haluat hyväksyä?"/>
|
||||
<input type="button" value="Hylkää" class="btn btn-danger" confirmed-click="deleteAppl(x.id)" ng-confirm-click="Oletko varma, että haluat hylätä hakemuksen?"/>
|
||||
<a href="/members/edit_application/{$x.member.id$}"<input type="button" value="Edit" class="btn btn-info">Muokkaa</input></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="!applications.length">
|
||||
<h3>Ei jäsenhakemuksia :(</h3>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
@@ -0,0 +1,75 @@
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% block content %}
|
||||
<link rel="stylesheet" href="{% static "css/jasenlista.css" %}">
|
||||
<div ng-controller="getController">
|
||||
<div class="row">
|
||||
</div>
|
||||
<div class="row content-area">
|
||||
<div class="form-inline col-md-12 first-filter">
|
||||
<div class="form-group filters">
|
||||
<label for="addedBeforeDatePicker"><h4>{% trans "Added" %}</h4></label>
|
||||
<md-datepicker class="filter-field" id="addedAfterDatePicker" ng-model="addedAfterDatePicker" md-placeholder="{% trans "Added after" %}"></md-datepicker>
|
||||
<md-datepicker class="filter-field" id="addedBeforeDatePicker" ng-model="addedBeforeDatePicker" md-placeholder="{% trans "Added before" %}"></md-datepicker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-inline col-md-12">
|
||||
<div class="form-group filters">
|
||||
<label for="paidBeforeDatePicker"><h4>{% trans "Paid" %}</h4></label>
|
||||
<md-datepicker class="filter-field" id="paidAfterDatePicker" ng-model="paidAfterDatePicker" md-placeholder="{% trans "Paid after" %}"></md-datepicker>
|
||||
<md-datepicker class="filter-field" id="paidBeforeDatePicker" ng-model="paidBeforeDatePicker" md-placeholder="{% trans "Paid before" %}"></md-datepicker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-inline col-md-12 last-filter">
|
||||
<div class="form-group filters">
|
||||
<input class="filter-field form-control" type="text" id="searchFilter" placeholder="{% trans "Search" %}" ng-keypress="pressKeyOnSearch($event)" ng-model="searchFilter"></input>
|
||||
<input type="button" value="{% trans "Filter" %}" class="filter-field btn btn-success" ng-click="doFilter()" />
|
||||
<input type="button" value="{% trans "Reset" %}" class="filter-field btn btn-warning" ng-click="clearFilter()" />
|
||||
</div>
|
||||
<div class="content-area-title form-group">
|
||||
<h3 class="inline-title">{% trans "Member register" %}</h3>
|
||||
<input type="button" value="{% trans "Download CSV" %}" id="download-csv" class="btn btn-info" ng-click="loadCSV()"/>
|
||||
</div>
|
||||
</div>
|
||||
<table id="choose-address-table" class="table table-striped">
|
||||
<thead>
|
||||
<tr class="ui-widget-header">
|
||||
<th>{% trans "Last name" %}</th>
|
||||
<th>{% trans "First name" %}</th>
|
||||
<th>{% trans "Email" %}</th>
|
||||
<th>{% trans "AYY member" %}</th>
|
||||
<th>{% trans "JAS recipient" %}</th>
|
||||
<th>{% trans "Residence" %}</th>
|
||||
<th>{% trans "Added" %}</th>
|
||||
<th>{% trans "Paid" %}</th>
|
||||
<th class="table-button-column">{% trans "Member count" %}: {$ members.length $}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="x in shown_members | orderBy: 'last_name'">
|
||||
<td>{$ x.last_name $}</td>
|
||||
<td>{$ x.first_name $}</td>
|
||||
<td>{$ x.email $}</td>
|
||||
<td>{$ x.AYY $}</td>
|
||||
<td>{$ x.jas $}</td>
|
||||
<td>{$ x.POR $}</td>
|
||||
<td>{$ x.created $}</td>
|
||||
<td>{$ x.paid $}</td>
|
||||
<td class="table-button-column">
|
||||
<input type="button" value="{% trans "Update payment" %}" class="table-button btn btn-success" ng-click="updatePayment(x.id)" />
|
||||
<a href="/members/edit/{$ x.id $}"<input type="button" value="{% trans "Edit" %}" class="table-button btn btn-info">{% trans "Edit" %}</input></a>
|
||||
<input type="button" value="{% trans "Delete" %}" class="table-button btn btn-danger" confirmed-click="deleteMember(x.id)" ng-confirm-click="{% trans "Are you sure?" %}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row" id="tommy">
|
||||
<div class="col-sm-4">
|
||||
<a href="/members/tommy">Tommy</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
@@ -0,0 +1,76 @@
|
||||
{% load staticfiles %}
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="memberApp">
|
||||
<head>
|
||||
<base href="/">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="uli uli">
|
||||
<meta name="author" content="veedeeämkoo">
|
||||
|
||||
<title>{% trans "Member register" %}</title>
|
||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" rel = "stylesheet">
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.js"></script>
|
||||
|
||||
<!-- Angular -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.js"></script>
|
||||
|
||||
<!-- Angular routing -->
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.js"></script>
|
||||
|
||||
<!-- Underscore.js -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
|
||||
|
||||
<!-- DatePicker -->
|
||||
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.css">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-messages.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-animate.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-aria.min.js"></script>
|
||||
|
||||
<script src="/static/js/jquery.noty.packaged.js"></script>
|
||||
<script src="/static/js/appconfig.js"></script>
|
||||
|
||||
<script src="/static/js/members_controllers.js"></script>
|
||||
<script src="/static/js/moment.js"></script>
|
||||
<link href="/static/css/simple-sidebar.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div id="sidebar-wrapper">
|
||||
<ul class="sidebar-nav">
|
||||
<li><a href="/members/list">{% trans "Member list" %}</a></li>
|
||||
<li><a href="/members/add">{% trans "Add member" %}</a></li>
|
||||
<li><a href="/members/add_many">{% trans "Add multiple" %}</a></li>
|
||||
<li><a href="/members/applications">{% trans "Member application" %}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /#sidebar-wrapper -->
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="col-xs-12 col-sm-12 col-lg-12">
|
||||
<div id="header" class="row">
|
||||
<div class="col-xs-11 col-sm-11 col-lg-11">
|
||||
<h1 style="text-align:center; margin-top:10px; margin-bottom: 10px;">
|
||||
{% trans "Member register of SIK ry" %}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="col-xs-1 col-sm-1 col-lg-1">
|
||||
<form action="/logout" method="post"> {% csrf_token %}
|
||||
<input type="Submit" value="{% trans "Log out" %}" name="Logout" class="btn btn-danger" style="margin-top:12px;"/>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% block content %}
|
||||
{% endblock content %}
|
||||
</div>
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,66 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="memberApp">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="uli uli">
|
||||
<meta name="author" content="veedeeämkoo">
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
<title>Jäsenrekisteri</title>
|
||||
{% block content %}
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" rel = "stylesheet">
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.js"></script>
|
||||
<!-- Sidebar -->
|
||||
<div id="sidebar-wrapper">
|
||||
<ul class="sidebar-nav">
|
||||
<li><a href="#/list">Listaa jäsenet</a></li>
|
||||
<li><a href="#/add">Lisää jäsen</a></li>
|
||||
<li><a href="#/addmany">Lisää jäseniä</a></li>
|
||||
<li><a href="#/applications">Jäsenhakemukset</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /#sidebar-wrapper -->
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.js"></script>
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
|
||||
|
||||
<!-- DatePicker -->
|
||||
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.css">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-messages.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-animate.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-aria.min.js"></script>
|
||||
|
||||
{%load staticfiles %}
|
||||
<script src="/static/js/jquery.noty.packaged.js"></script>
|
||||
<script src="/static/js/appconfig.js"></script>
|
||||
<script src="/static/js/members_routers.js"></script>
|
||||
<script src="/static/js/members_controllers.js"></script>
|
||||
<script src="/static/js/moment.js"></script>
|
||||
<link href="/static/css/simple-sidebar.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div id="sidebar-wrapper">
|
||||
<ul class="sidebar-nav">
|
||||
<li><a href="#/list">Listaa jäsenet</a></li>
|
||||
<li><a href="#/add">Lisää jäsen</a></li>
|
||||
<li><a href="#/addmany">Lisää jäseniä</a></li>
|
||||
<li><a href="#/applications">Jäsenhakemukset</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /#sidebar-wrapper -->
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="col-xs-12 col-sm-12 col-lg-12">
|
||||
<div id="header" class="row">
|
||||
<div class="col-xs-11 col-sm-11 col-lg-11">
|
||||
<h1 style="text-align:center; margin-top:10px; margin-bottom: 10px;">Aalto-yliopiston Sähköinsinöörikilta RY:n jäsenrekisteri</h1>
|
||||
</div>
|
||||
<div class="col-xs-1 col-sm-1 col-lg-1">
|
||||
<form action="/logout" method="post"> {% csrf_token %}
|
||||
<input type="Submit" value="Logout" name="Logout" class="btn btn-danger" style="margin-top:12px;"/>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-view></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!-- Page Content -->
|
||||
<div class="col-xs-12 col-sm-12 col-lg-12">
|
||||
<div id="header" class="row">
|
||||
<div class="col-xs-11 col-sm-11 col-lg-11">
|
||||
<h1 style="text-align:center; margin-top:10px; margin-bottom: 10px;">Aalto-yliopiston Sähköinsinöörikilta RY:n jäsenrekisteri</h1>
|
||||
</div>
|
||||
<div class="col-xs-1 col-sm-1 col-lg-1">
|
||||
<form action="/logout" method="post"> {% csrf_token %}
|
||||
<input type="Submit" value="Logout" name="Logout" class="btn btn-danger" style="margin-top:12px;"/>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-view></div>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{% extends "members_base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h1> Tommyn jäsenlista </h1>
|
||||
<div>
|
||||
<img src="/static/tommy.jpg" style="width:800px;height:300px;"></img>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
+47
-4
@@ -45,15 +45,58 @@ def send_mail_wrapper(subject, message):
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def index(request, *args, **kwargs):
|
||||
return render(request, 'members_index.html', {})
|
||||
def member_list(request, *args, **kwargs):
|
||||
context = {}
|
||||
return render(request, 'member_list.html', context)
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def add_member(request, *args, **kwargs):
|
||||
return render(request, 'add_member.html', {})
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def add_many_members(request, *args, **kwargs):
|
||||
return render(request, 'add_many_members.html', {})
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def list_applications(request, *args, **kwargs):
|
||||
return render(request, 'list_applications.html', {})
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def tommy_blooper(request, *args, **kwargs):
|
||||
return render(request, 'tommy_blooper.html', {})
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def edit_member(request, *args, **kwargs):
|
||||
i = kwargs.pop('index', None);
|
||||
if i is None:
|
||||
return HttpResponse(status=500, error="{'error': 'No member id specified'}")
|
||||
else:
|
||||
return render(request, 'edit_member.html', {'member_id' : i})
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def edit_application(request, *args, **kwargs):
|
||||
i = kwargs.pop('index', None);
|
||||
if i is None:
|
||||
return HttpResponse(status=500, error="{'error': 'No member id specified'}")
|
||||
else:
|
||||
return render(request, 'edit_application.html', {'member_id' : i})
|
||||
|
||||
@ensure_csrf_cookie
|
||||
def application_index(request, *args, **kwargs):
|
||||
return render(request, 'application_index.html', {})
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
def application_success_index(request, *args, **kwargs):
|
||||
return render(request, 'application_success.html', {})
|
||||
@@ -210,4 +253,4 @@ def export_csv(request, *args, **kwargs):
|
||||
|
||||
writer.writerow(field_list)
|
||||
|
||||
return response
|
||||
return response
|
||||
|
||||
@@ -13,6 +13,7 @@ https://docs.djangoproject.com/en/1.9/ref/settings/
|
||||
import os
|
||||
import logging
|
||||
from os.path import expanduser
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
@@ -48,6 +49,7 @@ INSTALLED_APPS = [
|
||||
MIDDLEWARE_CLASSES = [
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.locale.LocaleMiddleware',
|
||||
'corsheaders.middleware.CorsMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
@@ -63,14 +65,16 @@ ROOT_URLCONF = 'sikweb.urls'
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'DIRS': ['templates'],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
'django.template.context_processors.debug',
|
||||
'django.template.context_processors.request',
|
||||
'django.template.context_processors.i18n',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
'django.core.context_processors.static',
|
||||
],
|
||||
},
|
||||
},
|
||||
@@ -138,7 +142,18 @@ LOGPATH = "logs/debug.log"
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/1.9/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
LANGUAGES = (
|
||||
('en', _('English')),
|
||||
('fi', _('Finnish')),
|
||||
)
|
||||
|
||||
LANGUAGE_CODE = 'fi'
|
||||
|
||||
LOCALE_PATHS = (
|
||||
os.path.join(BASE_DIR, 'locale'),
|
||||
)
|
||||
|
||||
print("LOCALE_PATHS: {}".format(LOCALE_PATHS))
|
||||
|
||||
TIME_ZONE = 'Europe/Helsinki'
|
||||
|
||||
@@ -151,8 +166,17 @@ USE_TZ = True
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/1.9/howto/static-files/
|
||||
STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.AppDirectoriesFinder']
|
||||
STATICFILES_FINDERS = (
|
||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
||||
)
|
||||
STATIC_URL = '/static/'
|
||||
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
|
||||
STATICFILES_DIRS = (
|
||||
os.path.join(BASE_DIR, 'global_static'),
|
||||
)
|
||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
||||
MEDIA_URL = '/media/'
|
||||
|
||||
HSL_USERHASH = 'YOUR HSL USERHASH HERE'
|
||||
HSL_DEPARTURE_THRESHOLD = 8
|
||||
|
||||
+74
-44
@@ -17,13 +17,23 @@ Including another URLconf
|
||||
from django.conf.urls import url
|
||||
from django.contrib import admin
|
||||
from django.views.generic.base import RedirectView
|
||||
from django.views.static import serve as static_serve
|
||||
from django.conf.urls import include
|
||||
from django.conf.urls.static import static
|
||||
from django.conf import settings
|
||||
from django.contrib.staticfiles import views as static_views
|
||||
|
||||
# main
|
||||
from webapp.views import main_index
|
||||
from webapp.views import admin_index
|
||||
# login
|
||||
from webapp.views import login_view
|
||||
from webapp.views import logout_view
|
||||
# members
|
||||
from members.views import index as mindex
|
||||
from members.views import member_list
|
||||
from members.views import add_member
|
||||
from members.views import add_many_members
|
||||
from members.views import edit_member
|
||||
from members.views import members as mems
|
||||
from members.views import member as mem
|
||||
from members.views import handle_mem_request
|
||||
@@ -31,6 +41,7 @@ from members.views import csv_import as mem_csv_import
|
||||
from members.views import new_member_request
|
||||
from members.views import member_requests
|
||||
from members.views import export_csv as mem_csv_export
|
||||
from members.views import tommy_blooper
|
||||
#infoscreen
|
||||
from infoscreen.views import index as infoindex
|
||||
from infoscreen.views import default as infodefault
|
||||
@@ -54,51 +65,70 @@ from infoscreen.views import admin as infoscreen_admin
|
||||
from infoscreen.views import hsl_timetable_settings
|
||||
#application
|
||||
from members.views import application_index
|
||||
from members.views import list_applications
|
||||
from members.views import edit_application
|
||||
from members.views import application_success_index
|
||||
|
||||
favicon_view = RedirectView.as_view(url='static/img/favicon.ico', permanent=True)
|
||||
|
||||
urlpatterns = [
|
||||
# main
|
||||
url(r'^$', main_index),
|
||||
# admin
|
||||
url(r'^admin/', admin.site.urls),
|
||||
# login stuff
|
||||
url(r'^login$', login_view),
|
||||
url(r'^logout$', logout_view),
|
||||
# members
|
||||
url(r'^members/$', mindex),
|
||||
url(r'^members/api/members$', mems),
|
||||
url(r'^members/api/member/(?P<idx>\d+)$', mem),
|
||||
url(r'^members/api/member/$', mem),
|
||||
url(r'^members/api/csvimport$', mem_csv_import),
|
||||
url(r'^members/api/requests$', member_requests),
|
||||
url(r'^members/api/request$', new_member_request),
|
||||
url(r'^members/api/request/(?P<idx>\d+)$', handle_mem_request),
|
||||
url(r'^members/api/getCSV$', mem_csv_export),
|
||||
#infoscreen
|
||||
url(r'^infoscreen/$', infodefault),
|
||||
url(r'^infoscreen/(?P<idx>\d+)$', infoindex),
|
||||
url(r'^infoscreen/items$', info_items),
|
||||
url(r'^infoscreen/rotation/(?P<idx>\d+)$', rotation),
|
||||
url(r'^infoscreen/rotations$', rotations),
|
||||
url(r'^infoscreen/instance$', createInfoInstance),
|
||||
url(r'^infoscreen/instance/(?P<idx>\d+)$', deleteInfoInstance),
|
||||
url(r'^infoscreen/types$', info_types),
|
||||
url(r'^infoscreen/delete_item/(?P<type_id>\d+)/(?P<idx>\d+)$', delete_info_item),
|
||||
url(r'^infoscreen/create_external_image$', createExternalImageInfoItem),
|
||||
url(r'^infoscreen/create_image$', create_image_item),
|
||||
url(r'^infoscreen/create_abbitem$', createABBItem),
|
||||
url(r'^infoscreen/create_sossoitem$', createSossoItem),
|
||||
url(r'^infoscreen/create_hslitem$', createHslItem),
|
||||
url(r'^infoscreen/create_coffeeitem$', createCoffeeItem),
|
||||
url(r'^infoscreen/admin$', infoscreen_admin),
|
||||
url(r'^infoscreen/create_rotation$', create_rotation),
|
||||
url(r'^infoscreen/delete_rotation/(?P<id>\d+)$', delete_rotation),
|
||||
url(r'^infoscreen/hsl_data$', CurrentHSLView),
|
||||
url(r'^infoscreen/hsl_data/settings$', hsl_timetable_settings),
|
||||
#application
|
||||
url(r'^application/$', application_index),
|
||||
url(r'^application/success$', application_success_index),
|
||||
url(r'^favicon\.ico$', favicon_view),
|
||||
]
|
||||
# main
|
||||
url(r'^$', main_index),
|
||||
url(r'^sikadmin$', admin_index),
|
||||
# admin
|
||||
url(r'^admin/', admin.site.urls),
|
||||
# login stuff
|
||||
url(r'^login$', login_view),
|
||||
url(r'^logout$', logout_view),
|
||||
# members
|
||||
url(r'^members/$', member_list),
|
||||
url(r'^members/list$', member_list),
|
||||
url(r'^members/add$', add_member),
|
||||
url(r'^members/add_many$', add_many_members),
|
||||
url(r'^members/edit/(?P<index>\d+)$', edit_member),
|
||||
url(r'^members/applications$', list_applications),
|
||||
url(r'^members/edit_application/(?P<index>\d+)$', edit_application),
|
||||
url(r'^members/api/members$', mems),
|
||||
url(r'^members/api/member/(?P<idx>\d+)$', mem),
|
||||
url(r'^members/api/member/$', mem),
|
||||
url(r'^members/api/csvimport$', mem_csv_import),
|
||||
url(r'^members/api/requests$', member_requests),
|
||||
url(r'^members/api/request$', new_member_request),
|
||||
url(r'^members/api/request/(?P<idx>\d+)$', handle_mem_request),
|
||||
url(r'^members/api/getCSV$', mem_csv_export),
|
||||
url(r'^members/tommy$', tommy_blooper),
|
||||
#infoscreen
|
||||
url(r'^infoscreen/$', infodefault),
|
||||
url(r'^infoscreen/(?P<idx>\d+)$', infoindex),
|
||||
url(r'^infoscreen/items$', info_items),
|
||||
url(r'^infoscreen/rotation/(?P<idx>\d+)$', rotation),
|
||||
url(r'^infoscreen/rotations$', rotations),
|
||||
url(r'^infoscreen/instance$', createInfoInstance),
|
||||
url(r'^infoscreen/instance/(?P<idx>\d+)$', deleteInfoInstance),
|
||||
url(r'^infoscreen/types$', info_types),
|
||||
url(r'^infoscreen/delete_item/(?P<type_id>\d+)/(?P<idx>\d+)$', delete_info_item),
|
||||
url(r'^infoscreen/create_external_image$', createExternalImageInfoItem),
|
||||
url(r'^infoscreen/create_image$', create_image_item),
|
||||
url(r'^infoscreen/create_abbitem$', createABBItem),
|
||||
url(r'^infoscreen/create_sossoitem$', createSossoItem),
|
||||
url(r'^infoscreen/create_hslitem$', createHslItem),
|
||||
url(r'^infoscreen/create_coffeeitem$', createCoffeeItem),
|
||||
url(r'^infoscreen/admin$', infoscreen_admin),
|
||||
url(r'^infoscreen/create_rotation$', create_rotation),
|
||||
url(r'^infoscreen/delete_rotation/(?P<id>\d+)$', delete_rotation),
|
||||
url(r'^infoscreen/hsl_data$', CurrentHSLView),
|
||||
url(r'^infoscreen/hsl_data/settings$', hsl_timetable_settings),
|
||||
#application
|
||||
url(r'^application/$', application_index),
|
||||
url(r'^application/success$', application_success_index),
|
||||
url(r'^favicon\.ico$', favicon_view),
|
||||
|
||||
# i18n default view for changing the active language
|
||||
url(r'^i18n/', include('django.conf.urls.i18n')),
|
||||
|
||||
# staticfiles default view for static files in development
|
||||
url(r'^static/(?P<path>.*)$', static_views.serve),
|
||||
url(r'^media/(?P<path>.*)$', static_serve, {'document_root': settings.MEDIA_ROOT}),
|
||||
|
||||
|
||||
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load staticfiles %}
|
||||
<link rel="stylesheet" href="{% static "css/footer.css" %}">
|
||||
<div class="footer">
|
||||
<form action="/i18n/setlang/" method="post"> {% csrf_token %}
|
||||
<button id="fi-button" class="lang-button" name="language" value="fi"></button>
|
||||
<button id="en-button" class="lang-button" name="language" value="en"></button>
|
||||
</form>
|
||||
<div>
|
||||
{% trans "Copyright Aalto-yliopiston Sähköinsinöörikilta ry" %} {% now 'Y' %}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,13 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h1>{% trans "SIK Admin" %}</h1>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam consectetur vitae arcu at bibendum. Nam vel vulputate massa, sit amet volutpat tellus. Fusce varius lectus iaculis nunc laoreet, ac ultricies nulla luctus. Nam fringilla ipsum vel tincidunt viverra. Fusce vestibulum, metus et tincidunt commodo, leo mauris vulputate magna, ut euismod magna nisi eu sem. Integer venenatis, enim in feugiat tempus, erat urna ornare turpis, in varius eros ligula vitae libero. Aliquam erat volutpat. Curabitur ac interdum quam. Duis ornare, eros ac laoreet finibus, libero arcu molestie tellus, id finibus velit lacus nec nibh. Morbi vehicula dolor vel imperdiet pharetra. Maecenas purus lorem, vulputate eget lacus ut, pharetra eleifend sem. Sed aliquam eleifend posuere. Maecenas ac scelerisque odio. Nunc facilisis cursus ornare. Sed neque turpis, sodales id rhoncus eget, vestibulum id urna. Nam ornare urna quis felis porta, vel mollis leo laoreet.
|
||||
</p>
|
||||
<p>
|
||||
Proin sed odio a nisi aliquet blandit quis at dolor. Sed tincidunt neque vel ex pulvinar, auctor elementum magna euismod. Pellentesque vel porta justo, quis pulvinar diam. Pellentesque consectetur convallis tellus faucibus lobortis. Mauris ornare erat ac varius condimentum. Sed neque augue, semper quis iaculis a, tincidunt sed diam. Donec volutpat non justo quis mollis. Maecenas nisi enim, mollis sed hendrerit nec, mattis eu diam. Nunc a faucibus neque, scelerisque fermentum ligula. Pellentesque tempus pharetra tempor. Quisque tincidunt orci vel ullamcorper venenatis. Phasellus blandit et purus molestie facilisis. Maecenas auctor accumsan pellentesque. Ut vel mi sem. Etiam porttitor metus vitae nulla pulvinar, nec efficitur metus tincidunt.
|
||||
</p>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,12 @@
|
||||
{% load i18n %}
|
||||
|
||||
<nav class="navbar navbar-default sidebar" role="navigation">
|
||||
<div class="container-fluid">
|
||||
|
||||
<div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="/sikadmin">SIK Admin</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -0,0 +1,45 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load staticfiles %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="webApp">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="uli uli">
|
||||
<meta name="author" content="veedeeämkoo">
|
||||
<link rel="stylesheet" href="{% static "css/webapp.css" %}">
|
||||
|
||||
<title>Aalto-yliopiston Sähköinsinöörikilta ry</title>
|
||||
|
||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" rel = "stylesheet">
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.js"></script>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.js"></script>
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
|
||||
|
||||
<!-- DatePicker -->
|
||||
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.css">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-messages.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-animate.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-aria.min.js"></script>
|
||||
|
||||
<script src="{% static "js/controllers.js" %}"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="page-content">
|
||||
{% include "navigation.html" %}
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% include "footer.html" %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,73 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="webApp">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="uli uli">
|
||||
<meta name="author" content="veedeeämkoo">
|
||||
|
||||
<title>Aalto-yliopiston Sähköinsinöörikilta ry</title>
|
||||
|
||||
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" rel = "stylesheet">
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.js"></script>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.6/angular.js"></script>
|
||||
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
|
||||
|
||||
<!-- DatePicker -->
|
||||
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.css">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-messages.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-animate.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-aria.min.js"></script>
|
||||
|
||||
{%load staticfiles %}
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
<nav class="navbar navbar-default sidebar" role="navigation">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-sidebar-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="active"><a href="/">SIK<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-home"></span></a></li>
|
||||
<li><a href="/kilta">Kilta</a></li>
|
||||
<li><a href="/fuksit">Fuksit</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Yritykset <span class="caret"></span><span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-user"></span></a>
|
||||
<ul class="dropdown-menu forAnimate" role="menu">
|
||||
<li><a href="#">Työpaikat</a></li>
|
||||
<li><a href="#">Yritysdadaa</a></li>
|
||||
<li><a href="#">Lisää yritysdadaa</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="#">Separated link</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="#">Informes</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li ><a href="/kalenteri">Tapahtumakalenteri<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-th-list"></span></a></li>
|
||||
<li ><a href="/international">International<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-tags"></span></a></li>
|
||||
<li ><a href="/sosso">Sosso</a></li>
|
||||
<li ><a href="/contact">Yhteystiedot<span class="pull-right hidden-xs showopacity glyphicon glyphicon-book"></span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block content %}
|
||||
<h3>HURDURR DUMMY SITE</h3>
|
||||
<div>
|
||||
<a href="/members">Members</a>
|
||||
<a href="/infoscreen">Infoscreen</a>
|
||||
<a href="/admin">Admin</a>
|
||||
<a href="/members">{% trans "Members" %}</a>
|
||||
<a href="/infoscreen">{% trans "Infoscreen" %}</a>
|
||||
<a href="/admin">{% trans "Admin tools" %}</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
{% load i18n %}
|
||||
<nav class="navbar navbar-default sidebar" role="navigation">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-sidebar-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="active"><a href="/">SIK<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-home"></span></a></li>
|
||||
<li><a href="/kilta">Kilta</a></li>
|
||||
<li><a href="/fuksit">Fuksit</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Yritykset<span class="caret"></span><span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-user"></span></a>
|
||||
<ul class="dropdown-menu forAnimate" role="menu">
|
||||
<li><a href="#">Työpaikat</a></li>
|
||||
<li><a href="#">Yritysdadaa</a></li>
|
||||
<li><a href="#">Lisää yritysdadaa</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="#">Separated link</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="#">Informes</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li ><a href="/kalenteri">{% trans "Event calendar" %}<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-th-list"></span></a></li>
|
||||
<li ><a href="/international">{% trans "International" %}<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-tags"></span></a></li>
|
||||
<li ><a href="/sosso">{% trans "Sössö" %}</a></li>
|
||||
<li ><a href="/contact">{% trans "Contact" %}<span class="pull-right hidden-xs showopacity glyphicon glyphicon-book"></span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
+9
-1
@@ -1,6 +1,8 @@
|
||||
from django.shortcuts import render, redirect
|
||||
from django.contrib.auth import login, logout, authenticate
|
||||
from django.views.decorators.http import require_http_methods
|
||||
from django.views.decorators.csrf import ensure_csrf_cookie
|
||||
from django.contrib.auth.decorators import permission_required
|
||||
from django.conf import settings
|
||||
import logging
|
||||
|
||||
@@ -10,7 +12,13 @@ logging.basicConfig(format='[%(levelname)s]%(asctime)s %(message)s', level=setti
|
||||
|
||||
@require_http_methods(["GET"])
|
||||
def main_index(request, *args, **kwargs):
|
||||
return render(request, "main_index.html", {})
|
||||
return render(request, "main_index.html", {})
|
||||
|
||||
@require_http_methods(["GET", "POST"])
|
||||
@ensure_csrf_cookie
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def admin_index(request, *args, **kwargs):
|
||||
return render(request, "admin_index.html", {})
|
||||
|
||||
@require_http_methods(["GET", "POST"])
|
||||
def login_view(request, *args, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user