{"version":3,"sources":["components/NavMenu.js","components/NavMenuAlumno.js","components/Layout.js","components/fileWithConstants.js","components/Home.js","components/Alumnos/MDAlumnos.js","components/Carreras/MDCarreras.js","components/AlumnoCarrera/MDAlumnoxCarrera.js","components/AnioAcademico/MDAnioAcademicos.js","components/MateriaCarrera/MDMateriaCarrera.js","components/PeriodoExamen/MDPeriodoExamen.js","components/Cursadas/MDCursadas.js","components/PeriodoCursada/MDPeriodoCursada.js","components/InscripcionCursada/MDInscripcionCursada.js","components/InscripcionExamen/MDInscripcionExamen.js","components/MesaExamen/MDMesaExamen.js","components/HistoriaAcademicaCursada/MDHistoriaAcademicaCursada.js","components/ActaCursada/MDActasCursadas.js","components/HistoriaAcademicaExamen/MDHistoriaAcademicaExamen.js","components/ActaExamen/MDActaExamen.js","components/Alumnos/AddAlumnos.js","components/Carreras/AddCarrera.js","components/AnioAcademico/AddAnioAcademico.js","components/Carreras/LookupCarreras.js","components/MateriaCarrera/AddMateria.js","components/AnioAcademico/LookupAnioAcademicos.js","components/PeriodoExamen/AddPeriodoExamen.js","components/Alumnos/LookupAlumnos.js","components/AlumnoCarrera/AddAlumnoCarrera.js","components/PeriodoExamen/LookupPeriodoExamen.js","components/MateriaCarrera/LookupMaterias.js","components/MesaExamen/AddMesaExamen.js","components/AlumnoCarrera/LookupAlumnoCarrera.js","components/Cursadas/LookupCursadas.js","components/InscripcionCursada/AddInscripcionCursada.js","components/Cursadas/LookupCursadasAlumnos.js","components/InscripcionCursada/AddInscripcionCursadaAlumnos.js","components/PeriodoCursada/LookupPeriodoCursada.js","components/Cursadas/AddCursada.js","components/PeriodoCursada/AddPeriodoCursada.js","components/MesaExamen/LookupMesaExamen.js","components/InscripcionExamen/AddInscripcionExamen.js","components/Alumnos/UpdateAlumno.js","components/Carreras/UpdateCarrera.js","components/AlumnoCarrera/UpdateAlumnoCarrera.js","components/MateriaCarrera/UpdateMateria.js","components/AnioAcademico/UpdateAnioAcademico.js","components/PeriodoExamen/UpdatePeriodoExamen.js","components/Cursadas/UpdateCursada.js","components/PeriodoCursada/UpdatePeriodoCursada.js","components/InscripcionCursada/UpdateInscripcionCursada.js","components/MesaExamen/UpdateMesaExamen.js","components/InscripcionExamen/UpdateInscripcionExamen.js","components/HistoriaAcademicaCursada/UpdateHistoriaAcademicaCursada.js","components/HistoriaAcademicaExamen/UpdateHistoriaAcademicaExamen.js","components/ActaExamen/UpdateEncabezado.js","components/Counter.js","components/Cursadas/GenerarCursadas.js","components/AlumnoCarrera/InscribirAlumno.js","components/ActaCursada/CargarActaCursada.js","components/ActaExamen/CargarActaExamen.js","components/ActaCursada/VerActaCursada.js","components/ActaExamen/VerActaExamen.js","components/EstadoCurriculares/GenerateEstadoCurricular.js","components/InscripcionCursada/MDInscripcionCursadaAlumno.js","components/InscripcionCursada/UpdateInscripcionCursadaAlumno.js","components/InscripcionCursada/ValidarInscripcionCursadas.js","components/MesaExamen/CargarMesas.js","components/Alumnos/InscribirAlumnosPrimero.js","components/HistoriaAcademicaCursada/ActualizarRegularidades.js","App.js","registerServiceWorker.js","index.js"],"names":["NavMenu","Component","constructor","props","super","this","toggleNavbar","bind","state","collapsed","setState","render","React","createElement","Navbar","className","light","Container","NavDropdown","title","Item","style","width","onClick","Cookies","set","window","dispatchEvent","CustomEvent","href","_class","displayName","name","NavMenuAlumno","display","Layout","auth","get","alumnoCodigos","_Cookies$get","addEventListener","authToken","console","log","split","length","Redirect","to","children","AuthorizationHeader","RedirectToLogin","ReturnUserName","canAccess","async","alumnosCodigo","perfil","response","fetch","modulo","method","headers","json","returnModel","Home","handleSelectCarreraItem","isOkToSave","authenticateUser","errorMessage","handleDNIChangeInput","e","usuario","target","value","handleNameChangeInput","contrasenia","loading","sucess","size","onChange","disabled","type","Button","color","constantClass","data","success","MDAlumnos","handleRemoveItem","id","confirm","deleteItem","handlePageClick","offset","selected","perPage","searchInput","alumnos","slice","paginationData","dataPagination","searchData","pageCount","Math","ceil","handleChange","filter","person","alumnoNombre","toLowerCase","includes","alumnoDni","alumnoCodigo","toString","showErrorMessage","populateData","renderalumnosTable","aria-labelledby","colSpan","map","alumno","key","ButtonGroup","tag","Link","contents","placeholder","ReactPaginate","previousLabel","nextLabel","breakLabel","breakClassName","marginPagesDisplayed","pageRangeDisplayed","onPageChange","containerClassName","subContainerClassName","activeClassName","sort","a","b","MDCarreras","carreras","carrera","carreraNombre","carreraCod","handleItemSelect","carreraAnioImplementacion","MDAlumnoxCarrera","alumnoxCarreraCod","MDAnioAcademicos","anios","anio","anioAcademicoDescripcion","anioAcademicoCod","MDMateriaCarrera","materias","materia","materiaCarreraNombre","materiaCarreraCodigo","materiaCarreraCod","materiaCarreraAnio","materiaCarreraDictado","materiaPractica","trim","MDPeriodoExamen","periodos","periodo","periodoExamenDescripcion","periodoExamenLlamado","peridoExamenCod","format","Date","periodoExamenFechaInicio","periodoExamenFechaFin","MDCursadas","handleGenerarActa","generarActa","materiaNombre","periodoCursadaCodNavigation","anioAcademicoCodNavigation","getPeriodoCursada","periodoCursadaDescripcion","cursadas","cursada","cursadaCod","periodoCursadaFechaInicio","periodoCursadaFechaFin","periodoCursadaInicioInscripcio","periodoCursadaFinInscripcion","setHours","alert","MDPeriodoCursada","periodoCursadaCod","MDInscripcionCursada","handleModificarEstado","changeItem","getEstadoInscripcion","inscripcionCursadaCod","inscripcionCursadaFechaHora","inscripcionCursadaEstado","MDInscripcionExamen","changeAllInscriptions","periodoExamen","llamado","changeAll","inscripcionExamenCod","inscripcionExamenFechaHora","inscripcionExamenEstado","inscripcionExamenCondicionInsc","fechaExamen","MDMesaExamen","mesaExamenCod","mesaExamenFechaExamen","mesaExamenFechaInicioInscripci","mesaExamenFechaFinInscripcion","MDHistoriaAcademicaCursada","showMessageCargando","actualizarRegularidades","historiaAcademicaCursadaCod","historiaAcademicaFecha","historiaAcademicaResultado","historiaAcademicaFechaFinRegul","historiaAcademicaCursadaObserv","historiaAcademicaCursadaFechaV","MDActasCursadas","imprimirActa","ImprimirActa","actaCursadoEstado","actaCursadaNro","byteCharacters","atob","byteNumbers","Array","i","charCodeAt","byteArray","Uint8Array","blob","Blob","link","document","URL","createObjectURL","download","click","MDHistoriaAcademicaExamen","historiaAcademicaExamenCod","historiaAcademicaFechaExamen","historiaAcademicaExamenNota","historiaAcademicaExamenResulta","MDActaExamen","actaExamenEstado","actaExamenNacta","actaExamenTipo","actaExamenLibro","actaExamenFolio","AddAlumnos","handleConfirmButton","saveStudent","dni","required","body","JSON","stringify","AlumnoNombre","AlumnoDni","AddCarrera","saveCarrera","handleAnioImplementacion","anioImplementacion","handleResolucionMinisterial","resolucionMinisterial","getFullYear","CarreraNombre","CarreraAnioImplementacion","CarreraResolucionAprobacion","CarreraExtinta","AddAnioAcademico","handleDescripcionChangeInput","descripcion","AnioAcademicoDescripcion","LookupCarreras","selectItem","show","handleModal","hideLookup","Modal","onHide","Header","closeButton","Body","options","label","optionsCuatrimestre","AddMateria","carreraProperties","showLookupCarreras","codigo","nombre","handleSelect","practica","handleHideLookup","handleShowCarreraLookup","handleAnioChangeInput","anioDictado","handleDictadoChangeInput","dictado","valueDictado","handleCodeChange","code","handleDelete","tagData","text","showLookupStudent","Select","MateriaCarreraCodigo","MateriaCarreraNombre","MateriaCarreraDictado","MateriaCarreraAnio","MateriaPractica","CarreraCod","LookupAnioAcademicos","registerLocale","es","AddPeriodoExamen","datesOk","areDatesOk","handleShowAniosLookup","showLookupAnios","handleStartDate","date","startDate","handleEndDate","endDate","handleLlamadoChangeInput","handleSelectAnioItem","DatePicker","locale","closeOnScroll","dateFormat","PeriodoExamenDescripcion","PeriodoExamenLlamado","PeriodoExamenFechaInicio","PeriodoExamenFechaFin","AnioAcademicoCod","LookupAlumnos","selectStudent","AddAlumnoCarrera","handleSelectStudentItem","studentProperties","push","handleShowStudentLookup","handleHideStudentLookup","handleHideCarreraLookup","rendleTags","content","tags","object","AlumnoCodigo","parseInt","LookupPeriodoExamen","LookupMaterias","AddMesaExamen","okToSave","fechasOk","datesOK","showLookupMaterias","materiaCodigo","handleSelectPeriodoCursadaItem","showLookupPeriodoCursada","fechaInicioPeriodo","fechaFinPeriodo","handleFechaExamen","handleFechaInicioInscripcion","fechaInicioInscripcion","handleFechaFinInscripcion","fechaFinInscripcion","handleHidePeriodoCursadaLookup","handleShowPeriodoCursadaLookup","tagDataMateria","handleDeletePeriodoCursada","tagDataPeriodoCursada","fechafinPeriodo","botonHabilitado","rendleTagsMateria","datesInPeriodo","MesaExamenFechaExamen","MesaExamenFechaInicioInscripci","MesaExamenFechaFinInscripcion","PeridoExamenCod","MateriaCarreraCod","LookupAlumnoCarrera","LookupCursadas","AddInscripcionCursada","tagDataAlumno","carreraCursada","handleDeleteCursada","tagDataCursada","handleShowCursadaLookup","showCursada","handleHideLookup1","Number","handleCheckBox","ignorarCorrelatividad","checked","handleSelectCursadaItem","startInscriptionDate","endInscriptionDate","CursadaCod","AlumnoxCarreraCod","MateriaCarreraCod5","IgnorarCorrelatividad","LookupCursadasAlumnos","alumnoCarreraCod","AddInscripcionCursadaAlumnos","handleChangeAlumno","materiaCarreraCod3","x","error","Cursada","MateriaCarreraCod3","Cursadas","LookupPeriodoCursada","AddCursada","dictadoCorrecto","cursadacod","cursadadescripcion","PeriodoCursadaCod","AddPeriodoCursada","inscriptionDatesOk","areInscriptionDateOk","inscriptionDateInsidePeriodDates","areInscriptionDateInsidePeriodDates","handleEndInscripcionDate","handleStartInscriptionDate","defaultValue","startInscripcionDate","PeriodoCursadaFechaInicio","PeriodoCursadaDescripcion","PeriodoCursadaFechaFin","PeriodoCursadaInicioInscripcio","PeriodoCursadaFinInscripcion","LookupMesaExamen","AddInscripcionExamen","handleCheckBoxCorrelatividad","handleCheckBoxRegularidad","ignorarRegularidad","Mesa","InscripcionExamenCondicionInsc","Mesas","IgnorarRegularidad","UpdateAlumno","details","match","params","disable","defaultValuePractica","alumnoPapelesCompletos","AlumnoPapelesCompletos","UpdateCarrera","extinta","carreraExtinta","carreraResolucionAprobacion","UpdateAlumnoCarrera","UpdateMateria","handleCodeChangeInput","valuePractica","defaultValueAnioDictado","carreraCodigo","UpdateAnioAcademico","UpdatePeriodoExamen","anioProperties","toLocaleDateString","UpdateCursada","periodoCursada","handleStudentHideLookup","materiaDictado","UpdatePeriodoCursada","UpdateInscripcionCursada","showLookupCursada","alumnocarreraCod","alumnoCarrera","alumnoCarreraNombre","handleCursadaAnioItem","cursadaCodigo","cursadaMateriaCodigo","cursadaMateriaNombre","cursadaPeriodo","cursadaCodNavigation","alumnoxCarreraCodNavigation","InscripcionCursadaCod","InscripcionCursadaEstado","UpdateMesaExamen","fechasEnPeriodo","mesaExamen","getMonth","getDate","materiaCod","fechaPeriodoInicio","fechaPeriodoFin","MesaExamenCod","InicioFechaInscripcion","FinFechaInscripcion","FechaExamenInscripcion","UpdateInscripcionExamen","mesaExamenCodNavigation","InscripcionExamenCod","UpdateHistoriaAcademicaCursada","fechaFinRegularidad","resultado","observaciones","fecha","materiaCarreraCodNavigation","HistoriaAcademicaCursadaCod","HistoriaAcademicaResultado","HistoriaAcademicaFechaFinRegul","HistoriaAcademicaCursadaObserv","HistoriaAcademicaFecha","UpdateHistoriaAcademicaExamen","handleNota","nota","HistoriaAcademicaExamenCod","HistoriaAcademicaExamenNota","HistoriaAcademicaFechaExamen","UpdateEncabezado","postEncabezado","handleOnChangeFolio","folio","handleOnChangeLibro","libro","tipoActa","ActaExamenFolio","ActaExamenLibro","ActaExamenNacta","Counter","currentCount","incrementCounter","aria-live","GenerarCursadas","handleStartDateAnual","startDateAnual","handleEndDateAnual","endDateAnual","handleStartDate1C","startDate1C","handleEndDate1C","endDate1C","handleStartDate2C","startDate2C","handleEndDate2C","endDate2C","FechaInicioAnual","FechaInicio1C","FechaInicio2C","FechaFinAnual","FechaFin1C","FechaFin2C","InscribirAlumno","CarrerasCod","CargarActaCursada","ff","allRowsWereSaved","ggg","allDataPopulated","postNotas","index","resultados","findIndex","element","splice","todoOk","forEach","y","detalleActaCursadaCod","objects","DetalleActaCursadaCod","DetalleActaCursadaResultado","CargarActaExamen","handleNotaOral","oral","valueOral","handleNotaEscrito","escrito","valueEscrito","handleNotaPromedio","valueNota","encabezadoOk","detalleActaCod","DetalleActaCod","DetalleActaNota","DetalleActaOral","DetalleActaEscrito","Resultados","VerActaCursada","handleStatus","detalleActaCursadaResultado","VerActaExamen","detalleActaOral","detalleActaEscrito","detalleActaNota","detalleActaResultado","GenerateEstadoCurricular","MDInscripcionCursadaAlumno","UpdateInscripcionCursadaAlumno","ValidarInscripcionCursadas","CargarMesas","reader","FileReader","file","files","readAsDataURL","onload","base64","result","onerror","selectedFile","Archivo","InscribirAlumnosPrimero","ActualizarRegularidades","App","Route","exact","path","component","isLocalhost","Boolean","location","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","controller","catch","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","BrowserRouter","basename","process","origin","concat","status","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.8232a9a4.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport { NavDropdown } from 'react-bootstrap';\r\nimport { Container, Navbar } from 'reactstrap';\r\nimport './NavMenu.css';\r\nimport Cookies from 'js-cookie';\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar() {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <header>\r\n <Navbar className=\"navbar-expand-sm navbar-toggleable-sm ng-white border-bottom box-shadow mb-3\" light>\r\n <Container>\r\n <NavDropdown className=\"text-primary my-auto\" title=\"Usuario\" >\r\n {/*Cambiar Contraseña*/}\r\n <NavDropdown.Item style={{ width: '5vw' }} onClick={() =>\r\n {\r\n Cookies.set('authToken', false);\r\n Cookies.set('alumnoCodigos', \"\");\r\n window.dispatchEvent(new CustomEvent('authenticated')); \r\n }}>Cerrar Sesión</NavDropdown.Item>\r\n </NavDropdown>\r\n <NavDropdown className=\"text-primary my-auto\" title=\"Alumnos\" >\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-alumnos\">Manejar datos de Alumnos</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-axc\">Manejar datos de Alumnos por Carrera</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/axc-inscribir\">Inscribir Alumnos</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/ecur\">Generar Estado Curricular</NavDropdown.Item>\r\n </NavDropdown>\r\n <NavDropdown className=\"text-primary my-auto\" title=\"Carreras\" >\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-carreras\">Manejar datos de Carreras</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-mxc\">Manejar datos de Materias</NavDropdown.Item>\r\n </NavDropdown>\r\n <NavDropdown className=\"text-primary my-auto\" title=\"Cursadas\" >\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-cur\">Manejar datos de Cursadas</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-ic\">Manejar datos de Inscripciones Cursadas</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-acur\">Manejar datos de Actas de Cursada</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-hic\">Manejar datos de Historias Académicas de Cursada</NavDropdown.Item>\r\n </NavDropdown> \r\n <NavDropdown className=\"text-primary my-auto\" style={{ width: '80px' }} title=\"Examenes\" >\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-mex\">Manejar datos de Mesas de Examenes</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-ie\">Manejar datos de Inscripciones a Examenes</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-aex\">Manejar datos de Actas de Examenes</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-hex\">Manejar datos de Historias de Examenes</NavDropdown.Item>\r\n </NavDropdown>\r\n <NavDropdown className=\"text-primary my-auto\" style={{ width: '80px' }} title=\"PerÃodos Académicos\" >\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-anios\">Manejar datos de Años Académicos</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-pex\">Manejar datos de PerÃodos de Exámenes</NavDropdown.Item>\r\n <NavDropdown.Item style={{ width: '5vw' }} href=\"/md-pcr\">Manejar datos de PerÃodos de Cursadas</NavDropdown.Item>\r\n </NavDropdown> \r\n </Container>\r\n </Navbar>\r\n </header>\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { NavDropdown } from 'react-bootstrap';\r\nimport { Container, Navbar } from 'reactstrap';\r\nimport './NavMenu.css';\r\nimport Cookies from 'js-cookie';\r\n\r\nexport class NavMenuAlumno extends Component {\r\n static displayName = NavMenuAlumno.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar() {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <header>\r\n <Navbar className=\"navbar-expand-sm navbar-toggleable-sm ng-white border-bottom box-shadow mb-3\" light>\r\n <Container>\r\n <div style={{ display: 'flex' }}>\r\n <NavDropdown className=\"text-primary my-auto\" title=\"Usuario\">\r\n {/* Cambiar Contraseña */}\r\n <NavDropdown.Item\r\n style={{ width: '5vw' }}\r\n onClick={() => {\r\n Cookies.set('authToken', false);\r\n Cookies.set('alumnoCodigos', \"\");\r\n window.dispatchEvent(new CustomEvent('authenticated'));\r\n }}\r\n >\r\n Cerrar Sesión\r\n </NavDropdown.Item>\r\n </NavDropdown>\r\n <NavDropdown className=\"text-primary my-auto\" title=\"Cursadas\">\r\n <NavDropdown.Item href=\"/md-ica\">\r\n Manejar datos de Cursadas\r\n </NavDropdown.Item>\r\n </NavDropdown>\r\n </div>\r\n </Container>\r\n </Navbar>\r\n </header>\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { NavMenu } from './NavMenu';\r\nimport { NavMenuAlumno } from './NavMenuAlumno';\r\nimport Cookies from 'js-cookie';\r\nimport { Redirect } from 'react-router';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n auth: Cookies.get('authToken'),\r\n alumnoCodigos: Cookies.get('alumnoCodigos')\r\n };\r\n }\r\n\r\n\r\n render() {\r\n window.addEventListener(\"authenticated\", () => {\r\n const authToken = Cookies.get('authToken');\r\n console.log(authToken);\r\n this.setState({ auth: authToken });\r\n if (authToken == 'false')\r\n {\r\n window.dispatchEvent(new CustomEvent('logout')); \r\n }\r\n }); \r\n var alumnoCodigos = Cookies.get('alumnoCodigos')?.split(','); \r\n return (\r\n <div>\r\n {this.state.auth == 'true' ?\r\n alumnoCodigos.length == 1 && alumnoCodigos[0] == -1?\r\n <NavMenu /> :\r\n <NavMenuAlumno />\r\n :\r\n <Redirect to=\"/\" />}\r\n <Container>\r\n {this.props.children}\r\n </Container>\r\n </div>\r\n );\r\n }\r\n}\r\n","import Cookies from 'js-cookie';\r\n\r\nexport const AuthorizationHeader = \"U2lzdGVtYUdlc3Rpb25BbHVtbm9zX1BJQUdFVF8yMDIy\";\r\n\r\nexport const RedirectToLogin = () => {\r\n Cookies.set('authToken', false);\r\n Cookies.set('alumnoCodigos', \"\");\r\n window.dispatchEvent(new CustomEvent('authenticated'));\r\n}\r\n\r\nexport const ReturnUserName = () => {\r\n return Cookies.get('username');\r\n}\r\n\r\nexport const canAccess = async (modulo) => {\r\n const alumnosCodigo = Cookies.get('alumnoCodigos')?.split(',');\r\n\r\n let perfil = 0;\r\n if (alumnosCodigo)\r\n {\r\n if (alumnosCodigo.length == 1 && alumnosCodigo[0] == -1) {\r\n perfil = 1;\r\n } else {\r\n perfil = 3;\r\n }\r\n }\r\n const response = await fetch('api/modulo/canaccess/' + modulo + '/' + perfil,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': AuthorizationHeader,\r\n }\r\n });\r\n\r\n const data = await response.json();\r\n if (!data.returnModel ) {\r\n RedirectToLogin();\r\n }\r\n return true;\r\n}","import React, { Component } from 'react';\r\nimport { Button } from 'reactstrap';\r\nimport './Buttons.css';\r\nimport * as constantClass from './fileWithConstants';\r\nimport Cookies from 'js-cookie';\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n usuario: \"\",\r\n contrasenia: \"\",\r\n loading: false,\r\n errorMessage: \"\",\r\n sucess: Cookies.get('authToken')\r\n }\r\n this.handleSelectCarreraItem = this.handleSelectCarreraItem.bind(this);\r\n this.handleDNIChangeInput = this.handleDNIChangeInput.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n }\r\n\r\n handleSelectCarreraItem = () => {\r\n if (this.isOkToSave()) {\r\n this.authenticateUser();\r\n } else {\r\n this.setState({ errorMessage: \"Ingrese usuario y contraseña por favor\" });\r\n }\r\n }\r\n\r\n handleDNIChangeInput = e => {\r\n this.setState({ usuario: e.target.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ contrasenia: e.target.value });\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.contrasenia.length > 0 && this.state.usuario.length > 0);\r\n }\r\n\r\n render() {\r\n window.addEventListener(\"logout\", () => {\r\n this.setState({ sucess: Cookies.get('authToken'), usuario: \"\", contrasenia: \"\" });\r\n console.log(\"ddddd\");\r\n });\r\n return (\r\n <div> \r\n {!this.state.sucess || this.state.sucess == 'false' ?\r\n <div>\r\n <h1>Bienvenido al Sistema de Alumnos del Instituto Jean Piaget</h1>\r\n <div>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Estamos validando sus datos, espere unos segundos...\" : \"\"}</span>\r\n </div>\r\n <div>\r\n <label> Ingrese su Nombre de Usuario: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n onChange={this.handleDNIChangeInput}\r\n disabled={this.state.loading}\r\n value={this.state.usuario}\r\n />\r\n </div>\r\n\r\n <div>\r\n <label> Ingrese su Contraseña: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n type=\"password\"\r\n disabled={this.state.loading}\r\n value={this.state.contrasenia}\r\n onChange={this.handleNameChangeInput}\r\n />\r\n </div>\r\n\r\n <div>\r\n <Button color=\"link\" onClick={this.handleSelectCarreraItem} > Ingresar</Button>\r\n </div>\r\n </div>\r\n : <div></div>}\r\n </div>\r\n );\r\n }\r\n\r\n async authenticateUser() {\r\n this.setState({ errorMessage: \"\", loading: true });\r\n const response = await fetch('api/User/Authenticate/' + this.state.usuario + '/' + this.state.contrasenia,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n }\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n } else {\r\n if (data.returnModel.length == 0) {\r\n errorMessage = \"Usuario y/o contraseña inválidos\";\r\n success = false;\r\n } else {\r\n Cookies.set('authToken', true);\r\n Cookies.set('username', this.state.usuario);\r\n Cookies.set('alumnoCodigos', data.returnModel);\r\n window.dispatchEvent(new CustomEvent('authenticated'));\r\n }\r\n }\r\n this.setState({ loading: false, sucess: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class MDAlumnos extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDAlumnos.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWAlumnos');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.alumnos.filter(\r\n person => {\r\n return (\r\n person\r\n .alumnoNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person\r\n .alumnoDni\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person\r\n .alumnoCodigo\r\n .toString()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(alumnos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>DNI</th>\r\n <th>Nombre y Apellido </th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {alumnos.map(alumno =>\r\n <tr key={alumno.alumnoCodigo}>\r\n <td>{alumno.alumnoDni}</td>\r\n <td>{alumno.alumnoNombre}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-alumno/\" + alumno.alumnoCodigo + \"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(alumno.alumnoCodigo)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-alumno/\" + alumno.alumnoCodigo + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Alumnos</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-alumno\">Nuevo Alumno</Link>\r\n </p>\r\n <p>\r\n <Link to=\"/iap\">Inscribir Alumnos Primero Año Masivamente</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese DNI o Apellido del alumno\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n\r\n const response = await fetch('api/Students/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.alumnoCodigo - a.alumnoCodigo);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ alumnos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/Students/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class MDCarreras extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDCarreras.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWCarreras');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.carreras.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.carreras.filter(\r\n carrera => {\r\n return (\r\n carrera\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n carrera\r\n .carreraCod\r\n .toString()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.carreras.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.carreras.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(carreras) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Código</th>\r\n <th>Nombre</th>\r\n <th>Año Implementación</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {carreras.map(carrera =>\r\n <tr key={carrera.carreraCod}>\r\n <td>{carrera.carreraCod}</td>\r\n <td>{carrera.carreraNombre}</td>\r\n <td>{carrera.carreraAnioImplementacion ? carrera.carreraAnioImplementacion:\"2018\"}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-carrera/\" + carrera.carreraCod+\"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(carrera.carreraCod)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-carrera/\" + carrera.carreraCod + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n\r\n handleItemSelect = id =>\r\n {\r\n console.log(id);\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Carreras</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-carrera\">Nueva Carrera</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Nombre de la Carrera\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/Carreras/Index',\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.carreraCod - a.carreraCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ carreras: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/Carreras/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class MDAlumnoxCarrera extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDAlumnoxCarrera.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n searchData: [],\r\n searchInput: \"\",\r\n perPage: 10,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n alumnos: []\r\n };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWAlumnosxCarrera');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.alumnos.filter(\r\n person => {\r\n return (\r\n person\r\n .alumnoNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person\r\n .alumnoDni\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(alumnos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Nombre y Apellido</th>\r\n <th>DNI</th>\r\n <th>Carrera</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {alumnos.map(alumno =>\r\n <tr key={alumno.alumnoxCarreraCod}>\r\n <td>{alumno.alumnoNombre}</td>\r\n <td>{alumno.alumnoDni}</td>\r\n <td>{alumno.carreraNombre}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-axc/\" + alumno.alumnoxCarreraCod + \"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(alumno.alumnoxCarreraCod)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-axc/\" + alumno.alumnoxCarreraCod + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Alumnos por Carrera</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-axc\">Nuevo Alumno por Carrera</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese DNI o Apellido del alumno o nombre de la Carrera\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/axc/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.alumnoxCarreraCod - a.alumnoxCarreraCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ alumnos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/axc/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class MDAnioAcademicos extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDAnioAcademicos.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWAnioAcademico');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.anios.filter(\r\n anio => {\r\n return (\r\n anio\r\n .anioAcademicoDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(anios) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Año Académico</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {anios.map(anio =>\r\n <tr key={anio.anioAcademicoCod}>\r\n <td>{anio.anioAcademicoDescripcion}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-anio/\" + anio.anioAcademicoCod + \"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(anio.anioAcademicoCod)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-anio/\" + anio.anioAcademicoCod + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Años Académicos</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-anio\">Nuevo Año Académico</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Año Académico\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/anioAcademico/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.anioAcademicoCod - a.anioAcademicoCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ anios: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/anioAcademico/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class MDMateriaCarrera extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDMateriaCarrera.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWMaterias');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.materias.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.materias.filter(\r\n materia => {\r\n return (\r\n materia\r\n .materiaCarreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n materia\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())||\r\n materia\r\n .materiaCarreraCodigo\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.materias.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.materias.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(materias) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Código</th>\r\n <th>Nombre</th>\r\n <th>Carrera</th>\r\n <th>Año Dictado</th>\r\n <th>PerÃodo de Dictado</th>\r\n <th>Práctica</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {materias.map(materia =>\r\n <tr key={materia.materiaCarreraCod}>\r\n <td>{materia.materiaCarreraCodigo}</td>\r\n <td>{materia.materiaCarreraNombre}</td>\r\n <td>{materia.carreraNombre}</td>\r\n <td>{materia.materiaCarreraAnio}</td>\r\n <td>{materia.materiaCarreraDictado == '1' ? 'Primer Cuatrimestre' : materia.materiaCarreraDictado == '2' ? 'Segundo Cuatrimestre' : 'Anual'}</td>\r\n <td>{materia.materiaPractica == \"N\" ? \"No\":\"Si\"}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-mxc/\" + materia.materiaCarreraCod.trim()+\"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(materia.materiaCarreraCod.trim())}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-mxc/\" + materia.materiaCarreraCod.trim() + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n\r\n handleItemSelect = id =>\r\n {\r\n console.log(id);\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Materias</h1>\r\n {this.state.showErrorMessage && !this.state.loading ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-mxc\">Nueva Materia</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Nombre de la Carrera o de la Materia o código de la Materia\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() { \r\n const response = await fetch('api/MateriaCarrera/Index',\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => a.materiaCarreraCodigo - b.materiaCarreraCodigo);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ materias: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/MateriaCarrera/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class MDPeriodoExamen extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDPeriodoExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWPeriodoExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.periodos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.periodos.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .anioAcademicoDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n periodo\r\n .periodoExamenDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n periodo\r\n .periodoExamenLlamado\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n )\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.periodos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.periodos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>PerÃodo</th>\r\n <th>Llamado</th>\r\n <th>Año Académico</th>\r\n <th>Fecha de Inicio</th>\r\n <th>Fecha de Fin</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(periodo =>\r\n <tr key={periodo.peridoExamenCod}>\r\n <td>{periodo.periodoExamenDescripcion}</td>\r\n <td>{periodo.periodoExamenLlamado}</td>\r\n <td>{periodo.anioAcademicoDescripcion}</td>\r\n <td>{format(new Date(periodo.periodoExamenFechaInicio),'dd/MM/yyyy')}</td>\r\n <td>{format(new Date(periodo.periodoExamenFechaFin),'dd/MM/yyyy')}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-pex/\" + periodo.peridoExamenCod + \"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(periodo.peridoExamenCod)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-pex/\" + periodo.peridoExamenCod + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de PerÃodos de Examen</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-pex\">Nuevo PerÃodo de Examen</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Año Académico o PerÃodo o Llamado\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/pex/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.peridoExamenCod - a.peridoExamenCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ periodos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/pex/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class MDCursadas extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDCursadas.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.handleGenerarActa = this.handleGenerarActa.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n handleGenerarActa = (id) => {\r\n if (!window.confirm(\"¿Desea generar el Acta de Cursada?\"))\r\n return;\r\n else {\r\n this.generarActa(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.materias.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.materias.filter(\r\n materia => {\r\n return (\r\n materia\r\n .materiaNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n materia\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n materia\r\n .periodoCursadaCodNavigation\r\n .anioAcademicoCodNavigation\r\n .anioAcademicoDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n this.getPeriodoCursada(materia\r\n .periodoCursadaDescripcion)\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.materias.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.materias.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(cursadas) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Materia</th>\r\n <th>Carrera</th>\r\n <th>PerÃodo de Cursada</th>\r\n <th>Año Académico</th>\r\n <th>Fecha de Inicio</th>\r\n <th>Fecha de Fin</th>\r\n <th>Fecha de Inicio de Inscripción</th>\r\n <th>Fecha de Fin de Inscripción</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {cursadas.map(cursada =>\r\n <tr key={cursada.cursadaCod}>\r\n <td>{cursada.materiaNombre}</td>\r\n <td>{cursada.carreraNombre}</td>\r\n <td>{cursada.periodoCursadaDescripcion == '1' ? 'Primer Cuatrimestre' : cursada.periodoCursadaDescripcion == '2' ? 'Segundo Cuatrimestre' : 'Anual'}</td>\r\n <td>{cursada.anioAcademicoDescripcion}</td>\r\n <td>{format(new Date(cursada.periodoCursadaFechaInicio), 'dd/MM/yyyy')}</td>\r\n <td>{format(new Date(cursada.periodoCursadaFechaFin), 'dd/MM/yyyy')}</td>\r\n <td>{format(new Date(cursada.periodoCursadaInicioInscripcio), 'dd/MM/yyyy')}</td>\r\n <td>{format(new Date(cursada.periodoCursadaFinInscripcion), 'dd/MM/yyyy')}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-cur/\" + cursada.cursadaCod+\"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(cursada.cursadaCod)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-cur/\" + cursada.cursadaCod + \"/1\"} >Detalles</Button>\r\n {(new Date(cursada.periodoCursadaFinInscripcion).setHours(0, 0, 0, 0) < new Date().setHours(0, 0, 0, 0) && cursada.generarActa)&& <Button className=\"editButton\" size=\"sm\" color=\"warning\" onClick={() => this.handleGenerarActa(cursada.cursadaCod)}>Acta</Button>}\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n\r\n handleItemSelect = id =>\r\n {\r\n console.log(id);\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Cursada</h1>\r\n {this.state.showErrorMessage && !this.state.loading ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-cur\">Nueva Cursada</Link>\r\n </p>\r\n <p>\r\n <Link to=\"/gen-cur\">Generar Cursadas</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese el perÃodo de cursada o la materia\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() { \r\n const response = await fetch('api/cur/Index',\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.cursadaCod - a.cursadaCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ materias: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/cur/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n\r\n async generarActa(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/acur/generate/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n window.alert(\"Acta Generada exitosamente, si la desea imprimir vaya al menú de Actas de Cursadas\");\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class MDPeriodoCursada extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDPeriodoCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return; \r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWPeriodoCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.periodos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.periodos.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .anioAcademicoDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n this.getPeriodoCursada(periodo.periodoCursadaDescripcion)\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n )\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.periodos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.periodos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>PerÃodo</th>\r\n <th>Año Académico</th>\r\n <th>Fecha de Inicio</th>\r\n <th>Fecha de Fin</th>\r\n <th>Fecha de Inicio Inscripción</th>\r\n <th>Fecha de Fin Inscripción</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(periodo =>\r\n <tr key={periodo.periodoCursadaCod}>\r\n <td>{this.getPeriodoCursada(periodo.periodoCursadaDescripcion)}</td>\r\n <td>{periodo.anioAcademicoDescripcion}</td>\r\n <td>{format(new Date(periodo.periodoCursadaFechaInicio),'dd/MM/yyyy')}</td>\r\n <td>{format(new Date(periodo.periodoCursadaFechaFin), 'dd/MM/yyyy')}</td>\r\n <td>{format(new Date(periodo.periodoCursadaInicioInscripcio), 'dd/MM/yyyy')}</td>\r\n <td>{format(new Date(periodo.periodoCursadaFinInscripcion),'dd/MM/yyyy')}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-pcr/\" + periodo.periodoCursadaCod + \"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(periodo.periodoCursadaCod)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-pcr/\" + periodo.periodoCursadaCod + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de PerÃodos de Cursadas</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-pcr\">Nuevo PerÃodo de Cursada</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Año Académico o PerÃodo\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/pcr/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.periodoCursadaCod - a.periodoCursadaCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ periodos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/pcr/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class MDInscripcionCursada extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDInscripcionCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.getEstadoInscripcion = this.getEstadoInscripcion.bind(this);\r\n this.handleModificarEstado = this.handleModificarEstado.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return; \r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWInscripcionCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.periodos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n getEstadoInscripcion(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"A\") {\r\n return \"Activa\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"P\") {\r\n return \"Pendiente\";\r\n }\r\n else if (periodoCursadaDescripcion == \"G\") {\r\n return \"Acta Generada\";\r\n }\r\n else {\r\n return \"Lista\";\r\n }\r\n }\r\n } \r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.periodos.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .materia\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n periodo\r\n .alumno\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n )\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.periodos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.periodos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Alumno</th>\r\n <th>Carrera</th>\r\n <th>Fecha de Inscripción</th>\r\n <th>Estado de Inscripción</th>\r\n <th>Materia</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(periodo =>\r\n <tr key={periodo.inscripcionCursadaCod}>\r\n <td>{periodo.alumno}</td>\r\n <td>{periodo.carrera}</td>\r\n <td>{format(new Date(periodo.inscripcionCursadaFechaHora),'dd/MM/yyyy')}</td>\r\n <td>{this.getEstadoInscripcion(periodo.inscripcionCursadaEstado)}</td>\r\n <td>{periodo.materia}</td>\r\n <td>\r\n <ButtonGroup>\r\n {(periodo.inscripcionCursadaEstado == \"P\" || periodo.inscripcionCursadaEstado == \"A\") && <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-ic/\" + periodo.inscripcionCursadaCod + \"/0\"} >Modificar</Button>}\r\n {(periodo.inscripcionCursadaEstado == \"P\" || periodo.inscripcionCursadaEstado == \"A\") && <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(periodo.inscripcionCursadaCod)}>Borrar</Button>}\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-ic/\" + periodo.inscripcionCursadaCod + \"/1\"} >Detalles</Button>\r\n {periodo.inscripcionCursadaEstado == \"P\" && <Button className=\"editButton\" color=\"primary\" size=\"sm\" onClick={() => this.handleModificarEstado(periodo.inscripcionCursadaCod)} >Activar</Button>}\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleModificarEstado = (id) => {\r\n this.changeItem(id);\r\n }\r\n\r\n async changeItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/ic/changeStatus/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Inscripciones a Cursadas</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-ic\">Nueva Inscripción a Cursada</Link>\r\n </p>\r\n <p>\r\n <Link to=\"/vic\">Validar Inscripciones Cursada por alumno</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Alumno o Materia\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/ic/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.inscripcionCursadaCod - a.inscripcionCursadaCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ periodos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/ic/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class MDInscripcionExamen extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDInscripcionExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.getEstadoInscripcion = this.getEstadoInscripcion.bind(this);\r\n this.changeAllInscriptions = this.changeAllInscriptions.bind(this);\r\n this.handleModificarEstado = this.handleModificarEstado.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return; \r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n handleModificarEstado = (id) => {\r\n this.changeAllInscriptions(id);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWInscripcionExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.periodos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n getEstadoInscripcion(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"A\") {\r\n return \"Activa\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"P\") {\r\n return \"Pendiente\";\r\n }\r\n else if (periodoCursadaDescripcion == \"G\") {\r\n return \"Acta Generada\";\r\n }\r\n else {\r\n return \"Lista\";\r\n }\r\n }\r\n } \r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.periodos.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .alumno\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n periodo\r\n .materia\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n periodo\r\n .periodoExamen\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n periodo\r\n .llamado\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n )\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.periodos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.periodos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Alumno</th>\r\n <th>Carrera</th>\r\n <th>Fecha de Inscripción</th>\r\n <th>Estado de Inscripción</th>\r\n <th>Materia</th>\r\n <th>Condición de Inscripción</th>\r\n <th>Fecha Examen</th>\r\n <th>PerÃodo de Examen</th>\r\n <th>Llamado</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(periodo =>\r\n <tr key={periodo.inscripcionExamenCod}>\r\n <td>{periodo.alumno}</td>\r\n <td>{periodo.carrera}</td>\r\n <td>{format(new Date(periodo.inscripcionExamenFechaHora),'dd/MM/yyyy')}</td>\r\n <td>{this.getEstadoInscripcion(periodo.inscripcionExamenEstado)}</td>\r\n <td>{periodo.materia}</td>\r\n <td>{periodo.inscripcionExamenCondicionInsc}</td>\r\n <td>{format(new Date(periodo.fechaExamen), 'dd/MM/yyyy')}</td>\r\n <td>{periodo.periodoExamen}</td>\r\n <td>{periodo.llamado}</td>\r\n <td>\r\n <ButtonGroup>\r\n {(periodo.inscripcionExamenEstado == \"P\" || periodo.inscripcionExamenEstado == \"A\") && <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-ie/\" + periodo.inscripcionExamenCod + \"/0\"} >Modificar</Button>}\r\n {(periodo.inscripcionExamenEstado == \"P\" || periodo.inscripcionExamenEstado == \"A\") && <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(periodo.inscripcionExamenCod)}>Borrar</Button>}\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-ie/\" + periodo.inscripcionExamenCod + \"/1\"} >Detalles</Button>\r\n {periodo.inscripcionExamenEstado == \"P\" && <Button className=\"editButton\" color=\"secondary\" size=\"sm\" onClick={() => this.handleModificarEstado(periodo.inscripcionExamenCod)} >Activar</Button>}\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n changeAllInscriptions = () =>\r\n {\r\n this.changeAll();\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Inscripciones a Examenes</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-ie\">Nueva Inscripción a Examen</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Alumno o Materia\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/ie/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.inscripcionExamenCod - a.inscripcionExamenCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ periodos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async changeItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/ie/changeStatus'+id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/ie/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class MDMesaExamen extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDMesaExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.handleGenerarActa = this.handleGenerarActa.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWMesaExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.materias.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n handleGenerarActa = (id) => {\r\n if (!window.confirm(\"¿Desea generar la/s Acta/s Examen?\"))\r\n return;\r\n else {\r\n this.generarActa(id);\r\n }\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.materias.filter(\r\n materia => {\r\n return (\r\n materia\r\n .materiaCarreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n materia\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n materia\r\n .periodoExamenDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n materia\r\n .periodoExamenLlamado\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n materia\r\n .anioAcademicoDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.materias.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.materias.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(cursadas) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Materia</th>\r\n <th>Carrera</th>\r\n <th>PerÃodo de Examen</th>\r\n <th>Llamado</th>\r\n <th>Año Académico</th>\r\n <th>Fecha de Examen</th>\r\n <th>Fecha de Inicio de Inscripción</th>\r\n <th>Fecha de Fin de Inscripción</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {cursadas.map(cursada =>\r\n <tr key={cursada.mesaExamenCod}>\r\n <td>{cursada.materiaCarreraNombre}</td>\r\n <td>{cursada.carreraNombre}</td>\r\n <td>{cursada.periodoExamenDescripcion}</td>\r\n <td>{cursada.periodoExamenLlamado}</td>\r\n <td>{cursada.anioAcademicoDescripcion}</td>\r\n <td>{format(new Date(cursada.mesaExamenFechaExamen), 'dd/MM/yyyy')}</td>\r\n <td>{format(new Date(cursada.mesaExamenFechaInicioInscripci), 'dd/MM/yyyy')}</td>\r\n <td>{format(new Date(cursada.mesaExamenFechaFinInscripcion), 'dd/MM/yyyy')}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-mex/\" + cursada.mesaExamenCod +\"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(cursada.mesaExamenCod)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-mex/\" + cursada.mesaExamenCod + \"/1\"} >Detalles</Button>\r\n {(new Date(cursada.mesaExamenFechaFinInscripcion).setHours(0, 0, 0, 0) < new Date().setHours(0, 0, 0, 0) && cursada.generarActa) && <Button className=\"editButton\" size=\"sm\" color=\"warning\" onClick={() => this.handleGenerarActa(cursada.mesaExamenCod)}>Acta</Button>}\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n\r\n handleItemSelect = id =>\r\n {\r\n console.log(id);\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Mesa de Examenes</h1>\r\n {this.state.showErrorMessage && !this.state.loading ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-mex\">Nueva Mesa de Examen</Link>\r\n </p>\r\n <p>\r\n <Link to=\"/cme\">Cargar Mesas de Examen desde archivo </Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese el perÃodo de examen o la materia\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() { \r\n const response = await fetch('api/mex/Index',\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => new Date(b.mesaExamenFechaExamen) - new Date(a.mesaExamenFechaExamen));\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ materias: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/mex/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n\r\n async generarActa(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/aex/generate/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n window.alert(\"Actas Generadas exitosamente, si las desea imprimir vaya al menú de Actas de Examenes\");\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class MDHistoriaAcademicaCursada extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDHistoriaAcademicaCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\", showMessageCargando:false };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.handleModificarEstado = this.handleModificarEstado.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return; \r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('HistoriaAcademicaCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.periodos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.periodos.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .alumnoNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) \r\n )\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.periodos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.periodos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n handleModificarEstado(){\r\n this.actualizarRegularidades()\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion.trim() == \"R\") {\r\n return \"Regular\";\r\n } else {\r\n if (periodoCursadaDescripcion.trim() == \"L\") {\r\n return \"Libre\";\r\n }\r\n }\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Alumno</th>\r\n <th>Carrera</th>\r\n <th>Materia</th>\r\n <th>Fecha de Cursada</th>\r\n <th>Resultado</th>\r\n <th>Fecha de Fin de Regularidad</th>\r\n <th>Observaciones</th>\r\n <th>Fecha de Vencimiento de Regularidad</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(periodo =>\r\n <tr key={periodo.historiaAcademicaCursadaCod}>\r\n <td>{periodo.alumnoNombre}</td>\r\n <td>{periodo.carrera}</td>\r\n <td>{periodo.materia}</td>\r\n <td>{format(new Date(periodo.historiaAcademicaFecha),'dd/MM/yyyy')}</td>\r\n <td>{this.getPeriodoCursada(periodo.historiaAcademicaResultado)}</td>\r\n <td>{periodo.historiaAcademicaResultado.trim() == \"R\" ? format(new Date(periodo.historiaAcademicaFechaFinRegul), 'dd/MM/yyyy'): \"\"}</td>\r\n <td>{periodo.historiaAcademicaCursadaObserv}</td>\r\n <td>{(periodo.historiaAcademicaCursadaFechaV && periodo.historiaAcademicaCursadaFechaV != '1753-01-01T00:00:00')? format(new Date(periodo.historiaAcademicaCursadaFechaV),'dd/MM/yyyy'): \"\"}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-hic/\" + periodo.historiaAcademicaCursadaCod + \"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(periodo.historiaAcademicaCursadaCod)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-hic/\" + periodo.historiaAcademicaCursadaCod + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Historias Académicas de Cursadas</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <div className=\"pa2\">\r\n <p>\r\n <Link to=\"/accur\">Actualizar Regularidades por Carrera</Link>\r\n </p>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Nombre del Alumno \"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/hac/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.historiaAcademicaCursadaCod - a.historiaAcademicaCursadaCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ periodos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/hac/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n\r\n async actualizarRegularidades() {\r\n this.setState({showMessageCargando:true});\r\n const response = await fetch('api/ic/actcur',\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n }\r\n this.setState({ showMessageCargando: false });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class MDActasCursadas extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDActasCursadas.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n searchData: [],\r\n searchInput: \"\",\r\n perPage: 10,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n alumnos:[]\r\n };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.imprimirActa = this.imprimirActa.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"Va a ser a cerrar el acta, ¿está seguro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n imprimirActa = (id) => {\r\n this.ImprimirActa(id);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWActasCursado');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.alumnos.filter(\r\n person => {\r\n return (\r\n person\r\n .materiaCarreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n this.getPeriodoCursada(person.periodoCursadaDescripcion)\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person.actaCursadoEstado\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n renderalumnosTable(alumnos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Materia</th>\r\n <th>Carrera</th>\r\n <th>Cursada</th>\r\n <th>Estado Acta</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {alumnos.map(alumno =>\r\n <tr key={alumno.actaCursadaNro}>\r\n <td>{alumno.materiaCarreraNombre}</td>\r\n <td>{alumno.carreraNombre}</td>\r\n <td>{this.getPeriodoCursada(alumno.periodoCursadaDescripcion.trim()) + \" - \" + alumno.anioAcademicoDescripcion.trim()}</td>\r\n <td>{alumno.actaCursadoEstado}</td>\r\n <td>\r\n <ButtonGroup>\r\n {alumno.actaCursadoEstado.trim() == \"ISN\" && <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"acur/load/\" + alumno.actaCursadaNro } >Cargar Resultados</Button>}\r\n {alumno.actaCursadoEstado.trim() == \"Cargada\" && <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(alumno.actaCursadaNro)}>Cerrar</Button>}\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/acur/watch/\" + alumno.actaCursadaNro} >Ver Acta</Button>\r\n {alumno.actaCursadoEstado.trim() == \"Pendiente\" && <Button className=\"editButton\" size=\"sm\" color=\"warning\" onClick={() => this.imprimirActa(alumno.actaCursadaNro)}>Imprimir Acta</Button>}\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Actas de Cursada</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div> \r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Nombre de la Materia o de la Carrera o PerÃodo de Cursada o el Estado del acta\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/acur/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.actaCursadaNro - a.actaCursadaNro);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ alumnos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async ImprimirActa(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/acur/print/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n const byteCharacters = atob(data.returnModel);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const blob = new Blob([byteArray], { type: 'application/pdf' });\r\n\r\n const link = document.createElement('a');\r\n link.href = window.URL.createObjectURL(blob);\r\n link.download = 'actaCursada.pdf';\r\n link.click();\r\n this.populateData();\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/acur/cerrar/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class MDHistoriaAcademicaExamen extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDHistoriaAcademicaExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return; \r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('HistoriaAcademicaExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.periodos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.periodos.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .alumnoNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) \r\n )\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.periodos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.periodos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion.trim() == \"R\") {\r\n return \"Regular\";\r\n } else {\r\n if (periodoCursadaDescripcion.trim() == \"L\") {\r\n return \"Libre\";\r\n }\r\n }\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Alumno</th>\r\n <th>Carrera</th>\r\n <th>Materia</th>\r\n <th>Fecha de Examen</th>\r\n <th>Nota</th>\r\n <th>Resultado</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(periodo =>\r\n <tr key={periodo.historiaAcademicaExamenCod}>\r\n <td>{periodo.alumnoNombre}</td>\r\n <td>{periodo.carrera}</td>\r\n <td>{periodo.materia}</td>\r\n <td>{format(new Date(periodo.historiaAcademicaFechaExamen),'dd/MM/yyyy')}</td>\r\n <td>{periodo.historiaAcademicaExamenNota > 0 ? periodo.historiaAcademicaExamenNota : \"\"}</td>\r\n <td>{periodo.historiaAcademicaExamenResulta}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-hex/\" + periodo.historiaAcademicaExamenCod + \"/0\"} >Modificar</Button>\r\n <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(periodo.historiaAcademicaExamenCod)}>Borrar</Button>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-hex/\" + periodo.historiaAcademicaExamenCod + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Historias Académicas de Examen</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Nombre del Alumno \"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/hex/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.historiaAcademicaExamenCod - a.historiaAcademicaExamenCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ periodos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/hex/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class MDActaExamen extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDActaExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n searchData: [],\r\n searchInput: \"\",\r\n perPage: 10,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n alumnos: []\r\n };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.imprimirActa = this.imprimirActa.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"Va a ser a cerrar el acta, ¿está seguro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n imprimirActa = (id) => {\r\n this.ImprimirActa(id);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWActasExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.alumnos.filter(\r\n person => {\r\n return (\r\n person\r\n .materiaCarreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person.actaExamenEstado\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(alumnos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Materia</th>\r\n <th>Carrera</th>\r\n <th>Mesa de Examen</th>\r\n <th>Fecha de Examen</th>\r\n <th>Estado Acta</th>\r\n <th>Tipo Acta</th>\r\n <th>Libro</th>\r\n <th>Número de Folio</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {alumnos.map(alumno =>\r\n <tr key={alumno.actaExamenNacta}>\r\n <td>{alumno.materiaCarreraNombre}</td>\r\n <td>{alumno.carreraNombre}</td>\r\n <td>{alumno.periodoExamenDescripcion.trim() + \" - \" + alumno.periodoExamenLlamado.trim() + \" - \" + alumno.anioAcademicoDescripcion.trim()}</td>\r\n <td>{format(new Date(alumno.mesaExamenFechaExamen), 'dd/MM/yyyy')}</td>\r\n <td>{alumno.actaExamenEstado}</td>\r\n <td>{alumno.actaExamenTipo == 'R' ? \"Regular\" : alumno.actaExamenTipo == 'L' ? \"Libre\" : alumno.actaExamenTipo == 'E' ? \"Equivalencia\" : \"\"}</td>\r\n <td>{alumno.actaExamenLibro}</td>\r\n <td>{alumno.actaExamenFolio}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/aex/watch/\" + alumno.actaExamenNacta} >Ver Acta</Button>\r\n {alumno.actaExamenEstado.trim() == \"ISN\" && <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/aex/load/\" + alumno.actaExamenNacta} >Cargar Resultados</Button>}\r\n {alumno.actaExamenEstado.trim() == \"Cargada\" && <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(alumno.actaExamenNacta)}>Cerrar</Button>}\r\n {alumno.actaExamenEstado.trim() == \"Pendiente\" && <Button className=\"editButton\" size=\"sm\" color=\"warning\" onClick={() => this.imprimirActa(alumno.actaExamenNacta)}>Imprimir Acta</Button>}\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-eae/\" + alumno.actaExamenNacta} >Modificar Encabezado</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Actas de Examen</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Nombre de la Materia o de la Carrera o el Estado del acta\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/aex/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => new Date(b.mesaExamenFechaExamen) - new Date(a.mesaExamenFechaExamen));\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ alumnos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async ImprimirActa(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/aex/print/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n const byteCharacters = atob(data.returnModel);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const blob = new Blob([byteArray], { type: 'application/pdf' });\r\n\r\n const link = document.createElement('a');\r\n link.href = window.URL.createObjectURL(blob);\r\n link.download = 'actaExamen.pdf';\r\n link.click();\r\n this.populateData();\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/aex/cerrar/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class AddAlumnos extends Component {\r\n static displayName = AddAlumnos.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: false, dni: \"\", name: \"\", showErrorMessage: false, success: false, errorMessage:\"\" };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDNIChangeInput = this.handleDNIChangeInput.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Los campos Documento y Nombre son obligatorios\" });\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWAlumnos');\r\n }\r\n\r\n handleDNIChangeInput = e => {\r\n this.setState({ dni: e.target.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nuevo Alumno</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\": \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> Documento de Identidad: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese DNI\"\r\n onChange={this.handleDNIChangeInput}\r\n disabled={this.state.loading}\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Nombre Completo: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Nombre Completo\"\r\n onChange={this.handleNameChangeInput}\r\n disabled={this.state.loading}\r\n required\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-alumnos\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-alumnos\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.dni.length > 0 && this.state.name.length > 0);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/Students/',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({ AlumnoNombre: this.state.name, AlumnoDni: this.state.dni })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage:errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class AddCarrera extends Component {\r\n static displayName = AddCarrera.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: false, anioImplementacion: new Date().getFullYear().toString(), name: \"\", showErrorMessage: false, success: false, errorMessage: \"\", resolucionMinisterial: \"\" };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleAnioImplementacion = this.handleAnioImplementacion.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleResolucionMinisterial = this.handleResolucionMinisterial.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.isOkToSave()) {\r\n this.saveCarrera();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWCarreras');\r\n }\r\n\r\n handleAnioImplementacion = e => {\r\n this.setState({ anioImplementacion: e.target.value });\r\n }\r\n\r\n handleResolucionMinisterial = e => {\r\n this.setState({ resolucionMinisterial: e.target.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nueva Carrera</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> Nombre Completo: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Nombre Completo\"\r\n onChange={this.handleNameChangeInput}\r\n disabled={this.state.loading}\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Año de Implementación: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Año Implementación\"\r\n onChange={this.handleAnioImplementacion}\r\n disabled={this.state.loading}\r\n value={this.state.anioImplementacion}\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Resolución Ministerial: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Resolución de Aprobación\"\r\n onChange={this.handleResolucionMinisterial}\r\n disabled={this.state.loading}\r\n required\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-carreras\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-carreras\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.anioImplementacion.length > 0 && this.state.name.length > 0 && this.state.resolucionMinisterial.length > 0);\r\n }\r\n\r\n async saveCarrera() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/Carreras/',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n CarreraNombre: this.state.name,\r\n CarreraAnioImplementacion: this.state.anioImplementacion,\r\n CarreraResolucionAprobacion: this.state.resolucionMinisterial,\r\n CarreraExtinta: 'N'\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class AddAnioAcademico extends Component {\r\n static displayName = AddAnioAcademico.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: false, descripcion: \"\", showErrorMessage: false, success: false, errorMessage:\"\" };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"El campo Año es obligatorio\" });\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWAnioAcademico');\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nuevo Año Académico</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\": \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> Año Académico: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Año\"\r\n onChange={this.handleDescripcionChangeInput}\r\n disabled={this.state.loading}\r\n required\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-anios\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-anios\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.descripcion.length > 0);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/anioAcademico/',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({ AnioAcademicoDescripcion: this.state.descripcion })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage:errorMessage });\r\n }\r\n}\r\n","import React from 'react';\r\nimport '../App.css';\r\nimport { Modal } from 'react-bootstrap';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport ReactPaginate from 'react-paginate';\r\n\r\nexport class LookupCarreras extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n carreras:[]\r\n }\r\n }\r\n handleModal() {\r\n this.setState({ show: !this.state.show });\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWCarreras');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.carreras.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleItemSelect = e => {\r\n this.props.selectItem(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(carreras) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Código</th>\r\n <th>Nombre</th>\r\n <th colSpan=\"1\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {carreras.map(carrera =>\r\n <tr key={carrera.carreraCod}>\r\n <td>{carrera.carreraCod}</td>\r\n <td>{carrera.carreraNombre}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleItemSelect(carrera.carreraCod + \"%\" + carrera.carreraNombre)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.carreras.filter(\r\n carrera => {\r\n return (\r\n carrera\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n carrera\r\n .carreraCod\r\n .toString()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.carreras.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.carreras.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione la Carrera</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Nombre de la Carrera\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/Carreras/Index',\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.carreraCod - a.carreraCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ carreras: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport Select from 'react-select';\r\nimport '../Tags.css';\r\nimport { LookupCarreras } from '../Carreras/LookupCarreras';\r\n\r\nconst options = [\r\n { value: '', label: '' },\r\n { value: 'S', label: 'Si' },\r\n { value: 'N', label: 'No' }\r\n];\r\n\r\nconst optionsCuatrimestre = [\r\n { value: '', label: '' },\r\n { value: '1', label: 'Primer Cuatrimestre' },\r\n { value: '2', label: 'Segundo Cuatrimestre' },\r\n { value: 'A', label: 'Anual' },\r\n];\r\n\r\nexport class AddMateria extends Component {\r\n static displayName = AddMateria.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n code: \"\",\r\n name: \"\",\r\n anioDictado: \"\",\r\n dictado: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n tagData: [{id:\"\",text:\"\"}],\r\n alumno: { alumnoDni: \"\", alumnoCodigo: 0, alumnoNombre: \"\" },\r\n carrera: { codigo: \"\", nombre: \"\" },\r\n showLookupStudent: false,\r\n showLookupCarreras: false,\r\n practica: \"\",\r\n value: { value: '', label: '' },\r\n valueDictado: { value: '', label: '' },\r\n name:\"\"\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDelete = this.handleDelete.bind(this);\r\n this.handleSelectCarreraItem = this.handleSelectCarreraItem.bind(this);\r\n this.handleShowCarreraLookup = this.handleShowCarreraLookup.bind(this);\r\n this.handleCodeChange = this.handleCodeChange.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleSelect = this.handleSelect.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n this.handleAnioChangeInput = this.handleAnioChangeInput.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWMaterias');\r\n }\r\n\r\n handleSelectCarreraItem = (e) =>\r\n {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupCarreras: false,\r\n carrera: {\r\n codigo: carreraProperties[0],\r\n nombre: carreraProperties[1]\r\n }\r\n });\r\n }\r\n\r\n handleSelect = e => {\r\n this.setState({ practica: e.value, value: e });\r\n }\r\n\r\n handleHideLookup = () =>\r\n {\r\n this.setState({showLookupCarreras:false});\r\n }\r\n\r\n handleShowCarreraLookup = () =>\r\n {\r\n this.setState({showLookupCarreras:true});\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleAnioChangeInput = e => {\r\n this.setState({ anioDictado: e.target.value });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ dictado: e.value, valueDictado:e });\r\n }\r\n\r\n handleCodeChange = e => {\r\n this.setState({ code: e.target.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({tagData:this.state.tagData.filter(tag =>tag.id !== i)});\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nueva Materia</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> Código Materia: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Código\"\r\n onChange={this.handleCodeChange}\r\n disabled={this.state.loading}\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Nombre Materia: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Nombre\"\r\n onChange={this.handleNameChangeInput}\r\n disabled={this.state.loading }\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Año Dictado: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"10\"\r\n placeholder=\"Ingrese Año\"\r\n onChange={this.handleAnioChangeInput}\r\n disabled={this.state.loading}\r\n required\r\n />\r\n </div>\r\n <div>\r\n <label> PerÃodo de Dictado: </label>\r\n <div className=\"dropdownDictado\">\r\n <Select\r\n value={this.state.valueDictado}\r\n options={optionsCuatrimestre}\r\n onChange={this.handleDictadoChangeInput}\r\n />\r\n </div>\r\n </div>\r\n <div>\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowCarreraLookup}> Seleccione la carrera</Button>\r\n : <label> Seleccione la carrera </label>}\r\n {this.state.showLookupCarreras ? <LookupCarreras selectItem={this.handleSelectCarreraItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <div className=\"pa2\">\r\n <label> Código Materia: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Carrera\"\r\n disabled={true}\r\n value={ this.state.carrera.codigo.trim() + \" - \"+ this.state.carrera.nombre.trim()}\r\n />\r\n </div>\r\n </div>\r\n <div>\r\n <label> Materia Práctica: </label>\r\n <div className=\"dropdown\">\r\n <Select\r\n value={this.state.value}\r\n options={options}\r\n onChange={this.handleSelect}\r\n />\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-mxc\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-mxc\" />\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.anioDictado.length > 0 && this.state.carrera.nombre.length >= 1 && this.state.name.length>0 && this.state.code.length>0 && this.state.dictado.length>0 && this.state.practica.length>0);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/Materia',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n MateriaCarreraCodigo: this.state.code,\r\n MateriaCarreraNombre: this.state.name,\r\n MateriaCarreraDictado: this.state.dictado,\r\n MateriaCarreraAnio: this.state.anioDictado,\r\n MateriaPractica: this.state.practica,\r\n CarreraCod : this.state.carrera.codigo\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../App.css';\r\n\r\nexport class LookupAnioAcademicos extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n anios: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\"\r\n }\r\n }\r\n\r\n handleModal() {\r\n this.setState({ show: !this.state.show })\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWAnioAcademico');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.anios.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleItemSelect = e => {\r\n this.props.selectItem(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(anios) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Descripción</th>\r\n <th colSpan=\"1\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {anios.map(anio =>\r\n <tr key={anio.anioAcademicoCod}>\r\n <td>{anio.anioAcademicoDescripcion}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleItemSelect(anio.anioAcademicoCod + \"%\" + anio.anioAcademicoDescripcion)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.anios.filter(\r\n anio => {\r\n return (\r\n anio\r\n .anioAcademicoDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione el Año Académico</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese el Año Académico\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/anioAcademico/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data === \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data === \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.anioAcademicoCod - a.anioAcademicoCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ anios: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { LookupAnioAcademicos } from '../AnioAcademico/LookupAnioAcademicos';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport es from 'date-fns/locale/es';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class AddPeriodoExamen extends Component {\r\n static displayName = AddPeriodoExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n tagData: [{ id: \"\", text: \"\" }],\r\n anio: { codigo: \"\", descripcion: \"\" },\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n llamado: \"\"\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStartDate = this.handleStartDate.bind(this);\r\n this.handleEndDate = this.handleEndDate.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWPeriodoExamen');\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var errorMessage = \"\";\r\n var datesOk = this.areDatesOk();\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (!datesOk) {\r\n if (errorMessage.length > 0) {\r\n errorMessage = errorMessage + \", la fecha de inicio no puede ser posterior a la fecha de fin\";\r\n } else {\r\n errorMessage = \"La fecha de inicio no puede ser posterior a la fecha de fin\"\r\n }\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (isOkToSave && datesOk) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ errorMessage: errorMessage });\r\n }\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleStartDate = (date) => {\r\n this.setState({ startDate: date });\r\n }\r\n\r\n handleEndDate = (date) => {\r\n this.setState({ endDate: date });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupCarreras: false,\r\n anio: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1]\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nuevo PerÃodo Examen</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> PerÃodo de Examen: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese PerÃodo de Examen\"\r\n onChange={this.handleDescripcionChangeInput}\r\n disabled={this.state.loading}\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Llamado: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Llamado\"\r\n onChange={this.handleLlamadoChangeInput}\r\n disabled={this.state.loading}\r\n required\r\n />\r\n </div>\r\n <div>\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Año Académico</Button>\r\n : <label> Seleccione el Año Académico </label>}\r\n {this.state.showLookupAnios ? <LookupAnioAcademicos selectItem={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.anio.descripcion}\r\n />\r\n <div>\r\n <label> Seleccione la Fecha de Inicio: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.startDate}\r\n onChange={this.handleStartDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Fin: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.endDate}\r\n onChange={this.handleEndDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-pex\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-pex\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.descripcion.length > 0 && this.state.llamado.length > 0 && this.state.anio.descripcion.length > 1 && this.state.startDate != null && this.state.endDate != null);\r\n }\r\n\r\n areDatesOk() {\r\n const startDate = new Date(this.state.startDate);\r\n const endDate = new Date(this.state.endDate);\r\n\r\n return (endDate > startDate);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/pex',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n PeriodoExamenDescripcion: this.state.descripcion,\r\n PeriodoExamenLlamado: this.state.llamado,\r\n PeriodoExamenFechaInicio: this.state.startDate,\r\n PeriodoExamenFechaFin: this.state.endDate,\r\n AnioAcademicoCod: this.state.anio.codigo\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../App.css';\r\n\r\nexport class LookupAlumnos extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n alumnos: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\"\r\n }\r\n }\r\n handleModal() {\r\n this.setState({ show: !this.state.show })\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWAlumnos');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleItemSelect = e => {\r\n this.props.selectStudent(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(alumnos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>DNI</th>\r\n <th>Nombre y Apellido </th>\r\n <th colSpan=\"1\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {alumnos.map(alumno =>\r\n <tr key={alumno.alumnoCodigo}>\r\n <td>{alumno.alumnoDni}</td>\r\n <td>{alumno.alumnoNombre}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleItemSelect(alumno.alumnoDni+\"%\"+alumno.alumnoNombre+\"%\"+alumno.alumnoCodigo)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.alumnos.filter(\r\n person => {\r\n return (\r\n person\r\n .alumnoNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person\r\n .alumnoDni\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n person\r\n .alumnoCodigo\r\n .toString()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione el Alumno</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese DNI o Apellido del alumno\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/Students/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.alumnoCodigo - a.alumnoCodigo);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ alumnos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../Tags.css';\r\nimport { LookupAlumnos } from '../Alumnos/LookupAlumnos';\r\nimport { LookupCarreras } from '../Carreras/LookupCarreras';\r\n\r\nexport class AddAlumnoCarrera extends Component {\r\n static displayName = AddAlumnoCarrera.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n dni: \"\",\r\n name: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n tagData: [{id:\"\",text:\"\"}],\r\n alumno: { alumnoDni: \"\", alumnoCodigo: 0, alumnoNombre: \"\" },\r\n showLookupStudent: false,\r\n showLookupCarreras: false\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDelete = this.handleDelete.bind(this);\r\n this.handleSelectStudentItem = this.handleSelectStudentItem.bind(this);\r\n this.handleSelectCarreraItem = this.handleSelectCarreraItem.bind(this);\r\n this.handleShowStudentLookup = this.handleShowStudentLookup.bind(this);\r\n this.handleShowCarreraLookup = this.handleShowCarreraLookup.bind(this);\r\n this.handleHideStudentLookup = this.handleHideStudentLookup.bind(this);\r\n this.handleHideCarreraLookup = this.handleHideCarreraLookup.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Los campos Alumno y Carrera son obligatorios\" });\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWAlumnosxCarrera');\r\n }\r\n\r\n handleSelectStudentItem = (e) =>\r\n {\r\n const studentProperties = e.split('%');\r\n this.setState(\r\n {\r\n alumno: {\r\n alumnoDni: studentProperties[0],\r\n alumnoNombre: studentProperties[1],\r\n alumnoCodigo: studentProperties[2]\r\n },\r\n showLookupStudent:false\r\n });\r\n }\r\n\r\n handleSelectCarreraItem = (e) =>\r\n {\r\n const carreraProperties = e.split('%');\r\n const tag = { id: carreraProperties[0], text: carreraProperties[1] }\r\n const tagData = this.state.tagData;\r\n tagData.push(tag);\r\n this.setState({showLookupCarreras: false, tagData:tagData});\r\n }\r\n\r\n rendleTags() {\r\n var tagData = this.state.tagData.slice(1);\r\n return (\r\n <div>\r\n {tagData.length > 0?\r\n tagData.map((tag) => (\r\n <li key={tag.id} className=\"tag\">\r\n <span className=\"tag-title\">{tag.text}</span>\r\n <span\r\n className=\"tag-close-icon\"\r\n onClick={() =>this.handleDelete(tag.id)}\r\n >\r\n x\r\n </span>\r\n </li>\r\n ))\r\n :\"\"}\r\n </div>\r\n );\r\n }\r\n\r\n handleShowStudentLookup = () =>\r\n {\r\n this.setState({showLookupStudent:true});\r\n }\r\n\r\n handleHideStudentLookup = () =>\r\n {\r\n this.setState({showLookupStudent:false}); \r\n }\r\n\r\n handleHideCarreraLookup = () =>\r\n {\r\n this.setState({showLookupCarreras:false}); \r\n }\r\n\r\n handleShowCarreraLookup = () =>\r\n {\r\n this.setState({showLookupCarreras:true});\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({tagData:this.state.tagData.filter(tag =>tag.id !== i)});\r\n }\r\n\r\n render() {\r\n var content = this.rendleTags();\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nuevo Alumno en Carrera</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowStudentLookup}> Seleccione el Alumno</Button> :\r\n <label> Seleccione el Alumno </label>}\r\n {this.state.showLookupStudent ? <LookupAlumnos selectStudent={this.handleSelectStudentItem} hideLookup={this.handleHideStudentLookup} />:\"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.alumnoDni}\r\n required\r\n />\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.alumnoNombre}\r\n required\r\n />\r\n \r\n </div>\r\n <div>\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowCarreraLookup}> Seleccione la carrera</Button>\r\n : <label> Seleccione la carrera </label>}\r\n {this.state.showLookupCarreras ? <LookupCarreras selectItem={this.handleSelectCarreraItem} hideLookup={this.handleHideCarreraLookup}/> : \"\"}\r\n <div className=\"tag-input\">\r\n <ul className=\"tags\">\r\n {content}\r\n </ul>\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-axc\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-axc\" />\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n const tags = this.state.tagData.slice(1);\r\n return (this.state.alumno.alumnoCodigo.length > 0 && tags.length > 0);\r\n }\r\n\r\n async saveStudent() {\r\n var object = [];\r\n this.state.tagData.slice(1).map((tag) =>\r\n {\r\n object.push({ AlumnoCodigo: parseInt(this.state.alumno.alumnoCodigo), CarreraCod:parseInt(tag.id)});\r\n });\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/axc',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify(object)\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../App.css';\r\n\r\nexport class LookupPeriodoExamen extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n anios: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\"\r\n }\r\n }\r\n\r\n handleModal() {\r\n this.setState({ show: !this.state.show })\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWPeriodoExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.anios.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleItemSelect = e => {\r\n this.props.selectItem(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Año Académico</th>\r\n <th>PerÃodo de Examen</th>\r\n <th>Llamado</th>\r\n <th colSpan=\"1\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(periodo =>\r\n <tr key={periodo.peridoExamenCod}>\r\n <td>{periodo.anioAcademicoDescripcion}</td>\r\n <td>{periodo.periodoExamenDescripcion}</td>\r\n <td>{periodo.periodoExamenLlamado}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleItemSelect(periodo.peridoExamenCod + \"%\" +\r\n periodo.periodoExamenDescripcion + \"%\" + periodo.periodoExamenLlamado + \"%\" + periodo.anioAcademicoDescripcion\r\n + \"%\" + periodo.periodoExamenFechaInicio + \"%\" + periodo.periodoExamenFechaFin)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.anios.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .anioAcademicoDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n periodo\r\n .periodoExamenDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n periodo\r\n .periodoExamenLlamado\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()))\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione el PerÃodo de Examen</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese el Año Académico o Descripción del perÃodo o llamado\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/pex/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.peridoExamenCod - a.peridoExamenCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ anios: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../App.css';\r\n\r\nexport class LookupMaterias extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n anios: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\"\r\n }\r\n }\r\n\r\n handleModal() {\r\n this.setState({ show: !this.state.show })\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWMaterias');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.anios.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n handleItemSelect = e => {\r\n this.props.selectItem(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(materias) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Código</th>\r\n <th>Nombre</th>\r\n <th>Carrera</th>\r\n <th>Año dictado</th>\r\n <th>PerÃodo de Dictado</th>\r\n <th colSpan=\"1\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {materias.map(materia =>\r\n <tr key={materia.materiaCarreraCod}>\r\n <td>{materia.materiaCarreraCodigo}</td>\r\n <td>{materia.materiaCarreraNombre}</td>\r\n <td>{materia.carreraNombre}</td>\r\n <td>{materia.materiaCarreraAnio}</td>\r\n <td>{materia.materiaCarreraDictado == '1' ? 'Primer Cuatrimestre' : materia.materiaCarreraDictado == '2' ? 'Segundo Cuatrimestre' : 'Anual'}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleItemSelect(materia.materiaCarreraCod + \"%\" +\r\n materia.materiaCarreraCodigo + \"%\" + materia.materiaCarreraNombre + \"%\" + materia.carreraNombre + \"%\" + materia.materiaCarreraDictado)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.anios.filter(\r\n materia => {\r\n return (\r\n materia\r\n .materiaCarreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n materia\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n materia\r\n .materiaCarreraCodigo\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.anios.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione la Materia</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese la materia o la carrera\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/MateriaCarrera/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.materiaCarreraCod - a.materiaCarreraCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ anios: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../Tags.css';\r\nimport { LookupPeriodoExamen } from '../PeriodoExamen/LookupPeriodoExamen';\r\nimport { LookupMaterias } from '../MateriaCarrera/LookupMaterias';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport es from 'date-fns/locale/es';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class AddMesaExamen extends Component {\r\n static displayName = AddMesaExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n code: \"\",\r\n name: \"\",\r\n anioDictado: \"\",\r\n dictado: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n periodo: { codigo: 0, descripcion: \"\", fechaInicioPeriodo: new Date(), fechafinPeriodo: new Date() },\r\n materia: { materiaCodigo: \"\", materiaNombre: \"\" },\r\n showLookupMaterias: false,\r\n showLookupPeriodoCursada: false,\r\n fechaExamen: new Date(),\r\n fechaInicioInscripcion: new Date(),\r\n fechaFinInscripcion: new Date(),\r\n botonHabilitado: true\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDelete = this.handleDelete.bind(this);\r\n this.handleDeletePeriodoCursada = this.handleDeletePeriodoCursada.bind(this);\r\n this.handleSelectCarreraItem = this.handleSelectCarreraItem.bind(this);\r\n this.handleShowCarreraLookup = this.handleShowCarreraLookup.bind(this);\r\n this.handleCodeChange = this.handleCodeChange.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleSelect = this.handleSelect.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n this.handleAnioChangeInput = this.handleAnioChangeInput.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleSelectPeriodoCursadaItem = this.handleSelectPeriodoCursadaItem.bind(this);\r\n this.handleShowPeriodoCursadaLookup = this.handleShowPeriodoCursadaLookup.bind(this);\r\n this.handleHidePeriodoCursadaLookup = this.handleHidePeriodoCursadaLookup.bind(this);\r\n this.handleFechaExamen = this.handleFechaExamen.bind(this);\r\n this.handleFechaInicioInscripcion = this.handleFechaInicioInscripcion.bind(this);\r\n this.handleFechaFinInscripcion = this.handleFechaFinInscripcion.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var okToSave = this.isOkToSave();\r\n var fechasOk = this.datesOK();\r\n var fechasEnPeriodo = true;\r\n\r\n if (okToSave && fechasOk && fechasEnPeriodo) {\r\n this.saveStudent();\r\n } else {\r\n var errorMessage = \"\";\r\n\r\n if (!okToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n } else\r\n if (!fechasOk) {\r\n errorMessage = \"Compruebe las fechas ingresadas, las fechas de inscripción deben ser menor a la fecha del examen\";\r\n }\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n }\r\n }\r\n\r\n handleSelectCarreraItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupMaterias: false,\r\n materia: {\r\n materiaCodigo: carreraProperties[0],\r\n materiaNombre: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[3].trim()\r\n }\r\n });\r\n }\r\n\r\n handleSelectPeriodoCursadaItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupPeriodoCursada: false,\r\n periodo: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[3].trim(),\r\n fechaInicioPeriodo: carreraProperties[4],\r\n fechaFinPeriodo: carreraProperties[5]\r\n }\r\n });\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWMesaExamen');\r\n }\r\n\r\n rendleTagsMateria() {\r\n var tagData = this.state.tagDataMateria.slice(1)\r\n return (\r\n <div>\r\n {tagData.length > 0 ?\r\n tagData.map((tag) => (\r\n <li key={tag.id} className=\"tag\">\r\n <span className=\"tag-title\">{tag.text}</span>\r\n <span\r\n className=\"tag-close-icon\"\r\n onClick={() => this.handleDelete(tag.id)}\r\n >\r\n x\r\n </span>\r\n </li>\r\n ))\r\n : \"\"}\r\n </div>\r\n );\r\n }\r\n\r\n handleFechaExamen = (date) => {\r\n this.setState({ fechaExamen: date });\r\n }\r\n\r\n handleFechaInicioInscripcion = (date) => {\r\n this.setState({ fechaInicioInscripcion: date });\r\n }\r\n\r\n handleFechaFinInscripcion = (date) => {\r\n this.setState({ fechaFinInscripcion: date });\r\n }\r\n\r\n handleSelect = e => {\r\n this.setState({ practica: e.value, value: e });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupMaterias: false });\r\n }\r\n\r\n handleHidePeriodoCursadaLookup = () => {\r\n this.setState({ showLookupPeriodoCursada: false });\r\n }\r\n\r\n handleShowCarreraLookup = () => {\r\n this.setState({ showLookupMaterias: true });\r\n }\r\n\r\n handleShowPeriodoCursadaLookup = () => {\r\n this.setState({ showLookupPeriodoCursada: true });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleAnioChangeInput = e => {\r\n this.setState({ anioDictado: e.target.value });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ dictado: e.value, valueDictado: e });\r\n }\r\n\r\n handleCodeChange = e => {\r\n this.setState({ code: e.target.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagDataMateria: this.state.tagDataMateria.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleDeletePeriodoCursada = (i) => {\r\n this.setState({ tagDataPeriodoCursada: this.state.tagDataPeriodoCursada.filter(tag => tag.id !== i) });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nueva Mesa de Examen</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div>\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowCarreraLookup}> Seleccione la materia</Button>\r\n : <label> Seleccione la materia </label>}\r\n {this.state.showLookupMaterias ? <LookupMaterias selectItem={this.handleSelectCarreraItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.materia.materiaNombre}\r\n />\r\n </div>\r\n <div>\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowPeriodoCursadaLookup}> Seleccione el perÃodo de Examen</Button>\r\n : <label> Seleccione el perÃodo de Examen </label>}\r\n {this.state.showLookupPeriodoCursada ? <LookupPeriodoExamen selectItem={this.handleSelectPeriodoCursadaItem} hideLookup={this.handleHidePeriodoCursadaLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.periodo.descripcion}\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Examen: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.fechaExamen}\r\n onChange={this.handleFechaExamen}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Inicio de Inscripción: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.fechaInicioInscripcion}\r\n onChange={this.handleFechaInicioInscripcion}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Fin de Inscripción: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.fechaFinInscripcion}\r\n onChange={this.handleFechaFinInscripcion}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()}> Confirmar </Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-mex\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-mex\" />\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.materia.materiaCodigo.length > 0 && this.state.periodo.descripcion.length > 0);\r\n }\r\n\r\n datesInPeriodo() {\r\n return (\r\n (new Date(this.state.periodo.fechaInicioPeriodo) <= this.state.fechaExamen && new Date(this.state.periodo.fechaFinPeriodo) >= this.state.fechaExamen) &&\r\n (new Date(this.state.periodo.fechaInicioPeriodo) <= this.state.fechaInicioInscripcion && new Date(this.state.periodo.fechaFinPeriodo) >= this.state.fechaInicioInscripcion) &&\r\n (new Date(this.state.periodo.fechaInicioPeriodo) <= this.state.fechaFinInscripcion && new Date(this.state.periodo.fechaFinPeriodo) >= this.state.fechaFinInscripcion)\r\n );\r\n }\r\n\r\n datesOK() {\r\n return (this.state.fechaInicioInscripcion <= this.state.fechaFinInscripcion && this.state.fechaFinInscripcion < this.state.fechaExamen)\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true, botonHabilitado: false });\r\n const response = await fetch('api/mex',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n MesaExamenFechaExamen: this.state.fechaExamen,\r\n MesaExamenFechaInicioInscripci: this.state.fechaInicioInscripcion,\r\n MesaExamenFechaFinInscripcion: this.state.fechaFinInscripcion,\r\n PeridoExamenCod: this.state.periodo.codigo,\r\n MateriaCarreraCod: this.state.materia.materiaCodigo\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage, botonHabilitado: true });\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../App.css';\r\n\r\nexport class LookupAlumnoCarrera extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n alumnos: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\"\r\n }\r\n }\r\n\r\n handleModal() {\r\n this.setState({ show: !this.state.show })\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWAlumnosxCarrera');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleItemSelect = e => {\r\n this.props.selectItem(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>DNI</th>\r\n <th>Alumno</th>\r\n <th>Carrera</th>\r\n <th colSpan=\"1\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(alumno =>\r\n <tr key={alumno.alumnoxCarreraCod}>\r\n <td>{alumno.alumnoNombre}</td>\r\n <td>{alumno.alumnoDni}</td>\r\n <td>{alumno.carreraNombre}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleItemSelect(alumno.alumnoxCarreraCod + \"%\"\r\n + alumno.alumnoNombre + \"%\" + alumno.carreraNombre + \"%\" + alumno.carreraCod)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.alumnos.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .alumnoDni\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n periodo\r\n .alumnoNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione el Alumno</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese el Nombre del alumno o el DNI\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/axc/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.alumnoxCarreraCod - a.alumnoxCarreraCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ alumnos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../App.css';\r\n\r\nexport class LookupCursadas extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n anios: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n carreraCod : props.carreraCod\r\n }\r\n }\r\n\r\n handleModal() {\r\n this.setState({ show: !this.state.show })\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWCursada');\r\n if (canAccess) {\r\n this.populateData(this.state.carreraCod);\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.anios.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n handleItemSelect = e => {\r\n this.props.selectItem(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(cursadas) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Materia</th>\r\n <th>Carrera</th>\r\n <th>PerÃodo de Cursada</th>\r\n <th>Año Académico</th>\r\n <th colSpan=\"1\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {cursadas.map(cursada =>\r\n <tr key={cursada.cursadaCod}>\r\n <td>{cursada.materiaNombre}</td>\r\n <td>{cursada.carreraNombre}</td>\r\n <td>{cursada.periodoCursadaDescripcion == '1' ? 'Primer Cuatrimestre' : cursada.periodoCursadaDescripcion == '2' ? 'Segundo Cuatrimestre' : 'Anual'}</td>\r\n <td>{cursada.anioAcademicoDescripcion}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleItemSelect(cursada.cursadaCod + \"%\" +\r\n cursada.materiaNombre + \"%\" + cursada.carreraNombre + \"%\" +\r\n cursada.carreraCod + \"%\" + cursada.anioAcademicoDescripcion + \"%\" + cursada.materiaCarreraCod)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.anios.filter(\r\n cursada => {\r\n return (\r\n cursada\r\n .materiaNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n cursada\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) \r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.anios.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.anios.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione la Cursada</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese la materia o la carrera\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData(carreraCod) {\r\n const response = await fetch('api/cur/activas/' + carreraCod, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.cursadaCod - a.cursadaCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ anios: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import es from 'date-fns/locale/es';\r\nimport React, { Component } from 'react';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport { LookupAlumnoCarrera } from '../AlumnoCarrera/LookupAlumnoCarrera';\r\nimport '../Buttons.css';\r\nimport { LookupCursadas } from '../Cursadas/LookupCursadas';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class AddInscripcionCursada extends Component {\r\n static displayName = AddInscripcionCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showCursada: false,\r\n tagDataAlumno: [{ id: \"\", text: \"\" }],\r\n tagDataCursada: [{ id: \"\", text: \"\" }],\r\n alumno: { codigo: \"\", descripcion: \"\" },\r\n cursada: { codigo: \"\", descripcion: \"\" },\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n carreraCursada: -1,\r\n materiaCodigo: \"\",\r\n ignorarCorrelatividad: false\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleSelectCursadaItem = this.handleSelectCursadaItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleHideLookup1 = this.handleHideLookup1.bind(this);\r\n this.handleCheckBox = this.handleCheckBox.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWInscripcionCursada');\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ llamado: e.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagDataAlumno: this.state.tagDataAlumno.filter(tag => tag.id !== i), carreraCursada: -1 });\r\n }\r\n\r\n handleDeleteCursada = (i) => {\r\n this.setState({ tagDataCursada: this.state.tagDataCursada.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showCursada: true });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n handleHideLookup1 = () => {\r\n this.setState({ showCursada: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupAnios: false,\r\n carreraCursada: Number(carreraProperties[3]),\r\n alumno: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1] + \" - \" + carreraProperties[2]\r\n }\r\n });\r\n }\r\n\r\n handleCheckBox = (e) => {\r\n this.setState({ ignorarCorrelatividad: e.target.checked });\r\n }\r\n\r\n handleSelectCursadaItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showCursada: false,\r\n materiaCodigo: carreraProperties[5],\r\n cursada: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[4].trim()\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nuevo Inscripción a Cursada</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div>\r\n\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Alumno</Button>\r\n : <label> Datos del Alumno </label>}\r\n {this.state.showLookupAnios ? <LookupAlumnoCarrera selectItem={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.descripcion}\r\n />\r\n </div>\r\n <div>\r\n {!this.state.loading && this.state.carreraCursada != -1 ? <Button color=\"link\" onClick={this.handleShowCursadaLookup}> Seleccione la Cursada</Button>\r\n : <label> Seleccione el Alumno antes de seleccionar la materia </label>}\r\n {this.state.showCursada ? <LookupCursadas carreraCod={this.state.carreraCursada} selectItem={this.handleSelectCursadaItem} hideLookup={this.handleHideLookup1} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.cursada.descripcion}\r\n />\r\n </div>\r\n <div>\r\n <input type=\"checkbox\" onClick={this.handleCheckBox} value={ this.state.ignorarCorrelatividad} /> Ignorar verificación de correlatividad\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-ic\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-ic\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.alumno.descripcion.length > 1 && this.state.cursada.descripcion.length > 1);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/ic',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n CursadaCod: this.state.cursada.codigo,\r\n AlumnoxCarreraCod: this.state.alumno.codigo,\r\n MateriaCarreraCod5: this.state.materiaCodigo,\r\n IgnorarCorrelatividad: this.state.ignorarCorrelatividad\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../App.css';\r\n\r\nexport class LookupCursadasAlumnos extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n anios: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n carreraCod: props.carreraCod,\r\n alumnoCarreraCod: props.alumnoCarreraCod\r\n }\r\n }\r\n\r\n handleModal() {\r\n this.setState({ show: !this.state.show })\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('InscribirCursada');\r\n if (canAccess) {\r\n this.populateData(this.state.carreraCod);\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.anios.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n handleItemSelect = e => {\r\n this.props.selectItem(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(cursadas) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Materia</th>\r\n <th>Carrera</th>\r\n <th>PerÃodo de Cursada</th>\r\n <th>Año Académico</th>\r\n <th colSpan=\"1\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {cursadas.map(cursada =>\r\n <tr key={cursada.cursadaCod}>\r\n <td>{cursada.materiaNombre}</td>\r\n <td>{cursada.carreraNombre}</td>\r\n <td>{cursada.periodoCursadaDescripcion == '1' ? 'Primer Cuatrimestre' : cursada.periodoCursadaDescripcion == '2' ? 'Segundo Cuatrimestre' : 'Anual'}</td>\r\n <td>{cursada.anioAcademicoDescripcion}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleItemSelect(cursada.cursadaCod + \"%\" +\r\n cursada.materiaNombre + \"%\" + cursada.carreraNombre + \"%\" +\r\n cursada.carreraCod + \"%\" + cursada.anioAcademicoDescripcion + \"%\" + cursada.materiaCarreraCod)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.anios.filter(\r\n cursada => {\r\n return (\r\n cursada\r\n .materiaNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n cursada\r\n .carreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.anios.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.anios.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione la Cursada</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese la materia o la carrera\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData(carreraCod) {\r\n const response = await fetch('api/cur/activas/' + carreraCod + '/' + this.state.alumnoCarreraCod, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.cursadaCod - a.cursadaCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ anios: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import es from 'date-fns/locale/es';\r\nimport Cookies from 'js-cookie';\r\nimport React, { Component } from 'react';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport Select from 'react-select';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport { LookupCursadasAlumnos } from '../Cursadas/LookupCursadasAlumnos';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class AddInscripcionCursadaAlumnos extends Component {\r\n static displayName = AddInscripcionCursadaAlumnos.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showCursada: false,\r\n tagDataAlumno: [{ value: '', label: '' }],\r\n tagDataCursada: [{ id: \"\", text: \"\", materiaCarreraCod3:\"\" }],\r\n alumno: 0,\r\n cursada: { codigo: \"\", descripcion: \"\" },\r\n carreraCursada: -1,\r\n materiaCodigo: \"\",\r\n ignorarCorrelatividad: false,\r\n error:false\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleSelectCursadaItem = this.handleSelectCursadaItem.bind(this);\r\n this.handleHideLookup1 = this.handleHideLookup1.bind(this);\r\n this.handleChangeAlumno = this.handleChangeAlumno.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('InscribirCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleChangeAlumno = (e) => {\r\n const carreraProperties = e.value.toString().split('-'); \r\n this.setState({ alumno: parseInt(carreraProperties[1]), carreraCursada: parseInt(carreraProperties[0]), tagDataCursada: [{ id: \"\", text: \"\", materiaCarreraCod3: \"\" }] });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagDataAlumno: this.state.tagDataAlumno.filter(tag => tag.id !== i), carreraCursada: -1 });\r\n }\r\n\r\n handleDeleteCursada = (i) => {\r\n this.setState({ tagDataCursada: this.state.tagDataCursada.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showCursada: true });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n handleHideLookup1 = () => {\r\n this.setState({ showCursada: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupAnios: false,\r\n carreraCursada: Number(carreraProperties[3]),\r\n alumno: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1] + \" - \" + carreraProperties[2]\r\n }\r\n });\r\n }\r\n\r\n handleSelectCursadaItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n const tag = {\r\n id: carreraProperties[0],\r\n text: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[4].trim(),\r\n materiaCarreraCod3: carreraProperties[5].trim()\r\n }\r\n const tagData = this.state.tagDataCursada;\r\n const existe = tagData.filter(x => x.id == carreraProperties[0]);\r\n if (existe.length == 0) {\r\n tagData.push(tag);\r\n this.setState({\r\n showCursada: false,\r\n tagDataCursada: tagData\r\n });\r\n } else {\r\n this.setState({\r\n showCursada: false\r\n });\r\n }\r\n }\r\n\r\n rendleTags() {\r\n var tagData = this.state.tagDataCursada.slice(1);\r\n return (\r\n <div>\r\n {tagData.length > 0 ?\r\n tagData.map((tag) => (\r\n <li key={tag.id} className=\"tag\">\r\n <span className=\"tag-title\">{tag.text}</span>\r\n <span\r\n className=\"tag-close-icon\"\r\n onClick={() => this.handleDeleteCursada(tag.id)}\r\n >\r\n x\r\n </span>\r\n </li>\r\n ))\r\n : \"\"}\r\n </div>\r\n );\r\n }\r\n\r\n render() {\r\n var content = this.rendleTags();\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nuevo Inscripción a Cursada</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div>\r\n <label> Seleccione la carrera: </label>\r\n <Select\r\n placeholder={'Seleccione la carrera'}\r\n options={this.state.tagDataAlumno}\r\n disabled={this.state.loading}\r\n onChange={this.handleChangeAlumno}\r\n />\r\n </div>\r\n <div>\r\n {!this.state.loading && this.state.carreraCursada != -1 ? <Button color=\"link\" onClick={this.handleShowCursadaLookup}> Seleccione la Cursada</Button>\r\n : <label> Seleccione la carrera para poder seleccionar la materia </label>}\r\n {this.state.showCursada ? <LookupCursadasAlumnos alumnoCarreraCod={this.state.alumno} carreraCod={this.state.carreraCursada} selectItem={this.handleSelectCursadaItem} hideLookup={this.handleHideLookup1} /> : \"\"}\r\n <div className=\"tag-input\">\r\n <ul className=\"tags\">\r\n {content}\r\n </ul>\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading && !this.state.error ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !this.state.error ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-ica\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-ica\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n const tags = this.state.tagDataCursada.slice(1);\r\n return (tags.length > 0 && this.state.alumno != 0);\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/axc/inscripcion/' + Cookies.get('alumnoCodigos'), {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = error;\r\n }\r\n var options = [];\r\n data.returnModel.sort((a, b) => a.carreraCod - b.carreraCod);\r\n for (var i = 0; i < data.returnModel.length;i++)\r\n {\r\n options.push({ value: data.returnModel[i].carreraCod + \" - \" + data.returnModel[i].alumnoxCarreraCod, label: data.returnModel[i].carreraNombre });\r\n }\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n tagDataAlumno: options\r\n });\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n var object = [];\r\n this.state.tagDataCursada.slice(1).map((tag) => {\r\n object.push({ Cursada: parseInt(tag.id), MateriaCarreraCod3: tag.materiaCarreraCod3 });\r\n });\r\n const response = await fetch('api/ic/multiple',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n AlumnoxCarreraCod: this.state.alumno,\r\n IgnorarCorrelatividad: this.state.ignorarCorrelatividad,\r\n Cursadas: object\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../App.css';\r\n\r\nexport class LookupPeriodoCursada extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n anios: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\"\r\n }\r\n }\r\n\r\n handleModal() {\r\n this.setState({ show: !this.state.show })\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWPeriodoCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.anios.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n handleItemSelect = e => {\r\n this.props.selectItem(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>PerÃodo</th>\r\n <th>Año Académico</th>\r\n <th colSpan=\"1\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(periodo =>\r\n <tr key={periodo.periodoCursadaCod}>\r\n <td>{this.getPeriodoCursada(periodo.periodoCursadaDescripcion)}</td>\r\n <td>{periodo.anioAcademicoDescripcion}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() =>\r\n this.handleItemSelect(periodo.periodoCursadaCod + \"%\" + this.getPeriodoCursada(periodo.periodoCursadaDescripcion)\r\n + \"%\" + periodo.anioAcademicoDescripcion + \"%\" + periodo.periodoCursadaDescripcion)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.anios.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .anioAcademicoDescripcion\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n this.getPeriodoCursada(periodo.periodoCursadaDescripcion)\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.alumnos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.alumnos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione el PerÃodo de Cursada</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese el Año Académico o PerÃodo de Cursada\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/pcr/Index', {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.periodoCursadaCod - a.periodoCursadaCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ anios: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../Tags.css';\r\nimport { LookupPeriodoCursada } from '../PeriodoCursada/LookupPeriodoCursada';\r\nimport { LookupMaterias } from '../MateriaCarrera/LookupMaterias';\r\n\r\nexport class AddCursada extends Component {\r\n static displayName = AddCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n code: \"\",\r\n name: \"\",\r\n anioDictado: \"\",\r\n dictado: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n tagDataMateria: [{ id: \"\", text: \"\" }],\r\n tagDataPeriodoCursada: [{ id: \"\", text: \"\" }],\r\n alumno: { alumnoDni: \"\", alumnoCodigo: 0, alumnoNombre: \"\" },\r\n materia: { materiaCarreraCodigo: \"\", descripcion: \"\" },\r\n cursada: { cursadacod: \"\", cursadadescripcion: \"\" },\r\n showLookupMaterias: false,\r\n showLookupPeriodoCursada: false,\r\n practica: \"\",\r\n value: { value: '', label: '' },\r\n valueDictado: { value: '', label: '' },\r\n name: \"\"\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDelete = this.handleDelete.bind(this);\r\n this.handleDeletePeriodoCursada = this.handleDeletePeriodoCursada.bind(this);\r\n this.handleSelectCarreraItem = this.handleSelectCarreraItem.bind(this);\r\n this.handleShowCarreraLookup = this.handleShowCarreraLookup.bind(this);\r\n this.handleCodeChange = this.handleCodeChange.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleSelect = this.handleSelect.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n this.handleAnioChangeInput = this.handleAnioChangeInput.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleSelectPeriodoCursadaItem = this.handleSelectPeriodoCursadaItem.bind(this);\r\n this.handleShowPeriodoCursadaLookup = this.handleShowPeriodoCursadaLookup.bind(this);\r\n this.handleHidePeriodoCursadaLookup = this.handleHidePeriodoCursadaLookup.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var dictadoCorrecto = this.state.dictado == this.state.anioDictado;\r\n var okToSave = this.isOkToSave();\r\n\r\n if (okToSave && dictadoCorrecto) {\r\n this.saveStudent();\r\n } else {\r\n var errorMessage = \"\";\r\n if (!okToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n } else {\r\n errorMessage = \"La materia seleccionada no se dicta en el perÃodo seleccionado\";\r\n }\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n }\r\n }\r\n\r\n handleSelectCarreraItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n const dictado = carreraProperties[4]\r\n this.setState({\r\n showLookupMaterias: false,\r\n dictado: dictado,\r\n materia: {\r\n materiaCarreraCodigo: carreraProperties[0],\r\n descripcion: carreraProperties[1] + \" - \" + carreraProperties[2] + \" - \" + carreraProperties[3]\r\n }\r\n });\r\n }\r\n\r\n handleSelectPeriodoCursadaItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n const periodo = carreraProperties[3]\r\n this.setState({\r\n showLookupPeriodoCursada: false,\r\n anioDictado: periodo,\r\n cursada: {\r\n cursadacod: carreraProperties[0],\r\n cursadadescripcion: carreraProperties[1] + \" - \" + carreraProperties[2]\r\n }\r\n });\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWCursada');\r\n }\r\n\r\n handleSelect = e => {\r\n this.setState({ practica: e.value, value: e });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupCarreras: false });\r\n }\r\n\r\n handleHidePeriodoCursadaLookup = () => {\r\n this.setState({ showLookupPeriodoCursada: false });\r\n }\r\n\r\n handleShowCarreraLookup = () => {\r\n this.setState({ showLookupMaterias: true });\r\n }\r\n\r\n handleShowPeriodoCursadaLookup = () => {\r\n this.setState({ showLookupPeriodoCursada: true });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleAnioChangeInput = e => {\r\n this.setState({ anioDictado: e.target.value });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ dictado: e.value, valueDictado: e });\r\n }\r\n\r\n handleCodeChange = e => {\r\n this.setState({ code: e.target.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagDataMateria: this.state.tagDataMateria.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleDeletePeriodoCursada = (i) => {\r\n this.setState({ tagDataPeriodoCursada: this.state.tagDataPeriodoCursada.filter(tag => tag.id !== i) });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nueva Cursada</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div>\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowCarreraLookup}> Seleccione la materia</Button>\r\n : <label> Seleccione la materia </label>}\r\n {this.state.showLookupMaterias ? <LookupMaterias selectItem={this.handleSelectCarreraItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.materia.descripcion}\r\n />\r\n </div>\r\n <div>\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowPeriodoCursadaLookup}> Seleccione el perÃodo de cursada</Button>\r\n : <label> Seleccione el perÃodo de cursada </label>}\r\n {this.state.showLookupPeriodoCursada ? <LookupPeriodoCursada selectItem={this.handleSelectPeriodoCursadaItem} hideLookup={this.handleHidePeriodoCursadaLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.cursada.cursadadescripcion}\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-cur\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-cur\" />\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n\r\n return (this.state.materia.descripcion.length > 0 && this.state.cursada.cursadadescripcion.length > 0);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/cur',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n MateriaCarreraCod: this.state.materia.materiaCarreraCodigo,\r\n PeriodoCursadaCod: this.state.cursada.cursadacod\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { LookupAnioAcademicos } from '../AnioAcademico/LookupAnioAcademicos';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport es from 'date-fns/locale/es';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport Select from 'react-select';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class AddPeriodoCursada extends Component {\r\n static displayName = AddPeriodoCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n tagData: [{ id: \"\", text: \"\" }],\r\n anio: { codigo: \"\", descripcion: \"\" },\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate : new Date(),\r\n llamado: \"\"\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStartDate = this.handleStartDate.bind(this);\r\n this.handleEndInscripcionDate = this.handleEndInscripcionDate.bind(this);\r\n this.handleStartInscriptionDate = this.handleStartInscriptionDate.bind(this);\r\n this.handleEndDate = this.handleEndDate.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWPeriodoCursada');\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var errorMessage = \"\";\r\n var datesOk = this.areDatesOk();\r\n var inscriptionDatesOk = this.areInscriptionDateOk();\r\n var isOkToSave = this.isOkToSave();\r\n var inscriptionDateInsidePeriodDates = this.areInscriptionDateInsidePeriodDates(); \r\n \r\n if (!isOkToSave)\r\n {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (!datesOk)\r\n {\r\n if (errorMessage.length > 0) {\r\n errorMessage = errorMessage + \", la fecha de inicio no puede ser posterior a la fecha de fin\";\r\n } else\r\n {\r\n errorMessage = \"La fecha de inicio no puede ser posterior a la fecha de fin\"\r\n }\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (!inscriptionDatesOk)\r\n {\r\n if (errorMessage.length > 0) {\r\n errorMessage = errorMessage + \", la fecha de inicio de inscripción no puede ser posterior a la fecha de fin\";\r\n } else {\r\n errorMessage = \"La fecha de inicio de inscripción no puede ser posterior a la fecha de fin\"\r\n }\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (!inscriptionDateInsidePeriodDates) {\r\n if (errorMessage.length > 0) {\r\n errorMessage = errorMessage + \", las fechas de inscripción deben estar dentro del rango de fechas ingresado para el perÃodo de cursada\";\r\n } else {\r\n errorMessage = \"Las fechas de inscripción deben estar dentro del rango de fechas ingresado para el perÃodo de cursada\"\r\n }\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (isOkToSave && datesOk && inscriptionDatesOk && inscriptionDateInsidePeriodDates) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({errorMessage: errorMessage });\r\n }\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ llamado: e.value });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleStartDate = (date) => {\r\n this.setState({ startDate: date });\r\n }\r\n\r\n handleEndDate = (date) => {\r\n this.setState({ endDate: date });\r\n }\r\n\r\n handleEndInscripcionDate = (date) => {\r\n this.setState({ endInscriptionDate: date });\r\n }\r\n\r\n handleStartInscriptionDate = (date) => {\r\n this.setState({ startInscriptionDate: date });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupCarreras: false,\r\n anio: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1]\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n var options = [\r\n { value: '', label: '' },\r\n { value: 'A', label: 'Anual' },\r\n { value: '1', label: 'Primer Cuatrimestre' },\r\n { value: '2', label: 'Segundo Cuatrimestre' }\r\n ];\r\n var defaultValuePosition = 0;\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nuevo PerÃodo de Cursada</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div>\r\n <label> Seleccione el PerÃodo de Cursada: </label>\r\n <Select\r\n options={options}\r\n defaultValue={options[defaultValuePosition]}\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n <div>\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Año Académico</Button>\r\n : <label> Seleccione el Año Académico </label>}\r\n {this.state.showLookupAnios ? <LookupAnioAcademicos selectItem={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.anio.descripcion}\r\n />\r\n <div>\r\n <label> Seleccione la Fecha de Inicio: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.startDate}\r\n onChange={this.handleStartDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Fin: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.endDate}\r\n onChange={this.handleEndDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Inicio de Inscripción: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.startInscriptionDate}\r\n onChange={this.handleStartInscriptionDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Fin de Inscripción: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.endInscriptionDate}\r\n onChange={this.handleEndInscripcionDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-pcr\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-pcr\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.llamado.length > 0 && this.state.anio.descripcion.length > 1 && this.state.startDate != null && this.state.endDate != null && this.state.endInscriptionDate != null && this.state.startInscriptionDate != null);\r\n }\r\n\r\n areDatesOk() {\r\n const startDate = new Date(this.state.startDate);\r\n const endDate = new Date(this.state.endDate);\r\n \r\n\r\n return (endDate > startDate);\r\n }\r\n\r\n areInscriptionDateOk() {\r\n const startInscripcionDate = new Date(this.state.startInscriptionDate);\r\n const endInscriptionDate = new Date(this.state.endInscriptionDate);\r\n\r\n return (endInscriptionDate > startInscripcionDate);\r\n }\r\n\r\n areInscriptionDateInsidePeriodDates() {\r\n const startDate = new Date(this.state.startDate);\r\n const endDate = new Date(this.state.endDate);\r\n const startInscripcionDate = new Date(this.state.startInscriptionDate);\r\n const endInscriptionDate = new Date(this.state.endInscriptionDate);\r\n\r\n return (endDate >= startInscripcionDate) && (startInscripcionDate >= startDate) && (endDate >= endInscriptionDate) &&(endInscriptionDate >= startDate);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/pcr',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n PeriodoCursadaFechaInicio: this.state.startDate,\r\n PeriodoCursadaDescripcion : this.state.llamado,\r\n PeriodoCursadaFechaFin: this.state.endDate,\r\n PeriodoCursadaInicioInscripcio: this.state.startInscriptionDate,\r\n PeriodoCursadaFinInscripcion: this.state.endInscriptionDate,\r\n AnioAcademicoCod: this.state.anio.codigo\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Modal } from 'react-bootstrap';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../App.css';\r\n\r\nexport class LookupMesaExamen extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleItemSelect = this.handleItemSelect.bind(this);\r\n this.state = {\r\n show: true,\r\n loading: true,\r\n searchData: [],\r\n anios: [],\r\n searchInput: \"\",\r\n perPage: 5,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n carreraCod : props.carreraCod\r\n }\r\n }\r\n\r\n handleModal() {\r\n this.setState({ show: !this.state.show })\r\n this.props.hideLookup();\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWMesaExamen');\r\n if (canAccess) {\r\n this.populateData(this.state.carreraCod);\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.anios.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleItemSelect = e => {\r\n this.props.selectItem(e);\r\n this.setState({ show: false });\r\n }\r\n\r\n renderalumnosTable(cursadas) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Materia</th>\r\n <th>Carrera</th>\r\n <th>PerÃodo de Examen</th>\r\n <th>Llamado</th>\r\n <th colSpan=\"1\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {cursadas.map(cursada =>\r\n <tr key={cursada.mesaExamenCod}>\r\n <td>{cursada.materiaCarreraNombre}</td>\r\n <td>{cursada.carreraNombre}</td>\r\n <td>{cursada.periodoExamenDescripcion}</td>\r\n <td>{cursada.periodoExamenLlamado}</td>\r\n <td>\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleItemSelect(\r\n cursada.mesaExamenCod + \"%\" +\r\n cursada.materiaCarreraNombre + \"%\" +\r\n cursada.carreraNombre + \"%\" +\r\n cursada.anioAcademicoDescripcion + \"%\" +\r\n cursada.periodoExamenDescripcion + \"%\" + \r\n cursada.periodoExamenLlamado + \"%\" +\r\n cursada.materiaCarreraCod)} >Seleccionar</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.anios.filter(\r\n cursada => {\r\n return (\r\n cursada\r\n .materiaCarreraNombre\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase()) ||\r\n cursada\r\n .materiaCarreraCod\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n );\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.anios.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.anios.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <Modal size=\"lg\" show={this.state.show} onHide={() => this.handleModal()}>\r\n <Modal.Header closeButton>Seleccione la Mesa de Examen</Modal.Header>\r\n <Modal.Body>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese la materia\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </Modal.Body>\r\n </Modal>\r\n </div>\r\n )\r\n }\r\n\r\n async populateData(carreraCod) {\r\n const response = await fetch('api/mex/activas/' + carreraCod, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.mesaExamenCod - a.mesaExamenCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ anios: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n} ","import es from 'date-fns/locale/es';\r\nimport React, { Component } from 'react';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport { LookupAlumnoCarrera } from '../AlumnoCarrera/LookupAlumnoCarrera';\r\nimport '../Buttons.css';\r\nimport { LookupMesaExamen } from '../MesaExamen/LookupMesaExamen';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport Select from 'react-select';\r\n\r\nconst optionsCuatrimestre = [\r\n { value: '', label: '' },\r\n { value: 'Regular', label: 'Regular' },\r\n { value: 'Libre', label: 'Libre' },\r\n { value: 'Equivalencia', label: 'Equivalencia' },\r\n];\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class AddInscripcionExamen extends Component {\r\n static displayName = AddInscripcionExamen.name;\r\n\r\n \r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showCursada: false,\r\n tagDataAlumno: [{ id: \"\", text: \"\" }],\r\n tagDataCursada: [{ id: \"\", text: \"\" }],\r\n alumno: { codigo: \"\", descripcion: \"\" },\r\n cursada: { codigo: \"\", descripcion: \"\" },\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate : new Date(),\r\n carreraCursada: -1,\r\n materiaCodigo: \"\",\r\n valueDictado: { value: '', label: '' },\r\n tagData: [{ id: \"\", text: \"\", materiaCarreraCod3:\"\"}],\r\n materiaCarreraCod3: \"\",\r\n ignorarCorrelatividad: false,\r\n ignorarRegularidad: false\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleSelectCursadaItem = this.handleSelectCursadaItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleHideLookup1 = this.handleHideLookup1.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n this.handleCheckBoxCorrelatividad = this.handleCheckBoxCorrelatividad.bind(this);\r\n this.handleDelete = this.handleDelete.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var isOkToSave = this.isOkToSave(); \r\n \r\n if (!isOkToSave) {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n } else\r\n {\r\n this.saveStudent();\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWInscripcionExamen');\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagData: this.state.tagData.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ dictado: e.value, valueDictado: e });\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ llamado: e.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagDataAlumno: this.state.tagDataAlumno.filter(tag => tag.id !== i), carreraCursada: -1});\r\n }\r\n\r\n handleDeleteCursada = (i) => {\r\n this.setState({ tagDataCursada: this.state.tagDataCursada.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showCursada: true });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n handleHideLookup1 = () => {\r\n this.setState({ showCursada: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupAnios: false,\r\n carreraCursada: Number(carreraProperties[3]),\r\n alumno: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1] + \" - \" + carreraProperties[2]\r\n }\r\n });\r\n }\r\n\r\n handleSelectCursadaItem = (e) =>\r\n {\r\n const carreraProperties = e.split('%');\r\n const tag = {\r\n id: carreraProperties[0],\r\n text: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[4].trim() + \" - \" + carreraProperties[5].trim() + \" - \" + carreraProperties[3].trim(),\r\n materiaCarreraCod3: carreraProperties[6]\r\n }\r\n const tagData = this.state.tagData;\r\n tagData.push(tag);\r\n this.setState({\r\n showCursada: false,\r\n tagData: tagData \r\n });\r\n }\r\n\r\n handleCheckBoxCorrelatividad = (e) => {\r\n this.setState({ ignorarCorrelatividad: e.target.checked });\r\n }\r\n\r\n handleCheckBoxRegularidad = (e) => {\r\n this.setState({ ignorarRegularidad: e.target.checked });\r\n }\r\n\r\n rendleTags() {\r\n var tagData = this.state.tagData.slice(1);\r\n return (\r\n <div>\r\n {tagData.length > 0 ?\r\n tagData.map((tag) => (\r\n <li key={tag.id} className=\"tag\">\r\n <span className=\"tag-title\">{tag.text}</span>\r\n <span\r\n className=\"tag-close-icon\"\r\n onClick={() => this.handleDelete(tag.id)}\r\n >\r\n x\r\n </span>\r\n </li>\r\n ))\r\n : \"\"}\r\n </div>\r\n );\r\n }\r\n\r\n render() {\r\n var content = this.rendleTags();\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Nuevo Inscripción a Examen</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span> \r\n <div>\r\n \r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Alumno</Button>\r\n : <label> Datos del Alumno </label>}\r\n {this.state.showLookupAnios ? <LookupAlumnoCarrera selectItem={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.descripcion}\r\n /> \r\n </div>\r\n <div>\r\n {!this.state.loading && this.state.carreraCursada != -1 ? <Button color=\"link\" onClick={this.handleShowCursadaLookup}> Seleccione la Mesa de Examen</Button>\r\n : <label> Seleccione el Alumno antes de seleccionar la materia </label>}\r\n {this.state.showCursada ? <LookupMesaExamen carreraCod={this.state.carreraCursada} selectItem={this.handleSelectCursadaItem} hideLookup={this.handleHideLookup1} /> : \"\"}\r\n <div className=\"tag-input\">\r\n <ul className=\"tags\">\r\n {content}\r\n </ul>\r\n </div>\r\n </div>\r\n <div>\r\n <label> Condición de Inscripción: </label>\r\n <div className=\"dropdownDictado\">\r\n <Select\r\n value={this.state.valueDictado}\r\n options={optionsCuatrimestre}\r\n onChange={this.handleDictadoChangeInput}\r\n />\r\n </div>\r\n </div>\r\n <div>\r\n <input type=\"checkbox\" onClick={this.handleCheckBoxCorrelatividad} value={this.state.ignorarCorrelatividad} /> Ignorar verificación de correlatividad\r\n </div>\r\n <div>\r\n <input type=\"checkbox\" onClick={this.handleCheckBoxRegularidad} value={this.state.ignorarRegularidad} /> Ignorar verificación de regularidad\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-ie\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-ie\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n const tags = this.state.tagData.slice(1);\r\n return (this.state.alumno.descripcion.length > 1 && tags.length > 0 && this.state.valueDictado.value != \"\");\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n var object = [];\r\n this.state.tagData.slice(1).map((tag) => {\r\n object.push({ Mesa: parseInt(tag.id), MateriaCarreraCod3: tag.materiaCarreraCod3 });\r\n });\r\n const response = await fetch('api/ie/multiple',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n AlumnoxCarreraCod:this.state.alumno.codigo,\r\n InscripcionExamenCondicionInsc: this.state.valueDictado.value,\r\n Mesas: object,\r\n IgnorarCorrelatividad: this.state.ignorarCorrelatividad,\r\n IgnorarRegularidad : this.state.ignorarRegularidad\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport { Redirect } from 'react-router';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport Select from 'react-select';\r\n\r\nconst optionsCuatrimestre = [\r\n { value: '', label: '' },\r\n { value: 'S', label: 'Si' },\r\n { value: 'N', label: 'No' }\r\n];\r\n\r\nexport class UpdateAlumno extends Component {\r\n static displayName = UpdateAlumno.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n dni: \"\",\r\n name: \"\",\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n id: this.props.match.params.id,\r\n errorMessage: \"\",\r\n details: this.props.match.params.details,\r\n valueDictado: { value: '', label: '' }\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDNIChangeInput = this.handleDNIChangeInput.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWAlumnos');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Los campos Documento y Nombre son obligatorios\" });\r\n }\r\n }\r\n }\r\n\r\n handleDNIChangeInput = e => {\r\n this.setState({ dni: e.target.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ descripcion: e.value, valueDictado: e });\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Alumno\" : \"Modificar Alumno\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{ title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> Documento de Identidad: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese DNI\"\r\n onChange={this.handleDNIChangeInput}\r\n disabled={this.state.loading||disable}\r\n value={this.state.dni}\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Nombre Completo: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Nombre Completo\"\r\n onChange={this.handleNameChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={this.state.name}\r\n required\r\n />\r\n </div>\r\n {!disable ?\r\n <div>\r\n <label> Papeles Completos: </label>\r\n <div className=\"dropdownDictado\">\r\n <Select\r\n value={this.state.valueDictado}\r\n options={optionsCuatrimestre}\r\n onChange={this.handleDictadoChangeInput}\r\n />\r\n </div>\r\n </div>\r\n :\r\n <div>\r\n <label> Papeles Completos: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"10\"\r\n onChange={this.handleDescripcionChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={this.state.descripcion}\r\n required\r\n />\r\n </div>}\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-alumnos\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n : <Redirect to=\"/md-alumnos\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.dni.length > 0 && this.state.name.length > 0);\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/Students/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n var defaultValuePractica = optionsCuatrimestre.filter(x => x.value.toString().trim() === data.returnModel.alumnoPapelesCompletos.trim());\r\n this.setState({\r\n dni: data.returnModel.alumnoDni,\r\n name: data.returnModel.alumnoNombre,\r\n errorMessage: errorMessage,\r\n valueDictado: defaultValuePractica,\r\n descripcion: data.returnModel.alumnoPapelesCompletos\r\n })\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/Students/',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({ AlumnoNombre: this.state.name.trim(), AlumnoDni: this.state.dni.trim(), AlumnoCodigo: parseInt(this.state.id), AlumnoPapelesCompletos: this.state.descripcion })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage:errorMessage});\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport Select from 'react-select';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nconst options = [\r\n {value: '',label:''},\r\n { value: 'S',label: 'Si' },\r\n { value: 'N', label: 'No' }\r\n];\r\n\r\nexport class UpdateCarrera extends Component {\r\n static displayName = UpdateCarrera.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n id: this.props.match.params.id,\r\n details: this.props.match.params.details,\r\n anioImplementacion: \"\",\r\n name: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n resolucionMinisterial: \"\",\r\n extinta: \"\",\r\n value: { value: '', label: '' }\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleAnioImplementacion = this.handleAnioImplementacion.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleResolucionMinisterial = this.handleResolucionMinisterial.bind(this);\r\n this.handleSelect = this.handleSelect.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWCarreras');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n if (this.isOkToSave()) {\r\n this.saveCarrera();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n }\r\n }\r\n }\r\n\r\n handleAnioImplementacion = e => {\r\n this.setState({ anioImplementacion: e.target.value });\r\n }\r\n\r\n handleResolucionMinisterial = e => {\r\n this.setState({ resolucionMinisterial: e.target.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleSelect = e =>\r\n {\r\n this.setState({extinta:e.value,value:e});\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Carrera\" : \"Modificar Carrera\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{ title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> Nombre Completo: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Nombre Completo\"\r\n onChange={this.handleNameChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={this.state.name}\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Año de Implementación: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Año Implementación\"\r\n onChange={this.handleAnioImplementacion}\r\n disabled={this.state.loading || disable}\r\n value={this.state.anioImplementacion}\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Resolución Ministerial: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Resolución de Aprobación\"\r\n onChange={this.handleResolucionMinisterial}\r\n disabled={this.state.loading || disable}\r\n value={this.state.resolucionMinisterial}\r\n required\r\n />\r\n </div>\r\n <div className=\"div\">\r\n <label> Carrera Extinta: </label>\r\n {disable ?\r\n <div className=\"label\">\r\n <label> {this.state.extinta == 'N'? 'No':'Si' }</label>\r\n </div>:\r\n <div className=\"dropdown\">\r\n <Select\r\n value={this.state.value}\r\n options={options}\r\n onChange={this.handleSelect}\r\n />\r\n </div>\r\n }\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-carreras\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-carreras\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.anioImplementacion.length > 0 && this.state.name.length > 0 && this.state.resolucionMinisterial.length > 0, this.state.extinta.length >0);\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/Carreras/' + this.state.id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n var defaultValue = options.filter(x => x.value.toString() === data.returnModel.carreraExtinta);\r\n this.setState({\r\n anioImplementacion: data.returnModel.carreraAnioImplementacion,\r\n name: data.returnModel.carreraNombre.trim(),\r\n extinta: data.returnModel.carreraExtinta,\r\n resolucionMinisterial: data.returnModel.carreraResolucionAprobacion.trim(),\r\n errorMessage: errorMessage,\r\n value: defaultValue\r\n });\r\n }\r\n\r\n async saveCarrera() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/Carreras/',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n CarreraNombre: this.state.name,\r\n CarreraAnioImplementacion: this.state.anioImplementacion,\r\n CarreraResolucionAprobacion: this.state.resolucionMinisterial,\r\n CarreraExtinta: this.state.extinta,\r\n CarreraCod: parseInt(this.state.id)\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport { Redirect } from 'react-router';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { LookupAlumnos } from '../Alumnos/LookupAlumnos';\r\nimport { LookupCarreras } from '../Carreras/LookupCarreras';\r\n\r\n\r\nexport class UpdateAlumnoCarrera extends Component {\r\n static displayName = UpdateAlumnoCarrera.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n dni: \"\",\r\n name: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n id: this.props.match.params.id,\r\n errorMessage: \"\",\r\n details: this.props.match.params.details,\r\n alumno: { alumnoDni: \"\", alumnoCodigo: 0, alumnoNombre: \"\" },\r\n carrera: { carreraCod: 0, carreraNombre: \"\" },\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDNIChangeInput = this.handleDNIChangeInput.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleHideStudentLookup = this.handleHideStudentLookup.bind(this);\r\n this.handleHideCarreraLookup = this.handleHideCarreraLookup.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWAlumnosxCarrera');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Los campos Alumno y Carrera son obligatorios\" });\r\n }\r\n }\r\n }\r\n\r\n handleDNIChangeInput = e => {\r\n this.setState({ dni: e.target.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleShowStudentLookup = () => {\r\n this.setState({ showLookupStudent: true });\r\n }\r\n\r\n handleShowCarreraLookup = () => {\r\n this.setState({ showLookupCarreras: true });\r\n }\r\n\r\n handleSelectStudentItem = (e) => {\r\n const studentProperties = e.split('%');\r\n this.setState(\r\n {\r\n alumno: {\r\n alumnoDni: studentProperties[0],\r\n alumnoNombre: studentProperties[1],\r\n alumnoCodigo: parseInt(studentProperties[2])\r\n },\r\n showLookupStudent: false\r\n });\r\n }\r\n\r\n handleSelectCarreraItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupCarreras: false,\r\n carrera: {\r\n carreraCod: parseInt(carreraProperties[0]),\r\n carreraNombre: carreraProperties[1]\r\n }\r\n });\r\n }\r\n\r\n handleHideStudentLookup = () => {\r\n this.setState({ showLookupStudent: false });\r\n }\r\n\r\n handleHideCarreraLookup = () => {\r\n this.setState({ showLookupCarreras: false });\r\n }\r\n\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Alumno por Carrera\" : \"Modificar Alumno por Carrera\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowStudentLookup}> Seleccione el Alumno</Button> :\r\n <label> Datos del Alumno </label>}\r\n {this.state.showLookupStudent ? <LookupAlumnos selectStudent={this.handleSelectStudentItem} hideLookup={this.handleHideStudentLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.alumnoDni}\r\n />\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.alumnoNombre}\r\n />\r\n </div>\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowCarreraLookup}> Seleccione la carrera</Button> :\r\n <label> Datos de la carrera </label>}\r\n {this.state.showLookupCarreras ? <LookupCarreras selectItem={this.handleSelectCarreraItem} hideLookup={this.handleHideCarreraLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.carrera.carreraNombre}\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-axc\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n : <Redirect to=\"/md-axc\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.alumno.alumnoDni.length > 0 && this.state.carrera.carreraNombre.length > 0);\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/axc/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n alumno: {\r\n alumnoDni: data.returnModel.alumnoDni,\r\n alumnoNombre: data.returnModel.alumnoNombre,\r\n alumnoCodigo: data.returnModel.alumnoCodigo,\r\n },\r\n carrera: {\r\n carreraNombre: data.returnModel.carreraNombre,\r\n carreraCod: data.returnModel.carreraCod\r\n }\r\n })\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/axc/update',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n },\r\n body: JSON.stringify({\r\n alumnoCodigo: this.state.alumno.alumnoCodigo,\r\n carreraCod: this.state.carrera.carreraCod,\r\n alumnoxCarreraCod: parseInt(this.state.id)\r\n })\r\n });\r\n var data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport { Redirect } from 'react-router';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport Select from 'react-select';\r\nimport { LookupCarreras } from '../Carreras/LookupCarreras';\r\n\r\nconst optionsCuatrimestre = [\r\n { value: '', label: '' },\r\n { value: '1', label: 'Primer Cuatrimestre' },\r\n { value: '2', label: 'Segundo Cuatrimestre' },\r\n { value: 'A', label: 'Anual' },\r\n];\r\n\r\nconst options = [\r\n { value: '', label: '' },\r\n { value: 'S', label: 'Si' },\r\n { value: 'N', label: 'No' }\r\n];\r\n\r\nexport class UpdateMateria extends Component {\r\n static displayName = UpdateMateria.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n dni: \"\",\r\n name: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n id: this.props.match.params.id,\r\n errorMessage: \"\",\r\n details: this.props.match.params.details,\r\n carrera: { carreraCod: 0, carreraNombre: \"\" },\r\n code: \"\",\r\n name: \"\",\r\n anioDictado: \"\",\r\n dictado: \"\",\r\n practica: \"\",\r\n valueDictado: [{ value: '', label: '' }],\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleAnioChangeInput = this.handleAnioChangeInput.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleCodeChangeInput = this.handleCodeChangeInput.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n this.handleSelect = this.handleSelect.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWMaterias');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Los campos Alumno y Carrera son obligatorios\" });\r\n }\r\n }\r\n }\r\n\r\n handleAnioChangeInput = e => {\r\n this.setState({ anioDictado: e.target.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleCodeChangeInput = e => {\r\n this.setState({ code: e.target.value });\r\n }\r\n\r\n handleHideLookup = () =>\r\n {\r\n this.setState({showLookupCarreras:false});\r\n }\r\n\r\n handleShowStudentLookup = () => {\r\n this.setState({ showLookupStudent: true });\r\n }\r\n\r\n handleShowCarreraLookup = () => {\r\n this.setState({ showLookupCarreras: true });\r\n }\r\n\r\n handleSelect = e => {\r\n this.setState({ practica: e.value, valuePractica: e });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ dictado: e.value, valueDictado: e });\r\n }\r\n\r\n handleSelectStudentItem = (e) => {\r\n const studentProperties = e.split('%');\r\n this.setState(\r\n {\r\n alumno: {\r\n alumnoDni: studentProperties[0],\r\n alumnoNombre: studentProperties[1],\r\n alumnoCodigo: parseInt(studentProperties[2])\r\n },\r\n showLookupStudent: false\r\n });\r\n }\r\n\r\n handleSelectCarreraItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupCarreras: false,\r\n carrera: {\r\n carreraCod: parseInt(carreraProperties[0]),\r\n carreraNombre: carreraProperties[1]\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Materia\" : \"Modificar Materia\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> Código Materia: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Código\"\r\n value={this.state.code}\r\n onChange={this.handleCodeChangeInput}\r\n disabled={this.state.loading || disable}\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Nombre Materia: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Nombre\"\r\n onChange={this.handleNameChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={ this.state.name}\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Año Dictado: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"10\"\r\n placeholder=\"Ingrese Año\"\r\n onChange={this.handleAnioChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={ this.state.anioDictado}\r\n required\r\n />\r\n </div>\r\n <div>\r\n <label> PerÃodo de Dictado: </label>\r\n {disable ?\r\n <div className=\"dropdownDictado\">\r\n <label> {this.state.valueDictado[0].value == '1' ? 'Primer Cuatrimestre' : this.state.valueDictado[0].value == '2'? 'Segundo Cuatrimestre':'Anual'}</label>\r\n </div> :\r\n <div className=\"dropdownDictado\">\r\n <Select\r\n value={this.state.valueDictado}\r\n options={optionsCuatrimestre}\r\n onChange={this.handleDictadoChangeInput}\r\n />\r\n </div>\r\n } \r\n </div>\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowCarreraLookup}> Seleccione la carrera</Button> :\r\n <label> Datos de la carrera </label>}\r\n {this.state.showLookupCarreras ? <LookupCarreras selectItem={this.handleSelectCarreraItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.carrera.carreraNombre}\r\n />\r\n </div>\r\n <div>\r\n <label> Materia Práctica: </label>\r\n {disable ?\r\n <div className=\"label\">\r\n <label> {this.state.practica == 'N' ? 'No' : 'Si'}</label>\r\n </div> :\r\n <div className=\"dropdown\">\r\n <Select\r\n value={this.state.valuePractica}\r\n options={options}\r\n onChange={this.handleSelect}\r\n />\r\n </div>\r\n }\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-mxc\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n : <Redirect to=\"/md-mxc\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.anioDictado.length > 0 && this.state.carrera.carreraNombre.length > 0 && this.state.name.length > 0 && this.state.code.length > 0 && this.state.dictado.length > 0 && this.state.practica.length > 0);\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/mxc/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n var defaultValuePractica = options.filter(x => x.value.toString() === data.returnModel.materiaPractica);\r\n var defaultValueAnioDictado = optionsCuatrimestre.filter(x => x.value.toString() === data.returnModel.materiaCarreraDictado);\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n carrera: {\r\n carreraNombre: data.returnModel.carreraNombre.trim(),\r\n carreraCodigo: data.returnModel.carreraCod\r\n },\r\n code: data.returnModel.materiaCarreraCodigo,\r\n name: data.returnModel.materiaCarreraNombre.trim(),\r\n anioDictado: data.returnModel.materiaCarreraAnio.trim(),\r\n dictado: data.returnModel.materiaCarreraDictado,\r\n practica: data.returnModel.materiaPractica,\r\n valuePractica : defaultValuePractica,\r\n valueDictado : defaultValueAnioDictado\r\n });\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/Materia',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n MateriaCarreraCod: this.state.id,\r\n MateriaCarreraNombre: this.state.name,\r\n MateriaCarreraDictado: this.state.dictado,\r\n MateriaCarreraAnio: this.state.anioDictado,\r\n MateriaPractica: this.state.practica,\r\n CarreraCod: this.state.carrera.carreraCodigo,\r\n MateriaCarreraCodigo: this.state.code\r\n })\r\n });\r\n var data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport { Redirect } from 'react-router';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class UpdateAnioAcademico extends Component {\r\n static displayName = UpdateAnioAcademico.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n id: this.props.match.params.id,\r\n errorMessage: \"\",\r\n details: this.props.match.params.details\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWAnioAcademico');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"El campo Descripción es obligatorio\" });\r\n }\r\n }\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Año Académico\" : \"Modificar Año Académico\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{ title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> Año Académico: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Año\"\r\n onChange={this.handleDescripcionChangeInput}\r\n disabled={this.state.loading||disable}\r\n value={this.state.descripcion}\r\n required\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-anios\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n : <Redirect to=\"/md-anios\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.descripcion.length > 0);\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/anioAcademico/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n this.setState({ descripcion: data.returnModel.anioAcademicoDescripcion,errorMessage:errorMessage })\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/anioAcademico/',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({ AnioAcademicoDescripcion: this.state.descripcion, AnioAcademicoCod: parseInt(this.state.id) })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage:errorMessage});\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { LookupAnioAcademicos } from '../AnioAcademico/LookupAnioAcademicos';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport es from 'date-fns/locale/es';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class UpdatePeriodoExamen extends Component {\r\n static displayName = UpdatePeriodoExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n tagData: [{ id: \"\", text: \"\" }],\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n llamado: \"\",\r\n anio: { anioAcademicoCod: 0, anioAcademicoDescripcion: \"\" },\r\n id: this.props.match.params.id,\r\n details: this.props.match.params.details\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStartDate = this.handleStartDate.bind(this);\r\n this.handleEndDate = this.handleEndDate.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWPeriodoExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n var errorMessage = \"\";\r\n var datesOk = this.areDatesOk();\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (!datesOk) {\r\n if (errorMessage.length > 0) {\r\n errorMessage = errorMessage + \", la fecha de inicio no puede ser posterior a la fecha de fin\";\r\n } else {\r\n errorMessage = \"La fecha de inicio no puede ser posterior a la fecha de fin\"\r\n }\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (isOkToSave && datesOk) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ errorMessage: errorMessage });\r\n }\r\n }\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/pex/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n anio: {\r\n anioAcademicoCod: data.returnModel.anioAcademicoCod,\r\n anioAcademicoDescripcion: data.returnModel.anioAcademicoDescripcion\r\n },\r\n descripcion: data.returnModel.periodoExamenDescripcion.trim(),\r\n llamado: data.returnModel.periodoExamenLlamado.trim(),\r\n startDate: new Date(data.returnModel.periodoExamenFechaInicio),\r\n endDate: new Date(data.returnModel.periodoExamenFechaFin),\r\n });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleStartDate = (date) => {\r\n this.setState({ startDate: date });\r\n }\r\n\r\n handleEndDate = (date) => {\r\n this.setState({ endDate: date });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const anioProperties = e.split('%');\r\n this.setState({\r\n anio: {\r\n anioAcademicoCod: anioProperties[0],\r\n anioAcademicoDescripcion: anioProperties[1]\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de PerÃodo de Examen\" : \"Modificar PerÃodo de Examen\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> PerÃodo de Examen: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese PerÃodo de Examen\"\r\n onChange={this.handleDescripcionChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={this.state.descripcion}\r\n required\r\n />\r\n </div>\r\n <div className=\"pa2\">\r\n <label> Llamado: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Llamado\"\r\n onChange={this.handleLlamadoChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={this.state.llamado}\r\n required\r\n />\r\n </div>\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Año Académico</Button> :\r\n <label> Datos del Año Académico </label>}\r\n {this.state.showLookupAnios ? <LookupAnioAcademicos selectItem={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.anio.anioAcademicoDescripcion}\r\n />\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Inicio: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.startDate}\r\n onChange={this.handleStartDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div> :\r\n <div>\r\n <label> Fecha de Inicio </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.startDate.toLocaleDateString()}\r\n />\r\n </div>}\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Fin: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.endDate}\r\n onChange={this.handleEndDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n : <div>\r\n <label> Fecha de Fin </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.endDate.toLocaleDateString()}\r\n />\r\n </div>}\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-pex\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-pex\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.descripcion.length > 0 && this.state.llamado.length > 0 && this.state.anio != null && this.state.anio.anioAcademicoDescripcion.length > 0 && this.state.startDate != null && this.state.endDate != null);\r\n }\r\n\r\n areDatesOk() {\r\n const startDate = new Date(this.state.startDate);\r\n const endDate = new Date(this.state.endDate);\r\n\r\n return (endDate > startDate);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/pex',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n PeridoExamenCod: parseInt(this.state.id),\r\n PeriodoExamenDescripcion: this.state.descripcion,\r\n PeriodoExamenLlamado: this.state.llamado,\r\n PeriodoExamenFechaInicio: this.state.startDate,\r\n PeriodoExamenFechaFin: this.state.endDate,\r\n AnioAcademicoCod: parseInt(this.state.anio.anioAcademicoCod)\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n } else { this.setState({ loading: false, success: success, errorMessage: errorMessage }); }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { LookupMaterias } from '../MateriaCarrera/LookupMaterias';\r\nimport { LookupPeriodoCursada } from '../PeriodoCursada/LookupPeriodoCursada';\r\n\r\nexport class UpdateCursada extends Component {\r\n static displayName = UpdateCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n dni: \"\",\r\n name: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n id: this.props.match.params.id,\r\n errorMessage: \"\",\r\n details: this.props.match.params.details,\r\n carrera: { carreraCod: \"\", carreraNombre: \"\" },\r\n periodoCursada: { codigo: 0, descripcion: \"\" },\r\n code: \"\",\r\n name: \"\",\r\n anioDictado: \"\",\r\n dictado: \"\",\r\n practica: \"\",\r\n showLookupStudent: false,\r\n showLookupCarreras: false\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStudentHideLookup = this.handleStudentHideLookup.bind(this);\r\n this.handleShowStudentLookup = this.handleShowStudentLookup.bind(this);\r\n this.handleShowCarreraLookup = this.handleShowCarreraLookup.bind(this);\r\n this.handleSelectStudentItem = this.handleSelectStudentItem.bind(this);\r\n this.handleSelectCarreraItem = this.handleSelectCarreraItem.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n var okToSave = this.isOkToSave();\r\n var dictadoCorrecto = this.state.carrera.dictado == this.state.periodoCursada.dictado;\r\n\r\n if (okToSave && dictadoCorrecto) {\r\n this.saveStudent();\r\n } else {\r\n var errorMessage = \"\";\r\n if (!okToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n } else {\r\n errorMessage = \"La materia seleccionada no se dicta en el perÃodo seleccionado\";\r\n }\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n }\r\n }\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupCarreras: false });\r\n }\r\n\r\n handleStudentHideLookup = () => {\r\n this.setState({ showLookupStudent: false });\r\n }\r\n\r\n handleShowStudentLookup = () => {\r\n this.setState({ showLookupStudent: true });\r\n }\r\n\r\n handleShowCarreraLookup = () => {\r\n this.setState({ showLookupCarreras: true });\r\n }\r\n\r\n handleSelectStudentItem = (e) => {\r\n const studentProperties = e.split('%');\r\n this.setState(\r\n {\r\n periodoCursada: {\r\n codigo: studentProperties[0],\r\n descripcion: studentProperties[1] + \"-\" + studentProperties[2],\r\n dictado: studentProperties[3].trim(),\r\n }, \r\n showLookupStudent: false\r\n });\r\n }\r\n\r\n handleSelectCarreraItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupCarreras: false,\r\n carrera: {\r\n carreraCodigo: carreraProperties[0],\r\n carreraNombre: carreraProperties[1] + \"-\" + carreraProperties[2],\r\n dictado: carreraProperties[4].trim(),\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Cursada\" : \"Modificar Cursada\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n\r\n\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowCarreraLookup}> Seleccione la Materia</Button> :\r\n <label> Datos de la Materia </label>}\r\n {this.state.showLookupCarreras ? <LookupMaterias selectItem={this.handleSelectCarreraItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.carrera.carreraNombre}\r\n />\r\n </div>\r\n\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowStudentLookup}> Seleccione el PerÃodo de Cursada</Button> :\r\n <label> Datos de la Cursada </label>}\r\n {this.state.showLookupStudent ? <LookupPeriodoCursada selectItem={this.handleSelectStudentItem} hideLookup={this.handleStudentHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.periodoCursada.descripcion}\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-cur\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n : <Redirect to=\"/md-cur\" />}\r\n </div>\r\n );\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.carrera.carreraNombre.length > 0 && this.state.periodoCursada.descripcion.length > 0);\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/cur/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n carrera: {\r\n carreraNombre: data.returnModel.materiaCarreraCod + \"-\" + data.returnModel.materiaNombre,\r\n carreraCodigo: data.returnModel.materiaCarreraCod,\r\n dictado: data.returnModel.materiaDictado\r\n },\r\n periodoCursada: {\r\n codigo: data.returnModel.periodoCursadaCod,\r\n descripcion: this.getPeriodoCursada(data.returnModel.periodoCursadaDescripcion) + \"-\" + data.returnModel.anioAcademicoDescripcion,\r\n dictado: data.returnModel.periodoCursadaDescripcion\r\n }\r\n });\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/cur',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n },\r\n body: JSON.stringify({\r\n CursadaCod: parseInt(this.state.id),\r\n PeriodoCursadaCod: parseInt(this.state.periodoCursada.codigo),\r\n MateriaCarreraCod: this.state.carrera.carreraCodigo.trim()\r\n })\r\n });\r\n var data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { LookupAnioAcademicos } from '../AnioAcademico/LookupAnioAcademicos';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport es from 'date-fns/locale/es';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport Select from 'react-select';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class UpdatePeriodoCursada extends Component {\r\n static displayName = UpdatePeriodoCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n tagData: [{ id: \"\", text: \"\" }],\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n llamado: \"\",\r\n anio: { anioAcademicoCod: 0, anioAcademicoDescripcion: \"\" },\r\n id: this.props.match.params.id,\r\n details: this.props.match.params.details\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStartDate = this.handleStartDate.bind(this);\r\n this.handleEndDate = this.handleEndDate.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleEndInscripcionDate = this.handleEndInscripcionDate.bind(this);\r\n this.handleStartInscriptionDate = this.handleStartInscriptionDate.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWPeriodoCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n var errorMessage = \"\";\r\n var datesOk = this.areDatesOk();\r\n var inscriptionDatesOk = this.areInscriptionDateOk();\r\n var isOkToSave = this.isOkToSave();\r\n var inscriptionDateInsidePeriodDates = this.areInscriptionDateInsidePeriodDates();\r\n\r\n if (!isOkToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (!datesOk) {\r\n if (errorMessage.length > 0) {\r\n errorMessage = errorMessage + \", la fecha de inicio no puede ser posterior a la fecha de fin\";\r\n } else {\r\n errorMessage = \"La fecha de inicio no puede ser posterior a la fecha de fin\"\r\n }\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (!inscriptionDatesOk) {\r\n if (errorMessage.length > 0) {\r\n errorMessage = errorMessage + \", la fecha de inicio de inscripción no puede ser posterior a la fecha de fin\";\r\n } else {\r\n errorMessage = \"La fecha de inicio de inscripción no puede ser posterior a la fecha de fin\"\r\n }\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (!inscriptionDateInsidePeriodDates) {\r\n if (errorMessage.length > 0) {\r\n errorMessage = errorMessage + \", las fechas de inscripción deben estar dentro del rango de fechas ingresado para el perÃodo de cursada\";\r\n } else {\r\n errorMessage = \"Las fechas de inscripción deben estar dentro del rango de fechas ingresado para el perÃodo de cursada\"\r\n }\r\n this.setState({ showErrorMessage: true });\r\n }\r\n\r\n if (isOkToSave && datesOk && inscriptionDatesOk && inscriptionDateInsidePeriodDates) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ errorMessage: errorMessage });\r\n }\r\n }\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/pcr/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n anio: {\r\n anioAcademicoCod: data.returnModel.anioAcademicoCod,\r\n anioAcademicoDescripcion: data.returnModel.anioAcademicoDescripcion\r\n },\r\n descripcion: data.returnModel.periodoCursadaDescripcion.trim(),\r\n startDate: new Date(data.returnModel.periodoCursadaFechaInicio),\r\n endDate: new Date(data.returnModel.periodoCursadaFechaFin),\r\n startInscriptionDate: new Date(data.returnModel.periodoCursadaInicioInscripcio),\r\n endInscriptionDate: new Date(data.returnModel.periodoCursadaFinInscripcion),\r\n });\r\n }\r\n\r\n handleEndInscripcionDate = (date) => {\r\n this.setState({ endInscriptionDate: date });\r\n }\r\n\r\n handleStartInscriptionDate = (date) => {\r\n this.setState({ startInscriptionDate: date });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleStartDate = (date) => {\r\n this.setState({ startDate: date });\r\n }\r\n\r\n handleEndDate = (date) => {\r\n this.setState({ endDate: date });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const anioProperties = e.split('%');\r\n this.setState({\r\n anio: {\r\n anioAcademicoCod: anioProperties[0],\r\n anioAcademicoDescripcion: anioProperties[1]\r\n }\r\n });\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ descripcion: e.value });\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var options = [\r\n { value: '', label: '' },\r\n { value: 'A', label: 'Anual' },\r\n { value: '1', label: 'Primer Cuatrimestre' },\r\n { value: '2', label: 'Segundo Cuatrimestre' }\r\n ];\r\n var defaultValue = options.filter(x => x.value == this.state.descripcion)[0];\r\n var title = disable ? \"Ver datos de PerÃodo de Cursada\" : \"Modificar PerÃodo de Cursada\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n\r\n {!disable ?\r\n <div>\r\n <label> Seleccione el PerÃodo de Cursada: </label>\r\n <Select\r\n options={options}\r\n value={defaultValue}\r\n disabled={this.state.loading || disable}\r\n onChange={this.handleChange}\r\n /></div>\r\n :\r\n <div>\r\n <label> PerÃodo de Cursada: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese PerÃodo de Cursada\"\r\n onChange={this.handleDescripcionChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={this.getPeriodoCursada(this.state.descripcion)}\r\n required\r\n />\r\n </div>}\r\n </div>\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Año Académico</Button> :\r\n <label> Datos del Año Académico </label>}\r\n {this.state.showLookupAnios ? <LookupAnioAcademicos selectItem={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.anio.anioAcademicoDescripcion}\r\n />\r\n </div>\r\n\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Inicio: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.startDate}\r\n onChange={this.handleStartDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div> :\r\n <div>\r\n <label> Fecha de Inicio </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.startDate.toLocaleDateString()}\r\n />\r\n </div>}\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Fin: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.endDate}\r\n onChange={this.handleEndDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n : <div>\r\n <label> Fecha de Fin </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.endDate.toLocaleDateString()}\r\n />\r\n </div>}\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Inicio de Inscripción: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.startInscriptionDate}\r\n onChange={this.handleStartInscriptionDate}\r\n disabled={this.state.loading || disable}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div> :\r\n <div>\r\n <label> Fecha de Inicio de Inscripción </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.startInscriptionDate.toLocaleDateString()}\r\n />\r\n </div>}\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Fin de Inscripción: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.endInscriptionDate}\r\n onChange={this.handleEndInscripcionDate}\r\n disabled={this.state.loading || disable}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n : <div>\r\n <label> Fecha de Fin de Inscripción </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.endInscriptionDate.toLocaleDateString()}\r\n />\r\n </div>}\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-pcr\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-pcr\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.descripcion.length > 0 && this.state.anio != null && this.state.anio.anioAcademicoDescripcion.length > 0 && this.state.startDate != null && this.state.endDate != null && this.state.endInscriptionDate != null && this.state.startInscriptionDate != null);\r\n }\r\n\r\n areDatesOk() {\r\n const startDate = new Date(this.state.startDate);\r\n const endDate = new Date(this.state.endDate);\r\n\r\n return (endDate > startDate);\r\n }\r\n\r\n areInscriptionDateOk() {\r\n const startInscripcionDate = new Date(this.state.startInscriptionDate);\r\n const endInscriptionDate = new Date(this.state.endInscriptionDate);\r\n\r\n return (endInscriptionDate > startInscripcionDate);\r\n }\r\n\r\n areInscriptionDateInsidePeriodDates() {\r\n const startDate = new Date(this.state.startDate);\r\n const endDate = new Date(this.state.endDate);\r\n const startInscripcionDate = new Date(this.state.startInscriptionDate);\r\n const endInscriptionDate = new Date(this.state.endInscriptionDate);\r\n\r\n return (endDate >= startInscripcionDate) && (startInscripcionDate >= startDate) && (endDate >= endInscriptionDate) && (endInscriptionDate >= startDate);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/pcr',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n PeriodoCursadaCod: parseInt(this.state.id),\r\n PeriodoCursadaDescripcion: this.state.descripcion,\r\n PeriodoCursadaFechaInicio: this.state.startDate,\r\n PeriodoCursadaFechaFin: this.state.endDate,\r\n PeriodoCursadaInicioInscripcio: this.state.startInscriptionDate,\r\n PeriodoCursadaFinInscripcion: this.state.endInscriptionDate,\r\n AnioAcademicoCod: parseInt(this.state.anio.anioAcademicoCod)\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { LookupCursadas } from '../Cursadas/LookupCursadas';\r\nimport { LookupAlumnoCarrera } from '../AlumnoCarrera/LookupAlumnoCarrera';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport es from 'date-fns/locale/es';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport Select from 'react-select';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class UpdateInscripcionCursada extends Component {\r\n static displayName = UpdateInscripcionCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showLookupCursada: false,\r\n tagData: [{ id: \"\", text: \"\" }],\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n llamado: \"\",\r\n cursada: { cursadaCodigo: 0, cursadaMateriaCodigo: \"\", cursadaMateriaNombre: \"\", cursadaPeriodo: \"\" },\r\n alumno: { alumnocarreraCod: 0, alumnoNombre: \"\", alumnoCarrera: 0, alumnoCarreraNombre: \"\" },\r\n id: this.props.match.params.id,\r\n details: this.props.match.params.details\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStartDate = this.handleStartDate.bind(this);\r\n this.handleEndDate = this.handleEndDate.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleEndInscripcionDate = this.handleEndInscripcionDate.bind(this);\r\n this.handleStartInscriptionDate = this.handleStartInscriptionDate.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.getEstadoInscripcion = this.getEstadoInscripcion.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleCursadaAnioItem = this.handleCursadaAnioItem.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWInscripcionCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n var errorMessage = \"\";\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/ic/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n cursada: {\r\n cursadaCodigo: data.returnModel.cursadaCod,\r\n cursadaMateriaCodigo: data.returnModel.cursadaCodNavigation.materiaCarreraCod,\r\n cursadaMateriaNombre: data.returnModel.cursadaCodNavigation.materiaNombre,\r\n cursadaPeriodo: this.getPeriodoCursada(data.returnModel.cursadaCodNavigation.periodoCursadaDescripcion) + \" - \" + data.returnModel.cursadaCodNavigation.anioAcademicoDescripcion\r\n },\r\n alumno: {\r\n alumnocarreraCod: data.returnModel.alumnoxCarreraCodNavigation.alumnoxCarreraCod,\r\n alumnoNombre: data.returnModel.alumnoxCarreraCodNavigation.alumnoNombre,\r\n alumnoCarrera: data.returnModel.alumnoxCarreraCodNavigation.carreraCod,\r\n alumnoCarreraNombre: data.returnModel.alumnoxCarreraCodNavigation.carreraNombre\r\n },\r\n descripcion: data.returnModel.inscripcionCursadaEstado\r\n });\r\n }\r\n\r\n handleEndInscripcionDate = (date) => {\r\n this.setState({ endInscriptionDate: date });\r\n }\r\n\r\n handleStartInscriptionDate = (date) => {\r\n this.setState({ startInscriptionDate: date });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showLookupCursada: true });\r\n }\r\n\r\n handleStartDate = (date) => {\r\n this.setState({ startDate: date });\r\n }\r\n\r\n handleEndDate = (date) => {\r\n this.setState({ endDate: date });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const anioProperties = e.split('%');\r\n this.setState({\r\n alumno: {\r\n alumnocarreraCod: anioProperties[0],\r\n alumnoNombre: anioProperties[1],\r\n alumnoCarrera: anioProperties[3],\r\n alumnoCarreraNombre: anioProperties[2]\r\n },\r\n showLookupAnios: false\r\n });\r\n }\r\n\r\n handleCursadaAnioItem = (e) => {\r\n const anioProperties = e.split('%');\r\n this.setState({\r\n cursada: {\r\n cursadaCodigo: anioProperties[0],\r\n cursadaMateriaCodigo: anioProperties[5],\r\n cursadaMateriaNombre: anioProperties[1],\r\n cursadaPeriodo: this.getPeriodoCursada(anioProperties[3]) + \"-\" + anioProperties[4]\r\n },\r\n showLookupCursada: false\r\n });\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ descripcion: e.value });\r\n }\r\n\r\n getEstadoInscripcion(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"A\") {\r\n return \"Activa\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"P\") {\r\n return \"Pendiente\";\r\n }\r\n else if (periodoCursadaDescripcion == \"G\") {\r\n return \"Acta Generada\";\r\n }\r\n else {\r\n return \"Lista\";\r\n }\r\n }\r\n } \r\n\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var options = [\r\n { value: '', label: '' },\r\n { value: 'A', label: 'Activa' },\r\n { value: 'P', label: 'Pendiente' }\r\n ];\r\n var defaultValue = options.filter(x => x.value == this.state.descripcion)[0];\r\n var title = disable ? \"Ver datos de Inscripción a Cursar\" : \"Modificar datos de Inscripción a Cursar\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Alumno</Button> :\r\n <label> Datos del Alumno </label>}\r\n {this.state.showLookupAnios ? <LookupAlumnoCarrera selectItem={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.alumnoNombre + \" - \" + this.state.alumno.alumnoCarreraNombre}\r\n />\r\n </div>\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowCursadaLookup}> Seleccione la Materia</Button> :\r\n <label> Datos de la Materia </label>}\r\n {this.state.showLookupCursada ? <LookupCursadas carreraCod={this.state.alumno.alumnoCarrera} selectItem={this.handleCursadaAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.cursada.cursadaMateriaNombre.trim() + \" - \" + this.state.cursada.cursadaPeriodo}\r\n />\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione el Estado: </label>\r\n <Select\r\n options={options}\r\n value={defaultValue}\r\n disabled={this.state.loading || disable}\r\n onChange={this.handleChange}\r\n /></div>\r\n :\r\n <div>\r\n <label> Estado de la Inscripción: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"10\"\r\n placeholder=\"Ingrese PerÃodo de Cursada\"\r\n onChange={this.handleDescripcionChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={this.getEstadoInscripcion(this.state.descripcion)}\r\n required\r\n />\r\n </div>}\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-ic\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-ic\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.descripcion.length > 0);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/ic',\r\n {\r\n method: 'PUT',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n CursadaCod: this.state.cursada.cursadaCodigo,\r\n AlumnoxCarreraCod: this.state.alumno.alumnocarreraCod,\r\n MateriaCarreraCod5: this.state.cursada.cursadaMateriaCodigo,\r\n InscripcionCursadaCod: this.state.id,\r\n InscripcionCursadaEstado: this.state.descripcion,\r\n IgnorarCorrelatividad: true\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { LookupMaterias } from '../MateriaCarrera/LookupMaterias';\r\nimport { LookupPeriodoExamen } from '../PeriodoExamen/LookupPeriodoExamen';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport es from 'date-fns/locale/es';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class UpdateMesaExamen extends Component {\r\n static displayName = UpdateMesaExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n dni: \"\",\r\n name: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n id: this.props.match.params.id,\r\n errorMessage: \"\",\r\n details: this.props.match.params.details,\r\n periodo: { codigo: 0, descripcion: \"\", fechaInicioPeriodo: new Date(), fechafinPeriodo: new Date() },\r\n materia: { materiaCodigo: \"\", materiaCod: \"\", materiaNombre: \"\", carrera: \"\" },\r\n mesaExamen: { fechaExamen: new Date(), fechaInicioInscripcion: new Date(), fechaFinInscripcion: new Date() },\r\n showLookupPeriodoCursada: false,\r\n showLookupCarreras: false\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStudentHideLookup = this.handleStudentHideLookup.bind(this);\r\n this.handleShowStudentLookup = this.handleShowStudentLookup.bind(this);\r\n this.handleShowCarreraLookup = this.handleShowCarreraLookup.bind(this);\r\n this.handleSelectStudentItem = this.handleSelectStudentItem.bind(this);\r\n this.handleSelectCarreraItem = this.handleSelectCarreraItem.bind(this);\r\n this.handleFechaExamen = this.handleFechaExamen.bind(this);\r\n this.handleFechaInicioInscripcion = this.handleFechaInicioInscripcion.bind(this);\r\n this.handleFechaFinInscripcion = this.handleFechaFinInscripcion.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWMesaExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n var okToSave = this.isOkToSave();\r\n var fechasOk = this.datesOK();\r\n var fechasEnPeriodo = true;\r\n\r\n if (this.state.details == 1) {\r\n okToSave = true;\r\n fechasOk = true;\r\n fechasEnPeriodo = true;\r\n }\r\n\r\n if (okToSave && fechasOk && fechasEnPeriodo) {\r\n this.saveStudent();\r\n } else {\r\n var errorMessage = \"\";\r\n\r\n if (!okToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n } else\r\n if (!fechasOk) {\r\n errorMessage = \"Compruebe las fechas ingresadas, las fechas de inscripción deben ser menor a la fecha del examen\";\r\n } else {\r\n if (!fechasEnPeriodo) {\r\n errorMessage = \"Compruebe que las fechas se encuentren dentro del perÃodo de examen seleccionado\";\r\n }\r\n }\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n }\r\n }\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupMaterias: false });\r\n }\r\n\r\n handleStudentHideLookup = () => {\r\n this.setState({ showLookupPeriodoCursada: false });\r\n }\r\n\r\n handleShowStudentLookup = () => {\r\n this.setState({ showLookupPeriodoCursada: true });\r\n }\r\n\r\n handleShowCarreraLookup = () => {\r\n this.setState({ showLookupMaterias: true });\r\n }\r\n\r\n handleFechaExamen = (date) => {\r\n this.setState({ mesaExamen: { fechaExamen: new Date(date.getMonth() + 1 + \"-\" + date.getDate() + \"-\" + date.getFullYear()), fechaInicioInscripcion: this.state.mesaExamen.fechaInicioInscripcion, fechaFinInscripcion: this.state.mesaExamen.fechaFinInscripcion } });\r\n }\r\n\r\n handleFechaInicioInscripcion = (date) => {\r\n this.setState({\r\n mesaExamen: { fechaInicioInscripcion: new Date(date.getMonth() + 1 + \"-\" + date.getDate() + \"-\" + date.getFullYear()), fechaExamen: this.state.mesaExamen.fechaExamen, fechaFinInscripcion: this.state.mesaExamen.fechaFinInscripcion }\r\n });\r\n }\r\n\r\n handleFechaFinInscripcion = (date) => {\r\n this.setState({ mesaExamen: { fechaFinInscripcion: new Date(date.getMonth() + 1 + \"-\" + date.getDate() + \"-\" + date.getFullYear()), fechaExamen: this.state.mesaExamen.fechaExamen, fechaInicioInscripcion: this.state.mesaExamen.fechaInicioInscripcion } });\r\n }\r\n\r\n handleSelectStudentItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupPeriodoCursada: false,\r\n periodo: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[3].trim(),\r\n fechaInicioPeriodo: carreraProperties[4],\r\n fechaFinPeriodo: carreraProperties[5]\r\n }\r\n });\r\n }\r\n\r\n handleSelectCarreraItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupMaterias: false,\r\n materia: {\r\n materiaCodigo: carreraProperties[0].trim(),\r\n materiaCod: carreraProperties[1].trim(),\r\n materiaNombre: carreraProperties[2].trim(),\r\n carrera: carreraProperties[3].trim()\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Mesa de Examen\" : \"Modificar Mesa de Examen\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n\r\n\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowCarreraLookup}> Seleccione la Materia</Button> :\r\n <label> Datos de la Materia </label>}\r\n {this.state.showLookupMaterias ? <LookupMaterias selectItem={this.handleSelectCarreraItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.materia.materiaCod + \" - \" + this.state.materia.materiaNombre + \" - \" + this.state.materia.carrera}\r\n />\r\n </div>\r\n\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowStudentLookup}> Seleccione el PerÃodo de Examen</Button> :\r\n <label> Datos del PerÃodo de Examen </label>}\r\n {this.state.showLookupPeriodoCursada ? <LookupPeriodoExamen selectItem={this.handleSelectStudentItem} hideLookup={this.handleStudentHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.periodo.descripcion}\r\n />\r\n </div>\r\n\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Examen: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.mesaExamen.fechaExamen}\r\n onChange={this.handleFechaExamen}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div> :\r\n <div>\r\n <label> Fecha de Examen </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.mesaExamen.fechaExamen.toLocaleDateString()}\r\n />\r\n </div>}\r\n </div>\r\n\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Inicio de Inscripción: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.mesaExamen.fechaInicioInscripcion}\r\n onChange={this.handleFechaInicioInscripcion}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div> :\r\n <div>\r\n <label> Fecha de Inicio </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.mesaExamen.fechaInicioInscripcion.toLocaleDateString()}\r\n />\r\n </div>}\r\n </div>\r\n\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Fin de Inscripción: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.mesaExamen.fechaFinInscripcion}\r\n onChange={this.handleFechaFinInscripcion}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div> :\r\n <div>\r\n <label> Fecha de Inicio </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.mesaExamen.fechaFinInscripcion.toLocaleDateString()}\r\n />\r\n </div>}\r\n </div>\r\n\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-mex\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n : <Redirect to=\"/md-mex\" />}\r\n </div>\r\n );\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.materia.materiaCodigo.length > 0 && this.state.periodo.descripcion.length > 0);\r\n }\r\n\r\n datesInPeriodo() {\r\n return (\r\n (new Date(this.state.periodo.fechaInicioPeriodo) <= this.state.mesaExamen.fechaExamen && new Date(this.state.periodo.fechafinPeriodo) >= this.state.mesaExamen.fechaExamen) &&\r\n (new Date(this.state.periodo.fechaInicioPeriodo) <= this.state.mesaExamen.fechaInicioInscripcion && new Date(this.state.periodo.fechafinPeriodo) >= this.state.mesaExamen.fechaInicioInscripcion) &&\r\n (new Date(this.state.periodo.fechaInicioPeriodo) <= this.state.mesaExamen.fechaFinInscripcion && new Date(this.state.periodo.fechafinPeriodo) >= this.state.mesaExamen.fechaFinInscripcion)\r\n );\r\n }\r\n\r\n datesOK() {\r\n return (this.state.mesaExamen.fechaInicioInscripcion <= this.state.mesaExamen.fechaFinInscripcion && this.state.mesaExamen.fechaFinInscripcion < this.state.mesaExamen.fechaExamen)\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/mex/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n var fechaExamen = new Date(data.returnModel.mesaExamenFechaExamen);\r\n var fechaInicioInscripcion = new Date(data.returnModel.mesaExamenFechaInicioInscripci);\r\n var fechaFinInscripcion = new Date(data.returnModel.mesaExamenFechaFinInscripcion);\r\n var fechaPeriodoInicio = new Date(data.returnModel.periodoExamenFechaInicio);\r\n var fechaPeriodoFin = new Date(data.returnModel.periodoExamenFechaFin); \r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n periodo: {\r\n codigo: data.returnModel.peridoExamenCod,\r\n descripcion: data.returnModel.periodoExamenDescripcion.trim() + \" - \" +\r\n data.returnModel.periodoExamenLlamado.trim() + \" - \" +\r\n data.returnModel.anioAcademicoDescripcion,\r\n fechaInicioPeriodo: new Date(fechaPeriodoInicio.getMonth() + 1 + \"-\" + fechaPeriodoInicio.getDate() + \"-\" + fechaPeriodoInicio.getFullYear()),\r\n fechafinPeriodo: new Date(fechaPeriodoFin.getMonth() + 1 + \"-\" + fechaPeriodoFin.getDate() + \"-\" + fechaPeriodoFin.getFullYear()) \r\n },\r\n materia: { \r\n materiaCodigo: data.returnModel.materiaCarreraCod.trim(),\r\n materiaNombre: data.returnModel.materiaCarreraNombre.trim(),\r\n materiaCod: data.returnModel.materiaCarreraCod.trim(),\r\n carrera: data.returnModel.carreraNombre.trim()\r\n },\r\n mesaExamen: { \r\n fechaExamen: new Date(fechaExamen.getMonth() + 1 + \"-\" + fechaExamen.getDate() + \"-\" + fechaExamen.getFullYear()),\r\n fechaInicioInscripcion: new Date(fechaInicioInscripcion.getMonth() + 1 + \"-\" + fechaInicioInscripcion.getDate() + \"-\" + fechaInicioInscripcion.getFullYear()),\r\n fechaFinInscripcion: new Date(fechaFinInscripcion.getMonth() + 1 + \"-\" + fechaFinInscripcion.getDate() + \"-\" + fechaFinInscripcion.getFullYear())\r\n }\r\n });\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/mex',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n MesaExamenCod: parseInt(this.state.id),\r\n PeridoExamenCod: this.state.periodo.codigo,\r\n MateriaCarreraCod: this.state.materia.materiaCodigo.trim(),\r\n InicioFechaInscripcion: this.state.mesaExamen.fechaInicioInscripcion.getFullYear() + '-'\r\n + (\"0\" + (this.state.mesaExamen.fechaInicioInscripcion.getMonth() + 1)).slice(-2) + '-' +\r\n (\"0\" + this.state.mesaExamen.fechaInicioInscripcion.getDate()).slice(-2),\r\n FinFechaInscripcion: this.state.mesaExamen.fechaFinInscripcion.getFullYear() + '-'\r\n + (\"0\" + (this.state.mesaExamen.fechaFinInscripcion.getMonth() + 1)).slice(-2) + '-' +\r\n (\"0\" + this.state.mesaExamen.fechaFinInscripcion.getDate()).slice(-2),\r\n FechaExamenInscripcion: this.state.mesaExamen.fechaExamen.getFullYear() + '-'\r\n + (\"0\" + (this.state.mesaExamen.fechaExamen.getMonth() + 1)).slice(-2) + '-' +\r\n (\"0\" + this.state.mesaExamen.fechaExamen.getDate()).slice(-2)\r\n })\r\n });\r\n var data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { LookupMesaExamen } from '../MesaExamen/LookupMesaExamen';\r\nimport { LookupAlumnoCarrera } from '../AlumnoCarrera/LookupAlumnoCarrera';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport es from 'date-fns/locale/es';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport Select from 'react-select';\r\n\r\nregisterLocale('es', es)\r\n\r\nconst optionsCuatrimestre = [\r\n { value: '', label: '' },\r\n { value: 'Regular', label: 'Regular' },\r\n { value: 'Libre', label: 'Libre' },\r\n { value: 'Equivalencia', label: 'Equivalencia' },\r\n];\r\n\r\n\r\nexport class UpdateInscripcionExamen extends Component {\r\n static displayName = UpdateInscripcionExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showLookupCursada: false,\r\n tagData: [{ id: \"\", text: \"\" }],\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n llamado: \"\",\r\n valueDictado: { value: '', label: '' },\r\n cursada: { cursadaCodigo: 0, cursadaMateriaCodigo: \"\", cursadaMateriaNombre: \"\", cursadaPeriodo: \"\" },\r\n alumno: { alumnocarreraCod: 0, alumnoNombre: \"\", alumnoCarrera: 0, alumnoCarreraNombre: \"\" },\r\n id: this.props.match.params.id,\r\n details: this.props.match.params.details\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStartDate = this.handleStartDate.bind(this);\r\n this.handleEndDate = this.handleEndDate.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleEndInscripcionDate = this.handleEndInscripcionDate.bind(this);\r\n this.handleStartInscriptionDate = this.handleStartInscriptionDate.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.getEstadoInscripcion = this.getEstadoInscripcion.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleSelectCursadaItem = this.handleSelectCursadaItem.bind(this);\r\n this.handleHideLookup1 = this.handleHideLookup1.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWInscripcionExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n var errorMessage = \"\";\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ dictado: e.value, valueDictado: e });\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/ie/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n var defaultValuePractica = optionsCuatrimestre.filter(x => x.value.toString().trim() === data.returnModel.inscripcionExamenCondicionInsc.trim());\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n dictado: data.returnModel.inscripcionExamenCondicionInsc.trim(),\r\n cursada: {\r\n cursadaCodigo: data.returnModel.mesaExamenCod,\r\n cursadaMateriaCodigo: data.returnModel.mesaExamenCodNavigation.materiaCarreraCod,\r\n cursadaMateriaNombre: data.returnModel.mesaExamenCodNavigation.materiaCarreraNombre,\r\n cursadaPeriodo: data.returnModel.mesaExamenCodNavigation.periodoExamenDescripcion.trim() + \" - \" + data.returnModel.mesaExamenCodNavigation.periodoExamenLlamado.trim() + \" - \" + data.returnModel.mesaExamenCodNavigation.anioAcademicoDescripcion.trim()\r\n },\r\n alumno: {\r\n alumnocarreraCod: data.returnModel.alumnoxCarreraCodNavigation.alumnoxCarreraCod,\r\n alumnoNombre: data.returnModel.alumnoxCarreraCodNavigation.alumnoNombre,\r\n alumnoCarrera: data.returnModel.alumnoxCarreraCodNavigation.carreraCod,\r\n alumnoCarreraNombre: data.returnModel.alumnoxCarreraCodNavigation.carreraNombre\r\n },\r\n descripcion: data.returnModel.inscripcionExamenCondicionInsc,\r\n valueDictado: defaultValuePractica\r\n });\r\n }\r\n\r\n handleEndInscripcionDate = (date) => {\r\n this.setState({ endInscriptionDate: date });\r\n }\r\n\r\n handleStartInscriptionDate = (date) => {\r\n this.setState({ startInscriptionDate: date });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showLookupCursada: true });\r\n }\r\n\r\n handleStartDate = (date) => {\r\n this.setState({ startDate: date });\r\n }\r\n\r\n handleEndDate = (date) => {\r\n this.setState({ endDate: date });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n handleHideLookup1 = () => {\r\n this.setState({ showLookupCursada: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const anioProperties = e.split('%');\r\n this.setState({\r\n alumno: {\r\n alumnocarreraCod: anioProperties[0],\r\n alumnoNombre: anioProperties[1],\r\n alumnoCarrera: anioProperties[3],\r\n alumnoCarreraNombre: anioProperties[2]\r\n },\r\n showLookupAnios: false\r\n });\r\n }\r\n\r\n handleSelectCursadaItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupCursada: false,\r\n materiaCodigo: carreraProperties[6],\r\n cursada: {\r\n cursadaCodigo: carreraProperties[0],\r\n cursadaMateriaCodigo: carreraProperties[6],\r\n cursadaMateriaNombre: carreraProperties[1].trim(),\r\n cursadaPeriodo: carreraProperties[2].trim() + \" - \" + carreraProperties[4].trim() + \" - \" + carreraProperties[5].trim() + \" - \" + carreraProperties[3].trim()\r\n }\r\n });\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ descripcion: e.value });\r\n }\r\n\r\n getEstadoInscripcion(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"A\") {\r\n return \"Activa\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"P\") {\r\n return \"Pendiente\";\r\n }\r\n else if (periodoCursadaDescripcion == \"G\") {\r\n return \"Acta Generada\";\r\n }\r\n else {\r\n return \"Lista\";\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Inscripción a Examen\" : \"Modificar datos de Inscripción a Examen\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Alumno</Button> :\r\n <label> Datos del Alumno </label>}\r\n {this.state.showLookupAnios ? <LookupAlumnoCarrera selectItem={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.alumnoNombre + \" - \" + this.state.alumno.alumnoCarreraNombre}\r\n />\r\n </div>\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowCursadaLookup}> Seleccione la Materia</Button> :\r\n <label> Datos de la Materia </label>}\r\n {this.state.showLookupCursada ? <LookupMesaExamen carreraCod={this.state.alumno.alumnoCarrera} selectItem={this.handleSelectCursadaItem} hideLookup={this.handleHideLookup1} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.cursada.cursadaMateriaNombre.trim() + \" - \" + this.state.alumno.alumnoCarreraNombre.trim() + \" - \" + this.state.cursada.cursadaPeriodo}\r\n />\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Condición de Inscripción: </label>\r\n <div className=\"dropdownDictado\">\r\n <Select\r\n value={this.state.valueDictado}\r\n options={optionsCuatrimestre}\r\n onChange={this.handleDictadoChangeInput}\r\n />\r\n </div>\r\n </div>\r\n :\r\n <div>\r\n <label> Condición de Inscripción: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"10\"\r\n onChange={this.handleDescripcionChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={this.state.dictado}\r\n required\r\n />\r\n </div>}\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-ie\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-ie\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.dictado.length > 0);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/ie/update',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n AlumnoxCarreraCod: this.state.alumno.alumnocarreraCod,\r\n MesaExamenCod: this.state.cursada.cursadaCodigo,\r\n InscripcionExamenCod: this.state.id,\r\n InscripcionExamenCondicionInsc: this.state.dictado,\r\n MateriaCarreraCod3: this.state.cursada.cursadaMateriaCodigo,\r\n IgnorarCorrelatividad: true,\r\n IgnorarRegularidad: true\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import { format } from \"date-fns\";\r\nimport es from 'date-fns/locale/es';\r\nimport React, { Component } from 'react';\r\nimport DatePicker, { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport Select from 'react-select';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nregisterLocale('es', es)\r\n\r\nconst options = [\r\n { value: '', label: 'Seleccione una opción' },\r\n { value: 'R', label: 'Regular' },\r\n { value: 'L', label: 'Libre' }\r\n];\r\n\r\nexport class UpdateHistoriaAcademicaCursada extends Component {\r\n static displayName = UpdateHistoriaAcademicaCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n tagData: [{ id: \"\", text: \"\" }],\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n llamado: \"\",\r\n anio: { anioAcademicoCod: 0, anioAcademicoDescripcion: \"\", carrera: \"\" },\r\n materia: { codigo: 0, anioAcademicoDescripcion: \"\" },\r\n id: this.props.match.params.id,\r\n details: this.props.match.params.details,\r\n fecha: new Date(),\r\n fechaFinRegularidad: new Date(),\r\n observaciones: \"\"\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStartDate = this.handleStartDate.bind(this);\r\n this.handleEndDate = this.handleEndDate.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleEndInscripcionDate = this.handleEndInscripcionDate.bind(this);\r\n this.handleStartInscriptionDate = this.handleStartInscriptionDate.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n this.handleFechaExamen = this.handleFechaExamen.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('HistoriaAcademicaCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/hac/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n\r\n }\r\n var defaultValueAnioDictado = options.filter(x => x.value.toString() === data.returnModel.historiaAcademicaResultado.trim());\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n anio: {\r\n anioAcademicoCod: data.returnModel.alumnoxCarreraCod,\r\n anioAcademicoDescripcion: data.returnModel.alumnoxCarreraCodNavigation.alumnoNombre,\r\n carrera: data.returnModel.alumnoxCarreraCodNavigation.carreraNombre\r\n },\r\n materia: {\r\n codigo: data.returnModel.materiaCarreraCod,\r\n anioAcademicoDescripcion: data.returnModel.materiaCarreraCodNavigation.materiaCarreraNombre\r\n },\r\n resultado: data.returnModel.historiaAcademicaResultado.trim(),\r\n fecha: new Date(data.returnModel.historiaAcademicaFecha),\r\n observaciones: data.returnModel.historiaAcademicaCursadaObserv ? data.returnModel.historiaAcademicaCursadaObserv.trim() : \"\",\r\n fechaFinRegularidad: new Date(data.returnModel.historiaAcademicaFechaFinRegul),\r\n valueDictado: defaultValueAnioDictado\r\n });\r\n }\r\n\r\n handleEndInscripcionDate = (date) => {\r\n this.setState({ endInscriptionDate: date });\r\n }\r\n\r\n handleStartInscriptionDate = (date) => {\r\n this.setState({ startInscriptionDate: date });\r\n }\r\n\r\n handleStartDate = (date) => {\r\n this.setState({ fechaFinRegularidad: date });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleEndDate = (date) => {\r\n this.setState({ endDate: date });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ resultado: e.value, valueDictado: e });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const anioProperties = e.split('%');\r\n this.setState({\r\n anio: {\r\n anioAcademicoCod: anioProperties[0],\r\n anioAcademicoDescripcion: anioProperties[1]\r\n }\r\n });\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ descripcion: e.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ observaciones: e.target.value });\r\n }\r\n\r\n handleFechaExamen = (date) => {\r\n this.setState({ fecha: date });\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Historia Académica Cursada\" : \"Modificar Historia Académica Cursada\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <div>\r\n <label>Alumno:</label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"\"\r\n disabled={true}\r\n value={this.state.anio.anioAcademicoDescripcion + \" - \" + this.state.anio.carrera}\r\n required\r\n />\r\n </div>\r\n <div>\r\n <label>Materia:</label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"\"\r\n disabled={true}\r\n value={this.state.materia.anioAcademicoDescripcion}\r\n required\r\n />\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label>Seleccione la Fecha de Cursada:</label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.fecha}\r\n onChange={this.handleFechaExamen}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd/MM/yyyy\"\r\n />\r\n </div> :\r\n <div>\r\n <label> Fecha de Fecha de Cursada: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={format(new Date(this.state.fecha), 'dd/MM/yyyy')}\r\n />\r\n </div>}\r\n </div>\r\n <div>\r\n <label> Resultado: </label>\r\n {disable ?\r\n <div className=\"dropdownDictado\">\r\n <label> {this.state.resultado == 'R' ? 'Regular' : 'Libre'}</label>\r\n </div> :\r\n <div className=\"dropdownDictado\">\r\n <Select\r\n value={this.state.valueDictado}\r\n options={options}\r\n onChange={this.handleDictadoChangeInput}\r\n />\r\n </div>\r\n }\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label> Seleccione la Fecha de Fin de Regularidad: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.fechaFinRegularidad}\r\n onChange={this.handleStartDate}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd/MM/yyyy\"\r\n />\r\n </div> :\r\n <div>\r\n <label> Fecha de Fin de Regularidad </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={format(new Date(this.state.fechaFinRegularidad), 'dd/MM/yyyy')}\r\n />\r\n </div>}\r\n </div>\r\n <div>\r\n <label> Observaciones: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"\"\r\n onChange={this.handleNameChangeInput}\r\n disabled={this.state.loading || disable}\r\n value={this.state.observaciones}\r\n required\r\n />\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading && !disable? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-hic\"} >Cancelar</Button>\r\n ) : (\"\")}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-hic\" />}\r\n </div>\r\n );\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/hac',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n HistoriaAcademicaCursadaCod: parseInt(this.state.id),\r\n HistoriaAcademicaResultado: this.state.resultado,\r\n HistoriaAcademicaFechaFinRegul: this.state.fechaFinRegularidad,\r\n HistoriaAcademicaCursadaObserv: this.state.observaciones,\r\n HistoriaAcademicaFecha: this.state.fecha\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import { format } from \"date-fns\";\r\nimport es from 'date-fns/locale/es';\r\nimport React, { Component } from 'react';\r\nimport DatePicker, { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport Select from 'react-select';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nregisterLocale('es', es)\r\n\r\nconst options = [\r\n { value: '', label: 'Seleccione una opción' },\r\n { value: '0', label: 'Ausente' },\r\n { value: '1', label: '1' },\r\n { value: '2', label: '2' },\r\n { value: '3', label: '3' },\r\n { value: '4', label: '4' },\r\n { value: '5', label: '5' },\r\n { value: '6', label: '6' },\r\n { value: '7', label: '7' },\r\n { value: '8', label: '8' },\r\n { value: '9', label: '9' },\r\n { value: '10', label: '10' }\r\n];\r\n\r\nexport class UpdateHistoriaAcademicaExamen extends Component {\r\n static displayName = UpdateHistoriaAcademicaExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n tagData: [{ id: \"\", text: \"\" }],\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n llamado: \"\",\r\n anio: { anioAcademicoCod: 0, anioAcademicoDescripcion: \"\", carrera: \"\" },\r\n materia: { codigo: 0, anioAcademicoDescripcion: \"\" },\r\n id: this.props.match.params.id,\r\n details: this.props.match.params.details,\r\n fecha: new Date(),\r\n fechaFinRegularidad: new Date(),\r\n observaciones: \"\"\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStartDate = this.handleStartDate.bind(this);\r\n this.handleEndDate = this.handleEndDate.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleEndInscripcionDate = this.handleEndInscripcionDate.bind(this);\r\n this.handleStartInscriptionDate = this.handleStartInscriptionDate.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n this.handleNota = this.handleNota.bind(this);\r\n this.handleFechaExamen = this.handleFechaExamen.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('HistoriaAcademicaExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/hex/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data === \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data === \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n\r\n }\r\n var defaultValueAnioDictado = options.filter(x => x.value.toString() === data.returnModel.historiaAcademicaExamenNota.toString());\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n anio: {\r\n anioAcademicoCod: data.returnModel.alumnoxCarreraCod,\r\n anioAcademicoDescripcion: data.returnModel.alumnoxCarreraCodNavigation.alumnoNombre,\r\n carrera: data.returnModel.alumnoxCarreraCodNavigation.carreraNombre\r\n },\r\n materia: {\r\n codigo: data.returnModel.materiaCarreraCod,\r\n anioAcademicoDescripcion: data.returnModel.materiaCarreraCodNavigation.materiaCarreraNombre\r\n },\r\n resultado: data.returnModel.historiaAcademicaExamenResulta.trim(),\r\n fecha: new Date(data.returnModel.historiaAcademicaFechaExamen),\r\n observaciones: data.returnModel.historiaAcademicaExamenNota,\r\n valueDictado: defaultValueAnioDictado\r\n });\r\n }\r\n\r\n handleEndInscripcionDate = (date) => {\r\n this.setState({ endInscriptionDate: date });\r\n }\r\n\r\n handleStartInscriptionDate = (date) => {\r\n this.setState({ startInscriptionDate: date });\r\n }\r\n\r\n handleStartDate = (date) => {\r\n this.setState({ fechaFinRegularidad: date });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleEndDate = (date) => {\r\n this.setState({ endDate: date });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ observaciones: e.value, valueDictado: e, resultado: e.value === \"0\" ? \"Ausente\" : e.value >= \"4\" ? \"Aprobó\" : \"Reprobó\" });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleFechaExamen = (date) => {\r\n this.setState({ fecha: date });\r\n }\r\n\r\n\r\n handleSelectAnioItem = (e) => {\r\n const anioProperties = e.split('%');\r\n this.setState({\r\n anio: {\r\n anioAcademicoCod: anioProperties[0],\r\n anioAcademicoDescripcion: anioProperties[1]\r\n }\r\n });\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ descripcion: e.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ observaciones: e.target.value });\r\n }\r\n\r\n handleNota = (nota) => {\r\n switch (nota) {\r\n case 1:\r\n return '1(uno)';\r\n case 2:\r\n return '2(dos)';\r\n case 3:\r\n return '3(tres)';\r\n case 4:\r\n return '4(cuatro)';\r\n case 5:\r\n return '5(cinco)';\r\n case 6:\r\n return '6(seis)';\r\n case 7:\r\n return '7(siete)';\r\n case 8:\r\n return '8(ocho)';\r\n case 9:\r\n return '9(nueve)';\r\n case 10:\r\n return '10(diez)';\r\n default:\r\n return ''\r\n }\r\n }\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var title = disable ? \"Ver datos de Historia Académica Examen\" : \"Modificar Historia Académica Examen\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <div>\r\n <label>Alumno:</label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"\"\r\n disabled={true}\r\n value={this.state.anio.anioAcademicoDescripcion + \" - \" + this.state.anio.carrera}\r\n required\r\n />\r\n </div>\r\n <div>\r\n <label>Materia:</label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"\"\r\n disabled={true}\r\n value={this.state.materia.anioAcademicoDescripcion}\r\n required\r\n />\r\n </div>\r\n <div>\r\n {!disable ?\r\n <div>\r\n <label>Seleccione la Fecha de Examen:</label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.fecha}\r\n onChange={this.handleFechaExamen}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd/MM/yyyy\"\r\n />\r\n </div> :\r\n <div>\r\n <label> Fecha de Fecha de Examen: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={format(new Date(this.state.fecha), 'dd/MM/yyyy')}\r\n />\r\n </div>}\r\n </div>\r\n <div>\r\n <label> Nota: </label>\r\n {disable ?\r\n <div className=\"dropdownDictado\">\r\n <label> {this.handleNota(this.state.observaciones)}</label>\r\n </div> :\r\n <div className=\"dropdownDictado\">\r\n <Select\r\n value={this.state.valueDictado}\r\n options={options}\r\n onChange={this.handleDictadoChangeInput}\r\n />\r\n </div>\r\n }\r\n </div>\r\n <div>\r\n <label>Resultado:</label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"\"\r\n disabled={true}\r\n value={this.state.resultado}\r\n required\r\n />\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-hex\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-hex\" />}\r\n </div>\r\n );\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/hex',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n HistoriaAcademicaExamenCod: parseInt(this.state.id),\r\n HistoriaAcademicaResultado: this.state.resultado,\r\n HistoriaAcademicaExamenNota: this.state.observaciones,\r\n HistoriaAcademicaFechaExamen: this.state.fecha\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data === \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data === \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import { format } from \"date-fns\";\r\nimport React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class UpdateEncabezado extends Component {\r\n static displayName = UpdateEncabezado.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n dni: \"\",\r\n name: \"\",\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n id: this.props.match.params.id,\r\n errorMessage: \"\",\r\n details: this.props.match.params.details,\r\n folio: \"\",\r\n libro: \"\",\r\n materia: \"\",\r\n tipoActa: \"\",\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDNIChangeInput = this.handleDNIChangeInput.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n this.handleOnChangeFolio = this.handleOnChangeFolio.bind(this);\r\n this.handleOnChangeLibro = this.handleOnChangeLibro.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWActasExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.isOkToSave()) {\r\n this.postEncabezado();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Debe ingresar el libro y el folio\" });\r\n }\r\n }\r\n\r\n handleDNIChangeInput = e => {\r\n this.setState({ dni: e.target.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ descripcion: e.value, valueDictado: e });\r\n }\r\n\r\n handleOnChangeFolio = (e) => {\r\n this.setState({ folio: e.target.value });\r\n }\r\n\r\n handleOnChangeLibro = (e) => {\r\n this.setState({ libro: e.target.value });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Ver Acta de Examen</h1>\r\n <div>\r\n {this.state.showErrorMessage &&\r\n <div>\r\n <span className=\"labelError\"> {this.state.errorMessage}</span>\r\n </div>\r\n }\r\n </div>\r\n <div>\r\n <h4>Materia: {this.state.materia}</h4>\r\n <h6>Tipo Acta: {this.state.tipoActa == 'R' ? \"Regular\" : this.state.tipoActa == 'L' ? \"Libre\" : this.state.tipoActa == 'E' ? \"Equivalencia\" : \"\"}</h6>\r\n <h6>Fecha Examen: {format(new Date(), 'dd/MM/yyyy')}</h6>\r\n <div>\r\n <div className=\"side-by-side\">\r\n <label>Libro:</label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 actaInput\"\r\n name=\"name\" size=\"30\"\r\n value={this.state.libro}\r\n disabled={this.state.loading}\r\n onChange={this.handleOnChangeLibro}\r\n />\r\n <label className=\"labelInput\">Folio:</label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 actaInput\"\r\n name=\"name\" size=\"30\"\r\n value={this.state.folio}\r\n disabled={this.state.loading}\r\n onChange={this.handleOnChangeFolio}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"gsdgjasf\">\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n </div>\r\n : <Redirect to=\"/md-aex\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.libro != \"\" && this.state.folio != \"\");\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/aex/detalle/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.setState({\r\n folio: data.returnModel[0].actaExamenFolio ? data.returnModel[0].actaExamenFolio : \"\",\r\n libro: data.returnModel[0].actaExamenLibro ? data.returnModel[0].actaExamenLibro : \"\",\r\n materia: data.returnModel[0].materiaCarreraNombre.trim() + \" - \" + data.returnModel[0].carreraNombre.trim(),\r\n fechaExamen: data.returnModel[0].mesaExamenFechaExamen,\r\n tipoActa: data.returnModel[0].actaExamenTipo,\r\n searchData: data.returnModel,\r\n loading: false\r\n });\r\n }\r\n }\r\n\r\n async postEncabezado() {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/aex/encabezado',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n ActaExamenFolio: this.state.folio,\r\n ActaExamenLibro: this.state.libro,\r\n ActaExamenNacta: this.state.id\r\n })\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.setState({ success: true });\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n\r\nexport class Counter extends Component {\r\n static displayName = Counter.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { currentCount: 0 };\r\n this.incrementCounter = this.incrementCounter.bind(this);\r\n }\r\n\r\n incrementCounter() {\r\n this.setState({\r\n currentCount: this.state.currentCount + 1\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <h1>Counter</h1>\r\n\r\n <p>This is a simple example of a React component.</p>\r\n\r\n <p aria-live=\"polite\">Current count: <strong>{this.state.currentCount}</strong></p>\r\n\r\n <button className=\"btn btn-primary\" onClick={this.incrementCounter}>Increment</button>\r\n </div>\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../Tags.css';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport es from 'date-fns/locale/es';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nregisterLocale('es', es)\r\n\r\n\r\nexport class GenerarCursadas extends Component {\r\n static displayName = GenerarCursadas.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n code: \"\",\r\n name: \"\",\r\n anioDictado: \"\",\r\n dictado: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n startDateAnual: new Date(),\r\n endDateAnual: new Date(),\r\n startDate1C: new Date(),\r\n endDate1C: new Date(),\r\n startDate2C: new Date(),\r\n endDate2C: new Date(),\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleStartDateAnual = this.handleStartDateAnual.bind(this);\r\n this.handleEndDateAnual = this.handleEndDateAnual.bind(this);\r\n this.handleStartDate1C = this.handleStartDate1C.bind(this);\r\n this.handleEndDate1C = this.handleEndDate1C.bind(this);\r\n this.handleStartDate2C = this.handleStartDate2C.bind(this);\r\n this.handleEndDate2C = this.handleEndDate2C.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var okToSave = this.isOkToSave();\r\n\r\n if (okToSave) {\r\n this.saveStudent();\r\n } else {\r\n var errorMessage = \"\";\r\n if (!okToSave) {\r\n errorMessage = \"Revise las fechas ingresadas\";\r\n } \r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWCursada');\r\n }\r\n\r\n handleStartDateAnual = (date) => {\r\n this.setState({ startDateAnual: date });\r\n }\r\n\r\n handleEndDateAnual = (date) => {\r\n this.setState({ endDateAnual: date });\r\n }\r\n\r\n handleStartDate1C = (date) => {\r\n this.setState({ startDate1C: date });\r\n }\r\n\r\n handleEndDate1C = (date) => {\r\n this.setState({ endDate1C: date });\r\n }\r\n\r\n handleStartDate2C = (date) => {\r\n this.setState({ startDate2C: date });\r\n }\r\n\r\n handleEndDate2C = (date) => {\r\n this.setState({ endDate2C: date });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Generar Cursadas</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div>\r\n <label> Seleccione la Fecha de Inicio de inscripción para el perÃodo anual: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.startDateAnual}\r\n onChange={this.handleStartDateAnual}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Fin de inscripción para el perÃodo Anual: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.endDateAnual}\r\n onChange={this.handleEndDateAnual}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Inicio de inscripción para el primer cuatrimestre: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.startDate1C}\r\n onChange={this.handleStartDate1C}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Fin de inscripción para el primer cuatrimestre: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.endDate1C}\r\n onChange={this.handleEndDate1C}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Inicio de inscripción para el segundo cuatrimestre: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.startDate2C}\r\n onChange={this.handleStartDate2C}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <div>\r\n <label> Seleccione la Fecha de Fin de inscripción para el segundo cuatrimestre: </label>\r\n <DatePicker className=\"gsfsafsFSFSf\"\r\n locale=\"es\"\r\n closeOnScroll={true}\r\n selected={this.state.endDate2C}\r\n onChange={this.handleEndDate2C}\r\n disabled={this.state.loading}\r\n dateFormat=\"dd-MM-yyyy\"\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-cur\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-cur\" />\r\n }\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n const startDateAnual = new Date(this.state.startDateAnual);\r\n const endDateAnual = new Date(this.state.endDateAnual);\r\n const startDate1C = new Date(this.state.startDate1C);\r\n const endDate1C = new Date(this.state.endDate1C);\r\n const startDate2C = new Date(this.state.startDate2C);\r\n const endDate2C = new Date(this.state.endDate2C);\r\n\r\n return (startDateAnual <= endDateAnual && startDate1C <= endDate1C && startDate2C <= endDate2C);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/cur/gen',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n FechaInicioAnual: this.state.startDateAnual,\r\n FechaInicio1C: this.state.startDate1C,\r\n FechaInicio2C: this.state.startDate2C,\r\n FechaFinAnual: this.state.endDateAnual,\r\n FechaFin1C: this.state.endDate1C,\r\n FechaFin2C: this.state.endDate2C\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../Tags.css';\r\nimport { LookupCarreras } from '../Carreras/LookupCarreras';\r\n\r\nexport class InscribirAlumno extends Component {\r\n static displayName = InscribirAlumno.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n dni: \"\",\r\n name: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n tagData: [{ id: \"\", text: \"\" }],\r\n showLookupCarreras: false\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDelete = this.handleDelete.bind(this);\r\n this.handleSelectCarreraItem = this.handleSelectCarreraItem.bind(this);\r\n this.handleShowCarreraLookup = this.handleShowCarreraLookup.bind(this);\r\n this.handleDNIChangeInput = this.handleDNIChangeInput.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n }\r\n\r\n handleDNIChangeInput = e => {\r\n this.setState({ dni: e.target.value });\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Los campos Alumno y Carrera son obligatorios\" });\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWAlumnosxCarrera');\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({\r\n showLookupCarreras: false\r\n })\r\n }\r\n\r\n handleSelectCarreraItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n const tag = { id: carreraProperties[0], text: carreraProperties[1] }\r\n const tagData = this.state.tagData;\r\n tagData.push(tag);\r\n this.setState({ showLookupCarreras: false, tagData: tagData });\r\n }\r\n\r\n rendleTags() {\r\n var tagData = this.state.tagData.slice(1);\r\n return (\r\n <div>\r\n {tagData.length > 0 ?\r\n tagData.map((tag) => (\r\n <li key={tag.id} className=\"tag\">\r\n <span className=\"tag-title\">{tag.text}</span>\r\n <span\r\n className=\"tag-close-icon\"\r\n onClick={() => this.handleDelete(tag.id)}\r\n >\r\n x\r\n </span>\r\n </li>\r\n ))\r\n : \"\"}\r\n </div>\r\n );\r\n }\r\n\r\n handleShowCarreraLookup = () => {\r\n this.setState({ showLookupCarreras: true });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagData: this.state.tagData.filter(tag => tag.id !== i) });\r\n }\r\n\r\n render() {\r\n var content = this.rendleTags();\r\n return (\r\n <div>\r\n <h1>Nuevo Alumno</h1>\r\n <div>\r\n <span className=\"labelSuccess\"> {this.state.success ? \"Los datos se almacenaron con éxito\" : \"\"}</span>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading && this.state.dni.length>0 ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está guardando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <label> Ingrese datos del Alumno </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 DNIButton\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese DNI\"\r\n onChange={this.handleDNIChangeInput}\r\n disabled={this.state.loading}\r\n value={this.state.dni}\r\n required\r\n />\r\n\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n placeholder=\"Ingrese Nombre Completo\"\r\n onChange={this.handleNameChangeInput}\r\n disabled={this.state.loading}\r\n value={this.state.name}\r\n required\r\n />\r\n\r\n </div>\r\n <div>\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowCarreraLookup}> Seleccione la carrera</Button>\r\n : <label> Seleccione la carrera </label>}\r\n {this.state.showLookupCarreras ? <LookupCarreras selectItem={this.handleSelectCarreraItem} hideLookup={this.handleHideLookup } /> : \"\"}\r\n <div className=\"tag-input\">\r\n <ul className=\"tags\">\r\n {content}\r\n </ul>\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n const tags = this.state.tagData.slice(1);\r\n return (this.state.dni.length > 0 && this.state.name.length > 0 && tags.length > 0);\r\n }\r\n\r\n async saveStudent() {\r\n var object = [];\r\n this.state.tagData.slice(1).map((tag) => {\r\n object.push(parseInt(tag.id));\r\n });\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/axc/inscribir',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({ AlumnoNombre: this.state.name, AlumnoDni: this.state.dni, CarrerasCod: object })\r\n });\r\n const data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n this.setState({ loading: false, success: false, errorMessage: errorMessage });\r\n } else {\r\n this.setState({\r\n loading: false,\r\n success: true,\r\n errorMessage: \"\",\r\n dni: \"\",\r\n name: \"\",\r\n tagData: [{ id: \"\", text: \"\" }],\r\n showLookupCarreras: false\r\n });\r\n }\r\n \r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport { Redirect } from 'react-router';\r\nimport '../Buttons.css';\r\nimport { Link } from 'react-router-dom';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../Pagination.css';\r\nimport Select from 'react-select';\r\n\r\nexport class CargarActaCursada extends Component { /*MD= Manejar Datos*/\r\n static displayName = CargarActaCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n searchData: [],\r\n searchInput: \"\",\r\n perPage: 10,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n alumnos: [],\r\n materia: \"\",\r\n id: this.props.match.params.id,\r\n resultados: []\r\n };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n const ff = this.allRowsWereSaved();\r\n const ggg = this.allDataPopulated();\r\n\r\n if (!ff || !ggg) {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Debe cargar todos los alumnos\" });\r\n } else {\r\n this.setState({ showErrorMessage: false, errorMessage: \"Debe cargar todos los alumnos\" });\r\n this.postNotas();\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWActasCursado');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = (e, id) => {\r\n const index = this.state.resultados.findIndex(x => x.id === e);\r\n\r\n if (index >= 0) {\r\n const element = this.state.resultados[index];\r\n element.resultado = id.value;\r\n this.state.resultados.splice(index, 1,element);\r\n } else {\r\n this.state.resultados.push({ id: e, resultado: id.value });\r\n }\r\n }\r\n\r\n allRowsWereSaved(){\r\n let todoOk = true;\r\n\r\n this.state.alumnos.forEach(y => {\r\n const index = this.state.resultados.findIndex(x => x.id === y.detalleActaCursadaCod);\r\n\r\n if (index < 0) {\r\n todoOk = false;\r\n return;\r\n }\r\n });\r\n\r\n return todoOk;\r\n }\r\n\r\n allDataPopulated() {\r\n let todoOk = true;\r\n\r\n this.state.resultados.forEach(x => {\r\n if (x.resultado === '') {\r\n todoOk = false;\r\n return;\r\n }\r\n })\r\n\r\n return todoOk;\r\n }\r\n\r\n renderalumnosTable(alumnos) {\r\n var options = [\r\n { value: '', label: 'Seleccione el resultado' },\r\n { value: 'R', label: 'Regular' },\r\n { value: 'L', label: 'Libre' }\r\n ];\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>DNI</th>\r\n <th>Nombre y Apellido</th>\r\n <th>Resultado</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {alumnos.map(alumno =>\r\n <tr key={alumno.detalleActaCursadaCod}>\r\n <td>{alumno.alumnoDni}</td>\r\n <td>{alumno.alumnoNombre}</td>\r\n <td>{<Select\r\n options={options}\r\n disabled={true}\r\n placeholder=\"Seleccione el resultado\"\r\n onChange={(e) => this.handleChange(alumno.detalleActaCursadaCod, e)}\r\n />}</td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.searchData);\r\n\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Cargar Resultados de Acta de Cursada</h1>\r\n <div>\r\n {this.state.showErrorMessage &&\r\n <div>\r\n <span className=\"labelError\"> {this.state.errorMessage}</span>\r\n </div>\r\n }\r\n </div>\r\n <div>\r\n <h4>Materia: {this.state.materia}</h4>\r\n <div className=\"gsdgjasf\">\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-acur\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )} \r\n </ButtonGroup>\r\n </div>\r\n <div>\r\n {contents}\r\n </div>\r\n </div>\r\n </div>\r\n : <Redirect to=\"/md-acur\" />}\r\n </div >\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/acur/detalle/'+this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.setState({\r\n alumnos: data.returnModel,\r\n materia: data.returnModel[0].materiaCarreraNombre.trim() + \" - \" +\r\n data.returnModel[0].carreraNombre.trim(),\r\n searchData: data.returnModel,\r\n loading: false\r\n });\r\n }\r\n }\r\n\r\n async postNotas() {\r\n this.setState({ loading: true });\r\n const objects = [];\r\n this.state.resultados.map((tag) => {\r\n objects.push({ DetalleActaCursadaCod: tag.id, DetalleActaCursadaResultado: tag.resultado});\r\n });\r\n const response = await fetch('api/acur',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify(objects)\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n window.alert(\"Acta cargada exitosamente\");\r\n this.setState({ success: true });\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport { Redirect } from 'react-router';\r\nimport '../Buttons.css';\r\nimport { Link } from 'react-router-dom';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../Pagination.css';\r\nimport Select from 'react-select';\r\nimport { format } from \"date-fns\";\r\n\r\nconst options = [\r\n { value: '0', label: 'Ausente' },\r\n { value: '1', label: '1' },\r\n { value: '2', label: '2' },\r\n { value: '3', label: '3' },\r\n { value: '4', label: '4' },\r\n { value: '5', label: '5' },\r\n { value: '6', label: '6' },\r\n { value: '7', label: '7' },\r\n { value: '8', label: '8' },\r\n { value: '9', label: '9' },\r\n { value: '10', label: '10' }\r\n];\r\n\r\nexport class CargarActaExamen extends Component { /*MD= Manejar Datos*/\r\n static displayName = CargarActaExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n searchData: [],\r\n searchInput: \"\",\r\n perPage: 10,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n alumnos: [],\r\n materia: \"\",\r\n fechaExamen: new Date().toString(),\r\n tipoActa: \"\",\r\n id: this.props.match.params.id,\r\n resultados: [],\r\n folio: \"\",\r\n libro: \"\",\r\n encabezadoOk: false\r\n };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleNotaOral = this.handleNotaOral.bind(this);\r\n this.handleNotaEscrito = this.handleNotaEscrito.bind(this);\r\n this.handleNotaPromedio = this.handleNotaPromedio.bind(this);\r\n this.handleOnChangeFolio = this.handleOnChangeFolio.bind(this);\r\n this.handleOnChangeLibro = this.handleOnChangeLibro.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.folio === 0 || this.state.libro.trim() === '0') {\r\n this.setState({ errorMessage: \"Ingrese Libro y/o Folio\", showErrorMessage: true })\r\n } else {\r\n this.setState({ showErrorMessage: false })\r\n this.postNotas();\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWActasExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n allRowsWereSaved() {\r\n let todoOk = true;\r\n\r\n this.state.alumnos.forEach(y => {\r\n const index = this.state.resultados.findIndex(x => x.id === y.detalleActaCursadaCod);\r\n\r\n if (index < 0) {\r\n todoOk = false;\r\n return;\r\n }\r\n });\r\n\r\n return todoOk;\r\n }\r\n\r\n allDataPopulated() {\r\n let todoOk = true;\r\n\r\n this.state.resultados.forEach(x => {\r\n if (x.resultado === '') {\r\n todoOk = false;\r\n return;\r\n }\r\n })\r\n return todoOk;\r\n }\r\n\r\n handleOnChangeFolio = (e) => {\r\n this.setState({ folio: e.target.value });\r\n }\r\n\r\n handleOnChangeLibro = (e) => {\r\n this.setState({ libro: e.target.value });\r\n }\r\n\r\n handleNotaOral = (e, id) => {\r\n const index = this.state.resultados.findIndex(x => x.id === e);\r\n\r\n if (index >= 0) {\r\n const element = this.state.resultados[index];\r\n element.oral = id.value;\r\n this.state.resultados.splice(index, 1, element);\r\n this.setState({ valueOral: id });\r\n }\r\n }\r\n\r\n handleNotaEscrito = (e, id) => {\r\n const index = this.state.resultados.findIndex(x => x.id === e);\r\n\r\n if (index >= 0) {\r\n const element = this.state.resultados[index];\r\n element.escrito = id.value;\r\n this.state.resultados.splice(index, 1, element);\r\n this.setState({ valueEscrito: id });\r\n }\r\n }\r\n\r\n handleNotaPromedio = (e, id) => {\r\n const index = this.state.resultados.findIndex(x => x.id === e);\r\n\r\n if (index >= 0) {\r\n const element = this.state.resultados[index];\r\n element.nota = id.value;\r\n this.state.resultados.splice(index, 1, element);\r\n this.setState({ valueNota: id });\r\n }\r\n }\r\n\r\n renderalumnosTable(alumnos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>DNI</th>\r\n <th>Nombre y Apellido</th>\r\n <th>Nota Examen Oral</th>\r\n <th>Nota Examen Escrito</th>\r\n <th>Nota Examen Promedio</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {alumnos.map(alumno =>\r\n <tr key={alumno.detalleActaCod}>\r\n <td>{alumno.alumnoDni}</td>\r\n <td>{alumno.alumnoNombre}</td>\r\n <td>{< Select\r\n options={options}\r\n disabled={true}\r\n placeholder=\"Seleccione un resultado\"\r\n value={options.filter(x => x.value == this.state.resultados.filter(y => y.id === alumno.detalleActaCod)[0].oral)}\r\n onChange={(e) => this.handleNotaOral(alumno.detalleActaCod, e)}\r\n />}</td>\r\n <td>{< Select\r\n options={options}\r\n disabled={true}\r\n value={options.filter(x => x.value == this.state.resultados.filter(y => y.id === alumno.detalleActaCod)[0].escrito)}\r\n onChange={(e) => this.handleNotaEscrito(alumno.detalleActaCod, e)}\r\n />}</td>\r\n <td>{< Select\r\n options={options}\r\n disabled={true}\r\n value={options.filter(x => x.value == this.state.resultados.filter(y => y.id === alumno.detalleActaCod)[0].nota)}\r\n onChange={(e) => this.handleNotaPromedio(alumno.detalleActaCod, e)}\r\n />}</td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.searchData);\r\n\r\n return (\r\n <div>\r\n {(!this.state.success && !this.state.encabezadoOk) ?\r\n <div>\r\n <h1>Cargar Resultados de Acta de Examen</h1>\r\n <div>\r\n {this.state.showErrorMessage &&\r\n <div>\r\n <span className=\"labelError\"> {this.state.errorMessage}</span>\r\n </div>\r\n }\r\n </div>\r\n <div>\r\n <h4>Materia: {this.state.materia}</h4>\r\n <h6>Tipo Acta: {this.state.tipoActa == 'R' ? \"Regular\" : this.state.tipoActa == 'L' ? \"Libre\" : this.state.tipoActa == 'E' ? \"Equivalencia\" : \"\"}</h6>\r\n <h6>Fecha Examen: {format(new Date(this.state.fechaExamen), 'dd/MM/yyyy')}</h6>\r\n <div className=\"gsdgjasf\">\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-aex\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n <div className=\"side-by-side\">\r\n <label>Libro:</label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 actaInput\"\r\n name=\"name\" size=\"30\"\r\n onChange={this.handleOnChangeLibro}\r\n />\r\n <label className=\"labelInput\">Folio:</label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 actaInput\"\r\n name=\"name\" size=\"30\"\r\n onChange={this.handleOnChangeFolio}\r\n />\r\n </div>\r\n <div>\r\n {contents}\r\n </div>\r\n </div>\r\n </div>\r\n : <Redirect to=\"/md-aex\" />}\r\n </div >\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/aex/detalle/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n const resultados = [];\r\n data.returnModel.forEach(x => {\r\n resultados.push({ id: x.detalleActaCod, oral: 0, escrito: 0, nota: 0 });\r\n });\r\n var defaultValueAnioDictado = options.filter(x => x.value == '0');\r\n this.setState({\r\n alumnos: data.returnModel,\r\n folio: data.returnModel[0].actaExamenFolio,\r\n libro: data.returnModel[0].actaExamenLibro,\r\n materia: data.returnModel[0].materiaCarreraNombre.trim() + \" - \" + data.returnModel[0].carreraNombre.trim(),\r\n fechaExamen: data.returnModel[0].mesaExamenFechaExamen,\r\n tipoActa: data.returnModel[0].actaExamenTipo,\r\n searchData: data.returnModel,\r\n loading: false,\r\n resultados: resultados,\r\n valueOral: defaultValueAnioDictado,\r\n valueEscrito: defaultValueAnioDictado,\r\n valueNota: defaultValueAnioDictado\r\n });\r\n }\r\n }\r\n\r\n async postNotas() {\r\n this.setState({ loading: true });\r\n const objects = [];\r\n this.state.resultados.map((tag) => {\r\n objects.push({ DetalleActaCod: tag.id, DetalleActaNota: tag.nota, DetalleActaOral: tag.oral, DetalleActaEscrito: tag.escrito });\r\n });\r\n const response = await fetch('api/aex',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n ActaExamenFolio: this.state.folio,\r\n ActaExamenLibro: this.state.libro,\r\n ActaExamenNacta: this.state.id,\r\n Resultados: objects\r\n })\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n window.alert(\"Acta cargada exitosamente\");\r\n this.setState({ success: true });\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport { Redirect } from 'react-router';\r\nimport '../Buttons.css';\r\nimport { Link } from 'react-router-dom';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nexport class VerActaCursada extends Component { /*MD= Manejar Datos*/\r\n static displayName = VerActaCursada.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n searchData: [],\r\n searchInput: \"\",\r\n perPage: 10,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n alumnos: [],\r\n materia: \"\",\r\n id: this.props.match.params.id,\r\n resultados: []\r\n };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleStatus = this.handleStatus.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n this.setState({ success: true });\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWActasCursado');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = (e, id) => {\r\n const index = this.state.resultados.findIndex(x => x.id === e);\r\n\r\n if (index > 0) {\r\n const element = this.state.resultados[index];\r\n element.resultado = id.value;\r\n this.state.resultados.splice(index, 1,element);\r\n } else {\r\n this.state.resultados.push({ id: e, resultado: id.value });\r\n }\r\n }\r\n\r\n allRowsWereSaved(){\r\n let todoOk = true;\r\n\r\n this.state.alumnos.forEach(y => {\r\n const index = this.state.resultados.findIndex(x => x.id === y.detalleActaCursadaCod);\r\n\r\n if (index < 0) {\r\n todoOk = false;\r\n return;\r\n }\r\n });\r\n\r\n return todoOk;\r\n }\r\n\r\n allDataPopulated() {\r\n let todoOk = true;\r\n\r\n this.state.resultados.forEach(x => {\r\n if (x.resultado === '') {\r\n todoOk = false;\r\n return;\r\n }\r\n })\r\n\r\n return todoOk;\r\n }\r\n\r\n handleStatus = (resultado) => {\r\n if (resultado == 'R') {\r\n return 'Regular';\r\n } else if (resultado == 'L') {\r\n return 'Libre';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n renderalumnosTable(alumnos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>DNI</th>\r\n <th>Nombre y Apellido</th>\r\n <th>Resultado</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {alumnos.map(alumno =>\r\n <tr key={alumno.detalleActaCursadaCod}>\r\n <td>{alumno.alumnoDni}</td>\r\n <td>{alumno.alumnoNombre}</td>\r\n <td>{this.handleStatus(alumno.detalleActaCursadaResultado)}</td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.searchData);\r\n\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Ver Acta de Cursada</h1>\r\n <div>\r\n {this.state.showErrorMessage &&\r\n <div>\r\n <span className=\"labelError\"> {this.state.errorMessage}</span>\r\n </div>\r\n }\r\n </div>\r\n <div>\r\n <h4>Materia: {this.state.materia}</h4>\r\n <div className=\"gsdgjasf\">\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n </ButtonGroup>\r\n </div>\r\n <div>\r\n {contents}\r\n </div>\r\n </div>\r\n </div>\r\n : <Redirect to=\"/md-acur\" />}\r\n </div >\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/acur/detalle/'+this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.alumnoNombre - a.alumnoNombre);\r\n this.setState({\r\n alumnos: data.returnModel,\r\n materia: data.returnModel[0].materiaCarreraNombre.trim() + \" - \" +\r\n data.returnModel[0].carreraNombre.trim(),\r\n searchData: data.returnModel,\r\n loading: false\r\n });\r\n }\r\n }\r\n\r\n async postNotas() {\r\n this.setState({ loading: true });\r\n const objects = [];\r\n this.state.resultados.map((tag) => {\r\n objects.push({ DetalleActaCursadaCod: tag.id, DetalleActaCursadaResultado: tag.resultado});\r\n });\r\n const response = await fetch('api/acur',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify(objects)\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.setState({ success: true });\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\n\r\nexport class VerActaExamen extends Component { /*MD= Manejar Datos*/\r\n static displayName = VerActaExamen.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n searchData: [],\r\n searchInput: \"\",\r\n perPage: 10,\r\n paginationData: [],\r\n offset: 0,\r\n showErrorMessage: false,\r\n errorMessage: \"\",\r\n alumnos: [],\r\n materia: \"\",\r\n id: this.props.match.params.id,\r\n resultados: [],\r\n folio: \"\",\r\n libro: \"\",\r\n fechaExamen: new Date().toString(),\r\n tipoActa: \"\"\r\n };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleStatus = this.handleStatus.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea eliminar este registro?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n this.setState({ success: true });\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('WWActasExamen');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.alumnos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n handleChange = (e, id) => {\r\n const index = this.state.resultados.findIndex(x => x.id === e);\r\n\r\n if (index > 0) {\r\n const element = this.state.resultados[index];\r\n element.resultado = id.value;\r\n this.state.resultados.splice(index, 1, element);\r\n } else {\r\n this.state.resultados.push({ id: e, resultado: id.value });\r\n }\r\n }\r\n\r\n allRowsWereSaved() {\r\n let todoOk = true;\r\n\r\n this.state.alumnos.forEach(y => {\r\n const index = this.state.resultados.findIndex(x => x.id === y.detalleActaCursadaCod);\r\n\r\n if (index < 0) {\r\n todoOk = false;\r\n return;\r\n }\r\n });\r\n\r\n return todoOk;\r\n }\r\n\r\n allDataPopulated() {\r\n let todoOk = true;\r\n\r\n this.state.resultados.forEach(x => {\r\n if (x.resultado === '') {\r\n todoOk = false;\r\n return;\r\n }\r\n })\r\n\r\n return todoOk;\r\n }\r\n\r\n handleStatus = (resultado) => {\r\n if (resultado == 'R') {\r\n return 'Regular';\r\n } else if (resultado == 'L') {\r\n return 'Libre';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n renderalumnosTable(alumnos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>DNI</th>\r\n <th>Nombre y Apellido</th>\r\n <th>Nota Examen Oral</th>\r\n <th>Nota Examen Escrito</th>\r\n <th>Nota Examen Promedio</th>\r\n <th>Resultado</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {alumnos.map(alumno =>\r\n <tr key={alumno.detalleActaCod}>\r\n <td>{alumno.alumnoDni}</td>\r\n <td>{alumno.alumnoNombre}</td>\r\n <td>{alumno.detalleActaOral}</td>\r\n <td>{alumno.detalleActaEscrito}</td>\r\n <td>{alumno.detalleActaNota}</td>\r\n <td>{alumno.detalleActaResultado}</td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.searchData);\r\n\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>Ver Acta de Examen</h1>\r\n <div>\r\n {this.state.showErrorMessage &&\r\n <div>\r\n <span className=\"labelError\"> {this.state.errorMessage}</span>\r\n </div>\r\n }\r\n </div>\r\n <div>\r\n <h4>Materia: {this.state.materia}</h4>\r\n <h6>Tipo Acta: {this.state.tipoActa == 'R' ? \"Regular\" : this.state.tipoActa == 'L' ? \"Libre\" : this.state.tipoActa == 'E' ? \"Equivalencia\" : \"\"}</h6>\r\n <h6>Fecha Examen: {format(new Date(this.state.fechaExamen), 'dd/MM/yyyy')}</h6>\r\n <div>\r\n <label> Libro: {this.state.libro} Número de Folio: {this.state.folio}</label>\r\n </div>\r\n <div className=\"gsdgjasf\">\r\n <ButtonGroup>\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n </ButtonGroup>\r\n </div>\r\n <div>\r\n {contents}\r\n </div>\r\n </div>\r\n </div>\r\n : <Redirect to=\"/md-aex\" />}\r\n </div >\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/aex/detalle/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.setState({\r\n alumnos: data.returnModel,\r\n folio: data.returnModel[0].actaExamenFolio,\r\n libro: data.returnModel[0].actaExamenLibro,\r\n materia: data.returnModel[0].materiaCarreraNombre.trim() + \" - \" + data.returnModel[0].carreraNombre.trim(),\r\n searchData: data.returnModel,\r\n fechaExamen: data.returnModel[0].mesaExamenFechaExamen,\r\n tipoActa: data.returnModel[0].actaExamenTipo, \r\n loading: false\r\n });\r\n }\r\n }\r\n\r\n async postNotas() {\r\n this.setState({ loading: true });\r\n const objects = [];\r\n this.state.resultados.map((tag) => {\r\n objects.push({ DetalleActaCursadaCod: tag.id, DetalleActaCursadaResultado: tag.resultado });\r\n });\r\n const response = await fetch('api/acur',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify(objects)\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.setState({ success: true });\r\n }\r\n }\r\n}\r\n","import es from 'date-fns/locale/es';\r\nimport React, { Component } from 'react';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport { LookupAlumnoCarrera } from '../AlumnoCarrera/LookupAlumnoCarrera';\r\nimport '../Buttons.css';\r\nimport { LookupCursadas } from '../Cursadas/LookupCursadas';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class GenerateEstadoCurricular extends Component {\r\n static displayName = GenerateEstadoCurricular.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showCursada: false,\r\n tagDataAlumno: [{ id: \"\", text: \"\" }],\r\n tagDataCursada: [{ id: \"\", text: \"\" }],\r\n alumno: { codigo: \"\", descripcion: \"\" },\r\n cursada: { codigo: \"\", descripcion: \"\" },\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n carreraCursada: -1,\r\n materiaCodigo: \"\"\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleSelectCursadaItem = this.handleSelectCursadaItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleHideLookup1 = this.handleHideLookup1.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWCertificados');\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ llamado: e.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagDataAlumno: this.state.tagDataAlumno.filter(tag => tag.id !== i), carreraCursada: -1 });\r\n }\r\n\r\n handleDeleteCursada = (i) => {\r\n this.setState({ tagDataCursada: this.state.tagDataCursada.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showCursada: true });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n handleHideLookup1 = () => {\r\n this.setState({ showCursada: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupAnios: false,\r\n carreraCursada: Number(carreraProperties[3]),\r\n alumno: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1] + \" - \" + carreraProperties[2]\r\n }\r\n });\r\n }\r\n\r\n handleSelectCursadaItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showCursada: false,\r\n materiaCodigo: carreraProperties[5],\r\n cursada: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[4].trim()\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <div>\r\n <h1>Generar Estado Curricular</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"label\"> {this.state.loading ? \"Generando el certificado espere\" : \"\"}</span>\r\n <span className=\"label\"> {(this.state.success && !this.state.loading) ? \"Certificado generado exitosamente\" : \"\"}</span>\r\n <div>\r\n\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Alumno</Button>\r\n : <label> Datos del Alumno </label>}\r\n {this.state.showLookupAnios ? <LookupAlumnoCarrera selectItem={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.descripcion}\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Generar Certificado</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Generar Certificado</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.alumno.descripcion.length > 1);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/ecur/' + this.state.alumno.codigo,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n } else {\r\n const byteCharacters = atob(data.returnModel);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const blob = new Blob([byteArray], { type: 'application/pdf' });\r\n\r\n const link = document.createElement('a');\r\n link.href = window.URL.createObjectURL(blob);\r\n link.download = 'estadoCurricular.pdf';\r\n link.click();\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Pagination.css';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport { format } from \"date-fns\";\r\nimport Cookies from 'js-cookie';\r\n\r\nexport class MDInscripcionCursadaAlumno extends Component { /*MD= Manejar Datos*/\r\n static displayName = MDInscripcionCursadaAlumno.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { loading: true, searchData: [], searchInput: \"\", perPage: 10, paginationData: [], offset: 0, showErrorMessage: false, errorMessage: \"\" };\r\n this.handleRemoveItem = this.handleRemoveItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handlePageClick = this.handlePageClick.bind(this);\r\n this.getEstadoInscripcion = this.getEstadoInscripcion.bind(this);\r\n }\r\n\r\n handleRemoveItem = (id) => {\r\n if (!window.confirm(\"¿Desea darse de baja de la materia seleccionada?\"))\r\n return;\r\n else {\r\n this.deleteItem(id);\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('InscribirCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handlePageClick = e => {\r\n const selectedPage = e.selected;\r\n const offset = selectedPage * this.state.perPage;\r\n\r\n if (this.state.searchInput.length === 0) {\r\n var data = this.state.periodos.slice(offset, offset + this.state.perPage);\r\n\r\n this.setState({ paginationData: data });\r\n\r\n } else {\r\n var dataPagination = this.state.searchData.slice(offset, offset + this.state.perPage);\r\n this.setState({ paginationData: dataPagination, pageCount: Math.ceil(this.state.searchData.length / this.state.perPage) });\r\n }\r\n\r\n };\r\n\r\n getEstadoInscripcion(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"A\") {\r\n return \"Activa\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"P\") {\r\n return \"Pendiente\";\r\n }\r\n else if (periodoCursadaDescripcion == \"G\") {\r\n return \"Acta Generada\";\r\n }\r\n else {\r\n return \"Lista\";\r\n }\r\n }\r\n }\r\n\r\n handleChange = e => {\r\n if (e.target.value !== \"\") {\r\n this.setState({ searchInput: e.target.value, loading: true });\r\n const data = this.state.periodos.filter(\r\n periodo => {\r\n return (\r\n periodo\r\n .materia\r\n .toLowerCase()\r\n .includes(e.target.value.toLowerCase())\r\n )\r\n }\r\n );\r\n var paginationData = data.slice(0, 0 + this.state.perPage);\r\n this.setState({ searchData: data, loading: false, paginationData: paginationData, pageCount: Math.ceil(data.length / this.state.perPage) });\r\n } else {\r\n var paginationData = this.state.periodos.slice(0, 0 + this.state.perPage);\r\n this.setState({ paginationData: paginationData, pageCount: Math.ceil(this.state.periodos.length / this.state.perPage), searchInput: \"\" });\r\n }\r\n }\r\n\r\n renderalumnosTable(periodos) {\r\n return (\r\n <table className='table table-striped' aria-labelledby=\"tabelLabel\">\r\n <thead>\r\n <tr>\r\n <th>Carrera</th>\r\n <th>Materia</th>\r\n <th>Fecha de Inscripción</th>\r\n <th>Estado de Inscripción</th>\r\n <th>Resultado</th>\r\n <th colSpan=\"4\">Acción</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {periodos.map(periodo =>\r\n <tr key={periodo.inscripcionCursadaCod}>\r\n <td>{periodo.carrera}</td>\r\n <td>{periodo.materia}</td>\r\n <td>{format(new Date(periodo.inscripcionCursadaFechaHora), 'dd/MM/yyyy')}</td>\r\n <td>{this.getEstadoInscripcion(periodo.inscripcionCursadaEstado)}</td>\r\n <td>{periodo.resultado}</td>\r\n <td>\r\n <ButtonGroup>\r\n {(periodo.inscripcionCursadaEstado == \"P\" || periodo.inscripcionCursadaEstado == \"A\") && <Button className=\"editButton\" size=\"sm\" color=\"primary\" tag={Link} to={\"/update-ica/\" + periodo.inscripcionCursadaCod + \"/0\"} >Modificar</Button>}\r\n {(periodo.inscripcionCursadaEstado == \"P\" || periodo.inscripcionCursadaEstado == \"A\") && <Button className=\"editButton\" size=\"sm\" color=\"danger\" onClick={() => this.handleRemoveItem(periodo.inscripcionCursadaCod)}>Borrar</Button>}\r\n <Button className=\"editButton\" size=\"sm\" tag={Link} to={\"/update-ica/\" + periodo.inscripcionCursadaCod + \"/1\"} >Detalles</Button>\r\n </ButtonGroup>\r\n </td>\r\n </tr>\r\n )}\r\n </tbody>\r\n </table>\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ? <p><em>Cargando datos...</em></p>\r\n : this.renderalumnosTable(this.state.paginationData);\r\n\r\n return (\r\n <div>\r\n <h1>Manejar Datos de Inscripciones a Cursadas</h1>\r\n {this.state.showErrorMessage ?\r\n <div>\r\n <span className=\"labelError\"> {\"Ocurrió un error al intentar ejecutar la operación.\" + this.state.errorMessage}</span>\r\n </div> :\r\n <div>\r\n <p>\r\n <Link to=\"/add-ica\">Nueva Inscripción a Cursada</Link>\r\n </p>\r\n <div className=\"pa2\">\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"search\"\r\n placeholder=\"Ingrese Materia\"\r\n onChange={this.handleChange}\r\n />\r\n </div>\r\n {contents}\r\n <ReactPaginate\r\n previousLabel={\"Anterior\"}\r\n nextLabel={\"Siguiente\"}\r\n breakLabel={\"...\"}\r\n breakClassName={\"break-me\"}\r\n pageCount={this.state.pageCount}\r\n marginPagesDisplayed={2}\r\n pageRangeDisplayed={5}\r\n onPageChange={this.handlePageClick}\r\n containerClassName={\"pagination\"}\r\n subContainerClassName={\"pages pagination\"}\r\n activeClassName={\"active\"} />\r\n </div>}\r\n\r\n </div>\r\n );\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/ic/Index/' + Cookies.get('alumnoCodigos'), {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n data.returnModel.sort((a, b) => b.inscripcionCursadaCod - a.inscripcionCursadaCod);\r\n const paginationData = data.returnModel.slice(0, this.state.perPage);\r\n this.setState({ periodos: data.returnModel, searchData: data.returnModel, loading: false, pageCount: Math.ceil(data.returnModel.length / this.state.perPage), paginationData: paginationData });\r\n }\r\n }\r\n\r\n async deleteItem(id) {\r\n this.setState({ loading: true });\r\n const response = await fetch('api/ic/delete/' + id,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var errorMessage = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.populateData();\r\n }\r\n }\r\n}\r\n","import es from 'date-fns/locale/es';\r\nimport React, { Component } from 'react';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport { LookupCursadasAlumnos } from '../Cursadas/LookupCursadasAlumnos';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class UpdateInscripcionCursadaAlumno extends Component {\r\n static displayName = UpdateInscripcionCursadaAlumno.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showLookupCursada: false,\r\n tagData: [{ id: \"\", text: \"\" }],\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n llamado: \"\",\r\n cursada: { cursadaCodigo: 0, cursadaMateriaCodigo: \"\", cursadaMateriaNombre: \"\", cursadaPeriodo: \"\" },\r\n alumno: { alumnocarreraCod: 0, alumnoNombre: \"\", alumnoCarrera: 0, alumnoCarreraNombre: \"\" },\r\n id: this.props.match.params.id,\r\n details: this.props.match.params.details\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleStartDate = this.handleStartDate.bind(this);\r\n this.handleEndDate = this.handleEndDate.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleEndInscripcionDate = this.handleEndInscripcionDate.bind(this);\r\n this.handleStartInscriptionDate = this.handleStartInscriptionDate.bind(this);\r\n this.getPeriodoCursada = this.getPeriodoCursada.bind(this);\r\n this.getEstadoInscripcion = this.getEstadoInscripcion.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleCursadaAnioItem = this.handleCursadaAnioItem.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n const canAccess = await constantClass.canAccess('InscribirCursada');\r\n if (canAccess) {\r\n this.populateData();\r\n }\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.state.details === \"1\") {\r\n this.setState({ success: true })\r\n } else {\r\n var errorMessage = \"\";\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n errorMessage = \"Todos los campos son obligatorios\";\r\n this.setState({ showErrorMessage: true, errorMessage: errorMessage });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n }\r\n\r\n getPeriodoCursada(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"1\") {\r\n return \"Primer Cuatrimestre\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"2\") {\r\n return \"Segundo Cuatrimestre\";\r\n }\r\n else {\r\n return \"Anual\";\r\n }\r\n }\r\n }\r\n\r\n async populateData() {\r\n const response = await fetch('api/ic/' + this.state.id, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n let data = await response.json();\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n }\r\n this.setState(\r\n {\r\n errorMessage: errorMessage,\r\n cursada: {\r\n cursadaCodigo: data.returnModel.cursadaCod,\r\n cursadaMateriaCodigo: data.returnModel.cursadaCodNavigation.materiaCarreraCod,\r\n cursadaMateriaNombre: data.returnModel.cursadaCodNavigation.materiaNombre,\r\n cursadaPeriodo: this.getPeriodoCursada(data.returnModel.cursadaCodNavigation.periodoCursadaDescripcion) + \" - \" + data.returnModel.cursadaCodNavigation.anioAcademicoDescripcion\r\n },\r\n alumno: {\r\n alumnocarreraCod: data.returnModel.alumnoxCarreraCodNavigation.alumnoxCarreraCod,\r\n alumnoNombre: data.returnModel.alumnoxCarreraCodNavigation.alumnoNombre,\r\n alumnoCarrera: data.returnModel.alumnoxCarreraCodNavigation.carreraCod,\r\n alumnoCarreraNombre: data.returnModel.alumnoxCarreraCodNavigation.carreraNombre\r\n },\r\n descripcion: data.returnModel.inscripcionCursadaEstado\r\n });\r\n }\r\n\r\n handleEndInscripcionDate = (date) => {\r\n this.setState({ endInscriptionDate: date });\r\n }\r\n\r\n handleStartInscriptionDate = (date) => {\r\n this.setState({ startInscriptionDate: date });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showLookupCursada: true });\r\n }\r\n\r\n handleStartDate = (date) => {\r\n this.setState({ startDate: date });\r\n }\r\n\r\n handleEndDate = (date) => {\r\n this.setState({ endDate: date });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false, showLookupCursada:false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const anioProperties = e.split('%');\r\n this.setState({\r\n alumno: {\r\n alumnocarreraCod: anioProperties[0],\r\n alumnoNombre: anioProperties[1],\r\n alumnoCarrera: anioProperties[3],\r\n alumnoCarreraNombre: anioProperties[2]\r\n },\r\n showLookupAnios: false\r\n });\r\n }\r\n\r\n handleCursadaAnioItem = (e) => {\r\n const anioProperties = e.split('%');\r\n this.setState({\r\n cursada: {\r\n cursadaCodigo: anioProperties[0],\r\n cursadaMateriaCodigo: anioProperties[5],\r\n cursadaMateriaNombre: anioProperties[1],\r\n cursadaPeriodo: this.getPeriodoCursada(anioProperties[3]) + \"-\" + anioProperties[4]\r\n },\r\n showLookupCursada: false\r\n });\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ descripcion: e.value });\r\n }\r\n\r\n getEstadoInscripcion(periodoCursadaDescripcion) {\r\n\r\n if (periodoCursadaDescripcion == \"A\") {\r\n return \"Activa\";\r\n } else {\r\n if (periodoCursadaDescripcion == \"P\") {\r\n return \"Pendiente\";\r\n }\r\n else if (periodoCursadaDescripcion == \"G\") {\r\n return \"Acta Generada\";\r\n }\r\n else {\r\n return \"Lista\";\r\n }\r\n }\r\n }\r\n\r\n\r\n render() {\r\n var disable = this.state.details === \"0\" ? false : true;\r\n var options = [\r\n { value: '', label: '' },\r\n { value: 'A', label: 'Activa' },\r\n { value: 'P', label: 'Pendiente' }\r\n ];\r\n var defaultValue = options.filter(x => x.value == this.state.descripcion)[0];\r\n var title = disable ? \"Ver datos de Inscripción a Cursar\" : \"Modificar datos de Inscripción a Cursar\";\r\n return (\r\n <div>\r\n {!this.state.success ?\r\n <div>\r\n <h1>{title}</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se están actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n <div>\r\n <label> Datos del Alumno </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.alumnoNombre + \" - \" + this.state.alumno.alumnoCarreraNombre}\r\n />\r\n </div>\r\n <div>\r\n {!disable ? <Button color=\"link\" onClick={this.handleShowCursadaLookup}> Seleccione la Materia</Button> :\r\n <label> Datos de la Materia </label>}\r\n {this.state.showLookupCursada ? <LookupCursadasAlumnos alumnoCarreraCod={this.state.alumno.alumnocarreraCod} carreraCod={this.state.alumno.alumnoCarrera} selectItem={this.handleCursadaAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.cursada.cursadaMateriaNombre.trim() + \" - \" + this.state.cursada.cursadaPeriodo}\r\n />\r\n </div>\r\n <div>\r\n <div>\r\n <label> Estado de la Inscripción: </label>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"10\"\r\n placeholder=\"Ingrese PerÃodo de Cursada\"\r\n onChange={this.handleDescripcionChangeInput}\r\n disabled={true}\r\n value={this.getEstadoInscripcion(this.state.descripcion)}\r\n required\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-ica\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n :\r\n <Redirect to=\"/md-ica\" />}\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.descripcion.length > 0);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/ic',\r\n {\r\n method: 'PUT',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n CursadaCod: this.state.cursada.cursadaCodigo,\r\n AlumnoxCarreraCod: this.state.alumno.alumnocarreraCod,\r\n MateriaCarreraCod5: this.state.cursada.cursadaMateriaCodigo,\r\n InscripcionCursadaCod: this.state.id,\r\n InscripcionCursadaEstado: this.state.descripcion,\r\n IgnorarCorrelatividad: true\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import es from 'date-fns/locale/es';\r\nimport React, { Component } from 'react';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport { LookupAlumnos } from '../Alumnos/LookupAlumnos';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class ValidarInscripcionCursadas extends Component {\r\n static displayName = ValidarInscripcionCursadas.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showCursada: false,\r\n tagDataAlumno: [{ id: \"\", text: \"\" }],\r\n tagDataCursada: [{ id: \"\", text: \"\" }],\r\n alumno: { codigo: \"\", descripcion: \"\" },\r\n cursada: { codigo: \"\", descripcion: \"\" },\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n carreraCursada: -1,\r\n materiaCodigo: \"\"\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleSelectCursadaItem = this.handleSelectCursadaItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleHideLookup1 = this.handleHideLookup1.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWInscripcionCursada');\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ llamado: e.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagDataAlumno: this.state.tagDataAlumno.filter(tag => tag.id !== i), carreraCursada: -1 });\r\n }\r\n\r\n handleDeleteCursada = (i) => {\r\n this.setState({ tagDataCursada: this.state.tagDataCursada.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showCursada: true });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n handleHideLookup1 = () => {\r\n this.setState({ showCursada: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n this.setState({ llamado: e.target.value });\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupAnios: false,\r\n carreraCursada: Number(carreraProperties[3]),\r\n alumno: {\r\n codigo: carreraProperties[2],\r\n descripcion: carreraProperties[0] + \" - \" + carreraProperties[1]\r\n }\r\n });\r\n }\r\n\r\n handleSelectCursadaItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showCursada: false,\r\n materiaCodigo: carreraProperties[5],\r\n cursada: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[4].trim()\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <div>\r\n <h1>Validar Inscripciones</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"label\"> {this.state.loading ? \"Validando Inscripciones espere\" : \"\"}</span>\r\n <span className=\"label\"> {(this.state.success && !this.state.loading) ? \"Validaciones realizadas exitosamente\" : \"\"}</span>\r\n <div>\r\n\r\n {!this.state.loading ? <Button color=\"link\" onClick={this.handleShowAniosLookup}> Seleccione el Alumno</Button>\r\n : <label> Datos del Alumno </label>}\r\n {this.state.showLookupAnios ? <LookupAlumnos selectStudent={this.handleSelectAnioItem} hideLookup={this.handleHideLookup} /> : \"\"}\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n name=\"name\" size=\"30\"\r\n disabled={true}\r\n value={this.state.alumno.descripcion}\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Validar Inscripciones</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Validar Inscripciones</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.alumno.descripcion.length > 1);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/ic/changeStatusAll/' + this.state.alumno.codigo,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import es from 'date-fns/locale/es';\r\nimport React, { Component } from 'react';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class CargarMesas extends Component {\r\n static displayName = CargarMesas.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showCursada: false,\r\n tagDataAlumno: [{ id: \"\", text: \"\" }],\r\n tagDataCursada: [{ id: \"\", text: \"\" }],\r\n alumno: { codigo: \"\", descripcion: \"\" },\r\n cursada: { codigo: \"\", descripcion: \"\" },\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n carreraCursada: -1,\r\n materiaCodigo: \"\",\r\n base64: \"\",\r\n selectedFile: null\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleSelectCursadaItem = this.handleSelectCursadaItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleHideLookup1 = this.handleHideLookup1.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWMesaExamen');\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ llamado: e.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagDataAlumno: this.state.tagDataAlumno.filter(tag => tag.id !== i), carreraCursada: -1 });\r\n }\r\n\r\n handleDeleteCursada = (i) => {\r\n this.setState({ tagDataCursada: this.state.tagDataCursada.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showCursada: true });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n handleHideLookup1 = () => {\r\n this.setState({ showCursada: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n var reader = new FileReader();\r\n var file = e.target.files[0];\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n var base64 = reader.result.split(',')[1];\r\n this.setState({ showErrorMessage: false, errorMessage: '', base64: base64});\r\n };\r\n reader.onerror = (error) => {\r\n this.setState({ showErrorMessage: true, errorMessage: 'Error al leer el archivo:' + error });\r\n };\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupAnios: false,\r\n carreraCursada: Number(carreraProperties[3]),\r\n alumno: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1] + \" - \" + carreraProperties[2]\r\n }\r\n });\r\n }\r\n\r\n handleSelectCursadaItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showCursada: false,\r\n materiaCodigo: carreraProperties[5],\r\n cursada: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[4].trim()\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <div>\r\n <h1>Cargar Mesas de Examen</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"label\"> {this.state.loading ? \"Generando Mesas de Examen\" : \"\"}</span>\r\n <span className=\"label\"> {(this.state.success && !this.state.loading) ? \"Generación de Mesas de Examen exitosa\" : \"\"}</span>\r\n <div>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"file\"\r\n onChange={this.handleLlamadoChangeInput}\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Cargar Mesas</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Cargar Mesas</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.base64.length > 1);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/mex/archivo',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n Archivo: this.state.base64\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage, base64:\"\" });\r\n }\r\n}\r\n","import es from 'date-fns/locale/es';\r\nimport React, { Component } from 'react';\r\nimport { registerLocale } from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\n\r\nregisterLocale('es', es)\r\n\r\nexport class InscribirAlumnosPrimero extends Component {\r\n static displayName = InscribirAlumnosPrimero.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n descripcion: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n showLookupAnios: false,\r\n showCursada: false,\r\n tagDataAlumno: [{ id: \"\", text: \"\" }],\r\n tagDataCursada: [{ id: \"\", text: \"\" }],\r\n alumno: { codigo: \"\", descripcion: \"\" },\r\n cursada: { codigo: \"\", descripcion: \"\" },\r\n startDate: new Date(),\r\n endDate: new Date(),\r\n startInscriptionDate: new Date(),\r\n endInscriptionDate: new Date(),\r\n carreraCursada: -1,\r\n materiaCodigo: \"\",\r\n base64: \"\",\r\n selectedFile: null\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDescripcionChangeInput = this.handleDescripcionChangeInput.bind(this);\r\n this.handleLlamadoChangeInput = this.handleLlamadoChangeInput.bind(this);\r\n this.handleShowAniosLookup = this.handleShowAniosLookup.bind(this);\r\n this.handleSelectAnioItem = this.handleSelectAnioItem.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n this.handleShowCursadaLookup = this.handleShowCursadaLookup.bind(this);\r\n this.handleSelectCursadaItem = this.handleSelectCursadaItem.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleHideLookup1 = this.handleHideLookup1.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n var isOkToSave = this.isOkToSave();\r\n\r\n if (!isOkToSave) {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n } else {\r\n this.saveStudent();\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('WWAlumnos');\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ llamado: e.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({ tagDataAlumno: this.state.tagDataAlumno.filter(tag => tag.id !== i), carreraCursada: -1 });\r\n }\r\n\r\n handleDeleteCursada = (i) => {\r\n this.setState({ tagDataCursada: this.state.tagDataCursada.filter(tag => tag.id !== i) });\r\n }\r\n\r\n handleShowAniosLookup = () => {\r\n this.setState({ showLookupAnios: true });\r\n }\r\n\r\n handleShowCursadaLookup = () => {\r\n this.setState({ showCursada: true });\r\n }\r\n\r\n handleHideLookup = () => {\r\n this.setState({ showLookupAnios: false });\r\n }\r\n handleHideLookup1 = () => {\r\n this.setState({ showCursada: false });\r\n }\r\n\r\n handleDescripcionChangeInput = e => {\r\n this.setState({ descripcion: e.target.value });\r\n }\r\n\r\n handleLlamadoChangeInput = e => {\r\n var reader = new FileReader();\r\n var file = e.target.files[0];\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n var base64 = reader.result.split(',')[1];\r\n this.setState({ showErrorMessage: false, errorMessage: '', base64: base64});\r\n };\r\n reader.onerror = (error) => {\r\n this.setState({ showErrorMessage: true, errorMessage: 'Error al leer el archivo:' + error });\r\n };\r\n }\r\n\r\n handleSelectAnioItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupAnios: false,\r\n carreraCursada: Number(carreraProperties[3]),\r\n alumno: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1] + \" - \" + carreraProperties[2]\r\n }\r\n });\r\n }\r\n\r\n handleSelectCursadaItem = (e) => {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showCursada: false,\r\n materiaCodigo: carreraProperties[5],\r\n cursada: {\r\n codigo: carreraProperties[0],\r\n descripcion: carreraProperties[1].trim() + \" - \" + carreraProperties[2].trim() + \" - \" + carreraProperties[4].trim()\r\n }\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <div>\r\n <h1>Inscribir a Alumnos de primer Año</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"label\"> {this.state.loading ? \"Inscribiendo Alumnos\" : \"\"}</span>\r\n <span className=\"label\"> {(this.state.success && !this.state.loading) ? \"Inscripción de Alumnos exitosa\" : \"\"}</span>\r\n <div>\r\n <input\r\n className=\"pa3 bb br3 grow b--none bg-lightest-blue ma3 body\"\r\n type=\"file\"\r\n onChange={this.handleLlamadoChangeInput}\r\n />\r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Inscribir Alumnos</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Inscribir Alumnos</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.base64.length > 1);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/Students/archivo',\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n },\r\n body: JSON.stringify({\r\n Archivo: this.state.base64\r\n })\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage, base64:\"\" });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport Select from 'react-select';\r\nimport { Button, ButtonGroup } from 'reactstrap';\r\nimport '../Buttons.css';\r\nimport * as constantClass from '../fileWithConstants';\r\nimport '../Tags.css';\r\n\r\nconst optionsCuatrimestre = [\r\n { value: '', label: '' },\r\n { value: '1', label: 'PSICOPEDAGOGÃA' },\r\n { value: '2', label: 'Prof. en PsicologÃa' },\r\n { value: '3', label: 'PSICOPEDAGOGÃA - Transición' },\r\n { value: '4', label: 'PsicopedagogÃa' },\r\n];\r\n\r\nexport class ActualizarRegularidades extends Component {\r\n static displayName = ActualizarRegularidades.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: false,\r\n code: \"\",\r\n name: \"\",\r\n anioDictado: \"\",\r\n dictado: \"\",\r\n showErrorMessage: false,\r\n success: false,\r\n errorMessage: \"\",\r\n tagData: [{id:\"\",text:\"\"}],\r\n alumno: { alumnoDni: \"\", alumnoCodigo: 0, alumnoNombre: \"\" },\r\n carrera: { codigo: \"\", nombre: \"\" },\r\n showLookupStudent: false,\r\n showLookupCarreras: false,\r\n practica: \"\",\r\n value: { value: '', label: '' },\r\n valueDictado: { value: '', label: '' },\r\n name:\"\"\r\n };\r\n this.handleConfirmButton = this.handleConfirmButton.bind(this);\r\n this.handleDelete = this.handleDelete.bind(this);\r\n this.handleSelectCarreraItem = this.handleSelectCarreraItem.bind(this);\r\n this.handleShowCarreraLookup = this.handleShowCarreraLookup.bind(this);\r\n this.handleCodeChange = this.handleCodeChange.bind(this);\r\n this.handleNameChangeInput = this.handleNameChangeInput.bind(this);\r\n this.handleSelect = this.handleSelect.bind(this);\r\n this.handleDictadoChangeInput = this.handleDictadoChangeInput.bind(this);\r\n this.handleAnioChangeInput = this.handleAnioChangeInput.bind(this);\r\n this.handleHideLookup = this.handleHideLookup.bind(this);\r\n }\r\n\r\n handleConfirmButton = () => {\r\n if (this.isOkToSave()) {\r\n this.saveStudent();\r\n } else {\r\n this.setState({ showErrorMessage: true, errorMessage: \"Todos los campos son obligatorios\" });\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await constantClass.canAccess('HistoriaAcademicaCursada');\r\n }\r\n\r\n handleSelectCarreraItem = (e) =>\r\n {\r\n const carreraProperties = e.split('%');\r\n this.setState({\r\n showLookupCarreras: false,\r\n carrera: {\r\n codigo: carreraProperties[0],\r\n nombre: carreraProperties[1]\r\n }\r\n });\r\n }\r\n\r\n handleSelect = e => {\r\n this.setState({ practica: e.value, value: e });\r\n }\r\n\r\n handleHideLookup = () =>\r\n {\r\n this.setState({showLookupCarreras:false});\r\n }\r\n\r\n handleShowCarreraLookup = () =>\r\n {\r\n this.setState({showLookupCarreras:true});\r\n }\r\n\r\n handleNameChangeInput = e => {\r\n this.setState({ name: e.target.value });\r\n }\r\n\r\n handleAnioChangeInput = e => {\r\n this.setState({ anioDictado: e.target.value });\r\n }\r\n\r\n handleDictadoChangeInput = e => {\r\n this.setState({ dictado: e.value, valueDictado:e });\r\n }\r\n\r\n handleCodeChange = e => {\r\n this.setState({ code: e.target.value });\r\n }\r\n\r\n handleDelete = (i) => {\r\n this.setState({tagData:this.state.tagData.filter(tag =>tag.id !== i)});\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <div>\r\n <h1>Actualizar Regularidades por Carrera</h1>\r\n <span className=\"labelError\"> {this.state.errorMessage.length > 0 && !this.state.loading ? this.state.errorMessage : \"\"}</span>\r\n <span className=\"labelMessage\"> {this.state.loading ? \"Los datos se está actualizando, espere unos segundos...\" : \"\"}</span>\r\n <div className=\"pa2\">\r\n \r\n <div>\r\n <label> Carrera: </label>\r\n <div className=\"dropdownDictado\">\r\n <Select\r\n value={this.state.valueDictado}\r\n options={optionsCuatrimestre}\r\n onChange={this.handleDictadoChangeInput}\r\n />\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <ButtonGroup>\r\n {!this.state.loading ? (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => this.handleConfirmButton()} >Confirmar</Button>\r\n ) : (\r\n <Button className=\"editButton\" size=\"sm\" color=\"primary\" onClick={() => { }}>Confirmar</Button>\r\n )}\r\n {!this.state.loading ? (\r\n <Button size=\"sm\" tag={Link} to={\"/md-hic\"} >Cancelar</Button>\r\n ) : (\r\n <Button size=\"sm\">Cancelar</Button>\r\n )}\r\n </ButtonGroup>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n isOkToSave() {\r\n return (this.state.dictado.length>0);\r\n }\r\n\r\n async saveStudent() {\r\n this.setState({ showErrorMessage: false, loading: true });\r\n const response = await fetch('api/ic/actcur/' + this.state.dictado,\r\n {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': constantClass.AuthorizationHeader,\r\n 'Username': constantClass.ReturnUserName()\r\n }\r\n });\r\n const data = await response.json();\r\n var success = true;\r\n var errorMessage = \"\";\r\n if (data == \"Timeout\") {\r\n constantClass.RedirectToLogin();\r\n } else if (data.errorMessage || data == \"Forbidden.\") {\r\n var error = data.errorMessage ? data.errorMessage : \"Forbidden.\";\r\n errorMessage = \"Ocurrió un error al ejecutar la operación: \" + error;\r\n success = false;\r\n }\r\n this.setState({ loading: false, success: success, errorMessage: errorMessage });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './components/Home';\r\nimport { MDAlumnos } from './components/Alumnos/MDAlumnos';\r\nimport { MDCarreras } from './components/Carreras/MDCarreras';\r\nimport { MDAlumnoxCarrera } from './components/AlumnoCarrera/MDAlumnoxCarrera';\r\nimport { MDAnioAcademicos } from './components/AnioAcademico/MDAnioAcademicos';\r\nimport { MDMateriaCarrera } from './components/MateriaCarrera/MDMateriaCarrera';\r\nimport { MDPeriodoExamen } from './components/PeriodoExamen/MDPeriodoExamen';\r\nimport { MDCursadas } from './components/Cursadas/MDCursadas';\r\nimport { MDPeriodoCursada } from './components/PeriodoCursada/MDPeriodoCursada';\r\nimport { MDInscripcionCursada } from './components/InscripcionCursada/MDInscripcionCursada';\r\nimport { MDInscripcionExamen } from './components/InscripcionExamen/MDInscripcionExamen';\r\nimport { MDMesaExamen } from './components/MesaExamen/MDMesaExamen';\r\nimport { MDHistoriaAcademicaCursada } from './components/HistoriaAcademicaCursada/MDHistoriaAcademicaCursada';\r\nimport { MDActasCursadas } from './components/ActaCursada/MDActasCursadas';\r\nimport { MDHistoriaAcademicaExamen } from './components/HistoriaAcademicaExamen/MDHistoriaAcademicaExamen';\r\nimport { MDActaExamen } from './components/ActaExamen/MDActaExamen';\r\nimport { AddAlumnos } from './components/Alumnos/AddAlumnos';\r\nimport { AddCarrera } from './components/Carreras/AddCarrera';\r\nimport { AddAnioAcademico } from './components/AnioAcademico/AddAnioAcademico';\r\nimport { AddMateria } from './components/MateriaCarrera/AddMateria';\r\nimport { AddPeriodoExamen } from './components/PeriodoExamen/AddPeriodoExamen';\r\nimport { AddAlumnoCarrera } from './components/AlumnoCarrera/AddAlumnoCarrera';\r\nimport { AddMesaExamen } from './components/MesaExamen/AddMesaExamen';\r\nimport { AddInscripcionCursada } from './components/InscripcionCursada/AddInscripcionCursada';\r\nimport { AddInscripcionCursadaAlumnos } from './components/InscripcionCursada/AddInscripcionCursadaAlumnos';\r\nimport { AddCursada } from './components/Cursadas/AddCursada';\r\nimport { AddPeriodoCursada } from './components/PeriodoCursada/AddPeriodoCursada';\r\nimport { AddInscripcionExamen } from './components/InscripcionExamen/AddInscripcionExamen';\r\nimport { UpdateAlumno } from './components/Alumnos/UpdateAlumno';\r\nimport { UpdateCarrera } from './components/Carreras/UpdateCarrera';\r\nimport { UpdateAlumnoCarrera } from './components/AlumnoCarrera/UpdateAlumnoCarrera';\r\nimport { UpdateMateria } from './components/MateriaCarrera/UpdateMateria';\r\nimport { UpdateAnioAcademico } from './components/AnioAcademico/UpdateAnioAcademico';\r\nimport { UpdatePeriodoExamen } from './components/PeriodoExamen/UpdatePeriodoExamen';\r\nimport { UpdateCursada } from './components/Cursadas/UpdateCursada';\r\nimport { UpdatePeriodoCursada } from './components/PeriodoCursada/UpdatePeriodoCursada';\r\nimport { UpdateInscripcionCursada } from './components/InscripcionCursada/UpdateInscripcionCursada';\r\nimport { UpdateMesaExamen } from './components/MesaExamen/UpdateMesaExamen';\r\nimport { UpdateInscripcionExamen } from './components/InscripcionExamen/UpdateInscripcionExamen';\r\nimport { UpdateHistoriaAcademicaCursada } from './components/HistoriaAcademicaCursada/UpdateHistoriaAcademicaCursada';\r\nimport { UpdateHistoriaAcademicaExamen } from './components/HistoriaAcademicaExamen/UpdateHistoriaAcademicaExamen';\r\nimport { UpdateEncabezado } from './components/ActaExamen/UpdateEncabezado';\r\nimport { Counter } from './components/Counter';\r\nimport { GenerarCursadas } from './components/Cursadas/GenerarCursadas';\r\nimport { InscribirAlumno } from './components/AlumnoCarrera/InscribirAlumno';\r\nimport { CargarActaCursada } from './components/ActaCursada/CargarActaCursada';\r\nimport { CargarActaExamen } from './components/ActaExamen/CargarActaExamen';\r\nimport { VerActaCursada } from './components/ActaCursada/VerActaCursada';\r\nimport { VerActaExamen } from './components/ActaExamen/VerActaExamen';\r\nimport { GenerateEstadoCurricular } from './components/EstadoCurriculares/GenerateEstadoCurricular';\r\nimport { MDInscripcionCursadaAlumno } from './components/InscripcionCursada/MDInscripcionCursadaAlumno';\r\nimport { UpdateInscripcionCursadaAlumno } from './components/InscripcionCursada/UpdateInscripcionCursadaAlumno';\r\nimport { ValidarInscripcionCursadas } from './components/InscripcionCursada/ValidarInscripcionCursadas';\r\nimport { CargarMesas } from './components/MesaExamen/CargarMesas';\r\nimport { InscribirAlumnosPrimero } from './components/Alumnos/InscribirAlumnosPrimero';\r\nimport { ActualizarRegularidades } from './components/HistoriaAcademicaCursada/ActualizarRegularidades';\r\n\r\nimport './custom.css'\r\n\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n render () {\r\n return (\r\n <Layout>\r\n <Route exact path='/' component={Home} />\r\n <Route path='/counter' component={Counter} />\r\n <Route path='/accur' component={ActualizarRegularidades} />\r\n <Route path='/md-alumnos' component={MDAlumnos} />\r\n <Route path='/md-ica' component={MDInscripcionCursadaAlumno} />\r\n <Route path='/md-carreras' component={MDCarreras} />\r\n <Route path='/md-axc' component={MDAlumnoxCarrera} />\r\n <Route path='/md-mxc' component={MDMateriaCarrera} />\r\n <Route path='/md-anios' component={MDAnioAcademicos} />\r\n <Route path='/md-pex' component={MDPeriodoExamen} />\r\n <Route path='/md-pcr' component={MDPeriodoCursada} />\r\n <Route path='/md-cur' component={MDCursadas} />\r\n <Route path='/md-ic' component={MDInscripcionCursada} />\r\n <Route path='/md-ie' component={MDInscripcionExamen} />\r\n <Route path='/md-mex' component={MDMesaExamen} />\r\n <Route path='/gen-cur' component={GenerarCursadas} />\r\n <Route path='/md-acur' component={MDActasCursadas} />\r\n <Route path='/md-hic' component={MDHistoriaAcademicaCursada} />\r\n <Route path='/md-hex' component={MDHistoriaAcademicaExamen} />\r\n <Route path='/md-aex' component={MDActaExamen} />\r\n <Route path='/add-alumno' component={AddAlumnos} />\r\n <Route path='/add-carrera' component={AddCarrera} />\r\n <Route path='/add-axc' component={AddAlumnoCarrera} />\r\n <Route path='/add-mxc' component={AddMateria} />\r\n <Route path='/add-anio' component={AddAnioAcademico} />\r\n <Route path='/add-pex' component={AddPeriodoExamen} />\r\n <Route path='/add-pcr' component={AddPeriodoCursada} />\r\n <Route path='/add-cur' component={AddCursada} />\r\n <Route path='/add-ic' component={AddInscripcionCursada} />\r\n <Route path='/add-ica' component={AddInscripcionCursadaAlumnos} />\r\n <Route path='/add-ie' component={AddInscripcionExamen} />\r\n <Route path='/add-mex' component={AddMesaExamen} />\r\n <Route path='/update-alumno/:id/:details' component={UpdateAlumno} />\r\n <Route path='/update-carrera/:id/:details' component={UpdateCarrera} />\r\n <Route path='/update-axc/:id/:details' component={UpdateAlumnoCarrera} />\r\n <Route path='/update-mxc/:id/:details' component={UpdateMateria} />\r\n <Route path='/update-anio/:id/:details' component={UpdateAnioAcademico} />\r\n <Route path='/update-pex/:id/:details' component={UpdatePeriodoExamen} />\r\n <Route path='/update-pcr/:id/:details' component={UpdatePeriodoCursada} />\r\n <Route path='/update-cur/:id/:details' component={UpdateCursada} />\r\n <Route path='/update-ic/:id/:details' component={UpdateInscripcionCursada} />\r\n <Route path='/update-mex/:id/:details' component={UpdateMesaExamen} />\r\n <Route path='/update-ie/:id/:details' component={UpdateInscripcionExamen} />\r\n <Route path='/update-hic/:id/:details' component={UpdateHistoriaAcademicaCursada} />\r\n <Route path='/update-hex/:id/:details' component={UpdateHistoriaAcademicaExamen} />\r\n <Route path='/update-ica/:id/:details' component={UpdateInscripcionCursadaAlumno} />\r\n <Route path='/update-eae/:id' component={UpdateEncabezado} />\r\n <Route path='/axc-inscribir' component={InscribirAlumno} />\r\n <Route path='/acur/load/:id' component={CargarActaCursada} />\r\n <Route path='/aex/load/:id' component={CargarActaExamen} />\r\n <Route path='/acur/watch/:id' component={VerActaCursada} />\r\n <Route path='/aex/watch/:id' component={VerActaExamen} />\r\n <Route path='/ecur' component={GenerateEstadoCurricular} />\r\n <Route path='/vic' component={ValidarInscripcionCursadas} />\r\n <Route path='/cme' component={CargarMesas} />\r\n <Route path='/iap' component={InscribirAlumnosPrimero} />\r\n </Layout>\r\n );\r\n }\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n <BrowserRouter basename={baseUrl}>\r\n <App />\r\n </BrowserRouter>,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n\r\n"],"sourceRoot":""}