Fix new Frontend 8

This commit is contained in:
Urtzi Alfaro
2025-08-04 09:00:18 +02:00
parent a8dbd37c5a
commit 73c523f193
4 changed files with 24 additions and 12 deletions

View File

@@ -7,6 +7,7 @@ import { useState, useCallback } from 'react';
import { dataService } from '../services'; import { dataService } from '../services';
import type { import type {
SalesData, SalesData,
SalesValidationResult,
SalesDataQuery, SalesDataQuery,
SalesImportResult, SalesImportResult,
DashboardStats, DashboardStats,
@@ -52,7 +53,7 @@ export const useData = () => {
const validateSalesData = useCallback(async ( const validateSalesData = useCallback(async (
tenantId: string, tenantId: string,
file: File file: File
): Promise<SalesImportResult> => { ): Promise<SalesValidationResult> => {
try { try {
setIsLoading(true); setIsLoading(true);
setError(null); setError(null);

View File

@@ -8,6 +8,7 @@ import { apiClient } from '../client';
import { RequestTimeouts } from '../client/config'; import { RequestTimeouts } from '../client/config';
import type { import type {
SalesData, SalesData,
SalesValidationResult,
SalesDataQuery, SalesDataQuery,
SalesDataImport, SalesDataImport,
SalesImportResult, SalesImportResult,
@@ -60,7 +61,7 @@ export class DataService {
async validateSalesData( async validateSalesData(
tenantId: string, tenantId: string,
file: File file: File
): Promise<SalesImportResult> { ): Promise<SalesValidationResult> {
const fileName = file.name.toLowerCase(); const fileName = file.name.toLowerCase();
let fileFormat: string; let fileFormat: string;
@@ -75,11 +76,12 @@ export class DataService {
} }
return apiClient.upload( return apiClient.upload(
`/tenants/${tenantId}/sales/validate`, `/tenants/${tenantId}/sales/import/validate`,
file, file,
{ {
file_format: fileFormat, file_format: fileFormat,
validate_only: true, validate_only: true,
source: 'onboarding_upload',
}, },
{ {
timeout: RequestTimeouts.MEDIUM, timeout: RequestTimeouts.MEDIUM,

View File

@@ -18,6 +18,16 @@ export interface SalesData {
external_factors?: ExternalFactors; external_factors?: ExternalFactors;
} }
export interface SalesValidationResult {
is_valid: boolean;
total_records: number;
valid_records: number;
invalid_records: number;
errors: ValidationError[];
warnings: ValidationError[];
summary: Record<string, any>;
}
export interface ExternalFactors { export interface ExternalFactors {
weather_temperature?: number; weather_temperature?: number;
weather_precipitation?: number; weather_precipitation?: number;

View File

@@ -125,15 +125,14 @@ const OnboardingPage: React.FC<OnboardingPageProps> = ({ user, onComplete }) =>
try { try {
// Step 2.1: First validate the CSV data // Step 2.1: First validate the CSV data
toast.loading('Validando datos del archivo CSV...', { id: 'csv-validation' }); toast.loading('Validando datos del archivo CSV...', { id: 'csv-validation' });
const validationResult = await validateSalesData(tenantId, bakeryData.csvFile);
toast.dismiss('csv-validation');
// Check validation result // Check validation result
if (!validationResult.success) { const validationResult = await validateSalesData(tenantId, bakeryData.csvFile);
// Check validation result using the correct field names
if (!validationResult.is_valid) { // ← Changed from .success to .is_valid
// Validation failed - show errors but let user decide // Validation failed - show errors but let user decide
const errorMessages = validationResult.errors?.slice(0, 3).join(', ') || 'Errores de validación'; const errorMessages = validationResult.errors?.slice(0, 3).map(e => e.message || 'Unknown error').join(', ') || 'Errores de validación';
const hasMoreErrors = validationResult.errors && validationResult.errors.length > 3; const hasMoreErrors = validationResult.errors && validationResult.errors.length > 3;
toast.error( toast.error(
@@ -145,13 +144,13 @@ const OnboardingPage: React.FC<OnboardingPageProps> = ({ user, onComplete }) =>
// Don't proceed with upload if validation fails // Don't proceed with upload if validation fails
throw new Error('Validación del CSV falló'); throw new Error('Validación del CSV falló');
} }
// Validation passed - show summary and proceed // Validation passed - show summary and proceed
if (validationResult.warnings && validationResult.warnings.length > 0) { if (validationResult.warnings && validationResult.warnings.length > 0) {
toast.warn(`CSV validado con ${validationResult.warnings.length} advertencias. Continuando con la subida...`); toast.warn(`CSV validado con ${validationResult.warnings.length} advertencias. Continuando con la subida...`);
console.warn('CSV validation warnings:', validationResult.warnings); console.warn('CSV validation warnings:', validationResult.warnings);
} else { } else {
toast.success('CSV validado correctamente. Procediendo con la subida...'); toast.success(`CSV validado correctamente. ${validationResult.valid_records} de ${validationResult.total_records} registros válidos.`);
} }
// Step 2.2: Now upload the validated CSV // Step 2.2: Now upload the validated CSV