From 26fb849fa398b9ac735bb5296f720c63899f0fab Mon Sep 17 00:00:00 2001 From: Nicolas Date: Sun, 1 Feb 2026 16:58:50 -0400 Subject: [PATCH] Exportar OSP en excel con formato especifico (falta img y datos que no estan en el formulario) --- apps/api/nest-cli.json | 11 +- apps/api/package.json | 3 +- .../training/export_template/excel.osp.xlsx | Bin 0 -> 89633 bytes .../features/training/training.controller.ts | 24 +- .../src/features/training/training.service.ts | 263 +++++++++++++++++- apps/web/app/dashboard/formulario/page.tsx | 3 + .../training/components/training-list.tsx | 5 +- .../training-tables/cell-action.tsx | 26 +- .../components/training-tables/columns.tsx | 80 +++--- .../components/training-view-modal.tsx | 18 +- 10 files changed, 372 insertions(+), 61 deletions(-) create mode 100644 apps/api/src/features/training/export_template/excel.osp.xlsx diff --git a/apps/api/nest-cli.json b/apps/api/nest-cli.json index 579ca35..72880aa 100644 --- a/apps/api/nest-cli.json +++ b/apps/api/nest-cli.json @@ -5,6 +5,13 @@ "compilerOptions": { "deleteOutDir": true, "builder": "swc", - "typeCheck": true + "typeCheck": true, + "assets": [ + { + "include": "features/training/export_template/*.xlsx", + "outDir": "dist", + "watchAssets": true + } + ] } -} +} \ No newline at end of file diff --git a/apps/api/package.json b/apps/api/package.json index 22218ea..c32d8ff 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -50,7 +50,8 @@ "pino-pretty": "13.0.0", "reflect-metadata": "0.2.0", "rxjs": "7.8.1", - "sharp": "^0.34.5" + "sharp": "^0.34.5", + "xlsx-populate": "^1.21.0" }, "devDependencies": { "@nestjs-modules/mailer": "^2.0.2", diff --git a/apps/api/src/features/training/export_template/excel.osp.xlsx b/apps/api/src/features/training/export_template/excel.osp.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ea80f0d01315d1bdef0f4845e248f9fd5b600e77 GIT binary patch literal 89633 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 literal 0 HcmV?d00001 diff --git a/apps/api/src/features/training/training.controller.ts b/apps/api/src/features/training/training.controller.ts index b28c2a1..de5eada 100644 --- a/apps/api/src/features/training/training.controller.ts +++ b/apps/api/src/features/training/training.controller.ts @@ -7,8 +7,11 @@ import { Patch, Post, Query, + Res, UploadedFiles, UseInterceptors, + StreamableFile, + Header } from '@nestjs/common'; import { FilesInterceptor } from '@nestjs/platform-express'; import { @@ -23,11 +26,30 @@ import { CreateTrainingDto } from './dto/create-training.dto'; import { TrainingStatisticsFilterDto } from './dto/training-statistics-filter.dto'; import { UpdateTrainingDto } from './dto/update-training.dto'; import { TrainingService } from './training.service'; +import { Public } from '@/common/decorators'; @ApiTags('training') @Controller('training') export class TrainingController { - constructor(private readonly trainingService: TrainingService) {} + constructor(private readonly trainingService: TrainingService) { } + + @Public() + @Get('export/:id') + @ApiOperation({ summary: 'Export training template' }) + @ApiResponse({ + status: 200, + description: 'Return training template.', + content: { 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': { schema: { type: 'string', format: 'binary' } } } + }) + @Header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') + @Header('Content-Disposition', 'attachment; filename=export_osp.xlsx') + async exportTemplate(@Param('id') id: string) { + if (!Number(id)) { + throw new Error('ID is required'); + } + const data = await this.trainingService.exportTemplate(Number(id)); + return new StreamableFile(data); + } @Get() @ApiOperation({ diff --git a/apps/api/src/features/training/training.service.ts b/apps/api/src/features/training/training.service.ts index 6b4528d..f6d0641 100644 --- a/apps/api/src/features/training/training.service.ts +++ b/apps/api/src/features/training/training.service.ts @@ -1,11 +1,12 @@ -import { HttpException, HttpStatus, Inject, Injectable } from '@nestjs/common'; +import { HttpException, HttpStatus, Inject, Injectable, NotFoundException } from '@nestjs/common'; import { and, eq, gte, ilike, lte, or, SQL, sql } from 'drizzle-orm'; import { NodePgDatabase } from 'drizzle-orm/node-postgres'; import * as fs from 'fs'; import * as path from 'path'; import { DRIZZLE_PROVIDER } from 'src/database/drizzle-provider'; import * as schema from 'src/database/index'; -import { states, trainingSurveys } from 'src/database/index'; +import { municipalities, parishes, states, trainingSurveys } from 'src/database/index'; +import XlsxPopulate from 'xlsx-populate'; import { PaginationDto } from '../../common/dto/pagination.dto'; import { CreateTrainingDto } from './dto/create-training.dto'; import { TrainingStatisticsFilterDto } from './dto/training-statistics-filter.dto'; @@ -15,7 +16,7 @@ import { UpdateTrainingDto } from './dto/update-training.dto'; export class TrainingService { constructor( @Inject(DRIZZLE_PROVIDER) private drizzle: NodePgDatabase, - ) {} + ) { } async findAll(paginationDto?: PaginationDto) { const { @@ -285,10 +286,6 @@ export class TrainingService { photo1: photoPaths[0] ?? null, photo2: photoPaths[1] ?? null, photo3: photoPaths[2] ?? null, - - // NOTA: Como las columnas state, municipality, etc. en la BD - // tienen "onDelete: set null" o son nullables, al no pasarlas aquí, - // Postgres automáticamente las guardará como NULL. }) .returning(); @@ -361,4 +358,256 @@ export class TrainingService { data: deletedRecord, }; } + + // async exportTemplate() { + + // const templatePath = path.join( + // __dirname, + // 'export_template', + // 'excel.osp.xlsx', + // ); + // const templateBuffer = fs.readFileSync(templatePath); + + // const workbook: any = await XlsxPopulate.fromDataAsync(templateBuffer); + // const sheet = workbook.sheet(0); + + // const records = await this.drizzle + // .select({ + // firstname: trainingSurveys.firstname, + // lastname: trainingSurveys.lastname, + // visitDate: trainingSurveys.visitDate, + // stateName: states.name, + // municipalityName: municipalities.name, + // parishName: parishes.name, + // communeName: trainingSurveys.communeName, + // siturCodeCommune: trainingSurveys.siturCodeCommune, + // communalCouncil: trainingSurveys.communalCouncil, + // siturCodeCommunalCouncil: trainingSurveys.siturCodeCommunalCouncil, + // productiveActivity: trainingSurveys.productiveActivity, + // ospName: trainingSurveys.ospName, + // ospAddress: trainingSurveys.ospAddress, + // ospRif: trainingSurveys.ospRif, + // ospType: trainingSurveys.ospType, + // currentStatus: trainingSurveys.currentStatus, + // companyConstitutionYear: trainingSurveys.companyConstitutionYear, + // ospResponsibleFullname: trainingSurveys.ospResponsibleFullname, + // ospResponsibleCedula: trainingSurveys.ospResponsibleCedula, + // ospResponsibleRif: trainingSurveys.ospResponsibleRif, + // ospResponsiblePhone: trainingSurveys.ospResponsiblePhone, + // ospResponsibleEmail: trainingSurveys.ospResponsibleEmail, + // civilState: trainingSurveys.civilState, + // familyBurden: trainingSurveys.familyBurden, + // numberOfChildren: trainingSurveys.numberOfChildren, + // generalObservations: trainingSurveys.generalObservations, + // paralysisReason: trainingSurveys.paralysisReason, + // productList: trainingSurveys.productList, + // infrastructureMt2: trainingSurveys.infrastructureMt2, + // photo1: trainingSurveys.photo1, + // photo2: trainingSurveys.photo2, + // photo3: trainingSurveys.photo3, + // }) + // .from(trainingSurveys) + // .leftJoin(states, eq(trainingSurveys.state, states.id)) + // .leftJoin( + // municipalities, + // eq(trainingSurveys.municipality, municipalities.id), + // ) + // .leftJoin(parishes, eq(trainingSurveys.parish, parishes.id)) + // .execute(); + + // let currentRow = 2; + + // for (const record of records) { + // const date = new Date(record.visitDate); + // const dateStr = date.toLocaleDateString('es-VE'); + // const timeStr = date.toLocaleTimeString('es-VE'); + + // sheet.cell(`A${currentRow}`).value(record.firstname); + // sheet.cell(`B${currentRow}`).value(record.lastname); + // sheet.cell(`C${currentRow}`).value(dateStr); + // sheet.cell(`D${currentRow}`).value(timeStr); + // sheet.cell(`E${currentRow}`).value(record.stateName || ''); + // sheet.cell(`F${currentRow}`).value(record.municipalityName || ''); + // sheet.cell(`G${currentRow}`).value(record.parishName || ''); + // sheet.cell(`H${currentRow}`).value(record.communeName); + // sheet.cell(`I${currentRow}`).value(record.siturCodeCommune); + // sheet.cell(`J${currentRow}`).value(record.communalCouncil); + // sheet.cell(`K${currentRow}`).value(record.siturCodeCommunalCouncil); + // sheet.cell(`L${currentRow}`).value(record.productiveActivity); + // sheet.cell(`M${currentRow}`).value(''); // requerimiento financiero description + // sheet.cell(`N${currentRow}`).value(record.ospName); + // sheet.cell(`O${currentRow}`).value(record.ospAddress); + // sheet.cell(`P${currentRow}`).value(record.ospRif); + // sheet.cell(`Q${currentRow}`).value(record.ospType); + // sheet.cell(`R${currentRow}`).value(record.currentStatus); + // sheet.cell(`S${currentRow}`).value(record.companyConstitutionYear); + + // const products = (record.productList as any[]) || []; + // const totalProducers = products.reduce( + // (sum, p) => + // sum + (Number(p.menCount) || 0) + (Number(p.womenCount) || 0), + // 0, + // ); + // const productsDesc = products.map((p) => p.name).join(', '); + + // sheet.cell(`T${currentRow}`).value(totalProducers); + // sheet.cell(`U${currentRow}`).value(productsDesc); + // sheet.cell(`V${currentRow}`).value(record.infrastructureMt2); + // sheet.cell(`W${currentRow}`).value(''); + // sheet.cell(`X${currentRow}`).value(record.paralysisReason || ''); + // sheet.cell(`Y${currentRow}`).value(record.ospResponsibleFullname); + // sheet.cell(`Z${currentRow}`).value(record.ospResponsibleCedula); + // sheet.cell(`AA${currentRow}`).value(record.ospResponsibleRif); + // sheet.cell(`AB${currentRow}`).value(record.ospResponsiblePhone); + // sheet.cell(`AC${currentRow}`).value(record.ospResponsibleEmail); + // sheet.cell(`AD${currentRow}`).value(record.civilState); + // sheet.cell(`AE${currentRow}`).value(record.familyBurden); + // sheet.cell(`AF${currentRow}`).value(record.numberOfChildren); + // sheet.cell(`AG${currentRow}`).value(record.generalObservations || ''); + + // sheet.cell(`AH${currentRow}`).value(record.photo1 || ''); + // sheet.cell(`AI${currentRow}`).value(record.photo2 || ''); + // sheet.cell(`AJ${currentRow}`).value(record.photo3 || ''); + + // currentRow++; + // } + + // return await workbook.outputAsync(); + // } + + async exportTemplate(id: number) { + + // Validar que el registro exista + const exist = await this.findOne(id); + if (!exist) throw new NotFoundException(`No se encontro el registro`); + + // Obtener los datos del registro + const records = await this.drizzle + .select({ + // id: trainingSurveys.id, + visitDate: trainingSurveys.visitDate, + ospName: trainingSurveys.ospName, + productiveSector: trainingSurveys.productiveSector, + ospAddress: trainingSurveys.ospAddress, + ospRif: trainingSurveys.ospRif, + + siturCodeCommune: trainingSurveys.siturCodeCommune, + communeEmail: trainingSurveys.communeEmail, + communeRif: trainingSurveys.communeRif, + communeSpokespersonName: trainingSurveys.communeSpokespersonName, + communeSpokespersonPhone: trainingSurveys.communeSpokespersonPhone, + + siturCodeCommunalCouncil: trainingSurveys.siturCodeCommunalCouncil, + communalCouncilRif: trainingSurveys.communalCouncilRif, + communalCouncilSpokespersonName: trainingSurveys.communalCouncilSpokespersonName, + communalCouncilSpokespersonPhone: trainingSurveys.communalCouncilSpokespersonPhone, + + ospType: trainingSurveys.ospType, + productiveActivity: trainingSurveys.productiveActivity, // Sector Productivo + companyConstitutionYear: trainingSurveys.companyConstitutionYear, + infrastructureMt2: trainingSurveys.infrastructureMt2, + + hasTransport: trainingSurveys.hasTransport, + structureType: trainingSurveys.structureType, + isOpenSpace: trainingSurveys.isOpenSpace, + + ospResponsibleFullname: trainingSurveys.ospResponsibleFullname, + ospResponsibleCedula: trainingSurveys.ospResponsibleCedula, + ospResponsiblePhone: trainingSurveys.ospResponsiblePhone, + + productList: trainingSurveys.productList, + equipmentList: trainingSurveys.equipmentList, + productionList: trainingSurveys.productionList, + + // photo1: trainingSurveys.photo1 + }) + .from(trainingSurveys) + .where(eq(trainingSurveys.id, id)) + // .leftJoin(states, eq(trainingSurveys.state, states.id)) + // .leftJoin(municipalities,eq(trainingSurveys.municipality, municipalities.id)) + // .leftJoin(parishes, eq(trainingSurveys.parish, parishes.id)) + + let equipmentList: any[] = Array.isArray(records[0].equipmentList) ? records[0].equipmentList : []; + let productList: any[] = Array.isArray(records[0].productList) ? records[0].productList : []; + let productionList: any[] = Array.isArray(records[0].productionList) ? records[0].productionList : []; + + console.log('equipmentList', equipmentList); + console.log('productList', productList); + console.log('productionList', productionList); + + let equipmentListArray: any[] = []; + let productListArray: any[] = []; + let productionListArray: any[] = []; + + const equipmentListCount = equipmentList.length; + for (let i = 0; i < equipmentListCount; i++) { + equipmentListArray.push([equipmentList[i].machine, '', equipmentList[i].quantity]); + } + + const productListCount = productList.length; + for (let i = 0; i < productListCount; i++) { + productListArray.push([productList[i].productName, productList[i].dailyCount, productList[i].weeklyCount, productList[i].monthlyCount]); + } + + const productionListCount = productionList.length; + for (let i = 0; i < productionListCount; i++) { + productionListArray.push([productionList[i].rawMaterial, '', productionList[i].quantity]); + } + + // Ruta de la plantilla + const templatePath = path.join( + __dirname, + 'export_template', + 'excel.osp.xlsx', + ); + + // Cargar la plantilla + const book = await XlsxPopulate.fromFileAsync(templatePath); + + const isoString = records[0].visitDate; + const dateObj = new Date(isoString); + const fechaFormateada = dateObj.toLocaleDateString('es-ES'); + const horaFormateada = dateObj.toLocaleTimeString('es-ES', { hour: '2-digit', minute: '2-digit' }); + + // Llenar los datos + book.sheet(0).cell('A6').value(records[0].productiveSector); + book.sheet(0).cell('D6').value(records[0].ospName); + book.sheet(0).cell('L5').value(fechaFormateada); + book.sheet(0).cell('L6').value(horaFormateada); + book.sheet(0).cell('B10').value(records[0].ospAddress); + book.sheet(0).cell('C11').value(records[0].communeEmail); + book.sheet(0).cell('C12').value(records[0].communeSpokespersonName); + book.sheet(0).cell('G11').value(records[0].communeRif); + book.sheet(0).cell('G12').value(records[0].communeSpokespersonPhone); + book.sheet(0).cell('C13').value(records[0].siturCodeCommune); + book.sheet(0).cell('G13').value(records[0].siturCodeCommunalCouncil); + book.sheet(0).cell('G14').value(records[0].communalCouncilRif); + book.sheet(0).cell('C15').value(records[0].communalCouncilSpokespersonName); + book.sheet(0).cell('G15').value(records[0].communalCouncilSpokespersonPhone); + book.sheet(0).cell('C16').value(records[0].ospType); + book.sheet(0).cell('C17').value(records[0].ospName); + book.sheet(0).cell('C18').value(records[0].productiveActivity); + book.sheet(0).cell('C19').value('Proveedores'); + book.sheet(0).cell('C20').value(records[0].companyConstitutionYear); + book.sheet(0).cell('C21').value(records[0].infrastructureMt2); + book.sheet(0).cell('G17').value(records[0].ospRif); + + book.sheet(0).cell(records[0].hasTransport === true ? 'J19' : 'L19').value('X'); + book.sheet(0).cell(records[0].structureType === 'CASA' ? 'J20' : 'L20').value('X'); + book.sheet(0).cell(records[0].isOpenSpace === true ? 'J21' : 'L21').value('X'); + + book.sheet(0).cell('A24').value(records[0].ospResponsibleFullname); + book.sheet(0).cell('C24').value(records[0].ospResponsibleCedula); + book.sheet(0).cell('E24').value(records[0].ospResponsiblePhone); + + + book.sheet(0).cell('J24').value('N Femenino'); + book.sheet(0).cell('L24').value('N Masculino'); + + book.sheet(0).range(`A28:C${equipmentListCount + 28}`).value(equipmentListArray); + book.sheet(0).range(`E28:G${productionListCount + 28}`).value(productionListArray); + book.sheet(0).range(`I28:L${productListCount + 28}`).value(productListArray); + + return book.outputAsync(); + } } diff --git a/apps/web/app/dashboard/formulario/page.tsx b/apps/web/app/dashboard/formulario/page.tsx index 35a0044..e963ddf 100644 --- a/apps/web/app/dashboard/formulario/page.tsx +++ b/apps/web/app/dashboard/formulario/page.tsx @@ -5,6 +5,8 @@ import TrainingTableAction from '@/feactures/training/components/training-tables import { searchParamsCache } from '@repo/shadcn/lib/searchparams'; import { SearchParams } from 'nuqs'; +import { env } from '@/lib/env'; + export const metadata = { title: 'Registro de OSP', }; @@ -29,6 +31,7 @@ export default async function Page({ searchParams }: PageProps) { initialPage={page} initialSearch={searchQuery} initialLimit={limit || 10} + apiUrl={env.API_URL} /> diff --git a/apps/web/feactures/training/components/training-list.tsx b/apps/web/feactures/training/components/training-list.tsx index 78bcd77..f471c05 100644 --- a/apps/web/feactures/training/components/training-list.tsx +++ b/apps/web/feactures/training/components/training-list.tsx @@ -1,5 +1,4 @@ 'use client'; - import { DataTable } from '@repo/shadcn/table/data-table'; import { DataTableSkeleton } from '@repo/shadcn/table/data-table-skeleton'; import { useTrainingQuery } from '../hooks/use-training'; @@ -9,12 +8,14 @@ interface TrainingListProps { initialPage: number; initialSearch?: string | null; initialLimit: number; + apiUrl: string; } export default function TrainingList({ initialPage, initialSearch, initialLimit, + apiUrl, }: TrainingListProps) { const filters = { page: initialPage, @@ -30,7 +31,7 @@ export default function TrainingList({ return ( = ({ data }) => { +export const CellAction: React.FC = ({ data, apiUrl }) => { const [loading, setLoading] = useState(false); const [open, setOpen] = useState(false); const [viewOpen, setViewOpen] = useState(false); @@ -37,6 +38,10 @@ export const CellAction: React.FC = ({ data }) => { } }; + const handleExport = (id?: number | undefined) => { + window.open(`${apiUrl}/training/export/${id}`, '_blank'); + }; + return ( <> = ({ data }) => { + + + + + + +

Exportar Excel

+
+
+
+ diff --git a/apps/web/feactures/training/components/training-tables/columns.tsx b/apps/web/feactures/training/components/training-tables/columns.tsx index 70dbca4..38dcf31 100644 --- a/apps/web/feactures/training/components/training-tables/columns.tsx +++ b/apps/web/feactures/training/components/training-tables/columns.tsx @@ -4,42 +4,48 @@ import { Badge } from '@repo/shadcn/badge'; import { ColumnDef } from '@tanstack/react-table'; import { CellAction } from './cell-action'; -export const columns: ColumnDef[] = [ - { - accessorKey: 'ospName', - header: 'Nombre OSP', - }, - { - accessorKey: 'ospRif', - header: 'RIF', - }, - { - accessorKey: 'ospType', - header: 'Tipo', - }, - { - accessorKey: 'currentStatus', - header: 'Estatus', - cell: ({ row }) => { - const status = row.getValue('currentStatus') as string; - return ( - - {status} - - ); +interface ColumnsProps { + apiUrl: string; +} + +export function columns({ apiUrl }: ColumnsProps): ColumnDef[] { + return [ + { + accessorKey: 'ospName', + header: 'Nombre OSP', }, - }, - { - accessorKey: 'visitDate', - header: 'Fecha Visita', - cell: ({ row }) => { - const date = row.getValue('visitDate') as string; - return date ? new Date(date).toLocaleString() : 'N/A'; + { + accessorKey: 'ospRif', + header: 'RIF', }, - }, - { - id: 'actions', - header: 'Acciones', - cell: ({ row }) => , - }, -]; + { + accessorKey: 'ospType', + header: 'Tipo', + }, + { + accessorKey: 'currentStatus', + header: 'Estatus', + cell: ({ row }) => { + const status = row.getValue('currentStatus') as string; + return ( + + {status} + + ); + }, + }, + { + accessorKey: 'visitDate', + header: 'Fecha Visita', + cell: ({ row }) => { + const date = row.getValue('visitDate') as string; + return date ? new Date(date).toLocaleString() : 'N/A'; + }, + }, + { + id: 'actions', + header: 'Acciones', + cell: ({ row }) => , + }, + ]; +} diff --git a/apps/web/feactures/training/components/training-view-modal.tsx b/apps/web/feactures/training/components/training-view-modal.tsx index 4074a99..78c94d1 100644 --- a/apps/web/feactures/training/components/training-view-modal.tsx +++ b/apps/web/feactures/training/components/training-view-modal.tsx @@ -314,10 +314,10 @@ export function TrainingViewModal({ ))} {(!data.equipmentList || data.equipmentList.length === 0) && ( -

- No hay equipamiento registrado. -

- )} +

+ No hay equipamiento registrado. +

+ )} @@ -345,10 +345,10 @@ export function TrainingViewModal({ ))} {(!data.productionList || data.productionList.length === 0) && ( -

- No hay materia prima registrada. -

- )} +

+ No hay materia prima registrada. +

+ )} @@ -421,7 +421,7 @@ export function TrainingViewModal({ {data.paralysisReason && (

- Motivo Paralización + Motivo de Paralización

{data.paralysisReason}