Merge branch 'develop' into feature-payment
This commit is contained in:
@@ -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)),
|
||||
),
|
||||
]
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user