@acontplus/ng-common 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -36
- package/fesm2022/acontplus-ng-common.mjs +296 -123
- package/fesm2022/acontplus-ng-common.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acontplus-ng-common.d.ts +203 -16
|
@@ -106,17 +106,17 @@ interface ReportOptions<T = any> {
|
|
|
106
106
|
data: T;
|
|
107
107
|
format?: 'pdf' | 'excel' | 'word';
|
|
108
108
|
useV1Api?: boolean;
|
|
109
|
-
forceDownload?: boolean;
|
|
110
|
-
returnBlob?: boolean;
|
|
111
109
|
}
|
|
112
110
|
/**
|
|
113
111
|
* Puerto para generación de reportes
|
|
114
112
|
* Solo se encarga de generar reportes, no de impresión
|
|
115
113
|
*/
|
|
116
114
|
interface ReportPort {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Genera un reporte y devuelve el Observable
|
|
117
|
+
* El consumidor decide si descargar, abrir o procesar el blob
|
|
118
|
+
*/
|
|
119
|
+
generate<T>(options: ReportOptions<T>): Observable<HttpResponse<Blob>>;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
/**
|
|
@@ -259,9 +259,9 @@ declare enum REPORT_FORMAT {
|
|
|
259
259
|
}
|
|
260
260
|
|
|
261
261
|
declare const API_PATHS: {
|
|
262
|
-
readonly WHATSAPP: "
|
|
263
|
-
readonly REPORTS: "
|
|
264
|
-
readonly CONFIG: "
|
|
262
|
+
readonly WHATSAPP: "common/whatsapp-cloud";
|
|
263
|
+
readonly REPORTS: "reports";
|
|
264
|
+
readonly CONFIG: "config";
|
|
265
265
|
};
|
|
266
266
|
declare const DOCUMENT_TYPES: {
|
|
267
267
|
readonly NORMAL: "NORMAL";
|
|
@@ -275,13 +275,198 @@ declare const WHATSAPP_MESSAGING_PORT: InjectionToken<WhatsAppMessagingPort>;
|
|
|
275
275
|
|
|
276
276
|
declare const PRINTER_PORT: InjectionToken<PrinterPort>;
|
|
277
277
|
|
|
278
|
+
/**
|
|
279
|
+
* Facade para generación de reportes
|
|
280
|
+
*
|
|
281
|
+
* Proporciona una API de alto nivel para generar reportes con manejo automático de archivos.
|
|
282
|
+
* Todos los métodos devuelven Observables - el consumidor debe hacer subscribe().
|
|
283
|
+
*
|
|
284
|
+
* @example
|
|
285
|
+
* ```typescript
|
|
286
|
+
* // Control total del blob
|
|
287
|
+
* this.reportFacade.generate(options).subscribe(response => {
|
|
288
|
+
* const blob = response.body;
|
|
289
|
+
* // Procesar blob manualmente
|
|
290
|
+
* });
|
|
291
|
+
*
|
|
292
|
+
* // Descarga automática
|
|
293
|
+
* this.reportFacade.download(options).subscribe();
|
|
294
|
+
*
|
|
295
|
+
* // Abrir PDF automáticamente
|
|
296
|
+
* this.reportFacade.open(options).subscribe();
|
|
297
|
+
* ```
|
|
298
|
+
*/
|
|
278
299
|
declare class ReportFacade {
|
|
279
300
|
private readonly reportPort;
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
301
|
+
/**
|
|
302
|
+
* Genera un reporte y devuelve el Observable con el blob
|
|
303
|
+
*
|
|
304
|
+
* Este método proporciona control total sobre el blob generado.
|
|
305
|
+
* No realiza ninguna acción automática (descarga/apertura).
|
|
306
|
+
* Útil cuando necesitas procesar el blob manualmente (enviar por WhatsApp, guardar en servidor, etc.)
|
|
307
|
+
*
|
|
308
|
+
* @template T - Tipo de datos del reporte
|
|
309
|
+
* @param options - Opciones de generación del reporte
|
|
310
|
+
* @param options.data - Datos del reporte (usar ReportParamsBuilder.build())
|
|
311
|
+
* @param options.format - Formato del reporte: 'pdf' | 'excel' | 'word'
|
|
312
|
+
* @param options.useV1Api - Si debe usar la API v1 (por defecto false)
|
|
313
|
+
* @returns Observable con la respuesta HTTP que contiene el blob
|
|
314
|
+
*
|
|
315
|
+
* @example
|
|
316
|
+
* ```typescript
|
|
317
|
+
* const options = ReportParamsBuilder.build(
|
|
318
|
+
* { codDoc: ELECTRONIC_DOCUMENT_CODE.FV, id: 123 },
|
|
319
|
+
* 'pdf'
|
|
320
|
+
* );
|
|
321
|
+
*
|
|
322
|
+
* this.reportFacade.generate(options).subscribe({
|
|
323
|
+
* next: (response) => {
|
|
324
|
+
* const blob = response.body;
|
|
325
|
+
* const fileName = FileMapperUtil.extractFileName(response);
|
|
326
|
+
* // Procesar blob según necesidad
|
|
327
|
+
* },
|
|
328
|
+
* error: (err) => console.error('Error:', err)
|
|
329
|
+
* });
|
|
330
|
+
* ```
|
|
331
|
+
*/
|
|
332
|
+
generate<T>(options: ReportOptions<T>): Observable<HttpResponse<Blob>>;
|
|
333
|
+
/**
|
|
334
|
+
* Genera un reporte y lo descarga automáticamente
|
|
335
|
+
*
|
|
336
|
+
* Extrae el nombre del archivo desde los headers HTTP y descarga el archivo automáticamente.
|
|
337
|
+
* Funciona para cualquier formato (PDF, Excel, Word).
|
|
338
|
+
* El Observable se completa después de iniciar la descarga.
|
|
339
|
+
*
|
|
340
|
+
* @template T - Tipo de datos del reporte
|
|
341
|
+
* @param options - Opciones de generación del reporte
|
|
342
|
+
* @returns Observable que se completa después de iniciar la descarga
|
|
343
|
+
*
|
|
344
|
+
* @example
|
|
345
|
+
* ```typescript
|
|
346
|
+
* // Con formato dinámico
|
|
347
|
+
* const options = ReportParamsBuilder.build(
|
|
348
|
+
* { codDoc: SALE_CODE_REPORT.FG },
|
|
349
|
+
* this.selectedFormat // 'pdf' | 'excel' | 'word'
|
|
350
|
+
* );
|
|
351
|
+
* this.reportFacade.download(options).subscribe();
|
|
352
|
+
*
|
|
353
|
+
* // Con formato fijo
|
|
354
|
+
* const options = ReportParamsBuilder.build(
|
|
355
|
+
* { codDoc: INVENTORY_CODE_REPORT.RCD },
|
|
356
|
+
* 'excel'
|
|
357
|
+
* );
|
|
358
|
+
* this.reportFacade.download(options).subscribe();
|
|
359
|
+
* ```
|
|
360
|
+
*/
|
|
361
|
+
download<T>(options: ReportOptions<T>): Observable<HttpResponse<Blob>>;
|
|
362
|
+
/**
|
|
363
|
+
* Genera un reporte y lo abre en nueva ventana (o descarga en navegadores legacy)
|
|
364
|
+
*
|
|
365
|
+
* Comportamiento inteligente según el navegador:
|
|
366
|
+
* - Navegadores modernos: Abre el archivo en nueva ventana/pestaña
|
|
367
|
+
* - Navegadores legacy (IE, Edge antiguo): Descarga el archivo
|
|
368
|
+
*
|
|
369
|
+
* Ideal para PDFs que el usuario quiere visualizar inmediatamente.
|
|
370
|
+
* También funciona con Excel/Word pero la experiencia puede variar según el navegador.
|
|
371
|
+
*
|
|
372
|
+
* @template T - Tipo de datos del reporte
|
|
373
|
+
* @param options - Opciones de generación del reporte
|
|
374
|
+
* @returns Observable que se completa después de abrir/descargar el archivo
|
|
375
|
+
*
|
|
376
|
+
* @example
|
|
377
|
+
* ```typescript
|
|
378
|
+
* // Abrir PDF
|
|
379
|
+
* const options = ReportParamsBuilder.build(
|
|
380
|
+
* { codDoc: ELECTRONIC_DOCUMENT_CODE.FV, id: 123 },
|
|
381
|
+
* 'pdf'
|
|
382
|
+
* );
|
|
383
|
+
* this.reportFacade.open(options).subscribe();
|
|
384
|
+
*
|
|
385
|
+
* // Con formato dinámico
|
|
386
|
+
* const format = this.isPDF ? 'pdf' : 'excel';
|
|
387
|
+
* const options = ReportParamsBuilder.build({ codDoc: code }, format);
|
|
388
|
+
* this.reportFacade.open(options).subscribe();
|
|
389
|
+
* ```
|
|
390
|
+
*/
|
|
391
|
+
open<T>(options: ReportOptions<T>): Observable<HttpResponse<Blob>>;
|
|
392
|
+
/**
|
|
393
|
+
* Genera un PDF y lo abre automáticamente (shortcut)
|
|
394
|
+
*
|
|
395
|
+
* Método de conveniencia para el caso común de generar y abrir PDFs.
|
|
396
|
+
* Equivalente a llamar open() con format: 'pdf'.
|
|
397
|
+
*
|
|
398
|
+
* @template T - Tipo de datos del reporte
|
|
399
|
+
* @param data - Datos del reporte (resultado de ReportParamsBuilder.build().data)
|
|
400
|
+
* @param useV1Api - Si debe usar la API v1 (por defecto false)
|
|
401
|
+
* @returns Observable que se completa después de abrir el PDF
|
|
402
|
+
*
|
|
403
|
+
* @example
|
|
404
|
+
* ```typescript
|
|
405
|
+
* const reportOptions = ReportParamsBuilder.build(
|
|
406
|
+
* { codDoc: ELECTRONIC_DOCUMENT_CODE.FV, id: 123 },
|
|
407
|
+
* 'pdf'
|
|
408
|
+
* );
|
|
409
|
+
*
|
|
410
|
+
* // Forma corta
|
|
411
|
+
* this.reportFacade.openPDF(
|
|
412
|
+
* reportOptions.data,
|
|
413
|
+
* reportOptions.useV1Api
|
|
414
|
+
* ).subscribe();
|
|
415
|
+
* ```
|
|
416
|
+
*/
|
|
417
|
+
openPDF<T>(data: T, useV1Api?: boolean): Observable<HttpResponse<Blob>>;
|
|
418
|
+
/**
|
|
419
|
+
* Genera un Excel y lo descarga automáticamente (shortcut)
|
|
420
|
+
*
|
|
421
|
+
* Método de conveniencia para el caso común de generar y descargar archivos Excel.
|
|
422
|
+
* Equivalente a llamar download() con format: 'excel'.
|
|
423
|
+
*
|
|
424
|
+
* @template T - Tipo de datos del reporte
|
|
425
|
+
* @param data - Datos del reporte (resultado de ReportParamsBuilder.build().data)
|
|
426
|
+
* @param useV1Api - Si debe usar la API v1 (por defecto false)
|
|
427
|
+
* @returns Observable que se completa después de iniciar la descarga
|
|
428
|
+
*
|
|
429
|
+
* @example
|
|
430
|
+
* ```typescript
|
|
431
|
+
* const reportOptions = ReportParamsBuilder.build(
|
|
432
|
+
* { codDoc: SALE_CODE_REPORT.FG, fechaInicio: '2024-01-01' },
|
|
433
|
+
* 'excel'
|
|
434
|
+
* );
|
|
435
|
+
*
|
|
436
|
+
* // Forma corta
|
|
437
|
+
* this.reportFacade.downloadExcel(
|
|
438
|
+
* reportOptions.data,
|
|
439
|
+
* reportOptions.useV1Api
|
|
440
|
+
* ).subscribe();
|
|
441
|
+
* ```
|
|
442
|
+
*/
|
|
443
|
+
downloadExcel<T>(data: T, useV1Api?: boolean): Observable<HttpResponse<Blob>>;
|
|
444
|
+
/**
|
|
445
|
+
* Genera un Word y lo descarga automáticamente (shortcut)
|
|
446
|
+
*
|
|
447
|
+
* Método de conveniencia para el caso común de generar y descargar archivos Word.
|
|
448
|
+
* Equivalente a llamar download() con format: 'word'.
|
|
449
|
+
*
|
|
450
|
+
* @template T - Tipo de datos del reporte
|
|
451
|
+
* @param data - Datos del reporte (resultado de ReportParamsBuilder.build().data)
|
|
452
|
+
* @param useV1Api - Si debe usar la API v1 (por defecto false)
|
|
453
|
+
* @returns Observable que se completa después de iniciar la descarga
|
|
454
|
+
*
|
|
455
|
+
* @example
|
|
456
|
+
* ```typescript
|
|
457
|
+
* const reportOptions = ReportParamsBuilder.build(
|
|
458
|
+
* { codDoc: CUSTOMER_CODE_REPORT.RCL },
|
|
459
|
+
* 'word'
|
|
460
|
+
* );
|
|
461
|
+
*
|
|
462
|
+
* // Forma corta
|
|
463
|
+
* this.reportFacade.downloadWord(
|
|
464
|
+
* reportOptions.data,
|
|
465
|
+
* reportOptions.useV1Api
|
|
466
|
+
* ).subscribe();
|
|
467
|
+
* ```
|
|
468
|
+
*/
|
|
469
|
+
downloadWord<T>(data: T, useV1Api?: boolean): Observable<HttpResponse<Blob>>;
|
|
285
470
|
static ɵfac: i0.ɵɵFactoryDeclaration<ReportFacade, never>;
|
|
286
471
|
static ɵprov: i0.ɵɵInjectableDeclaration<ReportFacade>;
|
|
287
472
|
}
|
|
@@ -358,11 +543,13 @@ declare class GreenWhatsAppAdapter implements WhatsAppMessagingPort {
|
|
|
358
543
|
static ɵprov: i0.ɵɵInjectableDeclaration<GreenWhatsAppAdapter>;
|
|
359
544
|
}
|
|
360
545
|
|
|
546
|
+
/**
|
|
547
|
+
* Adapter para generación de reportes
|
|
548
|
+
* Siempre devuelve Observable - el consumidor decide qué hacer con el blob
|
|
549
|
+
*/
|
|
361
550
|
declare class ReportAdapter implements ReportPort {
|
|
362
551
|
private readonly http;
|
|
363
|
-
generate<T>(options: ReportOptions<T>): Observable<HttpResponse<Blob
|
|
364
|
-
getFileName(response: any): string;
|
|
365
|
-
saveFile(response: any, format?: string, forceDownload?: boolean): void;
|
|
552
|
+
generate<T>(options: ReportOptions<T>): Observable<HttpResponse<Blob>>;
|
|
366
553
|
static ɵfac: i0.ɵɵFactoryDeclaration<ReportAdapter, never>;
|
|
367
554
|
static ɵprov: i0.ɵɵInjectableDeclaration<ReportAdapter>;
|
|
368
555
|
}
|