[EDIT] CAMBIOS MULTIPLE PERSONAL, SIN PASAJE

parent 7d433371
......@@ -11,47 +11,71 @@
<mat-card-header class="flex flex-col items-start w-full">
<label class="text-base md:text-lg font-bold">DATOS PERSONALES</label>
</mat-card-header>
<mat-card-content class="w-full my-2.5">
<div class="flex flex-col md:flex-row gap-x-4" [formGroup]="datos_personal">
<mat-form-field class="w-full md:w-1/4" appearance="outline" floatLabel="always">
<mat-label>Técnico responsable</mat-label>
<mat-select formControlName="tecnicoPersonal" placeholder="[Seleccionar técnico]" (selectionChange)="onEventoSeleccionTecnico($event)" required>
<mat-option *ngFor="let option of this.personal_list" [value]="option?.codper">
{{option?.personal}}
</mat-option>
</mat-select>
</mat-form-field>
<mat-card-content class="w-full my-2.5" [formGroup]="datos_personal">
<!------------------------------------------------------------------------- DATOS GENERALES ------------------------------------------------------------------------------>
<div class="flex flex-row gap-4 mb-4">
<div class="basis-2/4">
<div class="flex flex-row gap-x-2" *ngFor="let personal of listPersonal">
<mat-form-field class="w-full" appearance="outline" floatLabel="always">
<mat-label>Técnico responsable</mat-label>
<mat-select formControlName="tecnicoPersonal{{personal.index}}" placeholder="[Seleccionar técnico]" (selectionChange)="onEventoSeleccionTecnico($event,personal)" required>
<mat-option *ngFor="let option of this.personal_list" [value]="option?.codper">
{{option?.personal}}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field class="w-full" appearance="outline" floatLabel="always">
<mat-label>Especialidad</mat-label>
<input formControlName="areaPersonal{{personal.index}}" matInput placeholder="[Área designada]" value="" readonly>
</mat-form-field>
</div>
<mat-form-field class="w-full md:w-1/4" appearance="outline" floatLabel="always">
<mat-label>Especialidad</mat-label>
<input formControlName="areaPersonal" matInput placeholder="[Área designada]" value="" readonly>
</mat-form-field>
<!-- agregar botones de agregar o disminuir Tecnico responsable -->
<div class="flex flex-row gap-x-2">
<div class="example-button-container">
<button (click)="onEventoAgregarPersonal()" mat-fab aria-label="Example icon button with a delete icon">
<mat-icon>add</mat-icon>
</button>
</div>
<div class="example-button-container">
<button (click)="onEventoQuitarPersonal()" mat-fab aria-label="Example icon button with a heart icon">
<mat-icon>delete</mat-icon>
</button>
</div>
<mat-label class="font-bold text-blue-600 text-lg" [ngClass]="{'fade-out': personalFading}" [innerText]="personalText"></mat-label>
</div>
</div>
<mat-form-field class="w-full md:w-1/4" appearance="outline" floatLabel="always">
<mat-label>Sede designada : </mat-label>
<mat-select formControlName="sedePersonal" placeholder="[Seleccionar sede]" required>
<mat-option *ngFor="let option of this.sede_list" [value]="option?.value">
{{option?.viewValue}}
</mat-option>
<!-- <mat-option *ngFor="let option of this.sede_list" [value]="option?.codlocal">
{{option?.deslocal}}
</mat-option> -->
</mat-select>
</mat-form-field>
<div class="basis-2/4">
<div class="flex flex-row gap-x-2">
<mat-form-field class="w-full" appearance="outline" floatLabel="always">
<mat-label>Sede designada</mat-label>
<mat-select formControlName="sedePersonal" placeholder="[Seleccionar sede]" required>
<mat-option *ngFor="let option of this.sede_list" [value]="option?.value">
{{option?.viewValue}}
</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field class="w-full md:w-1/4" appearance="outline" floatLabel="always">
<mat-label>Rango de fechas : </mat-label>
<mat-date-range-input [rangePicker]="picker">
<input matStartDate formControlName="minFechaTrabajo" placeholder="Fecha inicial" readonly >
<input matEndDate formControlName="maxFechaTrabajo" placeholder="Fecha Fin" readonly>
</mat-date-range-input>
<mat-datepicker-toggle matIconSuffix [for]="picker" [disabled]="datos_personal.controls['minFechaTrabajo'].disabled"></mat-datepicker-toggle>
<mat-date-range-picker #picker></mat-date-range-picker>
</mat-form-field>
<mat-form-field class="w-full" appearance="outline" floatLabel="always">
<mat-label>Rango de fechas</mat-label>
<mat-date-range-input [rangePicker]="picker">
<input matStartDate formControlName="minFechaTrabajo" placeholder="Fecha inicial" readonly >
<input matEndDate formControlName="maxFechaTrabajo" placeholder="Fecha Fin" readonly>
</mat-date-range-input>
<mat-datepicker-toggle matIconSuffix [for]="picker" [disabled]="datos_personal.controls['minFechaTrabajo'].disabled"></mat-datepicker-toggle>
<mat-date-range-picker #picker></mat-date-range-picker>
</mat-form-field>
</div>
</div>
</div>
<div class="flex flex-col sm:flex-row gap-4">
<!------------------------------------------------------------------------- DATOS GENERALES ------------------------------------------------------------------------------>
<!------------------------------------------------------------------------- LISTADO DE PASAJES ---------------------------------------------------------------------------->
<!-- <div class="flex flex-row gap-4">
<div class="sm:basis-3/12 w-full">
<mat-form-field [formGroup]="datos_personal" class="w-full sm:w-[20rem]" appearance="outline" floatLabel="always">
<mat-form-field class="w-full sm:w-[20rem]" appearance="outline" floatLabel="always">
<mat-label>Pasaje designado : </mat-label>
<input matInput formControlName="pasajeTotal" placeholder="Calculo final del pasaje" value="" readonly>
</mat-form-field>
......@@ -79,9 +103,6 @@
<mat-option *ngFor="let option of this.sede_list" [value]="option?.value">
{{option?.viewValue}}
</mat-option>
<!--<mat-option *ngFor="let option of this.sede_list" [value]="option?.codlocal">
{{option?.deslocal}}
</mat-option> -->
</mat-select>
</mat-form-field>
</ng-container>
......@@ -166,7 +187,9 @@
</table>
</div>
</div>
</div>
</div> -->
<!------------------------------------------------------------------------- LISTADO DE PASAJES ---------------------------------------------------------------------------->
</mat-card-content>
</mat-card>
</div>
......@@ -191,7 +214,7 @@
</mat-option>
</mat-autocomplete>
</mat-form-field>
<mat-label [ngClass]="{'fade-out': isFading}" [innerText]="labelText"></mat-label>
<mat-label class="font-bold text-blue-600 text-lg" [ngClass]="{'fade-out': isFading}" [innerText]="labelText"></mat-label>
</div>
<div class="grid grid-cols-2 md:grid-cols-5 gap-4 w-full md:w-4/5">
......
......@@ -57,6 +57,12 @@ interface interRequerimientos {
codigo: string
}
interface interPersonal {
index : number;
id : number ;
nombre : string ;
}
interface interDetallePasaje {
index: number;
lugarOrigen: string;
......@@ -350,15 +356,18 @@ export class ConformidadComponent implements AfterViewInit {
sede_list: any = [];
requerimientosFiltrados: any[] = [];
listRequerimientos: interRequerimientos[] = [];
listPersonal : interPersonal[] = [{ index: 0 , id: 0 , nombre: '' }];
idBotones: number = 0;
indexPasaje : number = 0 ;
labelText: string = ''; // Texto que se muestra inicialmente
isFading: boolean = false; // Controla si la animación de desvanecimiento debe activarse
personalText : string = '';
personalFading : boolean = false ;
activarPasajes : boolean = false;
lugarDestinoPasaje : string = '';
columnasPasaje: string[] = ['lugarOrigen', 'lugarDestino', 'monto', 'fecha','accion'];
dataSource: interDetallePasaje[] = [];
//columnasPasaje: string[] = ['lugarOrigen', 'lugarDestino', 'monto', 'fecha','accion'];
//dataSource: interDetallePasaje[] = [];
alertaPosicionHorizontal: MatSnackBarHorizontalPosition = 'center';
alertaPosicionVertical: MatSnackBarVerticalPosition = 'bottom';
......@@ -369,19 +378,17 @@ export class ConformidadComponent implements AfterViewInit {
archivosEvidencia : interFile[] = [];
expresionDecimal : any = '/^[0-9]+(\.[0-9]{1,2})?$/';
//INICIALIZACION DE VARIABLES UTILIZABLES
// GROUPO DE FORMULARIO
datos_personal = new FormGroup({
tecnicoPersonal : new FormControl(null ,Validators.required),
tecnicoPersonal0 : new FormControl(null ,Validators.required),
areaPersonal0 : new FormControl<string>('' ,Validators.required),
sedePersonal : new FormControl(null,Validators.required),
areaPersonal : new FormControl<string>('' ,Validators.required),
codAreaPersona : new FormControl(),
minFechaTrabajo : new FormControl<Date>(new Date(), Validators.required),
maxFechaTrabajo : new FormControl<Date>(new Date(), Validators.required),
pasajeTotal: new FormControl<number>(0),
//pasajeTotal: new FormControl<number>(0),
});
datos_servicio = new FormGroup({
......@@ -395,12 +402,12 @@ export class ConformidadComponent implements AfterViewInit {
descripcionTrabajo : new FormControl<string>('' ,Validators.required),
});
datos_pasajeAcumulado = new FormGroup<any>({
/*datos_pasajeAcumulado = new FormGroup<any>({
});
datos_lugarOrigen : FormGroup = new FormGroup<any>({}) ;
datos_fechaPasaje : FormGroup = new FormGroup<any>({}) ;
datos_fechaPasaje : FormGroup = new FormGroup<any>({}) ;*/
existeMaterialS : FormGroup = new FormGroup({
existeMaterial : new FormControl(null ,Validators.required),
......@@ -465,10 +472,10 @@ export class ConformidadComponent implements AfterViewInit {
this.personal_list = personal;
this.sede_list = sede;
this.dataSource = [];
//this.dataSource = [];
this.activarPasajes = false;
this.habilitarSeccionPersonal(true);
//this.habilitarSeccionPersonal(true);
// Detecta cambios en el formulario de Datos Personal exceptuando 'lugarDestinoPasaje' para desbloquear el boton de 'Agregar Pasaje'
this.datos_personal.valueChanges.subscribe(value => {
......@@ -480,13 +487,13 @@ export class ConformidadComponent implements AfterViewInit {
this.activarPasajes = controlesInvalidos.length === 0 ? true : false;
// En caso ya existan registros en la tabla de pasajes , se limpiará el listado y las filas existentes.
if(this.dataSource.length > 0 && !this.activarPasajes){
/*if(this.dataSource.length > 0 && !this.activarPasajes){
this.dataSource = [];
this.indexPasaje = 0;
this.datos_pasajeAcumulado.reset();
this.datos_fechaPasaje.reset();
this.datos_lugarOrigen.reset();
}
}*/
});
// Sincronizar el valor de 'sedePersonal' con los selects la tabla de pasaje
......@@ -496,14 +503,14 @@ export class ConformidadComponent implements AfterViewInit {
});
//Sincroniza todos los inputs de monto de pasaje con el total de pasajes
this.datos_pasajeAcumulado.valueChanges.subscribe(values => {
/*this.datos_pasajeAcumulado.valueChanges.subscribe(values => {
const inputControls = Object.keys(values).filter(key => key.includes('montoPasaje')); // OBTENIENDO TODAS LAS KEYS DE MONTOPASAJE
const sum : number = (inputControls.reduce((acc, key) => Number(this.decimalPipe.transform( (acc + (Number( this.decimalPipe.transform(values[key], '1.2-2') ) || 0) ) , '1.2-2' ) ) , 0) ) || 0;
this.datos_personal.get('pasajeTotal')?.setValue(sum, { emitEvent: false });
});
});*/
//Condicionar a todos los controladores de Lugar de Origen para que si se escoge el mismo lugar que el lugar de origen salga una advertencia
this.datos_lugarOrigen.valueChanges.subscribe(value => {
/*this.datos_lugarOrigen.valueChanges.subscribe(value => {
const lugarDestino = this.datos_personal.get('sedePersonal')?.value;
if(lugarDestino) {
......@@ -522,10 +529,10 @@ export class ConformidadComponent implements AfterViewInit {
this.datos_personal.get('sedePersonal')?.setErrors({'incorrect': true});
}
});
});*/
this.datos_personal.get('maxFechaTrabajo')?.valueChanges.subscribe((value) => {
/*this.datos_personal.get('maxFechaTrabajo')?.valueChanges.subscribe((value) => {
let minFecha : any = this.datos_personal.get('minFechaTrabajo')?.value;
let maxFecha : any = value;
......@@ -551,7 +558,7 @@ export class ConformidadComponent implements AfterViewInit {
}
});
}
});
});*/
/*this.existeMaterialS.get('existeMaterial')?.valueChanges.subscribe((value) => {
console.log(value);
......@@ -603,24 +610,77 @@ export class ConformidadComponent implements AfterViewInit {
this.listRequerimientos = this.listRequerimientos.filter((item) => item.id !== valor);
}
//AGREGAR UN TECNICO
onEventoAgregarPersonal(){
this.agregarFormControl(this.datos_personal,'tecnicoPersonal'+this.listPersonal.length,new FormControl(null,Validators.required));
this.agregarFormControl(this.datos_personal,'areaPersonal'+this.listPersonal.length,new FormControl<string>('' ,Validators.required));
this.listPersonal.push({ index: this.listPersonal.length , id: 0 , nombre: '' }); // Agregar uno más
}
//QUITAR UN TECNICP
onEventoQuitarPersonal(){
if(this.listPersonal.length === 1){
this.personalText = 'Debe de haber un trabajador como minimo'; // Cambia el texto
this.personalFading = false; // Resetea el estado de opacidad para mostrar el texto
// Después de 2 segundos, comienza a desvanecer el texto
setTimeout(() => {
this.personalFading = true;
}, 2000); // 2000 ms = 2 segundos
}else{
this.listPersonal.pop(); // Eliminar el ultimo elemento del array
this.removerFormControl(this.datos_personal,'tecnicoPersonal'+this.listPersonal.length);
this.removerFormControl(this.datos_personal,'areaPersonal'+this.listPersonal.length);
}
}
//AL SELECCIONAR UN TECNICO, MOSTRAR AUTOMATICAMENTE SU AREA
onEventoSeleccionTecnico(event: any) { // IMPRIMER EL ÁREA DEL TÉCNICO AL SELECCIONARLO
onEventoSeleccionTecnico(event: any, elemento : any) { // IMPRIMER EL ÁREA DEL TÉCNICO AL SELECCIONARLO
const areaControl = this.datos_personal.get('areaPersonal');
const codAreaControl = this.datos_personal.get('codAreaPersona');
const codigoPer = event.value;
const personal_list = this.personal_list;
const personal_datos = personal_list.find((item: any) => item.codper === codigoPer);
const areaControl = this.datos_personal.get('areaPersonal'+elemento.index);
const validarRepetido = this.listPersonal.find((item: any) => item.id === codigoPer && item.index != elemento.index);
if(validarRepetido){
this.datos_personal.get('tecnicoPersonal'+elemento.index)?.setValue(null);
this.personalText = 'Personal ya seleccionado'; // Cambia el texto
this.personalFading = false; // Resetea el estado de opacidad para mostrar el texto
// Después de 2 segundos, comienza a desvanecer el texto
setTimeout(() => {
this.personalFading = true;
}, 2000); // 2000 ms = 2 segundos
if(Object.keys(personal_datos).length > 0){
areaControl?.setValue(personal_datos.descargo);
codAreaControl?.setValue(personal_datos.codarea);
}else{
areaControl?.setValue('Sin Cargo');
codAreaControl?.setValue('0');
this.personalText = '';
this.listPersonal[elemento.index].id = codigoPer;
this.listPersonal[elemento.index].nombre = personal_datos.nombre;
if(Object.keys(personal_datos).length > 0){
areaControl?.setValue(personal_datos.descargo);
}else{
areaControl?.setValue('Sin Cargo');
}
areaControl?.updateValueAndValidity();
}
areaControl?.updateValueAndValidity();
codAreaControl?.updateValueAndValidity();
//tecnicoPersonal
}
......@@ -645,17 +705,17 @@ export class ConformidadComponent implements AfterViewInit {
this.requerimientosFiltrados = mapeoResultado;
}
formatMontoPasaje(formGroup: FormGroup, formControlName: string) {
/*formatMontoPasaje(formGroup: FormGroup, formControlName: string) {
//const control = this.datos_pasajeAcumulado.get('montoPasaje'+index);
const control = this.obtenerFormControl(formGroup,formControlName);
if (control && control.value != null) {
const formattedValue = this.decimalPipe.transform(control.value, '1.2-2');
control.setValue(formattedValue, { emitEvent: false });
}
}
}*/
//AL SELECCIONAR LA OPCIÓN DE NUEVO PASAJE
onEventoNuevoPasaje(event : any){
/*onEventoNuevoPasaje(event : any){
const NuevaFila : interDetallePasaje = {
index: this.indexPasaje++,
lugarOrigen: '',
......@@ -684,9 +744,9 @@ export class ConformidadComponent implements AfterViewInit {
this.activarPasajes = false;
this.habilitarSeccionPersonal(false);
}
}*/
onEventoConfirmarPasaje(event: any, elemento: any){
/*onEventoConfirmarPasaje(event: any, elemento: any){
const lugarOrigen = this.obtenerFormControl(this.datos_lugarOrigen,`lugarOrigen${elemento.index}`)?.value;
const lugarDestino = this.obtenerFormControl(this.datos_personal,'sedePersonal')?.value || '';
......@@ -734,9 +794,9 @@ export class ConformidadComponent implements AfterViewInit {
}
}
}*/
validarRegistroPasaje(index : number){
/*validarRegistroPasaje(index : number){
const lugarOrigen = this.datos_lugarOrigen.get('lugarOrigen'+index)?.value;
const lugarDestino = this.datos_personal.get('sedePersonal')?.value;
const fechaPasaje = this.datos_fechaPasaje.get('fechaPasaje'+index)?.value;
......@@ -748,9 +808,9 @@ export class ConformidadComponent implements AfterViewInit {
return lugarOrigen && lugarDestino && fechaPasaje && montoPasaje && montoPasaje > 0 && lugarOrigen !== lugarDestino;
}
}*/
onEventoCancelarPasaje(event: any, elemento: any){
/*onEventoCancelarPasaje(event: any, elemento: any){
const index = this.dataSource.findIndex((item) => item.index === elemento.index);//Descubriendo el index
this.dataSource.forEach((item) => { item.acciones = true; }); // Que todas las filas vuelvan a tener las acciones
......@@ -771,12 +831,12 @@ export class ConformidadComponent implements AfterViewInit {
this.habilitarSeccionPersonal(true);
this.activarPasajes = true
}
}*/
//Editar una fila de pasaje
onEventoEditarPasaje(event: any, elemento: any) {
/*onEventoEditarPasaje(event: any, elemento: any) {
//const index = this.dataSource.findIndex((item) => item.index === elemento.index);//Descubriendo el index
const index = this.dataSource.findIndex((item) => item.index === elemento.index);//Descubriendo el index
this.dataSource.forEach((item) => {
if (item.index === elemento.index) {
......@@ -793,9 +853,9 @@ export class ConformidadComponent implements AfterViewInit {
this.dataSource = [...this.dataSource]; // Volviendo a ingresar los datos para que la tabla se actualice y la fila cambie con las condiciones del HTML
this.activarPasajes = false;
}
}*/
onEventoEliminarPasaje(event: any, elemento: any){
/*onEventoEliminarPasaje(event: any, elemento: any){
//Al presionar el boton aparecerá un Dialog confirmando si desea eliminar el registro, al aceptar la fila del registro se eliminará.
const dialogRef = this.dialog.open(ConfirmarEliminacionComponent);
......@@ -810,23 +870,23 @@ export class ConformidadComponent implements AfterViewInit {
}
}
});
}
}*/
habilitarSeccionPersonal(datos: boolean){
/*habilitarSeccionPersonal(datos: boolean){
if(datos){
this.datos_personal.get('tecnicoPersonal')?.enable({ emitEvent: false });
this.datos_personal.get('sedePersonal')?.enable({ emitEvent: false });
this.datos_personal.get('areaPersonal')?.enable({ emitEvent: false });
this.datos_personal.get('sedePersonal')?.enable({ emitEvent: false });
this.datos_personal.get('maxFechaTrabajo')?.enable({ emitEvent: false });
this.datos_personal.get('minFechaTrabajo')?.enable({ emitEvent: false });
}else{
this.datos_personal.get('tecnicoPersonal')?.disable({ emitEvent: false });
this.datos_personal.get('sedePersonal')?.disable({ emitEvent: false });
this.datos_personal.get('areaPersonal')?.disable({ emitEvent: false });
this.datos_personal.get('sedePersonal')?.disable({ emitEvent: false });
this.datos_personal.get('maxFechaTrabajo')?.disable({ emitEvent: false });
this.datos_personal.get('minFechaTrabajo')?.disable({ emitEvent: false });
}
}
}*/
onEventoSubirArchivo(event: any, tipo : number = 1) {
......@@ -891,7 +951,8 @@ export class ConformidadComponent implements AfterViewInit {
//Obtener todos los datos del form Group datos_personal
const datosPersonal = this.datos_personal.getRawValue();
const datosPasajes = this.dataSource;
const personal = this.listPersonal;
//const datosPasajes = this.dataSource;
const datosServicio = this.datos_servicio.getRawValue();
const requerimientoRelacionados = this.listRequerimientos;
const datosTrabajo = this.datos_trabajo.getRawValue();
......@@ -904,16 +965,19 @@ export class ConformidadComponent implements AfterViewInit {
Notiflix.Loading.pulse(); // Muestra un loading
if (!this.validarDatosPersonales(datosPersonal)) {
this.mostrarAlerta('VALIDAR DATOS PERSONALES');
return;
}
if (!this.validarPasajes(datosPasajes)) {
this.mostrarAlerta('VALIDAR PASAJES');
if(!this.validarPersonal(personal)){
this.mostrarAlerta('VALIDAR PERSONAL ASIGNADO');
return;
}
/*if (!this.validarPasajes(datosPasajes)) {
this.mostrarAlerta('VALIDAR PASAJES');
return;
}*/
if (!this.validarArchivos(archivosEvidencias)) {
const tipoEvidencia = archivosEvidencias.find((item) => item.tipoEvidencia === 1) ? 2 : (archivosEvidencias.find((item) => item.tipoEvidencia === 2) ? 1 : 0 );
......@@ -934,7 +998,7 @@ export class ConformidadComponent implements AfterViewInit {
const registroConformidad = await this.conformidadHelper.gestionConformidad({
opcion: 1,
codper: datosPersonal.tecnicoPersonal,
//codper: datosPersonal.tecnicoPersonal,
codlocal: datosPersonal.sedePersonal,
fechainicio: this.formatoFechaRegistro(datosPersonal.minFechaTrabajo || new Date() ) ,
fechafin: this.formatoFechaRegistro(datosPersonal.maxFechaTrabajo || new Date() ) ,
......@@ -947,172 +1011,173 @@ export class ConformidadComponent implements AfterViewInit {
const respuestaConformidad : any = JSON.parse(registroConformidad);
let codigoConformidad = 0 ;
if(respuestaConformidad.status){ // DATOS DE CONFORMIDAD VALIDADOS Y REGISTRADOS
let statusPasaje = true ;
codigoConformidad = respuestaConformidad.data.codconformidad;
if(datosPasajes.length > 0){
//console.log(datosPasajes)
const datosPasaje = datosPasajes.map((item) => {
return {
opcion: 2,
codconformidad : codigoConformidad,
codlocal: this.datos_lugarOrigen.get('lugarOrigen'+item.index)?.value,
pasaje: Number( this.decimalPipe.transform(item.monto, '1.2-2') ) || 0,
fechainicio: this.formatoFechaRegistro(item.fecha)
};
let statusPersonal = true;
const datosPersonalTecnico = personal.map((item) => {
return {
opcion : 8,
codconformidad : codigoConformidad,
codper : item.id,
}
});
for (let i=0; i < datosPasaje.length; i++){
const registroPasaje = await this.conformidadHelper.gestionConformidad(datosPasaje[i]);
const respuestaPasaje = JSON.parse(registroPasaje);
if(!respuestaPasaje.status) {
statusPasaje = false;
for (let i=0; i < datosPersonalTecnico.length; i++){
const registroRequerimiento = await this.conformidadHelper.gestionConformidad(datosPersonalTecnico[i]);
const respuestaRequerimiento = JSON.parse(registroRequerimiento);
if(!respuestaRequerimiento.status) {
statusPersonal = false;
break;
}
}
}
if(statusPasaje){ // DATOS DE PASAJES VALIDADOS Y REGISTRADOS
if(statusPersonal) {
let statusRequerimientos = true;
let statusRequerimientos = true ;
if (requerimientoRelacionados.length > 0) {
if(requerimientoRelacionados.length > 0){
//console.log(requerimientoRelacionados);
const datosRequerimientos = requerimientoRelacionados.map((item) => {
return {
opcion: 3,
codconformidad : codigoConformidad,
codrequerimiento : parseInt(item.codigo)
codconformidad: codigoConformidad,
codrequerimiento: parseInt(item.codigo)
};
});
for (let i=0; i < datosRequerimientos.length; i++){
const registroRequerimiento = await this.conformidadHelper.gestionConformidad(datosRequerimientos[i]);
const respuestaRequerimiento = JSON.parse(registroRequerimiento);
if(!respuestaRequerimiento.status) {
statusRequerimientos = false;
break;
for (let i = 0; i < datosRequerimientos.length; i++) {
const registroRequerimiento = await this.conformidadHelper.gestionConformidad(datosRequerimientos[i]);
const respuestaRequerimiento = JSON.parse(registroRequerimiento);
if (!respuestaRequerimiento.status) {
statusRequerimientos = false;
break;
}
}
}
}
if(statusRequerimientos) { // REGISTRO DE REQUERIMIENTOS VALIDADOS Y REGISTRADOS
if (statusRequerimientos) { // REGISTRO DE REQUERIMIENTOS VALIDADOS Y REGISTRADOS
const registroCarpeta = await this.conformidadHelper.creacionCarpeta({codconformidad: codigoConformidad});
//console.log(registroEvidencia);
const registroCarpeta = await this.conformidadHelper.creacionCarpeta({codconformidad: codigoConformidad});
//console.log(registroEvidencia);
if(registroCarpeta.status){
//UNIR LOS DATOS archivosEP Y archivosES EN UN SOLO ARRAY
let statusEvidencias = true;
if (registroCarpeta.status) {
//UNIR LOS DATOS archivosEP Y archivosES EN UN SOLO ARRAY
let statusEvidencias = true;
const registroArchivos = archivosEvidencias.map((item) => {
return {
codconformidad: codigoConformidad,
archivo: item.file,
idCarpeta: registroCarpeta.idCarpeta,
tipoEvidencia: item.tipoEvidencia,
nombreArchivo: (item.tipoEvidencia === 1) ? 'EVIDENCIA_PROBLEMA_' + codigoConformidad + "_" + (contadorEP++) : 'EVIDENCIA_SOLUCION_' + codigoConformidad + "_" + (contadorES++)
};
});
const registroArchivos = archivosEvidencias.map((item) => {
return {
codconformidad: codigoConformidad,
archivo: item.file,
idCarpeta: registroCarpeta.idCarpeta,
tipoEvidencia: item.tipoEvidencia,
nombreArchivo: (item.tipoEvidencia === 1) ? 'EVIDENCIA_PROBLEMA_' + codigoConformidad + "_" + (contadorEP++) : 'EVIDENCIA_SOLUCION_' + codigoConformidad + "_" + (contadorES++)
};
});
const filtroEvidenciasProblemas = registroArchivos.filter((item) => item.tipoEvidencia === 1);
const filtroEvidenciasSoluciones = registroArchivos.filter((item) => item.tipoEvidencia === 2);
const filtroEvidenciasProblemas = registroArchivos.filter((item) => item.tipoEvidencia === 1);
const filtroEvidenciasSoluciones = registroArchivos.filter((item) => item.tipoEvidencia === 2);
const registroEvidencia = await Promise.all([this.conformidadHelper.subidaEvidencia2(filtroEvidenciasProblemas),this.conformidadHelper.subidaEvidencia2(filtroEvidenciasSoluciones)]);
const registroEvidencia = await Promise.all([this.conformidadHelper.subidaEvidencia2(filtroEvidenciasProblemas), this.conformidadHelper.subidaEvidencia2(filtroEvidenciasSoluciones)]);
//console.log(registroEvidencia);
if(!(registroEvidencia[0].status && registroEvidencia[1].status)){
statusEvidencias = false;
}
//console.log(registroEvidencia);
if (!(registroEvidencia[0].status && registroEvidencia[1].status)) {
statusEvidencias = false;
}
//console.log(statusEvidencias);
//console.log(statusEvidencias);
if (statusEvidencias) { // REGISTRO DE EVIDENCIAS SUBIDAS AL DRIVE Y REGISTRADAS EN BASE
if (statusEvidencias) { // REGISTRO DE EVIDENCIAS SUBIDAS AL DRIVE Y REGISTRADAS EN BASE
let statusOrdenSalida = true;
let statusOrdenSalida = true;
if (existeMaterial === 1) {
if (existeMaterial === 1) {
const registroOrdenSalida = await this.conformidadHelper.gestionOrdenSalida({
accion: 1,
codper: datosPersonal.tecnicoPersonal,
codlocal: datosPersonal.sedePersonal,
fechaRegistro: this.formatoFechaRegistro(new Date()),
descripcion: datosMaterialSobrante
});
const registroOrdenSalida = await this.conformidadHelper.gestionOrdenSalida({
accion: 1,
//codper: datosPersonal.tecnicoPersonal,
codlocal: datosPersonal.sedePersonal,
fechaRegistro: this.formatoFechaRegistro(new Date()),
descripcion: datosMaterialSobrante
});
const respuestaOrdenSalida: any = JSON.parse(registroOrdenSalida);
const respuestaOrdenSalida: any = JSON.parse(registroOrdenSalida);
if (respuestaOrdenSalida.status) {
if (respuestaOrdenSalida.status) {
const datosMaterialSobrante = datosMaterial.map((item) => {
return {
accion: 2,
codOrdenSalida: respuestaOrdenSalida.data.codordensalida,
codArticulo: item.codigoArticulo,
nombreArticulo : item.nombre,
unidad : item.unidad,
cantidad: item.cantidad,
estado: item.estado
};
});
for (let i = 0; i < datosMaterial.length; i++) {
const registroMaterialS = await this.conformidadHelper.gestionOrdenSalida(datosMaterialSobrante[i]);
//console.log(registroMaterialS);
const respuestaregistroMaterialS = JSON.parse(registroMaterialS);
if (!respuestaregistroMaterialS.status) {
statusOrdenSalida = false;
break;
const datosMaterialSobrante = datosMaterial.map((item) => {
return {
accion: 2,
codOrdenSalida: respuestaOrdenSalida.data.codordensalida,
codArticulo: item.codigoArticulo,
nombreArticulo: item.nombre,
unidad: item.unidad,
cantidad: item.cantidad,
estado: item.estado
};
});
for (let i = 0; i < datosMaterial.length; i++) {
const registroMaterialS = await this.conformidadHelper.gestionOrdenSalida(datosMaterialSobrante[i]);
//console.log(registroMaterialS);
const respuestaregistroMaterialS = JSON.parse(registroMaterialS);
if (!respuestaregistroMaterialS.status) {
statusOrdenSalida = false;
break;
}
}
}
if(statusOrdenSalida){ // UNION DE LA ORDEN DE SALIDA CON LA CONFORMIDAD
if (statusOrdenSalida) { // UNION DE LA ORDEN DE SALIDA CON LA CONFORMIDAD
const relacionarOrdenConformidad = await this.conformidadHelper.gestionConformidad({
opcion : 6,
codconformidad : codigoConformidad,
codordensalida : respuestaOrdenSalida.data.codordensalida
});
const relacionarOrdenConformidad = await this.conformidadHelper.gestionConformidad({
opcion: 6,
codconformidad: codigoConformidad,
codordensalida: respuestaOrdenSalida.data.codordensalida
});
//console.log(relacionarOrdenConformidad);
//console.log(relacionarOrdenConformidad);
const respuestarelacionarOrdenConformidad = JSON.parse(relacionarOrdenConformidad);
if (!respuestarelacionarOrdenConformidad.status) {
statusOrdenSalida = false;
const respuestarelacionarOrdenConformidad = JSON.parse(relacionarOrdenConformidad);
if (!respuestarelacionarOrdenConformidad.status) {
statusOrdenSalida = false;
}
}
} else {
this.mostrarAlerta('ERROR AL REGISTRAR LOS ORDEN DE SALIDA');
}
} else {
this.mostrarAlerta('ERROR AL REGISTRAR LOS ORDEN DE SALIDA');
statusOrdenSalida = true;
}
//console.log(statusOrdenSalida);
} else {
statusOrdenSalida = true;
}
//console.log(statusOrdenSalida);
if (statusOrdenSalida) {
if (statusOrdenSalida) {
console.log("SE REGISTRO TODO CORRECTAMENTE");
Notiflix.Loading.remove();
Notiflix.Notify.success('REGISTRO COMPLETADO');
console.log("SE REGISTRO TODO CORRECTAMENTE");
Notiflix.Loading.remove();
Notiflix.Notify.success('REGISTRO COMPLETADO');
} else {
this.mostrarAlerta('ERROR AL REGISTRAR ORDEN DE SALIDA');
}
} else {
this.mostrarAlerta('ERROR AL REGISTRAR ORDEN DE SALIDA');
this.mostrarAlerta('ERROR AL REGISTRAR LOS ARCHIVOS DE EVIDENCIAS');
}
} else {
this.mostrarAlerta('ERROR AL REGISTRAR LOS ARCHIVOS DE EVIDENCIAS');
this.mostrarAlerta('ERROR AL CREAR CARPETA DE EVIDENCIAS');
}
}else{
this.mostrarAlerta('ERROR AL CREAR CARPETA DE EVIDENCIAS');
} else {
this.mostrarAlerta('ERROR AL REGISTRAR LOS REQUERIMIENTOS');
}
}else{
this.mostrarAlerta('ERROR AL REGISTRAR LOS REQUERIMIENTOS');
this.mostrarAlerta('ERROR AL REGISTRAR EL PERSONAL');
}
}else{
this.mostrarAlerta('ERROR AL REGISTRAR LOS PASAJES');
}
}else{
this.mostrarAlerta('ERROR AL REGISTRAR LA CONFORMIDAD');
}
......@@ -1120,11 +1185,15 @@ export class ConformidadComponent implements AfterViewInit {
}
validarDatosPersonales(datosPersonal: any): boolean {
return datosPersonal?.codAreaPersona && datosPersonal?.sedePersonal &&
datosPersonal?.tecnicoPersonal && datosPersonal?.maxFechaTrabajo &&
return datosPersonal?.sedePersonal &&
datosPersonal?.maxFechaTrabajo &&
datosPersonal?.minFechaTrabajo;
}
validarPersonal(personal: any[]): boolean {
return personal.length > 0 && personal.every((item) => item.id != '0' && item.nombre != '');
}
validarPasajes(datosPasajes: any[]): boolean {
return (datosPasajes.length > 0 && datosPasajes.every((item) => item.lugarOrigen && item.lugarDestino && item.monto && item.fecha)) || datosPasajes.length === 0;
}
......
......@@ -277,7 +277,6 @@ export class ConformidadService {
const parametros = {
accion : json.accion || 0,
codOrdenSalida : json.codOrdenSalida || 0,
codper : json.codper || 0,
codlocal : json.codlocal || '',
descripcion: json.descripcion || '',
fechaRegistro : json.fechaRegistro || '',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment