new ep equipo por equipo and equipo por dia

This commit is contained in:
2026-02-19 09:29:05 -06:00
parent cba8ec6d0e
commit 23acb847c3
4 changed files with 110 additions and 16 deletions
@@ -75,6 +75,6 @@ export class AlumnoInscrito {
@OneToMany(() => BitacoraMesa, (bitacoraMesa) => bitacoraMesa.alumno_inscrito)
bitacoras_mesa: BitacoraMesa[];
@OneToMany(() => Bitacora, (bitacora) => bitacora.equipo)
@OneToMany(() => Bitacora, (bitacora) => bitacora.alumno_inscrito)
bitacoras: Bitacora[];
}
+21 -2
View File
@@ -1,10 +1,10 @@
import { Controller, Get, Post, Body, Param, Patch } from '@nestjs/common';
import { BitacoraService } from './bitacora.service';
import { CreateBitacoraDto } from './dto/create-bitacora.dto';
import { BitacoraAlumnoDto, CreateBitacoraDto, EquiposPorEquipoDto } from './dto/create-bitacora.dto';
@Controller('bitacora')
export class BitacoraController {
constructor(private readonly bitacoraService: BitacoraService) {}
constructor(private readonly bitacoraService: BitacoraService) { }
@Post()
assignment(@Body() createBitacoraDto: CreateBitacoraDto) {
@@ -33,4 +33,23 @@ export class BitacoraController {
findAll() {
return this.bitacoraService.findAll();
}
@Post('equipos-por-dia')
async obtenerEquipos(
@Body() dto: BitacoraAlumnoDto
) {
return this.bitacoraService.obtenerEquiposPorAlumnoYFecha(
dto.numero_cuenta,
dto.fecha,
);
}
@Post('equipos-por-equipo')
async equiposPorEquipo(
@Body() dto: EquiposPorEquipoDto,
) {
return this.bitacoraService.equiposPorEquipo(dto);
}
}
+61 -2
View File
@@ -1,5 +1,5 @@
import { Injectable, NotFoundException } from '@nestjs/common';
import { CreateBitacoraDto } from './dto/create-bitacora.dto';
import { CreateBitacoraDto, EquiposPorEquipoDto } from './dto/create-bitacora.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Bitacora } from './entities/bitacora.entity';
import { Repository } from 'typeorm';
@@ -9,7 +9,7 @@ export class BitacoraService {
constructor(
@InjectRepository(Bitacora)
private readonly bitacoraRepository: Repository<Bitacora>,
) {}
) { }
assignment(dto: CreateBitacoraDto) {
const bitacora = this.bitacoraRepository.create({
@@ -91,4 +91,63 @@ export class BitacoraService {
return { message: 'Tiempo cancelado' };
}
async obtenerEquiposPorAlumnoYFecha(numeroCuenta: string, fecha: string) {
const fechaInicio = new Date(`${fecha}T00:00:00`);
const fechaFin = new Date(`${fecha}T23:59:59`);
return await this.bitacoraRepository
.createQueryBuilder('bitacora')
.innerJoinAndSelect('bitacora.equipo', 'equipo')
.innerJoin('bitacora.alumno_inscrito', 'alumnoInscrito')
.innerJoin('alumnoInscrito.alumno', 'alumno')
.where('alumno.id_cuenta = :numeroCuenta', { numeroCuenta })
.andWhere('bitacora.tiempo_entrada BETWEEN :inicio AND :fin', {
inicio: fechaInicio,
fin: fechaFin,
})
.select([
'bitacora.tiempo_entrada',
'bitacora.tiempo_asignado',
'equipo.ubicacion',
'equipo.nombre_equipo'
])
.getMany();
}
async equiposPorEquipo(dto: EquiposPorEquipoDto) {
const { id_equipo, fecha } = dto;
const inicio = new Date(`${fecha}T00:00:00`);
const fin = new Date(`${fecha}T23:59:59`);
const registros = await this.bitacoraRepository
.createQueryBuilder('bitacora')
.innerJoinAndSelect('bitacora.equipo', 'equipo')
.innerJoinAndSelect('bitacora.alumno_inscrito', 'alumnoInscrito')
.innerJoinAndSelect('alumnoInscrito.alumno', 'alumno')
.where('equipo.id_equipo = :id_equipo', { id_equipo })
.andWhere('bitacora.tiempo_entrada BETWEEN :inicio AND :fin', {
inicio,
fin,
})
.select([
'bitacora.tiempo_entrada',
'bitacora.tiempo_asignado',
'alumno.id_cuenta'
])
.orderBy('bitacora.tiempo_entrada', 'DESC')
.getMany();
return registros.map(reg => ({
hora_entrada: reg.tiempo_entrada,
min_utilizados: reg.tiempo_asignado,
hora_salida: new Date(
new Date(reg.tiempo_entrada).getTime() +
reg.tiempo_asignado * 60000
),
cuenta_asociada: reg.alumno_inscrito?.alumno?.id_cuenta
}));
}
}
+27 -11
View File
@@ -1,16 +1,32 @@
import { IsInt, IsOptional, IsString } from "class-validator";
import { IsDateString, IsInt, IsNumber, IsNumberString, IsOptional, IsString } from "class-validator";
export class CreateBitacoraDto {
@IsInt()
tiempo_asignado: number;
@IsInt()
tiempo_asignado: number;
@IsOptional()
@IsString()
ubicacion?: string;
@IsOptional()
@IsString()
ubicacion?: string;
@IsInt()
id_equipo: number;
@IsInt()
id_equipo: number;
@IsInt()
id_alumno_inscrito: number;
}
@IsInt()
id_alumno_inscrito: number;
}
export class BitacoraAlumnoDto {
@IsNumberString()
numero_cuenta: string;
@IsDateString()
fecha: string;
}
export class EquiposPorEquipoDto {
@IsNumber()
id_equipo: number;
@IsString()
fecha: string;
}