brainloper-ui 18.0.1 → 20.0.0

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.
Files changed (105) hide show
  1. package/fesm2022/brainloper-ui.mjs +124 -115
  2. package/fesm2022/brainloper-ui.mjs.map +1 -1
  3. package/index.d.ts +896 -5
  4. package/package.json +16 -18
  5. package/esm2022/brainloper-ui.mjs +0 -5
  6. package/esm2022/public_api.mjs +0 -58
  7. package/esm2022/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +0 -303
  8. package/esm2022/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +0 -30
  9. package/esm2022/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +0 -23
  10. package/esm2022/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +0 -83
  11. package/esm2022/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +0 -42
  12. package/esm2022/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +0 -183
  13. package/esm2022/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +0 -747
  14. package/esm2022/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +0 -120
  15. package/esm2022/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +0 -205
  16. package/esm2022/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +0 -2
  17. package/esm2022/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +0 -2
  18. package/esm2022/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +0 -2
  19. package/esm2022/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +0 -227
  20. package/esm2022/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +0 -89
  21. package/esm2022/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.mjs +0 -86
  22. package/esm2022/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +0 -117
  23. package/esm2022/src/app/modules/directives/carousel-item.directive.mjs +0 -20
  24. package/esm2022/src/app/modules/interfaces/buttons/button-icon.mjs +0 -2
  25. package/esm2022/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +0 -2
  26. package/esm2022/src/app/modules/interfaces/combos/combos-configuration.mjs +0 -2
  27. package/esm2022/src/app/modules/interfaces/data-table/params.mjs +0 -2
  28. package/esm2022/src/app/modules/interfaces/data-table/rules.mjs +0 -2
  29. package/esm2022/src/app/modules/interfaces/data-table/table-columns.mjs +0 -2
  30. package/esm2022/src/app/modules/interfaces/data-table/table-configuration.mjs +0 -2
  31. package/esm2022/src/app/modules/interfaces/enum/enumActions.mjs +0 -8
  32. package/esm2022/src/app/modules/interfaces/enum/enumRules.mjs +0 -8
  33. package/esm2022/src/app/modules/interfaces/enum/httpResponseType.mjs +0 -8
  34. package/esm2022/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +0 -2
  35. package/esm2022/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +0 -2
  36. package/esm2022/src/app/modules/interfaces/filters/header-filters.mjs +0 -2
  37. package/esm2022/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +0 -6
  38. package/esm2022/src/app/modules/interfaces/report/template-pdf-base.mjs +0 -2
  39. package/esm2022/src/app/modules/interfaces/report/template-pdf-ot.mjs +0 -2
  40. package/esm2022/src/app/modules/interfaces/report/template-pdf-purchase-order.mjs +0 -2
  41. package/esm2022/src/app/modules/interfaces/report/template-pfd-fo.mjs +0 -2
  42. package/esm2022/src/app/modules/services/crypto.service.mjs +0 -38
  43. package/esm2022/src/app/modules/services/export-data.service.mjs +0 -169
  44. package/esm2022/src/app/modules/services/file-forms.service.mjs +0 -24
  45. package/esm2022/src/app/modules/services/fuel-order-pdf.service.mjs +0 -346
  46. package/esm2022/src/app/modules/services/functions.service.mjs +0 -75
  47. package/esm2022/src/app/modules/services/generate-pdf.service.mjs +0 -93
  48. package/esm2022/src/app/modules/services/http.service.mjs +0 -142
  49. package/esm2022/src/app/modules/services/loading/loading.component.mjs +0 -30
  50. package/esm2022/src/app/modules/services/local-storage.service.mjs +0 -115
  51. package/esm2022/src/app/modules/services/message.service.mjs +0 -202
  52. package/esm2022/src/app/modules/services/purchase-order-pdf.service.mjs +0 -179
  53. package/esm2022/src/app/modules/services/screen-size-util.mjs +0 -6
  54. package/esm2022/src/app/modules/services/session.service.mjs +0 -43
  55. package/esm2022/src/app/modules/services/work-order-pdf.service.mjs +0 -363
  56. package/public_api.d.ts +0 -57
  57. package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +0 -59
  58. package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +0 -13
  59. package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +0 -10
  60. package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +0 -24
  61. package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +0 -16
  62. package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +0 -46
  63. package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +0 -101
  64. package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +0 -20
  65. package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +0 -43
  66. package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +0 -2
  67. package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +0 -2
  68. package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +0 -2
  69. package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +0 -30
  70. package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +0 -39
  71. package/src/app/modules/brainloper-ui/components/report/template-ot/template-ot.component.d.ts +0 -38
  72. package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +0 -26
  73. package/src/app/modules/directives/carousel-item.directive.d.ts +0 -9
  74. package/src/app/modules/interfaces/buttons/button-icon.d.ts +0 -9
  75. package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +0 -6
  76. package/src/app/modules/interfaces/combos/combos-configuration.d.ts +0 -13
  77. package/src/app/modules/interfaces/data-table/params.d.ts +0 -7
  78. package/src/app/modules/interfaces/data-table/rules.d.ts +0 -8
  79. package/src/app/modules/interfaces/data-table/table-columns.d.ts +0 -25
  80. package/src/app/modules/interfaces/data-table/table-configuration.d.ts +0 -26
  81. package/src/app/modules/interfaces/enum/enumActions.d.ts +0 -6
  82. package/src/app/modules/interfaces/enum/enumRules.d.ts +0 -6
  83. package/src/app/modules/interfaces/enum/httpResponseType.d.ts +0 -6
  84. package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +0 -4
  85. package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +0 -13
  86. package/src/app/modules/interfaces/filters/header-filters.d.ts +0 -13
  87. package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +0 -10
  88. package/src/app/modules/interfaces/report/template-pdf-base.d.ts +0 -17
  89. package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +0 -6
  90. package/src/app/modules/interfaces/report/template-pdf-purchase-order.d.ts +0 -17
  91. package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +0 -7
  92. package/src/app/modules/services/crypto.service.d.ts +0 -10
  93. package/src/app/modules/services/export-data.service.d.ts +0 -18
  94. package/src/app/modules/services/file-forms.service.d.ts +0 -7
  95. package/src/app/modules/services/fuel-order-pdf.service.d.ts +0 -25
  96. package/src/app/modules/services/functions.service.d.ts +0 -15
  97. package/src/app/modules/services/generate-pdf.service.d.ts +0 -22
  98. package/src/app/modules/services/http.service.d.ts +0 -32
  99. package/src/app/modules/services/loading/loading.component.d.ts +0 -15
  100. package/src/app/modules/services/local-storage.service.d.ts +0 -49
  101. package/src/app/modules/services/message.service.d.ts +0 -23
  102. package/src/app/modules/services/purchase-order-pdf.service.d.ts +0 -21
  103. package/src/app/modules/services/screen-size-util.d.ts +0 -3
  104. package/src/app/modules/services/session.service.d.ts +0 -14
  105. package/src/app/modules/services/work-order-pdf.service.d.ts +0 -33
@@ -1,346 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { jsPDF } from 'jspdf';
3
- import 'jspdf-autotable';
4
- import * as i0 from "@angular/core";
5
- // export interface TemplatePdfFo {
6
- // name: string;
7
- // nit: string;
8
- // address: string;
9
- // telephone: string;
10
- // mail: string;
11
- // image?: string;
12
- // code: string;
13
- // date: string;
14
- // responsible: string;
15
- // id_place: string;
16
- // approved_by: string;
17
- // detalle: string;
18
- // description: string;
19
- // consecutive: string;
20
- // namePlace: string;
21
- // addressPlace: string;
22
- // area: string;
23
- // odometer: string;
24
- // invoiceReference?: string;
25
- // }
26
- export class FuelOrderPdfService {
27
- constructor() { }
28
- generateFuelOrderProfesionalPDF(data, options) {
29
- return new Promise((resolve, reject) => {
30
- try {
31
- const opts = {
32
- format: 'letter',
33
- download: true,
34
- filename: 'orden_combustible.pdf',
35
- ...options
36
- };
37
- const doc = new jsPDF('p', 'pt', opts.format);
38
- const pageWidth = doc.internal.pageSize.getWidth();
39
- const pageHeight = doc.internal.pageSize.getHeight();
40
- const margin = 40;
41
- let currentY = margin;
42
- // Colores corporativos
43
- const primaryColor = [41, 128, 185]; // Azul
44
- const secondaryColor = [52, 73, 94]; // Gris oscuro
45
- const accentColor = [230, 126, 34]; // Naranja
46
- // === ENCABEZADO PRINCIPAL ===
47
- this.addHeader(doc, data, margin, currentY, pageWidth, primaryColor);
48
- currentY = 140;
49
- // === TÍTULO DEL DOCUMENTO ===
50
- currentY = this.addDocumentTitle(doc, data, currentY, pageWidth, accentColor);
51
- currentY += 25;
52
- // === INFORMACIÓN PRINCIPAL ===
53
- currentY = this.addMainInfo(doc, data, currentY, margin, pageWidth);
54
- currentY += 20;
55
- // === DATOS DEL PROVEEDOR ===
56
- currentY = this.addProviderInfo(doc, data, currentY, margin, pageWidth, secondaryColor);
57
- currentY += 20;
58
- // === DETALLES DEL SERVICIO ===
59
- currentY = this.addServiceDetails(doc, data, currentY, margin, pageWidth, secondaryColor);
60
- currentY += 20;
61
- // === AUTORIZACIÓN ===
62
- currentY = this.addAuthorization(doc, data, currentY, margin, pageWidth);
63
- currentY += 30;
64
- // === PIE DE PÁGINA ===
65
- this.addFooter(doc, data, pageHeight - 80, pageWidth, primaryColor);
66
- // === GENERAR/DESCARGAR ===
67
- if (opts.download) {
68
- doc.output('dataurlnewwindow', { filename: opts.filename });
69
- }
70
- resolve(doc);
71
- }
72
- catch (error) {
73
- reject(error);
74
- }
75
- });
76
- }
77
- /**
78
- * Genera PDF optimizado para impresión
79
- */
80
- generateForPrint(data) {
81
- return this.generateFuelOrderProfesionalPDF(data, {
82
- format: 'letter',
83
- download: false
84
- });
85
- }
86
- addHeader(doc, data, margin, y, pageWidth, color) {
87
- // Fondo del encabezado
88
- doc.setFillColor(color[0], color[1], color[2]);
89
- doc.rect(margin, y, pageWidth - (margin * 2), 80, 'F');
90
- // Texto del encabezado en blanco
91
- doc.setTextColor(255, 255, 255);
92
- doc.setFont('helvetica', 'bold');
93
- doc.setFontSize(18);
94
- const companyName = data.name.toUpperCase();
95
- const nameWidth = doc.getTextWidth(companyName);
96
- doc.text(companyName, (pageWidth - nameWidth) / 2, y + 25);
97
- doc.setFontSize(12);
98
- const nitText = `NIT: ${data.nit}`;
99
- const nitWidth = doc.getTextWidth(nitText);
100
- doc.text(nitText, (pageWidth - nitWidth) / 2, y + 45);
101
- doc.setFontSize(10);
102
- const addressText = `${data.address} - TEL: ${data.telephone}`;
103
- const addressWidth = doc.getTextWidth(addressText);
104
- doc.text(addressText, (pageWidth - addressWidth) / 2, y + 65);
105
- // Resetear color de texto
106
- doc.setTextColor(0, 0, 0);
107
- }
108
- addDocumentTitle(doc, data, y, pageWidth, color) {
109
- doc.setTextColor(color[0], color[1], color[2]);
110
- doc.setFont('helvetica', 'bold');
111
- doc.setFontSize(20);
112
- const title = 'ORDEN DE COMBUSTIBLE';
113
- const titleWidth = doc.getTextWidth(title);
114
- doc.text(title, (pageWidth - titleWidth) / 2, y);
115
- doc.setFontSize(16);
116
- const numberText = `N° ${data.consecutive}`;
117
- const numberWidth = doc.getTextWidth(numberText);
118
- doc.text(numberText, (pageWidth - numberWidth) / 2, y + 25);
119
- doc.setTextColor(0, 0, 0);
120
- return y + 40;
121
- }
122
- addMainInfo(doc, data, y, margin, pageWidth) {
123
- const tableData = [
124
- [
125
- { content: 'Área:', styles: { fontStyle: 'bold', fillColor: [240, 240, 240] } },
126
- { content: data.area, styles: {} },
127
- { content: 'Código:', styles: { fontStyle: 'bold', fillColor: [240, 240, 240] } },
128
- { content: data.code, styles: {} },
129
- { content: 'Fecha:', styles: { fontStyle: 'bold', fillColor: [240, 240, 240] } },
130
- { content: data.date, styles: {} }
131
- ],
132
- [
133
- { content: 'Operario:', styles: { fontStyle: 'bold', fillColor: [240, 240, 240] } },
134
- { content: data.responsible, styles: { colSpan: 3 } },
135
- { content: 'Odómetro:', styles: { fontStyle: 'bold', fillColor: [240, 240, 240] } },
136
- { content: data.odometer, styles: {} }
137
- ]
138
- ];
139
- doc.autoTable({
140
- startY: y,
141
- body: tableData,
142
- theme: 'grid',
143
- styles: {
144
- fontSize: 11,
145
- cellPadding: 8,
146
- lineColor: [200, 200, 200],
147
- lineWidth: 0.5
148
- },
149
- columnStyles: {
150
- 0: { cellWidth: 70 },
151
- 1: { cellWidth: 100 },
152
- 2: { cellWidth: 70 },
153
- 3: { cellWidth: 80 },
154
- 4: { cellWidth: 70 },
155
- 5: { cellWidth: 80 }
156
- },
157
- margin: { left: margin, right: margin }
158
- });
159
- return doc.lastAutoTable.finalY;
160
- }
161
- addProviderInfo(doc, data, y, margin, pageWidth, color) {
162
- // Título de sección
163
- doc.setTextColor(color[0], color[1], color[2]);
164
- doc.setFont('helvetica', 'bold');
165
- doc.setFontSize(14);
166
- const title = 'DATOS DEL PROVEEDOR';
167
- const titleWidth = doc.getTextWidth(title);
168
- doc.text(title, (pageWidth - titleWidth) / 2, y);
169
- doc.setTextColor(0, 0, 0);
170
- const tableData = [
171
- [
172
- { content: 'Lugar:', styles: { fontStyle: 'bold', fillColor: [240, 240, 240] } },
173
- { content: data.namePlace, styles: {} },
174
- { content: 'Dirección:', styles: { fontStyle: 'bold', fillColor: [240, 240, 240] } },
175
- { content: data.addressPlace, styles: {} }
176
- ]
177
- ];
178
- doc.autoTable({
179
- startY: y + 20,
180
- body: tableData,
181
- theme: 'grid',
182
- styles: {
183
- fontSize: 11,
184
- cellPadding: 8,
185
- lineColor: [200, 200, 200],
186
- lineWidth: 0.5
187
- },
188
- columnStyles: {
189
- 0: { cellWidth: 80 },
190
- 1: { cellWidth: 160 },
191
- 2: { cellWidth: 80 },
192
- 3: { cellWidth: 150 }
193
- },
194
- margin: { left: margin, right: margin }
195
- });
196
- return doc.lastAutoTable.finalY;
197
- }
198
- addServiceDetails(doc, data, y, margin, pageWidth, color) {
199
- // Título de sección
200
- doc.setTextColor(color[0], color[1], color[2]);
201
- doc.setFont('helvetica', 'bold');
202
- doc.setFontSize(14);
203
- const title = 'DETALLES DEL SERVICIO';
204
- const titleWidth = doc.getTextWidth(title);
205
- doc.text(title, (pageWidth - titleWidth) / 2, y);
206
- doc.setTextColor(0, 0, 0);
207
- // Preparar texto para calcular altura necesaria
208
- const boxY = y + 20;
209
- const boxWidth = pageWidth - (margin * 2);
210
- const textMargin = margin + 15;
211
- const maxWidth = boxWidth - 30;
212
- const lineHeight = 15;
213
- const minBoxHeight = 60; // Altura mínima del contenedor
214
- const padding = 40; // Padding superior e inferior
215
- // Calcular líneas de texto necesarias
216
- doc.setFont('helvetica', 'normal');
217
- doc.setFontSize(11);
218
- let totalLines = 0;
219
- // Contar líneas del detalle
220
- if (data.detalle && data.detalle.trim()) {
221
- const detalleLines = doc.splitTextToSize(data.detalle.trim(), maxWidth);
222
- totalLines += detalleLines.length;
223
- }
224
- // Contar líneas de la descripción (incluye etiqueta "Descripción:")
225
- if (data.description && data.description.trim()) {
226
- totalLines += 2; // Una línea para "Descripción:" + espacio
227
- const descLines = doc.splitTextToSize(data.description.trim(), maxWidth);
228
- totalLines += descLines.length;
229
- }
230
- // Calcular altura necesaria basada en el contenido
231
- const contentHeight = Math.max(totalLines * lineHeight, 30); // Mínimo 30pt para contenido
232
- const boxHeight = Math.max(minBoxHeight, contentHeight + padding);
233
- // Verificar si necesitamos una nueva página
234
- const pageHeight = doc.internal.pageSize.getHeight();
235
- const remainingSpace = pageHeight - boxY - 100; // Dejar espacio para footer
236
- let finalBoxY = boxY;
237
- if (boxHeight > remainingSpace) {
238
- // Añadir nueva página
239
- doc.addPage();
240
- finalBoxY = margin + 40; // Posición en nueva página
241
- }
242
- // Dibujar contenedor con altura dinámica
243
- // Fondo gris claro
244
- doc.setFillColor(250, 250, 250);
245
- doc.rect(margin, finalBoxY, boxWidth, boxHeight, 'F');
246
- // Borde
247
- doc.setDrawColor(200, 200, 200);
248
- doc.rect(margin, finalBoxY, boxWidth, boxHeight, 'S');
249
- // Añadir contenido de texto
250
- let textY = finalBoxY + 20;
251
- // Añadir detalle si existe
252
- if (data.detalle && data.detalle.trim()) {
253
- const detalleLines = doc.splitTextToSize(data.detalle.trim(), maxWidth);
254
- doc.text(detalleLines, textMargin, textY);
255
- textY += detalleLines.length * lineHeight + 10; // Espacio extra después del detalle
256
- }
257
- // Añadir descripción si existe
258
- if (data.description && data.description.trim()) {
259
- doc.setFont('helvetica', 'bold');
260
- doc.text('Descripción:', textMargin, textY);
261
- doc.setFont('helvetica', 'normal');
262
- textY += lineHeight;
263
- const descLines = doc.splitTextToSize(data.description.trim(), maxWidth);
264
- // Verificar si necesitamos manejar contenido muy largo
265
- const remainingHeight = finalBoxY + boxHeight - textY - 20;
266
- const maxLinesInSpace = Math.floor(remainingHeight / lineHeight);
267
- if (descLines.length > maxLinesInSpace && maxLinesInSpace > 0) {
268
- // Mostrar líneas que caben en el espacio actual
269
- const currentLines = descLines.slice(0, maxLinesInSpace);
270
- doc.text(currentLines, textMargin, textY);
271
- // Continuar en nueva página si hay más contenido
272
- if (descLines.length > maxLinesInSpace) {
273
- doc.addPage();
274
- textY = margin + 20;
275
- const remainingLines = descLines.slice(maxLinesInSpace);
276
- doc.text(remainingLines, textMargin, textY);
277
- return textY + (remainingLines.length * lineHeight) + 20;
278
- }
279
- }
280
- else {
281
- doc.text(descLines, textMargin, textY);
282
- }
283
- }
284
- // Si no hay contenido, mostrar un mensaje
285
- if ((!data.detalle || !data.detalle.trim()) && (!data.description || !data.description.trim())) {
286
- doc.setFont('helvetica', 'italic');
287
- doc.setFontSize(10);
288
- doc.setTextColor(150, 150, 150);
289
- doc.text('No se han especificado detalles del servicio.', textMargin, textY);
290
- doc.setTextColor(0, 0, 0);
291
- doc.setFont('helvetica', 'normal');
292
- doc.setFontSize(11);
293
- }
294
- return finalBoxY + boxHeight;
295
- }
296
- addAuthorization(doc, data, y, margin, pageWidth) {
297
- const tableData = [
298
- [
299
- { content: 'AUTORIZADA POR:', styles: { fontStyle: 'bold', fontSize: 12, fillColor: [240, 240, 240] } },
300
- { content: data.approved_by, styles: { fontSize: 12 } }
301
- ]
302
- ];
303
- doc.autoTable({
304
- startY: y,
305
- body: tableData,
306
- theme: 'grid',
307
- styles: {
308
- cellPadding: 12,
309
- lineColor: [200, 200, 200],
310
- lineWidth: 0.5
311
- },
312
- columnStyles: {
313
- 0: { cellWidth: 150 },
314
- 1: { cellWidth: 320 }
315
- },
316
- margin: { left: margin, right: margin }
317
- });
318
- return doc.lastAutoTable.finalY;
319
- }
320
- addFooter(doc, data, y, pageWidth, color) {
321
- // Fondo del pie de página
322
- doc.setFillColor(color[0], color[1], color[2]);
323
- doc.rect(40, y, pageWidth - 80, 60, 'F');
324
- // Texto en blanco
325
- doc.setTextColor(255, 255, 255);
326
- doc.setFont('helvetica', 'bold');
327
- doc.setFontSize(12);
328
- const instruction = 'Favor adjuntar la orden de venta o factura';
329
- const instWidth = doc.getTextWidth(instruction);
330
- doc.text(instruction, (pageWidth - instWidth) / 2, y + 25);
331
- doc.setFontSize(10);
332
- const emailWidth = doc.getTextWidth(data.mail);
333
- doc.text(data.mail, (pageWidth - emailWidth) / 2, y + 45);
334
- // Resetear color
335
- doc.setTextColor(0, 0, 0);
336
- }
337
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FuelOrderPdfService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
338
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FuelOrderPdfService, providedIn: 'root' });
339
- }
340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FuelOrderPdfService, decorators: [{
341
- type: Injectable,
342
- args: [{
343
- providedIn: 'root'
344
- }]
345
- }], ctorParameters: () => [] });
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVlbC1vcmRlci1wZGYuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zZXJ2aWNlcy9mdWVsLW9yZGVyLXBkZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLGlCQUFpQixDQUFDOztBQUd6QixtQ0FBbUM7QUFDbkMsa0JBQWtCO0FBQ2xCLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsdUJBQXVCO0FBQ3ZCLGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQix5QkFBeUI7QUFDekIsc0JBQXNCO0FBQ3RCLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qix1QkFBdUI7QUFDdkIsMEJBQTBCO0FBQzFCLGtCQUFrQjtBQUNsQixzQkFBc0I7QUFDdEIsK0JBQStCO0FBQy9CLElBQUk7QUFLSixNQUFNLE9BQU8sbUJBQW1CO0lBRTlCLGdCQUFnQixDQUFDO0lBRWpCLCtCQUErQixDQUFDLElBQW1CLEVBQUUsT0FJcEQ7UUFDQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRztvQkFDWCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsR0FBRyxPQUFPO2lCQUNYLENBQUM7Z0JBRUYsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlDLE1BQU0s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Ryw0Q0FBNEMsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFM0QsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUUxRCxpQkFBaUI7UUFDakIsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7d0dBcFhVLG1CQUFtQjs0R0FBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBqc1BERiB9IGZyb20gJ2pzcGRmJztcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcbmltcG9ydCB7IFRlbXBsYXRlUGRmRm8gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC90ZW1wbGF0ZS1wZmQtZm8nO1xuXG4vLyBleHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlUGRmRm8ge1xuLy8gICBuYW1lOiBzdHJpbmc7XG4vLyAgIG5pdDogc3RyaW5nO1xuLy8gICBhZGRyZXNzOiBzdHJpbmc7XG4vLyAgIHRlbGVwaG9uZTogc3RyaW5nO1xuLy8gICBtYWlsOiBzdHJpbmc7XG4vLyAgIGltYWdlPzogc3RyaW5nO1xuLy8gICBjb2RlOiBzdHJpbmc7XG4vLyAgIGRhdGU6IHN0cmluZztcbi8vICAgcmVzcG9uc2libGU6IHN0cmluZztcbi8vICAgaWRfcGxhY2U6IHN0cmluZztcbi8vICAgYXBwcm92ZWRfYnk6IHN0cmluZztcbi8vICAgZGV0YWxsZTogc3RyaW5nO1xuLy8gICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuLy8gICBjb25zZWN1dGl2ZTogc3RyaW5nO1xuLy8gICBuYW1lUGxhY2U6IHN0cmluZztcbi8vICAgYWRkcmVzc1BsYWNlOiBzdHJpbmc7XG4vLyAgIGFyZWE6IHN0cmluZztcbi8vICAgb2RvbWV0ZXI6IHN0cmluZztcbi8vICAgaW52b2ljZVJlZmVyZW5jZT86IHN0cmluZztcbi8vIH1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRnVlbE9yZGVyUGRmU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBnZW5lcmF0ZUZ1ZWxPcmRlclByb2Zlc2lvbmFsUERGKGRhdGE6IFRlbXBsYXRlUGRmRm8sIG9wdGlvbnM/OiB7XG4gICAgZm9ybWF0PzogJ2xldHRlcicgfCAnYTQnO1xuICAgIGRvd25sb2FkPzogYm9vbGVhbjtcbiAgICBmaWxlbmFtZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8anNQREY+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICBmb3JtYXQ6ICdsZXR0ZXInLFxuICAgICAgICAgIGRvd25sb2FkOiB0cnVlLFxuICAgICAgICAgIGZpbGVuYW1lOiAnb3JkZW5fY29tYnVzdGlibGUucGRmJyxcbiAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZG9jID0gbmV3IGpzUERGKCdwJywgJ3B0Jywgb3B0cy5mb3JtYXQpO1xuICAgICAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0V2lkdGgoKTtcbiAgICAgICAgY29uc3QgcGFnZUhlaWdodCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKTtcbiAgICAgICAgY29uc3QgbWFyZ2luID0gNDA7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IG1hcmdpbjtcblxuICAgICAgICAvLyBDb2xvcmVzIGNvcnBvcmF0aXZvc1xuICAgICAgICBjb25zdCBwcmltYXJ5Q29sb3IgPSBbNDEsIDEyOCwgMTg1XTsgLy8gQXp1bFxuICAgICAgICBjb25zdCBzZWNvbmRhcnlDb2xvciA9IFs1MiwgNzMsIDk0XTsgLy8gR3JpcyBvc2N1cm9cbiAgICAgICAgY29uc3QgYWNjZW50Q29sb3IgPSBbMjMwLCAxMjYsIDM0XTsgLy8gTmFyYW5qYVxuXG4gICAgICAgIC8vID09PSBFTkNBQkVaQURPIFBSSU5DSVBBTCA9PT1cbiAgICAgICAgdGhpcy5hZGRIZWFkZXIoZG9jLCBkYXRhLCBtYXJnaW4sIGN1cnJlbnRZLCBwYWdlV2lkdGgsIHByaW1hcnlDb2xvcik7XG4gICAgICAgIGN1cnJlbnRZID0gMTQwO1xuXG4gICAgICAgIC8vID09PSBUw41UVUxPIERFTCBET0NVTUVOVE8gPT09XG4gICAgICAgIGN1cnJlbnRZID0gdGhpcy5hZGREb2N1bWVudFRpdGxlKGRvYywgZGF0YSwgY3VycmVudFksIHBhZ2VXaWR0aCwgYWNjZW50Q29sb3IpO1xuICAgICAgICBjdXJyZW50WSArPSAyNTtcblxuICAgICAgICAvLyA9PT0gSU5GT1JNQUNJw5NOIFBSSU5DSVBBTCA9PT1cbiAgICAgICAgY3VycmVudFkgPSB0aGlzLmFkZE1haW5JbmZvKGRvYywgZGF0YSwgY3VycmVudFksIG1hcmdpbiwgcGFnZVdpZHRoKTtcbiAgICAgICAgY3VycmVudFkgKz0gMjA7XG5cbiAgICAgICAgLy8gPT09IERBVE9TIERFTCBQUk9WRUVET1IgPT09XG4gICAgICAgIGN1cnJlbnRZID0gdGhpcy5hZGRQcm92aWRlckluZm8oZG9jLCBkYXRhLCBjdXJyZW50WSwgbWFyZ2luLCBwYWdlV2lkdGgsIHNlY29uZGFyeUNvbG9yKTtcbiAgICAgICAgY3VycmVudFkgKz0gMjA7XG5cbiAgICAgICAgLy8gPT09IERFVEFMTEVTIERFTCBTRVJWSUNJTyA9PT1cbiAgICAgICAgY3VycmVudFkgPSB0aGlzLmFkZFNlcnZpY2VEZXRhaWxzKGRvYywgZGF0YSwgY3VycmVudFksIG1hcmdpbiwgcGFnZVdpZHRoLCBzZWNvbmRhcnlDb2xvcik7XG4gICAgICAgIGN1cnJlbnRZICs9IDIwO1xuXG4gICAgICAgIC8vID09PSBBVVRPUklaQUNJw5NOID09PVxuICAgICAgICBjdXJyZW50WSA9IHRoaXMuYWRkQXV0aG9yaXphdGlvbihkb2MsIGRhdGEsIGN1cnJlbnRZLCBtYXJnaW4sIHBhZ2VXaWR0aCk7XG4gICAgICAgIGN1cnJlbnRZICs9IDMwO1xuXG4gICAgICAgIC8vID09PSBQSUUgREUgUMOBR0lOQSA9PT1cbiAgICAgICAgdGhpcy5hZGRGb290ZXIoZG9jLCBkYXRhLCBwYWdlSGVpZ2h0IC0gODAsIHBhZ2VXaWR0aCwgcHJpbWFyeUNvbG9yKTtcblxuICAgICAgICAvLyA9PT0gR0VORVJBUi9ERVNDQVJHQVIgPT09XG4gICAgICAgIGlmIChvcHRzLmRvd25sb2FkKSB7XG4gICAgICAgICAgZG9jLm91dHB1dCgnZGF0YXVybG5ld3dpbmRvdycsIHsgZmlsZW5hbWU6IG9wdHMuZmlsZW5hbWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKGRvYyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYSBQREYgb3B0aW1pemFkbyBwYXJhIGltcHJlc2nDs25cbiAgICovXG4gIGdlbmVyYXRlRm9yUHJpbnQoZGF0YTogVGVtcGxhdGVQZGZGbyk6IFByb21pc2U8anNQREY+IHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUZ1ZWxPcmRlclByb2Zlc2lvbmFsUERGKGRhdGEsIHtcbiAgICAgIGZvcm1hdDogJ2xldHRlcicsXG4gICAgICBkb3dubG9hZDogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkSGVhZGVyKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmRm8sIG1hcmdpbjogbnVtYmVyLCB5OiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAvLyBGb25kbyBkZWwgZW5jYWJlemFkb1xuICAgIGRvYy5zZXRGaWxsQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnJlY3QobWFyZ2luLCB5LCBwYWdlV2lkdGggLSAobWFyZ2luICogMiksIDgwLCAnRicpO1xuXG4gICAgLy8gVGV4dG8gZGVsIGVuY2FiZXphZG8gZW4gYmxhbmNvXG4gICAgZG9jLnNldFRleHRDb2xvcigyNTUsIDI1NSwgMjU1KTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTgpO1xuXG4gICAgY29uc3QgY29tcGFueU5hbWUgPSBkYXRhLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBuYW1lV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGNvbXBhbnlOYW1lKTtcbiAgICBkb2MudGV4dChjb21wYW55TmFtZSwgKHBhZ2VXaWR0aCAtIG5hbWVXaWR0aCkgLyAyLCB5ICsgMjUpO1xuXG4gICAgZG9jLnNldEZvbnRTaXplKDEyKTtcbiAgICBjb25zdCBuaXRUZXh0ID0gYE5JVDogJHtkYXRhLm5pdH1gO1xuICAgIGNvbnN0IG5pdFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChuaXRUZXh0KTtcbiAgICBkb2MudGV4dChuaXRUZXh0LCAocGFnZVdpZHRoIC0gbml0V2lkdGgpIC8gMiwgeSArIDQ1KTtcblxuICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XG4gICAgY29uc3QgYWRkcmVzc1RleHQgPSBgJHtkYXRhLmFkZHJlc3N9IC0gVEVMOiAke2RhdGEudGVsZXBob25lfWA7XG4gICAgY29uc3QgYWRkcmVzc1dpZHRoID0gZG9jLmdldFRleHRXaWR0aChhZGRyZXNzVGV4dCk7XG4gICAgZG9jLnRleHQoYWRkcmVzc1RleHQsIChwYWdlV2lkdGggLSBhZGRyZXNzV2lkdGgpIC8gMiwgeSArIDY1KTtcblxuICAgIC8vIFJlc2V0ZWFyIGNvbG9yIGRlIHRleHRvXG4gICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRG9jdW1lbnRUaXRsZShkb2M6IGpzUERGLCBkYXRhOiBUZW1wbGF0ZVBkZkZvLCB5OiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyLCBjb2xvcjogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDIwKTtcblxuICAgIGNvbnN0IHRpdGxlID0gJ09SREVOIERFIENPTUJVU1RJQkxFJztcbiAgICBjb25zdCB0aXRsZVdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0aXRsZSk7XG4gICAgZG9jLnRleHQodGl0bGUsIChwYWdlV2lkdGggLSB0aXRsZVdpZHRoKSAvIDIsIHkpO1xuXG4gICAgZG9jLnNldEZvbnRTaXplKDE2KTtcbiAgICBjb25zdCBudW1iZXJUZXh0ID0gYE7CsCAke2RhdGEuY29uc2VjdXRpdmV9YDtcbiAgICBjb25zdCBudW1iZXJXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobnVtYmVyVGV4dCk7XG4gICAgZG9jLnRleHQobnVtYmVyVGV4dCwgKHBhZ2VXaWR0aCAtIG51bWJlcldpZHRoKSAvIDIsIHkgKyAyNSk7XG5cbiAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuICAgIHJldHVybiB5ICsgNDA7XG4gIH1cblxuICBwcml2YXRlIGFkZE1haW5JbmZvKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmRm8sIHk6IG51bWJlciwgbWFyZ2luOiBudW1iZXIsIHBhZ2VXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0YWJsZURhdGEgPSBbXG4gICAgICBbXG4gICAgICAgIHsgY29udGVudDogJ8OBcmVhOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuYXJlYSwgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdDw7NkaWdvOicsIHN0eWxlczogeyBmb250U3R5bGU6ICdib2xkJywgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuY29kZSwgc3R5bGVzOiB7fSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdGZWNoYTonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLmRhdGUsIHN0eWxlczoge30gfVxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBjb250ZW50OiAnT3BlcmFyaW86Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5yZXNwb25zaWJsZSwgc3R5bGVzOiB7IGNvbFNwYW46IDMgfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6ICdPZMOzbWV0cm86Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5vZG9tZXRlciwgc3R5bGVzOiB7fSB9XG4gICAgICBdXG4gICAgXTtcblxuICAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xuICAgICAgc3RhcnRZOiB5LFxuICAgICAgYm9keTogdGFibGVEYXRhLFxuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBmb250U2l6ZTogMTEsXG4gICAgICAgIGNlbGxQYWRkaW5nOiA4LFxuICAgICAgICBsaW5lQ29sb3I6IFsyMDAsIDIwMCwgMjAwXSxcbiAgICAgICAgbGluZVdpZHRoOiAwLjVcbiAgICAgIH0sXG4gICAgICBjb2x1bW5TdHlsZXM6IHtcbiAgICAgICAgMDogeyBjZWxsV2lkdGg6IDcwIH0sXG4gICAgICAgIDE6IHsgY2VsbFdpZHRoOiAxMDAgfSxcbiAgICAgICAgMjogeyBjZWxsV2lkdGg6IDcwIH0sXG4gICAgICAgIDM6IHsgY2VsbFdpZHRoOiA4MCB9LFxuICAgICAgICA0OiB7IGNlbGxXaWR0aDogNzAgfSxcbiAgICAgICAgNTogeyBjZWxsV2lkdGg6IDgwIH1cbiAgICAgIH0sXG4gICAgICBtYXJnaW46IHsgbGVmdDogbWFyZ2luLCByaWdodDogbWFyZ2luIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFk7XG4gIH1cblxuICBwcml2YXRlIGFkZFByb3ZpZGVySW5mbyhkb2M6IGpzUERGLCBkYXRhOiBUZW1wbGF0ZVBkZkZvLCB5OiBudW1iZXIsIG1hcmdpbjogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlciwgY29sb3I6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICAvLyBUw610dWxvIGRlIHNlY2Npw7NuXG4gICAgZG9jLnNldFRleHRDb2xvcihjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdKTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTQpO1xuICAgIGNvbnN0IHRpdGxlID0gJ0RBVE9TIERFTCBQUk9WRUVET1InO1xuICAgIGNvbnN0IHRpdGxlV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcbiAgICBkb2MudGV4dCh0aXRsZSwgKHBhZ2VXaWR0aCAtIHRpdGxlV2lkdGgpIC8gMiwgeSk7XG4gICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcblxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IFtcbiAgICAgIFtcbiAgICAgICAgeyBjb250ZW50OiAnTHVnYXI6Jywgc3R5bGVzOiB7IGZvbnRTdHlsZTogJ2JvbGQnLCBmaWxsQ29sb3I6IFsyNDAsIDI0MCwgMjQwXSB9IH0sXG4gICAgICAgIHsgY29udGVudDogZGF0YS5uYW1lUGxhY2UsIHN0eWxlczoge30gfSxcbiAgICAgICAgeyBjb250ZW50OiAnRGlyZWNjacOzbjonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZpbGxDb2xvcjogWzI0MCwgMjQwLCAyNDBdIH0gfSxcbiAgICAgICAgeyBjb250ZW50OiBkYXRhLmFkZHJlc3NQbGFjZSwgc3R5bGVzOiB7fSB9XG4gICAgICBdXG4gICAgXTtcblxuICAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xuICAgICAgc3RhcnRZOiB5ICsgMjAsXG4gICAgICBib2R5OiB0YWJsZURhdGEsXG4gICAgICB0aGVtZTogJ2dyaWQnLFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGZvbnRTaXplOiAxMSxcbiAgICAgICAgY2VsbFBhZGRpbmc6IDgsXG4gICAgICAgIGxpbmVDb2xvcjogWzIwMCwgMjAwLCAyMDBdLFxuICAgICAgICBsaW5lV2lkdGg6IDAuNVxuICAgICAgfSxcbiAgICAgIGNvbHVtblN0eWxlczoge1xuICAgICAgICAwOiB7IGNlbGxXaWR0aDogODAgfSxcbiAgICAgICAgMTogeyBjZWxsV2lkdGg6IDE2MCB9LFxuICAgICAgICAyOiB7IGNlbGxXaWR0aDogODAgfSxcbiAgICAgICAgMzogeyBjZWxsV2lkdGg6IDE1MCB9XG4gICAgICB9LFxuICAgICAgbWFyZ2luOiB7IGxlZnQ6IG1hcmdpbiwgcmlnaHQ6IG1hcmdpbiB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gKGRvYyBhcyBhbnkpLmxhc3RBdXRvVGFibGUuZmluYWxZO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZXJ2aWNlRGV0YWlscyhkb2M6IGpzUERGLCBkYXRhOiBUZW1wbGF0ZVBkZkZvLCB5OiBudW1iZXIsIG1hcmdpbjogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlciwgY29sb3I6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICAvLyBUw610dWxvIGRlIHNlY2Npw7NuXG4gICAgZG9jLnNldFRleHRDb2xvcihjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdKTtcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTQpO1xuICAgIGNvbnN0IHRpdGxlID0gJ0RFVEFMTEVTIERFTCBTRVJWSUNJTyc7XG4gICAgY29uc3QgdGl0bGVXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgodGl0bGUpO1xuICAgIGRvYy50ZXh0KHRpdGxlLCAocGFnZVdpZHRoIC0gdGl0bGVXaWR0aCkgLyAyLCB5KTtcbiAgICBkb2Muc2V0VGV4dENvbG9yKDAsIDAsIDApO1xuXG4gICAgLy8gUHJlcGFyYXIgdGV4dG8gcGFyYSBjYWxjdWxhciBhbHR1cmEgbmVjZXNhcmlhXG4gICAgY29uc3QgYm94WSA9IHkgKyAyMDtcbiAgICBjb25zdCBib3hXaWR0aCA9IHBhZ2VXaWR0aCAtIChtYXJnaW4gKiAyKTtcbiAgICBjb25zdCB0ZXh0TWFyZ2luID0gbWFyZ2luICsgMTU7XG4gICAgY29uc3QgbWF4V2lkdGggPSBib3hXaWR0aCAtIDMwO1xuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSAxNTtcbiAgICBjb25zdCBtaW5Cb3hIZWlnaHQgPSA2MDsgLy8gQWx0dXJhIG3DrW5pbWEgZGVsIGNvbnRlbmVkb3JcbiAgICBjb25zdCBwYWRkaW5nID0gNDA7IC8vIFBhZGRpbmcgc3VwZXJpb3IgZSBpbmZlcmlvclxuXG4gICAgLy8gQ2FsY3VsYXIgbMOtbmVhcyBkZSB0ZXh0byBuZWNlc2FyaWFzXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcbiAgICBkb2Muc2V0Rm9udFNpemUoMTEpO1xuXG4gICAgbGV0IHRvdGFsTGluZXMgPSAwO1xuXG4gICAgLy8gQ29udGFyIGzDrW5lYXMgZGVsIGRldGFsbGVcbiAgICBpZiAoZGF0YS5kZXRhbGxlICYmIGRhdGEuZGV0YWxsZS50cmltKCkpIHtcbiAgICAgIGNvbnN0IGRldGFsbGVMaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUoZGF0YS5kZXRhbGxlLnRyaW0oKSwgbWF4V2lkdGgpO1xuICAgICAgdG90YWxMaW5lcyArPSBkZXRhbGxlTGluZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENvbnRhciBsw61uZWFzIGRlIGxhIGRlc2NyaXBjacOzbiAoaW5jbHV5ZSBldGlxdWV0YSBcIkRlc2NyaXBjacOzbjpcIilcbiAgICBpZiAoZGF0YS5kZXNjcmlwdGlvbiAmJiBkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSkge1xuICAgICAgdG90YWxMaW5lcyArPSAyOyAvLyBVbmEgbMOtbmVhIHBhcmEgXCJEZXNjcmlwY2nDs246XCIgKyBlc3BhY2lvXG4gICAgICBjb25zdCBkZXNjTGluZXMgPSBkb2Muc3BsaXRUZXh0VG9TaXplKGRhdGEuZGVzY3JpcHRpb24udHJpbSgpLCBtYXhXaWR0aCk7XG4gICAgICB0b3RhbExpbmVzICs9IGRlc2NMaW5lcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXIgYWx0dXJhIG5lY2VzYXJpYSBiYXNhZGEgZW4gZWwgY29udGVuaWRvXG4gICAgY29uc3QgY29udGVudEhlaWdodCA9IE1hdGgubWF4KHRvdGFsTGluZXMgKiBsaW5lSGVpZ2h0LCAzMCk7IC8vIE3DrW5pbW8gMzBwdCBwYXJhIGNvbnRlbmlkb1xuICAgIGNvbnN0IGJveEhlaWdodCA9IE1hdGgubWF4KG1pbkJveEhlaWdodCwgY29udGVudEhlaWdodCArIHBhZGRpbmcpO1xuXG4gICAgLy8gVmVyaWZpY2FyIHNpIG5lY2VzaXRhbW9zIHVuYSBudWV2YSBww6FnaW5hXG4gICAgY29uc3QgcGFnZUhlaWdodCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKTtcbiAgICBjb25zdCByZW1haW5pbmdTcGFjZSA9IHBhZ2VIZWlnaHQgLSBib3hZIC0gMTAwOyAvLyBEZWphciBlc3BhY2lvIHBhcmEgZm9vdGVyXG5cbiAgICBsZXQgZmluYWxCb3hZID0gYm94WTtcbiAgICBpZiAoYm94SGVpZ2h0ID4gcmVtYWluaW5nU3BhY2UpIHtcbiAgICAgIC8vIEHDsWFkaXIgbnVldmEgcMOhZ2luYVxuICAgICAgZG9jLmFkZFBhZ2UoKTtcbiAgICAgIGZpbmFsQm94WSA9IG1hcmdpbiArIDQwOyAvLyBQb3NpY2nDs24gZW4gbnVldmEgcMOhZ2luYVxuICAgIH1cblxuICAgIC8vIERpYnVqYXIgY29udGVuZWRvciBjb24gYWx0dXJhIGRpbsOhbWljYVxuICAgIC8vIEZvbmRvIGdyaXMgY2xhcm9cbiAgICBkb2Muc2V0RmlsbENvbG9yKDI1MCwgMjUwLCAyNTApO1xuICAgIGRvYy5yZWN0KG1hcmdpbiwgZmluYWxCb3hZLCBib3hXaWR0aCwgYm94SGVpZ2h0LCAnRicpO1xuXG4gICAgLy8gQm9yZGVcbiAgICBkb2Muc2V0RHJhd0NvbG9yKDIwMCwgMjAwLCAyMDApO1xuICAgIGRvYy5yZWN0KG1hcmdpbiwgZmluYWxCb3hZLCBib3hXaWR0aCwgYm94SGVpZ2h0LCAnUycpO1xuXG4gICAgLy8gQcOxYWRpciBjb250ZW5pZG8gZGUgdGV4dG9cbiAgICBsZXQgdGV4dFkgPSBmaW5hbEJveFkgKyAyMDtcblxuICAgIC8vIEHDsWFkaXIgZGV0YWxsZSBzaSBleGlzdGVcbiAgICBpZiAoZGF0YS5kZXRhbGxlICYmIGRhdGEuZGV0YWxsZS50cmltKCkpIHtcbiAgICAgIGNvbnN0IGRldGFsbGVMaW5lcyA9IGRvYy5zcGxpdFRleHRUb1NpemUoZGF0YS5kZXRhbGxlLnRyaW0oKSwgbWF4V2lkdGgpO1xuICAgICAgZG9jLnRleHQoZGV0YWxsZUxpbmVzLCB0ZXh0TWFyZ2luLCB0ZXh0WSk7XG4gICAgICB0ZXh0WSArPSBkZXRhbGxlTGluZXMubGVuZ3RoICogbGluZUhlaWdodCArIDEwOyAvLyBFc3BhY2lvIGV4dHJhIGRlc3B1w6lzIGRlbCBkZXRhbGxlXG4gICAgfVxuXG4gICAgLy8gQcOxYWRpciBkZXNjcmlwY2nDs24gc2kgZXhpc3RlXG4gICAgaWYgKGRhdGEuZGVzY3JpcHRpb24gJiYgZGF0YS5kZXNjcmlwdGlvbi50cmltKCkpIHtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xuICAgICAgZG9jLnRleHQoJ0Rlc2NyaXBjacOzbjonLCB0ZXh0TWFyZ2luLCB0ZXh0WSk7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xuICAgICAgdGV4dFkgKz0gbGluZUhlaWdodDtcblxuICAgICAgY29uc3QgZGVzY0xpbmVzID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShkYXRhLmRlc2NyaXB0aW9uLnRyaW0oKSwgbWF4V2lkdGgpO1xuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgbmVjZXNpdGFtb3MgbWFuZWphciBjb250ZW5pZG8gbXV5IGxhcmdvXG4gICAgICBjb25zdCByZW1haW5pbmdIZWlnaHQgPSBmaW5hbEJveFkgKyBib3hIZWlnaHQgLSB0ZXh0WSAtIDIwO1xuICAgICAgY29uc3QgbWF4TGluZXNJblNwYWNlID0gTWF0aC5mbG9vcihyZW1haW5pbmdIZWlnaHQgLyBsaW5lSGVpZ2h0KTtcblxuICAgICAgaWYgKGRlc2NMaW5lcy5sZW5ndGggPiBtYXhMaW5lc0luU3BhY2UgJiYgbWF4TGluZXNJblNwYWNlID4gMCkge1xuICAgICAgICAvLyBNb3N0cmFyIGzDrW5lYXMgcXVlIGNhYmVuIGVuIGVsIGVzcGFjaW8gYWN0dWFsXG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lcyA9IGRlc2NMaW5lcy5zbGljZSgwLCBtYXhMaW5lc0luU3BhY2UpO1xuICAgICAgICBkb2MudGV4dChjdXJyZW50TGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcblxuICAgICAgICAvLyBDb250aW51YXIgZW4gbnVldmEgcMOhZ2luYSBzaSBoYXkgbcOhcyBjb250ZW5pZG9cbiAgICAgICAgaWYgKGRlc2NMaW5lcy5sZW5ndGggPiBtYXhMaW5lc0luU3BhY2UpIHtcbiAgICAgICAgICBkb2MuYWRkUGFnZSgpO1xuICAgICAgICAgIHRleHRZID0gbWFyZ2luICsgMjA7XG4gICAgICAgICAgY29uc3QgcmVtYWluaW5nTGluZXMgPSBkZXNjTGluZXMuc2xpY2UobWF4TGluZXNJblNwYWNlKTtcbiAgICAgICAgICBkb2MudGV4dChyZW1haW5pbmdMaW5lcywgdGV4dE1hcmdpbiwgdGV4dFkpO1xuICAgICAgICAgIHJldHVybiB0ZXh0WSArIChyZW1haW5pbmdMaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0KSArIDIwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2MudGV4dChkZXNjTGluZXMsIHRleHRNYXJnaW4sIHRleHRZKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaSBubyBoYXkgY29udGVuaWRvLCBtb3N0cmFyIHVuIG1lbnNhamVcbiAgICBpZiAoKCFkYXRhLmRldGFsbGUgfHwgIWRhdGEuZGV0YWxsZS50cmltKCkpICYmICghZGF0YS5kZXNjcmlwdGlvbiB8fCAhZGF0YS5kZXNjcmlwdGlvbi50cmltKCkpKSB7XG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2l0YWxpYycpO1xuICAgICAgZG9jLnNldEZvbnRTaXplKDEwKTtcbiAgICAgIGRvYy5zZXRUZXh0Q29sb3IoMTUwLCAxNTAsIDE1MCk7XG4gICAgICBkb2MudGV4dCgnTm8gc2UgaGFuIGVzcGVjaWZpY2FkbyBkZXRhbGxlcyBkZWwgc2VydmljaW8uJywgdGV4dE1hcmdpbiwgdGV4dFkpO1xuICAgICAgZG9jLnNldFRleHRDb2xvcigwLCAwLCAwKTtcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XG4gICAgICBkb2Muc2V0Rm9udFNpemUoMTEpO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5hbEJveFkgKyBib3hIZWlnaHQ7XG4gIH1cblxuXG4gIHByaXZhdGUgYWRkQXV0aG9yaXphdGlvbihkb2M6IGpzUERGLCBkYXRhOiBUZW1wbGF0ZVBkZkZvLCB5OiBudW1iZXIsIG1hcmdpbjogbnVtYmVyLCBwYWdlV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdGFibGVEYXRhID0gW1xuICAgICAgW1xuICAgICAgICB7IGNvbnRlbnQ6ICdBVVRPUklaQURBIFBPUjonLCBzdHlsZXM6IHsgZm9udFN0eWxlOiAnYm9sZCcsIGZvbnRTaXplOiAxMiwgZmlsbENvbG9yOiBbMjQwLCAyNDAsIDI0MF0gfSB9LFxuICAgICAgICB7IGNvbnRlbnQ6IGRhdGEuYXBwcm92ZWRfYnksIHN0eWxlczogeyBmb250U2l6ZTogMTIgfSB9XG4gICAgICBdXG4gICAgXTtcblxuICAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xuICAgICAgc3RhcnRZOiB5LFxuICAgICAgYm9keTogdGFibGVEYXRhLFxuICAgICAgdGhlbWU6ICdncmlkJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBjZWxsUGFkZGluZzogMTIsXG4gICAgICAgIGxpbmVDb2xvcjogWzIwMCwgMjAwLCAyMDBdLFxuICAgICAgICBsaW5lV2lkdGg6IDAuNVxuICAgICAgfSxcbiAgICAgIGNvbHVtblN0eWxlczoge1xuICAgICAgICAwOiB7IGNlbGxXaWR0aDogMTUwIH0sXG4gICAgICAgIDE6IHsgY2VsbFdpZHRoOiAzMjAgfVxuICAgICAgfSxcbiAgICAgIG1hcmdpbjogeyBsZWZ0OiBtYXJnaW4sIHJpZ2h0OiBtYXJnaW4gfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIChkb2MgYXMgYW55KS5sYXN0QXV0b1RhYmxlLmZpbmFsWTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRm9vdGVyKGRvYzoganNQREYsIGRhdGE6IFRlbXBsYXRlUGRmRm8sIHk6IG51bWJlciwgcGFnZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIC8vIEZvbmRvIGRlbCBwaWUgZGUgcMOhZ2luYVxuICAgIGRvYy5zZXRGaWxsQ29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gICAgZG9jLnJlY3QoNDAsIHksIHBhZ2VXaWR0aCAtIDgwLCA2MCwgJ0YnKTtcblxuICAgIC8vIFRleHRvIGVuIGJsYW5jb1xuICAgIGRvYy5zZXRUZXh0Q29sb3IoMjU1LCAyNTUsIDI1NSk7XG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XG4gICAgZG9jLnNldEZvbnRTaXplKDEyKTtcblxuICAgIGNvbnN0IGluc3RydWN0aW9uID0gJ0Zhdm9yIGFkanVudGFyIGxhIG9yZGVuIGRlIHZlbnRhIG8gZmFjdHVyYSc7XG4gICAgY29uc3QgaW5zdFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChpbnN0cnVjdGlvbik7XG4gICAgZG9jLnRleHQoaW5zdHJ1Y3Rpb24sIChwYWdlV2lkdGggLSBpbnN0V2lkdGgpIC8gMiwgeSArIDI1KTtcblxuICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XG4gICAgY29uc3QgZW1haWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgoZGF0YS5tYWlsKTtcbiAgICBkb2MudGV4dChkYXRhLm1haWwsIChwYWdlV2lkdGggLSBlbWFpbFdpZHRoKSAvIDIsIHkgKyA0NSk7XG5cbiAgICAvLyBSZXNldGVhciBjb2xvclxuICAgIGRvYy5zZXRUZXh0Q29sb3IoMCwgMCwgMCk7XG4gIH1cblxufVxuIl19
@@ -1,75 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class FunctionsService {
4
- constructor() { }
5
- dateForm(date) {
6
- let data = new Date(date);
7
- let change = `${data.getFullYear()}/${data.getMonth() + 1}/${data.getDate()}`;
8
- return (change);
9
- }
10
- dateIso(date) {
11
- let data = date.toString();
12
- let cut = data.replace(/(.*)\T.*/, '$1');
13
- let add = `${cut}T05:00:00.000Z`;
14
- let fecha = add.replace(/(.*)\T.*/, '$1');
15
- return (fecha);
16
- }
17
- dateDB(date) {
18
- let day = this.validateTwoDigitFormat(date.getDate().toString());
19
- let month = this.validateTwoDigitFormat((date.getMonth() + 1).toString());
20
- return `${date.getFullYear()}-${month}-${day}`;
21
- }
22
- dateWithTime(date) {
23
- if (!date)
24
- return "";
25
- var value = date.split("T");
26
- return value[0] + " " + value[1].split(".")[0];
27
- }
28
- areObjectsEqual(obj1, obj2) {
29
- return JSON.stringify(obj1) === JSON.stringify(obj2);
30
- }
31
- removeDuplicateObjects(originalArray) {
32
- const uniqueArray = [];
33
- originalArray.forEach((obj) => {
34
- if (!uniqueArray.some((uniqueObj) => this.areObjectsEqual(obj, uniqueObj))) {
35
- uniqueArray.push(obj);
36
- }
37
- });
38
- return uniqueArray;
39
- }
40
- transformDate(date) {
41
- if (!date) {
42
- return '';
43
- }
44
- const dateObj = new Date(date);
45
- const day = this.validateTwoDigitFormat(dateObj.getDate().toString());
46
- const month = this.validateTwoDigitFormat((dateObj.getMonth() + 1).toString());
47
- const year = dateObj.getFullYear();
48
- return `${day}/${month}/${year}`;
49
- }
50
- formatNumber(value) {
51
- if (value === null || value === undefined) {
52
- return '$ 0';
53
- }
54
- return new Intl.NumberFormat('es-CO', {
55
- style: 'currency',
56
- currency: 'COP',
57
- minimumFractionDigits: 0,
58
- maximumFractionDigits: 0,
59
- }).format(value);
60
- }
61
- validateTwoDigitFormat(number) {
62
- if (number.length == 1)
63
- number = "0" + number;
64
- return number;
65
- }
66
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FunctionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
67
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FunctionsService, providedIn: 'root' });
68
- }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FunctionsService, decorators: [{
70
- type: Injectable,
71
- args: [{
72
- providedIn: 'root'
73
- }]
74
- }], ctorParameters: () => [] });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc2VydmljZXMvZnVuY3Rpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixnQkFBZ0IsQ0FBQztJQUdqQixRQUFRLENBQUUsSUFBSTtRQUNiLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUE7UUFDNUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLENBQUUsSUFBSTtRQUNYLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4QyxJQUFJLEdBQUcsR0FBSSxHQUFHLEdBQUcsZ0JBQWdCLENBQUE7UUFDakMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUUsSUFBSTtRQUNWLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUNoRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsc0JBQXNCLENB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IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbnNTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG5cbiAgZGF0ZUZvcm0gKGRhdGUpIHtcbiAgIGxldCBkYXRhID0gbmV3IERhdGUoZGF0ZSlcbiAgIGxldCBjaGFuZ2UgPSBgJHtkYXRhLmdldEZ1bGxZZWFyKCl9LyR7ZGF0YS5nZXRNb250aCgpICsgMX0vJHtkYXRhLmdldERhdGUoKX1gXG4gICAgcmV0dXJuIChjaGFuZ2UpXG4gIH1cblxuICBkYXRlSXNvIChkYXRlKSB7XG4gICAgbGV0IGRhdGEgPSBkYXRlLnRvU3RyaW5nKCk7XG4gICAgbGV0IGN1dCA9IGRhdGEucmVwbGFjZSgvKC4qKVxcVC4qLywgJyQxJylcbiAgICBsZXQgYWRkICA9IGAke2N1dH1UMDU6MDA6MDAuMDAwWmBcbiAgICBsZXQgZmVjaGEgPSBhZGQucmVwbGFjZSgvKC4qKVxcVC4qLywgJyQxJylcbiAgICByZXR1cm4gKGZlY2hhKVxuICB9XG5cbiAgZGF0ZURCIChkYXRlKSB7XG4gICAgbGV0IGRheSA9IHRoaXMudmFsaWRhdGVUd29EaWdpdEZvcm1hdChkYXRlLmdldERhdGUoKS50b1N0cmluZygpKVxuICAgIGxldCBtb250aCA9IHRoaXMudmFsaWRhdGVUd29EaWdpdEZvcm1hdCgoZGF0ZS5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkpXG4gICAgcmV0dXJuIGAke2RhdGUuZ2V0RnVsbFllYXIoKX0tJHttb250aH0tJHtkYXl9YFxuICB9XG5cbiAgZGF0ZVdpdGhUaW1lKGRhdGU6c3RyaW5nKTpzdHJpbmd7XG4gICAgaWYoIWRhdGUpIHJldHVybiBcIlwiXG4gICAgdmFyIHZhbHVlID0gZGF0ZS5zcGxpdChcIlRcIilcbiAgICByZXR1cm4gIHZhbHVlWzBdICsgXCIgXCIgKyB2YWx1ZVsxXS5zcGxpdChcIi5cIilbMF1cbiAgfVxuXG4gIGFyZU9iamVjdHNFcXVhbChvYmoxOiBhbnksIG9iajI6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmoxKSA9PT0gSlNPTi5zdHJpbmdpZnkob2JqMik7XG4gIH1cblxuICByZW1vdmVEdXBsaWNhdGVPYmplY3RzKG9yaWdpbmFsQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IHVuaXF1ZUFycmF5OiBhbnlbXSA9IFtdO1xuICAgIG9yaWdpbmFsQXJyYXkuZm9yRWFjaCgob2JqKSA9PiB7XG4gICAgICBpZiAoIXVuaXF1ZUFycmF5LnNvbWUoKHVuaXF1ZU9iaikgPT4gdGhpcy5hcmVPYmplY3RzRXF1YWwob2JqLCB1bmlxdWVPYmopKSkge1xuICAgICAgICB1bmlxdWVBcnJheS5wdXNoKG9iaik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5pcXVlQXJyYXk7XG4gIH1cblxuICB0cmFuc2Zvcm1EYXRlKGRhdGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGRhdGVPYmogPSBuZXcgRGF0ZShkYXRlKTtcbiAgICBjb25zdCBkYXkgPSB0aGlzLnZhbGlkYXRlVHdvRGlnaXRGb3JtYXQoZGF0ZU9iai5nZXREYXRlKCkudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgbW9udGggPSB0aGlzLnZhbGlkYXRlVHdvRGlnaXRGb3JtYXQoKGRhdGVPYmouZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHllYXIgPSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gICAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XG4gIH1cblxuICBmb3JtYXROdW1iZXIodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnJCAwJztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgnZXMtQ08nLCB7XG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgIGN1cnJlbmN5OiAnQ09QJyxcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMCxcbiAgICB9KS5mb3JtYXQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVR3b0RpZ2l0Rm9ybWF0KG51bWJlcjogc3RyaW5nKTpzdHJpbmd7XG4gICAgaWYobnVtYmVyLmxlbmd0aCA9PSAxKSBudW1iZXIgPSBcIjBcIiArIG51bWJlclxuICAgIHJldHVybiBudW1iZXJcbiAgfVxuXG59XG4iXX0=
@@ -1,93 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { TemplateFuelComponent } from '../brainloper-ui/components/report/template-fuel/template-fuel.component';
3
- import { TemplateOtComponent } from '../brainloper-ui/components/report/template-ot/template-ot.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/material/dialog";
6
- import * as i2 from "./work-order-pdf.service";
7
- import * as i3 from "./fuel-order-pdf.service";
8
- import * as i4 from "./purchase-order-pdf.service";
9
- export class GeneratePdfService {
10
- dialog;
11
- workOrderPdfService;
12
- FuelOrderPdfService;
13
- purchaseOrderPdfService;
14
- constructor(dialog, workOrderPdfService, FuelOrderPdfService, purchaseOrderPdfService) {
15
- this.dialog = dialog;
16
- this.workOrderPdfService = workOrderPdfService;
17
- this.FuelOrderPdfService = FuelOrderPdfService;
18
- this.purchaseOrderPdfService = purchaseOrderPdfService;
19
- }
20
- getPdfOt(data, autoGenerateData) {
21
- let autoGenerate = false;
22
- if (autoGenerateData) {
23
- autoGenerate = autoGenerateData;
24
- }
25
- return new Promise((resolve, rejects) => {
26
- let screen = "850px";
27
- // if ( window.screen.width<1000) {
28
- // screen = "100vw"
29
- // }
30
- this.dialog.open(TemplateOtComponent, {
31
- data: {
32
- data,
33
- autoGenerate: autoGenerate
34
- },
35
- width: screen
36
- }).afterClosed().subscribe((res) => {
37
- return resolve(true);
38
- });
39
- });
40
- }
41
- getPdfFo(data, autoGenerateData) {
42
- let autoGenerate = false;
43
- if (autoGenerateData) {
44
- autoGenerate = autoGenerateData;
45
- }
46
- return new Promise((resolve, rejects) => {
47
- let screen = "850px";
48
- this.dialog.open(TemplateFuelComponent, {
49
- data: {
50
- data,
51
- autoGenerate: autoGenerate
52
- },
53
- width: screen
54
- }).afterClosed().subscribe((res) => {
55
- return resolve(true);
56
- });
57
- });
58
- }
59
- getPdfFoV2(data) {
60
- return new Promise((resolve, reject) => {
61
- this.FuelOrderPdfService.generateFuelOrderProfesionalPDF(data)
62
- .then(() => resolve(true))
63
- .catch(error => reject(error));
64
- });
65
- }
66
- getPdfOtV2(data) {
67
- return new Promise((resolve, reject) => {
68
- this.workOrderPdfService.generateWorkOrderPDF(data)
69
- .then(() => resolve(true))
70
- .catch(error => reject(error));
71
- });
72
- }
73
- generatePurchaseOrderPDF(order) {
74
- return new Promise((resolve, reject) => {
75
- this.purchaseOrderPdfService.generatePurchaseOrderPDF(order, { download: false })
76
- .then((doc) => {
77
- const blobUrl = doc.output('bloburl');
78
- window.open(blobUrl, '_blank');
79
- resolve(true);
80
- })
81
- .catch(error => reject(error));
82
- });
83
- }
84
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeneratePdfService, deps: [{ token: i1.MatDialog }, { token: i2.WorkOrderPdfService }, { token: i3.FuelOrderPdfService }, { token: i4.PurchaseOrderPdfService }], target: i0.ɵɵFactoryTarget.Injectable });
85
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeneratePdfService, providedIn: 'root' });
86
- }
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeneratePdfService, decorators: [{
88
- type: Injectable,
89
- args: [{
90
- providedIn: 'root'
91
- }]
92
- }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.WorkOrderPdfService }, { type: i3.FuelOrderPdfService }, { type: i4.PurchaseOrderPdfService }] });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtcGRmLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc2VydmljZXMvZ2VuZXJhdGUtcGRmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUtqSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQzs7Ozs7O0FBTTNHLE1BQU0sT0FBTyxrQkFBa0I7SUFHbkI7SUFDQTtJQUNBO0lBQ0E7SUFKVixZQUNVLE1BQWlCLEVBQ2pCLG1CQUF3QyxFQUN4QyxtQkFBd0MsRUFDeEMsdUJBQWlEO1FBSGpELFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBMEI7SUFDdkQsQ0FBQztJQUVMLFFBQVEsQ0FBQyxJQUFtQixFQUFFLGdCQUEwQjtRQUN0RCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUE7UUFDeEIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQTtRQUNqQyxDQUFDO1FBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUN0QyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUE7WUFDcEIsbUNBQW1DO1lBQ25DLHFCQUFxQjtZQUNyQixJQUFJO1lBRUosSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3BDLElBQUksRUFBRTtvQkFDSixJQUFJO29CQUNKLFlBQVksRUFBRSxZQUFZO2lCQUMzQjtnQkFDRCxLQUFL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fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUZ1ZWxDb21wb25lbnQgfSBmcm9tICcuLi9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvcmVwb3J0L3RlbXBsYXRlLWZ1ZWwvdGVtcGxhdGUtZnVlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGVtcGxhdGVQZGZPdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0L3RlbXBsYXRlLXBkZi1vdCc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBkZkZvIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQvdGVtcGxhdGUtcGZkLWZvJztcbmltcG9ydCB7IFdvcmtPcmRlclBkZlNlcnZpY2UgfSBmcm9tICcuL3dvcmstb3JkZXItcGRmLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnVlbE9yZGVyUGRmU2VydmljZSB9IGZyb20gJy4vZnVlbC1vcmRlci1wZGYuc2VydmljZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZU90Q29tcG9uZW50IH0gZnJvbSAnLi4vYnJhaW5sb3Blci11aS9jb21wb25lbnRzL3JlcG9ydC90ZW1wbGF0ZS1vdC90ZW1wbGF0ZS1vdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHVyY2hhc2VPcmRlclBkZlNlcnZpY2UgfSBmcm9tICcuL3B1cmNoYXNlLW9yZGVyLXBkZi5zZXJ2aWNlJztcbmltcG9ydCB7IFRlbXBsYXRlUGRmUHVyY2hhc2VPcmRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0L3RlbXBsYXRlLXBkZi1wdXJjaGFzZS1vcmRlcic7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmF0ZVBkZlNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB3b3JrT3JkZXJQZGZTZXJ2aWNlOiBXb3JrT3JkZXJQZGZTZXJ2aWNlLFxuICAgIHByaXZhdGUgRnVlbE9yZGVyUGRmU2VydmljZTogRnVlbE9yZGVyUGRmU2VydmljZSxcbiAgICBwcml2YXRlIHB1cmNoYXNlT3JkZXJQZGZTZXJ2aWNlIDogUHVyY2hhc2VPcmRlclBkZlNlcnZpY2VcbiAgKSB7IH1cblxuICBnZXRQZGZPdChkYXRhOiBUZW1wbGF0ZVBkZk90LCBhdXRvR2VuZXJhdGVEYXRhPzogYm9vbGVhbikge1xuICAgIGxldCBhdXRvR2VuZXJhdGUgPSBmYWxzZVxuICAgIGlmIChhdXRvR2VuZXJhdGVEYXRhKSB7XG4gICAgICBhdXRvR2VuZXJhdGUgPSBhdXRvR2VuZXJhdGVEYXRhXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3RzKSA9PiB7XG4gICAgICBsZXQgc2NyZWVuID0gXCI4NTBweFwiXG4gICAgICAvLyBpZiAoIHdpbmRvdy5zY3JlZW4ud2lkdGg8MTAwMCkge1xuICAgICAgLy8gICBzY3JlZW4gPSBcIjEwMHZ3XCJcbiAgICAgIC8vIH1cblxuICAgICAgdGhpcy5kaWFsb2cub3BlbihUZW1wbGF0ZU90Q29tcG9uZW50LCB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGF1dG9HZW5lcmF0ZTogYXV0b0dlbmVyYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiBzY3JlZW5cbiAgICAgIH0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUodHJ1ZSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGdldFBkZkZvKGRhdGE6IFRlbXBsYXRlUGRmRm8sIGF1dG9HZW5lcmF0ZURhdGE/OiBib29sZWFuKSB7XG4gICAgbGV0IGF1dG9HZW5lcmF0ZSA9IGZhbHNlXG4gICAgaWYgKGF1dG9HZW5lcmF0ZURhdGEpIHtcbiAgICAgIGF1dG9HZW5lcmF0ZSA9IGF1dG9HZW5lcmF0ZURhdGFcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcbiAgICAgIGxldCBzY3JlZW4gPSBcIjg1MHB4XCJcblxuICAgICAgdGhpcy5kaWFsb2cub3BlbihUZW1wbGF0ZUZ1ZWxDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgYXV0b0dlbmVyYXRlOiBhdXRvR2VuZXJhdGVcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IHNjcmVlblxuICAgICAgfSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgZ2V0UGRmRm9WMihkYXRhOiBUZW1wbGF0ZVBkZkZvKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5GdWVsT3JkZXJQZGZTZXJ2aWNlLmdlbmVyYXRlRnVlbE9yZGVyUHJvZmVzaW9uYWxQREYoZGF0YSlcbiAgICAgICAgICAudGhlbigoKSA9PiByZXNvbHZlKHRydWUpKVxuICAgICAgICAgIC5jYXRjaChlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBkZk90VjIoZGF0YTogVGVtcGxhdGVQZGZPdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMud29ya09yZGVyUGRmU2VydmljZS5nZW5lcmF0ZVdvcmtPcmRlclBERihkYXRhKVxuICAgICAgICAgIC50aGVuKCgpID0+IHJlc29sdmUodHJ1ZSkpXG4gICAgICAgICAgLmNhdGNoKGVycm9yID0+IHJlamVjdChlcnJvcikpO1xuXG4gICAgfSk7XG4gIH1cblxuICBnZW5lcmF0ZVB1cmNoYXNlT3JkZXJQREYob3JkZXI6IFRlbXBsYXRlUGRmUHVyY2hhc2VPcmRlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnB1cmNoYXNlT3JkZXJQZGZTZXJ2aWNlLmdlbmVyYXRlUHVyY2hhc2VPcmRlclBERihvcmRlciwgeyBkb3dubG9hZDogZmFsc2UgfSlcbiAgICAgICAgICAudGhlbigoZG9jKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYlVybCA9IGRvYy5vdXRwdXQoJ2Jsb2J1cmwnKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihibG9iVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gcmVqZWN0KGVycm9yKSk7XG5cbiAgICB9KTtcbiAgfVxuXG5cbn1cbiJdfQ==