Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_server
1 result
Show changes
import { HttpModule } from '@nestjs/common';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { CategoriesModule } from '../categories/categories.module';
import { ConfigurationModule } from '../configuration/configuration.module';
import { MailerService } from '../mailer/mailer.service';
import { SearchModule } from '../search/search.module';
......
......@@ -40,11 +40,13 @@ export class UsersController {
}
const user = await this.usersService.create(createUserDto);
if (structureId) {
this.usersService.updateStructureLinkedClaim(createUserDto.email, structureId);
const structure = await this.structureService.findOne(structureId);
this.usersService.updateStructureLinkedClaim(createUserDto.email, structureId, structure);
this.structureService.sendAdminStructureNotification(
null,
this.configurationService.config.templates.adminStructureClaim.ejs,
this.configurationService.config.templates.adminStructureClaim.json
this.configurationService.config.templates.adminStructureClaim.json,
user
);
}
// Remove temp user if exist
......
......@@ -6,6 +6,7 @@ import { User, UserSchema } from './schemas/user.schema';
import { MailerModule } from '../mailer/mailer.module';
import { StructuresModule } from '../structures/structures.module';
import { TempUserModule } from '../temp-user/temp-user.module';
@Module({
imports: [
MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
......
......@@ -12,6 +12,7 @@ import { IUser } from './interfaces/user.interface';
import { EmailChangeDto } from './dto/change-email.dto';
import { PendingStructureDto } from '../admin/dto/pending-structure.dto';
import { OwnerDto } from './dto/owner.dto';
import { StructureDocument } from '../structures/schemas/structure.schema';
@Injectable()
export class UsersService {
......@@ -157,6 +158,26 @@ export class UsersService {
});
}
/**
* Send to all admins mail for aptic duplicated data
*/
public async sendAdminApticNewStructureMail(structure: StructureDocument): Promise<any> {
const config = this.mailerService.config;
const ejsPath = this.mailerService.getTemplateLocation(config.templates.newApticStructure.ejs);
const jsonConfig = this.mailerService.loadJsonConfig(config.templates.newApticStructure.json);
const html = await ejs.renderFile(ejsPath, {
config,
name: structure.structureName,
address: `${structure.address.numero} ${structure.address.street} ${structure.address.commune}`,
description: structure.otherDescription,
});
const admins = await this.getAdmins();
admins.forEach((admin) => {
this.mailerService.send(admin.email, jsonConfig.subject, html);
});
}
/**
* Send approval email for user
* a new account.
......@@ -317,13 +338,22 @@ export class UsersService {
* Send to all admins validation email for structures
* new account.
*/
private async sendAdminStructureValidationMail(): Promise<any> {
private async sendAdminStructureValidationMail(userEmail: string, structure: StructureDocument): Promise<any> {
const config = this.mailerService.config;
const ejsPath = this.mailerService.getTemplateLocation(config.templates.adminStructureClaim.ejs);
const jsonConfig = this.mailerService.loadJsonConfig(config.templates.adminStructureClaim.json);
const user = await this.findOne(userEmail);
const html = await ejs.renderFile(ejsPath, {
config,
id: structure ? structure._id : 0,
structureName: structure ? structure.structureName : '',
structureAdress: structure
? structure.address.numero
? `${structure.address.numero} ${structure.address.street} ${structure.address.commune}`
: `${structure.address.street} ${structure.address.commune}`
: '',
structureDescription: structure ? structure.otherDescription : '',
user: user,
});
const admins = await this.getAdmins();
admins.forEach((admin) => {
......@@ -331,9 +361,13 @@ export class UsersService {
});
}
public async updateStructureLinkedClaim(userEmail: string, idStructure: string): Promise<Types.ObjectId[]> {
public async updateStructureLinkedClaim(
userEmail: string,
idStructure: string,
structure: StructureDocument
): Promise<Types.ObjectId[]> {
const stucturesLinked = this.updatePendingStructureLinked(userEmail, idStructure);
this.sendAdminStructureValidationMail();
this.sendAdminStructureValidationMail(userEmail, structure);
return stucturesLinked;
}
......
......@@ -44,7 +44,7 @@ export class NewsletterServiceMock {
});
}
deleteOneEmail(email: string) {
newsletterUnsubscribe(email: string) {
if (email === 'test@test.com') {
throw new HttpException('Invalid email', HttpStatus.BAD_REQUEST);
}
......
......@@ -635,4 +635,234 @@ export class StructuresServiceMock {
},
];
}
findAllFormated() {
return [
{
_id: '6093ba0e2ab5775cfc01abcd',
coord: [4.8498155, 45.7514817],
equipmentsAndServices: ['wifiEnAccesLibre'],
digitalCultureSecurity: [],
parentingHelp: [],
socialAndProfessional: [],
accessRight: [],
baseSkills: [],
proceduresAccompaniment: [],
publicsAccompaniment: [],
publics: ['adultes'],
labelsQualifications: [],
accessModality: ['telephoneVisio'],
structureType: null,
structureName: 'a',
description: null,
lockdownActivity: null,
address: {
numero: null,
street: 'Rue Alphonse Daudet',
commune: 'Lyon 7ème Arrondissement',
},
contactMail: '',
contactPhone: '',
website: '',
facebook: null,
twitter: null,
instagram: null,
linkedin: null,
hours: {
monday: {
open: false,
time: [],
},
tuesday: {
open: false,
time: [],
},
wednesday: {
open: false,
time: [],
},
thursday: {
open: false,
time: [],
},
friday: {
open: false,
time: [],
},
saturday: {
open: false,
time: [],
},
sunday: {
open: false,
time: [],
},
},
pmrAccess: false,
exceptionalClosures: null,
otherDescription: null,
nbComputers: 1,
nbPrinters: 1,
nbTablets: 1,
nbNumericTerminal: 1,
nbScanners: 1,
freeWorkShop: false,
accountVerified: true,
createdAt: '2021-05-06T09:42:38.000Z',
updatedAt: '2021-05-06T09:42:50.000Z',
__v: 0,
},
{
_id: '6093ba0e2ab5775cfc01ffff',
coord: [4.8498155, 45.7514817],
equipmentsAndServices: ['wifiEnAccesLibre'],
digitalCultureSecurity: [],
parentingHelp: [],
socialAndProfessional: [],
accessRight: [],
baseSkills: [],
proceduresAccompaniment: [],
publicsAccompaniment: [],
publics: ['adultes'],
labelsQualifications: [],
accessModality: ['telephoneVisio'],
structureType: null,
structureName: 'a',
description: null,
lockdownActivity: null,
address: {
numero: null,
street: 'Rue Alphonse Daudet',
commune: 'Lyon 7ème Arrondissement',
},
contactMail: '',
contactPhone: '',
website: '',
facebook: null,
twitter: null,
instagram: null,
linkedin: null,
hours: {
monday: {
open: false,
time: [],
},
tuesday: {
open: false,
time: [],
},
wednesday: {
open: false,
time: [],
},
thursday: {
open: false,
time: [],
},
friday: {
open: false,
time: [],
},
saturday: {
open: false,
time: [],
},
sunday: {
open: false,
time: [],
},
},
pmrAccess: false,
exceptionalClosures: null,
otherDescription: null,
nbComputers: 1,
nbPrinters: 1,
nbTablets: 1,
nbNumericTerminal: 1,
nbScanners: 1,
freeWorkShop: false,
accountVerified: true,
createdAt: '2021-05-06T09:42:38.000Z',
updatedAt: '2021-05-06T09:42:50.000Z',
__v: 0,
},
];
}
update() {
return {
_id: '6093ba0e2ab5775cfc01ed3e',
coord: [4.8498155, 45.7514817],
equipmentsAndServices: ['wifiEnAccesLibre'],
digitalCultureSecurity: [],
parentingHelp: [],
socialAndProfessional: [],
accessRight: [],
baseSkills: [],
proceduresAccompaniment: [],
publicsAccompaniment: [],
publics: ['adultes'],
labelsQualifications: [],
accessModality: ['telephoneVisio'],
structureType: null,
structureName: 'a',
description: null,
lockdownActivity: null,
address: {
numero: null,
street: 'Rue Alphonse Daudet',
commune: 'Lyon 7ème Arrondissement',
},
contactMail: '',
contactPhone: '',
website: '',
facebook: null,
twitter: null,
instagram: null,
linkedin: null,
hours: {
monday: {
open: false,
time: [],
},
tuesday: {
open: false,
time: [],
},
wednesday: {
open: false,
time: [],
},
thursday: {
open: false,
time: [],
},
friday: {
open: false,
time: [],
},
saturday: {
open: false,
time: [],
},
sunday: {
open: false,
time: [],
},
},
pmrAccess: false,
exceptionalClosures: null,
otherDescription: null,
nbComputers: 1,
nbPrinters: 1,
nbTablets: 1,
nbNumericTerminal: 1,
nbScanners: 1,
freeWorkShop: false,
accountVerified: true,
createdAt: '2021-05-06T09:42:38.000Z',
updatedAt: '2021-05-06T09:42:50.000Z',
__v: 0,
};
}
}
export class TempUserServiceMock {}
export class TempUserServiceMock {
findOne(mail: string, passwordQuery?: boolean) {
if (mail === 'pauline.dupont@mii.com') {
return {
_id: 'tsfsf6296',
validationToken:
'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
emailVerified: true,
email: 'pauline.dupont@mii.com',
password: '$2a$12$vLQjJ9zAWyUwiFLeQDa6w.XzrlgPBhw.2GWrjog/yuEjIaZnQwmZu',
role: 0,
name: 'DUPONT',
surname: 'Pauline',
};
}
if (mail === 'jacques.dupont@mii.com') {
if (passwordQuery) {
return {
_id: 'tsfsf6296',
validationToken:
'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
emailVerified: false,
email: 'jacques.dupont@mii.com',
password: '$2a$12$vLQjJ9zAWyUwiFLeQDa6w.XzrlgPBhw.2GWrjog/yuEjIaZnQwmZu',
role: 0,
};
}
return {
_id: 'tsfsf6296',
validationToken:
'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
emailVerified: false,
email: 'jacques.dupont@mii.com',
role: 0,
};
}
return null;
}
}