...
 
Commits (4)
......@@ -1403,6 +1403,7 @@ var Usuario = (function () {
this.cedula = currentUser.cedula;
this.nombre = currentUser.nombre;
this.apellido = currentUser.apellido;
this.liceoId = currentUser.liceoId;
this.tipo = currentUser.tipo;
this.todosLosCursos = !currentUser.todosLosCursos ? [] :
currentUser.todosLosCursos.map(function (c) { return new MoodleCourseDTO(c); });
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -2931,12 +2931,10 @@ var MateFunComponent = (function () {
MateFunComponent.prototype.ngOnInit = function () {
var _this = this;
this.ghciService.rendered();
console.log('Usuario.getUser().cedula: ', __WEBPACK_IMPORTED_MODULE_7__shared_objects_usuario__["a" /* Usuario */].getUser().cedula);
this.haskellService.getArchivos(__WEBPACK_IMPORTED_MODULE_7__shared_objects_usuario__["a" /* Usuario */].getUser().cedula)
.subscribe(function (archivos) {
console.log('cocacola: ', archivos);
//.filter(function(a){return !a.eliminado})
_this.buildTreeFromList(archivos);
if (archivos.length > 0)
_this.buildTreeFromList(archivos);
}, function (error) { });
function KeyPress(e) {
var evtobj = window.event ? event : e;
......
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
......@@ -11,7 +11,7 @@ var map = {
],
"./courseselector/courseselector.module.ngfactory": [
"../../../../../src/$$_gendir/app/courseselector/courseselector.module.ngfactory.ts",
4,
5,
0
],
"./cursos/cursos.module.ngfactory": [
......@@ -21,22 +21,22 @@ var map = {
],
"./estadosistema/estadosistema.module.ngfactory": [
"../../../../../src/$$_gendir/app/layout/estadosistema/estadosistema.module.ngfactory.ts",
10,
4,
0
],
"./gestcursos/gestcursos.module.ngfactory": [
"../../../../../src/$$_gendir/app/layout/gestcursos/gestcursos.module.ngfactory.ts",
9,
10,
0
],
"./grupos/grupos.module.ngfactory": [
"../../../../../src/$$_gendir/app/layout/grupos/grupos.module.ngfactory.ts",
8,
9,
0
],
"./ieducativa/ieducativa.module.ngfactory": [
"../../../../../src/$$_gendir/app/layout/ieducativa/ieducativa.module.ngfactory.ts",
7,
8,
0
],
"./layout/layout.module.ngfactory": [
......@@ -46,7 +46,7 @@ var map = {
],
"./login/login.module.ngfactory": [
"../../../../../src/$$_gendir/app/login/login.module.ngfactory.ts",
6,
7,
0
],
"./matefun/matefun.module.ngfactory": [
......@@ -56,7 +56,7 @@ var map = {
],
"./not-found/not-found.module.ngfactory": [
"../../../../../src/$$_gendir/app/not-found/not-found.module.ngfactory.ts",
5
6
]
};
function webpackAsyncContext(req) {
......
This diff is collapsed.
.card{
min-height: 400px !important;
}
.liceomsg{
color: gray;
}
.disableLinkSyle{
color: black;
text-decoration: none;
cursor: pointer;
}
.gray{
background-color: #f7f7f7;
}
.bordertop{
border-top: 1px solid #f7f7f7;
}
.borderleft{
border-left: 1px solid #f7f7f7;
}
.borderright{
border-right: 1px solid #f7f7f7;
}
.borderbottom{
border-bottom: 1px solid #f7f7f7;
}
.paddingbottomtop{
padding-top: 10px;
padding-top: 20px;
padding-bottom: 10px;
}
......@@ -20,4 +54,19 @@
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently
supported by Chrome and Opera */
}
.d-inline-block{
z-index: 999 !important;
}
.link{
color: #0275d8;
cursor: pointer;
display: inline;
}
.link:hover{
text-decoration: underline;
cursor: pointer;
}
\ No newline at end of file
import { Component, OnInit } from '@angular/core';
import { DialogService } from "ng2-bootstrap-modal";
import { DetalleComponent } from './../../shared/modal/detalle.component';
import { Usuario } from '../../shared/objects/usuario';
import * as _ from "lodash";
@Component({
moduleId: module.id,
......@@ -9,12 +13,198 @@ import { Component, OnInit } from '@angular/core';
export class EstadoSistemaComponent implements OnInit {
liceoSeleccionado: number;
liceoSeleccionado: any;
cursoSeleccionado: any;
fechainicio : any;
fechafin : any;
schoolList: any[];
constructor() { }
modalContent: any;
tiempos: any[];
estadistico: any;
esAdminLiceo: boolean = false;
usuarioTotalTooltip: string = 'Hace referencia a cualquier referencia a el curso seleccionado usando matefun.\nEj: Leer archivos de curso.\n compartir archivos a alumnos de un curso.\n entregar trabajo para el curso, etc.';
tipoFuncion: string;
nombreFuncion: string;
help: any = {
textLUnow: 'Hace referencia a usuarios que han iniciado sesión, no la han cerrado y no se ha vencido automaticamente.',
titleLUnow: 'Usuarios logueados en este instante',
textLUperiod: 'Hace referenciaa ingresos a la cuenta desde matefun en el periodo seleccionado.',
titleLUperiod: 'Usuarios logueados totales (período)',
textFileAccess: 'Hace referencia a la consulta del contenido de archivos en el periodo seleccionado. (no incluye listar archivos)',
titleFileAccess: 'Archivos Accedidos',
textCourseAccess: 'Hace referencia a cualquier interaccion con el curso en moodle para el periodo seleccionado. (leer archivos de curso, compartir archivos, entregar/corregir tareas, etc.)',
titleCourseAccess: 'Acceso a curso (total período)',
textSharedFiles: 'Hace referencia a la cantidad de archivos compartidos (en cualquiera de sus modalidades) en el marco del curso y periodo seleccionado.',
titleSharedFiles: 'Archivos compartidos (período)',
textTask: 'Hace referencia a la cantidad de tareas existentes en el curso.',
titleTask: 'Tareas/entregas (período)'
}
constructor(private dialogService: DialogService) { }
ngOnInit() {
this.schoolList = [ {liceoid: 1 , nombre: 'Liceo 1'} , {liceoid: 2 , nombre: 'Liceo 2'} , {liceoid: 3 , nombre: 'Liceo 3'} ];
this.schoolList = [
{
liceoid: 3,
nombre: 'Liceo 3',
url: 'https://matefun.moodlecloud.com/',
cantidadUsuarios: 19,
logueadosActualmente: 3,
archivosAccedidos : [{nombre: 'prueba.mf', tamanio: 23, usuario: 'docente2' , fecha: '2020-May-04'}],
cursos:
[
{
idCurso: 3,
cantidadAlumnos: 7,
cantidadDocentes: 3,
nombre: 'Matematica sexto',
archivosCompartidos : [ {nombre: 'Tareaborrador.mf' , tamanio: 445, tipo: 'grupo', fecha: '2020-may-05'},
{nombre: 'tareaborrador2.mf' , tamanio: 998, tipo: 'grupo', fecha: '2020-may-09'},
{nombre: 'prueba34.mf' , tamanio: 1221, tipo: 'usuario', fecha: '2020-abr-05'},
{nombre: 'compartir' , tamanio: 5423, tipo: 'curso', fecha: '2020-may-01'}
],
tareasExistentes: [ {nombre: 'Oblig 1' , archivosEntregados: 20, archivosCorregidos: 16, archivosTotales: 23 , tipo : 'grupal'},
{nombre: 'Oblig 2' , archivosEntregados: 16, archivosCorregidos: 14, archivosTotales: 17 , tipo : 'individual'},
{nombre: 'Oblig 3' , archivosEntregados: 11, archivosCorregidos: 10, archivosTotales: 23 , tipo : 'grupal'}
],
},
{
idCurso: 4,
cantidadAlumnos: 9,
cantidadDocentes: 3,
nombre: 'Fisica',
archivosCompartidos : [{nombre: 'gonza' , tamanio: 12, tipo: 'curso' , fecha: '2020-may-05'}],
tareasExistentes: [ {nombre: 'vsafsd' , archivosCorregidos: 1, archivosTotales: 23 , tipo : 'grupal'},
{nombre: 'vsdfvfds' , archivosCorregidos: 4, archivosTotales: 55 , tipo : 'individual'},
],
}
],
} ,
{liceoid: 2 , nombre: 'Liceo 2', url: 'matefun2.111',} ,
{liceoid: 1 , nombre: 'Liceo 1', url: 'matefun3.aaa',}
];
this.tiempos = [
{ tipo: 'matefun', nombre: '/logout' , promediodia: 786, max: 981, min: 122, fecha: '2020-may-18'},
{ tipo: 'moodle', nombre: 'core_user_get_user' , promediodia: 321, max: 677, min: 221, fecha: '2020-may-17' },
{ tipo: 'matefun', nombre: '/compartirArchivo' , promediodia: 613, max: 998, min: 290, fecha: '2020-may-16' },
{ tipo: 'moodle', nombre: 'core_user_get_user' , promediodia: 335, max: 566, min: 110 , fecha: '2020-may-15' },
{ tipo: 'matefun', nombre: '/logout' , promediodia: 416, max: 781, min: 200, fecha: '2020-may-14' },
{ tipo: 'moodle', nombre: 'core_user_delete_user' , promediodia: 191, max: 612, min: 101, fecha: '2020-may-13' },
];
this.estadistico = { prom: 235, max: 778 , min: 116 };
const usuario : Usuario = Usuario.getUser();
this.esAdminLiceo = Usuario.getUser().esAdminLiceo();
if (this.esAdminLiceo){
this.liceoSeleccionado = this.schoolList[0];
}
}
blurCalendar(d: any){
window.setTimeout( () => {d.close();} , 300 );
}
toFixedDown(num, digits){
let re = new RegExp("(\\d+\\.\\d{" + digits + "})(\\d)"),
m = num.toString().match(re);
return m ? parseFloat(m[1]) : num.valueOf();
}
get promStdev() : any {
const res = { prom : 0 , stdev : 0 , max : 0 , min : 0};
const resTiempos = this.resultadoTiempos;
let accum = 0;
for (let t of resTiempos) {
accum += t.promediodia;
}
const promedio = accum/resTiempos.length;
accum = 0;
for (let t of resTiempos) {
accum += Math.pow(t.promediodia - promedio, 2)
}
res.prom = this.toFixedDown(promedio,1);
res.stdev = this.toFixedDown(Math.sqrt( accum / resTiempos.length ),1);
res.max = this.toFixedDown(Math.max(...resTiempos.map (t => t.promediodia )),1);
res.min = this.toFixedDown(Math.min(...resTiempos.map (t => t.promediodia )),1);
return res;
}
cambioTipoFuncion(event) {
this.nombreFuncion = undefined;
}
clickFecha(id){
console.log (id);
}
get resultadoTiempos(): any[] {
if (!this.tiempos)
return [];
return this.tiempos.filter ( (t: any) => (!this.tipoFuncion || t.tipo===this.tipoFuncion) &&
(!this.nombreFuncion || t.nombre===this.nombreFuncion)
);
}
get funciones() : string[] {
if (!this.tiempos)
return [];
return _.uniqBy(this.tiempos.filter( (t: any) => !this.tipoFuncion || t.tipo === this.tipoFuncion).map ( (t: any) => t.nombre));
}
goto(destination: string){
window.open(destination, '_blank');
}
cursoChange(curso: any) {
}
liceoChange(liceo: any) {
}
finicioChange(newDate: any){
const fInicioUnixMyTimezone = new Date(this.fechainicio.year + '.' + this.fechainicio.month + '.' + this.fechainicio.day).getTime() / 1000;
//console.log ('ffinunix: ' , fInicioUnixMyTimezone);
}
ffinChange(newDate: any){
const fFinUnixMyTimezone = new Date(this.fechafin.year + '.' + this.fechafin.month + '.' + this.fechafin.day).getTime() / 1000;
//console.log ('ffinunix: ' , fFinUnixMyTimezone);
}
mostrarModalDetalle(tipo: string){
this.dialogService.addDialog(DetalleComponent,
{parent: this,
tipo: tipo,
modalContent: tipo=='share' ? this.cursoSeleccionado.archivosCompartidos :
(tipo=='file' ? this.liceoSeleccionado.archivosAccedidos: this.cursoSeleccionado.tareasExistentes),
}).subscribe((_)=>{ });
}
get seleccionaCurso(): boolean {
return this.cursoSeleccionado !== undefined &&
this.cursoSeleccionado !== null &&
this.cursoSeleccionado != -1;
}
}
......@@ -4,14 +4,15 @@ import { EstadoSistemaRoutingModule } from './estadosistema-routing.module';
import { EstadoSistemaComponent } from './estadosistema.component';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { FormsModule } from '@angular/forms';
import { DialogService } from "ng2-bootstrap-modal";
import { DetalleComponent } from './../../shared/modal/detalle.component'
import { BootstrapModalModule } from 'ng2-bootstrap-modal';
@NgModule({
imports: [
CommonModule,
NgbModule,
FormsModule,
EstadoSistemaRoutingModule
],
declarations: [EstadoSistemaComponent]
imports: [ CommonModule, NgbModule, FormsModule, EstadoSistemaRoutingModule, BootstrapModalModule ],
entryComponents: [DetalleComponent],
declarations: [DetalleComponent, EstadoSistemaComponent],
providers: [DialogService],
exports: [EstadoSistemaComponent],
})
export class EstadoSistemaModule { }
......@@ -259,15 +259,11 @@ export class MateFunComponent {
ngOnInit() {
this.ghciService.rendered();
console.log ('Usuario.getUser().cedula: ' , Usuario.getUser().cedula)
this.haskellService.getArchivos(Usuario.getUser().cedula)
.subscribe(
archivos => {
console.log ('cocacola: ' , archivos)
//.filter(function(a){return !a.eliminado})
this.buildTreeFromList(archivos);
if (archivos.length > 0)
this.buildTreeFromList(archivos);
},
error => {});
......
......@@ -58,7 +58,7 @@ export class LoginComponent implements OnInit {
if (!this.errorCargaLiceo){
this.mostrarSelect = (event!=this.matefunAdmin)
if (!this.mostrarSelect){
this.liceoSeleccionado = '1'
//this.liceoSeleccionado = '1'
this.mensaje = 'ADMIN MATEFUN'
}else{
//this.liceoSeleccionado = undefined
......@@ -71,7 +71,7 @@ export class LoginComponent implements OnInit {
async fillSelect(){
await this.authenticationService.getAllSchools().subscribe(
data => {
console.log ('todos los liceos: ' , data)
this.schoolList = data;
//admin
......@@ -117,6 +117,9 @@ export class LoginComponent implements OnInit {
}
login() {
this.loading = true;
if (this.matefunAdmin !== this.model.cedula && !this.liceoSeleccionado){
......@@ -141,7 +144,7 @@ export class LoginComponent implements OnInit {
}
console.log ('this.liceoSeleccionado: ' , this.liceoSeleccionado)
var that = this;
this.authenticationService.login(this.model.cedula, this.model.password, this.liceoSeleccionado)
.subscribe(
......
import { Component, OnInit } from '@angular/core';
import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
export interface DetalleModel {
parent: any;
tipo: string;
modalContent: any;
}
@Component({
selector: 'confirm',
template: `<div class="modal-dialog" style="margin-top:100px;">
<div class="modal-content" [ngStyle]="{ 'width': tipo !== 'task' ? '700px' : '900px' }" >
<div class="modal-header" [ngStyle]="{ 'width': tipo !== 'task' ? '700px' : '900px' }" >
<h6 class="modal-title" *ngIf="tipo=='share'">Detalle Archivos Compartidos de {{ parent.cursoSeleccionado.nombre }}</h6>
<h6 class="modal-title" *ngIf="tipo=='file'">Archivos accedidos {{ parent.liceoSeleccionado.nombre }}</h6>
<h6 class="modal-title" *ngIf="tipo=='task'">Detalle Tareas de {{ parent.cursoSeleccionado.nombre }}</h6>
<button type="button" class="close" (click)="close()" style="margin-left:8px;">&times;</button>
</div>
<div class="modal-body" [ngStyle]="{ 'width': tipo !== 'task' ? '700px' : '900px' }" style="text-align: center !important;">
<div style="display: inline-block !important;">
<table class="table table-striped">
<div *ngIf="tipo=='share'">
<thead>
<tr>
<th scope="col">Nombre</th>
<th scope="col">Tamaño (B)</th>
<th scope="col">Tipo</th>
<th scope="col">Fecha</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let file of modalContent">
<td>{{ file.nombre }}</td>
<td>{{ file.tamanio }}</td>
<td>{{ file.tipo }}</td>
<td>{{ file.fecha }}</td>
</tr>
</tbody>
</div>
<div *ngIf="tipo=='file'">
<thead>
<tr>
<th scope="col">Nombre</th>
<th scope="col">Tamaño (B)</th>
<th scope="col">Usuario</th>
<th scope="col">Fecha</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let file of modalContent">
<td>{{ file.nombre }}</td>
<td>{{ file.tamanio }}</td>
<td>{{ file.usuario }}</td>
<td>{{ file.fecha }}</td>
</tr>
</tbody>
</div>
<div *ngIf="tipo=='task'">
<thead>
<tr>
<th scope="col">Nombre</th>
<th scope="col">Tipo</th>
<th scope="col">Entregados</th>
<th scope="col">Corregidos</th>
<th scope="col">Totales</th>
<th scope="col">% entregados</th>
<th scope="col">% corregidos</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let tarea of modalContent">
<td>{{ tarea.nombre }}</td>
<td>{{ tarea.tipo }}</td>
<td>{{ tarea.archivosEntregados }}</td>
<td>{{ tarea.archivosCorregidos }}</td>
<td>{{ tarea.archivosTotales }}</td>
<td>{{ this.toFixedDown( (tarea.archivosEntregados/tarea.archivosTotales)*100 , 1) }}%</td>
<td>{{ this.toFixedDown( (tarea.archivosCorregidos/tarea.archivosTotales)*100 , 1) }}%</td>
</tr>
</tbody>
</div>
</table>
</div>
</div>
<div class="modal-footer" [ngStyle]="{ 'width': tipo !== 'task' ? '700px' : '900px' }">
<button type="button" class="btn btn-danger" (click)="close()">Cerrar</button>
</div>
</div>
</div>`
})
export class DetalleComponent extends DialogComponent<DetalleModel, boolean> implements DetalleModel, OnInit {
parent: any;
tipo: string;
modalContent: any;
constructor(dialogService: DialogService) {
super(dialogService);
}
toFixedDown(num, digits){
let re = new RegExp("(\\d+\\.\\d{" + digits + "})(\\d)"),
m = num.toString().match(re);
return m ? parseFloat(m[1]) : num.valueOf();
}
ngOnInit() {
console.log ('modalContent: ' , this.modalContent)
}
}
\ No newline at end of file
......@@ -65,6 +65,7 @@ export class Usuario{
nombre: string;
apellido: string;
tipo: string;
liceoId: number;
configuracion: Configuracion;
todosLosCursos: MoodleCourseDTO[];
archivos? : any[];
......@@ -77,6 +78,7 @@ export class Usuario{
this.cedula = currentUser.cedula;
this.nombre = currentUser.nombre;
this.apellido = currentUser.apellido;
this.liceoId = currentUser.liceoId;
this.tipo = currentUser.tipo;
this.todosLosCursos = !currentUser.todosLosCursos ? [] :
currentUser.todosLosCursos.map( c => new MoodleCourseDTO(c) );
......
......@@ -43,9 +43,10 @@ public class AlumnoDTO implements Serializable{
this.archivos.add(new ArchivoDTO(a));
}
this.archivosCompartidos = new ArrayList<>();
for(Archivo a: alumno.getArchivosCompartidos()){
this.archivosCompartidos.add(new ArchivoDTO(a));
}
//for(Archivo a: alumno.getArchivosCompartidos()){
// this.archivosCompartidos.add(new ArchivoDTO(a));
//}
}
public String getCedula() {
......
......@@ -116,9 +116,9 @@ public class ArchivoDTO implements Serializable {
}
this.directorio = archivo.isDirectorio();
this.estado = archivo.getEstado().name();
if(archivo.getEvaluacion()!=null){
this.evaluacion = new EvaluacionDTO(archivo.getEvaluacion());
}
//if(archivo.getEvaluacion()!=null){
// this.evaluacion = new EvaluacionDTO(archivo.getEvaluacion());
//}
}
public boolean isEditable() {
......
......@@ -2,10 +2,8 @@ package edu.proygrado.dto;
import java.util.ArrayList;
import java.util.List;
import edu.proygrado.modelo.Alumno;
import edu.proygrado.modelo.Archivo;
import edu.proygrado.modelo.Grupo;
public class BackupAlumnoDTO extends BackupUsuarioDTO{
......@@ -17,7 +15,8 @@ public class BackupAlumnoDTO extends BackupUsuarioDTO{
public BackupAlumnoDTO() {
}
public BackupAlumnoDTO(Alumno alumno, List<Grupo> grupos) {
public BackupAlumnoDTO(Alumno alumno /*, List<Grupo> grupos */) {
/*
super(alumno);
this.archivos = new ArrayList<>();
......@@ -40,6 +39,7 @@ public class BackupAlumnoDTO extends BackupUsuarioDTO{
grupoDTO.setLiceoId(grupo.getGrupoPK().getLiceo().getLiceoId());
this.grupos.add(grupoDTO);
}
*/
}
public List<ArchivoDTO> getArchivos() {
......
......@@ -2,10 +2,8 @@ package edu.proygrado.dto;
import java.util.ArrayList;
import java.util.List;
import edu.proygrado.modelo.Archivo;
import edu.proygrado.modelo.Docente;
import edu.proygrado.modelo.Grupo;
public class BackupDocenteDTO extends BackupUsuarioDTO{
......@@ -15,6 +13,7 @@ public class BackupDocenteDTO extends BackupUsuarioDTO{
public BackupDocenteDTO(){}
public BackupDocenteDTO(Docente docente){
/*
super(docente);
this.gruposAsignados = new ArrayList<>();
......@@ -30,6 +29,7 @@ public class BackupDocenteDTO extends BackupUsuarioDTO{
for(Archivo archivo: docente.getArchivos()){
this.archivos.add(new ArchivoDTO(archivo));
}
*/
}
public List<GrupoDTO> getGruposAsignados() {
......
......@@ -2,8 +2,6 @@ package edu.proygrado.dto;
import java.util.Date;
import edu.proygrado.modelo.Evaluacion;
public class EvaluacionDTO {
long evaluacionId;
......@@ -25,14 +23,6 @@ public class EvaluacionDTO {
public EvaluacionDTO(){}
public EvaluacionDTO(Evaluacion eval){
this.evaluacionId = eval.getEvaluacionId();
this.cedulaDocente = eval.getDocente().getCedula();
this.fecha = eval.getFecha();
// this.nota = eval.getNota(); TODO: arraglar aqui el tipo
this.descripcion = eval.getDescripcion();
}
public EvaluacionDTO(Long assignmentid, Long userid, String nota,
Long attemptnumber, Boolean addattempt, String workflowstate, String descripcion, boolean corregido, Integer idDocenteQueCorrigio, Integer fechaCorreccion, String assignmentName, boolean esGrupal) {
......
......@@ -3,11 +3,9 @@ package edu.proygrado.dto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import edu.proygrado.modelo.Alumno;
import edu.proygrado.modelo.Archivo;
import edu.proygrado.modelo.EstadoArchivo;
import edu.proygrado.modelo.Grupo;
import edu.proygrado.utils.Utils;
public class GrupoDTO implements Serializable{
......@@ -47,32 +45,6 @@ public class GrupoDTO implements Serializable{
public GrupoDTO(){}
public GrupoDTO(Grupo grupo){
this.anio = grupo.getGrupoPK().getAnio();
this.grado = grupo.getGrupoPK().getGrado();
this.grupo = grupo.getGrupoPK().getGrupo();
this.liceoId = grupo.getGrupoPK().getLiceo().getLiceoId();
this.archivos = new ArrayList<>();
for(Archivo a:grupo.getArchivos()){
this.archivos.add(new ArchivoDTO(a));
}
this.alumnos = new ArrayList<>();
for(Alumno a:grupo.getAlumnos()){
AlumnoDTO alumno = new AlumnoDTO();
alumno.setNombre(a.getNombre());
alumno.setApellido(a.getApellido());
alumno.setCedula(a.getCedula());
List<ArchivoDTO> archivos = new ArrayList<>();
for(Archivo arch : a.getArchivosCompartidos()){
if(!arch.isDirectorio() && !arch.isEliminado() && (arch.getEstado() == EstadoArchivo.Entregado || arch.getEstado() == EstadoArchivo.Corregido)){
archivos.add(new ArchivoDTO(arch));
}
}
alumno.setArchivos(archivos);
this.alumnos.add(alumno);
}
}
public int getAnio() {
return anio;
}
......
......@@ -19,18 +19,20 @@ public class UsuarioDTO {
String nombre;
String apellido;
String tipo;
Long liceoId;
List<MoodleCourseDTO> todosLosCursos;
ConfiguracionDTO configuracion;
public UsuarioDTO(){}
public UsuarioDTO(Long moodleUserId, String token, Usuario usuario,List<MoodleCourseDTO> todosLosCursos){
public UsuarioDTO(Long moodleUserId, String token, Long liceoId, Usuario usuario, List<MoodleCourseDTO> todosLosCursos){
this.token = token;
this.cedula = usuario.getCedula();
this.nombre = usuario.getNombre();
this.apellido = usuario.getApellido();
this.tipo = usuario.getTipo();
this.moodleUserId = moodleUserId;
this.liceoId = liceoId;
this.todosLosCursos = todosLosCursos;
if(usuario.getConfiguracion()!=null){
this.configuracion = new ConfiguracionDTO(usuario.getConfiguracion());
......@@ -102,5 +104,13 @@ public class UsuarioDTO {
public void setTodosLosCursos(List<MoodleCourseDTO> todosLosCursos) {
this.todosLosCursos = todosLosCursos;
}
public Long getLiceoId() {
return liceoId;
}
public void setLiceoId(Long liceoId) {
this.liceoId = liceoId;
}
}
......@@ -20,7 +20,6 @@ import java.util.Map;
import java.util.Random;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Stateless;
......@@ -31,7 +30,6 @@ import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.transaction.UserTransaction;
import edu.proygrado.dto.ArchivoDTO;
import edu.proygrado.dto.ArchivoRestriccion;
import edu.proygrado.dto.CompartirArchivoInputDTO;
......@@ -44,7 +42,6 @@ import edu.proygrado.modelo.Alumno;
import edu.proygrado.modelo.Archivo;
import edu.proygrado.modelo.Docente;
import edu.proygrado.modelo.EstadoArchivo;
import edu.proygrado.modelo.Evaluacion;
import edu.proygrado.modelo.Liceo;
import edu.proygrado.modelo.ParametroArchivo;
import edu.proygrado.modelo.ParametroArchivoPK;
......@@ -258,6 +255,8 @@ public class ArchivosEJB {
}
public ArchivoDTO getCopiaCompartido(String cedula, Long archivoId) throws Exception {
throw new Exception ("Eliminado");
/*
Archivo archivo = em.find(Archivo.class, archivoId);
try {
Archivo copiaExistente = (Archivo) em
......@@ -289,6 +288,7 @@ public class ArchivosEJB {
em.persist(copia);
em.flush();
return new ArchivoDTO(copia);
*/
}
public ArchivoDTO editarArchivo(long archivoId, ArchivoDTO archivoDTO) throws Exception {
......@@ -321,6 +321,8 @@ public class ArchivosEJB {
}
public EvaluacionDTO evaluarArchivo(Long archivoId, EvaluacionDTO evaluacion) throws Exception {
throw new Exception ("Eliminado");
/*
Archivo archivo = em.find(Archivo.class, archivoId);
if (archivo == null) {
throw new Exception("No se encuentra el archivo con id: " + archivoId);
......@@ -343,6 +345,7 @@ public class ArchivosEJB {
archivo.setEvaluacion(eval);
archivo.setEstado(EstadoArchivo.Corregido);
return evaluacion;
*/
}
......
......@@ -18,8 +18,6 @@ import edu.proygrado.dto.MoodleCourseDTO;
import edu.proygrado.dto.UsuarioDTO;
import edu.proygrado.matefun.MatefunException;
import edu.proygrado.modelo.Archivo;
import edu.proygrado.modelo.Grupo;
import edu.proygrado.modelo.GrupoPK;
import edu.proygrado.utils.MoodleFunctions;
import edu.proygrado.utils.MoodleWS;
import edu.proygrado.utils.Utils;
......@@ -30,7 +28,9 @@ public class GruposEJB {
@PersistenceContext(unitName = "matefunDS")
private EntityManager em;
public void agregarArchivoGrupo(long archivoId, GrupoPK grupoPK) throws Exception {
public void agregarArchivoGrupo(long archivoId/*, GrupoPK grupoPK*/) throws Exception {
throw new MatefunException ("Eliminado");
/*
Grupo grupo = em.find(Grupo.class, grupoPK);
if (grupo == null) {
throw new Exception(
......@@ -40,9 +40,7 @@ public class GruposEJB {
if (archivo == null) {
throw new Exception("No existe el archivo" + archivoId);
}
if (!grupo.getArchivos().contains(archivo)) {
grupo.addArchivo(archivo);
}
*/
}
......
......@@ -234,6 +234,8 @@ public class InvitadoEJB {
}
public ArchivoDTO getCopiaCompartido(String token, String cedula, Long archivoId) throws Exception {
throw new Exception ("Eliminado");
/*
System.out.println("getCopiaCompartido"+token);
InvitadoSesion invitadoSesion = sesiones.getOrDefault(token, null);
if (invitadoSesion == null) {
......@@ -284,6 +286,7 @@ public class InvitadoEJB {
archivosCompartidos.add(copia);
alumno.setArchivosCompartidos(archivosCompartidos);
return new ArchivoDTO(copia);
*/
}
public ArchivoDTO editarArchivo(String token, long archivoId, ArchivoDTO archivoDTO) throws Exception {
......
......@@ -135,7 +135,7 @@ public class LoginEJB {
String tokenAuth = generateToken();
updateSession(tokenAuth, admin);
invitadoEJB.setUsuarioMatefunAdmin(tokenAuth, admin);
return new UsuarioDTO(-1l, tokenAuth, admin, new ArrayList<MoodleCourseDTO>());
return new UsuarioDTO(-1l, tokenAuth, null, admin, new ArrayList<MoodleCourseDTO>());
}else {
throw new MatefunException("Password incorrecto para administrador de Matefun.");
}
......@@ -155,7 +155,7 @@ public class LoginEJB {
Usuario usuarioMoodle = em.find(Usuario.class,cedula);
//chequeo si es el admin de matefun
if (usuarioMoodle!=null && usuarioMoodle instanceof Admin) {
return logMatefunAdminIn( usuarioMoodle, password);
return logMatefunAdminIn(usuarioMoodle, password);
}
Long liceo;
......@@ -201,13 +201,13 @@ public class LoginEJB {
if (usuariosRunnable.output==null)
throw new MatefunException("No se puede obtener informacion de usuarios desde moodle");
invitadoEJB.setUsuario(tokenAuth, usuarioAdminLiceo, moodleApiEndpoint, allMoodleTokens, liceo, coursesInfo, usuariosRunnable.output.get(0).getId());
return new UsuarioDTO(userInfo.getUserid(), tokenAuth, usuarioAdminLiceo, coursesInfo.getEnrolledcourses());
return new UsuarioDTO(userInfo.getUserid(), tokenAuth, liceoBD.getLiceoPK().getLiceoId(), usuarioAdminLiceo, coursesInfo.getEnrolledcourses());
}
Usuario usuarioRetornado = new Alumno(cedula, userInfo.getUserid(), userInfo.getFirstname(), userInfo.getLastname(), liceoBD , Configuracion.getConfiguracionDefault());
invitadoEJB.setUsuario(tokenAuth, usuarioRetornado, moodleApiEndpoint, allMoodleTokens, liceo, coursesInfo, usuariosRunnable.output.get(0).getId());
updateSession(tokenAuth, usuarioRetornado);
return new UsuarioDTO(userInfo.getUserid(), tokenAuth, usuarioRetornado, coursesInfo.getEnrolledcourses());
return new UsuarioDTO(userInfo.getUserid(), tokenAuth, liceoBD.getLiceoPK().getLiceoId(), usuarioRetornado, coursesInfo.getEnrolledcourses());
}
......@@ -288,9 +288,9 @@ public class LoginEJB {
usuarioRetornado=usuarioMoodle;
}
}
invitadoEJB.setUsuario(matefunToken, usuarioRetornado, invitadoEJB.getMoodleApiEndpoint(matefunToken), allTokens, usuario.getLiceo().getLiceoPK().getLiceoId(), coursesInfo, invitadoEJB.getMoodleWebServicesUserId(matefunToken));
return new UsuarioDTO(invitadoEJB.getUsuario(matefunToken).getMoodleUserId(), matefunToken, invitadoEJB.getUsuario(matefunToken), coursesInfo.getEnrolledcourses() );
return new UsuarioDTO(invitadoEJB.getUsuario(matefunToken).getMoodleUserId(), matefunToken, invitadoEJB.getUsuario(matefunToken).getLiceo().getLiceoPK().getLiceoId(), invitadoEJB.getUsuario(matefunToken), coursesInfo.getEnrolledcourses() );
}
......
package edu.proygrado.ejb;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.Callable;
import javax.annotation.Resource;
......@@ -9,8 +11,16 @@ import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.servlet.http.HttpServletRequest;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import edu.proygrado.modelo.Sesion;
import edu.proygrado.modelo.TiempoAcceso;
import edu.proygrado.modelo.TiempoAccesoPK;
import edu.proygrado.utils.Utils;
@Stateless
......@@ -25,14 +35,34 @@ public class TiemposAccesoEJB {
@Resource
private UserTransaction userTransaction;
private void performSave(Long liceoId, Long moodleUserId, String tipo, String nombreEndpoint, Long tiempoms) throws Exception {
userTransaction.begin();
String fecha = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDateTime.now());
TiempoAcceso ta = em.find(TiempoAcceso.class, new TiempoAccesoPK(liceoId, tipo, nombreEndpoint, fecha));
Double tiempoDbl = (double)tiempoms;
if (ta==null) {
em.persist(new TiempoAcceso(new TiempoAccesoPK(liceoId, tipo, nombreEndpoint, fecha), moodleUserId, tiempoDbl, tiempoDbl, tiempoDbl, 1l));
}else{
ta.setPromedio( (tiempoms + ta.getCantidadDatos()*ta.getPromedio())/(ta.getCantidadDatos()+1) );
ta.setCantidadDatos(ta.getCantidadDatos() + 1);
if (tiempoDbl > ta.getMax()) {
ta.setMax(tiempoDbl);
}
if (tiempoDbl < ta.getMin()) {
ta.setMin(tiempoDbl);
}
em.refresh(ta);
}
userTransaction.commit();
}
public void saveAccessTime(Long liceoId, Long moodleUserId, String tipo, String nombreEndpoint, Long tiempoms) {
new Thread(new Runnable() {
@Override
public void run() {
try {
userTransaction.begin();
em.persist(new TiempoAcceso(liceoId, moodleUserId, tipo, nombreEndpoint, tiempoms));
userTransaction.commit();
performSave(liceoId, moodleUserId, tipo, nombreEndpoint, tiempoms);
}catch(Exception e) {
e.printStackTrace();
}
......@@ -46,9 +76,7 @@ public class TiemposAccesoEJB {
public void run() {
try {
String matefunToken = Utils.getToken(httpServletRequest);
userTransaction.begin();
em.persist(new TiempoAcceso(invitadoEJB.getLiceoId(matefunToken), invitadoEJB.getMoodleUserId(matefunToken), tipo, nombreEndpoint, tiempoms));
userTransaction.commit();
performSave(invitadoEJB.getLiceoId(matefunToken), invitadoEJB.getMoodleUserId(matefunToken), tipo, nombreEndpoint, tiempoms);
}catch(Exception e) {
e.printStackTrace();
}
......@@ -61,9 +89,7 @@ public class TiemposAccesoEJB {
@Override
public void run() {
try {
userTransaction.begin();
em.persist(new TiempoAcceso(invitadoEJB.getLiceoId(matefunToken), invitadoEJB.getMoodleUserId(matefunToken), tipo, nombreEndpoint, tiempoms));
userTransaction.commit();
performSave(invitadoEJB.getLiceoId(matefunToken), invitadoEJB.getMoodleUserId(matefunToken), tipo, nombreEndpoint, tiempoms);
}catch(Exception e) {
e.printStackTrace();
}
......
......@@ -26,9 +26,6 @@ import edu.proygrado.modelo.Archivo;
import edu.proygrado.modelo.Configuracion;
import edu.proygrado.modelo.Docente;
import edu.proygrado.modelo.EstadoArchivo;
import edu.proygrado.modelo.Evaluacion;
import edu.proygrado.modelo.Grupo;
import edu.proygrado.modelo.GrupoPK;
import edu.proygrado.modelo.LiceoPK;
import edu.proygrado.modelo.Usuario;
import edu.proygrado.utils.MoodleFunctions;
......@@ -85,6 +82,8 @@ public class UsuarioEJB {
}
public BackupUsuarioDTO respaldarUsuario(String cedula) throws MatefunException{
throw new MatefunException ("Implementar");
/*
Usuario usuario = em.find(Usuario.class, cedula);
if(usuario == null){
throw new MatefunException("No existe el usuario con cedula "+cedula);
......@@ -97,9 +96,12 @@ public class UsuarioEJB {
}else{
return new BackupDocenteDTO((Docente) usuario);
}
*/
}
public String restaurarAlumno(BackupAlumnoDTO backupAlumnoDTO) throws MatefunException {
throw new MatefunException ("Implementar");
/*
Usuario usuario = em.find(Usuario.class, backupAlumnoDTO.getCedula());
if(usuario!=null){
throw new MatefunException("Ya existe el usuario de cedula "+backupAlumnoDTO.getCedula());
......@@ -206,9 +208,12 @@ public class UsuarioEJB {
}
em.persist(alumno);
return "Alumno ingresado. ";
*/
}
public String restaurarDocente(BackupDocenteDTO backupDocenteDTO) throws MatefunException {
throw new MatefunException ("Implementar");
/*
Usuario usuario = em.find(Usuario.class, backupDocenteDTO.getCedula());
if(usuario!=null){
throw new MatefunException("Ya existe el usuario de cedula "+backupDocenteDTO.getCedula());
......@@ -272,9 +277,12 @@ public class UsuarioEJB {
}
em.persist(docente);
return "Docente ingresado. ";
*/
}
public String eliminarUsuario(String cedula) throws MatefunException {
throw new MatefunException ("Implementar");
/*
Usuario usuario = em.find(Usuario.class, cedula);
if(usuario == null){
throw new MatefunException("No existe el usuario con cedula "+cedula);
......@@ -286,7 +294,6 @@ public class UsuarioEJB {
.getResultList();
for(Grupo grupo : grupos){
grupo.getAlumnos().remove(alumno);
grupo.getArchivos().removeAll(alumno.getArchivos());
}
System.out.println("Alumno");
for(Archivo archivo: alumno.getArchivos()){
......@@ -345,9 +352,6 @@ public class UsuarioEJB {
List<Grupo> grupos = em.createQuery("select g from Grupo g where exists (select a from g.archivos a where a.id=:id)",Grupo.class)
.setParameter("id", archivo.getId())
.getResultList();
for(Grupo g : grupos){
g.getArchivos().remove(archivo);
}
System.out.println("Archivo docente "+archivo.getId());
Evaluacion eval = archivo.getEvaluacion();
......@@ -387,6 +391,7 @@ public class UsuarioEJB {
}
return "Usuario y recursos eliminados";
*/
}
private static List<String> getSkippedUsers() {
......
......@@ -79,6 +79,8 @@ public class InvitadoSesion {
}
public long getMoodleUserId() {
if (coursesInfo==null)
return -1l;
return coursesInfo.getId();
}
......
......@@ -24,9 +24,6 @@ public class Alumno extends Usuario{
@OneToMany
@JoinTable(name = "ARCHIVOS_ALUMNO")
List<Archivo> archivos;
@OneToMany
@JoinTable(name = "ARCHIVOS_COMPARTIDOS_ALUMNO")
List<Archivo> archivosCompartidos;
public Alumno() {
}
......@@ -34,7 +31,6 @@ public class Alumno extends Usuario{
public Alumno(String cedula, Long moodleUserId, String nombre, String apellido, Liceo liceo, Configuracion configuracion) {
super(cedula, moodleUserId, nombre, apellido, liceo, configuracion);
this.archivos = new ArrayList<>();
this.archivosCompartidos = new ArrayList<>();
}
public List<Archivo> getArchivos() {
......@@ -49,18 +45,6 @@ public class Alumno extends Usuario{
this.archivos.add(archivo);
}
public List<Archivo> getArchivosCompartidos() {
return archivosCompartidos;
}
public void setArchivosCompartidos(List<Archivo> archivosCompartidos) {
this.archivosCompartidos = archivosCompartidos;
}
public void addArchivoCompartido(Archivo archivo){
this.archivosCompartidos.add(archivo);
}
@Override
public String getTipo() {
return "alumno";
......
......@@ -46,9 +46,6 @@ public class Archivo implements Serializable {
@ManyToOne
Archivo padre;
@OneToOne
Evaluacion evaluacion;
@ManyToOne
Usuario creador;
......@@ -149,14 +146,6 @@ public class Archivo implements Serializable {
this.directorio = directorio;
}
public Evaluacion getEvaluacion() {
return evaluacion;
}
public void setEvaluacion(Evaluacion evaluacion) {
this.evaluacion = evaluacion;
}
public Usuario getCreador() {
return creador;
}
......
......@@ -22,9 +22,6 @@ public class Docente extends Usuario {
*
*/
private static final long serialVersionUID = 1L;
@ManyToMany
@JoinTable(name="DOCENTES_GRUPO")
List<Grupo> gruposAsignados;
@OneToMany
@JoinTable(name = "ARCHIVOS_DOCENTE")
List<Archivo> archivos;
......@@ -34,22 +31,8 @@ public class Docente extends Usuario {
public Docente(String cedula, Long moodleUserId, String nombre, String apellido, String roleId, String courseId, Liceo liceo, Configuracion configuracion) {
super(cedula, moodleUserId, nombre, apellido, liceo, configuracion);
this.gruposAsignados = new ArrayList<>();
this.archivos = new ArrayList<>();
}
public List<Grupo> getGruposAsignados() {
return gruposAsignados;
}
public void setGruposAsignados(List<Grupo> gruposAsignados) {
this.gruposAsignados = gruposAsignados;
}
public void addGrupoAsignado(Grupo grupo){
this.gruposAsignados.add(grupo);
}
public List<Archivo> getArchivos() {
return archivos;
}
......
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package edu.proygrado.modelo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
/**
*
* @author gonzalo
*/
@Entity
public class Evaluacion implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
long evaluacionId;
@ManyToOne
private Docente docente;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date fecha;
private String nota;
private String descripcion;
public long getEvaluacionId() {
return evaluacionId;
}
public void setEvaluacionId(long evaluacionId) {
this.evaluacionId = evaluacionId;
}
public Docente getDocente() {
return docente;
}
public void setDocente(Docente docente) {
this.docente = docente;
}
public String getNota() {
return nota;
}
public void setNota(String nota) {
this.nota = nota;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public Date getFecha() {
return fecha;
}
public void setFecha(Date fecha) {
this.fecha = fecha;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package edu.proygrado.modelo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
/**
*
* @author gonzalo
*/
@Entity
public class Grupete implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@EmbeddedId
private GrupetePK grupetePK;
@ManyToMany
@JoinTable(name="ARCHIVOS_COMPARTIDOS_GRUPO")
private List<Archivo> archivos;
@ManyToMany
@JoinTable(name="ALUMNOS_GRUPO")
private List<Alumno> alumnos;
public Grupete() {
super();
}
public Grupete(GrupetePK grupoPK) {
super();
this.grupetePK = grupoPK;
this.archivos = new ArrayList<>();
this.alumnos = new ArrayList<>();
}
public GrupetePK getGrupoPK() {
return grupetePK;
}
public void setGrupoPK(GrupetePK grupetePK) {
this.grupetePK = grupetePK;
}
public List<Archivo> getArchivos() {
return archivos;
}
public void setArchivos(List<Archivo> archivos) {
this.archivos = archivos;
}
public void addArchivo(Archivo archivo){
this.archivos.add(archivo);
}
public List<Alumno> getAlumnos() {
return alumnos;
}
public void setAlumnos(List<Alumno> alumnos) {
this.alumnos = alumnos;
}
public void addAlumno(Alumno alumno){
this.alumnos.add(alumno);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((grupetePK == null) ? 0 : grupetePK.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Grupete other = (Grupete) obj;
if (grupetePK == null) {
if (other.grupetePK != null)
return false;
} else if (!grupetePK.equals(other.grupetePK))
return false;
return true;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package edu.proygrado.modelo;
import java.io.Serializable;
import javax.persistence.Embeddable;
/**
*
* @author gonzalo
*/
@Embeddable
public class GrupetePK implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int anio;
private int grado;
private String grupo;
private LiceoPK liceo;
public GrupetePK() {
super();
}
public GrupetePK(int anio, int grado, String grupo, LiceoPK liceo) {
super();
this.anio = anio;
this.grado = grado;
this.grupo = grupo;
this.liceo = liceo;
}
public int getAnio() {
return anio;
}
public void setAnio(int anio) {
this.anio = anio;
}
public int getGrado() {
return grado;
}
public void setGrado(int grado) {
this.grado = grado;
}
public String getGrupo() {
return grupo;
}
public void setGrupo(String grupo) {