[EDIT] CAMBIOS MULTIPLE PERSONAL, SIN PASAJE

parent 7d433371
...@@ -11,47 +11,71 @@ ...@@ -11,47 +11,71 @@
<mat-card-header class="flex flex-col items-start w-full"> <mat-card-header class="flex flex-col items-start w-full">
<label class="text-base md:text-lg font-bold">DATOS PERSONALES</label> <label class="text-base md:text-lg font-bold">DATOS PERSONALES</label>
</mat-card-header> </mat-card-header>
<mat-card-content class="w-full my-2.5"> <mat-card-content class="w-full my-2.5" [formGroup]="datos_personal">
<div class="flex flex-col md:flex-row gap-x-4" [formGroup]="datos_personal"> <!------------------------------------------------------------------------- DATOS GENERALES ------------------------------------------------------------------------------>
<mat-form-field class="w-full md:w-1/4" appearance="outline" floatLabel="always"> <div class="flex flex-row gap-4 mb-4">
<mat-label>Técnico responsable</mat-label> <div class="basis-2/4">
<mat-select formControlName="tecnicoPersonal" placeholder="[Seleccionar técnico]" (selectionChange)="onEventoSeleccionTecnico($event)" required> <div class="flex flex-row gap-x-2" *ngFor="let personal of listPersonal">
<mat-option *ngFor="let option of this.personal_list" [value]="option?.codper"> <mat-form-field class="w-full" appearance="outline" floatLabel="always">
{{option?.personal}} <mat-label>Técnico responsable</mat-label>
</mat-option> <mat-select formControlName="tecnicoPersonal{{personal.index}}" placeholder="[Seleccionar técnico]" (selectionChange)="onEventoSeleccionTecnico($event,personal)" required>
</mat-select> <mat-option *ngFor="let option of this.personal_list" [value]="option?.codper">
</mat-form-field> {{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"> <!-- agregar botones de agregar o disminuir Tecnico responsable -->
<mat-label>Especialidad</mat-label> <div class="flex flex-row gap-x-2">
<input formControlName="areaPersonal" matInput placeholder="[Área designada]" value="" readonly> <div class="example-button-container">
</mat-form-field> <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"> <div class="basis-2/4">
<mat-label>Sede designada : </mat-label> <div class="flex flex-row gap-x-2">
<mat-select formControlName="sedePersonal" placeholder="[Seleccionar sede]" required> <mat-form-field class="w-full" appearance="outline" floatLabel="always">
<mat-option *ngFor="let option of this.sede_list" [value]="option?.value"> <mat-label>Sede designada</mat-label>
{{option?.viewValue}} <mat-select formControlName="sedePersonal" placeholder="[Seleccionar sede]" required>
</mat-option> <mat-option *ngFor="let option of this.sede_list" [value]="option?.value">
<!-- <mat-option *ngFor="let option of this.sede_list" [value]="option?.codlocal"> {{option?.viewValue}}
{{option?.deslocal}} </mat-option>
</mat-option> --> </mat-select>
</mat-select> </mat-form-field>
</mat-form-field>
<mat-form-field class="w-full md:w-1/4" appearance="outline" floatLabel="always"> <mat-form-field class="w-full" appearance="outline" floatLabel="always">
<mat-label>Rango de fechas : </mat-label> <mat-label>Rango de fechas</mat-label>
<mat-date-range-input [rangePicker]="picker"> <mat-date-range-input [rangePicker]="picker">
<input matStartDate formControlName="minFechaTrabajo" placeholder="Fecha inicial" readonly > <input matStartDate formControlName="minFechaTrabajo" placeholder="Fecha inicial" readonly >
<input matEndDate formControlName="maxFechaTrabajo" placeholder="Fecha Fin" readonly> <input matEndDate formControlName="maxFechaTrabajo" placeholder="Fecha Fin" readonly>
</mat-date-range-input> </mat-date-range-input>
<mat-datepicker-toggle matIconSuffix [for]="picker" [disabled]="datos_personal.controls['minFechaTrabajo'].disabled"></mat-datepicker-toggle> <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-date-range-picker #picker></mat-date-range-picker>
</mat-form-field> </mat-form-field>
</div>
</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"> <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> <mat-label>Pasaje designado : </mat-label>
<input matInput formControlName="pasajeTotal" placeholder="Calculo final del pasaje" value="" readonly> <input matInput formControlName="pasajeTotal" placeholder="Calculo final del pasaje" value="" readonly>
</mat-form-field> </mat-form-field>
...@@ -79,9 +103,6 @@ ...@@ -79,9 +103,6 @@
<mat-option *ngFor="let option of this.sede_list" [value]="option?.value"> <mat-option *ngFor="let option of this.sede_list" [value]="option?.value">
{{option?.viewValue}} {{option?.viewValue}}
</mat-option> </mat-option>
<!--<mat-option *ngFor="let option of this.sede_list" [value]="option?.codlocal">
{{option?.deslocal}}
</mat-option> -->
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</ng-container> </ng-container>
...@@ -166,7 +187,9 @@ ...@@ -166,7 +187,9 @@
</table> </table>
</div> </div>
</div> </div>
</div> </div> -->
<!------------------------------------------------------------------------- LISTADO DE PASAJES ---------------------------------------------------------------------------->
</mat-card-content> </mat-card-content>
</mat-card> </mat-card>
</div> </div>
...@@ -191,7 +214,7 @@ ...@@ -191,7 +214,7 @@
</mat-option> </mat-option>
</mat-autocomplete> </mat-autocomplete>
</mat-form-field> </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>
<div class="grid grid-cols-2 md:grid-cols-5 gap-4 w-full md:w-4/5"> <div class="grid grid-cols-2 md:grid-cols-5 gap-4 w-full md:w-4/5">
......
...@@ -57,6 +57,12 @@ interface interRequerimientos { ...@@ -57,6 +57,12 @@ interface interRequerimientos {
codigo: string codigo: string
} }
interface interPersonal {
index : number;
id : number ;
nombre : string ;
}
interface interDetallePasaje { interface interDetallePasaje {
index: number; index: number;
lugarOrigen: string; lugarOrigen: string;
...@@ -350,15 +356,18 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -350,15 +356,18 @@ export class ConformidadComponent implements AfterViewInit {
sede_list: any = []; sede_list: any = [];
requerimientosFiltrados: any[] = []; requerimientosFiltrados: any[] = [];
listRequerimientos: interRequerimientos[] = []; listRequerimientos: interRequerimientos[] = [];
listPersonal : interPersonal[] = [{ index: 0 , id: 0 , nombre: '' }];
idBotones: number = 0; idBotones: number = 0;
indexPasaje : number = 0 ; indexPasaje : number = 0 ;
labelText: string = ''; // Texto que se muestra inicialmente labelText: string = ''; // Texto que se muestra inicialmente
isFading: boolean = false; // Controla si la animación de desvanecimiento debe activarse isFading: boolean = false; // Controla si la animación de desvanecimiento debe activarse
personalText : string = '';
personalFading : boolean = false ;
activarPasajes : boolean = false; activarPasajes : boolean = false;
lugarDestinoPasaje : string = ''; lugarDestinoPasaje : string = '';
columnasPasaje: string[] = ['lugarOrigen', 'lugarDestino', 'monto', 'fecha','accion']; //columnasPasaje: string[] = ['lugarOrigen', 'lugarDestino', 'monto', 'fecha','accion'];
dataSource: interDetallePasaje[] = []; //dataSource: interDetallePasaje[] = [];
alertaPosicionHorizontal: MatSnackBarHorizontalPosition = 'center'; alertaPosicionHorizontal: MatSnackBarHorizontalPosition = 'center';
alertaPosicionVertical: MatSnackBarVerticalPosition = 'bottom'; alertaPosicionVertical: MatSnackBarVerticalPosition = 'bottom';
...@@ -369,19 +378,17 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -369,19 +378,17 @@ export class ConformidadComponent implements AfterViewInit {
archivosEvidencia : interFile[] = []; archivosEvidencia : interFile[] = [];
expresionDecimal : any = '/^[0-9]+(\.[0-9]{1,2})?$/';
//INICIALIZACION DE VARIABLES UTILIZABLES //INICIALIZACION DE VARIABLES UTILIZABLES
// GROUPO DE FORMULARIO // GROUPO DE FORMULARIO
datos_personal = new FormGroup({ 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), sedePersonal : new FormControl(null,Validators.required),
areaPersonal : new FormControl<string>('' ,Validators.required),
codAreaPersona : new FormControl(),
minFechaTrabajo : new FormControl<Date>(new Date(), Validators.required), minFechaTrabajo : new FormControl<Date>(new Date(), Validators.required),
maxFechaTrabajo : 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({ datos_servicio = new FormGroup({
...@@ -395,12 +402,12 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -395,12 +402,12 @@ export class ConformidadComponent implements AfterViewInit {
descripcionTrabajo : new FormControl<string>('' ,Validators.required), descripcionTrabajo : new FormControl<string>('' ,Validators.required),
}); });
datos_pasajeAcumulado = new FormGroup<any>({ /*datos_pasajeAcumulado = new FormGroup<any>({
}); });
datos_lugarOrigen : FormGroup = 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({ existeMaterialS : FormGroup = new FormGroup({
existeMaterial : new FormControl(null ,Validators.required), existeMaterial : new FormControl(null ,Validators.required),
...@@ -465,10 +472,10 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -465,10 +472,10 @@ export class ConformidadComponent implements AfterViewInit {
this.personal_list = personal; this.personal_list = personal;
this.sede_list = sede; this.sede_list = sede;
this.dataSource = []; //this.dataSource = [];
this.activarPasajes = false; 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' // Detecta cambios en el formulario de Datos Personal exceptuando 'lugarDestinoPasaje' para desbloquear el boton de 'Agregar Pasaje'
this.datos_personal.valueChanges.subscribe(value => { this.datos_personal.valueChanges.subscribe(value => {
...@@ -480,13 +487,13 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -480,13 +487,13 @@ export class ConformidadComponent implements AfterViewInit {
this.activarPasajes = controlesInvalidos.length === 0 ? true : false; 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. // 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.dataSource = [];
this.indexPasaje = 0; this.indexPasaje = 0;
this.datos_pasajeAcumulado.reset(); this.datos_pasajeAcumulado.reset();
this.datos_fechaPasaje.reset(); this.datos_fechaPasaje.reset();
this.datos_lugarOrigen.reset(); this.datos_lugarOrigen.reset();
} }*/
}); });
// Sincronizar el valor de 'sedePersonal' con los selects la tabla de pasaje // Sincronizar el valor de 'sedePersonal' con los selects la tabla de pasaje
...@@ -496,14 +503,14 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -496,14 +503,14 @@ export class ConformidadComponent implements AfterViewInit {
}); });
//Sincroniza todos los inputs de monto de pasaje con el total de pasajes //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 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; 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 }); 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 //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; const lugarDestino = this.datos_personal.get('sedePersonal')?.value;
if(lugarDestino) { if(lugarDestino) {
...@@ -522,10 +529,10 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -522,10 +529,10 @@ export class ConformidadComponent implements AfterViewInit {
this.datos_personal.get('sedePersonal')?.setErrors({'incorrect': true}); 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 minFecha : any = this.datos_personal.get('minFechaTrabajo')?.value;
let maxFecha : any = value; let maxFecha : any = value;
...@@ -551,7 +558,7 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -551,7 +558,7 @@ export class ConformidadComponent implements AfterViewInit {
} }
}); });
} }
}); });*/
/*this.existeMaterialS.get('existeMaterial')?.valueChanges.subscribe((value) => { /*this.existeMaterialS.get('existeMaterial')?.valueChanges.subscribe((value) => {
console.log(value); console.log(value);
...@@ -603,24 +610,77 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -603,24 +610,77 @@ export class ConformidadComponent implements AfterViewInit {
this.listRequerimientos = this.listRequerimientos.filter((item) => item.id !== valor); 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 //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 codigoPer = event.value;
const personal_list = this.personal_list; const personal_list = this.personal_list;
const personal_datos = personal_list.find((item: any) => item.codper === codigoPer); 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{ }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 { ...@@ -645,17 +705,17 @@ export class ConformidadComponent implements AfterViewInit {
this.requerimientosFiltrados = mapeoResultado; this.requerimientosFiltrados = mapeoResultado;
} }
formatMontoPasaje(formGroup: FormGroup, formControlName: string) { /*formatMontoPasaje(formGroup: FormGroup, formControlName: string) {
//const control = this.datos_pasajeAcumulado.get('montoPasaje'+index); //const control = this.datos_pasajeAcumulado.get('montoPasaje'+index);
const control = this.obtenerFormControl(formGroup,formControlName); const control = this.obtenerFormControl(formGroup,formControlName);
if (control && control.value != null) { if (control && control.value != null) {
const formattedValue = this.decimalPipe.transform(control.value, '1.2-2'); const formattedValue = this.decimalPipe.transform(control.value, '1.2-2');
control.setValue(formattedValue, { emitEvent: false }); control.setValue(formattedValue, { emitEvent: false });
} }
} }*/
//AL SELECCIONAR LA OPCIÓN DE NUEVO PASAJE //AL SELECCIONAR LA OPCIÓN DE NUEVO PASAJE
onEventoNuevoPasaje(event : any){ /*onEventoNuevoPasaje(event : any){
const NuevaFila : interDetallePasaje = { const NuevaFila : interDetallePasaje = {
index: this.indexPasaje++, index: this.indexPasaje++,
lugarOrigen: '', lugarOrigen: '',
...@@ -684,9 +744,9 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -684,9 +744,9 @@ export class ConformidadComponent implements AfterViewInit {
this.activarPasajes = false; this.activarPasajes = false;
this.habilitarSeccionPersonal(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 lugarOrigen = this.obtenerFormControl(this.datos_lugarOrigen,`lugarOrigen${elemento.index}`)?.value;
const lugarDestino = this.obtenerFormControl(this.datos_personal,'sedePersonal')?.value || ''; const lugarDestino = this.obtenerFormControl(this.datos_personal,'sedePersonal')?.value || '';
...@@ -734,9 +794,9 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -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 lugarOrigen = this.datos_lugarOrigen.get('lugarOrigen'+index)?.value;
const lugarDestino = this.datos_personal.get('sedePersonal')?.value; const lugarDestino = this.datos_personal.get('sedePersonal')?.value;
const fechaPasaje = this.datos_fechaPasaje.get('fechaPasaje'+index)?.value; const fechaPasaje = this.datos_fechaPasaje.get('fechaPasaje'+index)?.value;
...@@ -748,9 +808,9 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -748,9 +808,9 @@ export class ConformidadComponent implements AfterViewInit {
return lugarOrigen && lugarDestino && fechaPasaje && montoPasaje && montoPasaje > 0 && lugarOrigen !== lugarDestino; 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 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 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 { ...@@ -771,12 +831,12 @@ export class ConformidadComponent implements AfterViewInit {
this.habilitarSeccionPersonal(true); this.habilitarSeccionPersonal(true);
this.activarPasajes = true this.activarPasajes = true
} }*/
//Editar una fila de pasaje //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) => { this.dataSource.forEach((item) => {
if (item.index === elemento.index) { if (item.index === elemento.index) {
...@@ -793,9 +853,9 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -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.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; 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á. //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); const dialogRef = this.dialog.open(ConfirmarEliminacionComponent);
...@@ -810,23 +870,23 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -810,23 +870,23 @@ export class ConformidadComponent implements AfterViewInit {
} }
} }
}); });
} }*/
habilitarSeccionPersonal(datos: boolean){ /*habilitarSeccionPersonal(datos: boolean){
if(datos){ if(datos){
this.datos_personal.get('tecnicoPersonal')?.enable({ emitEvent: false }); 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('areaPersonal')?.enable({ emitEvent: false });
this.datos_personal.get('sedePersonal')?.enable({ emitEvent: false });
this.datos_personal.get('maxFechaTrabajo')?.enable({ emitEvent: false }); this.datos_personal.get('maxFechaTrabajo')?.enable({ emitEvent: false });
this.datos_personal.get('minFechaTrabajo')?.enable({ emitEvent: false }); this.datos_personal.get('minFechaTrabajo')?.enable({ emitEvent: false });
}else{ }else{
this.datos_personal.get('tecnicoPersonal')?.disable({ emitEvent: false }); 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('areaPersonal')?.disable({ emitEvent: false });
this.datos_personal.get('sedePersonal')?.disable({ emitEvent: false });
this.datos_personal.get('maxFechaTrabajo')?.disable({ emitEvent: false }); this.datos_personal.get('maxFechaTrabajo')?.disable({ emitEvent: false });
this.datos_personal.get('minFechaTrabajo')?.disable({ emitEvent: false }); this.datos_personal.get('minFechaTrabajo')?.disable({ emitEvent: false });
} }
} }*/
onEventoSubirArchivo(event: any, tipo : number = 1) { onEventoSubirArchivo(event: any, tipo : number = 1) {
...@@ -891,7 +951,8 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -891,7 +951,8 @@ export class ConformidadComponent implements AfterViewInit {
//Obtener todos los datos del form Group datos_personal //Obtener todos los datos del form Group datos_personal
const datosPersonal = this.datos_personal.getRawValue(); 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 datosServicio = this.datos_servicio.getRawValue();
const requerimientoRelacionados = this.listRequerimientos; const requerimientoRelacionados = this.listRequerimientos;
const datosTrabajo = this.datos_trabajo.getRawValue(); const datosTrabajo = this.datos_trabajo.getRawValue();
...@@ -904,16 +965,19 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -904,16 +965,19 @@ export class ConformidadComponent implements AfterViewInit {
Notiflix.Loading.pulse(); // Muestra un loading Notiflix.Loading.pulse(); // Muestra un loading
if (!this.validarDatosPersonales(datosPersonal)) { if (!this.validarDatosPersonales(datosPersonal)) {
this.mostrarAlerta('VALIDAR DATOS PERSONALES'); this.mostrarAlerta('VALIDAR DATOS PERSONALES');
return; return;
} }
if (!this.validarPasajes(datosPasajes)) { if(!this.validarPersonal(personal)){
this.mostrarAlerta('VALIDAR PASAJES'); this.mostrarAlerta('VALIDAR PERSONAL ASIGNADO');
return; return;
} }
/*if (!this.validarPasajes(datosPasajes)) {
this.mostrarAlerta('VALIDAR PASAJES');
return;
}*/
if (!this.validarArchivos(archivosEvidencias)) { if (!this.validarArchivos(archivosEvidencias)) {
const tipoEvidencia = archivosEvidencias.find((item) => item.tipoEvidencia === 1) ? 2 : (archivosEvidencias.find((item) => item.tipoEvidencia === 2) ? 1 : 0 ); 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 { ...@@ -934,7 +998,7 @@ export class ConformidadComponent implements AfterViewInit {
const registroConformidad = await this.conformidadHelper.gestionConformidad({ const registroConformidad = await this.conformidadHelper.gestionConformidad({
opcion: 1, opcion: 1,
codper: datosPersonal.tecnicoPersonal, //codper: datosPersonal.tecnicoPersonal,
codlocal: datosPersonal.sedePersonal, codlocal: datosPersonal.sedePersonal,
fechainicio: this.formatoFechaRegistro(datosPersonal.minFechaTrabajo || new Date() ) , fechainicio: this.formatoFechaRegistro(datosPersonal.minFechaTrabajo || new Date() ) ,
fechafin: this.formatoFechaRegistro(datosPersonal.maxFechaTrabajo || new Date() ) , fechafin: this.formatoFechaRegistro(datosPersonal.maxFechaTrabajo || new Date() ) ,
...@@ -947,172 +1011,173 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -947,172 +1011,173 @@ export class ConformidadComponent implements AfterViewInit {
const respuestaConformidad : any = JSON.parse(registroConformidad); const respuestaConformidad : any = JSON.parse(registroConformidad);
let codigoConformidad = 0 ; let codigoConformidad = 0 ;
if(respuestaConformidad.status){ // DATOS DE CONFORMIDAD VALIDADOS Y REGISTRADOS if(respuestaConformidad.status){ // DATOS DE CONFORMIDAD VALIDADOS Y REGISTRADOS
let statusPasaje = true ;
codigoConformidad = respuestaConformidad.data.codconformidad; codigoConformidad = respuestaConformidad.data.codconformidad;
if(datosPasajes.length > 0){
//console.log(datosPasajes) let statusPersonal = true;
const datosPasaje = datosPasajes.map((item) => {
return { const datosPersonalTecnico = personal.map((item) => {
opcion: 2, return {
codconformidad : codigoConformidad, opcion : 8,
codlocal: this.datos_lugarOrigen.get('lugarOrigen'+item.index)?.value, codconformidad : codigoConformidad,
pasaje: Number( this.decimalPipe.transform(item.monto, '1.2-2') ) || 0, codper : item.id,
fechainicio: this.formatoFechaRegistro(item.fecha) }
};
}); });
for (let i=0; i < datosPasaje.length; i++){
const registroPasaje = await this.conformidadHelper.gestionConformidad(datosPasaje[i]); for (let i=0; i < datosPersonalTecnico.length; i++){
const respuestaPasaje = JSON.parse(registroPasaje); const registroRequerimiento = await this.conformidadHelper.gestionConformidad(datosPersonalTecnico[i]);
if(!respuestaPasaje.status) { const respuestaRequerimiento = JSON.parse(registroRequerimiento);
statusPasaje = false; if(!respuestaRequerimiento.status) {
statusPersonal = false;
break; 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) => { const datosRequerimientos = requerimientoRelacionados.map((item) => {
return { return {
opcion: 3, opcion: 3,
codconformidad : codigoConformidad, codconformidad: codigoConformidad,
codrequerimiento : parseInt(item.codigo) codrequerimiento: parseInt(item.codigo)
}; };
}); });
for (let i=0; i < datosRequerimientos.length; i++){
const registroRequerimiento = await this.conformidadHelper.gestionConformidad(datosRequerimientos[i]); for (let i = 0; i < datosRequerimientos.length; i++) {
const respuestaRequerimiento = JSON.parse(registroRequerimiento); const registroRequerimiento = await this.conformidadHelper.gestionConformidad(datosRequerimientos[i]);
if(!respuestaRequerimiento.status) { const respuestaRequerimiento = JSON.parse(registroRequerimiento);
statusRequerimientos = false; if (!respuestaRequerimiento.status) {
break; 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}); const registroCarpeta = await this.conformidadHelper.creacionCarpeta({codconformidad: codigoConformidad});
//console.log(registroEvidencia); //console.log(registroEvidencia);
if(registroCarpeta.status){ if (registroCarpeta.status) {
//UNIR LOS DATOS archivosEP Y archivosES EN UN SOLO ARRAY //UNIR LOS DATOS archivosEP Y archivosES EN UN SOLO ARRAY
let statusEvidencias = true; let statusEvidencias = true;
const registroArchivos = archivosEvidencias.map((item) => { const registroArchivos = archivosEvidencias.map((item) => {
return { return {
codconformidad: codigoConformidad, codconformidad: codigoConformidad,
archivo: item.file, archivo: item.file,
idCarpeta: registroCarpeta.idCarpeta, idCarpeta: registroCarpeta.idCarpeta,
tipoEvidencia: item.tipoEvidencia, tipoEvidencia: item.tipoEvidencia,
nombreArchivo: (item.tipoEvidencia === 1) ? 'EVIDENCIA_PROBLEMA_' + codigoConformidad + "_" + (contadorEP++) : 'EVIDENCIA_SOLUCION_' + codigoConformidad + "_" + (contadorES++) nombreArchivo: (item.tipoEvidencia === 1) ? 'EVIDENCIA_PROBLEMA_' + codigoConformidad + "_" + (contadorEP++) : 'EVIDENCIA_SOLUCION_' + codigoConformidad + "_" + (contadorES++)
}; };
}); });
const filtroEvidenciasProblemas = registroArchivos.filter((item) => item.tipoEvidencia === 1); const filtroEvidenciasProblemas = registroArchivos.filter((item) => item.tipoEvidencia === 1);
const filtroEvidenciasSoluciones = registroArchivos.filter((item) => item.tipoEvidencia === 2); 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); //console.log(registroEvidencia);
if(!(registroEvidencia[0].status && registroEvidencia[1].status)){ if (!(registroEvidencia[0].status && registroEvidencia[1].status)) {
statusEvidencias = false; 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({ const registroOrdenSalida = await this.conformidadHelper.gestionOrdenSalida({
accion: 1, accion: 1,
codper: datosPersonal.tecnicoPersonal, //codper: datosPersonal.tecnicoPersonal,
codlocal: datosPersonal.sedePersonal, codlocal: datosPersonal.sedePersonal,
fechaRegistro: this.formatoFechaRegistro(new Date()), fechaRegistro: this.formatoFechaRegistro(new Date()),
descripcion: datosMaterialSobrante 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) => { const datosMaterialSobrante = datosMaterial.map((item) => {
return { return {
accion: 2, accion: 2,
codOrdenSalida: respuestaOrdenSalida.data.codordensalida, codOrdenSalida: respuestaOrdenSalida.data.codordensalida,
codArticulo: item.codigoArticulo, codArticulo: item.codigoArticulo,
nombreArticulo : item.nombre, nombreArticulo: item.nombre,
unidad : item.unidad, unidad: item.unidad,
cantidad: item.cantidad, cantidad: item.cantidad,
estado: item.estado estado: item.estado
}; };
}); });
for (let i = 0; i < datosMaterial.length; i++) { for (let i = 0; i < datosMaterial.length; i++) {
const registroMaterialS = await this.conformidadHelper.gestionOrdenSalida(datosMaterialSobrante[i]); const registroMaterialS = await this.conformidadHelper.gestionOrdenSalida(datosMaterialSobrante[i]);
//console.log(registroMaterialS); //console.log(registroMaterialS);
const respuestaregistroMaterialS = JSON.parse(registroMaterialS); const respuestaregistroMaterialS = JSON.parse(registroMaterialS);
if (!respuestaregistroMaterialS.status) { if (!respuestaregistroMaterialS.status) {
statusOrdenSalida = false; statusOrdenSalida = false;
break; 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({ const relacionarOrdenConformidad = await this.conformidadHelper.gestionConformidad({
opcion : 6, opcion: 6,
codconformidad : codigoConformidad, codconformidad: codigoConformidad,
codordensalida : respuestaOrdenSalida.data.codordensalida codordensalida: respuestaOrdenSalida.data.codordensalida
}); });
//console.log(relacionarOrdenConformidad); //console.log(relacionarOrdenConformidad);
const respuestarelacionarOrdenConformidad = JSON.parse(relacionarOrdenConformidad); const respuestarelacionarOrdenConformidad = JSON.parse(relacionarOrdenConformidad);
if (!respuestarelacionarOrdenConformidad.status) { if (!respuestarelacionarOrdenConformidad.status) {
statusOrdenSalida = false; statusOrdenSalida = false;
}
} }
} else {
this.mostrarAlerta('ERROR AL REGISTRAR LOS ORDEN DE SALIDA');
} }
} else { } else {
this.mostrarAlerta('ERROR AL REGISTRAR LOS ORDEN DE SALIDA'); statusOrdenSalida = true;
} }
//console.log(statusOrdenSalida);
} else { if (statusOrdenSalida) {
statusOrdenSalida = true;
}
//console.log(statusOrdenSalida);
if (statusOrdenSalida) {
console.log("SE REGISTRO TODO CORRECTAMENTE"); console.log("SE REGISTRO TODO CORRECTAMENTE");
Notiflix.Loading.remove(); Notiflix.Loading.remove();
Notiflix.Notify.success('REGISTRO COMPLETADO'); Notiflix.Notify.success('REGISTRO COMPLETADO');
} else {
this.mostrarAlerta('ERROR AL REGISTRAR ORDEN DE SALIDA');
}
} else { } else {
this.mostrarAlerta('ERROR AL REGISTRAR ORDEN DE SALIDA'); this.mostrarAlerta('ERROR AL REGISTRAR LOS ARCHIVOS DE EVIDENCIAS');
} }
} else { } else {
this.mostrarAlerta('ERROR AL REGISTRAR LOS ARCHIVOS DE EVIDENCIAS'); this.mostrarAlerta('ERROR AL CREAR CARPETA DE EVIDENCIAS');
} }
}else{ } else {
this.mostrarAlerta('ERROR AL CREAR CARPETA DE EVIDENCIAS'); this.mostrarAlerta('ERROR AL REGISTRAR LOS REQUERIMIENTOS');
} }
}else{ }else{
this.mostrarAlerta('ERROR AL REGISTRAR LOS REQUERIMIENTOS'); this.mostrarAlerta('ERROR AL REGISTRAR EL PERSONAL');
} }
}else{
this.mostrarAlerta('ERROR AL REGISTRAR LOS PASAJES');
}
}else{ }else{
this.mostrarAlerta('ERROR AL REGISTRAR LA CONFORMIDAD'); this.mostrarAlerta('ERROR AL REGISTRAR LA CONFORMIDAD');
} }
...@@ -1120,11 +1185,15 @@ export class ConformidadComponent implements AfterViewInit { ...@@ -1120,11 +1185,15 @@ export class ConformidadComponent implements AfterViewInit {
} }
validarDatosPersonales(datosPersonal: any): boolean { validarDatosPersonales(datosPersonal: any): boolean {
return datosPersonal?.codAreaPersona && datosPersonal?.sedePersonal && return datosPersonal?.sedePersonal &&
datosPersonal?.tecnicoPersonal && datosPersonal?.maxFechaTrabajo && datosPersonal?.maxFechaTrabajo &&
datosPersonal?.minFechaTrabajo; datosPersonal?.minFechaTrabajo;
} }
validarPersonal(personal: any[]): boolean {
return personal.length > 0 && personal.every((item) => item.id != '0' && item.nombre != '');
}
validarPasajes(datosPasajes: any[]): boolean { validarPasajes(datosPasajes: any[]): boolean {
return (datosPasajes.length > 0 && datosPasajes.every((item) => item.lugarOrigen && item.lugarDestino && item.monto && item.fecha)) || datosPasajes.length === 0; 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 { ...@@ -277,7 +277,6 @@ export class ConformidadService {
const parametros = { const parametros = {
accion : json.accion || 0, accion : json.accion || 0,
codOrdenSalida : json.codOrdenSalida || 0, codOrdenSalida : json.codOrdenSalida || 0,
codper : json.codper || 0,
codlocal : json.codlocal || '', codlocal : json.codlocal || '',
descripcion: json.descripcion || '', descripcion: json.descripcion || '',
fechaRegistro : json.fechaRegistro || '', 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