@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.
@@ -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
- generate<T>(options: ReportOptions<T>): Observable<HttpResponse<Blob>> | void;
118
- saveFile(response: any, format?: string, forceDownload?: boolean): void;
119
- getFileName(response: any): string;
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: "/api/common/whatsapp-cloud";
263
- readonly REPORTS: "/api/reports";
264
- readonly CONFIG: "/api/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
- generate<T>(options: ReportOptions<T>): Observable<any> | void;
281
- generatePDF<T>(data: T, forceDownload?: boolean): void;
282
- generateExcel<T>(data: T, forceDownload?: boolean): void;
283
- generateWord<T>(data: T, forceDownload?: boolean): void;
284
- generateBlob<T>(data: T, format?: 'pdf' | 'excel' | 'word'): Observable<any>;
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>> | void;
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
  }