new ep findAllInscritos and findByDate
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
import { Controller, Get, Post, Body, Param, Patch } from '@nestjs/common';
|
||||
import { AlumnoInscritoService } from './alumno_inscrito.service';
|
||||
import {
|
||||
AddTimeDto,
|
||||
CreateAlumnoInscritoDto,
|
||||
} from './dto/create-alumno_inscrito.dto';
|
||||
import { AlumnoInscrito } from './entities/alumno_inscrito.entity';
|
||||
|
||||
@Controller('alumno-inscrito')
|
||||
export class AlumnoInscritoController {
|
||||
constructor(private readonly alumnoInscritoService: AlumnoInscritoService) {}
|
||||
constructor(private readonly alumnoInscritoService: AlumnoInscritoService) { }
|
||||
|
||||
@Post()
|
||||
async create(@Body() dto: CreateAlumnoInscritoDto): Promise<AlumnoInscrito> {
|
||||
@@ -20,6 +19,11 @@ export class AlumnoInscritoController {
|
||||
return this.alumnoInscritoService.findAll();
|
||||
}
|
||||
|
||||
@Get("/inscritos/:idPeriodo")
|
||||
async findAllInscritos(@Param('idPeriodo') idPeriodo:number) {
|
||||
return this.alumnoInscritoService.findAllInscritos(idPeriodo);
|
||||
}
|
||||
|
||||
// @Post('/tiempo')
|
||||
// async addTime(@Body() body: AddTimeDto) {
|
||||
// const { idCuenta, idPlataforma, tiempoExtra } = body;
|
||||
|
||||
@@ -17,7 +17,7 @@ export class AlumnoInscritoService {
|
||||
@InjectRepository(Plataforma)
|
||||
private readonly plataformaRepo: Repository<Plataforma>,
|
||||
private readonly periodoService: PeriodoService,
|
||||
) {}
|
||||
) { }
|
||||
|
||||
async createWhitoutPay(
|
||||
dto: CreateAlumnoInscritoDto,
|
||||
@@ -55,6 +55,35 @@ export class AlumnoInscritoService {
|
||||
});
|
||||
}
|
||||
|
||||
async findAllInscritos(idPeriodo: number) {
|
||||
return this.alumnoInscritoRepo
|
||||
.createQueryBuilder('inscritos')
|
||||
|
||||
// Relaciones
|
||||
.innerJoin('inscritos.alumno', 'alumno')
|
||||
.innerJoin('alumno.carrera', 'carrera')
|
||||
.innerJoin('inscritos.plataforma', 'plataforma')
|
||||
.innerJoin('inscritos.periodo', 'periodo')
|
||||
|
||||
// Filtro por periodo
|
||||
.where('periodo.id_periodo = :idPeriodo', { idPeriodo })
|
||||
|
||||
// Selecciones
|
||||
.select([
|
||||
'carrera.carrera AS carrera',
|
||||
'alumno.genero AS genero',
|
||||
'plataforma.nombre AS profesor',
|
||||
'COUNT(DISTINCT alumno.id_cuenta) AS total'
|
||||
])
|
||||
|
||||
// Agrupaciones
|
||||
.groupBy('carrera.carrera')
|
||||
.addGroupBy('alumno.genero')
|
||||
.addGroupBy('plataforma.nombre')
|
||||
|
||||
.getRawMany();
|
||||
}
|
||||
|
||||
async findAllPlataforma() {
|
||||
return this.plataformaRepo.find();
|
||||
}
|
||||
|
||||
@@ -8,11 +8,11 @@ import {
|
||||
Delete,
|
||||
} from '@nestjs/common';
|
||||
import { BitacoraMesaService } from './bitacora_mesa.service';
|
||||
import { CreateBitacoraMesaDto } from './dto/create-bitacora_mesa.dto';
|
||||
import { CreateBitacoraMesaDto, FindByDate } from './dto/create-bitacora_mesa.dto';
|
||||
|
||||
@Controller('bitacora-mesa')
|
||||
export class BitacoraMesaController {
|
||||
constructor(private readonly bitacoraMesaService: BitacoraMesaService) {}
|
||||
constructor(private readonly bitacoraMesaService: BitacoraMesaService) { }
|
||||
|
||||
@Post()
|
||||
assignment(@Body() createBitacoraMesaDto: CreateBitacoraMesaDto) {
|
||||
@@ -39,6 +39,11 @@ export class BitacoraMesaController {
|
||||
return this.bitacoraMesaService.findByTable(id_mesa);
|
||||
}
|
||||
|
||||
@Post('/date')
|
||||
findByDate(@Body() data: FindByDate) {
|
||||
return this.bitacoraMesaService.findByDate(data.date);
|
||||
}
|
||||
|
||||
@Patch('cancelar/:id')
|
||||
cancelationByMachine(
|
||||
@Param('id') id: number,
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Injectable, NotFoundException } from '@nestjs/common';
|
||||
import { CreateBitacoraMesaDto } from './dto/create-bitacora_mesa.dto';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { BitacoraMesa } from './entities/bitacora_mesa.entity';
|
||||
import { Repository } from 'typeorm';
|
||||
import { Repository, Between } from 'typeorm';
|
||||
import { BadRequestException } from '@nestjs/common';
|
||||
|
||||
|
||||
@@ -11,42 +11,42 @@ export class BitacoraMesaService {
|
||||
constructor(
|
||||
@InjectRepository(BitacoraMesa)
|
||||
private readonly bitacoraMesaRepository: Repository<BitacoraMesa>,
|
||||
) {}
|
||||
) { }
|
||||
|
||||
async assignment(dto: CreateBitacoraMesaDto) {
|
||||
async assignment(dto: CreateBitacoraMesaDto) {
|
||||
|
||||
// VALIDAR: el alumno ya tiene una mesa activa
|
||||
const alumnoConMesa = await this.bitacoraMesaRepository
|
||||
.createQueryBuilder('bitacora')
|
||||
.where('bitacora.id_alumno_inscrito = :id_alumno_inscrito', {
|
||||
id_alumno_inscrito: dto.id_alumno_inscrito,
|
||||
})
|
||||
.andWhere(
|
||||
`TIMESTAMPDIFF(
|
||||
// VALIDAR: el alumno ya tiene una mesa activa
|
||||
const alumnoConMesa = await this.bitacoraMesaRepository
|
||||
.createQueryBuilder('bitacora')
|
||||
.where('bitacora.id_alumno_inscrito = :id_alumno_inscrito', {
|
||||
id_alumno_inscrito: dto.id_alumno_inscrito,
|
||||
})
|
||||
.andWhere(
|
||||
`TIMESTAMPDIFF(
|
||||
SECOND,
|
||||
NOW(),
|
||||
DATE_ADD(bitacora.tiempo_entrada, INTERVAL bitacora.tiempo_asignado MINUTE)
|
||||
) > 0`,
|
||||
)
|
||||
.getOne();
|
||||
)
|
||||
.getOne();
|
||||
|
||||
if (alumnoConMesa) {
|
||||
throw new BadRequestException(
|
||||
'El alumno ya tiene una mesa asignada',
|
||||
);
|
||||
if (alumnoConMesa) {
|
||||
throw new BadRequestException(
|
||||
'El alumno ya tiene una mesa asignada',
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
const bitacora = this.bitacoraMesaRepository.create({
|
||||
tiempo_entrada: new Date(),
|
||||
tiempo_asignado: dto.tiempo_asignado,
|
||||
mesa: { id_mesa: dto.id_mesa },
|
||||
alumno_inscrito: { id_alumno_inscrito: dto.id_alumno_inscrito },
|
||||
});
|
||||
|
||||
return this.bitacoraMesaRepository.save(bitacora);
|
||||
}
|
||||
|
||||
|
||||
const bitacora = this.bitacoraMesaRepository.create({
|
||||
tiempo_entrada: new Date(),
|
||||
tiempo_asignado: dto.tiempo_asignado,
|
||||
mesa: { id_mesa: dto.id_mesa },
|
||||
alumno_inscrito: { id_alumno_inscrito: dto.id_alumno_inscrito },
|
||||
});
|
||||
|
||||
return this.bitacoraMesaRepository.save(bitacora);
|
||||
}
|
||||
|
||||
findAll() {
|
||||
return this.bitacoraMesaRepository.find({
|
||||
relations: ['mesa', 'alumno_inscrito'],
|
||||
@@ -81,7 +81,7 @@ export class BitacoraMesaService {
|
||||
return student;
|
||||
}
|
||||
|
||||
async findByTable(id_mesa: number) {
|
||||
async findByTable(id_mesa: number) {
|
||||
const student = await this.bitacoraMesaRepository
|
||||
.createQueryBuilder('bitacora')
|
||||
.leftJoinAndSelect('bitacora.alumno_inscrito', 'alumnoInscrito')
|
||||
@@ -104,19 +104,31 @@ export class BitacoraMesaService {
|
||||
return student;
|
||||
}
|
||||
|
||||
async cancelation(id_bitacora_mesa: number, nuevoTiempo: number) {
|
||||
const bitacora = await this.bitacoraMesaRepository.findOne({
|
||||
where: { id_bitacora_mesa },
|
||||
});
|
||||
async findByDate(date) {
|
||||
const start = new Date(`${date}T00:00:00`);
|
||||
const end = new Date(`${date}T23:59:59`);
|
||||
|
||||
if (!bitacora) {
|
||||
throw new NotFoundException('Mesa no encontrada');
|
||||
}
|
||||
return this.bitacoraMesaRepository.find({
|
||||
where: {
|
||||
tiempo_entrada: Between(start, end),
|
||||
},
|
||||
})
|
||||
|
||||
bitacora.tiempo_asignado -= nuevoTiempo;
|
||||
|
||||
await this.bitacoraMesaRepository.save(bitacora);
|
||||
|
||||
return { message: 'Tiempo cancelado' };
|
||||
}
|
||||
}
|
||||
|
||||
async cancelation(id_bitacora_mesa: number, nuevoTiempo: number) {
|
||||
const bitacora = await this.bitacoraMesaRepository.findOne({
|
||||
where: { id_bitacora_mesa },
|
||||
});
|
||||
|
||||
if (!bitacora) {
|
||||
throw new NotFoundException('Mesa no encontrada');
|
||||
}
|
||||
|
||||
bitacora.tiempo_asignado -= nuevoTiempo;
|
||||
|
||||
await this.bitacoraMesaRepository.save(bitacora);
|
||||
|
||||
return { message: 'Tiempo cancelado' };
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { IsInt, IsPositive } from 'class-validator';
|
||||
import { IsDateString, IsInt, IsPositive } from 'class-validator';
|
||||
|
||||
export class CreateBitacoraMesaDto {
|
||||
@IsInt()
|
||||
@@ -12,4 +12,9 @@ export class CreateBitacoraMesaDto {
|
||||
@IsInt()
|
||||
@IsPositive()
|
||||
id_alumno_inscrito: number;
|
||||
}
|
||||
|
||||
export class FindByDate {
|
||||
@IsDateString()
|
||||
date: string;
|
||||
}
|
||||
@@ -19,7 +19,6 @@ export class BitacoraMesa {
|
||||
@Column({ name: 'tiempo_entrada', type: 'datetime' })
|
||||
tiempo_entrada: Date;
|
||||
|
||||
|
||||
@ManyToOne(() => Mesa)
|
||||
@JoinColumn({ name: 'id_mesa' })
|
||||
mesa: Mesa;
|
||||
|
||||
Reference in New Issue
Block a user