import { Component, ChangeDetectorRef, ViewChild } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { Router } from '@angular/router'; import { RouteAssignedResponse } from '../../../core/models/route.model'; import { saveAs } from 'file-saver'; import { Table } from 'primeng/table'; import { TableModule } from 'primeng/table'; import { InputTextModule } from 'primeng/inputtext'; import { TooltipModule } from 'primeng/tooltip'; import { RouteState } from '../../../core/route-state/route'; @Component({ standalone: true, selector: 'app-assigned-route', imports: [ CommonModule, FormsModule, TableModule, InputTextModule, TooltipModule ], templateUrl: './assigned-route.component.html', styleUrl: './assigned-route.component.css' }) export class AssignedRouteComponent { @ViewChild('dt') table!: Table; rutasExpandido = false; tablaRutas = ''; assignedRoutes: RouteAssignedResponse[] = []; isLoading = false; cols: any[] = []; constructor( private routesState: RouteState, private cdr: ChangeDetectorRef, private router: Router ) { } ngOnInit() { this.routesState.resetLoading(); this.routesState.loading$.subscribe(value => { this.isLoading = value; this.cdr.detectChanges(); }); this.routesState.assignedRoutes$.subscribe(data => { this.assignedRoutes = [...data]; this.cdr.detectChanges(); }); this.cols = [ { field: 'json.nombre_usuario', header: 'Usuario' }, { field: 'json.nombre_pdv', header: 'PDV' }, { field: 'json.hora_laboral_semanal_usuario', header: 'Sem. Usuario (hr)' }, { field: 'json.hora_minima_semanal_pdv', header: 'Horas Min. PDV' }, { field: 'json.horas_trabajo', header: 'Horas Trabajo' }, { field: 'json.dia', header: 'Día' }, { field: 'json.distancia', header: 'Distancia (km)' }, { field: 'json.horas_desplazamiento', header: 'Duración (min)' }, { field: '', header: '' } ]; } onShowMap(row: RouteAssignedResponse) { this.routesState.sendRoute(row); this.router.navigate(['/home/assigned-route']); } toggleRutas() { this.rutasExpandido = !this.rutasExpandido; } downloadCSV() { const headers = [ 'Usuario ID', 'Usuario', 'Long Usuario', 'Lat Usuario', 'PDV ID', 'PDV', 'Long PDV', 'Lat PDV', 'Horas Usuario', 'Horas PDV', 'Horas Trabajo', 'Día', 'Distancia', 'Duracion' ]; const data = this.table.filteredValue && this.table.filteredValue.length ? this.table.filteredValue : this.assignedRoutes; const rows = data.map(r => [ r.json.usuario_id, r.json.nombre_usuario, r.json.longitud_usuario, r.json.latitud_usuario, r.json.pdv_id, r.json.nombre_pdv, r.json.longitud_pdv, r.json.latitud_pdv, r.json.hora_laboral_semanal_usuario, r.json.hora_minima_semanal_pdv, r.json.horas_trabajo, r.json.dia, r.json.distancia, r.json.horas_desplazamiento ]); const csvContent = [headers, ...rows].map(r => r.join(',')).join('\n'); const bom = '\uFEFF'; const blob = new Blob([bom + csvContent], { type: 'text/csv;charset=utf-8;' }); saveAs(blob, 'rutas_planificadas.csv'); } }