Files
api-AT/src/Operations/operations.services.ts
T

230 lines
6.2 KiB
TypeScript
Raw Normal View History

2025-09-19 18:30:44 -06:00
import {
BadRequestException,
Injectable,
2025-10-03 17:27:32 -06:00
InternalServerErrorException,
2025-09-19 18:30:44 -06:00
} from '@nestjs/common';
2025-09-17 16:35:52 -06:00
import { AlumnoService } from 'src/alumno/student.service';
import { DetalleServicioService } from 'src/detalle_servicio/detalle_servicio.service';
import { DataSource } from 'typeorm';
import { chargePrintDto } from './dto/operations.dto';
2025-09-19 18:30:44 -06:00
import { UserService } from 'src/user/user.service';
import { ReciboService } from 'src/recibo/recibo.service';
2026-01-23 12:36:14 -06:00
import { AlumnoInscritoService } from 'src/alumno_inscrito/alumno_inscrito.service';
2026-01-23 13:36:45 -06:00
import { PeriodoService } from 'src/periodo/periodo.service';
@Injectable()
export class OperationsService {
constructor(
private readonly dataSource: DataSource,
2025-09-17 16:35:52 -06:00
private readonly alumnoService: AlumnoService,
2026-01-23 12:36:14 -06:00
private readonly alumnoInscritoService: AlumnoInscritoService,
private readonly detalleServicioService: DetalleServicioService,
2025-09-19 18:30:44 -06:00
private readonly userService: UserService,
private readonly reciboService: ReciboService,
2026-01-23 13:36:45 -06:00
private readonly periodoService: PeriodoService,
) {}
2025-09-19 18:30:44 -06:00
async chargePrint(data: chargePrintDto, id_usuario: number) {
2026-01-23 12:36:14 -06:00
const { monto, id_cuenta, id_servicio, numero_hojas } = data;
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
2025-09-17 16:35:52 -06:00
const credit = await this.alumnoService.GetCredit(id_cuenta);
if (credit < monto) {
throw new BadRequestException('Crédito insuficiente');
}
2025-09-19 18:30:44 -06:00
const user = await this.userService.findOne(id_usuario);
2025-10-03 17:27:32 -06:00
const alum = await this.alumnoService.findOne(id_cuenta);
2025-09-19 18:30:44 -06:00
const detalleData = {
2026-01-23 12:36:14 -06:00
servicio: id_servicio,
2025-09-19 18:30:44 -06:00
user,
alum,
monto,
fecha_operacion: new Date(),
2026-01-23 12:36:14 -06:00
numero_hojas,
};
2025-09-17 16:35:52 -06:00
await this.detalleServicioService.Create(
detalleData,
queryRunner.manager,
);
2025-09-19 18:30:44 -06:00
await this.alumnoService.collectCredit(
id_cuenta,
monto,
queryRunner.manager,
);
await queryRunner.commitTransaction();
return { message: 'correct' };
} catch (error) {
await queryRunner.rollbackTransaction();
2025-10-03 17:27:32 -06:00
throw new InternalServerErrorException(error.message);
} finally {
await queryRunner.release();
}
}
2025-09-19 18:30:44 -06:00
async addCredit(data, id_usuario: number) {
const { id_cuenta, monto, fecha_recibo, folio_recibo } = data;
2025-10-03 17:27:32 -06:00
const ticket = await this.reciboService.findOne(folio_recibo);
if (ticket) {
throw new BadRequestException('Ticket ya existente');
}
2025-09-19 18:30:44 -06:00
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
const user = await this.userService.findOne(id_usuario);
const alum = await this.alumnoService.findOne(id_cuenta);
try {
const detalleData = {
folio_recibo,
user,
alum,
fecha_recibo,
monto,
};
await this.reciboService.create(detalleData, queryRunner.manager);
await this.alumnoService.addCredit(id_cuenta, monto, queryRunner.manager);
await queryRunner.commitTransaction();
return { message: 'correct' };
} catch (error) {
await queryRunner.rollbackTransaction();
2025-10-03 17:27:32 -06:00
throw new InternalServerErrorException(error.message);
2025-09-19 18:30:44 -06:00
} finally {
await queryRunner.release();
}
}
2026-01-23 12:36:14 -06:00
async addTime(data, id_usuario: number) {
2026-01-23 13:36:45 -06:00
const { monto, id_cuenta, idPlataforma, folio_recibo, fecha_recibo } = data;
2026-01-23 12:36:14 -06:00
const studentRegister = await this.alumnoInscritoService.findRegister(
id_cuenta,
idPlataforma,
);
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
const user = await this.userService.findOne(id_usuario);
const alum = await this.alumnoService.findOne(id_cuenta);
try {
const detalleRecibo = {
folio_recibo,
user,
alum,
fecha_recibo,
monto,
};
await this.reciboService.create(detalleRecibo, queryRunner.manager);
const detalleData = {
servicio: 5,
user,
alum,
monto,
fecha_operacion: new Date(),
};
await this.detalleServicioService.Create(
detalleData,
queryRunner.manager,
);
studentRegister.tiempo_disponible += 3600;
await this.alumnoInscritoService.save(
studentRegister,
queryRunner.manager,
);
await queryRunner.commitTransaction();
2026-01-23 13:36:45 -06:00
return { studentRegister };
} catch (error) {
await queryRunner.rollbackTransaction();
throw new InternalServerErrorException(error.message);
} finally {
await queryRunner.release();
}
}
async addReceiptInscription(data, id_usuario: number) {
const {
monto,
id_cuenta,
id_plataforma,
folio_recibo,
fecha_recibo,
realizo_pago,
} = data;
await this.alumnoInscritoService.findNotRegister(id_cuenta, id_plataforma);
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
const user = await this.userService.findOne(id_usuario);
const alum = await this.alumnoService.findOne(id_cuenta);
try {
const detalleRecibo = {
folio_recibo,
user,
alum,
fecha_recibo,
monto,
};
await this.reciboService.create(detalleRecibo, queryRunner.manager);
const detalleData = {
servicio: 4,
user,
alum,
monto,
fecha_operacion: new Date(),
};
await this.detalleServicioService.Create(
detalleData,
queryRunner.manager,
);
const periodo = await this.periodoService.getPeriodoActivo();
const plataforma =
await this.alumnoInscritoService.findPlataformaById(id_plataforma);
await this.alumnoInscritoService.create(
{ realizo_pago, alumno: alum, plataforma, periodo },
queryRunner.manager,
);
await queryRunner.commitTransaction();
2026-01-23 12:36:14 -06:00
} catch (error) {
await queryRunner.rollbackTransaction();
throw new InternalServerErrorException(error.message);
} finally {
await queryRunner.release();
}
}
}