From 6f8ad838f40911e3ea36c27cea8b2a2e2a0d794d Mon Sep 17 00:00:00 2001
From: manuconcepbrito <manu041196@gmail.com>
Date: Sat, 30 Oct 2021 17:51:13 +0200
Subject: [PATCH] API for creating elections

---
 wahlfang_api/views.py                                |  2 +-
 wahlfang_web/src/pages/ManagementApp.js              |  3 +--
 wahlfang_web/src/pages/management/AddSession.js      |  6 ++----
 wahlfang_web/src/pages/management/CreateElection.js  | 11 +++++++----
 wahlfang_web/src/pages/management/ManagerSessions.js |  3 ++-
 wahlfang_web/src/pages/management/SessionDetail.js   |  2 +-
 6 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/wahlfang_api/views.py b/wahlfang_api/views.py
index 7eb09fc..710b3f3 100644
--- a/wahlfang_api/views.py
+++ b/wahlfang_api/views.py
@@ -94,7 +94,7 @@ class ManagerElectionView(generics.ListCreateAPIView, generics.DestroyAPIView):
         return election
 
     def perform_create(self, serializer):
-        serializer.save(manager=self.request.user)
+        serializer.save()
 
     def get_queryset(self):
         manager_sesions = self.request.user.sessions.all()
diff --git a/wahlfang_web/src/pages/ManagementApp.js b/wahlfang_web/src/pages/ManagementApp.js
index d5e3123..a0dc748 100644
--- a/wahlfang_web/src/pages/ManagementApp.js
+++ b/wahlfang_web/src/pages/ManagementApp.js
@@ -24,7 +24,6 @@ export default function ManagementApp() {
     useEffect(() => {
         const authToken = loadManagerToken();
         if (authToken && authToken.access && isTokenValid(authToken.access)) {
-            console.log(authToken.access)
             setAuthenticated(true);
             setLoading(false);
             managementWS.initWs();
@@ -71,7 +70,7 @@ export default function ManagementApp() {
                         <Route exact path={`${path}/sessions/:id`}>
                             <SessionDetail/>
                         </Route>
-                        <Route exact path={`${path}/election`}>
+                        <Route exact path={`${path}/sessions/:id/election`}>
                             <CreateElection/>
                         </Route>
                         <ManagerAuthenticatedRoute>
diff --git a/wahlfang_web/src/pages/management/AddSession.js b/wahlfang_web/src/pages/management/AddSession.js
index 4f2b709..5bf6436 100644
--- a/wahlfang_web/src/pages/management/AddSession.js
+++ b/wahlfang_web/src/pages/management/AddSession.js
@@ -17,9 +17,7 @@ import {sessionList} from "../../state/management";
 export default function AddSession() {
     const [toggle, setToggle] = useState(false);
     const [date, onDateChange] = useState(new Date());
-   const [sessions, setSessions] = useRecoilState(sessionList);
-
-
+    const [sessions, setSessions] = useRecoilState(sessionList);
     const history = useHistory();
 
 
@@ -128,7 +126,7 @@ export default function AddSession() {
         </Formik>
       </div>
     );
-
+    // TODO: Change advanced options to accordion
     const SendTestEmailForm = () => (
          <div>
         <Formik
diff --git a/wahlfang_web/src/pages/management/CreateElection.js b/wahlfang_web/src/pages/management/CreateElection.js
index c81fa3e..79494f7 100644
--- a/wahlfang_web/src/pages/management/CreateElection.js
+++ b/wahlfang_web/src/pages/management/CreateElection.js
@@ -5,7 +5,7 @@ import Collapse from 'react-bootstrap/Collapse';
 import Button from 'react-bootstrap/Button';
 import * as yup from 'yup';
 import {createElection} from "../../api/management";
-import {Redirect, useHistory} from "react-router-dom";
+import {Redirect, useHistory, useParams} from "react-router-dom";
 import moment from "moment";
 import TextField from '@mui/material/TextField';
 import BasicDatePicker from "../../components/BasicDatePicker"
@@ -18,13 +18,16 @@ export default function CreateSession() {
     const [toggle, setToggle] = useState(false);
     const [date, onDateChange] = useState(new Date());
     const [elections, setElections] = useRecoilState(electionsListManager);
+    // get session id from url
+    const {id} = useParams();
 
 
-    const handleSubmitAddSessionForm = (values, {setSubmitting}) => {
+    const handleSubmitAddElectionForm = (values, {setSubmitting}) => {
         let moment_date = new moment(values.start_date);
         // keepOffset must be true, bug info here https://github.com/moment/moment/issues/947
         values.start_date = moment_date.toISOString(true)
         values.end_date = moment_date.toISOString(true)
+        values.session = id
         createElection(values)
             .then(res => {
                 setSubmitting(false)
@@ -50,7 +53,7 @@ export default function CreateSession() {
         <Formik
           initialValues={{ title: '', start_date: '', end_date: '', maximum_votes: 0}}
           validationSchema={validationSchema}
-          onSubmit={handleSubmitAddSessionForm}
+          onSubmit={handleSubmitAddElectionForm}
         >
             {({
                   values,
@@ -88,7 +91,7 @@ export default function CreateSession() {
                     <div className="mt-3 form-group">
                         <TextField
                         style ={{width: '100%'}}
-                        id="maximumVotes"
+                        id="maximum_votes"
                         type="number"
                         label="Maximum number of votes"
                         variant="standard"
diff --git a/wahlfang_web/src/pages/management/ManagerSessions.js b/wahlfang_web/src/pages/management/ManagerSessions.js
index 6d780ea..4bfdf5b 100644
--- a/wahlfang_web/src/pages/management/ManagerSessions.js
+++ b/wahlfang_web/src/pages/management/ManagerSessions.js
@@ -10,7 +10,7 @@ import ListItemText from '@mui/material/ListItemText';
 import Divider from '@mui/material/Divider';
 import DeleteIcon from '@mui/icons-material/Delete';
 import { Typography } from '@mui/material';
-import { useHistory } from "react-router-dom";
+import {useHistory} from "react-router-dom";
 import moment from "moment";
 import {deleteSession} from "../../api/management"
 import Dialog from '@mui/material/Dialog';
@@ -27,6 +27,7 @@ export default function ManagerSessions() {
     const [sessions, setSessions] = useRecoilState(sessionList);
     const history = useHistory();
 
+
       const handleClickOpen = (e, index) => {
         e.stopPropagation();
         setOpen(true);
diff --git a/wahlfang_web/src/pages/management/SessionDetail.js b/wahlfang_web/src/pages/management/SessionDetail.js
index 5944465..8dd8bd3 100644
--- a/wahlfang_web/src/pages/management/SessionDetail.js
+++ b/wahlfang_web/src/pages/management/SessionDetail.js
@@ -53,7 +53,7 @@ export default function SessionDetail() {
         return displayDate
     }
     const handleToCreateElection = () => {
-        history.push('/management/election')
+        history.push(`/management/sessions/${id}/election`)
     }
      const handleClickOpen = (e, index) => {
         e.stopPropagation();
-- 
GitLab