added programa, area ubicacion and programa_equipo

This commit is contained in:
IO420
2025-10-03 16:34:39 -06:00
parent 7546de4a1b
commit 8b91a20dcf
28 changed files with 349 additions and 41 deletions
@@ -37,7 +37,7 @@ export class AlumnoInscritoService {
async findByAlumno(id_cuenta: number): Promise<AlumnoInscrito[]> { async findByAlumno(id_cuenta: number): Promise<AlumnoInscrito[]> {
return this.alumnoInscritoRepo.find({ return this.alumnoInscritoRepo.find({
where: { alumno: { id_cuenta } }, where: { alumno: { id_cuenta }, periodo:{id_periodo:24}},
relations: ['alumno', 'periodo', 'plataforma'], relations: ['alumno', 'periodo', 'plataforma'],
}); });
} }
@@ -1,4 +1,4 @@
import { Body, Controller, Get, Param, Post } from '@nestjs/common'; import { Body, Controller, Delete, Get, Param, Post } from '@nestjs/common';
import { AlumnoSancionService } from './alumno_sancion.service'; import { AlumnoSancionService } from './alumno_sancion.service';
import { CreateAlumnoSancionDto } from './dto/create-alumno_sancion.dto'; import { CreateAlumnoSancionDto } from './dto/create-alumno_sancion.dto';
@@ -11,14 +11,14 @@ export class AlumnoSancionController {
return this.alumnoSancionService.create(createAlumnoSancionDto); return this.alumnoSancionService.create(createAlumnoSancionDto);
} }
@Get() @Get(':id')
findAll() { findbyStudent(@Param('id') id: number) {
return this.alumnoSancionService.findAll(); return this.alumnoSancionService.findbyStudent(+id);
} }
@Get(':id') @Delete()
findOne(@Param('id') id: number) { deleteSancion(){
return this.alumnoSancionService.findOne(+id);
} }
} }
//IO //IO
+16 -7
View File
@@ -36,16 +36,25 @@ export class AlumnoSancionService {
return await this.alumnosancionRepository.save(alumnosancion); return await this.alumnosancionRepository.save(alumnosancion);
} }
findAll() { async findbyStudent(id_cuenta: number): Promise<AlumnoSancion[]> {
return `This action returns all alumnoSancion`; const alusancion = await this.alumnosancionRepository.find({
}
async findOne(id_cuenta: number): Promise<AlumnoSancion> {
const alusancion = await this.alumnosancionRepository.findOne({
where: { alumno: { id_cuenta } }, where: { alumno: { id_cuenta } },
select:{
id_alumno_sancion:true,
fecha_inicio:true,
alumno:{
id_cuenta:true,
nombre:true
},
sancion:{
id_sancion:true,
sancion:true,
duracion:true
}
}
}); });
if (!alusancion) { if (!alusancion) {
throw new NotFoundException(`Student with ID ${id_cuenta} not found`); throw new NotFoundException(`student without sancion`);
} }
return alusancion; return alusancion;
} }
+12
View File
@@ -30,6 +30,12 @@ import {
import { EquipoModule } from './equipo/equipo.module'; import { EquipoModule } from './equipo/equipo.module';
import { CarreraModule } from './carrera/carrera.module'; import { CarreraModule } from './carrera/carrera.module';
import { Carrera } from './carrera/entities/carrera.entity'; import { Carrera } from './carrera/entities/carrera.entity';
import { Equipo } from './equipo/entities/equipo.entity';
import { AreaUbicacionModule } from './area_ubicacion/area_ubicacion.module';
import { ProgramaModule } from './programa/programa.module';
import { AreaUbicacion } from './area_ubicacion/entities/area_ubicacion.entity';
import { Programa } from './programa/entities/programa.entity';
import { ProgramaEquipoModule } from './programa_equipo/programa_equipo.module';
@Module({ @Module({
imports: [ imports: [
@@ -60,6 +66,9 @@ import { Carrera } from './carrera/entities/carrera.entity';
Mesa, Mesa,
AlumnoInscrito, AlumnoInscrito,
Plataforma, Plataforma,
Equipo,
AreaUbicacion,
Programa,
], ],
synchronize: false, //Never change to true in production! synchronize: false, //Never change to true in production!
}), }),
@@ -77,6 +86,9 @@ import { Carrera } from './carrera/entities/carrera.entity';
AlumnoInscritoModule, AlumnoInscritoModule,
EquipoModule, EquipoModule,
CarreraModule, CarreraModule,
AreaUbicacionModule,
ProgramaModule,
ProgramaEquipoModule,
], ],
controllers: [AppController], controllers: [AppController],
providers: [AppService], providers: [AppService],
@@ -0,0 +1,18 @@
import { Controller, Get, Param } from '@nestjs/common';
import { AreaUbicacionService } from './area_ubicacion.service';
@Controller('area-ubicacion')
export class AreaUbicacionController {
constructor(private readonly areaUbicacionService: AreaUbicacionService) {}
@Get()
findAll() {
return this.areaUbicacionService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.areaUbicacionService.findOne(+id);
}
}
//IO
@@ -0,0 +1,13 @@
import { Module } from '@nestjs/common';
import { AreaUbicacionService } from './area_ubicacion.service';
import { AreaUbicacionController } from './area_ubicacion.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AreaUbicacion } from './entities/area_ubicacion.entity';
@Module({
imports:[TypeOrmModule.forFeature([AreaUbicacion])],
controllers: [AreaUbicacionController],
providers: [AreaUbicacionService],
})
export class AreaUbicacionModule {}
//IO
@@ -0,0 +1,28 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { AreaUbicacion } from './entities/area_ubicacion.entity';
import { Repository } from 'typeorm';
@Injectable()
export class AreaUbicacionService {
constructor(
@InjectRepository(AreaUbicacion)
private readonly areaUbicacionRepository: Repository<AreaUbicacion>,
) {}
findAll() {
return this.areaUbicacionRepository.find();
}
findOne(id_area_ubicacion: number) {
const area = this.areaUbicacionRepository.findOne({
where: { id_area_ubicacion },
});
if(!area){
return "this area dosnt exist"
}
return area
}
}
//IO
@@ -0,0 +1,18 @@
import { Equipo } from 'src/equipo/entities/equipo.entity';
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
@Entity({ name: 'area_ubicacion' })
export class AreaUbicacion {
@PrimaryGeneratedColumn({ name: 'id_area_ubicacion' })
id_area_ubicacion: number;
@Column({ type: 'varchar', length: 45, nullable: false })
area: string;
@Column({ type: 'char', length: 1, default: '0', nullable: false })
extra: string;
@OneToMany(() => Equipo, (equipo) => equipo.areaUbicacion)
equipos: Equipo[];
}
//IO
+5 -16
View File
@@ -1,3 +1,5 @@
import { AreaUbicacion } from 'src/area_ubicacion/entities/area_ubicacion.entity';
import { ProgramaEquipo } from 'src/programa_equipo/entities/programa_equipo.entity';
import { import {
Entity, Entity,
PrimaryGeneratedColumn, PrimaryGeneratedColumn,
@@ -21,22 +23,6 @@ export class Plataforma {
equipos: Equipo[]; equipos: Equipo[];
} }
@Entity({ name: 'area_ubicacion' })
export class AreaUbicacion {
@PrimaryGeneratedColumn({ name: 'id_area_ubicacion', type: 'int' })
id_area_ubicacion: number;
@Column({ name: 'area', type: 'varchar', length: 45 })
area: string;
@Column({ name: 'extra', type: 'char', length: 1, default: '0' })
extra: string;
// Relación con equipos
@OneToMany(() => Equipo, (equipo) => equipo.areaUbicacion)
equipos: Equipo[];
}
@Entity({ name: 'equipo' }) @Entity({ name: 'equipo' })
@Unique('indice_unico_ubicacion', ['ubicacion']) @Unique('indice_unico_ubicacion', ['ubicacion'])
export class Equipo { export class Equipo {
@@ -77,4 +63,7 @@ export class Equipo {
}) })
@JoinColumn({ name: 'id_area_ubicacion' }) @JoinColumn({ name: 'id_area_ubicacion' })
areaUbicacion: AreaUbicacion; areaUbicacion: AreaUbicacion;
@OneToMany(() => ProgramaEquipo, (programaEquipo) => programaEquipo.equipo)
programaEquipos: ProgramaEquipo[];
} }
+2 -3
View File
@@ -1,7 +1,5 @@
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { EquipoService } from './equipo.service'; import { EquipoService } from './equipo.service';
import { CreateEquipoDto } from './dto/create-equipo.dto';
import { UpdateEquipoDto } from './dto/update-equipo.dto';
@Controller('equipo') @Controller('equipo')
export class EquipoController { export class EquipoController {
@@ -13,7 +11,8 @@ export class EquipoController {
} }
@Get(':id') @Get(':id')
findOne(@Param('id') id: string) { findOne(@Param('id') id: number) {
return this.equipoService.findOne(+id); return this.equipoService.findOne(+id);
} }
} }
//IO
+1
View File
@@ -10,3 +10,4 @@ import { Equipo } from './entities/equipo.entity';
providers: [EquipoService], providers: [EquipoService],
}) })
export class EquipoModule {} export class EquipoModule {}
//IO
+1 -1
View File
@@ -1,5 +1,4 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { CreateEquipoDto } from './dto/create-equipo.dto';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { Equipo } from './entities/equipo.entity'; import { Equipo } from './entities/equipo.entity';
@@ -17,3 +16,4 @@ private readonly equipoRepository: Repository<Equipo>){}
return this.equipoRepository.findOne({where:{id_equipo}}); return this.equipoRepository.findOne({where:{id_equipo}});
} }
} }
//IO
+1
View File
@@ -0,0 +1 @@
export class CreateProgramaDto {}
+4
View File
@@ -0,0 +1,4 @@
import { PartialType } from '@nestjs/mapped-types';
import { CreateProgramaDto } from './create-programa.dto';
export class UpdateProgramaDto extends PartialType(CreateProgramaDto) {}
+14
View File
@@ -0,0 +1,14 @@
import { ProgramaEquipo } from 'src/programa_equipo/entities/programa_equipo.entity';
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
@Entity({ name: 'programa' })
export class Programa {
@PrimaryGeneratedColumn({ name: 'id_programa' })
id_programa: number;
@Column({ type: 'varchar', length: 45, nullable: false })
programa: string;
@OneToMany(() => ProgramaEquipo, (programaEquipo) => programaEquipo.programa)
programaEquipos: ProgramaEquipo[];
}
+30
View File
@@ -0,0 +1,30 @@
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { ProgramaService } from './programa.service';
import { CreateProgramaDto } from './dto/create-programa.dto';
import { UpdateProgramaDto } from './dto/update-programa.dto';
@Controller('programa')
export class ProgramaController {
constructor(private readonly programaService: ProgramaService) {}
@Post()
create(@Body() createProgramaDto: CreateProgramaDto) {
return this.programaService.create(createProgramaDto);
}
@Get()
findAll() {
return this.programaService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.programaService.findOne(+id);
}
@Patch(':id')
update(@Param('id') id: string, @Body() updateProgramaDto: UpdateProgramaDto) {
return this.programaService.update(+id, updateProgramaDto);
}
}
+12
View File
@@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { ProgramaService } from './programa.service';
import { ProgramaController } from './programa.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Programa } from './entities/programa.entity';
@Module({
imports:[TypeOrmModule.forFeature([Programa])],
controllers: [ProgramaController],
providers: [ProgramaService],
})
export class ProgramaModule {}
+36
View File
@@ -0,0 +1,36 @@
import { Injectable } from '@nestjs/common';
import { CreateProgramaDto } from './dto/create-programa.dto';
import { UpdateProgramaDto } from './dto/update-programa.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { Programa } from './entities/programa.entity';
import { Repository } from 'typeorm';
@Injectable()
export class ProgramaService {
constructor(
@InjectRepository(Programa)
private readonly programaRepository:Repository<Programa>
){}
create(createProgramaDto: CreateProgramaDto) {
return 'This action adds a new programa';
}
findAll() {
return this.programaRepository.find();
}
findOne(id_programa: number) {
const programa = this.programaRepository.findOne({where:{id_programa}})
if(!programa){
return "this program dosnt exist"
}
return programa;
}
update(id: number, updateProgramaDto: UpdateProgramaDto) {
return `This action updates a #${id} programa`;
}
}
@@ -0,0 +1 @@
export class CreateProgramaEquipoDto {}
@@ -0,0 +1,4 @@
import { PartialType } from '@nestjs/mapped-types';
import { CreateProgramaEquipoDto } from './create-programa_equipo.dto';
export class UpdateProgramaEquipoDto extends PartialType(CreateProgramaEquipoDto) {}
@@ -0,0 +1,24 @@
import { Equipo } from "src/equipo/entities/equipo.entity";
import { Programa } from "src/programa/entities/programa.entity";
import { Entity, PrimaryColumn, ManyToOne, JoinColumn } from "typeorm";
@Entity("programa_equipo")
export class ProgramaEquipo {
@PrimaryColumn({ name: "id_programa", type: "int" })
id_programa: number;
@PrimaryColumn({ name: "id_equipo", type: "int" })
id_equipo: number;
@ManyToOne(() => Programa, (programa) => programa.programaEquipos, {
onUpdate: "CASCADE",
})
@JoinColumn({ name: "id_programa" })
programa: Programa;
@ManyToOne(() => Equipo, (equipo) => equipo.programaEquipos, {
onUpdate: "CASCADE",
})
@JoinColumn({ name: "id_equipo" })
equipo: Equipo;
}
@@ -0,0 +1,24 @@
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { ProgramaEquipoService } from './programa_equipo.service';
import { CreateProgramaEquipoDto } from './dto/create-programa_equipo.dto';
import { UpdateProgramaEquipoDto } from './dto/update-programa_equipo.dto';
@Controller('programa-equipo')
export class ProgramaEquipoController {
constructor(private readonly programaEquipoService: ProgramaEquipoService) {}
@Get()
findAll() {
return this.programaEquipoService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.programaEquipoService.findOne(+id);
}
@Patch(':id')
update(@Param('id') id: string, @Body() updateProgramaEquipoDto: UpdateProgramaEquipoDto) {
return this.programaEquipoService.update(+id, updateProgramaEquipoDto);
}
}
@@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { ProgramaEquipoService } from './programa_equipo.service';
import { ProgramaEquipoController } from './programa_equipo.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ProgramaEquipo } from './entities/programa_equipo.entity';
@Module({
imports:[TypeOrmModule.forFeature([ProgramaEquipo])],
controllers: [ProgramaEquipoController],
providers: [ProgramaEquipoService],
})
export class ProgramaEquipoModule {}
@@ -0,0 +1,34 @@
import { Injectable, NotFoundException } from '@nestjs/common';
import { CreateProgramaEquipoDto } from './dto/create-programa_equipo.dto';
import { UpdateProgramaEquipoDto } from './dto/update-programa_equipo.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { ProgramaEquipo } from './entities/programa_equipo.entity';
import { Repository } from 'typeorm';
@Injectable()
export class ProgramaEquipoService {
constructor(
@InjectRepository(ProgramaEquipo)
private readonly ProgramaEquipoRepository: Repository<ProgramaEquipo>,
) {}
findAll() {
return `This action returns all programaEquipo`;
}
async findOne(id_equipo: number) {
const equipo = await this.ProgramaEquipoRepository.find({
where: { id_equipo },
});
if (equipo.length === 0) {
throw new NotFoundException(`machine without programs`);
}
return equipo;
}
update(id: number, updateProgramaEquipoDto: UpdateProgramaEquipoDto) {
return `This action updates a #${id} programaEquipo`;
}
}
+9 -1
View File
@@ -1,5 +1,5 @@
import { Type } from 'class-transformer'; import { Type } from 'class-transformer';
import { IsDate, IsNumber, IsString } from 'class-validator'; import { IsDate, IsDateString, IsNumber, IsString } from 'class-validator';
export class CreateReciboDto { export class CreateReciboDto {
@@ -13,3 +13,11 @@ export class CreateReciboDto {
@Type(() => Date) @Type(() => Date)
fecha_recibo: Date; fecha_recibo: Date;
} }
export class FindReciboByRangeDto {
@IsDateString()
desde: string;
@IsDateString()
hasta: string;
}
+3 -3
View File
@@ -29,13 +29,13 @@ export class Recibo {
monto: number; monto: number;
@Column({ name: 'fecha_recibo', type: 'date', nullable: false }) @Column({ name: 'fecha_recibo', type: 'date', nullable: false })
fecha_recibo: Date ; fecha_recibo: Date;
@ManyToOne(() => Alumno, (alum) => alum.id_cuenta, {}) @ManyToOne(() => Alumno, (alum) => alum.id_cuenta, { eager: true })
@JoinColumn({ name: 'id_cuenta' }) @JoinColumn({ name: 'id_cuenta' })
alum: Alumno; alum: Alumno;
@ManyToOne(() => User, (user) => user.id_usuario, {}) @ManyToOne(() => User, (user) => user.id_usuario, { eager: true })
@JoinColumn({ name: 'id_usuario' }) @JoinColumn({ name: 'id_usuario' })
user: User; user: User;
} }
+5
View File
@@ -6,10 +6,15 @@ import {
Req, Req,
} from '@nestjs/common'; } from '@nestjs/common';
import { ReciboService } from './recibo.service'; import { ReciboService } from './recibo.service';
import { FindReciboByRangeDto } from './dto/create-recibo.dto';
@Controller('recibo') @Controller('recibo')
export class ReciboController { export class ReciboController {
constructor(private readonly reciboService: ReciboService) {} constructor(private readonly reciboService: ReciboService) {}
@Post('rango')
async findByDateRange(@Body() data: FindReciboByRangeDto) {
return this.reciboService.findByDateRange(data.desde, data.hasta);
}
} }
//IO //IO
+14 -2
View File
@@ -1,7 +1,7 @@
import { ConflictException, Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Recibo } from './entities/recibo.entity'; import { Recibo } from './entities/recibo.entity';
import { EntityManager, Repository } from 'typeorm'; import { Between, EntityManager, Repository } from 'typeorm';
import { CreateReciboDto } from './dto/create-recibo.dto'; import { CreateReciboDto } from './dto/create-recibo.dto';
@Injectable() @Injectable()
@@ -23,5 +23,17 @@ export class ReciboService {
const details = repo.create(data); const details = repo.create(data);
return await repo.save(details); return await repo.save(details);
} }
async findByDateRange(desde: string, hasta: string) {
// Convertimos strings a objetos Date
const fechaDesde = new Date(desde);
const fechaHasta = new Date(hasta);
return await this.reciboRepository.find({
where: {
fecha_recibo: Between(fechaDesde, fechaHasta),
},
});
}
} }
//IO //IO