Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions backend/src/controllers/collectionPointController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,19 @@ export default class CollectionPointController {
next(e)
}
}

/* Reports*/

public static async reportGetFullDate(req: Request, res: Response, next: NextFunction) {
try {
const { id } = req.params;

const ReportData = await CollectionPointService.reportGetFullDate(id);
res.status(HttpCode.OK).json(ReportData);

} catch (e: any) {
next(e);
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import type { Knex } from "knex";


export async function up(knex: Knex): Promise<void> {
return knex.schema.alterTable("Collection_Point", (table) => {
table.datetime("isFullDate").nullable()
});
}


export async function down(knex: Knex): Promise<void> {
return knex.schema.alterTable("Collection_Point", (table) => {
table.dropColumn("isFullDate");
})
}

2 changes: 2 additions & 0 deletions backend/src/erros/CollectionPointErros.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,5 @@ export class GeocodeError extends HttpError {
super({ status: HttpCode.BAD_REQUEST, message });
}
}


14 changes: 13 additions & 1 deletion backend/src/routes/collectionPointRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ collectionPointRouter
*/
.get("/collectionPoint/:id", AuthMiddleware.ensureAuthenticated, CollectionPointController.getOneCollectionPoint)




/**
* @route POST /collectionPoint
* @description Cria um novo ponto de coleta
Expand All @@ -51,7 +54,16 @@ collectionPointRouter
* @param {Number} id - ID do ponto de coleta
* @returns { void }
*/
.delete("/collectionPoint/delete/:id", AuthMiddleware.ensureAdmin, CollectionPointController.deleteCollectionPoint);
.delete("/collectionPoint/delete/:id", AuthMiddleware.ensureAdmin, CollectionPointController.deleteCollectionPoint)

/**
* @route GET /report/fullDate/:id
* @description Retorna a ultima data de coleta e a data de quando o ponto ficou cheio.
* @description se isFullDate for null ou menor que o lastcollectionDate significa que o ponto de coleta não ficou cheio
* @param {Number} id - ID do ponto de coleta
* @returns { isFullDate: dateTime , lastCollectionDate:dateTime }
*/
.get("/report/fullDate/:id", AuthMiddleware.ensureAdmin, CollectionPointController.reportGetFullDate)


export default collectionPointRouter;
21 changes: 21 additions & 0 deletions backend/src/services/collectionPointService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ export default class CollectionPointService {
return `Ponto de Coleta ${collectionPoint.name} atualizado com sucesso.`;
}


/**
* @method deleteCollectionPoint
* @description Remove um ponto de coleta específico pelo ID, se não houver depósitos associados
Expand Down Expand Up @@ -244,4 +245,24 @@ export default class CollectionPointService {

return scheduledTasks;
}

// Reports

/**
* @description Retorna o campo isFullDate e lastCollectionDate
*
* @returns {Promise<Record<string, schedule.Job> >} Retorna o objeto contendo todas as tarefas agendadas
*/

public static async reportGetFullDate(id: string): Promise<CollectionPoint> {

const ReportData = await knex("Collection_Point").select("isFullDate,lastCollectionDate").where({id}).first();

if(!ReportData) {
throw new CollectionPointNotFound();
}

return ReportData;
}

}
9 changes: 8 additions & 1 deletion backend/src/services/depositService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { CollectionPointNotFound } from '../erros/CollectionPointErros';
import { DepositNotAllowed, DepositNotFoundError, UnauthorizedDepositAccessError } from '../erros/DepositErrors';
import CollectionPointService from './collectionPointService';
import Mailer from './Mailer';
import { UpdateCollectionPoint } from '../types/collectionPoint';

const knex = DatabaseConnection.getInstance();

Expand Down Expand Up @@ -144,16 +145,22 @@ export default class DepositService{

const possibleAmount = collectionPoint.amountSponges + (Number(sumPendentes[0].total) || 0)


var today = new Date;

if (possibleAmount + amountSponges > collectionPoint.capacitySponges){
// Enviar email pros administradores avisando que alguem tentou registrar o deposito mas nn conseguiu
//const mail = new Mailer()
//mail.sendMail()

//atualiza o isFullDate ao sinalizar que o deposito está cheio para um depósito
await knex("Collection_Point").where({ id: collectionPointId }).update({isFullDate : today});

throw new DepositNotAllowed(
`Limite excedido. Tente novamente após a coleta. Espaço disponível: ${collectionPoint.capacitySponges - possibleAmount}`);
}


var today = new Date;
const deposit: Partial<Deposit> = {
id: depositId,
collectionPointId,
Expand Down
2 changes: 1 addition & 1 deletion backend/src/types/collectionPoint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ export type UpdateCollectionPoint = {
lastCollectionDate?: Date;
nextCollectionDate?: Date;
isInactive?: boolean;
}
}