From 08b4c1704409d6c5fb36897d3a5a4b3c9b6dcb5b Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Wed, 8 Mar 2017 17:23:41 +0200 Subject: [PATCH 01/24] Revert "[Members] Made frontend to use mainly rest api" This reverts commit 75418da40303a7cfe3139d353cb91836f1a80877. --- members/serializers.py | 9 ++-- members/static/js/members_controllers.js | 53 ++++++++++-------------- members/templates/edit_application.html | 4 +- members/views.py | 2 +- sikweb/urls.py | 2 - 5 files changed, 29 insertions(+), 41 deletions(-) diff --git a/members/serializers.py b/members/serializers.py index de62040..bcf8793 100644 --- a/members/serializers.py +++ b/members/serializers.py @@ -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 diff --git a/members/static/js/members_controllers.js b/members/static/js/members_controllers.js index f13355c..30825e1 100644 --- a/members/static/js/members_controllers.js +++ b/members/static/js/members_controllers.js @@ -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); @@ -222,7 +213,7 @@ app.controller("getController", function($scope, $document, $http){ app.controller("postController", function($scope, $http, $location) { $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!"); }); } @@ -231,12 +222,12 @@ app.controller("postController", function($scope, $http, $location) { /* 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"; + }); }); }; diff --git a/members/templates/edit_application.html b/members/templates/edit_application.html index 308948b..14a5dda 100644 --- a/members/templates/edit_application.html +++ b/members/templates/edit_application.html @@ -33,8 +33,8 @@ - - + + diff --git a/members/views.py b/members/views.py index f710860..5d442e9 100644 --- a/members/views.py +++ b/members/views.py @@ -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() diff --git a/sikweb/urls.py b/sikweb/urls.py index 7672381..b279174 100644 --- a/sikweb/urls.py +++ b/sikweb/urls.py @@ -102,8 +102,6 @@ urlpatterns = [ url(r'^members/api/request/(?P\d+)$', handle_mem_request), url(r'^members/api/getCSV$', mem_csv_export), url(r'^members/tommy$', tommy_blooper), - - # Members API url(r'^members/rest/api/members/$', memsListAPI.as_view()), url(r'^members/rest/api/members/(?P\d+)/$', memDetailAPI.as_view()), url(r'^members/rest/api/requests/$', reqListAPI.as_view()), From e3147c3ef93e4780edd690481d7b8619966a6443 Mon Sep 17 00:00:00 2001 From: okalintu Date: Wed, 8 Mar 2017 17:40:50 +0200 Subject: [PATCH 02/24] Fix broken redirect in member addition --- members/static/js/members_controllers.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/members/static/js/members_controllers.js b/members/static/js/members_controllers.js index 30825e1..5fadf64 100644 --- a/members/static/js/members_controllers.js +++ b/members/static/js/members_controllers.js @@ -210,12 +210,14 @@ 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/api/member/", $scope.member).then(function(response){ notySuccess("Jäsen lisätty!"); + $window.location = "/members/list"; }); + } }); From 2356f44a3d3557f0c4d8adcb232a641e1beb764f Mon Sep 17 00:00:00 2001 From: okalintu Date: Mon, 27 Mar 2017 12:32:59 +0300 Subject: [PATCH 03/24] HOTFIX: change url ka.dy.fi to https --- infoscreen/static/html/coffee.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infoscreen/static/html/coffee.html b/infoscreen/static/html/coffee.html index 8119306..0d00663 100644 --- a/infoscreen/static/html/coffee.html +++ b/infoscreen/static/html/coffee.html @@ -1,4 +1,4 @@ - \ No newline at end of file + From d8f96faf6ec7215d3b3f715a8fa7418424c4f946 Mon Sep 17 00:00:00 2001 From: okalintu Date: Mon, 27 Mar 2017 16:39:19 +0300 Subject: [PATCH 04/24] HOTFIX: fix ka.dy.fi url again --- infoscreen/static/html/coffee.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infoscreen/static/html/coffee.html b/infoscreen/static/html/coffee.html index 0d00663..6568676 100644 --- a/infoscreen/static/html/coffee.html +++ b/infoscreen/static/html/coffee.html @@ -1,4 +1,4 @@ - From bd5cf096ff6e1ec33894f8414d69c4c3ac66c02b Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Tue, 28 Mar 2017 13:05:00 +0300 Subject: [PATCH 05/24] Change http to https when using Angular CDN --- members/templates/application_base.html | 2 +- members/templates/members_base.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/members/templates/application_base.html b/members/templates/application_base.html index 2f00c86..bed2a37 100644 --- a/members/templates/application_base.html +++ b/members/templates/application_base.html @@ -15,7 +15,7 @@ - + diff --git a/members/templates/members_base.html b/members/templates/members_base.html index 09a7613..8bfa0dc 100644 --- a/members/templates/members_base.html +++ b/members/templates/members_base.html @@ -20,7 +20,7 @@ - + From dd01b44445f6e552bbbf09f1039cfce4c7bf10fa Mon Sep 17 00:00:00 2001 From: henu Date: Wed, 29 Mar 2017 06:47:02 +0300 Subject: [PATCH 06/24] Add submitted to request serializer --- members/serializers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/members/serializers.py b/members/serializers.py index de62040..d4602e4 100644 --- a/members/serializers.py +++ b/members/serializers.py @@ -40,6 +40,7 @@ class MemberSerializer(serializers.Serializer): class MemberRequestSerializer(serializers.ModelSerializer): id = serializers.IntegerField(read_only=True) + submitted = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S") member = MemberSerializer() class Meta: From 9b834032db0094cad24d00939b57b73f3b0a9a49 Mon Sep 17 00:00:00 2001 From: okalintu Date: Wed, 29 Mar 2017 13:51:10 +0300 Subject: [PATCH 07/24] Add sqlite3 files to .gitignore Enable use of sqlite as dev db without it polluting the git repo --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index aebd4f5..e9ddf72 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ sikweb/settings.py *~ *.pyc +*.sqlite3 uwsgi.ini uwsgi.log infoscreen/static/js/hsl.json From 0e8cad75899dd218d133c582c8716a9882d29e56 Mon Sep 17 00:00:00 2001 From: okalintu Date: Mon, 27 Mar 2017 12:29:36 +0300 Subject: [PATCH 08/24] Add barebone skeleton for infoscreens event view --- infoscreen/models.py | 11 +++++++++++ infoscreen/static/html/events.html | 17 +++++++++++++++++ infoscreen/static/html/events_create.html | 10 ++++++++++ infoscreen/static/js/infoadmin_controllers.js | 7 +++++++ infoscreen/static/js/infoscreen_controllers.js | 9 ++++++++- infoscreen/views.py | 2 ++ sikweb/urls.py | 2 ++ 7 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 infoscreen/static/html/events.html create mode 100644 infoscreen/static/html/events_create.html diff --git a/infoscreen/models.py b/infoscreen/models.py index 8927c6d..95a6c7e 100644 --- a/infoscreen/models.py +++ b/infoscreen/models.py @@ -136,6 +136,17 @@ class SossoInfoItem(InfoItem): def get_create_template_url(): return "/static/html/sosso_create.html" +class EventInfoItem(InfoItem): + display_name = _("Events") + + def get_template_url(self): + return "/static/html/events.html" + + @staticmethod + def get_create_template_url(): + return "/static/html/events_create.html" + + class ImageInfoItem(InfoItem): display_name = _("Image") diff --git a/infoscreen/static/html/events.html b/infoscreen/static/html/events.html new file mode 100644 index 0000000..876f2cb --- /dev/null +++ b/infoscreen/static/html/events.html @@ -0,0 +1,17 @@ + +
+ +
+
+
+

+
+ {{ event.name }}, {{event.event_start}} +
+

+
+
+
+
diff --git a/infoscreen/static/html/events_create.html b/infoscreen/static/html/events_create.html new file mode 100644 index 0000000..d534dcb --- /dev/null +++ b/infoscreen/static/html/events_create.html @@ -0,0 +1,10 @@ +
+
+ Create new item to show events Name is used only as identifier +
+
+ + +
+ +
diff --git a/infoscreen/static/js/infoadmin_controllers.js b/infoscreen/static/js/infoadmin_controllers.js index 9a49e0d..c4b11d6 100644 --- a/infoscreen/static/js/infoadmin_controllers.js +++ b/infoscreen/static/js/infoadmin_controllers.js @@ -141,6 +141,13 @@ app.controller('infoadmin_sossoitem_create', function($scope, $http,ItemList){ $http.post("/infoscreen/create_sossoitem", $scope.item).then(ItemList.loadItems) } }); +app.controller('infoadmin_eventitem_create', function($scope, $http,ItemList){ + $scope.item = {} + $scope.send = function(){ + $http.post("/infoscreen/create_eventitem", $scope.item).then(ItemList.loadItems) + } +}); + app.controller('infoadmin_hslitem_create', function($scope, $http,ItemList){ $scope.item = {} $scope.send = function(){ diff --git a/infoscreen/static/js/infoscreen_controllers.js b/infoscreen/static/js/infoscreen_controllers.js index a499fda..8fde48b 100644 --- a/infoscreen/static/js/infoscreen_controllers.js +++ b/infoscreen/static/js/infoscreen_controllers.js @@ -48,7 +48,7 @@ app.filter('trusted_url', ['$sce', function ($sce) { app.controller('ABBController', function($scope, $http){ $scope.jobs = []; var min_date = moment().subtract(30,'days').format("YYYY-MM-DD%20HH:mm:ss"); - var url = "http://sahkoinsinoorikilta.fi/api/news.php"; + var url = "https://sahkoinsinoorikilta.fi/api/news.php"; var params = "?type=11&lang=fi&title_search=ABB&min_date="+min_date $http.get(url+params).then(function(response){ $scope.jobs = _.filter(response.data, function(job){ @@ -73,6 +73,13 @@ app.controller('SossoController', function($scope, $http) { $scope.data = response.data; }) }); +app.controller('EventController', function($scope, $http) { + $scope.data = []; + $http.get("https://sik.ayy.fi/api/events.php?limit=3").then(function(response) + { + $scope.events = response.data; + }) +}); app.controller('timetableCtrl', function($scope, $http, $interval) { diff --git a/infoscreen/views.py b/infoscreen/views.py index 6f0ab36..ed7108b 100644 --- a/infoscreen/views.py +++ b/infoscreen/views.py @@ -7,6 +7,7 @@ from django.contrib.auth.decorators import permission_required from infoscreen.models import Rotation, InfoItem, InfoInstance from infoscreen.models import ABBInfoItem, ExternalImageInfoItem, ImageInfoItem, SossoInfoItem, HslInfoItem +from infoscreen.models import EventInfoItem from infoscreen.models import ExternalWebsiteInfoItem from infoscreen.models import ImageUploadForm from infoscreen.models import HSLDataModel @@ -215,3 +216,4 @@ createSossoItem = create_item_generator(SossoInfoItem) createHslItem = create_item_generator(HslInfoItem) createExternalImageInfoItem = create_item_generator(ExternalImageInfoItem) createExternalWebsiteItem = create_item_generator(ExternalWebsiteInfoItem) +createEventItem = create_item_generator(EventInfoItem) diff --git a/sikweb/urls.py b/sikweb/urls.py index b8a544a..5af072d 100644 --- a/sikweb/urls.py +++ b/sikweb/urls.py @@ -62,6 +62,7 @@ from infoscreen.views import create_image_item from infoscreen.views import createABBItem from infoscreen.views import createSossoItem from infoscreen.views import createHslItem +from infoscreen.views import createEventItem from infoscreen.views import createExternalWebsiteItem from infoscreen.views import create_rotation from infoscreen.views import delete_rotation @@ -123,6 +124,7 @@ urlpatterns = [ url(r'^infoscreen/create_image$', create_image_item), url(r'^infoscreen/create_abbitem$', createABBItem), url(r'^infoscreen/create_sossoitem$', createSossoItem), + url(r'^infoscreen/create_eventitem$', createEventItem), url(r'^infoscreen/create_hslitem$', createHslItem), url(r'^infoscreen/create_websiteitem$', createExternalWebsiteItem), url(r'^infoscreen/admin$', infoscreen_admin), From 11a24089cf3be2d65aa69c563919c69db9df80b5 Mon Sep 17 00:00:00 2001 From: okalintu Date: Wed, 29 Mar 2017 15:04:33 +0300 Subject: [PATCH 09/24] Add "sane" styles for event screen --- infoscreen/static/css/events.css | 42 +++++++++++++++++++ infoscreen/static/html/events.html | 27 ++++++------ .../static/js/infoscreen_controllers.js | 15 ++++++- 3 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 infoscreen/static/css/events.css diff --git a/infoscreen/static/css/events.css b/infoscreen/static/css/events.css new file mode 100644 index 0000000..6dc51c7 --- /dev/null +++ b/infoscreen/static/css/events.css @@ -0,0 +1,42 @@ +.event { + font-size: 5vh; + font-family: 'Droid Sans Mono', monospace; +} +.event-col{ + padding-top:1vh; + padding-bottom:1vh; +}.event:nth-child(odd){ + background-color: #d4e2fd; +} + +.black { + color: black; +} +.header-row{ + background: #d4e2fd; + font-size: 7vh; + font-family: 'Droid Sans Mono', monospace; + padding-bottom:20px; +} + +.container { + width: 100vw; + padding: 0 0 0 0; + margin-left: 20px; + margin-right: 20px; +} + +.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; +} diff --git a/infoscreen/static/html/events.html b/infoscreen/static/html/events.html index 876f2cb..30f39c6 100644 --- a/infoscreen/static/html/events.html +++ b/infoscreen/static/html/events.html @@ -1,17 +1,14 @@ - -
-