Move templates in members app to templates dir

This is kind of a huge, monolithic commit. Templates were being served
as static files, so Django template tags could not be used for, e.g.
internationalization. Now all html files are served as Django templates.
This commit is contained in:
Jan Tuomi
2017-02-05 16:39:49 +02:00
parent e5e284b80d
commit 990d6b853f
24 changed files with 572 additions and 436 deletions
+3
View File
@@ -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)
-31
View File
@@ -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>
-66
View File
@@ -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>
-31
View File
@@ -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>
-24
View File
@@ -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>
-32
View File
@@ -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>
+7 -2
View File
@@ -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('$}');
});
+11 -11
View File
@@ -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 = '';
-37
View File
@@ -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':"/"
})
}]);
+28
View File
@@ -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 %}
+39
View File
@@ -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 %}
+43
View File
@@ -0,0 +1,43 @@
{% load staticfiles %}
{% load i18n %}
<!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">
<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"></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>
{% block content %}
{% endblock content %}
</body>
</html>
+65 -86
View File
@@ -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">
<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 %}
+6 -15
View File
@@ -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 %}
+41
View File
@@ -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 %}
+41
View File
@@ -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 %}
+40
View File
@@ -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 %}
+73
View File
@@ -0,0 +1,73 @@
{% extends "members_base.html" %}
{% load static %}
{% 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>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">
<div class="form-group filters">
<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="/members/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="/members/tommy">Tommy</a>
</div>
</div>
</div>
</div>
{% endblock content %}
+77
View File
@@ -0,0 +1,77 @@
{% 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>Jäsenrekisteri</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>
<!-- 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/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">Listaa jäsenet</a></li>
<li><a href="/members/add">Lisää jäsen</a></li>
<li><a href="/members/add_many">Lisää jäseniä</a></li>
<li><a href="/members/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>
{% block content %}
{% endblock content %}
</div>
</body>
</html>
+28 -63
View File
@@ -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 %}
+8
View File
@@ -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
View File
@@ -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