feature finished

This commit is contained in:
Vins 2023-09-22 15:47:25 +02:00
parent dbe984b474
commit 56997f46bc
7 changed files with 1572 additions and 817 deletions

2321
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -45,6 +45,34 @@ export default class EmailBuilder {
nbTrySend: null, nbTrySend: null,
lastTrySendDate: null, lastTrySendDate: null,
}); });
}
public async sendRecapEmails(usersToEmail: [{email: string, civility: string, last_name: string}]){
usersToEmail.forEach(user => {
const to = user.email;
const templateVariables = {
civility: user.civility,
last_name: user.last_name,
link: "http://localhost:3000"
};
const templateName = ETemplates.DOCUMENT_RECAP;
const subject = "Récapitulatif hebdromadaire";
this.mailchimpService.create({
templateName,
to,
subject,
templateVariables,
uid: "",
from: null,
cc: [],
cci: [],
sentAt: null,
nbTrySend: null,
lastTrySendDate: null,
});
});
} }
} }

View File

@ -1,4 +1,5 @@
export const ETemplates = { export const ETemplates = {
DOCUMENT_ASKED: "DOCUMENT_ASKED", DOCUMENT_ASKED: "DOCUMENT_ASKED",
DOCUMENT_REFUSED: "DOCUMENT_REFUSED", DOCUMENT_REFUSED: "DOCUMENT_REFUSED",
DOCUMENT_RECAP: "DOCUMENT_RECAP",
}; };

View File

@ -21,6 +21,7 @@ export default class DocumentsRepository extends BaseRepository {
* @description : Find many documents * @description : Find many documents
*/ */
public async findMany(query: Prisma.DocumentsFindManyArgs) { public async findMany(query: Prisma.DocumentsFindManyArgs) {
query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows);
return this.model.findMany(query); return this.model.findMany(query);
} }

View File

@ -1,17 +1,22 @@
import "module-alias/register"; import "module-alias/register";
import "reflect-metadata"; import "reflect-metadata";
import { Container } from "typedi"; import { Container } from "typedi";
import { BackendVariables } from "@Common/config/variables/Variables"; import { BackendVariables } from "@Common/config/variables/Variables";
import CronService from "@Services/common/CronService/CronService"; import CronService from "@Services/common/CronService/CronService";
(async () => { (async () => {
console.log("Cron started");
try { try {
const variables = await Container.get(BackendVariables).validate(); const variables = await Container.get(BackendVariables).validate();
Container.get(CronService).archiveFiles(); Container.get(CronService).archiveFiles();
await Container.get(CronService).updateUsers(); await Container.get(CronService).updateUsers();
Container.get(CronService).sendRecapMails();
if(variables.ENV !== "dev"){ if(variables.ENV !== "dev"){
Container.get(CronService).sendMails(); Container.get(CronService).sendMails();
} }
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }

View File

@ -24,6 +24,21 @@ export default class CronService {
} }
} }
public async sendRecapMails() {
const cronJob = new CronJob("0 20 * * FRI", async () => { // Every friday at 20:00
try {
await this.mailchimpService.sendRecapEmails();
} catch (e) {
console.error(e);
}
});
// Start job
if (!cronJob.running) {
cronJob.start();
}
}
public async archiveFiles() { public async archiveFiles() {
const cronJob = new CronJob("0 0 * * MON", async () => { // Every monday at midnight const cronJob = new CronJob("0 0 * * MON", async () => { // Every monday at midnight
try { try {

View File

@ -1,9 +1,10 @@
import EmailRepository from "@Repositories/EmailRepository"; import EmailRepository from "@Repositories/EmailRepository";
import BaseService from "@Services/BaseService"; import BaseService from "@Services/BaseService";
import { Emails } from "@prisma/client"; import { Emails, PrismaClient } from "@prisma/client";
import { Service } from "typedi"; import { Service } from "typedi";
import MailchimpClient from "@mailchimp/mailchimp_transactional"; import MailchimpClient from "@mailchimp/mailchimp_transactional";
import { BackendVariables } from "@Common/config/variables/Variables"; import { BackendVariables } from "@Common/config/variables/Variables";
// import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsService";
@Service() @Service()
export default class MailchimpService extends BaseService { export default class MailchimpService extends BaseService {
@ -113,4 +114,17 @@ export default class MailchimpService extends BaseService {
}; };
}); });
} }
public async sendRecapEmails() {
const prisma = new PrismaClient();
const usersToEmail = await prisma.$queryRaw
`SELECT DISTINCT c.email, c.civility, c.last_name
FROM Contacts c
JOIN Users u ON c.uid = u.contact_uid
JOIN office_folders of ON u.office_uid = of.office_uid
JOIN Documents d ON of.uid = d.folder_uid
WHERE d.document_status = 'DEPOSITED';`
console.log(usersToEmail);
}
} }