Merge branch 'develop' into feature-payment

This commit is contained in:
henu
2017-03-29 19:15:48 +03:00
37 changed files with 646 additions and 146 deletions
+40
View File
@@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2017-01-25 16:59
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Member',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=127)),
('last_name', models.CharField(max_length=127)),
('email', models.EmailField(max_length=254)),
('POR', models.CharField(max_length=255)),
('AYY', models.BooleanField(default=False)),
('jas', models.BooleanField(default=False)),
('created', models.DateTimeField(default=django.utils.timezone.now)),
('paid', models.DateTimeField(default=datetime.datetime(1970, 1, 1, 0, 0))),
],
),
migrations.CreateModel(
name='MemberRequest',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='members.Member')),
],
),
]
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2017-03-29 15:57
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='member',
name='paid',
field=models.DateTimeField(default=datetime.datetime(1970, 1, 1, 2, 0)),
),
]
View File
+4 -5
View File
@@ -4,8 +4,7 @@ from datetime import datetime
from members.models import Member, MemberRequest
from django.conf import settings
#, default=timezone.now
# , default=datetime.fromtimestamp(0)
class MemberSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
first_name = serializers.CharField(required=True, max_length=127)
@@ -14,8 +13,8 @@ class MemberSerializer(serializers.Serializer):
POR = serializers.CharField(max_length=255)
AYY = serializers.BooleanField(default=False)
jas = serializers.BooleanField(default=False)
created = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
paid = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
created = serializers.DateTimeField(default=timezone.now)
paid = serializers.DateTimeField(default=datetime.fromtimestamp(0))
def create(self, validated_data):
'''
@@ -33,7 +32,7 @@ class MemberSerializer(serializers.Serializer):
instance.POR = validated_data.get('POR', instance.POR)
instance.AYY = validated_data.get('AYY', instance.AYY)
instance.jas = validated_data.get('jas', instance.jas)
# instance.created = validated_data.get('created', instance.created)
instance.created = validated_data.get('created', instance.created)
instance.paid = validated_data.get('paid', instance.paid)
instance.save()
return instance
+25 -32
View File
@@ -23,12 +23,12 @@ function memberDataEditor(returnPath) {
return function($scope, $http, $window, $location) {
var id = memberId;
console.log("id: " + id);
$http.get("/members/rest/api/members/" + id).then(function(response) {
$http.get("/members/api/member/" + id).then(function(response) {
$scope.member = response.data;
});
$scope.send = function() {
$http.put("/members/rest/api/members/" + id + "/", $scope.member).then(function(response){
$http.put("/members/api/member/" + id, $scope.member).then(function(response){
notySuccess("Jäsentiedot tallennettu");
$window.location = returnPath;
});
@@ -69,26 +69,26 @@ app.controller("getController", function($scope, $document, $http){
/* Fetch all members from the database and show all members in the table */
$scope.updateMembers = function() {
$http.get("/members/rest/api/members").then(function(response){
$http.get("/members/api/members").then(function(response){
$scope.members = response.data;
// map trues and falses to more user-friendly format
// _.each($scope.members, function(m){
// m.jas = m.jas ? "Kyllä" : "Ei";
// m.AYY = m.AYY ? "Kyllä" : "Ei";
// });
_.each($scope.members, function(m){
m.jas = m.jas ? "Kyllä" : "Ei";
m.AYY = m.AYY ? "Kyllä" : "Ei";
});
$scope.shown_members = $scope.members;
});
};
/* Fetch a single member from the database by id and update its row */
$scope.updateMember = function(id) {
$http.get("/members/rest/api/members/" + id).then(function(response) {
$http.get("/members/api/member/" + id).then(function(response) {
for (var i = 0; i < $scope.shown_members.length; i++) {
var member = $scope.shown_members[i];
if (String(member.id) == String(id)) {
member = response.data;
// member.jas = member.jas ? "Kyllä" : "Ei";
// member.AYY = member.AYY ? "Kyllä" : "Ei";
member.jas = member.jas ? "Kyllä" : "Ei";
member.AYY = member.AYY ? "Kyllä" : "Ei";
$scope.shown_members[i] = member;
}
@@ -99,21 +99,12 @@ app.controller("getController", function($scope, $document, $http){
/* Update the payment date of a single member to the current time and send
* the member to the database */
$scope.updatePayment= function(id){
$scope.member = {};
//Find member whose payment needs to be updated
$scope.member = $scope.members.find(function(element){
return element.id == id;
$http.put("/members/api/member/"+id, { paid: moment().format("YYYY-MM-DD kk:mm:ss") }).then(function(response) {
$scope.updateMember(id);
notySuccess("Maksupäivämäärä päivitetty.");
});
//Update the member data if member was found
if($scope.member != undefined){
$scope.member.paid = moment().format("YYYY-MM-DD kk:mm:ss");
$http.put("/members/rest/api/members/"+id +"/", $scope.member).then(function(response) {
$scope.updateMember(id);
notySuccess("Maksupäivämäärä päivitetty.");
});
}
};
/* Redirect the browser to the CSV dump download endpoint */
$scope.loadCSV = function() {
window.location = "/members/api/getCSV";
@@ -121,7 +112,7 @@ app.controller("getController", function($scope, $document, $http){
/* Delete a single member by id */
$scope.deleteMember = function(id) {
$http.delete("/members/rest/api/members/" + id).then(
$http.delete("/members/api/member/" + id).then(
function(response) {
notySuccess("Poistaminen onnistui")
$scope.updateMembers();
@@ -169,7 +160,7 @@ app.controller("getController", function($scope, $document, $http){
if (name.length == 0) continue;
if (member.first_name.toLowerCase().includes(name)
|| member.last_name.toLowerCase().includes(name)
|| member.last_name.toLowerCase().includes(name)
|| member.email.toLowerCase().includes(name)) {
result.push(member);
@@ -219,24 +210,26 @@ app.controller("getController", function($scope, $document, $http){
});
/* Controller for adding a member */
app.controller("postController", function($scope, $http, $location) {
app.controller("postController", function($scope, $http, $location, $window) {
$scope.member = {};
$scope.send = function() {
$http.post("/members/rest/api/members/", $scope.member).then(function(response){
$http.post("/members/api/member/", $scope.member).then(function(response){
notySuccess("Jäsen lisätty!");
$window.location = "/members/list";
});
}
});
/* Controller for application page */
app.controller("applController", function($scope, $http){
$scope.applUpdateAll = function() {
$http.get("/members/rest/api/requests").then(function(response){
$http.get("/members/api/requests").then(function(response){
$scope.applications = response.data;
// _.each($scope.applications, function(a){
// a.member.jas = a.member.jas ? "Kyllä" : "Ei";
// a.member.AYY = a.member.AYY ? "Kyllä" : "Ei";
// });
_.each($scope.applications, function(a){
a.member.jas = a.member.jas ? "Kyllä" : "Ei";
a.member.AYY = a.member.AYY ? "Kyllä" : "Ei";
});
});
};
+1 -1
View File
@@ -15,7 +15,7 @@
<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://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 -->
+1 -1
View File
@@ -2,5 +2,5 @@
{% block content %}
<h1>Hienoa! Jäsenhakemuksesi on nyt lähetetty.</h1>
<a href="http://sahkoinsinoorikilta.fi">Takaisin Sähköinsinöörikillan web-sivuille</a>
<a href="https://sahkoinsinoorikilta.fi">Takaisin Sähköinsinöörikillan web-sivuille</a>
{% endblock content %}
+2 -2
View File
@@ -33,8 +33,8 @@
<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 && send()" type="submit" id="sendmember">Tallenna</button>
<button class="btn btn-warning" ng-click="cancel()" type="submit" id="sendmember">Peruuta</button>
<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>
+1 -1
View File
@@ -20,7 +20,7 @@
<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>
<script src="https://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>
+2 -2
View File
@@ -24,7 +24,7 @@ memberlogger = logging.getLogger(__name__)
logging.basicConfig(format='[%(levelname)s]%(asctime)s %(message)s', level=settings.LOGGERLEVEL, filename=settings.LOGPATH)
# REST API views
#API views
########################################
class MembersList(generics.ListCreateAPIView):
queryset = Member.objects.all()
@@ -237,7 +237,7 @@ def new_member_request(request, *args, **kwargs):
message += 'AYY-membership: ' + str(mem.AYY) + '\r\n'
message += 'To mail list: ' + str(mem.jas) + '\r\n'
message += 'Created: ' + mem.created.isoformat(' ') + '\r\n'
message += 'Please go to the http://sika.sahkoinsinoorikilta.fi/members/ and do something about it!\r\n'
message += 'Please go to the https://sika.sahkoinsinoorikilta.fi/members/ and do something about it!\r\n'
# TODO: send mail when application is ready
# send_mail_wrapper(subject, message)