import { Component, OnInit } from '@angular/core'; import { IEncuesta } from '../encuesta.model'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { EncuestaService } from '../service/encuesta.service'; import { EstadoEncuesta } from '../../enumerations/estado-encuesta.model'; import { AccesoEncuesta } from '../../enumerations/acceso-encuesta.model'; import { passwordResetFinishRoute } from '../../../account/password-reset/finish/password-reset-finish.route'; import { FormBuilder, Validators } from '@angular/forms'; import { IParametroAplicacion } from 'app/entities/parametro-aplicacion/parametro-aplicacion.model'; import { ParametroAplicacionService } from 'app/entities/parametro-aplicacion/service/parametro-aplicacion.service'; import { HttpResponse } from '@angular/common/http'; import { DATE_FORMAT, DATE_TIME_FORMAT } from '../../../config/input.constants'; import * as dayjs from 'dayjs'; import { finalize } from 'rxjs/operators'; @Component({ selector: 'jhi-encuesta-publish-dialog', templateUrl: './encuesta-publish-dialog.component.html', styleUrls: ['./encuesta-publish-dialog.component.scss'], }) export class EncuestaPublishDialogComponent implements OnInit { encuesta?: IEncuesta; //fechaFinalizacion?: Date; fechaFinalizarInvalid?: boolean = false; fechaFinalizarInvalidMax?: boolean = false; isLoading?: boolean; parametroAplicacions?: IParametroAplicacion[]; isMin = false; isMax = false; datoMin?: number; datoMax?: number; now = new Date(); fechaForm = this.fb.group({ fechaFinalizacion: [null, [Validators.required]], }); constructor( protected parametroAplicacionService: ParametroAplicacionService, protected encuestaService: EncuestaService, protected fb: FormBuilder, protected activeModal: NgbActiveModal ) {} ngOnInit(): void { this.loadAll(); } cancel(): void { this.activeModal.dismiss(); } confirmPublish(encuesta: IEncuesta): void { this.fechaFinalizarInvalid = false; this.fechaFinalizarInvalidMax = false; const now = dayjs(); /*this.loadAll() this.parametroAplicacions?.forEach(datos => { this.datoMin = datos.minDiasEncuesta; this.datoMax = datos.maxDiasEncuesta; });*/ encuesta.fechaFinalizar = dayjs(this.fechaForm.get(['fechaFinalizacion'])!.value); encuesta.fechaPublicacion = dayjs(now, DATE_TIME_FORMAT); if (this.fechaFinalizacionIsInvalid(encuesta.fechaFinalizar, encuesta.fechaPublicacion)) { if (encuesta.estado === 'DRAFT') { encuesta.estado = EstadoEncuesta.ACTIVE; } if (encuesta.acceso === AccesoEncuesta.PRIVATE) { encuesta.contrasenna = this.generatePassword(); } this.encuestaService.update(encuesta).subscribe(() => { this.activeModal.close('published'); }); } } loadAll(): void { this.isLoading = true; this.parametroAplicacionService .query() .pipe(finalize(() => this.onLoadFinalize())) .subscribe( (res: HttpResponse) => { this.isLoading = false; this.parametroAplicacions = res.body ?? []; }, () => { this.isLoading = false; } ); } onLoadFinalize() { this.parametroAplicacions?.forEach(datos => { this.datoMin = datos.minDiasEncuesta; this.datoMax = datos.maxDiasEncuesta; }); this.isLoading = false; } fechaFinalizacionIsInvalid(fechaFinalizar: dayjs.Dayjs, fechaPublicacion: dayjs.Dayjs): boolean { let numberDays: number; numberDays = fechaFinalizar?.diff(fechaPublicacion, 'days'); if (numberDays <= this.datoMin!) { this.fechaFinalizarInvalid = true; return false; } else if (numberDays >= this.datoMax!) { this.fechaFinalizarInvalidMax = true; return false; } else { return true; } } generatePassword(): string { const alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; let password = ''; for (let i = 0; i < 5; i++) { password += alpha.charAt(Math.floor(Math.random() * alpha.length)); } return password; } }