feature/csv-clarion-exchange-type
This commit is contained in:
@@ -437,11 +437,20 @@ export const api = {
|
||||
|
||||
// CSV import for Tipos de Cambio (flujo en general_catalogs/exchange_rate/imports)
|
||||
exchangeRateImports: {
|
||||
upload: (file: File, companyId: number) => {
|
||||
upload: (
|
||||
file: File,
|
||||
companyId: number,
|
||||
params?: { reemplazar_sin_preguntar?: boolean; date_format?: string }
|
||||
) => {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
const search = new URLSearchParams({ company_id: String(companyId) });
|
||||
if (params?.reemplazar_sin_preguntar !== undefined)
|
||||
search.set('reemplazar_sin_preguntar', String(!!params.reemplazar_sin_preguntar));
|
||||
if (params?.date_format != null && params.date_format !== '')
|
||||
search.set('date_format', params.date_format);
|
||||
return fetchApi(
|
||||
`/v1/a76/exchange-rate/imports/upload?company_id=${companyId}`,
|
||||
`/v1/a76/exchange-rate/imports/upload?${search.toString()}`,
|
||||
{ method: 'POST', body: formData }
|
||||
);
|
||||
},
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
let totalSkipped = $derived(
|
||||
(commitResults?.skipped_invalid || 0) +
|
||||
(commitResults?.skipped_missing_fk || 0) +
|
||||
(commitResults?.skipped_missing_invoice || 0)
|
||||
(commitResults?.skipped_missing_invoice || 0) +
|
||||
(commitResults?.skipped_duplicate || 0)
|
||||
);
|
||||
|
||||
function handleOpenChange(newOpen: boolean) {
|
||||
|
||||
@@ -176,7 +176,16 @@
|
||||
|
||||
if (useExchangeRateImport) {
|
||||
try {
|
||||
const res = await api.exchangeRateImports.upload(file, companyId);
|
||||
const catalogosSettings = allSettings['catalogos'] || {};
|
||||
const globalMode = globalSettings['mode'] ?? catalogosSettings['mode'] ?? 'update';
|
||||
const reemplazar_sin_preguntar = globalMode === 'replace';
|
||||
// Formato activo del selector global (Formato de Fecha); mismo default que la barra
|
||||
const dateFormat =
|
||||
globalSettings['dateFormat'] ?? catalogosSettings['dateFormat'] ?? globalCsvParams.find((p) => p.name === 'dateFormat')?.defaultValue ?? 'dd/mm/yyyy';
|
||||
const res = await api.exchangeRateImports.upload(file, companyId, {
|
||||
reemplazar_sin_preguntar,
|
||||
date_format: dateFormat
|
||||
});
|
||||
if (res.data?.job_id) {
|
||||
currentJobId = res.data.job_id;
|
||||
pollStatus();
|
||||
@@ -518,16 +527,20 @@
|
||||
commitResults = res.data;
|
||||
showResultModal = true;
|
||||
const inserted = res.data?.inserted || 0;
|
||||
const updated = res.data?.updated || 0;
|
||||
const skippedInvalid = res.data?.skipped_invalid || 0;
|
||||
const skippedFk = res.data?.skipped_missing_fk || 0;
|
||||
const skippedDup = res.data?.skipped_duplicate || 0;
|
||||
const skippedDetails = res.data?.skipped_details || [];
|
||||
|
||||
if (inserted > 0) {
|
||||
toast.success(`Importación completada: ${inserted} registros insertados`);
|
||||
if (inserted > 0 || updated > 0) {
|
||||
const parts = [];
|
||||
if (inserted > 0) parts.push(`${inserted} insertados`);
|
||||
if (updated > 0) parts.push(`${updated} actualizados`);
|
||||
toast.success(`Importación completada: ${parts.join(', ')}`);
|
||||
if (skippedInvalid > 0 || skippedFk > 0 || skippedDup > 0) {
|
||||
const totalSkipped = skippedInvalid + skippedFk + skippedDup;
|
||||
toast.warning(`${totalSkipped} registros fueron rechazados`);
|
||||
toast.warning(`${totalSkipped} registros fueron rechazados u omitidos`);
|
||||
}
|
||||
} else {
|
||||
toast.error('No se insertaron registros. Revisa los errores a continuación.');
|
||||
|
||||
Reference in New Issue
Block a user