{"version":3,"sources":["services/util.js","services/constant.js","assets/img/logo-2.svg","services/url.js","AppContext.js","services/index.js","services/auth.service.js","components/NavMenu.js","components/RevertImpersonationBanner.js","layouts/AuthLayout.js","components/Home.js","components/Icon.js","components/Paginacion.js","components/MisParalelos.js","components/UnidadConsulta.js","components/UnidadEvaluacionDetalle.js","components/UnidadEvaluacion.js","components/Accion.js","components/ProgramaConsulta.js","components/Datepicker.js","components/ProgramaEvaluacion.js","components/UnidadParalelos.js","components/MateriasConsulta.js","components/Materias.js","components/ParalelosMateria.js","components/ProfesoresConsulta.js","components/Profesores.js","components/ParalelosProfesor.js","components/TablaCabecera.js","components/TablaPromedios.js","components/GraficoBarras.js","components/GraficoBarrasApiladas.js","components/Paralelo.js","components/TablaCabeceraPractica.js","components/Practica.js","components/TablaComentarios.js","components/Comentarios.js","components/ComentariosPractica.js","components/withRoleAccess.js","components/UserManagement.js","components/ReportesConsolidados.js","components/ImpersonateUser.js","components/UnauthorizedAccess.js","components/GraficoParaleloArea.js","App.js","registerServiceWorker.js","index.js"],"names":["isEmpty","obj","undefined","toString","replace","throwError","err","Error","getCurrentUrl","withoutTicket","url","window","location","href","getParamFromCurrentUrl","param","URL","searchParams","get","getFullProtocol","protocol","includes","isParamExistsInUrl","CAS_VERSION_2_0","CAS_VERSION_3_0","CAS_VERSIONS","CAS_STATUS_IN_PROCESS","CAS_ERROR_FETCH","CAS_ERROR_PARSE_RESPONSE","CAS_ERROR_AUTH_ERROR","module","exports","buildUrl","require","constant","util","getLoginUrl","cas","gateway","baseUrl","_getCasBaseUrl","queryParams","redirectUrl","service","status","version","path","getLogoutUrl","redirectPath","origin","params","Object","keys","length","getValidateUrl","ticket","format","proxy_callback_url","pgtUrl","withProxyIfExists","validation_proxy","validation_proxy_protocol","endpoint","validation_proxy_endpoint","validation_proxy_path","AppContext","React","createContext","currentUser","updateUser","fetch","xml2js","urls","MySwal","withReactContent","Swal","defaultOptions","CasClient","options","this","Promise","resolve","reject","_handleFailsValdiate","type","message","_validateTicket","user","pgtIou","response","currentUrl","pathname","currentPath","content_type","fire","title","text","allowOutsideClick","showConfirmButton","willOpen","showLoading","headers","then","close","jsonResponse","JSON","parse","parseStringPromise","xmlContent","result","successes","token","_handleSuccessValdiate","failures","code","$","trim","_","bind","catch","error","exception","json","serviceResponse","authenticationSuccess","proxyGrantingTicket","authenticationFailure","description","callback","_getSuccessResponse","cookies","Cookies","currentUserSubject","BehaviorSubject","usuario","numeroidentificacion","roles","process","split","CAS_PROTOCOL","CAS_SERVER","PROXY_PROTOCOL","PROXY_SERVER","casClient","authService","login","history","casLogin","logout","remove","next","validateToken","decodedToken","isImpersonating","signinUser","username","identificacion","tipoidentificacion","apellidos","nombres","rolesObj","Array","isArray","map","roleObj","role","Role","scope","Scope","scopeName","ScopeName","isImpersonated","setGlobalFetch","asObservable","value","auth","successRes","signin","errorRes","data","netId","realFetch","opts","assign","indexOf","set","NavMenu","props","toggleNavbar","state","collapsed","setState","handleLogin","handleLogout","context","Navbar","className","light","Container","NavbarBrand","tag","Link","to","NavbarToggler","onClick","Collapse","isOpen","navbar","NavItem","NavLink","data-bs-toggle","data-bs-target","aria-controls","aria-expanded","aria-label","id","UncontrolledDropdown","nav","inNavbar","DropdownToggle","caret","DropdownMenu","right","some","r","DropdownItem","divider","Component","displayName","name","contextType","RevertImpersonationBanner","revertToOriginalUser","useContext","style","position","bottom","width","backgroundColor","padding","textAlign","zIndex","display","justifyContent","alignSelf","fontWeight","paddingLeft","color","marginLeft","createBrowserHistory","AuthLayout","src","logo","height","alt","children","Home","Icon","icon","Provider","Paginacion","total","page","size","search1","search2","handle","last","Math","ceil","pages","p","group","trunc","Pagination","PaginationItem","key","PaginationLink","String","fromCharCode","max","i","active","filter","min","APIURL","MisParalelos","paralelos","loading","handlePage","handleDetalle","toggle","document","TITLE","parseInt","match","populateData","push","anio","termino","codigo","paralelo","verpdf","slice","onBeforeOpen","cedula","idnivelformacion","datapdf","console","valor","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","signDisplay","Table","responsive","striped","index","porcentaje","round","evaluados","registrados","nivel","materia","UncontrolledTooltip","placement","target","formatter","promedio","Modal","ModalHeader","ModalBody","pluginspage","ModalFooter","Button","colSpan","contents","renderTable","datos","UnidadConsulta","handleChange","event","onInputChange","handleDocenteChange","handleSubmit","preventDefault","handleDocenteSubmit","unidades","unidadOptions","anios","anioOptions","terminos","terminoOptions","unidad","unidadValue","aniosValue","terminosValue","onSubmit","Row","Col","md","htmlFor","Input","placeholder","onChange","uo","idx","anioValue","a","terminoValue","t","maxLength","UnidadEvaluacionDetalle","estudiantes","verlista","ListGroup","numbered","e","ListGroupItem","estado","estudiante","BASEURL","UnidadEvaluacion","useState","setTotal","setLoading","setParalelos","periodos","populateInitialData","unidadesRol","initialUnidad","initialAnios","initialPeriodos","responsePeriodos","dataPeriodos","forEach","at","initialAnio","initialTerminos","initialTermino","initialPage","initialSize","prevState","apiUrl","encodeURIComponent","useEffect","prevParalelos","aria-labelledby","docente","Accion","action","tooltip","ProgramaConsulta","unidadesOptions","unidadesValue","defaultValue","label","programaValue","programaOptions","registerLocale","es","Datepicker","date","Date","log","stringify","toISOString","selected","dateFormat","placeholderText","disabled","locale","dateOptions","year","month","day","ProgramaEvaluacion","dateformatter","fecha","DateTimeFormat","dateStyle","programa","programas","handleDateChange","handleInputChange","toggleFormDate","toggleEstudiantes","downloadUnidadProgramaCohorteAnioTerminoExcel","downloadPlanificacionAnioExcel","paraleloState","dtFechaextendidaevaluacion","cohorte","findIndex","sistema","idcurso","dtFechainicioevaluacion","fechainicioevaluacion","fechaextendidaevaluacion","fechafinevaluacion","dateMinValue","ultimoCambio","formDate","method","body","nivelformacion","tipocurso","grupo","fuente","fechainicio","fechafin","fechaextendida","idpersona","res","pa","evaluacionfin","idprogramas","programascohortes","blob","createObjectURL","createElement","download","click","dtFechafinevaluacion","toLocaleString","programas_cohortes","every","pc","idprograma","uniqueScopes","Set","filteredRoles","has","add","sort","b","localeCompare","u","pra","responseProgramasCohortes","dataProgramasCohortes","codunidad","programa_cohorte_seleccionados","UnidadParalelos","MateriasConsulta","nombre","Materias","materias","newUrl","ParalelosMateria","didOpen","gap","ProfesoresConsulta","Profesores","profesores","profesor","ParalelosProfesor","TablaCabecera","idparalelo","TablaPromedios","area","preguntas","idarea","idpregunta","pregunta","media","desviacionestandar","GraficoBarras","labels","values","transitions","animation","duration","indexAxis","elements","bar","borderWidth","plugins","legend","datalabels","datasets","borderColor","ChartJS","register","CategoryScale","LinearScale","BarElement","Title","Tooltip","Legend","GraficoBarrasApiladas","titulo","divRef","useRef","imgRef","scales","x","stacked","y","dataIndex","dataset","computeOptions","borderColorsL0","backgroundColorsL0","borderColorsL1","backgroundColorsL1","borderColorsL2","backgroundColorsL2","etiquetas","ordenAlternativa","alternativa","totalEtiquetas","d","frecuencia","toFixed","generateData","chartRef","useCallback","chart","div","current","divStyle","img","toBase64Image","ref","ChartDataLabels","Paralelo","areas","frecuencias","alternativas","modo","onDownloadPdf","comparativo","chunks","parts","aux","c","valoresFrecuencias","f","valoresPuntaje","UncontrolledCollapse","toggler","Card","CardBody","respuestas","dataResponse","dataParalelo","frecuenciasResponse","dataFrecuencias","TablaCabeceraPractica","practica","Practica","dataPractica","TablaComentarios","tipo","comentarios","Comentarios","populateData2","comentario","mantener","mejorar","cambiar","dataComentarios","ComentariosPractica","setPractica","setComentarios","withRoleAccess","WrappedComponent","allowedRoles","users","setUsers","modalIsOpen","setModalIsOpen","idRole","idUnidad","idPrograma","searchCriteria","setSearchCriteria","searchResults","setSearchResults","setRoles","rolesLoading","setRolesLoading","refreshTable","setRefreshTable","roleNameSelected","setRoleNameSelected","setUnidadOptions","programasOptions","setProgramasOptions","isCreateButtonDisabled","setIsCreateButtonDisabled","currentPage","setCurrentPage","adminRole","find","item","idhedrole","rolename","isCreateUserButtonDisabled","fetchUsers","toggleModal","handleSearchCriteriaChange","selectedRole","roleName","idunidad","dataProg","nombreunidad","idheduser","email","payload","idHedUser","handleDeleteRole","indexOfLastUser","indexOfFirstUser","paginatedUsers","centered","onClosed","maxWidth","emailAddress","handleSelectUser","previousLabel","nextLabel","pageCount","onPageChange","selectedPage","containerClassName","activeClassName","previousLinkClassName","nextLinkClassName","disabledClassName","yearEspae","setYearEspae","termEspae","setTermEspae","yearsEspae","setYearsEspae","yearGrado","setYearGrado","termGrado","setTermGrado","yearsGrado","setYearsGrado","anioAcademico","downloadReportEspae","requestBody","contentDisposition","filename","matches","exec","downloadReportGrado","flexDirection","CardHeader","form","FormGroup","Label","for","useHistory","startImpersonation","impersonate","targetUsername","TargetUserId","ok","isConfirmed","UnauthorizedAccess","alignItems","margin","GraficoParaleloArea","ordenArea","ordenPregunta","publicRoutes_prefix","publicRoutes_exact","App","impersonationToken","jwt","decode","originalToken","errorInfo","authToken","tokenObj","exp","currentTime","floor","now","isTokenExpired","impToken","decodedImpToken","subscription","subscribe","pr","startsWith","unsubscribe","component","exact","UserManagement","ImpersonateUser","ReportesConsolidados","withRouter","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","registration","onupdatefound","installingWorker","installing","onstatechange","controller","dotenv","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","basename","addEventListener","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.d2e02328.chunk.js","sourcesContent":["const isEmpty = (obj) => {\r\n return (\r\n obj === undefined ||\r\n obj === null ||\r\n obj.toString().replace(/\\s/g, '') === ''\r\n );\r\n};\r\n\r\nconst throwError = (err) => {\r\n throw new Error('[CasClient]: ' + err);\r\n};\r\n\r\nconst getCurrentUrl = (withoutTicket = true) => {\r\n let url = window.location.href;\r\n if (withoutTicket) {\r\n return url.replace(/(^|[&?])ticket(=[^&]*)?/, '');\r\n }\r\n return url;\r\n};\r\n\r\nconst getParamFromCurrentUrl = (param) => {\r\n return new URL(window.location.href).searchParams.get(param);\r\n};\r\n\r\nconst getFullProtocol = (protocol) => {\r\n return ['http', 'http:'].includes(protocol) ? 'http://' : 'https://';\r\n};\r\n\r\nconst isParamExistsInUrl = (url, param) => {\r\n const value = new URL(url).searchParams.get(param);\r\n return value !== null;\r\n};\r\n\r\nexport {\r\n isEmpty,\r\n throwError,\r\n getCurrentUrl,\r\n getParamFromCurrentUrl,\r\n getFullProtocol,\r\n isParamExistsInUrl,\r\n};\r\n","const CAS_VERSION_2_0 = '2.0';\r\nconst CAS_VERSION_3_0 = '3.0';\r\n\r\nconst CAS_VERSIONS = [CAS_VERSION_2_0, CAS_VERSION_3_0];\r\n\r\nconst CAS_STATUS_IN_PROCESS = 'in_process';\r\n\r\nexport {\r\n CAS_VERSION_2_0,\r\n CAS_VERSION_3_0,\r\n CAS_VERSIONS,\r\n CAS_STATUS_IN_PROCESS,\r\n};\r\n\r\n/**\r\n * Errors\r\n */\r\nconst CAS_ERROR_FETCH = 'FETCH_ERROR';\r\nconst CAS_ERROR_PARSE_RESPONSE = 'PARSE_RESPONSE_ERROR';\r\nconst CAS_ERROR_AUTH_ERROR = 'AUTH_ERROR';\r\n\r\nexport { CAS_ERROR_FETCH, CAS_ERROR_PARSE_RESPONSE, CAS_ERROR_AUTH_ERROR };\r\n","module.exports = __webpack_public_path__ + \"static/media/logo-2.fc3ceb2c.svg\";","const buildUrl = require('build-url');\r\n\r\nconst constant = require('./constant');\r\nconst util = require('./util');\r\n\r\nconst getLoginUrl = (cas, gateway = false) => {\r\n let baseUrl = _getCasBaseUrl(cas);\r\n\r\n let queryParams = !util.isParamExistsInUrl(cas.redirectUrl, 'status')\r\n ? {\r\n service: buildUrl(cas.redirectUrl, {\r\n queryParams: { status: constant.CAS_STATUS_IN_PROCESS },\r\n }),\r\n }\r\n : {\r\n service: buildUrl(cas.redirectUrl),\r\n };\r\n\r\n if (gateway) {\r\n queryParams.gateway = true;\r\n }\r\n switch (cas.version) {\r\n case constant.CAS_VERSION_2_0:\r\n case constant.CAS_VERSION_3_0:\r\n return buildUrl(baseUrl, {\r\n path: 'login',\r\n queryParams: queryParams,\r\n });\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n};\r\n\r\nconst getLogoutUrl = (cas, redirectPath = '') => {\r\n let baseUrl = _getCasBaseUrl(cas);\r\n let redirectUrl = buildUrl(window.location.origin, {\r\n path: redirectPath,\r\n });\r\n let queryParams = {};\r\n\r\n switch (cas.version) {\r\n case constant.CAS_VERSION_2_0:\r\n if (!util.isEmpty(redirectPath)) {\r\n queryParams = {\r\n url: redirectUrl,\r\n };\r\n }\r\n break;\r\n case constant.CAS_VERSION_3_0:\r\n if (!util.isEmpty(redirectPath)) {\r\n queryParams = {\r\n service: redirectUrl,\r\n };\r\n }\r\n break;\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n\r\n let params = { path: 'logout' };\r\n if (Object.keys(queryParams).length !== 0) {\r\n params.queryParams = queryParams;\r\n }\r\n\r\n return buildUrl(baseUrl, params);\r\n};\r\n\r\nconst getValidateUrl = (cas, ticket) => {\r\n let baseUrl = _getCasBaseUrl(cas, true);\r\n let queryParams = {\r\n service: cas.redirectUrl,\r\n ticket: ticket,\r\n };\r\n\r\n let path = '';\r\n switch (cas.version) {\r\n case constant.CAS_VERSION_2_0:\r\n path = 'serviceValidate';\r\n break;\r\n case constant.CAS_VERSION_3_0:\r\n path = 'p3/serviceValidate';\r\n queryParams.format = 'json';\r\n break;\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n\r\n if (!util.isEmpty(cas.proxy_callback_url)) {\r\n queryParams.pgtUrl = cas.proxy_callback_url;\r\n }\r\n\r\n return buildUrl(baseUrl, {\r\n path: path,\r\n queryParams: queryParams,\r\n });\r\n};\r\n\r\nconst _getCasBaseUrl = (cas, withProxyIfExists = false) => {\r\n if (withProxyIfExists && cas.validation_proxy) {\r\n const protocol = !util.isEmpty(cas.validation_proxy_protocol)\r\n ? util.getFullProtocol(cas.validation_proxy_protocol)\r\n : util.getFullProtocol(window.location.protocol);\r\n window.location.origin.replace(/(^\\w+:|^)\\/\\//, '');\r\n const endpoint = !util.isEmpty(cas.validation_proxy_endpoint)\r\n ? cas.validation_proxy_endpoint\r\n : window.location.origin.replace(/(^\\w+:|^)\\/\\//, '');\r\n return protocol + endpoint + cas.validation_proxy_path;\r\n } else {\r\n return util.getFullProtocol(cas.protocol) + cas.endpoint + cas.path;\r\n }\r\n};\r\n\r\nexport { getLoginUrl, getLogoutUrl, getValidateUrl };\r\n","import React from 'react';\r\n\r\nexport const AppContext = React.createContext({\r\n currentUser: null,\r\n updateUser: () => { },\r\n});\r\n","import Swal from 'sweetalert2'\r\nimport withReactContent from 'sweetalert2-react-content'\r\n\r\nconst fetch = require('node-fetch');\r\nconst xml2js = require('xml2js');\r\nconst util = require('./util');\r\nconst urls = require('./url');\r\nconst constant = require('./constant');\r\n\r\nconst MySwal = withReactContent(Swal);\r\n\r\nconst defaultOptions = {\r\n protocol: 'https',\r\n path: '/cas',\r\n version: constant.CAS_VERSION_3_0,\r\n proxy_callback_url: '',\r\n validation_proxy: false,\r\n validation_proxy_protocol: '',\r\n validation_proxy_endpoint: '',\r\n validation_proxy_path: '',\r\n};\r\n\r\nclass CasClient {\r\n constructor(endpoint, options = {}) {\r\n if (util.isEmpty(endpoint)) {\r\n util.throwError('Missing endpoint');\r\n }\r\n let version = options.version || defaultOptions.version;\r\n if (!constant.CAS_VERSIONS.includes(version)) {\r\n util.throwError('Unsupported CAS Version');\r\n }\r\n\r\n this.endpoint = endpoint;\r\n this.path = options.path || defaultOptions.path;\r\n this.protocol = options.protocol || defaultOptions.protocol;\r\n this.version = options.version || defaultOptions.version;\r\n this.proxy_callback_url =\r\n options.proxy_callback_url || defaultOptions.proxy_callback_url;\r\n this.validation_proxy =\r\n options.validation_proxy || defaultOptions.validation_proxy;\r\n this.validation_proxy_protocol =\r\n options.validation_proxy_protocol ||\r\n defaultOptions.validation_proxy_protocol;\r\n this.validation_proxy_endpoint =\r\n options.validation_proxy_endpoint ||\r\n defaultOptions.validation_proxy_endpoint;\r\n this.validation_proxy_path =\r\n options.validation_proxy_path || defaultOptions.validation_proxy_path;\r\n\r\n this.redirectUrl = util.getCurrentUrl();\r\n }\r\n\r\n auth(gateway = false) {\r\n return new Promise((resolve, reject) => {\r\n /**\r\n * Save ticket to sessionStorage if exists\r\n */\r\n const ticket = util.getParamFromCurrentUrl('ticket');\r\n if (util.isEmpty(ticket)) {\r\n let status = util.getParamFromCurrentUrl('status');\r\n if (status === constant.CAS_STATUS_IN_PROCESS) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_AUTH_ERROR,\r\n message: 'Missing ticket from return url',\r\n });\r\n } else {\r\n window.location.href = urls.getLoginUrl(this, gateway);\r\n }\r\n } else {\r\n this._validateTicket(ticket, resolve, reject);\r\n }\r\n });\r\n }\r\n\r\n logout(redirectPath = '') {\r\n window.location.href = urls.getLogoutUrl(this, redirectPath);\r\n }\r\n\r\n _getSuccessResponse(user, pgtIou = null) {\r\n let response = {\r\n currentUrl: window.location.origin + window.location.pathname,\r\n currentPath: window.location.pathname,\r\n user: user,\r\n };\r\n if (pgtIou) {\r\n response.pgtIou = pgtIou;\r\n }\r\n return response;\r\n }\r\n\r\n _validateTicket(ticket, resolve, reject) {\r\n let version = this.version;\r\n let content_type;\r\n switch (version) {\r\n case constant.CAS_VERSION_2_0:\r\n content_type = 'text/xml';\r\n break;\r\n case constant.CAS_VERSION_3_0:\r\n content_type = 'application/json';\r\n break;\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n\r\n MySwal.fire({\r\n title: 'Ingresando',\r\n text: 'Por favor, espere...',\r\n allowOutsideClick: false,\r\n showConfirmButton: false,\r\n willOpen: () => {\r\n MySwal.showLoading()\r\n }\r\n });\r\n\r\n fetch(urls.getValidateUrl(this, ticket), {\r\n headers: {\r\n 'Content-Type': content_type,\r\n },\r\n })\r\n .then(\r\n function (response) {\r\n response\r\n .text()\r\n .then(\r\n function (text) {\r\n MySwal.close();\r\n switch (version) {\r\n case constant.CAS_VERSION_2_0:\r\n let jsonResponse = JSON.parse(text);\r\n xml2js\r\n .parseStringPromise(jsonResponse.xmlContent)\r\n .then(\r\n function (result) {\r\n let response = result['cas:serviceResponse'];\r\n if (response['cas:authenticationSuccess']) {\r\n let successes =\r\n response['cas:authenticationSuccess'];\r\n if (successes.length) {\r\n jsonResponse.user.token = jsonResponse.token;\r\n let user = jsonResponse.user;\r\n\r\n let pgtIou = null;\r\n if (!util.isEmpty(this.proxy_callback_url)) {\r\n pgtIou =\r\n successes[0]['cas:proxyGrantingTicket'][0];\r\n }\r\n this._handleSuccessValdiate(\r\n resolve,\r\n user,\r\n pgtIou\r\n );\r\n\r\n this._handleSuccessValdiate(resolve, user);\r\n }\r\n } else {\r\n let failures =\r\n response['cas:authenticationFailure'];\r\n if (failures.length) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_AUTH_ERROR,\r\n code: failures[0].$.code.trim(),\r\n message: failures[0]._.trim(),\r\n });\r\n }\r\n }\r\n }.bind(this)\r\n )\r\n .catch(\r\n function (error) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_PARSE_RESPONSE,\r\n message: 'Failed to parse response',\r\n exception: error,\r\n });\r\n }.bind(this)\r\n );\r\n break;\r\n case constant.CAS_VERSION_3_0:\r\n try {\r\n let json = JSON.parse(text);\r\n if (json.serviceResponse) {\r\n if (json.serviceResponse.authenticationSuccess) {\r\n let user =\r\n json.serviceResponse.authenticationSuccess.user;\r\n let pgtIou = null;\r\n if (!util.isEmpty(this.proxy_callback_url)) {\r\n pgtIou =\r\n json.serviceResponse.authenticationSuccess\r\n .proxyGrantingTicket;\r\n }\r\n this._handleSuccessValdiate(resolve, user, pgtIou);\r\n } else {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_AUTH_ERROR,\r\n code: json.serviceResponse.authenticationFailure\r\n .code,\r\n message:\r\n json.serviceResponse.authenticationFailure\r\n .description,\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_PARSE_RESPONSE,\r\n message: 'Failed to parse response',\r\n exception: error,\r\n });\r\n }\r\n break;\r\n default:\r\n throw util.throwError('Unsupported CAS Version');\r\n }\r\n throw util.throwError('Stop...');\r\n }.bind(this)\r\n )\r\n .catch(\r\n function (error) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_PARSE_RESPONSE,\r\n message: 'Failed to parse response',\r\n exception: error,\r\n });\r\n }.bind(this)\r\n );\r\n }.bind(this)\r\n )\r\n .catch(\r\n function (error) {\r\n this._handleFailsValdiate(reject, {\r\n type: constant.CAS_ERROR_FETCH,\r\n message: 'Failed to connect CAS server',\r\n exception: error,\r\n });\r\n }.bind(this)\r\n );\r\n }\r\n\r\n _handleSuccessValdiate(callback, user, pgtIou = null) {\r\n callback(this._getSuccessResponse(user, pgtIou));\r\n }\r\n\r\n _handleFailsValdiate(callback, error) {\r\n error.currentUrl = window.location.origin + window.location.pathname;\r\n error.currentPath = window.location.pathname;\r\n callback(error);\r\n }\r\n}\r\n\r\nexport default CasClient;\r\nexport { constant };\r\n","import { BehaviorSubject } from 'rxjs';\r\nimport CasClient, { constant } from \"./index.js\";\r\nimport Cookies from 'universal-cookie';\r\n\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst cookies = new Cookies();\r\n\r\nconst currentUser = {\r\n usuario: \"\",\r\n numeroidentificacion: \"\",\r\n roles: []\r\n};\r\n\r\nconst currentUserSubject = new BehaviorSubject(currentUser);\r\nconst [CAS_PROTOCOL, CAS_SERVER] = (process.env.REACT_APP_CAS_URL).split(\"://\");\r\nconst [PROXY_PROTOCOL, PROXY_SERVER] = APIURL.split(\"://\");\r\n\r\nconst casOptions = {\r\n version: constant.CAS_VERSION_2_0, path: '/', protocol: CAS_PROTOCOL, validation_proxy: true, validation_proxy_protocol: PROXY_PROTOCOL,\r\n validation_proxy_endpoint: PROXY_SERVER, validation_proxy_path: \"/api/Account/\"\r\n}\r\n\r\nconst casClient = new CasClient(CAS_SERVER, casOptions);\r\n\r\nexport const authService = {\r\n login,\r\n logout,\r\n validateToken,\r\n setGlobalFetch,\r\n currentUser: currentUserSubject.asObservable(),\r\n get currentUserValue() { return currentUserSubject.value },\r\n};\r\n\r\nfunction login(history, gateway = false) {\r\n casLogin(history, gateway);\r\n}\r\n\r\nfunction logout() {\r\n signout();\r\n casLogout();\r\n}\r\n\r\nfunction casLogin(history, gateway = false) {\r\n //console.log(\"AdminLayout casLogin gateway = \" + (gateway ? \"true\" : \"false\"));\r\n casClient\r\n .auth(gateway)\r\n .then(successRes => {\r\n //console.log(\"App successRes = \" + JSON.stringify(successRes));\r\n history.replace(successRes.currentPath);\r\n signin(successRes.user)\r\n })\r\n .catch(errorRes => {\r\n //console.log(\"App errorRes = \" + JSON.stringify(errorRes));\r\n history.replace(errorRes.currentPath);\r\n });\r\n}\r\n\r\nfunction casLogout() {\r\n casClient.logout();\r\n}\r\n\r\nfunction signin(data) {\r\n\r\n if (data) {\r\n let signinUser = {\r\n usuario: data.netId,\r\n numeroidentificacion: data.numeroidentificacion,\r\n tipoidentificacion: data.tipoidentificacion,\r\n apellidos: data.apellidos,\r\n nombres: data.nombres,\r\n roles: data.roles,\r\n token: data.token,\r\n isImpersonated: false\r\n };\r\n\r\n let realFetch = window.fetch;\r\n window.fetch = function (url, opts = null) {\r\n if (opts == null) opts = {};\r\n let headers = opts != null && opts.headers != undefined ? opts.headers : {};\r\n\r\n if (signinUser.token) {\r\n headers = Object.assign({}, headers, { 'Authorization': `Bearer ${signinUser.token}` });\r\n\r\n if (url.indexOf('FileUpload') < 0 && headers['Content-Type'] == undefined) {\r\n headers = Object.assign({}, headers, { 'Content-Type': 'application/json' });\r\n }\r\n opts.headers = headers;\r\n return realFetch(url, opts);\r\n\r\n } else {\r\n return realFetch(url, opts);\r\n }\r\n };\r\n\r\n cookies.set('authToken', signinUser.token, {\r\n path: '/'\r\n });\r\n cookies.remove('impersonateToken', { path: '/' });\r\n currentUserSubject.next(signinUser);\r\n }\r\n\r\n}\r\n\r\nfunction validateToken(token, decodedToken, isImpersonating = false) {\r\n let signinUser = {\r\n usuario: decodedToken.username,\r\n numeroidentificacion: decodedToken.identificacion,\r\n tipoidentificacion: decodedToken.tipoidentificacion,\r\n apellidos: decodedToken.apellidos,\r\n nombres: decodedToken.nombres,\r\n roles: decodedToken.rolesObj\r\n ? Array.isArray(decodedToken.rolesObj)\r\n ? decodedToken.rolesObj.map(roleObj => {\r\n const role = JSON.parse(roleObj);\r\n return {\r\n role: role.Role,\r\n scope: role.Scope,\r\n scopeName: role.ScopeName\r\n };\r\n })\r\n : [JSON.parse(decodedToken.rolesObj)].map(roleObj => {\r\n return {\r\n role: roleObj.Role,\r\n scope: roleObj.Scope,\r\n scopeName: roleObj.ScopeName\r\n };\r\n })\r\n : [],\r\n token: token,\r\n isImpersonated: isImpersonating\r\n };\r\n currentUserSubject.next(signinUser);\r\n\r\n setGlobalFetch();\r\n}\r\n\r\nfunction signout() {\r\n cookies.remove('authToken', { path: '/' });\r\n cookies.remove('impersonateToken', { path: '/' });\r\n currentUserSubject.next(null);\r\n}\r\n\r\nfunction setGlobalFetch() {\r\n let realFetch = window.fetch;\r\n window.fetch = function (url, opts = null) {\r\n if (opts == null) opts = {};\r\n let headers = opts != null && opts.headers != undefined ? opts.headers : {};\r\n\r\n const token = cookies.get('impersonateToken') || cookies.get('authToken');\r\n\r\n if (token) {\r\n headers = Object.assign({}, headers, { 'Authorization': `Bearer ${token}` });\r\n\r\n if (url.indexOf('FileUpload') < 0 && headers['Content-Type'] == undefined) {\r\n headers = Object.assign({}, headers, { 'Content-Type': 'application/json' });\r\n }\r\n opts.headers = headers;\r\n return realFetch(url, opts);\r\n } else {\r\n return realFetch(url, opts);\r\n }\r\n };\r\n}","import React, { Component } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink, UncontrolledDropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { AppContext } from './../AppContext';\r\nimport './NavMenu.css';\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.login = this.login.bind(this);\r\n this.logout = this.logout.bind(this);\r\n\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 login() {\r\n this.props.handleLogin();\r\n }\r\n\r\n logout() {\r\n this.props.handleLogout();\r\n }\r\n\r\n render() {\r\n const currentUser = this.context.currentUser;\r\n return (\r\n
\r\n \r\n \r\n {' '}\r\n \r\n \r\n
    \r\n \r\n Materias\r\n \r\n \r\n Profesores\r\n \r\n \r\n {currentUser && currentUser.usuario ?\r\n
    \r\n
      \r\n
    • \r\n Bienvenido(a) : {currentUser.usuario} \r\n
    • \r\n \r\n \r\n Mis opciones\r\n \r\n \r\n\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => r.role == \"DOCENTE\") &&\r\n \r\n {'Mis paralelos'}\r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => r.role == \"DECANO\" || r.role == \"SUBDECANO\") &&\r\n <>\r\n \r\n \r\n {'Historial de mi unidad'}\r\n \r\n \r\n {'Evaluación de mi programa'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => (r.role == \"DECANO\" && r.scope != \"ESPAE\") || (r.role == \"SUBDECANO\" && r.scope != \"ESPAE\")) &&\r\n <>\r\n \r\n {'Evaluación de mi unidad'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles && currentUser.roles.some(r => r.role == \"COORDINADOR_CARRERA\") &&\r\n <>\r\n \r\n \r\n {'Evaluación de mi unidad'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles && currentUser.roles.some(r => r.role == \"COORDINADOR_PROGRAMA\" || r.role == \"COORDINADOR_GENERAL\") &&\r\n <>\r\n \r\n \r\n {'Evaluación de mi programa'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && (currentUser.roles.some(r => r.role == \"ADMIN\") ||\r\n currentUser.roles.some(r => [\"DECANO\", \"SUBDECANO\", \"COORDINADOR_GENERAL\", \"COORDINADOR_PROGRAMA\"].includes(r.role) && r.scope === \"ESPAE\")) &&\r\n <>\r\n \r\n \r\n {'Reportes consolidados'}\r\n \r\n \r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => r.role == \"ADMIN\") &&\r\n <>\r\n \r\n \r\n {'Administrar usuarios'}\r\n \r\n {currentUser && currentUser.usuario && !currentUser.isImpersonated &&\r\n \r\n {'Ver como'}\r\n \r\n }\r\n \r\n }\r\n \r\n \r\n {'Cerrar sesión'}\r\n \r\n \r\n \r\n
    \r\n
    \r\n :\r\n \r\n {'Iniciar sesión'}\r\n \r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nNavMenu.contextType = AppContext;","import React, { useContext } from 'react';\r\nimport { AppContext } from '../AppContext';\r\n\r\nconst RevertImpersonationBanner = () => {\r\n\r\n const { revertToOriginalUser } = useContext(AppContext);\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n return (\r\n
\r\n {\"Actualmente está actuando en nombre de \" + currentUser.apellidos + \" \" + currentUser.nombres}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RevertImpersonationBanner;\r\n","import React, { Component } from \"react\";\r\nimport { Container, Row, Col } from 'reactstrap';\r\nimport { NavMenu } from '../components/NavMenu';\r\nimport { authService } from '../services/auth.service';\r\nimport { createBrowserHistory } from 'history';\r\n//import logo from './../assets/img/espol.png';\r\nimport logo from './../assets/img/logo-2.svg';\r\nimport RevertImpersonationBanner from '../components/RevertImpersonationBanner';\r\n\r\nconst history = createBrowserHistory();\r\n\r\nexport class AuthLayout extends Component {\r\n\r\n static displayName = AuthLayout.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.login = this.login.bind(this);\r\n this.logout = this.logout.bind(this);\r\n }\r\n\r\n login() {\r\n authService.login(history);\r\n }\r\n\r\n logout() {\r\n authService.logout();\r\n }\r\n\r\n render() {\r\n\r\n const { currentUser } = this.props;\r\n\r\n return (\r\n
\r\n {currentUser && currentUser.isImpersonated && }\r\n \r\n
\r\n
\r\n \"ESPOL\"\r\n
\r\n

Sistema de
retroalimentación estudiantil

\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {this.props.children}\r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n\r\n render () {\r\n return (\r\n
\r\n

Bienvenidos al sistema de reportes de los formularios de retroalimentación estudiantil.

\r\n

\r\n Este sistema permite a la comunidad politécnica acceder a los resultados de las evaluaciones docentes. Este proceso es planificado y ejecutado por la \r\n Secretaria Técnica de Aseguramiento de la Calidad (STAC) con el objetivo de retroalimentar a los procesos educativos y al personal académico de la ESPOL.\r\n

\r\n

\r\n La información que se proporciona a través de los formularios de retroalimentación estudiantil es de carácter confidencial. Por este motivo el personal académico \r\n recibe información luego de finalizado el periodo académico, de forma agregada y anónima; al igual que las unidades a cargo de los servicios evaluados.\r\n

\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { IconContext } from \"react-icons\";\r\n\r\nexport function Icon({ icon, style }) {\r\n if (style == null) {\r\n style = \"\";\r\n }\r\n\r\n return (\r\n \r\n {icon}\r\n \r\n );\r\n}","import React from 'react';\r\nimport { Pagination, PaginationItem, PaginationLink } from 'reactstrap';\r\n\r\nexport function Paginacion(props) {\r\n //console.log(\"props = \" + JSON.stringify(props));\r\n const { total, page, size, search1, search2, url, handle } = props;\r\n const first = 1;\r\n const last = Math.ceil(total / size);\r\n const pages = [...Array(last).keys()].map(p => p + 1);\r\n const groupsize = 10;\r\n const group = Math.trunc((page - 1) / groupsize);\r\n //console.log(\"total = \" + total + \" size = \" + size + \" last = \" + last);\r\n //console.log(\"pages.length = \" + pages.length);\r\n return (pages.length > 1 && \r\n \r\n \r\n handle(url, first, size, search1, search2)}>{ String.fromCharCode(171) }\r\n \r\n \r\n handle(url, Math.max(page - 1, first), size, search1, search2)}>{ String.fromCharCode(60) }\r\n \r\n { pages.length < groupsize ? pages.map((p, i) =>\r\n \r\n handle(url, p, size, search1, search2)}>\r\n {p}\r\n \r\n \r\n ) : pages.filter((p, i) => p > (group * groupsize) && p <= ((group+1)*groupsize)).map((p, i) =>\r\n \r\n handle(url, p, size, search1, search2)}>\r\n {p}\r\n \r\n \r\n )}\r\n \r\n handle(url, Math.min(page + 1, last), size, search1, search2)}>{ String.fromCharCode(62) }\r\n \r\n \r\n handle(url, last, size, search1, search2)}>{ String.fromCharCode(187) }\r\n \r\n \r\n );\r\n}","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { AppContext } from './../AppContext';\r\nimport { UncontrolledTooltip, Table, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\r\nimport { BsFillFileBarGraphFill, BsChatLeftTextFill, BsFilePdfFill } from 'react-icons/bs';\r\nimport { Icon } from \"./Icon\";\r\nimport { Paginacion } from './Paginacion';\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst MySwal = withReactContent(Swal);\r\n\r\n//const TITLE = process.env.REACT_APP_TITLE;\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class MisParalelos extends Component {\r\n static displayName = MisParalelos.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { total: 0, page: 1, size: 10, paralelos: [], loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n this.handleDetalle = this.handleDetalle.bind(this);\r\n this.toggle = this.toggle.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const currentUser = this.context.currentUser;\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n\r\n if (currentUser && currentUser.numeroidentificacion.length > 0) {\r\n this.populateData(currentUser.numeroidentificacion, page, size);\r\n }\r\n\r\n }\r\n\r\n componentDidUpdate() {\r\n const currentUser = this.context.currentUser;\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n\r\n if (currentUser && currentUser.numeroidentificacion.length > 0) {\r\n this.populateData(currentUser.numeroidentificacion, page, size);\r\n }\r\n }\r\n\r\n handlePage(url, page, size) {\r\n this.props.history.push(`${url}/${page}/${size}`);\r\n }\r\n\r\n handleDetalle(anio, termino, codigo, paralelo, identificacion) {\r\n this.props.history.push(`/paralelo/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}`);\r\n }\r\n\r\n toggle(paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.fire({\r\n title: 'Cargando Reporte...',\r\n allowOutsideClick: false,\r\n showConfirmButton: false,\r\n onBeforeOpen: () => {\r\n MySwal.showLoading();\r\n },\r\n });\r\n\r\n let url = paralelo.codigo !== 'PRASC' && paralelo.codigo !== 'PRAEM' ?\r\n `${APIURL}/api/reporte-usuario/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}/${paralelo.idnivelformacion}` :\r\n `${APIURL}/api/reporte-usuario/reporte-practica-pdf/${paralelo.anio}/${paralelo.codigo}/${paralelo.cedula}`;\r\n\r\n fetch(url)\r\n .then(response => response.json())\r\n .then(data => {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n datapdf: data.result\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n MySwal.close();\r\n })\r\n .catch(error => {\r\n console.error('Error al cargar el reporte:', error);\r\n MySwal.fire('Error', 'No se pudo cargar el PDF.', 'error');\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n renderTable(currentUser, paralelos) {\r\n //console.log(currentUser); console.log(paralelos);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoNivelCódigoCurso / ActividadParalelo% RespuestasCalificación{' '}
{p.anio}{p.termino ? p.termino : 'N/A'}{p.nivel}{p.codigo}{p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? p.materia : p.codigo === \"PRAEM\" ? \"Tutoría de prácticas empresariales\" : \"Tutoría de prácticas de servicio comunitario\"}{p.paralelo ? p.paralelo : 'N/A'}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n {p.evaluados > 0 ? this.formatter(p.promedio) : \"-\"}\r\n
\r\n\r\n \r\n {p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? (\r\n \r\n } />\r\n \r\n ) : (\r\n \r\n } />\r\n \r\n )}\r\n \r\n \r\n {\"Detalle\"}\r\n \r\n\r\n \r\n this.toggle(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle en PDF\"}\r\n \r\n {currentUser && currentUser.numeroidentificacion == p.cedula &&\r\n <>\r\n \r\n {p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? 'Detalle Paralelo' : 'Detalle Tutor'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? (\r\n \r\n } />\r\n \r\n ) : (\r\n \r\n } />\r\n \r\n )}\r\n \r\n \r\n {\"Comentario\"}\r\n \r\n \r\n }\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n const currentUser = this.context.currentUser;\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(currentUser, this.state.paralelos);\r\n\r\n return (\r\n
\r\n {currentUser && currentUser.usuario && currentUser.roles && currentUser.roles.some(r => r.role === \"TUTOR\") && (\r\n
\r\n Los resultados de la heteroevaluación para las actividades de Tutorías de prácticas preprofesionales empresariales y de servicio comunitario estarán disponibles a partir del 18 de marzo, fecha de cierre del período de evaluación.\r\n
\r\n )}\r\n

Mis actividades de docencia

\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(identificacion, page = 1, size = 10) {\r\n //console.log(\"paralelos = \" + this.state.paralelos.length + \" page = \" + page + \" page_state = \" + this.state.page);\r\n if (this.state.paralelos != 0 && page == this.state.page) return;\r\n const response = await fetch(`${APIURL}/api/reportes/paralelos-profesor/${identificacion}/${page}/${size}`);\r\n const data = await response.json();\r\n\r\n if (data && data.total && data.datos) {\r\n const paralelos = data.datos.map(p => ({ ...p, verpdf: false, datapdf: \"\" }));\r\n\r\n this.setState({ total: data.total, page: page, size: size, paralelos: paralelos, loading: false });\r\n }\r\n }\r\n}\r\nMisParalelos.contextType = AppContext;","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, FormGroup, Label, Input, Button } from 'reactstrap';\r\n\r\nexport class UnidadConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n unidades: props.unidadOptions, anios: props.anioOptions, terminos: props.terminoOptions,\r\n unidad: props.unidadValue, anio: props.aniosValue, termino: props.terminosValue, apellidos: \"\", nombres: \"\"\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleDocenteChange = this.handleDocenteChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n this.setState({ apellidos: \"\", nombres: \"\" });\r\n this.props.onInputChange(event);\r\n }\r\n\r\n handleDocenteChange = event => {\r\n let name = event.target.name;\r\n let value = event.target.value;\r\n if (name == \"apellidos\") {\r\n this.setState({ apellidos: value });\r\n }\r\n else if (name == \"nombres\") {\r\n this.setState({ nombres: value });\r\n }\r\n }\r\n\r\n handleSubmit = event => {\r\n event.preventDefault();\r\n this.props.handleDocenteSubmit(this.state.apellidos, this.state.nombres);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.unidadOptions.map((uo, idx) => )}\r\n \r\n \r\n {this.props.anioOptions && this.props.anioOptions.length > 0 ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.anioOptions.map((a, idx) => )}\r\n \r\n \r\n \r\n : ''}\r\n {this.props.terminoOptions && this.props.terminoOptions.length > 0 ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.terminoOptions.map((t, idx) => )}\r\n \r\n \r\n \r\n : ''}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nUnidadConsulta.propTypes = {\r\n unidadesOptions: PropTypes.array,\r\n unidadesValue: PropTypes.any,\r\n aniosOptions: PropTypes.array,\r\n aniosValue: PropTypes.any,\r\n terminosOption: PropTypes.any,\r\n terminosValue: PropTypes.any,\r\n onInputChange: PropTypes.func,\r\n};\r\n\r\n","import React from 'react';\r\nimport { ListGroup, ListGroupItem } from 'reactstrap';\r\nimport { BsCheckCircle, BsFillCheckCircleFill, BsCircle } from \"react-icons/bs\";\r\nimport { Icon } from \"./Icon\";\r\n\r\nexport function UnidadEvaluacionDetalle({ paralelo, estudiantes }) {\r\n\r\n return (\r\n paralelo.verlista && estudiantes.length > 0\r\n && \r\n {estudiantes.map((e, i) =>\r\n \r\n {i + 1}.- {e.estado == \"P\" ? } style={{ color: \"green\" }} /> : e.estado == \"R\" ? } style={{ color: \"yellow\" }} /> : } />}{' '}{e.estudiante}\r\n ) }\r\n \r\n );\r\n}\r\n","import React, { useState, useEffect, useContext } from 'react';\r\nimport { Button, Modal, ModalBody, ModalHeader, ModalFooter, UncontrolledTooltip } from 'reactstrap';\r\nimport { AppContext } from './../AppContext';\r\nimport { Paginacion } from './Paginacion';\r\nimport { UnidadConsulta } from './UnidadConsulta';\r\nimport { UnidadEvaluacionDetalle } from './UnidadEvaluacionDetalle';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst BASEURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst UnidadEvaluacion = (props) => {\r\n\r\n const [total, setTotal] = useState(0);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const [state, setState] = useState({\r\n unidad: \"\",\r\n anio: 0,\r\n termino: \"\",\r\n nombres: \"\",\r\n apellidos: \"\",\r\n page: 1,\r\n size: 10,\r\n unidades: [],\r\n anios: [],\r\n terminos: [],\r\n });\r\n\r\n const [paralelos, setParalelos] = useState([]);\r\n const [periodos, setPeriodos] = useState([]);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n const populateInitialData = async (user) => {\r\n const unidadesRol = user.roles.filter(r => r.role === \"DECANO\" || r.role === \"SUBDECANO\").map(r => r.scope);\r\n\r\n if (unidadesRol.length === 0) return;\r\n\r\n const initialUnidad = props.match.params[\"unidad\"] || unidadesRol[0];\r\n\r\n const initialAnios = [];\r\n let initialPeriodos = [];\r\n\r\n if (periodos.length === 0) {\r\n const responsePeriodos = await fetch(`${BASEURL}/api/reporte-usuario/planificacion-periodo-unidad/${initialUnidad}`);\r\n const dataPeriodos = await responsePeriodos.json();\r\n\r\n initialPeriodos = [...initialPeriodos, ...dataPeriodos.datos];\r\n\r\n initialPeriodos.forEach(at => {\r\n if (!initialAnios.includes(at.anio)) {\r\n initialAnios.push(at.anio);\r\n }\r\n });\r\n }\r\n\r\n const initialAnio = props.match.params[\"anio\"] || (initialAnios.length > 0 ? initialAnios[0] : 0);\r\n const initialTerminos = [];\r\n\r\n initialPeriodos.filter(p => p.anio === initialAnio).forEach(at => {\r\n if (!initialTerminos.includes(at.termino)) {\r\n initialTerminos.push(at.termino);\r\n }\r\n });\r\n\r\n const initialTermino = props.match.params[\"termino\"] || (initialTerminos.length > 0 ? initialTerminos[0] : \"\");\r\n const initialPage = props.match.params[\"page\"] || state.page;\r\n const initialSize = props.match.params[\"size\"] || state.size;\r\n\r\n props.history.push(`/unidad-evaluacion/${initialUnidad}/${initialAnio}/${initialTermino}/${initialPage}/${initialSize}`);\r\n setState(prevState => ({\r\n ...prevState,\r\n unidades: unidadesRol,\r\n anios: initialAnios,\r\n terminos: initialTerminos,\r\n unidad: initialUnidad,\r\n anio: initialAnio,\r\n termino: initialTermino\r\n }));\r\n };\r\n\r\n const populateData = async (user) => {\r\n const unidad = props.match.params[\"unidad\"] || state.unidad;\r\n let anio = props.match.params[\"anio\"] || state.anio;\r\n let termino = props.match.params[\"termino\"] || state.termino;\r\n\r\n const page = parseInt(props.match.params[\"page\"]) || state.page;\r\n const size = parseInt(props.match.params[\"size\"]) || state.size;\r\n\r\n if (anio === 0 || unidad === \"\" || termino === \"\") return;\r\n\r\n const nombres = state.nombres;\r\n const apellidos = state.apellidos;\r\n\r\n let apiUrl = `${BASEURL}/api/reporte-usuario/planificacion-unidad-periodo/${unidad}/${anio}/${termino}/${page}/${size}`;\r\n if (nombres && nombres.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n if (!nombres || nombres.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n\r\n setLoading(false);\r\n if (data && data.total && data.datos) {\r\n setParalelos(data.datos.map(p => ({ ...p, verlista: false, estudiantes: [] })));\r\n setTotal(data.total);\r\n } else {\r\n setParalelos([]);\r\n setTotal(0);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.title = TITLE + \" - Profesores de mi unidad\";\r\n if (currentUser && currentUser !== undefined) {\r\n populateInitialData(currentUser);\r\n }\r\n }, [currentUser]);\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined) {\r\n setLoading(true);\r\n populateData(currentUser);\r\n }\r\n }, [state]);\r\n\r\n const handleInputChange = (event) => {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n const { unidad, anio, termino } = state;\r\n const page = 1;\r\n const size = 10;\r\n\r\n if (name === \"unidad\") {\r\n props.history.push(`/unidad-evaluacion/${value}/${anio}/${termino}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, unidad: value, nombres: \"\", apellidos: \"\", page, size }));\r\n } else if (name === \"anio\") {\r\n props.history.push(`/unidad-evaluacion/${unidad}/${value}/${termino}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, anio: value, nombres: \"\", apellidos: \"\", page, size }));\r\n } else if (name === \"termino\") {\r\n props.history.push(`/unidad-evaluacion/${unidad}/${anio}/${value}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, termino: value, nombres: \"\", apellidos: \"\", page, size }));\r\n }\r\n };\r\n\r\n const handleDocenteInput = (apellidos, nombres) => {\r\n const { unidad, anio, termino } = state;\r\n props.history.push(`/unidad-evaluacion/${unidad}/${anio}/${termino}/${1}/${10}`);\r\n setState({\r\n ...state,\r\n apellidos: apellidos == null ? \"\" : apellidos.trim(),\r\n nombres: nombres == null ? \"\" : nombres.trim(),\r\n page: 1, size: 10\r\n });\r\n };\r\n\r\n const handlePage = (url, page, size) => {\r\n props.history.push(`${url}/${page}/${size}`);\r\n setState(prevState => ({ ...prevState, page, size }));\r\n };\r\n\r\n const toggle = (paralelo) => {\r\n const i = paralelos.indexOf(paralelo);\r\n if (!paralelo.verlista && paralelo.estudiantes && paralelo.estudiantes.length === 0) {\r\n MySwal.showLoading();\r\n fetch(`${BASEURL}/api/reporte-usuario/planificacion-paralelo/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.identificacion}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verlista: !prevParalelos[i].verlista,\r\n estudiantes: data.datos\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n });\r\n } else {\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verlista: !prevParalelos[i].verlista,\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n }\r\n };\r\n\r\n const renderTable = (paralelos) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = p.registrados === 0 ? 0 : Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoCódigoMateriaParaleloDocente% Respuestas
{p.anio}{p.termino}{p.codigo}{p.materia}{p.paralelo}{p.docente}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n \r\n \r\n toggle(p)}>Lista de estudiantes\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n const contents = loading ?

Loading...

: renderTable(paralelos);\r\n\r\n return (\r\n
\r\n

Evaluación de mi unidad

\r\n \r\n {contents}\r\n
\r\n );\r\n}\r\n\r\nexport default UnidadEvaluacion;\r\n","import React from 'react';\r\nimport { Button, UncontrolledTooltip } from 'reactstrap';\r\nimport { Icon } from \"./Icon\";\r\n\r\nexport function Accion({ id, className, action, icon, tooltip }) {\r\n\r\n return \r\n \r\n \r\n {tooltip}\r\n \r\n \r\n}","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, FormGroup, Label, Input, Button } from 'reactstrap';\r\n\r\nexport class ProgramaConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n unidades: props.unidadesOptions, anios: props.anioOptions, terminos: props.terminoOptions, unidad: props.unidadesValue, anio: props.aniosValue, termino: props.terminosValue\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n this.props.onInputChange(event);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n {this.props.unidadOptions.length > 0 &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.unidadOptions.map((uo, idx) => )}\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.props.programaOptions.map((uo, idx) => )}\r\n \r\n \r\n \r\n {this.props.anioOptions && this.props.anioOptions.length > 0 && this.props.terminoOptions && this.props.terminoOptions.length > 0 &&\r\n \r\n {this.props.anioOptions && this.props.anioOptions.length > 0 &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.anioOptions.map((a, idx) => )}\r\n \r\n \r\n \r\n }\r\n {this.props.terminoOptions && this.props.terminoOptions.length > 0 &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {this.props.terminoOptions.map((t, idx) => )}\r\n \r\n \r\n \r\n }\r\n \r\n }\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nProgramaConsulta.propTypes = {\r\n unidadesOptions: PropTypes.array,\r\n unidadesValue: PropTypes.any,\r\n aniosOptions: PropTypes.array,\r\n aniosValue: PropTypes.any,\r\n terminosOption: PropTypes.any,\r\n terminosValue: PropTypes.any,\r\n onChange: PropTypes.func,\r\n};\r\n\r\n","import React from \"react\";\r\nimport DatePicker, { registerLocale, setDefaultLocale } from \"react-datepicker\";\r\n\r\nimport es from 'date-fns/locale/es';\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nregisterLocale('es', es);\r\n\r\n\r\nexport default class Datepicker extends React.Component {\r\n \r\n state = {\r\n paralelo: this.props.paralelo, date: (this.props.value ? new Date(this.props.value) : null) ,\r\n };\r\n\r\n handleChange = date => {\r\n console.log(\" date = \" + JSON.stringify(date));\r\n \r\n this.setState(\r\n { date },\r\n (() => { this.props.onChange(date.toISOString().slice(0, -2), this.props.paralelo) })\r\n );\r\n\r\n console.log(\"paralelo = \" + JSON.stringify(this.state.paralelo));\r\n this.props.onChange(date.toISOString().slice(0, -2), this.state.paralelo)\r\n };\r\n\r\n render() {\r\n \r\n return (\r\n
\r\n this.handleChange(date)}\r\n name={this.props.name}\r\n id={this.props.id}\r\n dateFormat={this.props.dateFormat}\r\n placeholderText={this.props.placeholder}\r\n disabled={(this.props.disabled)}\r\n locale=\"es\"\r\n />\r\n
\r\n )\r\n\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { AppContext } from './../AppContext';\r\nimport { Button, Modal, ModalBody, ModalHeader, ModalFooter, UncontrolledTooltip, Progress, Row, Col } from 'reactstrap';\r\nimport { BsCardChecklist, BsFilePdfFill, BsChatLeftTextFill, BsFillCalendarDateFill, BsFileEarmarkExcelFill } from 'react-icons/bs';\r\nimport { Icon } from \"./Icon\";\r\nimport { Accion } from \"./Accion\";\r\nimport { Paginacion } from './Paginacion';\r\nimport { ProgramaConsulta } from './ProgramaConsulta';\r\nimport { UnidadEvaluacionDetalle } from './UnidadEvaluacionDetalle';\r\nimport Swal from 'sweetalert2'\r\nimport withReactContent from 'sweetalert2-react-content'\r\n\r\nimport Datepicker from './Datepicker';\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst dateOptions = {\r\n year: \"2-digit\", //\"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\",\r\n};\r\n\r\nexport class ProgramaEvaluacion extends Component {\r\n static displayName = ProgramaEvaluacion.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { total: 0, programa: null, unidad: \"\", anio: 0, termino: \"\", page: 1, size: 10, paralelos: [], unidades: [], programas: [], anios: [], terminos: [], loading: true };\r\n\r\n this.handleDateChange = this.handleDateChange.bind(this);\r\n this.handleInputChange = this.handleInputChange.bind(this);\r\n this.handlePage = this.handlePage.bind(this);\r\n this.toggleFormDate = this.toggleFormDate.bind(this);\r\n this.toggleEstudiantes = this.toggleEstudiantes.bind(this);\r\n this.toggle = this.toggle.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.downloadUnidadProgramaCohorteAnioTerminoExcel = this.downloadUnidadProgramaCohorteAnioTerminoExcel.bind(this);\r\n this.downloadPlanificacionAnioExcel = this.downloadPlanificacionAnioExcel.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const currentUser = this.context.currentUser;\r\n const { loading } = this.state;\r\n document.title = TITLE + \" - Profesores de mi programa\";\r\n\r\n if (currentUser && currentUser != undefined && loading) {\r\n this.populateData(currentUser);\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n const currentUser = this.context.currentUser;\r\n\r\n if (currentUser && currentUser != undefined) {\r\n this.populateData(currentUser);\r\n }\r\n }\r\n\r\n handleDateChange(date, paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n console.log(\"date = \" + date);\r\n const paraleloState = this.state.paralelos[i];\r\n paraleloState.dtFechaextendidaevaluacion = date;\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paraleloState\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n\r\n handleInputChange(event) {\r\n const currentUser = this.context.currentUser;\r\n let { unidad, programa, cohorte, anio, termino } = this.state;\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n\r\n if (name == \"unidad\") {\r\n if (unidad != value) {\r\n unidad = value;\r\n this.props.history.push(`/programa-evaluacion/${unidad}`);\r\n }\r\n }\r\n else if (name == \"programa\") {\r\n const selected = value.split(\"_\");\r\n programa = selected[0];\r\n cohorte = selected[1];\r\n this.props.history.push(`/programa-evaluacion/${unidad}/${programa}/${cohorte}`);\r\n }\r\n else if (name == \"anio\") {\r\n anio = value;\r\n this.props.history.push(`/programa-evaluacion/${unidad}/${programa}/${cohorte}/${anio}`);\r\n }\r\n else if (name == \"termino\") {\r\n termino = value;\r\n this.props.history.push(`/programa-evaluacion/${unidad}/${programa}/${cohorte}/${anio}/${termino}`);\r\n }\r\n }\r\n\r\n handlePage(url, page, size) {\r\n this.setState({ loading: true });\r\n\r\n this.props.history.push(`${url}/${page}/${size}`);\r\n }\r\n\r\n handleSubmit(paralelo) {\r\n const i = this.state.paralelos.findIndex(p => p.sistema == paralelo.sistema && p.idcurso == paralelo.idcurso && p.identificacion == paralelo.identificacion);\r\n console.log(\"paralelo = \" + JSON.stringify(paralelo) + \" i = \" + i);\r\n //if (paralelo.fechaextendidaevaluacion < paralelo.fechainicioevaluacion) {\r\n const dtFechainicioevaluacion = new Date(paralelo.fechainicioevaluacion);\r\n if (paralelo.dtFechaextendidaevaluacion < dtFechainicioevaluacion) {\r\n\r\n MySwal.fire({\r\n title:

Advertencia

,\r\n text: 'La fecha de fin de evaluación no puede ser menor que la fecha de inicio de evaluación',\r\n });\r\n\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n fechaextendidaevaluacion: paralelos[i].fechafinevaluacion,\r\n dtFechaextendidaevaluacion: paralelos[i].dtFechaextendidaevaluacion\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n var paralelos = this.state.paralelos;\r\n const dateMinValue = new Date('0001-01-01');\r\n if (paralelo.ultimoCambio == null || paralelo.ultimoCambio == dateMinValue) {\r\n // insertar fecha evaluacionfin \r\n let data = JSON.parse(JSON.stringify(paralelo));\r\n\r\n delete data.docente;\r\n delete data.verlista;\r\n delete data.estudiantes;\r\n delete data.verpdf;\r\n delete data.formDate;\r\n //delete data.dtFechaextendidaevaluacion;\r\n\r\n fetch(`${APIURL}/api/admin/extension-evaluacion`, {\r\n method: 'POST',\r\n headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n body: JSON.stringify({\r\n sistema: paralelo.sistema,\r\n idcurso: paralelo.idcurso,\r\n anio: paralelo.anio,\r\n termino: paralelo.termino,\r\n nivelformacion: paralelo.nivelformacion,\r\n idnivelformacion: paralelo.idnivelformacion,\r\n unidad: paralelo.unidad,\r\n programa: paralelo.programa,\r\n cohorte: paralelo.cohorte,\r\n materia: paralelo.materia,\r\n codigo: paralelo.codigo,\r\n paralelo: paralelo.paralelo + \"\",\r\n tipocurso: paralelo.tipocurso,\r\n grupo: paralelo.grupo,\r\n fuente: paralelo.fuente,\r\n registrados: paralelo.registrados,\r\n evaluados: paralelo.evaluados,\r\n identificacion: paralelo.identificacion,\r\n apellidos: paralelo.apellidos,\r\n nombres: paralelo.nombres,\r\n fechainicio: paralelo.fechainicioevaluacion,\r\n fechafin: paralelo.fechafinevaluacion,\r\n fechaextendida: paralelo.dtFechaextendidaevaluacion,\r\n idpersona: paralelo.idpersona\r\n }),\r\n })\r\n .then(res => res.json())\r\n .then(\r\n (p) => {\r\n const i = paralelos.findIndex(pa => pa.sistema == p.sistema && pa.idcurso == p.idcurso && pa.identificacion == p.identificacion);\r\n paralelos[i].fechafinevaluacion = p.evaluacionfin;\r\n paralelos = [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verlista: false, estudiantes: [], verpdf: false, formDate: false, dtFechaextendidaevaluacion: new Date(p.evaluacionfin)\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n\r\n this.setState({\r\n paralelos: paralelos\r\n });\r\n });\r\n } else {\r\n // actualizar fecha evaluacionfin \r\n var data = {\r\n idcurso: paralelo.idcurso,\r\n identificacion: paralelo.identificacion,\r\n sistema: paralelo.sistema,\r\n //fechaextendida: paralelo.fechaextendidaevaluacion\r\n fechaextendida: paralelo.dtFechaextendidaevaluacion\r\n };\r\n var idcurso = paralelo.idcurso;\r\n\r\n fetch(`${APIURL}/api/admin/extension-evaluacion/${idcurso}`, {\r\n method: 'PUT',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data),\r\n })\r\n .then(res => res.json())\r\n .then(\r\n (result) => {\r\n result.map(p => {\r\n const i = paralelos.findIndex(pa => pa.sistema == p.sistema && pa.idcurso == p.idcurso && pa.identificacion == p.identificacion);\r\n paralelos[i].fechafinevaluacion = p.evaluacionfin;\r\n paralelos = [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verlista: false, estudiantes: [], verpdf: false, formDate: false, dtFechaextendidaevaluacion: new Date(p.evaluacionfin)\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n });\r\n\r\n this.setState({\r\n paralelos: paralelos\r\n });\r\n });\r\n }\r\n\r\n }\r\n\r\n\r\n toggleFormDate(paralelo) {\r\n const i = this.state.paralelos.findIndex(p => p.sistema == paralelo.sistema && p.idcurso == paralelo.idcurso && p.identificacion == paralelo.identificacion);\r\n\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n formDate: !paralelos[i].formDate,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n toggleEstudiantes(paralelo) {\r\n const { programa } = this.state;\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n if (!paralelo.verlista && paralelo.estudiantes && paralelo.estudiantes.length == 0) {\r\n MySwal.showLoading();\r\n //fetch(`${APIURL}/api/reporte-usuario/planificacion-programa/${paralelo.anio}/${paralelo.termino}/${programa}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.identificacion}`)\r\n fetch(`${APIURL}/api/reporte-usuario/planificacion-programa/${paralelo.sistema}/${paralelo.idcurso}/${paralelo.idpersona}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verlista: !paralelos[i].verlista,\r\n estudiantes: data.datos\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verlista: !paralelos[i].verlista,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n }\r\n\r\n toggle(paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${this.state.programa}/${this.state.cohorte}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.identificacion}/${paralelo.idnivelformacion}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n datapdf: data.result\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n\r\n }\r\n }\r\n\r\n downloadUnidadProgramaCohorteAnioTerminoExcel() {\r\n const { anio, termino, unidad, programa, cohorte } = this.state;\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/evaluacion-programa-cohortes`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ anio: anio, terminos: [termino], unidades: [unidad], idprogramas: [programa], programascohortes: [programa + \"_\" + cohorte] })\r\n })\r\n .then(response => {\r\n response.blob().then(blob => {\r\n MySwal.close();\r\n let url = window.URL.createObjectURL(blob);\r\n let a = document.createElement('a');\r\n a.href = url;\r\n a.download = `TASARESPUESTA_${unidad}_${programa}_${cohorte}_${anio}_${termino}.xlsx`;\r\n a.click();\r\n });\r\n });\r\n }\r\n\r\n downloadPlanificacionAnioExcel() {\r\n const { anio } = this.state;\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/evaluacion-programa-cohortes`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ anio: anio, terminos: [], unidades: [], idprogramas: [], programascohortes: [] })\r\n })\r\n .then(response => {\r\n response.blob().then(blob => {\r\n MySwal.close();\r\n let url = window.URL.createObjectURL(blob);\r\n let a = document.createElement('a');\r\n a.href = url;\r\n a.download = `TASARESPUESTA_${anio}.xlsx`;\r\n a.click();\r\n });\r\n });\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n dateformatter = (fecha) => {\r\n return new Intl.DateTimeFormat('es-EC', { dateStyle: 'short' }).format(fecha)\r\n }\r\n\r\n renderTable(paralelos) {\r\n const currentUser = this.context.currentUser;\r\n const { page, size } = this.state;\r\n return (\r\n <>\r\n
\r\n {currentUser && currentUser.usuario && currentUser.roles && currentUser.roles.some(r => r.role == \"ADMIN\") ?\r\n
\r\n this.downloadPlanificacionAnioExcel()} icon={} tooltip={\"Descargar planificación Excel\"} />\r\n
\r\n :\r\n
\r\n this.downloadUnidadProgramaCohorteAnioTerminoExcel()} icon={} tooltip={\"Descargar en Excel\"} />\r\n
\r\n }\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n\r\n const dtFechainicioevaluacion = new Date(p.fechainicioevaluacion);\r\n const dtFechafinevaluacion = new Date(p.fechafinevaluacion);\r\n const porcentaje = p.registrados == 0 ? 0 : Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.handleDateChange(date, p)} paralelo={p} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
PeriodoMateriaPar.Docente\r\n Periodo de evaluación\r\n \r\n {\"día / mes / año\"}\r\n \r\n % Respuestas
{((page - 1) * size) + index + 1}.{p.anio + \" - \" + p.termino}{p.codigo + \" - \" + p.materia}{p.paralelo}{p.docente}{dtFechainicioevaluacion.toLocaleString('es-EC', dateOptions)} - {dtFechafinevaluacion.toLocaleString('es-EC', dateOptions)}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n \r\n
\r\n \r\n \r\n this.toggleEstudiantes(p)}>Lista de estudiantes\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Detalle\"}\r\n \r\n {p.evaluados > 0 &&\r\n <>\r\n \r\n this.toggle(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle en PDF\"}\r\n \r\n \r\n this.toggle(p)}>Detalle Paralelo\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n } />\r\n \r\n {/* */}\r\n {/* } />*/}\r\n {/* */}\r\n \r\n \r\n {\"Comentario\"}\r\n \r\n \r\n }\r\n {p.registrados > 0 && p.evaluados / p.registrados < 0.75 && currentUser && currentUser.usuario && currentUser.roles\r\n && currentUser.roles.some(r => r.role == \"ADMIN\") &&\r\n <>
\r\n \r\n this.toggleFormDate(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Modificar fin evaluación\"}\r\n \r\n \r\n this.toggleFormDate(p)}>Modificar fin de evaluación\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.paralelos);\r\n let programas_cohortes = [];\r\n this.state.programas.forEach(p => {\r\n if (programas_cohortes.every(pc => pc.value !== p.idprograma + \"_\" + p.cohorte)) {\r\n programas_cohortes.push({ label: p.programa + \" Cohorte \" + p.cohorte, value: p.idprograma + \"_\" + p.cohorte });\r\n }\r\n });\r\n\r\n return (\r\n
\r\n

Evaluación de mi programa

\r\n \r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(currentUser) {\r\n const roles = currentUser.roles;\r\n //console.log(\"roles = \" + JSON.stringify(roles));\r\n\r\n const uniqueScopes = new Set();\r\n\r\n const filteredRoles = roles\r\n .filter(r =>\r\n (r.role === \"DECANO\" || r.role === \"SUBDECANO\" || r.role === \"COORDINADOR_GENERAL\") &&\r\n r.scope !== \"ESPL\" &&\r\n !uniqueScopes.has(r.scope)\r\n )\r\n .map(r => {\r\n uniqueScopes.add(r.scope);\r\n return { value: r.scope, label: r.scopeName };\r\n });\r\n\r\n const unidades = filteredRoles.sort((a, b) => a.value.localeCompare(b.value));\r\n\r\n let unidad = this.props.match.params[\"unidad\"] || this.state.unidad || unidades.map(u => u.value)[0];\r\n //console.log(\"unidades = \" + JSON.stringify(unidades));\r\n const programas = roles.filter(r => r.role == \"COORDINADOR_CARRERA\" || r.role == \"COORDINADOR_PROGRAMA\").map((r) => ({ value: r.scope, label: r.scopeName }));\r\n\r\n if (programas.length == 0 && unidades.length == 0) return;\r\n\r\n let programas_cohortes = this.state.programas;\r\n let programa = 0;\r\n let cohorte = 0;\r\n let anio = \"\";\r\n let termino = \"\";\r\n let anios = [];\r\n let terminos = [];\r\n\r\n if (programas_cohortes.length == 0 || unidad != this.state.unidad) {\r\n const responseProgramasCohortes = await fetch(`${APIURL}/api/reporte-usuario/planificacion-programa-cohortes`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ idprogramas: programas.map(pra => pra.value), unidad: unidad, unidades: unidades.map(u => u.value) })\r\n });\r\n const dataProgramasCohortes = await responseProgramasCohortes.json();\r\n\r\n if (dataProgramasCohortes.datos.length > 0) {\r\n programas_cohortes = dataProgramasCohortes.datos;\r\n\r\n if (unidad != this.state.unidad && this.props.match.params[\"programa\"] === undefined && this.props.match.params[\"cohorte\"] === undefined\r\n && this.props.match.params[\"anio\"] === undefined && this.props.match.params[\"termino\"] === undefined) {\r\n\r\n programa = programas_cohortes[0].idprograma;\r\n cohorte = programas_cohortes[0].cohorte;\r\n unidad = programas_cohortes[0].codunidad;\r\n anio = programas_cohortes[0].anio;\r\n termino = programas_cohortes[0].termino\r\n } else {\r\n programa = parseInt(this.props.match.params[\"programa\"]) || this.state.programa || programas_cohortes[0].idprograma;\r\n cohorte = parseInt(this.props.match.params[\"cohorte\"]) || this.state.cohorte || programas_cohortes[0].cohorte;\r\n anio = this.props.match.params[\"anio\"] || this.state.anio || programas_cohortes[0].anio;\r\n termino = this.props.match.params[\"termino\"] || this.state.termino || programas_cohortes[0].termino;\r\n }\r\n\r\n } else {\r\n programa = 0;\r\n cohorte = 0;\r\n unidad = \"\";\r\n anio = \"\";\r\n termino = \"\";\r\n }\r\n } else {\r\n programa = parseInt(this.props.match.params[\"programa\"]) || this.state.programa || programas_cohortes[0].idprograma;\r\n cohorte = parseInt(this.props.match.params[\"cohorte\"]) || this.state.cohorte || programas_cohortes[0].cohorte;\r\n anio = this.props.match.params[\"anio\"] || this.state.anio || programas_cohortes[0].anio;\r\n termino = this.props.match.params[\"termino\"] || this.state.termino || programas_cohortes[0].termino;\r\n }\r\n\r\n let programa_cohorte_seleccionados = [];\r\n if (programa != 0 && cohorte != 0)\r\n programa_cohorte_seleccionados = programas_cohortes.filter(pc => pc.idprograma == programa && pc.cohorte == cohorte);\r\n\r\n programa_cohorte_seleccionados.forEach(pc => {\r\n if (anios.every(a => a !== pc.anio)) {\r\n anios.push(pc.anio);\r\n }\r\n if (terminos.every(t => t !== pc.termino)) {\r\n terminos.push(pc.termino);\r\n }\r\n });\r\n\r\n anio = this.props.match.params[\"anio\"] || (anios.includes(this.state.anio) ? this.state.anio : anios[0]);\r\n termino = this.props.match.params[\"termino\"] || (terminos.includes(this.state.termino) ? this.state.termino : terminos[0]);\r\n\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n\r\n if (this.state.anio != 0 && unidad == this.state.unidad && programa == this.state.programa && cohorte == this.state.cohorte && anio == this.state.anio && termino == this.state.termino && page == this.state.page && size == this.state.size)\r\n return;\r\n\r\n MySwal.showLoading();\r\n console.log(\"anio=\" + anio + \" termino=\" + termino + \" state_anio = \" + this.state.anio + \" state_termino = \" + this.state.termino);\r\n const response = await fetch(`${APIURL}/api/reporte-usuario/planificacion-programa-periodo/${programa}/${cohorte}/${anio}/${termino}/${page}/${size}`);\r\n const data = await response.json();\r\n const paralelos = data.datos.map(\r\n (p) => {\r\n const fechaextendida = new Date(p.fechafinevaluacion);\r\n return { ...p, docente: p.apellidos + \" \" + p.nombres, verlista: false, estudiantes: [], verpdf: false, formDate: false, dtFechaextendidaevaluacion: fechaextendida };\r\n }\r\n );\r\n\r\n this.setState({ total: data.total, unidades: unidades, unidad: unidad, programas: programas_cohortes, programa: programa, cohorte: cohorte, anios: anios, anio: anio, terminos: terminos, termino: termino, page: page, size: size, paralelos: paralelos, loading: false });\r\n MySwal.close();\r\n }\r\n}\r\nProgramaEvaluacion.contextType = AppContext;","import React, { useEffect, useState, useContext } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UncontrolledTooltip, Table, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\r\nimport { BsFillFileBarGraphFill, BsChatLeftTextFill, BsFilePdfFill } from 'react-icons/bs';\r\nimport { Icon } from \"./Icon\";\r\nimport { AppContext } from './../AppContext';\r\nimport { Paginacion } from './Paginacion';\r\nimport { UnidadConsulta } from './UnidadConsulta';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst UnidadParalelos = (props) => {\r\n\r\n const [total, setTotal] = useState(0);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const [state, setState] = useState({\r\n unidad: \"\",\r\n anio: 0,\r\n termino: \"\",\r\n nombres: \"\",\r\n apellidos: \"\",\r\n page: 1,\r\n size: 10,\r\n unidades: [],\r\n anios: [],\r\n terminos: [],\r\n });\r\n\r\n const [paralelos, setParalelos] = useState([]);\r\n\r\n const [periodos, setPeriodos] = useState([]);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n const populateInitialData = async (user) => {\r\n const unidadesRol = user.roles.filter(r => r.role === \"DECANO\" || r.role === \"SUBDECANO\").map(r => r.scope);\r\n\r\n if (unidadesRol.length === 0) return;\r\n\r\n const initialUnidad = props.match.params[\"unidad\"] || unidadesRol[0];\r\n\r\n const initialAnios = []\r\n let initialPeriodos = []\r\n\r\n if (periodos.length === 0) {\r\n const responsePeriodos = await fetch(`${APIURL}/api/reporte-usuario/paralelos-unidad-periodos/${initialUnidad}`);\r\n const dataPeriodos = await responsePeriodos.json();\r\n\r\n initialPeriodos = [...initialPeriodos, ...dataPeriodos.datos];\r\n\r\n initialPeriodos.forEach(at => {\r\n if (!initialAnios.includes(at.anio)) {\r\n initialAnios.push(at.anio);\r\n }\r\n });\r\n }\r\n\r\n const initialAnio = props.match.params[\"anio\"] || (initialAnios.length > 0 ? initialAnios[0] : 0);\r\n const initialTerminos = []\r\n\r\n initialPeriodos.filter(p => p.anio === initialAnio).forEach(at => {\r\n if (!initialTerminos.includes(at.termino)) {\r\n initialTerminos.push(at.termino);\r\n }\r\n });\r\n if (!initialTerminos.includes('2S')) {\r\n initialTerminos.push('2S');\r\n }\r\n\r\n const initialTermino = props.match.params[\"termino\"] || (initialTerminos.length > 0 ? initialTerminos[0] : \"\");\r\n const initialPage = props.match.params[\"page\"] || state.page;\r\n const initialSize = props.match.params[\"size\"] || state.size;\r\n\r\n props.history.push(`/paralelos-unidad/${initialUnidad}/${initialAnio}/${initialTermino}/${initialPage}/${initialSize}`);\r\n setState(prevState => ({\r\n ...prevState, unidades: unidadesRol, anios: initialAnios, terminos: initialTerminos,\r\n unidad: initialUnidad, anio: initialAnio, termino: initialTermino\r\n }));\r\n\r\n }\r\n\r\n const populateData = async (user) => {\r\n const unidad = props.match.params[\"unidad\"] || state.unidad;\r\n let anio = props.match.params[\"anio\"] || state.anio;\r\n let termino = props.match.params[\"termino\"] || state.termino;\r\n\r\n const page = parseInt(props.match.params[\"page\"]) || state.page;\r\n const size = parseInt(props.match.params[\"size\"]) || state.size;\r\n\r\n if (anio == 0 || unidad === \"\" || termino === \"\") return;\r\n\r\n const nombres = state.nombres;\r\n const apellidos = state.apellidos;\r\n\r\n let apiUrl = `${APIURL}/api/reporte-usuario/paralelos-unidad/${unidad}/${anio}/${termino}/${page}/${size}`;\r\n if (nombres && nombres.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n if (!nombres || nombres.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n\r\n setLoading(false);\r\n if (data && data.total && data.datos) {\r\n setParalelos(data.datos.map(p => ({ ...p, verpdf: false, datapdf: \"\" })));\r\n setTotal(data.total);\r\n } else {\r\n setParalelos([]);\r\n setTotal(0);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.title = TITLE + \" - Profesores de mi unidad\";\r\n if (currentUser && currentUser !== undefined) {\r\n populateInitialData(currentUser);\r\n }\r\n }, [currentUser]);\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined) {\r\n setLoading(true);\r\n populateData(currentUser);\r\n }\r\n }, [state]);\r\n\r\n const handleInputChange = (event) => {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n const { unidad, anio, termino } = state;\r\n const page = 1;\r\n const size = 10;\r\n\r\n if (name === \"unidad\") {\r\n props.history.push(`/paralelos-unidad/${value}/${anio}/${termino}/${page}/${size}`);\r\n setState({ ...state, unidad: value, nombres: \"\", apellidos: \"\", page: page, size: size });\r\n } else if (name === \"anio\") {\r\n props.history.push(`/paralelos-unidad/${unidad}/${value}/${termino}/${page}/${size}`);\r\n setState({ ...state, anio: value, nombres: \"\", apellidos: \"\", page: page, size: size });\r\n } else if (name === \"termino\") {\r\n props.history.push(`/paralelos-unidad/${unidad}/${anio}/${value}/${page}/${size}`);\r\n setState({ ...state, termino: value, nombres: \"\", apellidos: \"\", page: page, size: size });\r\n }\r\n };\r\n\r\n\r\n const handleDocenteInput = (apellidos, nombres) => {\r\n const { unidad, anio, termino } = state;\r\n props.history.push(`/paralelos-unidad/${unidad}/${anio}/${termino}/${1}/${10}`);\r\n setState({\r\n ...state,\r\n apellidos: apellidos == null ? \"\" : apellidos.trim(),\r\n nombres: nombres == null ? \"\" : nombres.trim(),\r\n page: 1, size: 10\r\n });\r\n };\r\n\r\n const handlePage = (url, page, size) => {\r\n props.history.push(`${url}/${page}/${size}`);\r\n setState({ ...state, page: page, size: size });\r\n };\r\n\r\n const toggle = (paralelo) => {\r\n const i = paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}/${paralelo.idnivelformacion}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verpdf: !prevParalelos[i].verpdf,\r\n datapdf: data.result\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n });\r\n } else {\r\n setParalelos(prevParalelos => [\r\n ...prevParalelos.slice(0, i),\r\n {\r\n ...prevParalelos[i],\r\n verpdf: !prevParalelos[i].verpdf,\r\n },\r\n ...prevParalelos.slice(i + 1)\r\n ]);\r\n }\r\n };\r\n\r\n const formatter = (valor) => {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor);\r\n };\r\n\r\n const renderTable = (paralelos) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoNivelCódigoMateriaParaleloDocente% RespuestasCalificación
{p.anio}{p.termino}{p.nivel}{p.codigo}{p.materia}{p.paralelo}{p.apellidos} {p.nombres}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n {formatter(p.promedio)}\r\n
\r\n \r\n \r\n } />\r\n \r\n \r\n \r\n {\"Detalle\"}\r\n \r\n \r\n toggle(p)}>\r\n } />\r\n \r\n \r\n \r\n {\"Detalle en PDF\"}\r\n \r\n \r\n Detalle Paralelo\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n } />\r\n \r\n \r\n \r\n {\"Comentario\"}\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n const contents = loading ?

Loading...

: renderTable(paralelos);\r\n\r\n return (\r\n
\r\n

Docentes de mi unidad

\r\n \r\n {contents}\r\n
\r\n );\r\n};\r\n\r\nexport default UnidadParalelos;","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, FormGroup, Label, Input, Button } from 'reactstrap';\r\n\r\nexport class MateriasConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n nombre: this.props.nombre, codigo: this.props.codigo\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n let name = event.target.name;\r\n let value = event.target.value;\r\n\r\n if (name == \"nombre\") {\r\n this.setState({ nombre: value });\r\n }\r\n else if (name == \"codigo\") {\r\n this.setState({ codigo: value });\r\n }\r\n }\r\n\r\n handleSubmit = event => {\r\n //console.log(\"submit\");\r\n event.preventDefault();\r\n const { url, page, size } = this.props;\r\n const { nombre, codigo } = this.state;\r\n //console.log(\"url = \" + url + \" page = \" + page + \" size = \" + size + \" nombre = \" + nombre + \" codigo = \" + codigo);\r\n this.props.handle(url, page, size, codigo, nombre);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nMateriasConsulta.propTypes = {\r\n nombre: PropTypes.any,\r\n codigo: PropTypes.any,\r\n handle: PropTypes.func\r\n};\r\n\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Paginacion } from './Paginacion';\r\nimport { MateriasConsulta } from './MateriasConsulta';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Materias extends Component {\r\n static displayName = Materias.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { materias: [], page: 1, size: 10, codigo: \"\", nombre: \"\", loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por materia\";\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const codigo = this.props.match.params[\"search1\"] || this.state.codigo || \"\";\r\n const nombre = this.props.match.params[\"search2\"] || this.state.nombre || \"\";\r\n if (this.state.loading) {\r\n this.populateData(page, size, codigo, nombre);\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const codigo = this.props.match.params[\"search1\"] || this.state.codigo || \"\";\r\n const nombre = this.props.match.params[\"search2\"] || this.state.nombre || \"\";\r\n if (this.state.loading) {\r\n this.populateData(page, size, codigo, nombre);\r\n }\r\n\r\n }\r\n\r\n handlePage(url, page, size, codigo, nombre) {\r\n let newUrl = `${url}/${page}/${size}`;\r\n\r\n if (codigo && codigo.trim() !== \"\") {\r\n newUrl += `/${encodeURIComponent(codigo.trim())}`;\r\n }\r\n if (nombre && nombre.trim() !== \"\") {\r\n if (!codigo || codigo.trim() === \"\") newUrl += `/${encodeURIComponent(\" \")}`;\r\n newUrl += `/${encodeURIComponent(nombre.trim())}`;\r\n }\r\n\r\n this.props.history.push(newUrl);\r\n this.setState({ loading: true, page: page, size: size, codigo: codigo, nombre: nombre });\r\n }\r\n\r\n renderTable(materias) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {materias.map(materia =>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
CódigoMateria{''}
{materia.codigo}{materia.materia}\r\n Detalle\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const codigo = this.props.match.params[\"search1\"] || this.state.codigo || \" \";\r\n const nombre = this.props.match.params[\"search2\"] || this.state.nombre || \" \";\r\n\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.materias);\r\n\r\n return (\r\n
\r\n

Histórico por materias

\r\n
\r\n \r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(page, size, codigo, nombre) {\r\n let apiUrl = `${APIURL}/api/reportes/materias/${page}/${size}`;\r\n if (codigo && codigo.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(codigo.trim())}`;\r\n }\r\n if (nombre && nombre.trim() !== \"\") {\r\n if (!codigo || codigo.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(nombre.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n this.setState({ total: data.total, materias: data.datos, page: page, size: size, codigo: codigo, nombre: nombre, loading: false });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UncontrolledTooltip, Table, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\r\nimport { Paginacion } from './Paginacion';\r\n\r\nimport Swal from 'sweetalert2'\r\nimport withReactContent from 'sweetalert2-react-content'\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nexport class ParalelosMateria extends Component {\r\n static displayName = ParalelosMateria.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { total: 0, page: 1, size: 10, codigo: \"\", paralelos: [], loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n this.toggle = this.toggle.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por materia\";\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n this.populateData(codigo, page, size);\r\n }\r\n\r\n componentDidUpdate() {\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n if (page != this.state.page) {\r\n this.populateData(codigo, page, size);\r\n }\r\n\r\n }\r\n\r\n handlePage(url, page, size) {\r\n this.setState({ loading: true }, () => {\r\n this.props.history.push(`${url}/${page}/${size}`);\r\n });\r\n }\r\n\r\n toggle(paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.fire({\r\n title: 'Generando PDF...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n fetch(`${APIURL}/api/reportes/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}/${paralelo.idnivelformacion}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n datapdf: data.result\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n MySwal.close();\r\n })\r\n .catch(error => {\r\n Swal.fire({\r\n icon: 'error',\r\n title: 'Error',\r\n text: 'No se pudo generar el PDF.',\r\n allowOutsideClick: false\r\n });\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n\r\n }\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n renderTable(paralelos) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoNivelDocenteParalelo% RespuestasCalificación{' '}
{p.anio}{p.termino}{p.nivel}{p.apellidos} {p.nombres}{p.paralelo}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n {p.evaluados > 0 ? this.formatter(p.promedio) : \"-\"} \r\n {p.evaluados > 0 && (<>\r\n Detalle\r\n\r\n this.toggle(p)}>PDF\r\n \r\n Detalle Paralelo\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )} \r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.paralelos);\r\n\r\n return (\r\n
\r\n

Histórico por materia

\r\n

Materia: {this.state.paralelos && this.state.paralelos.length > 0 && this.state.paralelos[0].codigo + \" \" + this.state.paralelos[0].materia}

\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(codigo, page = 1, size = 10) {\r\n const response = await fetch(`${APIURL}/api/reportes/paralelos-materia/${codigo}/${page}/${size}`);\r\n const data = await response.json();\r\n if (data && data.total && data.datos) {\r\n const paralelos = data.datos.map(p => ({ ...p, verpdf: false, datapdf: \"\" }));\r\n\r\n this.setState({ total: data.total, page: page, size: size, codigo: codigo, paralelos: paralelos, loading: false });\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport { Row, Col, FormGroup, Label, Input, Button } from 'reactstrap';\r\n\r\nexport class ProfesoresConsulta extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n apellidos: this.props.apellidos, nombres: this.props.nombres\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n handleChange = event => {\r\n let name = event.target.name;\r\n let value = event.target.value;\r\n\r\n if (name == \"apellidos\") {\r\n this.setState({ apellidos: value });\r\n }\r\n else if (name == \"nombres\") {\r\n this.setState({ nombres: value });\r\n }\r\n }\r\n\r\n handleSubmit = event => {\r\n //console.log(\"submit\");\r\n event.preventDefault();\r\n const { url, page, size } = this.props;\r\n const { apellidos, nombres } = this.state;\r\n //console.log(\"url = \" + url + \" page = \" + page + \" size = \" + size + \" apellidos = \" + apellidos + \" nombres = \" + nombres);\r\n this.props.handle(url, page, size, apellidos, nombres);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nProfesoresConsulta.propTypes = {\r\n apellidos: PropTypes.any,\r\n nombres: PropTypes.any,\r\n handle: PropTypes.func\r\n};\r\n\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Paginacion } from './Paginacion';\r\nimport { ProfesoresConsulta } from './ProfesoresConsulta';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Profesores extends Component {\r\n static displayName = Profesores.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { profesores: [], page: 1, size: 10, apellidos: \"\", nombres: \"\", loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const apellidos = this.props.match.params[\"search1\"] || this.state.apellidos || \"\";\r\n const nombres = this.props.match.params[\"search2\"] || this.state.nombres || \"\";\r\n //console.log(\"page = \" + page + \" size = \" + size + \" apellidos = \" + apellidos + \" nombres = \" + nombres);\r\n if (this.state.loading) {\r\n this.populateData(page, size, apellidos.trim(), nombres.trim());\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const apellidos = this.props.match.params[\"search1\"] || this.state.apellidos || \" \";\r\n const nombres = this.props.match.params[\"search2\"] || this.state.nombres || \" \";\r\n //console.log(\"page = \" + page + \" size = \" + size + \" apellidos = \" + apellidos + \" nombres = \" + nombres);\r\n if (this.state.loading) {\r\n this.populateData(page, size, apellidos, nombres);\r\n }\r\n }\r\n\r\n handlePage(url, page, size, apellidos, nombres) {\r\n\r\n let newUrl = `${url}/${page}/${size}`;\r\n\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n newUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n if (nombres && nombres.trim() !== \"\") {\r\n if (!apellidos || apellidos.trim() === \"\") newUrl += `/${encodeURIComponent(\" \")}`;\r\n newUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n\r\n this.props.history.push(newUrl);\r\n this.setState({ loading: true, page: page, size: size, apellidos: apellidos, nombres: nombres });\r\n }\r\n\r\n renderTable(profesores) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {profesores.map(profesor =>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
ApellidosNombresAcciones
{profesor.apellidos}{profesor.nombres}\r\n Detalle\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n const page = parseInt(this.props.match.params[\"page\"]) || this.state.page || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || this.state.size || 10;\r\n const apellidos = this.props.match.params[\"search1\"] || this.state.apellidos || \"\";\r\n const nombres = this.props.match.params[\"search2\"] || this.state.nombres || \"\";\r\n\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.profesores);\r\n\r\n return (\r\n
\r\n

Histórico por Profesores

\r\n
\r\n \r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(page, size, apellidos, nombres) {\r\n let apiUrl = `${APIURL}/api/reportes/profesores/${page}/${size}`;\r\n\r\n if (apellidos && apellidos.trim() !== \"\") {\r\n apiUrl += `/${encodeURIComponent(apellidos.trim())}`;\r\n }\r\n if (nombres && nombres.trim() !== \"\") {\r\n if (!apellidos || apellidos.trim() === \"\") apiUrl += `/${encodeURIComponent(\" \")}`;\r\n apiUrl += `/${encodeURIComponent(nombres.trim())}`;\r\n }\r\n\r\n const response = await fetch(apiUrl);\r\n const data = await response.json();\r\n this.setState({ total: data.total, profesores: data.datos, page: page, size: size, apellidos: apellidos, nombres: nombres, loading: false });\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { UncontrolledTooltip, Table, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\r\nimport { Paginacion } from './Paginacion';\r\nimport './PdfViewer.css';\r\n\r\nimport Swal from 'sweetalert2'\r\nimport withReactContent from 'sweetalert2-react-content'\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nexport class ParalelosProfesor extends Component {\r\n static displayName = ParalelosProfesor.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { total: 0, page: 1, size: 10, identificacion: \"\", paralelos: [], loading: true };\r\n this.handlePage = this.handlePage.bind(this);\r\n this.toggle = this.toggle.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n this.populateData(identificacion, page, size);\r\n }\r\n\r\n componentDidUpdate() {\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const page = parseInt(this.props.match.params[\"page\"]) || 1;\r\n const size = parseInt(this.props.match.params[\"size\"]) || 10;\r\n if (page != this.state.page) {\r\n this.populateData(identificacion, page, size);\r\n }\r\n\r\n }\r\n\r\n handlePage(url, page, size) {\r\n this.props.history.push(`${url}/${page}/${size}`);\r\n }\r\n\r\n toggle(paralelo) {\r\n const i = this.state.paralelos.indexOf(paralelo);\r\n\r\n if (!paralelo.verpdf) {\r\n MySwal.fire({\r\n title: 'Generando PDF...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n let url = paralelo.codigo !== 'PRASC' && paralelo.codigo !== 'PRAEM' ?\r\n `${APIURL}/api/reportes/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}/${paralelo.idnivelformacion}` :\r\n `${APIURL}/api/reportes/reporte-practica-pdf/${paralelo.anio}/${paralelo.codigo}/${paralelo.cedula}`;\r\n\r\n fetch(url)\r\n .then(response => response.json())\r\n .then(data => {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n datapdf: data.result\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n MySwal.close();\r\n })\r\n .catch(error => {\r\n Swal.fire({\r\n icon: 'error',\r\n title: 'Error',\r\n text: 'No se pudo generar el PDF.',\r\n allowOutsideClick: false\r\n });\r\n });\r\n }\r\n else {\r\n this.setState(({ paralelos }) => ({\r\n paralelos: [\r\n ...paralelos.slice(0, i),\r\n {\r\n ...paralelos[i],\r\n verpdf: !paralelos[i].verpdf,\r\n },\r\n ...paralelos.slice(i + 1)\r\n ]\r\n }));\r\n\r\n }\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n renderTable(paralelos) {\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelos.map((p, index) => {\r\n const porcentaje = Math.round(p.evaluados * 100 / p.registrados);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
AñoTérminoNivelCódigoMateriaParalelo% RespuestasCalificación{' '}
{p.anio}{p.termino ? p.termino : 'N/A'}{p.nivel}{p.codigo}{p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? p.materia : p.codigo === \"PRAEM\" ? \"Tutoría de prácticas empresariales\" : \"Tutoría de prácticas de servicio comunitario\"}{p.paralelo ? p.paralelo : 'N/A'}\r\n {porcentaje}%\r\n \r\n {p.evaluados}/{p.registrados}\r\n \r\n {p.evaluados > 0 ? this.formatter(p.promedio) : \"-\"}\r\n\r\n {p.evaluados == 0 ? null : p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? (\r\n Detalle\r\n ) : (\r\n Detalle\r\n )}\r\n\r\n {p.evaluados > 0 && (<>\r\n this.toggle(p)}>PDF\r\n \r\n {p.codigo !== 'PRASC' && p.codigo !== 'PRAEM' ? 'Detalle Paralelo' : 'Detalle Tutor'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.state.total > 0 ? this.renderTable(this.state.paralelos) :

No hay datos disponibles

;\r\n\r\n return (\r\n
\r\n

Histórico por profesor

\r\n

Docente: {this.state.paralelos && this.state.paralelos.length > 0 && this.state.paralelos[0].apellidos + \" \" + this.state.paralelos[0].nombres}

\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(identificacion, page = 1, size = 10) {\r\n const response = await fetch(`${APIURL}/api/reportes/paralelos-profesor/${identificacion}/${page}/${size}`);\r\n const data = await response.json();\r\n if (data && (data.total || data.total == 0) && data.datos) {\r\n const paralelos = data.datos.map(p => ({ ...p, verpdf: false, datapdf: \"\" }));\r\n\r\n this.setState({ total: data.total, page: page, size: size, identificacion: identificacion, paralelos: paralelos, loading: false });\r\n }\r\n\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { UncontrolledTooltip, Table } from 'reactstrap';\r\n\r\nexport function TablaCabecera({ paralelo }) {\r\n\r\n function formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n const porcentaje = Math.round(paralelo.evaluados * 100 / paralelo.registrados);\r\n let i = 0;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paralelo.programa != null &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Datos generales
Periodo:{paralelo.anio} - {paralelo.termino}Unidad:{paralelo.unidad}
Programa:{paralelo.programa}Cohorte:{paralelo.cohorte}
Curso:{paralelo.codigo} {paralelo.materia} P. {paralelo.paralelo}% Respuestas:\r\n {porcentaje}%\r\n \r\n {paralelo.evaluados}/{paralelo.registrados}\r\n \r\n
Docente:{paralelo.apellidos} {paralelo.nombres}Promedio paralelo:{formatter(paralelo.promedio)}
\r\n );\r\n\r\n}","import React from \"react\";\r\n\r\nexport function TablaPromedios({ area, preguntas }) {\r\n\r\n function formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {preguntas.map((p, index) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
{area.area}
PreguntaMediaDesviación estándarPuntaje obtenido
{index+1}{p.pregunta}{formatter(p.media)}{formatter(p.desviacionestandar)}{formatter(p.porcentaje * 100.0) + \" %\"}
\r\n );\r\n}","import React from 'react';\r\nimport {\r\n Chart as ChartJS,\r\n CategoryScale,\r\n LinearScale,\r\n BarElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n} from 'chart.js';\r\nimport { Bar } from 'react-chartjs-2';\r\n\r\nChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n BarElement,\r\n Title,\r\n Tooltip,\r\n Legend\r\n);\r\n\r\nexport function GraficoBarras(props) {\r\n const { labels, values, title } = props;\r\n\r\n const options = {\r\n //animation: false,\r\n transitions: {\r\n active: {\r\n animation: {\r\n duration: 0\r\n },\r\n },\r\n },\r\n indexAxis: 'y',\r\n elements: {\r\n bar: {\r\n borderWidth: 2,\r\n },\r\n },\r\n responsive: true,\r\n plugins: {\r\n legend: {\r\n position: 'right',\r\n },\r\n title: {\r\n display: true,\r\n text: title,\r\n },\r\n datalabels: {\r\n formatter: function (value, context) {\r\n return value + '%';\r\n }\r\n }\r\n },\r\n };\r\n\r\n const data = {\r\n labels,\r\n datasets: [\r\n {\r\n label: 'Promedio Profesor',\r\n data: values,\r\n borderColor: 'rgb(255, 99, 132)',\r\n backgroundColor: 'rgba(255, 99, 132, 0.5)',\r\n },\r\n {\r\n label: 'Promedio unidad',\r\n data: values,\r\n borderColor: 'rgb(53, 162, 235)',\r\n backgroundColor: 'rgba(53, 162, 235, 0.5)',\r\n },\r\n ],\r\n };\r\n\r\n return ;\r\n}","import React, { useRef, useCallback } from 'react';\r\nimport { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';\r\nimport { Bar } from 'react-chartjs-2';\r\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\r\n\r\nChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n BarElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n ChartDataLabels\r\n);\r\n\r\nexport function GraficoBarrasApiladas(props) {\r\n const { id, animation, labels, values, titulo, evaluados } = props;\r\n const divRef = useRef(null);\r\n const imgRef = useRef(null);\r\n\r\n const options = computeOptions(id, animation, titulo);\r\n const borderColorsL0 = ['rgb(255, 0, 0)', 'rgb(255, 205, 86)', 'rgb(0, 128, 0)',];\r\n const backgroundColorsL0 = ['rgba(255, 0, 0, 0.2)', 'rgba(255, 255, 0, 0.4)', 'rgba(0, 128, 0, 0.6)'];\r\n const borderColorsL1 = ['rgb(128, 128, 128)', 'rgb(255, 0, 0)', 'rgb(255, 162, 0)', 'rgb(255, 205, 86)', 'rgb(0, 192, 0)', 'rgb(0, 128, 0)',];\r\n const backgroundColorsL1 = ['rgba(128, 128, 128, 0.2)', 'rgba(255, 0, 0, 0.2)', 'rgba(255, 162, 0, 0.2)', 'rgba(255, 255, 0, 0.4)', 'rgba(0, 192, 0, 0.4)', 'rgba(0, 128, 0, 0.6)'];\r\n const borderColorsL2 = ['rgb(128, 128, 128)', 'rgb(255, 0, 0)', 'rgb(255, 40, 0)', 'rgb(255, 81, 0)', 'rgb(255, 162, 0)', 'rgb(255, 205, 162)', 'rgb(255, 205, 162)', 'rgb(255, 205, 86)', 'rgb(0, 96, 0)', 'rgb(0, 192, 0)', 'rgb(0, 128, 0)',];\r\n const backgroundColorsL2 = ['rgba(128, 128, 128, 0.2)', 'rgba(255, 145, 145, 1)', 'rgba(255, 145, 102, 1)', 'rgba(255, 172, 102, 1)', 'rgba(255, 206, 137, 1)', 'rgba(255, 227, 188, 1)', 'rgba(255, 255, 188, 1)', 'rgba(255, 255, 97, 1)', 'rgba(173, 255, 97, 1)', 'rgba(101, 204, 0, 1)', 'rgba(60, 158, 70, 1)']\r\n const data = {\r\n labels,\r\n datasets: generateData(values, evaluados)\r\n };\r\n\r\n const chartRef = useCallback(chart => {\r\n const div = divRef.current;\r\n let divStyle = \"display: block\";\r\n if (animation === undefined || animation) {\r\n console.log(\"chartjs\");\r\n if (div != null) {\r\n divStyle = \"display: block\";\r\n }\r\n \r\n }\r\n else { \r\n \r\n const img = imgRef.current;\r\n\r\n var url = chart != null ? chart.toBase64Image() : \"\";\r\n\r\n if (img != null && url != null) {\r\n img.src = url;\r\n }\r\n\r\n divStyle = \"display: none\";\r\n }\r\n if (div != null) {\r\n div.style = divStyle;\r\n }\r\n }, []);\r\n\r\n function computeOptions(id, animation, titulo) {\r\n return {\r\n animation: animation,\r\n //onAnimationComplete: done(id, animation),\r\n indexAxis: 'y',\r\n elements: {\r\n bar: {\r\n borderWidth: 2,\r\n },\r\n },\r\n responsive: true,\r\n scales: {\r\n x: {\r\n stacked: true,\r\n max: 100,\r\n },\r\n y: {\r\n stacked: true\r\n }\r\n },\r\n plugins: {\r\n legend: {\r\n position: 'right',\r\n },\r\n title: {\r\n display: true,\r\n text: titulo,\r\n },\r\n datalabels: {\r\n display: function (context) {\r\n var index = context.dataIndex;\r\n var value = context.dataset.data[index];\r\n return value > 0;\r\n },\r\n formatter: function (value, context) {\r\n return value + '%';\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n function generateData(data, evaluados) {\r\n //console.log(data);\r\n const etiquetas = [];\r\n data.forEach(p => {\r\n if (etiquetas.every(e => e.ordenAlternativa !== p.ordenAlternativa)) {\r\n etiquetas.push({ ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa });\r\n }\r\n });\r\n const totalEtiquetas = etiquetas.length;\r\n const datasets = etiquetas.map(e => {\r\n var borderColor;\r\n var backgroundColor;\r\n if (totalEtiquetas <= 3) {\r\n borderColor = borderColorsL0[e.ordenAlternativa - 1];\r\n backgroundColor = backgroundColorsL0[e.ordenAlternativa - 1];\r\n }\r\n else if (totalEtiquetas <= 6) {\r\n borderColor = borderColorsL1[e.ordenAlternativa - 1];\r\n backgroundColor = backgroundColorsL1[e.ordenAlternativa - 1];\r\n }\r\n else {\r\n borderColor = borderColorsL2[e.ordenAlternativa ];\r\n backgroundColor = backgroundColorsL2[e.ordenAlternativa ];\r\n }\r\n //console.log(data.filter(d => d.ordenAlternativa == e.ordenAlternativa).map(a => a.frecuencia/evaluados));\r\n\r\n return {\r\n label: e.alternativa,\r\n data: data.filter(d => d.ordenAlternativa == e.ordenAlternativa).map(a => (a.frecuencia * 100 / evaluados).toFixed(0)),\r\n borderColor: backgroundColor, //borderColor,\r\n backgroundColor: backgroundColor\r\n }\r\n });\r\n console.log(\"data = \" + JSON.stringify(datasets));\r\n return datasets;\r\n }\r\n\r\n return (<>\r\n
\r\n \r\n
\r\n {animation !== undefined && !animation &&\r\n \r\n }\r\n );\r\n}","import React, { Component } from 'react';\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, UncontrolledCollapse, Card, CardHeader, CardBody } from 'reactstrap';\r\nimport { TablaCabecera } from './TablaCabecera';\r\nimport { TablaPromedios } from './TablaPromedios';\r\nimport { GraficoBarras } from './GraficoBarras';\r\nimport { GraficoBarrasApiladas } from './GraficoBarrasApiladas';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Paralelo extends Component {\r\n static displayName = Paralelo.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { paralelo: null, datos: [], areas: [], frecuencias: [], alternativas: [], modo: \"view\", loading: true };\r\n //console.log(props.match);\r\n this.onDownloadPdf = this.onDownloadPdf.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const anio = this.props.match.params[\"anio\"];\r\n const termino = this.props.match.params[\"termino\"];\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const paralelo = this.props.match.params[\"paralelo\"];\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const modo = this.props.match.params[\"modo\"] || \"view\";\r\n this.populateData(anio, termino, codigo, paralelo, identificacion, modo);\r\n }\r\n\r\n toggle(area) {\r\n const i = this.state.areas.indexOf(area);\r\n this.setState(({ areas }) => ({\r\n areas: [\r\n ...areas.slice(0, i),\r\n {\r\n ...areas[i],\r\n comparativo: !areas[i].comparativo,\r\n },\r\n ...areas.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n splitwords(text, size = 40) {\r\n if (text.length <= size)\r\n return text;\r\n const chunks = text.split(\" \");\r\n const parts = [];\r\n var aux = \"\";\r\n for (var c in chunks) {\r\n if (aux.length + chunks[c].length <= size) {\r\n aux += chunks[c] + \" \";\r\n }\r\n else {\r\n parts.push(aux);\r\n aux = chunks[c] + \" \";\r\n }\r\n }\r\n parts.push(aux);\r\n return parts;\r\n }\r\n\r\n onDownloadPdf() {\r\n const { paralelo } = this.state;\r\n fetch(`${APIURL}/api/reportes/reporte-paralelo-pdf/${paralelo.anio}/${paralelo.termino}/${paralelo.codigo}/${paralelo.paralelo}/${paralelo.cedula}`)\r\n .then(response => response.json())\r\n .then(data => {\r\n if (data) {\r\n let a = document.createElement(\"a\");\r\n a.href = `data:application/pdf;base64,${data.result}`;\r\n a.download = `reporte-${paralelo.anio}-${paralelo.termino}-${paralelo.codigo}-${paralelo.paralelo}-${paralelo.cedula}.pdf`;\r\n a.click();\r\n }\r\n });\r\n }\r\n\r\n renderTable(paralelo, datos, areas, frecuencias, alternativas) {\r\n //console.log(datos);\r\n return (\r\n <>\r\n \r\n {areas && areas.map((a) => {\r\n const preguntas = datos.filter(p => a.idarea == p.idarea);\r\n //const etiquetas = preguntas.map(p => this.splitwords(p.pregunta));\r\n const etiquetas = preguntas.map((p, index) => index+1);\r\n const valoresFrecuencias = frecuencias.filter(f => f.idarea == a.idarea).map(p => { return { ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa, frecuencia: p.frecuencia } });\r\n const valoresPuntaje = preguntas.map(p => this.formatter(p.porcentaje * 100));\r\n return (\r\n
\r\n \r\n {/*{' '}
*/}\r\n {this.state.modo == \"view\" ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n :\r\n \r\n }\r\n
\r\n \r\n Gráfico comparativo\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n })}\r\n \r\n \r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.paralelo, this.state.datos, this.state.areas, this.state.frecuencias, this.state.alternativas);\r\n\r\n return (\r\n
\r\n {/*
*/}\r\n \r\n
\r\n

Reporte por Paralelo

\r\n {contents}\r\n
\r\n
\r\n );\r\n }\r\n\r\n async populateData(anio, termino, codigo, paralelo, identificacion, modo) {\r\n const response = await fetch(`${APIURL}/api/reportes/paralelo/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reportes/paralelo-detalle/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}`);\r\n const dataParalelo = await dataResponse.json();\r\n const areas = [];\r\n dataParalelo.forEach(p => {\r\n if (areas.every(a => a.idarea !== p.idarea)) {\r\n areas.push({ idarea: p.idarea, area: p.area, comparativo:false });\r\n }\r\n });\r\n\r\n const frecuenciasResponse = await fetch(`${APIURL}/api/reportes/paralelo-frecuencias/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}`);\r\n const dataFrecuencias = await frecuenciasResponse.json();\r\n const alternativas = [];\r\n dataFrecuencias.forEach(p => {\r\n if (alternativas.every(e => e.ordenAlternativa !== p.ordenAlternativa)) {\r\n alternativas.push({ ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa });\r\n }\r\n });\r\n\r\n if (dataParalelo && dataFrecuencias) {\r\n this.setState({ paralelo: data, datos: dataParalelo, areas: areas, frecuencias: dataFrecuencias, alternativas: alternativas, modo: modo, loading: false });\r\n }\r\n \r\n }\r\n}\r\n","import React from \"react\";\r\nimport { UncontrolledTooltip, Table } from 'reactstrap';\r\n\r\nexport function TablaCabeceraPractica({ practica }) {\r\n\r\n function formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n const porcentaje = Math.round(practica.evaluados * 100 / practica.registrados);\r\n let i = 0;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {practica.programa != null &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Datos generales
Periodo:{practica.anio}Unidad:{practica.unidad}
Programa:{practica.programa}Cohorte:{practica.cohorte}
Actividad:{practica.codigo === \"PRAEM\" ? \"Tutoría de prácticas empresariales\" : \"Tutoría de prácticas de servicio comunitario\"}% Respuestas:\r\n {porcentaje}%\r\n \r\n {practica.evaluados}/{practica.registrados}\r\n \r\n
Tutor:{practica.apellidos} {practica.nombres}Promedio:{formatter(practica.promedio)}
\r\n );\r\n\r\n}","import React, { Component } from 'react';\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, UncontrolledCollapse, Card, CardHeader, CardBody } from 'reactstrap';\r\nimport { TablaCabeceraPractica } from './TablaCabeceraPractica';\r\nimport { TablaPromedios } from './TablaPromedios';\r\nimport { GraficoBarras } from './GraficoBarras';\r\nimport { GraficoBarrasApiladas } from './GraficoBarrasApiladas';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Practica extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { practica: null, datos: [], areas: [], frecuencias: [], alternativas: [], modo: \"view\", loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por tutor\";\r\n const anio = this.props.match.params[\"anio\"];\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const modo = this.props.match.params[\"modo\"] || \"view\";\r\n this.populateData(anio, codigo, identificacion, modo);\r\n }\r\n\r\n toggle(area) {\r\n const i = this.state.areas.indexOf(area);\r\n this.setState(({ areas }) => ({\r\n areas: [\r\n ...areas.slice(0, i),\r\n {\r\n ...areas[i],\r\n comparativo: !areas[i].comparativo,\r\n },\r\n ...areas.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n splitwords(text, size = 40) {\r\n if (text.length <= size)\r\n return text;\r\n const chunks = text.split(\" \");\r\n const parts = [];\r\n var aux = \"\";\r\n for (var c in chunks) {\r\n if (aux.length + chunks[c].length <= size) {\r\n aux += chunks[c] + \" \";\r\n }\r\n else {\r\n parts.push(aux);\r\n aux = chunks[c] + \" \";\r\n }\r\n }\r\n parts.push(aux);\r\n return parts;\r\n }\r\n\r\n renderTable(practica, datos, areas, frecuencias, alternativas) {\r\n //console.log(datos);\r\n return (\r\n <>\r\n \r\n {areas && areas.map((a) => {\r\n const preguntas = datos.filter(p => a.idarea == p.idarea);\r\n \r\n const etiquetas = preguntas.map((p, index) => index + 1);\r\n const valoresFrecuencias = frecuencias.filter(f => f.idarea == a.idarea).map(p => { return { ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa, frecuencia: p.frecuencia } });\r\n const valoresPuntaje = preguntas.map(p => this.formatter(p.porcentaje * 100));\r\n return (\r\n
\r\n \r\n \r\n {this.state.modo == \"view\" ?\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n :\r\n \r\n }\r\n
\r\n \r\n Gráfico comparativo\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n })}\r\n\r\n \r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.practica, this.state.datos, this.state.areas, this.state.frecuencias, this.state.alternativas);\r\n\r\n return (\r\n
\r\n
\r\n

Reporte por Tutor

\r\n {contents}\r\n
\r\n
\r\n );\r\n }\r\n\r\n async populateData(anio, codigo, identificacion, modo) {\r\n const response = await fetch(`${APIURL}/api/reportes/practica/${anio}/${codigo}/${identificacion}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reportes/practica-detalle/${anio}/${codigo}/${identificacion}`);\r\n const dataPractica = await dataResponse.json();\r\n const areas = [];\r\n dataPractica.forEach(p => {\r\n if (areas.every(a => a.idarea !== p.idarea)) {\r\n areas.push({ idarea: p.idarea, area: p.area, comparativo: false });\r\n }\r\n });\r\n\r\n const frecuenciasResponse = await fetch(`${APIURL}/api/reportes/practica-frecuencias/${anio}/${codigo}/${identificacion}`);\r\n const dataFrecuencias = await frecuenciasResponse.json();\r\n const alternativas = [];\r\n dataFrecuencias.forEach(p => {\r\n if (alternativas.every(e => e.ordenAlternativa !== p.ordenAlternativa)) {\r\n alternativas.push({ ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa });\r\n }\r\n });\r\n\r\n if (dataPractica && dataFrecuencias) {\r\n this.setState({ practica: data, datos: dataPractica, areas: areas, frecuencias: dataFrecuencias, alternativas: alternativas, modo: modo, loading: false });\r\n }\r\n\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { Table } from 'reactstrap';\r\n\r\nexport function TablaComentarios({ tipo, comentarios }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {comentarios && comentarios.map((c, index) => {\r\n return \r\n \r\n \r\n \r\n })}\r\n \r\n
{ tipo }
{ index+1 }.-{c}
\r\n );\r\n\r\n}","import React, { Component } from 'react';\r\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, UncontrolledCollapse, Card, CardHeader, CardBody } from 'reactstrap';\r\nimport { TablaCabecera } from './TablaCabecera';\r\nimport { TablaComentarios } from './TablaComentarios';\r\nimport { AppContext } from './../AppContext';\r\n//import Swal from 'sweetalert2'\r\n//import withReactContent from 'sweetalert2-react-content'\r\n\r\n//const MySwal = withReactContent(Swal);\r\n//const TITLE = process.env.REACT_APP_TITLE;\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class Comentarios extends Component {\r\n static displayName = Comentarios.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { paralelo: null, datos: [], areas: [], frecuencias: [], alternativas: [], loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n const currentUser = this.context.currentUser;\r\n const { loading } = this.state;\r\n document.title = TITLE + \" - Comentarios por profesor\";\r\n\r\n const params = this.props.match.params;\r\n\r\n if (currentUser && currentUser != undefined && loading) {\r\n if (Object.keys(params).length === 3) {\r\n const { sistema, idcurso, idpersona } = params;\r\n this.populateData(sistema, idcurso, idpersona);\r\n } else {\r\n const { anio, termino, codigo, paralelo, identificacion, idnivelformacion } = params;\r\n this.populateData2(anio, termino, codigo, paralelo, identificacion, idnivelformacion);\r\n }\r\n }\r\n }\r\n\r\n toggle(area) {\r\n const i = this.state.areas.indexOf(area);\r\n this.setState(({ areas }) => ({\r\n areas: [\r\n ...areas.slice(0, i),\r\n {\r\n ...areas[i],\r\n comparativo: !areas[i].comparativo,\r\n },\r\n ...areas.slice(i + 1)\r\n ]\r\n }));\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n renderTable(paralelo, data) {\r\n let comentario = [];\r\n data.forEach(c => {\r\n if (c.comentario && c.comentario.length > 0) {\r\n comentario.push(c.comentario);\r\n }\r\n });\r\n\r\n let mantener = [];\r\n data.forEach(c => {\r\n if (c.mantener && c.mantener.length > 0) {\r\n mantener.push(c.mantener);\r\n }\r\n });\r\n\r\n let mejorar = [];\r\n data.forEach(c => {\r\n if (c.mejorar && c.mejorar.length > 0) {\r\n mejorar.push(c.mejorar);\r\n }\r\n });\r\n let cambiar = [];\r\n data.forEach(c => {\r\n if (c.cambiar && c.cambiar.length > 0) {\r\n cambiar.push(c.cambiar);\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {comentario && comentario.length > 0 && }\r\n
\r\n {mantener && mantener.length > 0 && }\r\n
\r\n {mejorar && mejorar.length > 0 && }\r\n
\r\n {cambiar && cambiar.length > 0 && }\r\n \r\n );\r\n }\r\n\r\n render() {\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.paralelo, this.state.comentarios);\r\n\r\n return (\r\n <>\r\n
\r\n

Comentarios por Paralelo

\r\n {contents}\r\n
\r\n \r\n );\r\n }\r\n\r\n async populateData2(anio, termino, codigo, paralelo, identificacion, idnivelformacion) {\r\n const response = await fetch(`${APIURL}/api/reporte-usuario/paralelo-profesor/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}/${idnivelformacion}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reporte-usuario/paralelo-profesor-comentarios/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}/${idnivelformacion}`);\r\n const dataComentarios = await dataResponse.json();\r\n\r\n this.setState({ paralelo: data, comentarios: dataComentarios, loading: false });\r\n }\r\n\r\n async populateData(sistema, idcurso, idpersona) {\r\n const response = await fetch(`${APIURL}/api/reporte-usuario/paralelo-profesor/${sistema}/${idcurso}/${idpersona}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reporte-usuario/paralelo-profesor-comentarios/${sistema}/${idcurso}/${idpersona}`);\r\n const dataComentarios = await dataResponse.json();\r\n\r\n this.setState({ paralelo: data, comentarios: dataComentarios, loading: false });\r\n }\r\n}\r\nComentarios.contextType = AppContext;","import React, { useState, useEffect, useContext } from 'react';\r\nimport { TablaCabeceraPractica } from './TablaCabeceraPractica';\r\nimport { TablaComentarios } from './TablaComentarios';\r\nimport { AppContext } from './../AppContext';\r\n//import Swal from 'sweetalert2'\r\n//import withReactContent from 'sweetalert2-react-content'\r\n\r\n//const MySwal = withReactContent(Swal);\r\n\r\n//const TITLE = process.env.REACT_APP_TITLE;\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nfunction ComentariosPractica({ match }) {\r\n\r\n document.title = TITLE + \" - Comentarios por tutor\";\r\n\r\n const [practica, setPractica] = useState(null);\r\n const [comentarios, setComentarios] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n useEffect(() => {\r\n const { anio, codigo, identificacion } = match.params;\r\n\r\n if (currentUser && currentUser != undefined) {\r\n populateData(anio, codigo, identificacion);\r\n }\r\n }, [match.params]);\r\n\r\n async function populateData(anio, codigo, identificacion) {\r\n try {\r\n const response = await fetch(`${APIURL}/api/reporte-usuario/practica-profesor/${anio}/${codigo}/${identificacion}`);\r\n const data = await response.json();\r\n\r\n const dataResponse = await fetch(`${APIURL}/api/reporte-usuario/practica-profesor-comentarios/${anio}/${codigo}/${identificacion}`);\r\n const dataComentarios = await dataResponse.json();\r\n\r\n setPractica(data);\r\n setComentarios(dataComentarios);\r\n setLoading(false);\r\n } catch (error) {\r\n console.error('Error fetching data:', error);\r\n setLoading(false);\r\n }\r\n }\r\n\r\n function renderTable(practica, data) {\r\n let comentario = [];\r\n data.forEach(c => {\r\n if (c.comentario && c.comentario.length > 0) {\r\n comentario.push(c.comentario);\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {comentario && comentario.length > 0 && }\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n

Comentarios por Tutor

\r\n {loading ?

Loading...

: renderTable(practica, comentarios)}\r\n
\r\n );\r\n}\r\n\r\nexport default ComentariosPractica;\r\n","import React, { useContext } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { AppContext } from '../AppContext';\r\n\r\nconst withRoleAccess = (WrappedComponent, allowedRoles) => {\r\n\r\n return props => {\r\n\r\n const { currentUser } = useContext(AppContext);\r\n\r\n if (currentUser && currentUser.roles) {\r\n const hasAccess = currentUser.roles.some(role => allowedRoles.includes(role.role));\r\n if (!hasAccess) {\r\n return ;\r\n }\r\n }\r\n\r\n return ;\r\n };\r\n};\r\n\r\nexport default withRoleAccess;","import React, { useEffect, useState, useContext } from 'react';\r\nimport {\r\n Table, UncontrolledTooltip, Button, Modal, ModalBody, ModalHeader, ModalFooter, Input,\r\n Pagination, PaginationItem, PaginationLink} from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { BsFilePdfFill } from 'react-icons/bs';\r\nimport { Icon } from './Icon';\r\nimport { AppContext } from './../AppContext';\r\nimport withRoleAccess from './withRoleAccess';\r\n\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport ReactPaginate from 'react-paginate';\r\n\r\nimport './UserManagement.css';\r\n\r\nconst TITLE = 'Reportes de Retroalimentación Estudiantil';\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst MySwal = withReactContent(Swal)\r\n\r\nconst UserManagement = () => {\r\n\r\n document.title = TITLE + \" - Administrar usuarios\";\r\n\r\n const [users, setUsers] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [modalIsOpen, setModalIsOpen] = useState(false);\r\n const [searchCriteria, setSearchCriteria] = useState({\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n idRole: 0,\r\n idUnidad: 0,\r\n idPrograma: 0, \r\n });\r\n const [searchResults, setSearchResults] = useState([]);\r\n const [roles, setRoles] = useState([]);\r\n const [rolesLoading, setRolesLoading] = useState(true);\r\n\r\n const [refreshTable, setRefreshTable] = useState(false);\r\n const [roleNameSelected, setRoleNameSelected] = useState('');\r\n const [unidadOptions, setUnidadOptions] = useState([]);\r\n const [programasOptions, setProgramasOptions] = useState([]);\r\n const [isCreateButtonDisabled, setIsCreateButtonDisabled] = useState(true);\r\n\r\n const [currentPage, setCurrentPage] = useState(0);\r\n const usersPerPage = 10;\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined && currentUser.usuario !== \"\") {\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/Account/get-roles`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setRoles(data);\r\n setRolesLoading(false);\r\n if (searchCriteria.idRole === 0 && data.length > 0) {\r\n const adminRole = data.find(item => item.tipo === 1);\r\n if (adminRole !== undefined) {\r\n setSearchCriteria({ ...searchCriteria, idRole: adminRole.idhedrole, idUnidad: 0, idPrograma: 0 });\r\n setRoleNameSelected(adminRole.rolename);\r\n } else {\r\n setSearchCriteria({ ...searchCriteria, idRole: data[0].idhedrole, idUnidad: 0, idPrograma: 0 });\r\n setRoleNameSelected(data[0].rolename);\r\n }\r\n }\r\n MySwal.close();\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching roles:', error);\r\n });\r\n setIsCreateButtonDisabled(isCreateUserButtonDisabled());\r\n }\r\n }, [currentUser]);\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined && currentUser.usuario !== \"\" && searchCriteria.idRole !== 0) {\r\n setIsCreateButtonDisabled(isCreateUserButtonDisabled())\r\n fetchUsers();\r\n }\r\n }, [searchCriteria.idRole, searchCriteria.idUnidad, searchCriteria.idPrograma, refreshTable]);\r\n\r\n const fetchUsers = () => {\r\n let url = `${APIURL}/api/Account/active-users?idRole=${searchCriteria.idRole}`;\r\n\r\n if (roleNameSelected == \"Asistente POSTGRADO\" && searchCriteria.idPrograma != 0) {\r\n url += `&idPrograma=${searchCriteria.idPrograma}`;\r\n }\r\n\r\n if (roleNameSelected == \"Asistente GRADO\" && searchCriteria.idUnidad != 0) {\r\n url += `&idPrograma=${searchCriteria.idUnidad}`;\r\n }\r\n\r\n fetch(url)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setUsers(data);\r\n setLoading(false);\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching users:', error);\r\n });\r\n };\r\n\r\n \r\n const handleDeleteRole = (idheduser) => {\r\n\r\n const payload = {\r\n idHedUser: idheduser,\r\n idRole: searchCriteria.idRole,\r\n idPrograma: searchCriteria.idPrograma\r\n };\r\n\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/Account/delete-user-role`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(payload),\r\n })\r\n .then((response) => {\r\n MySwal.close();\r\n if (response.status === 200) {\r\n setModalIsOpen(false);\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n });\r\n setRefreshTable(!refreshTable);\r\n } else {\r\n console.error('Error al eliminar el rol al usuario.');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error al eliminar el rol al usuario:', error);\r\n });\r\n };\r\n\r\n const isCreateUserButtonDisabled = () => {\r\n if (roleNameSelected === \"Administrador\") {\r\n return false;\r\n } else if (roleNameSelected === \"Asistente GRADO\" && searchCriteria.idUnidad === 0) {\r\n return true;\r\n } else if (roleNameSelected === \"Asistente POSTGRADO\" && (searchCriteria.idUnidad === 0 || searchCriteria.idPrograma === 0)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n const renderAdditionalInput = () => {\r\n return (\r\n <>\r\n {roleNameSelected === 'Asistente POSTGRADO' || roleNameSelected === 'Asistente GRADO' ? (\r\n
\r\n \r\n {unidadOptions.map((unidad) => (\r\n \r\n ))}\r\n \r\n {roleNameSelected === 'Asistente POSTGRADO' && (\r\n \r\n {programasOptions.map((programa) => (\r\n \r\n ))}\r\n \r\n )}\r\n
\r\n ) : null}\r\n \r\n );\r\n };\r\n\r\n\r\n const renderTable = () => {\r\n return (\r\n
\r\n
\r\n \r\n {rolesLoading ? (\r\n \r\n ) : (\r\n roles.map((role) => (\r\n \r\n ))\r\n )}\r\n \r\n {renderAdditionalInput()}\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {users.map((user, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n Nombres\r\n \r\n Usuario\r\n \r\n Correo\r\n \r\n {' '}\r\n
\r\n {user.nombres + ' ' + user.apellidos}\r\n {user.username}{user.email}\r\n
\r\n \r\n handleDeleteRole(user.idheduser)}\r\n >\r\n Eliminar\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const handleModalClosed = () => {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n });\r\n setSearchResults([]);\r\n };\r\n\r\n const toggleModal = () => {\r\n setModalIsOpen(!modalIsOpen);\r\n };\r\n\r\n const handleSearchCriteriaChange = (e) => {\r\n\r\n const { name, value } = e.target;\r\n\r\n if (name === 'idRole') {\r\n const selectedRole = roles.find((role) => role.idhedrole === parseInt(value));\r\n const roleName = selectedRole ? selectedRole.rolename : '';\r\n setRoleNameSelected(roleName);\r\n\r\n if (roleName === 'Asistente GRADO') {\r\n //Fetch unidades\r\n fetch(`${APIURL}/api/Account/get-unidades`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setUnidadOptions(data);\r\n if (data.length > 0) {\r\n setSearchCriteria({ ...searchCriteria, idRole: value, idUnidad: data[0].idunidad, idPrograma: 0 });\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n idRole: value,\r\n idUnidad: 0,\r\n idPrograma: 0\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching unidades:', error);\r\n });\r\n } else if (roleName === 'Asistente POSTGRADO') {\r\n //Fetch unidades\r\n fetch(`${APIURL}/api/Account/get-unidades`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setUnidadOptions(data);\r\n if (data.length > 0) {\r\n fetch(`${APIURL}/api/Account/get-programas?idUnidad=${data[0].idunidad}`)\r\n .then((response) => response.json())\r\n .then((dataProg) => {\r\n setProgramasOptions(dataProg);\r\n if (dataProg.length > 0) {\r\n setSearchCriteria({ ...searchCriteria, idRole: value, idUnidad: data[0].idunidad, idPrograma: dataProg[0].idprograma });\r\n } else {\r\n setSearchCriteria({ ...searchCriteria, idRole: value, idUnidad: data[0].idunidad, idPrograma: 0 });\r\n }\r\n })\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n idRole: value,\r\n idUnidad: 0,\r\n idPrograma: 0\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching unidades:', error);\r\n });\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n idRole: value,\r\n idUnidad: 0,\r\n idPrograma: 0,\r\n });\r\n setUnidadOptions([]); //Limpiar unidades\r\n setProgramasOptions([]); //Limpiar programas\r\n }\r\n } else if (name === 'idUnidad') {\r\n \r\n if (roleNameSelected === 'Asistente POSTGRADO') {\r\n //Fetch programas\r\n fetch(`${APIURL}/api/Account/get-programas?idUnidad=${value}`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setProgramasOptions(data);\r\n if (data.length > 0) {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n [name]: value,\r\n idPrograma : data[0].idprograma\r\n });\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n [name]: value,\r\n idPrograma: 0\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error fetching programas:', error);\r\n });\r\n } else {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n [name]: value,\r\n idPrograma: 0\r\n });\r\n }\r\n\r\n } else if (name === 'idPrograma') {\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n idPrograma: value,\r\n });\r\n } else {\r\n setSearchCriteria({ ...searchCriteria, [name]: value });\r\n }\r\n\r\n };\r\n\r\n const handleSearch = () => {\r\n const payload = {\r\n nombres: searchCriteria.nombres,\r\n apellidos: searchCriteria.apellidos,\r\n numeroidentificacion: searchCriteria.numeroidentificacion,\r\n username: searchCriteria.username,\r\n idRole: searchCriteria.idRole,\r\n idPrograma: searchCriteria.idPrograma !== 0 ? searchCriteria.idPrograma : searchCriteria.idUnidad\r\n };\r\n\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/Account/posibles-usuarios`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(payload),\r\n })\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setSearchResults(data);\r\n setCurrentPage(0);\r\n MySwal.close();\r\n })\r\n .catch((error) => {\r\n console.error('Error al conseguir usuarios potenciales:', error);\r\n });\r\n };\r\n\r\n const handleSelectUser = (idpersona) => {\r\n\r\n const payload = {\r\n idpersona: idpersona,\r\n idRole: searchCriteria.idRole,\r\n idPrograma: searchCriteria.idPrograma !== 0 ? searchCriteria.idPrograma : searchCriteria.idUnidad\r\n };\r\n //console.log('Usuario seleccionado para rol: ' + JSON.stringify(payload));\r\n\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/Account/create-user`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(payload),\r\n })\r\n .then((response) => {\r\n MySwal.close();\r\n if (response.status === 200) {\r\n setModalIsOpen(false);\r\n setSearchCriteria({\r\n ...searchCriteria,\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n });\r\n setSearchResults([]);\r\n setRefreshTable(!refreshTable);\r\n }\r\n })\r\n .catch((error) => {\r\n console.error('Error selecting user:', error);\r\n });\r\n };\r\n\r\n const contents = loading ?

Loading...

: renderTable();\r\n\r\n const indexOfLastUser = (currentPage + 1) * usersPerPage;\r\n const indexOfFirstUser = indexOfLastUser - usersPerPage;\r\n const paginatedUsers = searchResults.slice(indexOfFirstUser, indexOfLastUser);\r\n\r\n const handlePageClick = (data) => {\r\n const selectedPage = data.selected;\r\n setCurrentPage(selectedPage);\r\n };\r\n\r\n return (\r\n
\r\n

Administrar usuarios

\r\n {contents}\r\n \r\n Buscar usuarios\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paginatedUsers.map((user, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
NombresApellidosCorreoIdentificación{' '}
{user.nombres}{user.apellidos}{user.emailAddress}{user.numeroidentificacion}\r\n handleSelectUser(user.idpersona)}\r\n >\r\n Agregar\r\n \r\n
\r\n {searchResults.length > 10 && (\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRoleAccess(UserManagement, ['ADMIN']);","import React, { useState, useEffect, useContext } from 'react';\r\nimport { Button, FormGroup, Label, Input } from 'reactstrap';\r\nimport { AppContext } from '../AppContext';\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport { Card, CardHeader, CardBody, Row, Col } from 'reactstrap';\r\nimport { FaFileExcel } from 'react-icons/fa';\r\nimport withRoleAccess from './withRoleAccess';\r\n\r\nconst MySwal = withReactContent(Swal);\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst ReportesConsolidados = () => {\r\n\r\n const [yearEspae, setYearEspae] = useState('');\r\n const [termEspae, setTermEspae] = useState('');\r\n const [yearsEspae, setYearsEspae] = useState([]);\r\n\r\n const [yearGrado, setYearGrado] = useState('');\r\n const [termGrado, setTermGrado] = useState('');\r\n const [yearsGrado, setYearsGrado] = useState([]);\r\n\r\n const currentUser = useContext(AppContext).currentUser;\r\n\r\n useEffect(() => {\r\n if (currentUser && currentUser !== undefined) {\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/reporte-usuario/periodo-encuesta-espae`)\r\n .then(response => response.json())\r\n .then(data => {\r\n MySwal.close();\r\n setYearsEspae(data);\r\n if (data && data.length > 0) {\r\n setYearEspae(data[0].anio);\r\n }\r\n })\r\n .catch(error => console.error('Error al consultar los datos:', error));\r\n\r\n fetch(`${APIURL}/api/reporte-usuario/periodo-encuesta-grado`)\r\n .then(response => response.json())\r\n .then(data => {\r\n setYearsGrado(data);\r\n if (data && data.length > 0) {\r\n setYearGrado(data[0].anioAcademico);\r\n }\r\n })\r\n .catch(error => console.error('Error al consultar los datos:', error));\r\n\r\n }\r\n }, [currentUser]);\r\n\r\n const handleYearEspaeChange = (e) => {\r\n setYearEspae(e.target.value);\r\n };\r\n\r\n const handleTermEspaeChange = (e) => {\r\n setTermEspae(e.target.value);\r\n };\r\n const handleYearGradoChange = (e) => {\r\n setYearGrado(e.target.value);\r\n };\r\n\r\n const handleTermGradoChange = (e) => {\r\n setTermGrado(e.target.value);\r\n };\r\n\r\n\r\n const downloadReportEspae = async (endpoint) => {\r\n try {\r\n MySwal.fire({\r\n title: 'Generando reporte...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n const requestBody = {\r\n anio: yearEspae,\r\n termino: termEspae\r\n };\r\n\r\n fetch(`${APIURL}${endpoint}`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(requestBody)\r\n })\r\n .then(response => {\r\n const contentDisposition = response.headers.get('Content-Disposition');\r\n let filename = 'reporte.xlsx';\r\n if (contentDisposition) {\r\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n const matches = filenameRegex.exec(contentDisposition);\r\n if (matches != null && matches[1]) {\r\n filename = matches[1].replace(/['\"]/g, '');\r\n }\r\n }\r\n response.blob().then(blob => {\r\n MySwal.close();\r\n let url = window.URL.createObjectURL(blob);\r\n let a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n a.click();\r\n });\r\n });\r\n } catch (error) {\r\n MySwal.fire('Error', 'Error al generar el reporte', 'error');\r\n }\r\n };\r\n\r\n const downloadReportGrado = async (endpoint) => {\r\n try {\r\n MySwal.fire({\r\n title: 'Generando reporte...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n const requestBody = {\r\n anio: yearGrado,\r\n termino: termGrado\r\n };\r\n\r\n fetch(`${APIURL}${endpoint}`, {\r\n method: \"POST\",\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(requestBody)\r\n })\r\n .then(response => {\r\n const contentDisposition = response.headers.get('Content-Disposition');\r\n let filename = 'reporte.xlsx';\r\n if (contentDisposition) {\r\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\r\n const matches = filenameRegex.exec(contentDisposition);\r\n if (matches != null && matches[1]) {\r\n filename = matches[1].replace(/['\"]/g, '');\r\n }\r\n }\r\n response.blob().then(blob => {\r\n MySwal.close();\r\n let url = window.URL.createObjectURL(blob);\r\n let a = document.createElement('a');\r\n a.href = url;\r\n a.download = filename;\r\n a.click();\r\n });\r\n });\r\n } catch (error) {\r\n MySwal.fire('Error', 'Error al generar el reporte', 'error');\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n

Reportes consolidados

\r\n
\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && (currentUser.roles.some(r => r.role == \"ADMIN\") ||\r\n currentUser.roles.some(r => [\"DECANO\", \"SUBDECANO\", \"COORDINADOR_GENERAL\", \"COORDINADOR_PROGRAMA\"].includes(r.role) && r.scope === \"ESPAE\")) &&\r\n \r\n ESPAE\r\n \r\n \r\n \r\n \r\n \r\n \r\n {yearsEspae.map((y, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n {currentUser && currentUser.usuario && currentUser.roles\r\n && (currentUser.roles.some(r => r.role == \"ADMIN\")) &&\r\n \r\n GRADO\r\n \r\n \r\n \r\n \r\n \r\n \r\n {yearsGrado.map((y, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default withRoleAccess(ReportesConsolidados, ['ADMIN', \"DECANO\", \"SUBDECANO\", \"COORDINADOR_GENERAL\", \"COORDINADOR_PROGRAMA\"]);","import React, { useState, useContext } from 'react';\r\nimport { Button, FormGroup, Label, Input, Card, CardHeader, CardBody, Table, Pagination, PaginationItem, PaginationLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { AppContext } from '../AppContext';\r\nimport Swal from 'sweetalert2';\r\nimport withReactContent from 'sweetalert2-react-content';\r\nimport ReactPaginate from 'react-paginate';\r\nimport { useHistory } from 'react-router-dom';\r\nimport withRoleAccess from './withRoleAccess';\r\n\r\nconst TITLE = 'Reportes de Retroalimentación Estudiantil';\r\nconst MySwal = withReactContent(Swal);\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nconst ImpersonateUser = () => {\r\n\r\n const history = useHistory();\r\n document.title = TITLE + \" - Impersonar usuario\";\r\n\r\n const [searchCriteria, setSearchCriteria] = useState({\r\n nombres: '',\r\n apellidos: '',\r\n username: '',\r\n numeroidentificacion: '',\r\n });\r\n const [searchResults, setSearchResults] = useState([]);\r\n\r\n const [currentPage, setCurrentPage] = useState(0);\r\n const usersPerPage = 10;\r\n\r\n const { startImpersonation } = useContext(AppContext);\r\n const { currentUser } = useContext(AppContext);\r\n\r\n const handleSearchCriteriaChange = (e) => {\r\n const { name, value } = e.target;\r\n setSearchCriteria(prevState => ({\r\n ...prevState,\r\n [name]: value\r\n }));\r\n };\r\n\r\n const handleSearch = () => {\r\n const payload = {\r\n nombres: searchCriteria.nombres,\r\n apellidos: searchCriteria.apellidos,\r\n numeroidentificacion: searchCriteria.numeroidentificacion,\r\n username: searchCriteria.username\r\n };\r\n\r\n MySwal.showLoading();\r\n fetch(`${APIURL}/api/Account/impersonate-users`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(payload),\r\n })\r\n .then((response) => response.json())\r\n .then((data) => {\r\n setSearchResults(data);\r\n setCurrentPage(0);\r\n MySwal.close();\r\n })\r\n .catch((error) => {\r\n console.error('Error al conseguir usuarios potenciales para impersonar:', error);\r\n });\r\n };\r\n\r\n const impersonate = async (emailAddress) => {\r\n\r\n const targetUsername = emailAddress.split('@')[0];\r\n try {\r\n MySwal.fire({\r\n title: 'Procesando petición...',\r\n allowOutsideClick: false,\r\n didOpen: () => {\r\n MySwal.showLoading();\r\n }\r\n });\r\n\r\n const response = await fetch(`${APIURL}/api/Account/impersonate`, {\r\n method: 'POST',\r\n body: JSON.stringify({ TargetUserId: targetUsername })\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error('Hubo un error en la red o en la petición.');\r\n }\r\n\r\n const r = await response.json();\r\n MySwal.fire({\r\n title: 'Éxito',\r\n text: 'Se registró su acción de actuar como un usuario',\r\n icon: 'success'\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n startImpersonation(r.token);\r\n history.push('/');\r\n }\r\n });\r\n\r\n } catch (error) {\r\n MySwal.fire('Error', 'Hubo un error en el proceso de impersonar a un usuario.', 'error');\r\n console.error('Error al actuar como un usuario:', error);\r\n }\r\n };\r\n\r\n const indexOfLastUser = (currentPage + 1) * usersPerPage;\r\n const indexOfFirstUser = indexOfLastUser - usersPerPage;\r\n const paginatedUsers = searchResults.slice(indexOfFirstUser, indexOfLastUser);\r\n\r\n const handlePageClick = (data) => {\r\n const selectedPage = data.selected;\r\n setCurrentPage(selectedPage);\r\n };\r\n\r\n return (\r\n \r\n Ver como un usuario\r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paginatedUsers.map((user, index) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
NombresApellidosCorreoIdentificación{' '}
{user.nombres}{user.apellidos}{user.emailAddress}{user.numeroidentificacion}\r\n {currentUser && !currentUser.isImpersonated && \r\n impersonate(user.emailAddress)}\r\n >\r\n Ver como\r\n \r\n }\r\n
\r\n {searchResults.length > 10 && (\r\n \r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRoleAccess(ImpersonateUser, ['ADMIN']);\r\n","import React from 'react';\r\n\r\nconst UnauthorizedAccess = () => (\r\n
\r\n

Acceso denegado

\r\n

El acceso al recurso especificado ha sido prohibido. Contacte al administrador si se trata de un error.

\r\n
\r\n);\r\n\r\nexport default UnauthorizedAccess;\r\n","import React, { Component } from 'react';\r\nimport { GraficoBarrasApiladas } from './GraficoBarrasApiladas';\r\n\r\nconst TITLE = \"Reportes de Retroalimentación Estudiantil\";\r\nconst APIURL = process.env.REACT_APP_API_URL;\r\n\r\nexport class GraficoParaleloArea extends Component {\r\n static displayName = GraficoParaleloArea.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { preguntas:[], frecuencias: [], alternativas: [], loading: true };\r\n }\r\n\r\n componentDidMount() {\r\n document.title = TITLE + \" - Histórico por profesor\";\r\n const anio = this.props.match.params[\"anio\"];\r\n const termino = this.props.match.params[\"termino\"];\r\n const codigo = this.props.match.params[\"codigo\"];\r\n const paralelo = this.props.match.params[\"paralelo\"];\r\n const identificacion = this.props.match.params[\"identificacion\"];\r\n const idarea = this.props.match.params[\"area\"];\r\n this.populateData(anio, termino, codigo, paralelo, identificacion, idarea);\r\n }\r\n\r\n formatter(valor) {\r\n return new Intl.NumberFormat('en-US', { minimumFractionDigits: '2', maximumFractionDigits: '2', signDisplay: 'never' }).format(valor)\r\n }\r\n\r\n splitwords(text, size = 40) {\r\n if (text.length <= size)\r\n return text;\r\n const chunks = text.split(\" \");\r\n const parts = [];\r\n var aux = \"\";\r\n for (var c in chunks) {\r\n if (aux.length + chunks[c].length <= size) {\r\n aux += chunks[c] + \" \";\r\n }\r\n else {\r\n parts.push(aux);\r\n aux = chunks[c] + \" \";\r\n }\r\n }\r\n parts.push(aux);\r\n return parts;\r\n }\r\n\r\n renderTable(preguntas, frecuencias, alternativas) {\r\n //console.log(datos);\r\n const etiquetas = preguntas.map((p, index) => index + 1);\r\n const valoresFrecuencias = frecuencias.map(p => { return { ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa, frecuencia: p.frecuencia } });\r\n console.log(etiquetas);\r\n console.log(valoresFrecuencias);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n render() {\r\n console.log(this.state.preguntas);\r\n console.log(this.state.alternativas);\r\n\r\n let contents = this.state.loading\r\n ?

Loading...

\r\n : this.renderTable(this.state.preguntas, this.state.frecuencias, this.state.alternativas);\r\n\r\n return (\r\n
\r\n {contents}\r\n
\r\n );\r\n }\r\n\r\n async populateData(anio, termino, codigo, paralelo, identificacion, idarea) {\r\n\r\n const frecuenciasResponse = await fetch(`${APIURL}/api/reportes/paralelo-frecuencias-area/${anio}/${termino}/${codigo}/${paralelo}/${identificacion}/${idarea}`);\r\n const dataFrecuencias = await frecuenciasResponse.json();\r\n console.log(dataFrecuencias);\r\n const preguntas = [];\r\n const alternativas = [];\r\n\r\n if (dataFrecuencias) {\r\n dataFrecuencias.forEach(p => {\r\n if (preguntas.every(f => f.ordenPregunta !== p.ordenPregunta)) {\r\n preguntas.push({ ordenPregunta: p.ordenPregunta, pregunta: p.pregunta });\r\n }\r\n\r\n if (alternativas.every(e => e.ordenAlternativa !== p.ordenAlternativa)) {\r\n alternativas.push({ ordenAlternativa: p.ordenAlternativa, alternativa: p.alternativa });\r\n }\r\n });\r\n\r\n this.setState({ preguntas: preguntas, frecuencias: dataFrecuencias, alternativas: alternativas, loading: false });\r\n }\r\n\r\n }\r\n}\r\n","import React, { Component, useContext } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { AppContext } from './AppContext';\r\nimport { authService } from './services/auth.service';\r\nimport { createBrowserHistory } from 'history';\r\n\r\nimport { AuthLayout } from './layouts/AuthLayout';\r\nimport { Home } from './components/Home';\r\nimport { MisParalelos } from './components/MisParalelos';\r\nimport UnidadEvaluacion from './components/UnidadEvaluacion';\r\nimport { ProgramaEvaluacion } from './components/ProgramaEvaluacion';\r\nimport UnidadParalelos from './components/UnidadParalelos';\r\nimport { Materias } from './components/Materias';\r\nimport { ParalelosMateria } from './components/ParalelosMateria';\r\nimport { Profesores } from './components/Profesores';\r\nimport { ParalelosProfesor } from './components/ParalelosProfesor';\r\nimport { Paralelo } from './components/Paralelo';\r\nimport { Practica } from './components/Practica';\r\nimport { Comentarios } from './components/Comentarios';\r\nimport ComentariosPractica from './components/ComentariosPractica';\r\nimport UserManagement from './components/UserManagement';\r\nimport ReportesConsolidados from './components/ReportesConsolidados';\r\nimport ImpersonateUser from './components/ImpersonateUser';\r\nimport UnauthorizedAccess from './components/UnauthorizedAccess';\r\n\r\nimport { GraficoParaleloArea } from './components/GraficoParaleloArea';\r\n\r\nimport './assets/css/main.css';\r\nimport { Switch } from 'react-router-dom';\r\n\r\nimport Cookies from 'universal-cookie';\r\nimport jwt from 'jsonwebtoken';\r\n\r\nconst history = createBrowserHistory();\r\nconst cookies = new Cookies();\r\n\r\nconst BASEURL = process.env.REACT_APP_BASE_URL;\r\n\r\nconst publicRoutes_prefix = [\"/materias\", \"/profesores\", \"/paralelos-profesor\", \"/paralelos-materia\", \"/paralelo/\", \"/api/\", \"/images/graficos/\"];\r\nconst publicRoutes_exact = [\"\", \"/\"];\r\n\r\nclass App extends Component {\r\n static displayName = App.name;\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n currentUser: null\r\n };\r\n }\r\n\r\n componentDidCatch(error, errorInfo) {\r\n console.log(\"error = \" + error + \" errorInfo = \" + errorInfo);\r\n }\r\n\r\n componentDidMount() {\r\n const { currentUser } = this.state;\r\n const { pathname } = history.location;\r\n\r\n const authToken = cookies.get('authToken');\r\n\r\n if (authToken) {\r\n try {\r\n const decodedToken = jwt.decode(authToken);\r\n if (isTokenExpired(decodedToken)) {\r\n cookies.remove('authToken', { path: '/' });\r\n cookies.remove('impersonateToken', { path: '/' });\r\n } else {\r\n const impToken = cookies.get('impersonateToken');\r\n const decodedImpToken = jwt.decode(impToken);\r\n if (impToken) {\r\n authService.validateToken(impToken, decodedImpToken, true);\r\n } else {\r\n authService.validateToken(authToken, decodedToken);\r\n }\r\n this.subscription = authService.currentUser.subscribe(currentUser => {\r\n if (currentUser) {\r\n this.setState({ currentUser: currentUser });\r\n }\r\n });\r\n return;\r\n }\r\n } catch (error) {\r\n console.error('Token decoding error:', error);\r\n }\r\n }\r\n\r\n if (!currentUser || currentUser == undefined) {\r\n if (publicRoutes_prefix.map(pr => pathname.startsWith(`${BASEURL}${pr}`)).some(pr => pr) || publicRoutes_exact.map(pr => pathname == `${BASEURL}${pr}`).some(pr => pr) || publicRoutes_exact.includes(pathname)) {\r\n authService.login(history, true);\r\n } else {\r\n authService.login(history);\r\n }\r\n\r\n this.subscription = authService.currentUser.subscribe(currentUser => {\r\n if (currentUser) {\r\n this.setState({ currentUser: currentUser });\r\n }\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n startImpersonation = (impersonationToken) => {\r\n const decodedToken = jwt.decode(impersonationToken);\r\n authService.validateToken(impersonationToken, decodedToken, true);\r\n cookies.set('impersonateToken', impersonationToken, {\r\n path: '/'\r\n });\r\n authService.setGlobalFetch();\r\n };\r\n\r\n revertToOriginalUser = () => {\r\n const originalToken = cookies.get('authToken');\r\n const decodedToken = jwt.decode(originalToken);\r\n authService.validateToken(originalToken, decodedToken);\r\n cookies.remove('impersonateToken', { path: '/' });\r\n this.props.history.push('/');\r\n authService.setGlobalFetch();\r\n };\r\n\r\n render() {\r\n const { currentUser } = this.state;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nfunction isTokenExpired(tokenObj) {\r\n if (!tokenObj || !tokenObj.exp) {\r\n return true;\r\n }\r\n const currentTime = Math.floor(Date.now() / 1000);\r\n return tokenObj.exp < currentTime;\r\n}\r\n\r\nexport default withRouter(App);","// 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\nimport * as dotenv from 'dotenv';\r\ndotenv.config();\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();"],"sourceRoot":""}