Browse Source

modal candi info in home

amenpunk 2 years ago
parent
commit
83f4e1e767

+ 16 - 16
src/Components/Home/Candidato.jsx

11
   Error as ErrorIcon,
11
   Error as ErrorIcon,
12
   AssignmentTurnedIn as AssignmentTurnedInIcon
12
   AssignmentTurnedIn as AssignmentTurnedInIcon
13
 } from '@mui/icons-material'
13
 } from '@mui/icons-material'
14
-import { useNavigate } from 'react-router-dom'
14
+// import { useNavigate } from 'react-router-dom'
15
 
15
 
16
 import { Col, Row } from 'react-bootstrap'
16
 import { Col, Row } from 'react-bootstrap'
17
 const big_as = 70
17
 const big_as = 70
18
 
18
 
19
-function IconStatus(props){
19
+function IconStatus(props) {
20
-  return(
20
+  return (
21
     <Tooltip title={props.message}>
21
     <Tooltip title={props.message}>
22
       <IconButton
22
       <IconButton
23
         style={{ color: '#0bd641' }}
23
         style={{ color: '#0bd641' }}
24
         components="label">
24
         components="label">
25
-        {<props.icon/>}
25
+        {<props.icon />}
26
       </IconButton>
26
       </IconButton>
27
     </Tooltip>
27
     </Tooltip>
28
 
28
 
29
   )
29
   )
30
 }
30
 }
31
 
31
 
32
-function getOperation(estado){
32
+function getOperation(estado) {
33
   // Patrik: 100 -> Significa que el examen esta completo
33
   // Patrik: 100 -> Significa que el examen esta completo
34
   // Patrik: 99 -> Que el candidato lo esta haciendo (como "doing test" del otro servicio)
34
   // Patrik: 99 -> Que el candidato lo esta haciendo (como "doing test" del otro servicio)
35
   // Patrik: 97 ->  Que hay un error y que hay mas respuestas de las que deberian
35
   // Patrik: 97 ->  Que hay un error y que hay mas respuestas de las que deberian
36
   // Patrik: 1 -> Solo esta asignado.
36
   // Patrik: 1 -> Solo esta asignado.
37
-  switch(estado){
37
+  switch (estado) {
38
     case 1: // solo asignado
38
     case 1: // solo asignado
39
-      return <IconStatus icon={AddTaskIcon} message="Candidato Asignado"/>
39
+      return <IconStatus icon={AddTaskIcon} message="Candidato Asignado" />
40
     case 97: //error en las respuestas
40
     case 97: //error en las respuestas
41
-      return <IconStatus icon={ErrorIcon} message="Hay error en las respuestas"/>
41
+      return <IconStatus icon={ErrorIcon} message="Hay error en las respuestas" />
42
     case 99: // el candidato se encuentra realizndolo
42
     case 99: // el candidato se encuentra realizndolo
43
-      return <IconStatus icon={AssignmentTurnedInIcon} message="El candidato se encuentra realizando la prueba"/>
43
+      return <IconStatus icon={AssignmentTurnedInIcon} message="El candidato se encuentra realizando la prueba" />
44
     case 100: // finalizado
44
     case 100: // finalizado
45
-      return <IconStatus icon={CheckBoxIcon} message="Calificar el examen"/>
45
+      return <IconStatus icon={CheckBoxIcon} message="Calificar el examen" />
46
     default: return null
46
     default: return null
47
   }
47
   }
48
 }
48
 }
49
 
49
 
50
 function Asignaciones(props) {
50
 function Asignaciones(props) {
51
 
51
 
52
-  let navigate = useNavigate()
52
+  // let navigate = useNavigate()
53
-  console.log(props)
53
+  let { estado, cattest, calificacionescleaver: test_result, id: SuperPWD } = props.asign;
54
-  let { estado,cattest, calificacionescleaver: test_result, id: SuperPWD } = props.asign;
54
+  console.log(props,test_result,SuperPWD)
55
 
55
 
56
   return (
56
   return (
57
     <tr>
57
     <tr>
70
                 </IconButton>
70
                 </IconButton>
71
               </Tooltip>
71
               </Tooltip>
72
             ) : null
72
             ) : null
73
-        */}
73
+      */}
74
         {
74
         {
75
           getOperation(estado)
75
           getOperation(estado)
76
         }
76
         }
123
   return (
123
   return (
124
     <div className="data_candidato">
124
     <div className="data_candidato">
125
       <Row>
125
       <Row>
126
-        <Col md="3" sm="12" style={{ padding: 10, borderRight: '1px solid #f1f1f1' }}>
126
+        <Col onClick={props.onClick}  md="3" sm="12" style={{ padding: 10, borderRight: '1px solid #f1f1f1' }}>
127
           <p><b>{password?.toUpperCase()}</b></p>
127
           <p><b>{password?.toUpperCase()}</b></p>
128
         </Col>
128
         </Col>
129
         <Col md="9">
129
         <Col md="9">
134
                   candidatos.length > 0 ?
134
                   candidatos.length > 0 ?
135
                     candidatos.map(u => <TableUser key={u.candi.id} user={u} />)
135
                     candidatos.map(u => <TableUser key={u.candi.id} user={u} />)
136
                     : <SinAsignRealizadas />
136
                     : <SinAsignRealizadas />
137
-
138
                 }
137
                 }
139
               </TableBody>
138
               </TableBody>
140
             </Table>
139
             </Table>
145
   )
144
   )
146
 }
145
 }
147
 
146
 
147
+
148
 function SinAsignRealizadas() {
148
 function SinAsignRealizadas() {
149
   return (
149
   return (
150
     <tr style={{ padding: 5 }}>
150
     <tr style={{ padding: 5 }}>

+ 17 - 6
src/Components/Home/Candidatos.js

25
 
25
 
26
 export default function Candidatos(props) {
26
 export default function Candidatos(props) {
27
 
27
 
28
-  let { passwords } = props;
28
+  let { passwords, setPassword, setVisible} = props;
29
   const [page, setPage] = useState(1);
29
   const [page, setPage] = useState(1);
30
   const [users, setUser] = useState([]);
30
   const [users, setUser] = useState([]);
31
 
31
 
32
-
33
   const changePage = (_, value) => {
32
   const changePage = (_, value) => {
34
     let page_numer = value;
33
     let page_numer = value;
35
     Divide(users)
34
     Divide(users)
37
   };
36
   };
38
 
37
 
39
   useEffect(() => {
38
   useEffect(() => {
40
-
41
     let list = passwords.map(pwd => {
39
     let list = passwords.map(pwd => {
42
       let { candidatospwds } = pwd
40
       let { candidatospwds } = pwd
43
-      console.log("CANDI: " , candidatospwds)
44
       return {
41
       return {
45
         password: fromBase64(pwd.pwd),
42
         password: fromBase64(pwd.pwd),
46
-        candidatos: candidatospwds
43
+        candidatos: candidatospwds,
44
+        pwd: pwd.pwd,
45
+        plz: pwd.plaza_id
47
       }
46
       }
48
     })
47
     })
49
 
48
 
50
     let divided = Divide(list);
49
     let divided = Divide(list);
51
     setUser(divided)
50
     setUser(divided)
52
 
51
 
52
+    // setPassword({})
53
+    // setVisible(true)
54
+
53
   }, [passwords])
55
   }, [passwords])
54
 
56
 
55
   return (
57
   return (
70
         </div>
72
         </div>
71
         {
73
         {
72
           users.length
74
           users.length
73
-            ? users[page - 1].map((user, i) => (<Candidato key={i} user={user} />))
75
+            ? users[page - 1].map((user, i) => (
76
+              <Candidato 
77
+                onClick={() => {
78
+                  setPassword(user) 
79
+                  setVisible(true) 
80
+                }}
81
+                key={i} 
82
+                user={user} 
83
+              />
84
+            ))
74
             : <Preview style={{ paddingTop: 10 }} lenght={10} />
85
             : <Preview style={{ paddingTop: 10 }} lenght={10} />
75
         }
86
         }
76
         <Row style={{ padding: 5 }}>
87
         <Row style={{ padding: 5 }}>

+ 68 - 34
src/Components/Password/Operation.jsx

44
   });
44
   });
45
 
45
 
46
 
46
 
47
-  let { candidatos, add, remove } = props
47
+  let { candidatos, add, remove, home } = props
48
 
48
 
49
   const formik = useFormik({
49
   const formik = useFormik({
50
     initialValues: {
50
     initialValues: {
80
 
80
 
81
   return (
81
   return (
82
     <FormikProvider style={{ padding: 25 }} value={formik}>
82
     <FormikProvider style={{ padding: 25 }} value={formik}>
83
-      <Typography style={{ padding: 5, marginBottom: 15 }}>Ingresa la informacion del candidato</Typography>
83
+      <Typography style={{ padding: !home? 5: 0, marginBottom: !home? 15: 0 }}>
84
+        { home ? "": "Ingresa la informacion del candidato" }
85
+      </Typography>
84
       <Divider />
86
       <Divider />
85
       <Form autoComplete="off" noValidate onSubmit={handleSubmit}>
87
       <Form autoComplete="off" noValidate onSubmit={handleSubmit}>
86
         <Stack spacing={3}>
88
         <Stack spacing={3}>
87
-          <Stack style={{ paddingTop: 15 }} direction={{ xs: 'column', sm: 'row' }} spacing={2}>
89
+
90
+          <Stack style={{ paddingTop:!home? 15 :0, background:'' }} direction={{ xs: 'column', sm: 'row' }} spacing={2}>
88
             <TextField
91
             <TextField
92
+              style={{ display: home ?'none': 'block',background:'' }}
89
               label="Nombre"
93
               label="Nombre"
90
               {...getFieldProps('nombres')}
94
               {...getFieldProps('nombres')}
91
               error={Boolean(touched.nombres && errors.nombres)}
95
               error={Boolean(touched.nombres && errors.nombres)}
93
             />
97
             />
94
 
98
 
95
             <TextField
99
             <TextField
100
+              style={{ display: home ?'none': 'block' }}
96
               label="Apellidos"
101
               label="Apellidos"
97
               {...getFieldProps('apellidos')}
102
               {...getFieldProps('apellidos')}
98
               error={Boolean(touched.apellidos && errors.apellidos)}
103
               error={Boolean(touched.apellidos && errors.apellidos)}
100
             />
105
             />
101
           </Stack>
106
           </Stack>
102
 
107
 
103
-          <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>
108
+          <Stack style={{ marginTop:0}} direction={{ xs: 'column', sm: 'row' }} spacing={2}>
104
             <TextField
109
             <TextField
110
+              style={{ display: home ?'none': 'block' }}
105
               fullWidth
111
               fullWidth
106
               type="email"
112
               type="email"
107
               label="Correo Electronico"
113
               label="Correo Electronico"
110
               helperText={touched.mail && errors.mail}
116
               helperText={touched.mail && errors.mail}
111
             />
117
             />
112
 
118
 
113
-            <Button type="submit">
119
+            <Button hidden={home} type="submit">
114
               <AddCircle style={{ color: 'var(--main)' }} />
120
               <AddCircle style={{ color: 'var(--main)' }} />
115
             </Button>
121
             </Button>
116
 
122
 
117
           </Stack>
123
           </Stack>
118
 
124
 
119
           <MailTable
125
           <MailTable
126
+            home={home}
120
             remove={remove}
127
             remove={remove}
121
             users={candidatos}
128
             users={candidatos}
122
           />
129
           />
130
 export function ModalEdit(props) {
137
 export function ModalEdit(props) {
131
 
138
 
132
   const auth = useSelector((state) => state.token)
139
   const auth = useSelector((state) => state.token)
133
-  let { password, open, handleOpen } = props
140
+  let { password, open, handleOpen, home } = props
134
   let { pwd, plz } = password
141
   let { pwd, plz } = password
135
 
142
 
136
   return (
143
   return (
144
     >
151
     >
145
       <DialogContent>
152
       <DialogContent>
146
         <ModalForm
153
         <ModalForm
154
+          home={home}
147
           pwdinfo={{ pwd, plz }}
155
           pwdinfo={{ pwd, plz }}
148
           closeModal={handleOpen}
156
           closeModal={handleOpen}
149
           token={auth.token}
157
           token={auth.token}
161
 
169
 
162
 function ModalForm(props) {
170
 function ModalForm(props) {
163
 
171
 
164
-  let { pwdinfo, closeModal } = props
172
+  let { pwdinfo, closeModal,home } = props
165
   const auth = useSelector((state) => state.token)
173
   const auth = useSelector((state) => state.token)
166
   let [candidatos, setCandidatos] = React.useState([]);
174
   let [candidatos, setCandidatos] = React.useState([]);
167
   let [password, setPassword] = React.useState();
175
   let [password, setPassword] = React.useState();
186
 
194
 
187
   React.useEffect(() => {
195
   React.useEffect(() => {
188
     let { pwd, plz } = pwdinfo;
196
     let { pwd, plz } = pwdinfo;
197
+    console.log('PWDINOF',{pwd,plz})
198
+
199
+    let rest = new Service(`/contrasenia/${home ? pwd : btoa(pwd)}/${plz}`)
189
 
200
 
190
-    let rest = new Service(`/contrasenia/${btoa(pwd)}/${plz}`)
191
     rest.getQuery(auth.token)
201
     rest.getQuery(auth.token)
192
       .then(resp => {
202
       .then(resp => {
193
 
203
 
212
       })
222
       })
213
       .catch(error => console.log(error))
223
       .catch(error => console.log(error))
214
 
224
 
215
-  }, [auth.token, pwdinfo, reset])
225
+  }, [auth.token, pwdinfo, reset,home])
216
 
226
 
217
   const saveCandidato = async (body) => {
227
   const saveCandidato = async (body) => {
218
     let rest = new Service('/passwordcandidato/candidato')
228
     let rest = new Service('/passwordcandidato/candidato')
219
     return await rest.postQuery(body, auth.token)
229
     return await rest.postQuery(body, auth.token)
220
   }
230
   }
221
 
231
 
222
-
223
   function onSubmit(fields) {
232
   function onSubmit(fields) {
224
 
233
 
225
     let candi_body = candidatos.map( c => {
234
     let candi_body = candidatos.map( c => {
248
     }
257
     }
249
 
258
 
250
     rest.putQuery(body_req, auth.token)
259
     rest.putQuery(body_req, auth.token)
251
-      .then( async result => {
260
+      .then( async _result => {
252
         queryClient.invalidateQueries('passwords')
261
         queryClient.invalidateQueries('passwords')
253
 
262
 
254
         //TODO: insert into passwordcanidato/candidato 
263
         //TODO: insert into passwordcanidato/candidato 
279
   return (
288
   return (
280
     <Row>
289
     <Row>
281
       <Col>
290
       <Col>
282
-        <form style={{ padding: 20, maxWidth: 950 }} onSubmit={handleSubmit(onSubmit)}>
291
+        <form style={{ padding: !home? 20: 0, maxWidth: 950 }} onSubmit={handleSubmit(onSubmit)}>
283
           <Stack spacing={4}>
292
           <Stack spacing={4}>
284
 
293
 
285
             <TextField
294
             <TextField
299
                 type="text"
308
                 type="text"
300
                 disabled
309
                 disabled
301
               />
310
               />
302
-              <FormControlLabel
311
+
303
-                label="Activo?"
312
+              {
304
-                control={
313
+                !home ? 
305
-                  <Controller
314
+                  <FormControlLabel
306
-                    name="state"
315
+                    label="Activo?"
307
-                    control={control}
316
+                    control={
308
-                    render={({ field: props }) =>
317
+                      <Controller
309
-                      <Checkbox
318
+                        name="state"
310
-                        style={{ color: 'var(--main)' }}
319
+                        control={control}
311
-                        checked={props.value}
320
+                        render={({ field: props }) =>
312
-                        onChange={(e) => props.onChange(e.target.checked)}
321
+                          <Checkbox
322
+                            style={{ color: 'var(--main)' }}
323
+                            checked={props.value}
324
+                            onChange={(e) => props.onChange(e.target.checked)}
325
+                          />
326
+                        }
313
                       />
327
                       />
314
                     }
328
                     }
315
-                  />
329
+                  /> : null
316
-                }
330
+              }
317
-              />
331
+
332
+
318
             </Stack>
333
             </Stack>
319
 
334
 
320
             <LocalizationProvider dateAdapter={DateFnsUtils}>
335
             <LocalizationProvider dateAdapter={DateFnsUtils}>
323
                 control={control}
338
                 control={control}
324
                 render={({ field }) =>
339
                 render={({ field }) =>
325
                   <DesktopDatePicker
340
                   <DesktopDatePicker
341
+                    disabled={home}
326
                     {...field}
342
                     {...field}
327
                     label="Fecha de Activación"
343
                     label="Fecha de Activación"
328
                     inputFormat="dd/MM/yyyy"
344
                     inputFormat="dd/MM/yyyy"
346
                 render={({ field }) =>
362
                 render={({ field }) =>
347
                   <DesktopDatePicker
363
                   <DesktopDatePicker
348
                     {...field}
364
                     {...field}
365
+                    disabled={home}
349
                     label="Fecha de Vencimiento"
366
                     label="Fecha de Vencimiento"
350
                     error={Boolean(errors?.deadpwd)}
367
                     error={Boolean(errors?.deadpwd)}
351
                     inputFormat="dd/MM/yyyy"
368
                     inputFormat="dd/MM/yyyy"
361
               </Controller>
378
               </Controller>
362
             </LocalizationProvider>
379
             </LocalizationProvider>
363
 
380
 
364
-            <DialogActions style={{ paddingTop: 25, 'justifyContent': "flex-start" }}>
381
+            { !home?
365
-              <Button onClick={() => closeModal(false)}>
382
+              <DialogActions style={{ paddingTop: 25, 'justifyContent': "flex-start" }}>
366
-                Cerrar
383
+                <Button onClick={() => closeModal(false)}>
367
-              </Button>
384
+                  Cerrar
368
-              <Button type="submit" style={{ color: 'white', background: 'var(--main)' }} >
385
+                </Button>
369
-                Guardar
386
+                <Button type="submit" style={{ color: 'white', background: 'var(--main)' }} >
370
-              </Button>
387
+                  Guardar
371
-            </DialogActions>
388
+                </Button>
389
+              </DialogActions> : 
390
+
391
+              <DialogActions 
392
+                style={{
393
+                  justifyContent: "flex-start",
394
+                }} >
395
+                <Button onClick={() => { 
396
+                  console.log('close modal')
397
+                  console.log(closeModal)
398
+                  closeModal(true) 
399
+                }}>
400
+                  Cerrar
401
+                </Button>
402
+              </DialogActions>
403
+
404
+            }
372
 
405
 
373
           </Stack>
406
           </Stack>
374
         </form>
407
         </form>
376
       </Col>
409
       </Col>
377
       <Col>
410
       <Col>
378
         <Candidatos
411
         <Candidatos
412
+          home={home}
379
           add={addCandidato}
413
           add={addCandidato}
380
           remove={removeCandidato}
414
           remove={removeCandidato}
381
           candidatos={candidatos}
415
           candidatos={candidatos}

+ 11 - 7
src/Components/Password/Steps/MailTable.jsx

8
 
8
 
9
 export function MailTable(props) {
9
 export function MailTable(props) {
10
 
10
 
11
-  let { users, remove } = props;
11
+  let { users, remove, home } = props;
12
 
12
 
13
   return (
13
   return (
14
-    <TableContainer component={Paper}>
14
+    <TableContainer 
15
+      style={{boxShadow:'none',margin:'0px !important'}}
16
+      component={Paper}>
15
       <Table aria-label="simple table">
17
       <Table aria-label="simple table">
16
         <TableHead>
18
         <TableHead>
17
           <TableRow>
19
           <TableRow>
29
               </TableCell>
31
               </TableCell>
30
               <TableCell align="right">{row.nombres}</TableCell>
32
               <TableCell align="right">{row.nombres}</TableCell>
31
               <TableCell align="right">{row.apellidos}</TableCell>
33
               <TableCell align="right">{row.apellidos}</TableCell>
32
-              <TableCell align="right">
34
+              { !home?
33
-                <ButtonBase>
35
+                <TableCell align="right">
34
-                  <DisabledByDefault onClick={() => remove(row.mail)} style={{color:'var(--main)'}} />
36
+                  <ButtonBase>
35
-                </ButtonBase>
37
+                    <DisabledByDefault onClick={() => remove(row.mail)} style={{color:'var(--main)'}} />
36
-              </TableCell>
38
+                  </ButtonBase>
39
+                </TableCell>: null
40
+              }
37
             </TableRow>
41
             </TableRow>
38
           )) : null}
42
           )) : null}
39
         </TableBody>
43
         </TableBody>

+ 17 - 1
src/Pages/Home.jsx

1
-import React from 'react'
1
+import React, { useState } from 'react'
2
 import { Col, Row } from 'react-bootstrap'
2
 import { Col, Row } from 'react-bootstrap'
3
 import { PersonOutline, VerifiedUser, ListAlt } from '@mui/icons-material/'
3
 import { PersonOutline, VerifiedUser, ListAlt } from '@mui/icons-material/'
4
 // import Actividades from '../Components/Home/Actividades'
4
 // import Actividades from '../Components/Home/Actividades'
7
 import { useSelector } from 'react-redux';
7
 import { useSelector } from 'react-redux';
8
 import { Service } from '../Utils/HTTP.js'
8
 import { Service } from '../Utils/HTTP.js'
9
 import { useQuery } from 'react-query';
9
 import { useQuery } from 'react-query';
10
+import { ModalEdit } from '../Components/Password/Operation';
10
 
11
 
11
 export function Home() {
12
 export function Home() {
12
 
13
 
13
   const auth = useSelector((state) => state.token)
14
   const auth = useSelector((state) => state.token)
15
+  const [password,setPasword]= useState(null)
16
+  const [visible,setVisible]= useState(false)
17
+  const hideModal = () => setVisible(false)
14
 
18
 
15
   const getAllPwd = async () => {
19
   const getAllPwd = async () => {
16
     let rest = new Service('/contrasenia/getallbyidUsr');
20
     let rest = new Service('/contrasenia/getallbyidUsr');
53
             <Row>
57
             <Row>
54
               <Col md="12">
58
               <Col md="12">
55
                 <Candidatos 
59
                 <Candidatos 
60
+                  setPassword={setPasword}
61
+                  setVisible={setVisible}
56
                   passwords={data?.data || []}
62
                   passwords={data?.data || []}
57
                 />
63
                 />
58
               </Col>
64
               </Col>
64
             </Row>
70
             </Row>
65
           </div>
71
           </div>
66
         </div>
72
         </div>
73
+
74
+        { password ?
75
+          <ModalEdit
76
+            home={true}
77
+            password={password}
78
+            open={visible}
79
+            handleOpen={hideModal}
80
+          />: null
81
+        }
82
+
67
       </div>
83
       </div>
68
     </section>
84
     </section>
69
   )
85
   )