Merge pull request #105 from Quantum-P3/feature/US-65

add filtrar por rol y estado
This commit is contained in:
Eduardo Quiros 2021-08-01 22:20:37 +00:00 committed by GitHub
commit 3e2b7fe2d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 187 additions and 81 deletions

View File

@ -11,7 +11,7 @@
<button type="button" class="ds-btn ds-btn--secondary" (click)="previousState()">
<fa-icon icon="arrow-left"></fa-icon>&nbsp;&nbsp;<span jhiTranslate="entity.action.back">Back</span>
</button>
<ng-container *ngIf="encuesta!.estado === 'DRAFT'">
<ng-container *ngIf="encuesta!.estado === 'DRAFT' && (isAutor() || isEscritor())">
<button type="button" class="ds-btn ds-btn--primary" (click)="publishSurvey()">Publicar encuesta</button>
</ng-container>
</div>

View File

@ -14,7 +14,7 @@ import { IEncuesta, Encuesta } from '../encuesta.model';
import { EncuestaService } from '../service/encuesta.service';
import { ICategoria } from 'app/entities/categoria/categoria.model';
import { CategoriaService } from 'app/entities/categoria/service/categoria.service';
import { IUsuarioExtra } from 'app/entities/usuario-extra/usuario-extra.model';
import { IUsuarioExtra, UsuarioExtra } from 'app/entities/usuario-extra/usuario-extra.model';
import { UsuarioExtraService } from 'app/entities/usuario-extra/service/usuario-extra.service';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
@ -30,6 +30,10 @@ import { PreguntaCerradaTipo } from 'app/entities/enumerations/pregunta-cerrada-
import { faTimes, faPlus, faStar, faQuestion } from '@fortawesome/free-solid-svg-icons';
import { EncuestaPublishDialogComponent } from '../encuesta-publish-dialog/encuesta-publish-dialog.component';
import { UsuarioEncuestaService } from 'app/entities/usuario-encuesta/service/usuario-encuesta.service';
import { Account } from '../../../core/auth/account.model';
import { AccountService } from 'app/core/auth/account.service';
import { IUsuarioEncuesta } from '../../usuario-encuesta/usuario-encuesta.model';
@Component({
selector: 'jhi-encuesta-detail',
@ -47,6 +51,8 @@ export class EncuestaDetailComponent implements OnInit {
successPublished = false;
ePreguntas?: any[];
ePreguntasOpciones?: any[];
usuarioExtra: UsuarioExtra | null = null;
usuariosColaboradores: IUsuarioEncuesta[] = [];
constructor(
protected activatedRoute: ActivatedRoute,
@ -57,7 +63,9 @@ export class EncuestaDetailComponent implements OnInit {
protected modalService: NgbModal,
protected ePreguntaCerradaService: EPreguntaCerradaService,
protected ePreguntaCerradaOpcionService: EPreguntaCerradaOpcionService,
protected ePreguntaAbiertaService: EPreguntaAbiertaService
protected ePreguntaAbiertaService: EPreguntaAbiertaService,
protected accountService: AccountService,
protected usuarioEncuestaService: UsuarioEncuestaService
) {}
ngOnInit(): void {
@ -69,6 +77,15 @@ export class EncuestaDetailComponent implements OnInit {
this.previousState();
}
});
// Get jhi_user and usuario_extra information
this.accountService.getAuthenticationState().subscribe(account => {
if (account !== null) {
this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => {
this.usuarioExtra = usuarioExtra.body;
});
}
});
}
ngAfterViewChecked(): void {
@ -145,6 +162,16 @@ export class EncuestaDetailComponent implements OnInit {
this.isLoading = false;
}
);*/
this.usuarioEncuestaService.findCollaborators(this.encuesta?.id!).subscribe(
(res: any) => {
this.isLoading = false;
this.usuariosColaboradores = res.body ?? [];
},
() => {
this.isLoading = false;
}
);
}
publishSurvey(): void {
const modalRef = this.modalService.open(EncuestaPublishDialogComponent, { size: 'lg', backdrop: 'static' });
@ -161,4 +188,20 @@ export class EncuestaDetailComponent implements OnInit {
previousState(): void {
window.history.back();
}
isAutor() {
return this.usuarioExtra?.id === this.encuesta?.usuarioExtra?.id;
}
isEscritor() {
let escritor = false;
this.usuariosColaboradores.forEach(c => {
if (this.usuarioExtra?.id === c.usuarioExtra?.id) {
if (c.rol === 'WRITE') {
escritor = true;
}
}
});
return escritor;
}
}

View File

@ -16,7 +16,7 @@
<div class="col-12 ds-list-collabs">
<div class="row" style="flex-direction: row-reverse">
<div class="col-mb-2 iconos-colab">
<div class="add-collab">
<div class="add-collab" *ngIf="isAutor()">
<fa-icon icon="sync" [icon]="faPlus"></fa-icon>
</div>
</div>
@ -61,7 +61,7 @@
[disabled]="isLoading"
data-toggle="modal"
data-target="#crearPregunta"
*ngIf="encuesta!.estado !== 'FINISHED'"
*ngIf="encuesta!.estado !== 'FINISHED' && (isAutor() || isEscritor())"
>
<fa-icon icon="sync" [icon]="faPlus"></fa-icon>&nbsp;&nbsp;<span>Crear pregunta</span>
</button>
@ -112,7 +112,7 @@
>
</span>
<fa-icon
*ngIf="encuesta!.estado === 'DRAFT'"
*ngIf="encuesta!.estado === 'DRAFT' && (isAutor() || isEscritor())"
class="ds-survey--titulo--icon"
[icon]="faTimes"
(click)="deleteQuestion($event)"
@ -144,7 +144,7 @@
<!-- <input class="ds-survey--checkbox" id="{{ ePregunta.id }}-{{ ePreguntaOpcionFinal.id }}" type="checkbox" disabled /> -->
<label for="{{ ePregunta.id }}-{{ ePreguntaOpcionFinal.id }}">{{ ePreguntaOpcionFinal.nombre }}</label>
<fa-icon
*ngIf="encuesta!.estado === 'DRAFT'"
*ngIf="encuesta!.estado === 'DRAFT' && (isAutor() || isEscritor())"
class="ds-survey--titulo--icon ds-survey--titulo--icon--small"
[icon]="faTimes"
(click)="deleteOption($event)"
@ -160,6 +160,7 @@
data-toggle="modal"
data-target="#crearOpcion"
[attr.data-id]="ePregunta.id"
*ngIf="isAutor() || isEscritor()"
>
<fa-icon
class="ds-survey--add-option--icon"

View File

@ -35,7 +35,7 @@ import { IParametroAplicacion } from './../../parametro-aplicacion/parametro-apl
import { Router } from '@angular/router';
import { UsuarioEncuestaService } from 'app/entities/usuario-encuesta/service/usuario-encuesta.service';
import { IUsuarioEncuesta } from '../../usuario-encuesta/usuario-encuesta.model';
import { IUsuarioEncuesta, UsuarioEncuesta } from '../../usuario-encuesta/usuario-encuesta.model';
import { RolColaborador } from '../../enumerations/rol-colaborador.model';
import { Account } from '../../../core/auth/account.model';
import { AccountService } from 'app/core/auth/account.service';
@ -684,7 +684,19 @@ export class EncuestaUpdateComponent implements OnInit, AfterViewChecked {
}
isAutor() {
return this.usuarioExtra?.id == this.encuesta?.usuarioExtra?.id;
return this.usuarioExtra?.id === this.encuesta?.usuarioExtra?.id;
}
isEscritor() {
let escritor = false;
this.usuariosColaboradores.forEach(c => {
if (this.usuarioExtra?.id === c.usuarioExtra?.id) {
if (c.rol === 'WRITE') {
escritor = true;
}
}
});
return escritor;
}
finalizar(): void {

View File

@ -42,7 +42,7 @@ import { RouterModule } from '@angular/router';
import('./e-pregunta-cerrada-opcion/e-pregunta-cerrada-opcion.module').then(m => m.EPreguntaCerradaOpcionModule),
},
{
path: 'usuario-encuesta',
path: 'colaboraciones',
data: { pageTitle: 'dataSurveyApp.usuarioEncuesta.home.title' },
loadChildren: () => import('./usuario-encuesta/usuario-encuesta.module').then(m => m.UsuarioEncuestaModule),
},

View File

@ -1,16 +1,10 @@
<form *ngIf="usuarioEncuesta" name="deleteForm" (ngSubmit)="confirmDelete(usuarioEncuesta.id!)">
<div class="modal-header">
<h4 class="modal-title" data-cy="usuarioEncuestaDeleteDialogHeading" jhiTranslate="entity.delete.title">Confirm delete operation</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true" (click)="cancel()">&times;</button>
</div>
<form class="ds-form" *ngIf="usuarioEncuesta" name="deleteForm" (ngSubmit)="confirmDelete(usuarioEncuesta.id!)">
<div class="modal-body">
<jhi-alert-error></jhi-alert-error>
<p class="ds-title--small">Salir de colaboración</p>
<p
class="ds-subtitle"
id="jhi-delete-usuarioEncuesta-heading"
jhiTranslate="dataSurveyApp.usuarioEncuesta.delete.question"
jhiTranslate="dataSurveyApp.usuarioEncuesta.delete.questionGetOut"
[translateValues]="{ id: usuarioEncuesta.id }"
>
Are you sure you want to delete this Usuario Encuesta?
@ -18,12 +12,12 @@
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" (click)="cancel()">
<fa-icon icon="ban"></fa-icon>&nbsp;<span jhiTranslate="entity.action.cancel">Cancel</span>
<button type="button" class="ds-btn ds-btn--secondary" data-dismiss="modal" (click)="cancel()">
<fa-icon icon="arrow-left"></fa-icon>&nbsp;<span jhiTranslate="entity.action.cancel">Cancel</span>
</button>
<button id="jhi-confirm-delete-usuarioEncuesta" data-cy="entityConfirmDeleteButton" type="submit" class="btn btn-danger">
<fa-icon icon="times"></fa-icon>&nbsp;<span jhiTranslate="entity.action.delete">Delete</span>
<fa-icon icon="sign-out-alt"></fa-icon>&nbsp;<span jhiTranslate="dataSurveyApp.usuarioEncuesta.delete.getOut">Get Out</span>
</button>
</div>
</form>

View File

@ -1,29 +1,38 @@
<div>
<h2 id="page-heading" data-cy="UsuarioEncuestaHeading">
<span jhiTranslate="dataSurveyApp.usuarioEncuesta.home.title">Usuario Encuestas</span>
<span class="ds-title" jhiTranslate="dataSurveyApp.usuarioEncuesta.home.title">Colaboraciones </span>
<p class="ds-subtitle">Gestione las colaboraciones en encuestas a las que se encuentra agregado</p>
<div class="d-flex justify-content-end">
<button class="btn btn-info mr-2" (click)="loadAll()" [disabled]="isLoading">
<button class="ds-btn ds-btn--secondary mr-2" (click)="loadAll()" [disabled]="isLoading">
<fa-icon icon="sync" [spin]="isLoading"></fa-icon>
<span jhiTranslate="dataSurveyApp.usuarioEncuesta.home.refreshListLabel">Refresh List</span>
</button>
<button
id="jh-create-entity"
data-cy="entityCreateButton"
class="btn btn-primary jh-create-entity create-usuario-encuesta"
[routerLink]="['/usuario-encuesta/new']"
>
<fa-icon icon="plus"></fa-icon>
<span jhiTranslate="dataSurveyApp.usuarioEncuesta.home.createLabel"> Create a new Usuario Encuesta </span>
</button>
</div>
</h2>
<jhi-alert-error></jhi-alert-error>
<jhi-alert></jhi-alert>
<form class="ds-form">
<div class="input-group">
<div class="ds-filter">
<div class="input-group-addon"><i class="glyphicon glyphicon-search"></i></div>
<select name="searchRol" id="searchRol" [(ngModel)]="searchRol" style="width: 200px">
<option value="" selected="selected" disabled="disabled">Filtrar por rol</option>
<option value="">Todos los roles</option>
<option value="Read">Lector</option>
<option value="Write">Escritor</option>
</select>
<select name="searchRol" id="searchEstado" [(ngModel)]="searchEstado" style="width: 200px">
<option value="" selected="selected" disabled="disabled">Filtrar por estado</option>
<option value="">Todos los estados</option>
<option value="ACTIVE">Activos</option>
<option value="PENDING">Pendientes</option>
</select>
</div>
</div>
</form>
<div class="alert alert-warning" id="no-result" *ngIf="usuarioEncuestas?.length === 0">
<span jhiTranslate="dataSurveyApp.usuarioEncuesta.home.notFound">No usuarioEncuestas found</span>
</div>
@ -32,58 +41,39 @@
<table class="table table-striped" aria-describedby="page-heading">
<thead>
<tr>
<th scope="col"><span jhiTranslate="global.field.id">ID</span></th>
<th scope="col"><span jhiTranslate="dataSurveyApp.usuarioEncuesta.rol">Rol</span></th>
<th scope="col"><span jhiTranslate="dataSurveyApp.usuarioEncuesta.estado">Estado</span></th>
<th scope="col"><span jhiTranslate="dataSurveyApp.usuarioEncuesta.fechaAgregado">Fecha Agregado</span></th>
<th scope="col"><span jhiTranslate="dataSurveyApp.usuarioEncuesta.usuarioExtra">Usuario Extra</span></th>
<th scope="col"><span jhiTranslate="dataSurveyApp.usuarioEncuesta.encuesta">Encuesta</span></th>
<th scope="col"><span>Encuesta</span></th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
<tr *ngFor="let usuarioEncuesta of usuarioEncuestas; trackBy: trackId" data-cy="entityTable">
<td>
<a [routerLink]="['/usuario-encuesta', usuarioEncuesta.id, 'view']">{{ usuarioEncuesta.id }}</a>
</td>
<tr
*ngFor="let usuarioEncuesta of usuarioEncuestas | filter: 'rol':searchRol | filter: 'estado':searchEstado; trackBy: trackId"
data-cy="entityTable"
>
<td jhiTranslate="{{ 'dataSurveyApp.RolColaborador.' + usuarioEncuesta.rol }}">{{ usuarioEncuesta.rol }}</td>
<td jhiTranslate="{{ 'dataSurveyApp.EstadoColaborador.' + usuarioEncuesta.estado }}">{{ usuarioEncuesta.estado }}</td>
<td>{{ usuarioEncuesta.fechaAgregado | formatMediumDatetime }}</td>
<td>
<div *ngIf="usuarioEncuesta.usuarioExtra">
<a [routerLink]="['/usuario-extra', usuarioEncuesta.usuarioExtra?.id, 'view']">{{ usuarioEncuesta.usuarioExtra?.id }}</a>
</div>
</td>
<td>{{ usuarioEncuesta.fechaAgregado | formatShortDatetime | titlecase }}</td>
<td>
<div *ngIf="usuarioEncuesta.encuesta">
<a [routerLink]="['/encuesta', usuarioEncuesta.encuesta?.id, 'view']">{{ usuarioEncuesta.encuesta?.id }}</a>
<a>{{ usuarioEncuesta.encuesta?.nombre }} (#{{ usuarioEncuesta.encuesta?.id }})</a>
</div>
</td>
<td class="text-right">
<div class="btn-group">
<div class="btn-group" *ngIf="usuarioEncuesta.encuesta">
<button
type="submit"
[routerLink]="['/usuario-encuesta', usuarioEncuesta.id, 'view']"
class="btn btn-info btn-sm"
data-cy="entityDetailsButton"
type="button"
[routerLink]="['/encuesta', usuarioEncuesta.encuesta.id, 'edit']"
class="ds-btn ds-btn--primary"
[disabled]="isLoading"
>
<fa-icon icon="eye"></fa-icon>
<span class="d-none d-md-inline" jhiTranslate="entity.action.view">View</span>
<span>Editar encuesta</span>
</button>
<button
type="submit"
[routerLink]="['/usuario-encuesta', usuarioEncuesta.id, 'edit']"
class="btn btn-primary btn-sm"
data-cy="entityEditButton"
>
<fa-icon icon="pencil-alt"></fa-icon>
<span class="d-none d-md-inline" jhiTranslate="entity.action.edit">Edit</span>
</button>
<button type="submit" (click)="delete(usuarioEncuesta)" class="btn btn-danger btn-sm" data-cy="entityDeleteButton">
<fa-icon icon="times"></fa-icon>
<span class="d-none d-md-inline" jhiTranslate="entity.action.delete">Delete</span>
<button type="submit" (click)="delete(usuarioEncuesta)" class="ds-btn ds-btn--danger btn-sm" data-cy="entityDeleteButton">
<fa-icon icon="sign-out-alt"></fa-icon>
<span class="d-none d-md-inline" jhiTranslate="dataSurveyApp.usuarioEncuesta.delete.getOut">Get Out</span>
</button>
</div>
</td>

View File

@ -5,16 +5,43 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { IUsuarioEncuesta } from '../usuario-encuesta.model';
import { UsuarioEncuestaService } from '../service/usuario-encuesta.service';
import { UsuarioEncuestaDeleteDialogComponent } from '../delete/usuario-encuesta-delete-dialog.component';
import * as dayjs from 'dayjs';
import { faPollH, faPencilAlt } from '@fortawesome/free-solid-svg-icons';
import { AccountService } from 'app/core/auth/account.service';
import { Account } from 'app/core/auth/account.model';
import { IUsuarioExtra, UsuarioExtra } from 'app/entities/usuario-extra/usuario-extra.model';
import { IUser } from '../../user/user.model';
import { UsuarioExtraService } from 'app/entities/usuario-extra/service/usuario-extra.service';
import { ActivatedRoute, Router } from '@angular/router';
@Component({
selector: 'jhi-usuario-encuesta',
templateUrl: './usuario-encuesta.component.html',
})
export class UsuarioEncuestaComponent implements OnInit {
faPollH = faPollH;
faPencilAlt = faPencilAlt;
usuarioEncuestas?: IUsuarioEncuesta[];
isLoading = false;
usuarioExtra: IUsuarioExtra | null = null;
user: IUser | null = null;
constructor(protected usuarioEncuestaService: UsuarioEncuestaService, protected modalService: NgbModal) {}
public searchRol: string;
public searchEstado: string;
constructor(
protected usuarioEncuestaService: UsuarioEncuestaService,
protected modalService: NgbModal,
protected usuarioExtraService: UsuarioExtraService,
protected activatedRoute: ActivatedRoute,
protected accountService: AccountService,
protected router: Router
) {
this.searchRol = '';
this.searchEstado = '';
}
loadAll(): void {
this.isLoading = true;
@ -22,7 +49,10 @@ export class UsuarioEncuestaComponent implements OnInit {
this.usuarioEncuestaService.query().subscribe(
(res: HttpResponse<IUsuarioEncuesta[]>) => {
this.isLoading = false;
this.usuarioEncuestas = res.body ?? [];
const tempUsuarioEncuestas = res.body ?? [];
this.usuarioEncuestas = tempUsuarioEncuestas
.filter(c => c.usuarioExtra?.id === this.usuarioExtra?.id)
.filter(c => c.encuesta?.estado !== 'DELETED');
},
() => {
this.isLoading = false;
@ -31,7 +61,22 @@ export class UsuarioEncuestaComponent implements OnInit {
}
ngOnInit(): void {
this.loadAll();
this.searchRol = '';
this.searchEstado = '';
this.accountService.getAuthenticationState().subscribe(account => {
if (account !== null) {
this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => {
this.usuarioExtra = usuarioExtra.body;
this.loadAll();
if (this.usuarioExtra !== null) {
if (this.usuarioExtra.id === undefined) {
const today = dayjs().startOf('day');
this.usuarioExtra.fechaNacimiento = today;
}
}
});
}
});
}
trackId(index: number, item: IUsuarioEncuesta): number {

View File

@ -6,6 +6,9 @@ import { UsuarioEncuestaComponent } from '../list/usuario-encuesta.component';
import { UsuarioEncuestaDetailComponent } from '../detail/usuario-encuesta-detail.component';
import { UsuarioEncuestaUpdateComponent } from '../update/usuario-encuesta-update.component';
import { UsuarioEncuestaRoutingResolveService } from './usuario-encuesta-routing-resolve.service';
import { EncuestaDetailComponent } from '../../encuesta/detail/encuesta-detail.component';
import { EncuestaUpdateComponent } from '../../encuesta/update/encuesta-update.component';
import { EncuestaRoutingResolveService } from '../../encuesta/route/encuesta-routing-resolve.service';
const usuarioEncuestaRoute: Routes = [
{
@ -37,6 +40,22 @@ const usuarioEncuestaRoute: Routes = [
},
canActivate: [UserRouteAccessService],
},
{
path: '/encuesta/:id/preview',
component: EncuestaDetailComponent,
resolve: {
usuarioEncuesta: EncuestaRoutingResolveService,
},
canActivate: [UserRouteAccessService],
},
{
path: '/encuesta/:id/edit',
component: EncuestaUpdateComponent,
resolve: {
usuarioEncuesta: EncuestaRoutingResolveService,
},
canActivate: [UserRouteAccessService],
},
];
@NgModule({

View File

@ -76,10 +76,10 @@ export const USER_ROUTES: RouteInfo[] = [
// type: 'link',
// icontype: 'nc-icon nc-album-2',
// },
// {
// path: '/colaboraciones',
// title: 'Colaboraciones',
// type: 'link',
// icontype: 'nc-icon nc-world-2',
// },
{
path: '/colaboraciones',
title: 'Colaboraciones',
type: 'link',
icontype: 'nc-icon nc-world-2',
},
];

View File

@ -13,7 +13,9 @@
"deleted": "Un Colaborador ha sido expulsado de la encuesta",
"delete": {
"question": "¿Seguro que quiere expulsar al colaborador de la encuesta?",
"action": "Expulsar"
"action": "Expulsar",
"questionGetOut": "¿Seguro que quiere salirse de la colaboracion de encuesta?",
"getOut": "Salir"
},
"detail": {
"title": "Colaborador"