diff --git a/apps/api/src/modules/base_locale/sub_modules/export_csv/export_csv.controller.ts b/apps/api/src/modules/base_locale/sub_modules/export_csv/export_csv.controller.ts index 250e32c5..5431110e 100644 --- a/apps/api/src/modules/base_locale/sub_modules/export_csv/export_csv.controller.ts +++ b/apps/api/src/modules/base_locale/sub_modules/export_csv/export_csv.controller.ts @@ -1,9 +1,16 @@ -import { Controller, Res, Req, HttpStatus, Get } from '@nestjs/common'; +import { Controller, Res, Req, HttpStatus, Get, Query } from '@nestjs/common'; import { Response } from 'express'; -import { ApiParam, ApiTags, ApiResponse, ApiOperation } from '@nestjs/swagger'; +import { + ApiParam, + ApiTags, + ApiResponse, + ApiOperation, + ApiQuery, +} from '@nestjs/swagger'; import { CustomRequest } from '@/lib/types/request.type'; import { ExportCsvService } from '@/shared/modules/export_csv/export_csv.service'; +import { isAdmin } from '@/lib/utils/is-admin.utils'; @ApiTags('export csv') @Controller('bases-locales') @@ -13,10 +20,16 @@ export class ExportCsvController { @Get(':baseLocaleId/csv') @ApiOperation({ summary: 'Get Bal csv file', operationId: 'getCsvBal' }) @ApiParam({ name: 'baseLocaleId', required: true, type: String }) + @ApiQuery({ name: 'withComment', type: Boolean }) @ApiResponse({ status: HttpStatus.OK }) - async getCsvBal(@Req() req: CustomRequest, @Res() res: Response) { + async getCsvBal( + @Req() req: CustomRequest, + @Query('withComment') withComment: string, + @Res() res: Response, + ) { const csvFile: string = await this.exportCsvService.exportToCsv( req.baseLocale, + withComment === 'true' && isAdmin(req, req.baseLocale), ); res.status(HttpStatus.OK).attachment('bal.csv').type('csv').send(csvFile); } diff --git a/libs/shared/src/modules/export_csv/export_csv.service.ts b/libs/shared/src/modules/export_csv/export_csv.service.ts index cfd43ae0..93a99398 100644 --- a/libs/shared/src/modules/export_csv/export_csv.service.ts +++ b/libs/shared/src/modules/export_csv/export_csv.service.ts @@ -33,12 +33,15 @@ export class ExportCsvService { return { voies, toponymes, numeros }; } - async exportToCsv(baseLocale: BaseLocale): Promise { + async exportToCsv( + baseLocale: BaseLocale, + withComment: boolean = false, + ): Promise { const { voies, toponymes, numeros } = await this.getAllFromBal( baseLocale._id, ); - return exportBalToCsv(voies, toponymes, numeros); + return exportBalToCsv(voies, toponymes, numeros, withComment); } async exportVoiesToCsv(baseLocale: BaseLocale): Promise { diff --git a/libs/shared/src/modules/export_csv/utils/export_csv_bal.utils.ts b/libs/shared/src/modules/export_csv/utils/export_csv_bal.utils.ts index fea01af1..d5630761 100644 --- a/libs/shared/src/modules/export_csv/utils/export_csv_bal.utils.ts +++ b/libs/shared/src/modules/export_csv/utils/export_csv_bal.utils.ts @@ -28,6 +28,7 @@ type RowType = { parcelles: string[]; position?: any; _updated: Date; + comment?: string; }; type CsvRowType = { @@ -48,6 +49,7 @@ type CsvRowType = { cad_parcelles: string; source: string; date_der_maj: string; + commentaire?: string; }; function formatCleInterop( @@ -89,7 +91,7 @@ function extractHeaders(csvRows: CsvRowType[]): string[] { } /* eslint camelcase: off */ -function createRow(obj: RowType): CsvRowType { +function createRow(obj: RowType, withComment: boolean): CsvRowType { const row: CsvRowType = { cle_interop: formatCleInterop( obj.codeCommune, @@ -115,6 +117,10 @@ function createRow(obj: RowType): CsvRowType { date_der_maj: obj._updated ? obj._updated.toISOString().slice(0, 10) : '', }; + if (withComment) { + row.commentaire = obj.comment; + } + if (obj.nomVoieAlt) { Object.keys(obj.nomVoieAlt).forEach((o) => { row['voie_nom_' + o] = obj.nomVoieAlt[o]; @@ -147,6 +153,7 @@ export async function exportBalToCsv( voies: Voie[], toponymes: Toponyme[], numeros: Numero[], + withComment: boolean, ): Promise { const voiesIndex: Record = keyBy(voies, (v) => v._id.toHexString(), @@ -183,6 +190,7 @@ export async function exportBalToCsv( nomToponymeAlt: toponyme?.nomAlt || null, parcelles: n.parcelles, position: p, + comment: n.comment, }); }); } @@ -215,7 +223,7 @@ export async function exportBalToCsv( } }); - const csvRows: CsvRowType[] = rows.map((row) => createRow(row)); + const csvRows: CsvRowType[] = rows.map((row) => createRow(row, withComment)); const headers: string[] = extractHeaders(csvRows); return getStream(