Merge pull request #39 from Quantum-P3/feature/US-16

agregar borrado logico de categorias
This commit is contained in:
Eduardo Quiros 2021-07-17 05:40:55 +00:00 committed by GitHub
commit 01066239c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 50 additions and 183 deletions

View File

@ -1,7 +1,8 @@
package org.datasurvey.repository;
import org.datasurvey.domain.Categoria;
import org.springframework.data.jpa.repository.*;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
/**

View File

@ -1,14 +1,13 @@
import { NgModule } from '@angular/core';
import { SharedModule } from 'app/shared/shared.module';
import { CategoriaComponent } from './list/categoria.component';
import { CategoriaDetailComponent } from './detail/categoria-detail.component';
import { CategoriaUpdateComponent } from './update/categoria-update.component';
import { CategoriaDeleteDialogComponent } from './delete/categoria-delete-dialog.component';
import { CategoriaRoutingModule } from './route/categoria-routing.module';
@NgModule({
imports: [SharedModule, CategoriaRoutingModule],
declarations: [CategoriaComponent, CategoriaDetailComponent, CategoriaUpdateComponent, CategoriaDeleteDialogComponent],
declarations: [CategoriaComponent, CategoriaUpdateComponent, CategoriaDeleteDialogComponent],
entryComponents: [CategoriaDeleteDialogComponent],
})
export class CategoriaModule {}

View File

@ -1,4 +1,4 @@
<form class="ds-form" *ngIf="categoria" name="deleteForm" (ngSubmit)="confirmDelete(categoria.id!)">
<form class="ds-form" *ngIf="categoria" name="deleteForm" (ngSubmit)="confirmDelete(categoria!)">
<div class="modal-header">
<h4 class="modal-title" data-cy="categoriaDeleteDialogHeading" jhiTranslate="entity.delete.title">Confirm delete operation</h4>
@ -9,7 +9,7 @@
<jhi-alert-error></jhi-alert-error>
<p id="jhi-delete-categoria-heading" jhiTranslate="dataSurveyApp.categoria.delete.question" [translateValues]="{ id: categoria.id }">
Are you sure you want to delete this Categoria?
Are you sure you want to delete this category?
</p>
</div>

View File

@ -1,65 +0,0 @@
jest.mock('@ng-bootstrap/ng-bootstrap');
import { ComponentFixture, TestBed, inject, fakeAsync, tick } from '@angular/core/testing';
import { HttpResponse } from '@angular/common/http';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { of } from 'rxjs';
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { CategoriaService } from '../service/categoria.service';
import { CategoriaDeleteDialogComponent } from './categoria-delete-dialog.component';
describe('Component Tests', () => {
describe('Categoria Management Delete Component', () => {
let comp: CategoriaDeleteDialogComponent;
let fixture: ComponentFixture<CategoriaDeleteDialogComponent>;
let service: CategoriaService;
let mockActiveModal: NgbActiveModal;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
declarations: [CategoriaDeleteDialogComponent],
providers: [NgbActiveModal],
})
.overrideTemplate(CategoriaDeleteDialogComponent, '')
.compileComponents();
fixture = TestBed.createComponent(CategoriaDeleteDialogComponent);
comp = fixture.componentInstance;
service = TestBed.inject(CategoriaService);
mockActiveModal = TestBed.inject(NgbActiveModal);
});
describe('confirmDelete', () => {
it('Should call delete service on confirmDelete', inject(
[],
fakeAsync(() => {
// GIVEN
jest.spyOn(service, 'delete').mockReturnValue(of(new HttpResponse({})));
// WHEN
comp.confirmDelete(123);
tick();
// THEN
expect(service.delete).toHaveBeenCalledWith(123);
expect(mockActiveModal.close).toHaveBeenCalledWith('deleted');
})
));
it('Should not call delete service on clear', () => {
// GIVEN
jest.spyOn(service, 'delete');
// WHEN
comp.cancel();
// THEN
expect(service.delete).not.toHaveBeenCalled();
expect(mockActiveModal.close).not.toHaveBeenCalled();
expect(mockActiveModal.dismiss).toHaveBeenCalled();
});
});
});
});

View File

@ -1,7 +1,10 @@
import { Component } from '@angular/core';
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
import { IEncuesta } from 'app/entities/encuesta/encuesta.model';
import { EncuestaService } from 'app/entities/encuesta/service/encuesta.service';
import { EstadoCategoria } from 'app/entities/enumerations/estado-categoria.model';
import { ICategoria } from '../categoria.model';
import { Categoria, ICategoria } from '../categoria.model';
import { CategoriaService } from '../service/categoria.service';
@Component({
@ -9,16 +12,52 @@ import { CategoriaService } from '../service/categoria.service';
})
export class CategoriaDeleteDialogComponent {
categoria?: ICategoria;
encuestas?: IEncuesta[];
encuestasFiltradas?: IEncuesta[];
constructor(protected categoriaService: CategoriaService, protected activeModal: NgbActiveModal) {}
constructor(
protected categoriaService: CategoriaService,
protected activeModal: NgbActiveModal,
protected encuestaService: EncuestaService
) {}
cancel(): void {
this.activeModal.dismiss();
}
confirmDelete(id: number): void {
this.categoriaService.delete(id).subscribe(() => {
confirmDelete(categoria: ICategoria): void {
this.ensureNulaExists();
const categoriaNula = new Categoria(0, 'Otra', EstadoCategoria.ACTIVE);
this.getEncuestas(categoria);
if (this.encuestas) {
this.encuestas!.forEach(encuesta => {
encuesta.categoria = categoriaNula;
this.encuestaService.update(encuesta);
});
}
categoria.estado = EstadoCategoria.INACTIVE;
this.categoriaService.update(categoria).subscribe(() => {
this.activeModal.close('deleted');
});
}
ensureNulaExists(): void {
const categoriaNula = new Categoria(0, 'Otra', EstadoCategoria.ACTIVE);
const categoria = this.categoriaService.find(0);
if (categoria) {
this.categoriaService.update(categoriaNula);
} else {
this.categoriaService.create(categoriaNula);
}
}
protected getEncuestas(categoria: ICategoria): void {
this.encuestaService.query().subscribe(res => {
this.encuestas = res.body ?? [];
});
if (this.encuestas) {
this.encuestasFiltradas = this.encuestas.filter(encuesta => {
encuesta.categoria!.id === categoria.id;
});
}
}
}

View File

@ -1,36 +0,0 @@
<div class="row justify-content-center">
<div class="col-8">
<div *ngIf="categoria">
<h2 data-cy="categoriaDetailsHeading"><span jhiTranslate="dataSurveyApp.categoria.detail.title">Categoria</span></h2>
<hr />
<jhi-alert-error></jhi-alert-error>
<jhi-alert></jhi-alert>
<dl class="row-md jh-entity-details">
<dt><span jhiTranslate="global.field.id">ID</span></dt>
<dd>
<span>{{ categoria.id }}</span>
</dd>
<dt><span jhiTranslate="dataSurveyApp.categoria.nombre">Nombre</span></dt>
<dd>
<span>{{ categoria.nombre }}</span>
</dd>
<dt><span jhiTranslate="dataSurveyApp.categoria.estado">Estado</span></dt>
<dd>
<span jhiTranslate="{{ 'dataSurveyApp.EstadoCategoria.' + categoria.estado }}">{{ categoria.estado }}</span>
</dd>
</dl>
<button type="submit" (click)="previousState()" class="btn btn-ds btn-info" data-cy="entityDetailsBackButton">
<fa-icon icon="arrow-left"></fa-icon>&nbsp;<span jhiTranslate="entity.action.back">Back</span>
</button>
<button type="button" [routerLink]="['/categoria', categoria.id, 'edit']" class="btn btn-ds btn-ds-primary btn-primary">
<fa-icon icon="pencil-alt"></fa-icon>&nbsp;<span jhiTranslate="entity.action.edit">Edit</span>
</button>
</div>
</div>
</div>

View File

@ -1,38 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ActivatedRoute } from '@angular/router';
import { of } from 'rxjs';
import { CategoriaDetailComponent } from './categoria-detail.component';
describe('Component Tests', () => {
describe('Categoria Management Detail Component', () => {
let comp: CategoriaDetailComponent;
let fixture: ComponentFixture<CategoriaDetailComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [CategoriaDetailComponent],
providers: [
{
provide: ActivatedRoute,
useValue: { data: of({ categoria: { id: 123 } }) },
},
],
})
.overrideTemplate(CategoriaDetailComponent, '')
.compileComponents();
fixture = TestBed.createComponent(CategoriaDetailComponent);
comp = fixture.componentInstance;
});
describe('OnInit', () => {
it('Should load categoria on init', () => {
// WHEN
comp.ngOnInit();
// THEN
expect(comp.categoria).toEqual(expect.objectContaining({ id: 123 }));
});
});
});
});

View File

@ -1,24 +0,0 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { ICategoria } from '../categoria.model';
@Component({
selector: 'jhi-categoria-detail',
templateUrl: './categoria-detail.component.html',
})
export class CategoriaDetailComponent implements OnInit {
categoria: ICategoria | null = null;
constructor(protected activatedRoute: ActivatedRoute) {}
ngOnInit(): void {
this.activatedRoute.data.subscribe(({ categoria }) => {
this.categoria = categoria;
});
}
previousState(): void {
window.history.back();
}
}

View File

@ -38,7 +38,7 @@ export class CategoriaComponent implements OnInit {
this.loadAll();
}
trackId(index: number, item: ICategoria): number {
trackId(_index: number, item: ICategoria): number {
return item.id!;
}

View File

@ -3,7 +3,6 @@ import { RouterModule, Routes } from '@angular/router';
import { UserRouteAccessService } from 'app/core/auth/user-route-access.service';
import { CategoriaComponent } from '../list/categoria.component';
import { CategoriaDetailComponent } from '../detail/categoria-detail.component';
import { CategoriaUpdateComponent } from '../update/categoria-update.component';
import { CategoriaRoutingResolveService } from './categoria-routing-resolve.service';
@ -13,14 +12,6 @@ const categoriaRoute: Routes = [
component: CategoriaComponent,
canActivate: [UserRouteAccessService],
},
{
path: ':id/view',
component: CategoriaDetailComponent,
resolve: {
categoria: CategoriaRoutingResolveService,
},
canActivate: [UserRouteAccessService],
},
{
path: 'new',
component: CategoriaUpdateComponent,

View File

@ -64,7 +64,7 @@ export class CategoriaUpdateComponent implements OnInit {
protected categoryExists(categoria: ICategoria): boolean {
this.loadAll();
var condicion = this.categorias!.some(cat => cat.nombre!.toLowerCase() === categoria.nombre!.toLowerCase());
var condicion = this.categorias!.some(cat => cat.nombre!.toLowerCase() === categoria.nombre!.toLowerCase() && cat.id !== categoria.id);
return condicion;
}