[EDIT] CAMBIOS PARA REGISTRO DE SALIDA

parent cc5b82e1
......@@ -30,9 +30,12 @@
<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?.codlocal">
{{option?.deslocal}}
<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>
......@@ -73,9 +76,12 @@
<ng-container *ngIf="element.isNew; else displayOrigen">
<mat-form-field [formGroup]="datos_lugarOrigen" appearance="outline">
<mat-select formControlName="lugarOrigen{{element.index}}" placeholder="[Seleccionar de origen]" required>
<mat-option *ngFor="let option of this.sede_list" [value]="option?.codlocal">
{{option?.deslocal}}
<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>
......@@ -104,7 +110,7 @@
<td mat-cell *matCellDef="let element">
<ng-container *ngIf="element.isNew; else displayOrigen">
<mat-form-field [formGroup]="datos_pasajeAcumulado" appearance="outline">
<input matInput formControlName="montoPasaje{{element.index}}" soloNumeros placeholder="[Monto]" value="" maxlength="6" (blur)="formatMontoPasaje(element.index)">
<input matInput formControlName="montoPasaje{{element.index}}" soloNumeros="decimal" placeholder="[Monto]" value="" maxlength="6" (blur)="formatMontoPasaje(this.datos_pasajeAcumulado,'montoPasaje'+element.index)">
</mat-form-field>
</ng-container>
<ng-template #displayOrigen>
......
......@@ -24,7 +24,6 @@ import {MatCheckboxModule} from '@angular/material/checkbox';
import {ConformidadHelper} from "./helper/conformidad.helper";
import {NgClass, NgForOf, NgIf, DatePipe, AsyncPipe, NgStyle} from "@angular/common";
import {MatCard, MatCardContent, MatCardFooter, MatCardHeader, MatCardTitle , MatCardModule} from '@angular/material/card';
import { debounceTime, distinctUntilChanged, switchMap } from 'rxjs/operators';
import {MatAutocompleteModule} from '@angular/material/autocomplete';
import {MatTooltipModule} from '@angular/material/tooltip';
import {MatDialog, MatDialogModule} from '@angular/material/dialog';
......@@ -47,6 +46,11 @@ interface tiposTrabajo {
viewValue: string;
}
interface lugaresTrabajo {
value : string;
viewValue : string;
}
interface interRequerimientos {
id: number;
titulo: string;
......@@ -132,6 +136,203 @@ export class ConformidadComponent implements AfterViewInit {
// VIEWCHILD
// INICIALIZACION DE SEDES
listadoSedesTrabajo : lugaresTrabajo[] = [
{
"value": '1',
"viewValue": "6 DE AGOSTO"
},
{
"value": '2',
"viewValue": "ADMINISTRACION - SAN ISIDRO"
},
{
"value": '3',
"viewValue": "ANIVERSARIO"
},
{
"value": '4',
"viewValue": "ARENALES"
},
{
"value": '5',
"viewValue": "AREQUIPA"
},
{
"value": '6',
"viewValue": "BARRANCO"
},
{
"value": '7',
"viewValue": "BELISARIO"
},
{
"value": '8',
"viewValue": "BELLAVISTA"
},
{
"value": '9',
"viewValue": "BELLIDO"
},
{
"value": '10',
"viewValue": "CALCA"
},
{
"value": '11',
"viewValue": "CANTA CALLAO"
},
{
"value": '12',
"viewValue": "CARABAYLLO"
},
{
"value": '13',
"viewValue": "CASONA"
},
{
"value": '14',
"viewValue": "CHACLACAYO"
},
{
"value": '15',
"viewValue": "CHORRILLOS"
},
{
"value": '16',
"viewValue": "CIPRESES"
},
{
"value": '17',
"viewValue": "CIPRESES ELIO"
},
{
"value": '18',
"viewValue": "OBRA"
},
{
"value": '19',
"viewValue": "CUBA"
},
{
"value": '20',
"viewValue": "EL AGUSTINO"
},
{
"value": '21',
"viewValue": "ATE - GRAFICA"
},
{
"value": '22',
"viewValue": "HUANCAYO"
},
{
"value": '23',
"viewValue": "HUARAL"
},
{
"value": '24',
"viewValue": "ICA"
},
{
"value": '25',
"viewValue": "INDEPENDENCIA - ACADEMIA"
},
{
"value": '26',
"viewValue": "INGENIEROS"
},
{
"value": '27',
"viewValue": "LA VICTORIA"
},
{
"value": '28',
"viewValue": "LINCE"
},
{
"value": '29',
"viewValue": "ATE - LOGISTICA"
},
{
"value": '30',
"viewValue": "TALLER"
},
{
"value": '31',
"viewValue": "COCALENOS"
},
{
"value": '32',
"viewValue": "MIGUEL IGLESIAS"
},
{
"value": '33',
"viewValue": "MONTERRICO"
},
{
"value": '34',
"viewValue": "MONTESSORI"
},
{
"value": '35',
"viewValue": "NARANJAL"
},
{
"value": '36',
"viewValue": "PUEBLO LIBRE"
},
{
"value": '37',
"viewValue": "QUILCA"
},
{
"value": '38',
"viewValue": "SALAMANCA"
},
{
"value": '39',
"viewValue": "SAN CARLOS"
},
{
"value": '40',
"viewValue": "SAN JUAN - ACADEMIA"
},
{
"value": '41',
"viewValue": "SAN LUIS GERONA"
},
{
"value": '42',
"viewValue": "SAN LUIS BADAJOZ"
},
{
"value": '43',
"viewValue": "SAN MIGUEL"
},
{
"value": '44',
"viewValue": "SANTA ANITA"
},
{
"value": '45',
"viewValue": "SANTA ANITA - ACADEMIA"
},
{
"value": '46',
"viewValue": "SORIA"
},
{
"value": '47',
"viewValue": "VILLA EL SALVADOR"
},
{
"value": '48',
"viewValue": "VILLA SOL"
}
];
//INICIALIZACION DE LISTADO DE TIPOS DE TRABAJO
listTipoTrabajo: tiposTrabajo[] = [
{value: '1', viewValue: 'Instalación-Revisión'},
......@@ -247,7 +448,7 @@ export class ConformidadComponent implements AfterViewInit {
}
formatoFechaRegistro(fecha: Date){
return this.datePipe.transform(fecha, 'yyyy-mm-dd') || '';
return this.datePipe.transform(fecha, 'yyyy-MM-dd') || '';
}
......@@ -258,7 +459,8 @@ export class ConformidadComponent implements AfterViewInit {
sede
] = await Promise.all([
this.conformidadHelper.cargarPersonal(),
this.conformidadHelper.listadoGeneralHorizon({accion: 1}),
//this.conformidadHelper.listadoGeneralHorizon({accion: 1}),
this.listadoSedesTrabajo
]);
this.personal_list = personal;
......@@ -288,15 +490,15 @@ export class ConformidadComponent implements AfterViewInit {
});
// Sincronizar el valor de 'sedePersonal' con los selects la tabla de pasaje
//this.datos_personal.get('sedePersonal')?.valueChanges.subscribe((value) => {
this.obtenerFormControl(this.datos_personal,'sedePersonal')?.valueChanges.subscribe((value : any) => {
this.lugarDestinoPasaje = this.sede_list.find((item: any) => item.codlocal === value)?.deslocal || '';
//this.lugarDestinoPasaje = this.sede_list.find((item: any) => item.codlocal === value)?.deslocal || '';
this.lugarDestinoPasaje = this.listadoSedesTrabajo.find((item: any) => item.value === value)?.viewValue || '';
});
//Sincroniza todos los inputs de monto de pasaje con el total de pasajes
this.datos_pasajeAcumulado.valueChanges.subscribe(values => {
const inputControls = Object.keys(values).filter(key => key.includes('montoPasaje'));
const sum : number = (inputControls.reduce((acc, key) => acc + (Number(values[key]) || 0), 0) ) || 0;
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 });
});
......@@ -342,7 +544,7 @@ export class ConformidadComponent implements AfterViewInit {
let fechaPasajeDate = new Date(fechaPasaje);
if(fechaPasajeDate >= (this.minFechaLimite || new Date()) && fechaPasajeDate <= (this.maxFechaLimite|| new Date()) ){
this.datos_fechaPasaje.get(key)?.setErrors({'incorrect': false});
}else{
} else{
this.datos_fechaPasaje.get(key)?.setErrors({'incorrect': true});
this.datos_fechaPasaje.get(key)?.setValue('');
}
......@@ -443,8 +645,9 @@ export class ConformidadComponent implements AfterViewInit {
this.requerimientosFiltrados = mapeoResultado;
}
formatMontoPasaje(index : any) {
const control = this.datos_pasajeAcumulado.get('montoPasaje'+index);
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 });
......@@ -498,8 +701,10 @@ export class ConformidadComponent implements AfterViewInit {
const index = this.dataSource.findIndex((item) => item.index === elemento.index);
this.dataSource[index] = {
index: elemento.index,
lugarOrigen: this.sede_list.find((item: any) => item.codlocal === lugarOrigen)?.deslocal || '' ,
lugarDestino: this.sede_list.find((item: any) => item.codlocal === lugarDestino)?.deslocal || '' ,
//lugarOrigen: this.sede_list.find((item: any) => item.codlocal === lugarOrigen)?.deslocal || '' ,
//lugarDestino: this.sede_list.find((item: any) => item.codlocal === lugarDestino)?.deslocal || '' ,
lugarOrigen : this.listadoSedesTrabajo.find((item: any) => item.value === lugarOrigen)?.viewValue || '',
lugarDestino : this.listadoSedesTrabajo.find((item: any) => item.value === lugarDestino)?.viewValue || '',
monto: pasaje,
fecha: fechaPasaje,
isNew: false,
......@@ -699,39 +904,6 @@ export class ConformidadComponent implements AfterViewInit {
Notiflix.Loading.pulse(); // Muestra un loading
/*const codigoprueba = 50;
let statusEvidencias = true;
const registroCarpeta = await this.conformidadHelper.creacionCarpeta({codconformidad: codigoprueba});
if (registroCarpeta.status) {
const registroArchivos = archivosEvidencias.map((item) => {
return {
codconformidad: codigoprueba,
archivo: item.file,
idCarpeta: registroCarpeta.idCarpeta,
tipoEvidencia: item.tipoEvidencia,
nombreArchivo: (item.tipoEvidencia === 1) ? 'EVIDENCIA_PROBLEMA_' + codigoprueba + "_" + (contadorEP++) : 'EVIDENCIA_SOLUCION_' + codigoprueba + "_" + (contadorES++)
};
});
//console.log(registroEvidencia);
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)]);
console.log(registroEvidencia);
if (!(registroEvidencia[0].status && registroEvidencia[1].status)) {
statusEvidencias = false;
}
}
console.log(statusEvidencias);
Notiflix.Loading.remove();*/
if (!this.validarDatosPersonales(datosPersonal)) {
this.mostrarAlerta('VALIDAR DATOS PERSONALES');
......@@ -786,7 +958,7 @@ export class ConformidadComponent implements AfterViewInit {
opcion: 2,
codconformidad : codigoConformidad,
codlocal: this.datos_lugarOrigen.get('lugarOrigen'+item.index)?.value,
pasaje: item.monto,
pasaje: Number( this.decimalPipe.transform(item.monto, '1.2-2') ) || 0,
fechainicio: this.formatoFechaRegistro(item.fecha)
};
});
......@@ -847,6 +1019,7 @@ export class ConformidadComponent implements AfterViewInit {
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;
}
......@@ -867,8 +1040,6 @@ export class ConformidadComponent implements AfterViewInit {
descripcion: datosMaterialSobrante
});
//console.log(registroOrdenSalida);
const respuestaOrdenSalida: any = JSON.parse(registroOrdenSalida);
if (respuestaOrdenSalida.status) {
......@@ -878,6 +1049,8 @@ export class ConformidadComponent implements AfterViewInit {
accion: 2,
codOrdenSalida: respuestaOrdenSalida.data.codordensalida,
codArticulo: item.codigoArticulo,
nombreArticulo : item.nombre,
unidad : item.unidad,
cantidad: item.cantidad,
estado: item.estado
};
......
......@@ -27,9 +27,9 @@ import {MatTableModule} from "@angular/material/table";
],
standalone: true,
template: `
<h1 mat-dialog-title>Confirmar Eliminación</h1>
<h1 mat-dialog-title>Confirmar eliminación pasaje</h1>
<div mat-dialog-content>
<p>¿Estás seguro de que deseas eliminar este registro?</p>
<p>¿Estás seguro de que deseas eliminar este pasaje?</p>
</div>
<div mat-dialog-actions>
<button mat-button (click)="onCancelar()">Cancelar</button>
......
......@@ -81,7 +81,6 @@ export class modalRequerimientoComponent implements OnInit{
fechaRegistro : item.fechaRegistro
}
}) || [];
console.log(datosPrincipales);
if(datosPrincipales[0]){
//Obtener los valores de descripcion, observacion, sede y empleado por separado y en un solo objeto
......@@ -99,8 +98,6 @@ export class modalRequerimientoComponent implements OnInit{
//this.detalleRequerimiento = data.requerimientoInfo
//this.filasRequerimientos =
console.log(this.detalleRequerimiento);
}
ngOnInit(): void {
......
......@@ -29,7 +29,8 @@
<ng-container matColumnDef="nombre">
<th mat-header-cell *matHeaderCellDef> NOMBRE DE ARTÍCULO </th>
<td mat-cell *matCellDef="let element">
<ng-container *ngIf="element.isNew; else displayOrigen">
<!-- DESBLOQUEAR DESPUES -->
<!-- <ng-container *ngIf="element.isNew; else displayOrigen">
<mat-form-field class="w-[25rem]">
<input type="text" placeholder="Buscar artículos" matInput formControlName="articulo{{element.index}}" [matAutocomplete]="auto" maxlength="9"
(input)="onBusquedaArticulo($event,element.index)">
......@@ -39,6 +40,11 @@
</mat-option>
</mat-autocomplete>
</mat-form-field>
</ng-container> -->
<ng-container *ngIf="element.isNew; else displayOrigen">
<mat-form-field class="w-[25rem]">
<input type="text" placeholder="Buscar artículos" matInput formControlName="articulo{{element.index}}">
</mat-form-field>
</ng-container>
<ng-template #displayOrigen>
{{ element.nombre }}
......@@ -50,8 +56,17 @@
<ng-container matColumnDef="unidad">
<th mat-header-cell *matHeaderCellDef> UNIDAD </th>
<td mat-cell *matCellDef="let element">
<ng-container *ngIf="element.isNew; else displayOrigen">
<!-- <ng-container *ngIf="element.isNew; else displayOrigen">
<mat-label>{{formGroupMS(2,'unidad'+element.index)?.value}}</mat-label>
</ng-container> -->
<ng-container *ngIf="element.isNew; else displayOrigen">
<mat-form-field appearance="outline">
<mat-select formControlName="unidad{{element.index}}" required>
<mat-option *ngFor="let option of this.listUnidades" [value]="option?.codigo">
{{option?.nombre}}
</mat-option>
</mat-select>
</mat-form-field>
</ng-container>
<ng-template #displayOrigen>
{{ element.unidad }}
......@@ -65,7 +80,7 @@
<td mat-cell *matCellDef="let element">
<ng-container *ngIf="element.isNew; else displayOrigen">
<mat-form-field class="w-[10rem]" appearance="outline">
<input matInput formControlName="cantidad{{element.index}}" soloNumeros maxlength="2">
<input matInput formControlName="cantidad{{element.index}}" soloNumeros="entero" maxlength="2">
</mat-form-field>
</ng-container>
<ng-template #displayOrigen>
......
......@@ -41,11 +41,16 @@ interface interArticulo{
acciones: boolean;
}
interface estadosArticulo {
interface interEstados {
valor: string;
nombre: string;
}
interface interUnidad {
codigo: string;
nombre: string;
}
@Component({
selector: 'ordensalida-component',
templateUrl: './ordensalida.componente.html',
......@@ -116,10 +121,11 @@ export class ordenSalidaComponent implements OnInit {
// INICIALIZACION DATOS
columnasArticulos: string[] = ['nombre', 'unidad', 'cantidad', 'estado', 'accion'];
articulosList: any[] = [];
listUnidades : interUnidad[] = [];
activarNuevoArticulo: boolean = true;
indexArticulo: number = 0;
public dataSource: interArticulo[] = [];
listEstadoArticulo: estadosArticulo[] = [{ valor: '1', nombre: 'BUENO'}, { valor: '2', nombre: 'OBSERVACIÓN' },{ valor: '3', nombre: 'MAL ESTADO' } ]
listEstadoArticulo: interEstados[] = [{ valor: '1', nombre: 'BUENO'}, { valor: '2', nombre: 'OBSERVACIÓN' },{ valor: '3', nombre: 'MAL ESTADO' } ]
// INICIALIZACION DATOS
// OBTENER DATOS DEL FORM GROUP
......@@ -143,11 +149,17 @@ export class ordenSalidaComponent implements OnInit {
private datePipe: DatePipe,
) {
this.articulosList = [];
//this.codigoUnidad = '';
}
ngOnInit(): void {
async ngOnInit(): Promise<void> {
this.dataSource = [];
const jsonParametrosArti = {
accion : 5
};
const unidadList = await this.conformidadHelper.listadoGeneralHorizon(jsonParametrosArti) ;
this.listUnidades = unidadList.map((item: any) => ({codigo: item.CODIGO , nombre: item.NOMBRE}));
}
onAgregarArticulo(event : any){
......@@ -208,7 +220,7 @@ export class ordenSalidaComponent implements OnInit {
};
console.log(this.dataSource);
//console.log(this.dataSource);
//console.log(lugarOrigen , lugarDestino, pasaje, fechaPasaje)
this.dataSource.forEach((item) => { item.acciones = true; }); // VUELVE A ACTIVAR TODAS LAS ACCION
......@@ -249,6 +261,7 @@ export class ordenSalidaComponent implements OnInit {
this.dataSource.forEach((item) => { item.acciones = true; }); // Que todas las filas vuelvan a tener las acciones
if(this.dataSource[index].isEdit){
this.dataSource[index].isEdit = false;
this.dataSource[index].isNew = false;
this.dataSource = [...this.dataSource];
......@@ -302,7 +315,7 @@ export class ordenSalidaComponent implements OnInit {
});
}
async onBusquedaArticulo(event: any , index : number) {
async onBusquedaArticulo(event: any , index : number) { // OMITIR LA BUSQUEDA POR AHORA YA QUE NO CONOCEN LOS ARTICULOS
const busquedaArt = event.target.value;
......@@ -311,8 +324,6 @@ export class ordenSalidaComponent implements OnInit {
nombreValor : busquedaArt,
};
console.log(jsonParametrosArti);
const articulos_list = await this.conformidadHelper.listadoGeneralHorizon(jsonParametrosArti) ;
const mapeoResultado = articulos_list.map((item: any) => ({
codigo: item.codigoProducto,
......@@ -321,10 +332,9 @@ export class ordenSalidaComponent implements OnInit {
}));
this.articulosList = mapeoResultado;
console.log(this.articulosList);
}
onSeleccionArticulo(event: MatAutocompleteSelectedEvent,index : number) {
onSeleccionArticulo(event: MatAutocompleteSelectedEvent,index : number) { // OMITIR LA BUSQUEDA POR AHORA YA QUE NO CONOCEN LOS ARTICULOS
//AL SELECCIONAR , SE OPTIENE EL VALUE
const selectedOption = event.option.value;
......@@ -332,7 +342,7 @@ export class ordenSalidaComponent implements OnInit {
//SE BUSCA EL VALUE DENTRO DEL LISTADO DE ARTICULOS
const articulo = this.articulosList.find((item) => item.codigo === selectedOption);
console.log(articulo);
//console.log(articulo);
//SE OPTIENE EL NOMBRE PARA PONERLO EN EL INPUT
this.formGroupMS(2,'articulo'+index)?.setValue(articulo.nombre);
this.formGroupMS(2,'codigoArticulo'+index)?.setValue(articulo.codigo);
......@@ -342,28 +352,6 @@ export class ordenSalidaComponent implements OnInit {
//SE VUELVE A LIMPIAR EL LISTADO DE ARTICULOS PARA DEJAR PASO A OTRA FUTURA BUSQUEDA.
this.articulosList = [];
/*const valor = event.option.value;
if(this.listRequerimientos.find((item) => item.codigo === valor)){
this.labelText = 'Ya existe el requerimiento ' + valor + ' en el listado'; // Cambia el texto
this.isFading = false; // Resetea el estado de opacidad para mostrar el texto
// Después de 2 segundos, comienza a desvanecer el texto
setTimeout(() => {
this.isFading = true;
}, 2000); // 2000 ms = 2 segundos
}else{
this.listRequerimientos.push({ titulo: `RQ N°${valor}`, id: this.idBotones++ , codigo: valor });
this.labelText = '';
}
this.datos_servicio.get('busquedaReq')?.setValue('');
this.inputBusqueda.nativeElement.blur();
this.detectorChange.detectChanges();
this.requerimientosFiltrados = [];
}*/
}
formatoEstado(estado: any) {
......
......@@ -76,7 +76,7 @@ export class ConformidadService {
try {
const respuesta = await axios.post(this.t_facturacion_electronica_link + '/api/v1/conformidad/registrarConformidad', Parametros);
console.log(respuesta);
//console.log(respuesta);
return respuesta.data;
} catch (e) {
return e;
......@@ -227,9 +227,6 @@ export class ConformidadService {
nombreDocumento: datos.nombreArchivo || ''
});
console.log(registroEvidencia);
if (responseBody?.status) {
respuesta = {status: true, message: "Imagenes subidas"};
} else {
......@@ -285,6 +282,8 @@ export class ConformidadService {
descripcion: json.descripcion || '',
fechaRegistro : json.fechaRegistro || '',
codArticulo : json.codArticulo || '',
nombreArticulo : json.nombreArticulo || '',
unidad : json.unidad || '-',
cantidad : json.cantidad || 0,
estado : json.estado || 0,
......@@ -298,31 +297,4 @@ export class ConformidadService {
}
}
/*async listadoRequerimientos(json: any) {
const parametros =[
json.accion || 0,
json.nombreValor || '',
json.sede || '',
]
try {
const respuesta = await axios.post(this.t_horizon_rest_link + '/api/procedure/Procedimiento',
{
database: "sqlserver",
procedure :"USP_GENERAL_FORMULARIO",
params : parametros
},
{
headers: {
'Content-Type': 'application/json'
}
});
return respuesta.data;
} catch (e) {
return e;
}
}*/
}
import { Directive ,HostListener } from '@angular/core';
import { Directive ,HostListener , Input } from '@angular/core';
@Directive({
selector: '[soloNumeros]',
......@@ -7,14 +7,28 @@ import { Directive ,HostListener } from '@angular/core';
export class SoloNumerosDirective {
@Input() soloNumeros?: 'decimal' | 'entero';
//constructor() { }
@HostListener('keypress', ['$event'])
onKeyPress(event: KeyboardEvent) {
const charCode = event.key;
// Permitir solo números (0-9)
if (this.soloNumeros === 'entero') {
// Permitir solo números enteros (0-9)
if (!/^[0-9]*$/.test(charCode)) {
event.preventDefault();
}
} else if (this.soloNumeros === 'decimal') {
if (!/^[0-9.]*$/.test(charCode)) {
event.preventDefault();
}
} else {
if (!/^[0-9]*$/.test(charCode)) {
event.preventDefault();
}
}
}
}
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