listo hora tope y hora extra

This commit is contained in:
2022-08-06 19:26:32 -05:00
parent 83b3681f7e
commit 101cfb6275
6 changed files with 92 additions and 51 deletions
+37 -49
View File
@@ -3,6 +3,7 @@ import {
NotFoundException,
Injectable,
BadRequestException,
ForbiddenException,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import {
@@ -33,24 +34,52 @@ export class HoraExcepcionService {
const institucionDia = await this.institucionDiaService.findById(
id_institucion_dia,
);
const busqueda: {
hora_fin: FindOperator<string>;
hora_inicio: FindOperator<string>;
institucionDia: InstitucionDia;
}[] = [];
if (
admin.institucion.id_institucion !=
institucionDia.institucion.id_institucion
)
throw new ConflictException(
throw new ForbiddenException(
'No puedes crear una horario sin servicio en este día porque no le pertenece a tu institución.',
);
if (hora_inicio > hora_fin)
throw new ConflictException(
'La hora inicio no puede ser más mayor que la hora fin.',
throw new BadRequestException(
'La hora inicio no puede ser mayor que la hora fin.',
);
return this.validarHoras(institucionDia, hora_inicio, hora_fin)
.then(() =>
this.repository.save(
if (hora_inicio)
busqueda.push({
hora_fin: MoreThanOrEqual(hora_inicio),
hora_inicio: LessThanOrEqual(hora_inicio),
institucionDia,
});
if (hora_fin)
busqueda.push({
hora_fin: MoreThanOrEqual(hora_fin),
hora_inicio: LessThanOrEqual(hora_fin),
institucionDia,
});
return this.repository
.findOne({ where: busqueda })
.then((existeHoraExcepcion) => {
if (existeHoraExcepcion) {
if (
existeHoraExcepcion.hora_fin === hora_fin &&
existeHoraExcepcion.hora_inicio === hora_inicio
)
throw new ConflictException('Ya existe este horario sin servicio.');
throw new BadRequestException(
'Las horas escogídas se sobrelapan con otro horario sin servicio del mismo día.',
);
}
return this.repository.save(
this.repository.create({ institucionDia, hora_inicio, hora_fin }),
),
)
);
})
.then((_) => ({
message: 'Se creó correctamente un nuevo horario sin servicio.',
}));
@@ -94,45 +123,4 @@ export class HoraExcepcionService {
return horaExcepcion;
});
}
validarHoras(
institucionDia: InstitucionDia,
hora_inicio?: string,
hora_fin?: string,
) {
const busqueda: {
hora_fin: FindOperator<string>;
hora_inicio: FindOperator<string>;
institucionDia: InstitucionDia;
}[] = [];
if (hora_inicio)
busqueda.push({
hora_fin: MoreThanOrEqual(hora_inicio),
hora_inicio: LessThanOrEqual(hora_inicio),
institucionDia,
});
if (hora_fin)
busqueda.push({
hora_fin: MoreThanOrEqual(hora_fin),
hora_inicio: LessThanOrEqual(hora_fin),
institucionDia,
});
return this.repository
.findOne({
where: busqueda,
})
.then((existeHoraExcepcion) => {
if (existeHoraExcepcion) {
if (
existeHoraExcepcion.hora_fin === hora_fin &&
existeHoraExcepcion.hora_inicio === hora_inicio
)
throw new ConflictException('Ya existe este horario sin servicio.');
throw new BadRequestException(
'Las horas escogídas se sobrelapan con otro horario sin servicio del mismo día.',
);
}
});
}
}
@@ -8,6 +8,10 @@ export class UpdateInstitucionDiaDto {
@IsOptional()
activo?: boolean;
@IsMilitaryTime()
@IsOptional()
hora_extra?: string;
@IsMilitaryTime()
@IsOptional()
hora_fin?: string;
@@ -15,4 +19,8 @@ export class UpdateInstitucionDiaDto {
@IsMilitaryTime()
@IsOptional()
hora_inicio?: string;
@IsMilitaryTime()
@IsOptional()
hora_tope?: string;
}
@@ -9,12 +9,18 @@ export class InstitucionCarreaOutputDto {
@Expose()
activo;
@Expose()
hora_extra;
@Expose()
hora_fin;
@Expose()
hora_inicio;
@Expose()
hora_tope;
@Expose()
@Type(() => DiaOutputDto)
dia;
@@ -18,12 +18,18 @@ export class InstitucionDia {
@Column({ type: Boolean, nullable: false, default: false })
activo: boolean;
@Column({ type: String, nullable: false, default: '18:45', length: 5 })
hora_extra: string;
@Column({ type: String, nullable: false, default: '17:45', length: 5 })
hora_fin: string;
@Column({ type: String, nullable: false, default: '08:50', length: 5 })
hora_inicio: string;
@Column({ type: String, nullable: false, default: '20:00', length: 5 })
hora_tope: string;
@ManyToOne(() => Dia, (dia) => dia.institucionesDias, { eager: true })
@JoinColumn({ name: 'id_dia' })
dia: Dia;
@@ -91,8 +91,10 @@ export class InstitucionDiaController {
value: {
id_institucion_dia: 217,
_activo: true,
_hora_extra: '18:45',
_hora_fin: '17:45',
_hora_inicio: '09:00',
_hora_inicio: '08:50',
_hora_tope: '20:00',
},
},
},
+32 -1
View File
@@ -1,11 +1,17 @@
import * as moment from 'moment';
import {
BadRequestException,
ConflictException,
Injectable,
NotFoundException,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import {
FindOperator,
LessThanOrEqual,
MoreThanOrEqual,
Repository,
} from 'typeorm';
import { Institucion } from '../institucion/entity/institucion.entity';
import { InstitucionDia } from './entity/institucion-dia.entity';
import { Operador } from 'src/operador/entity/operador.entity';
@@ -74,6 +80,31 @@ export class InstitucionDiaService {
throw new ConflictException(
'No puedes actualizar la información de este día porque no le pertenece a tu institución.',
);
if (
(attrs.hora_inicio || attrs.hora_fin) &&
(attrs.hora_inicio || institucionDia.hora_inicio) >
(attrs.hora_fin || institucionDia.hora_fin)
)
throw new BadRequestException(
'La hora inicio no puede ser mayor que la hora fin.',
);
if (
(attrs.hora_fin || attrs.hora_extra) &&
(attrs.hora_fin || institucionDia.hora_fin) >
(attrs.hora_extra || institucionDia.hora_extra)
)
throw new BadRequestException(
'La hora fin no puede ser mayor que la hora extra.',
);
if (
(attrs.hora_extra || attrs.hora_tope) &&
(attrs.hora_extra || institucionDia.hora_extra) >
(attrs.hora_tope || institucionDia.hora_tope)
)
throw new BadRequestException(
'La hora extra no puede ser mayor que la hora tope.',
);
Object.assign(institucionDia, attrs);
return this.repository.save(institucionDia);
})