brainloper-ui 14.1.5 → 14.1.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brainloper-ui",
3
- "version": "14.1.5",
3
+ "version": "14.1.6",
4
4
  "private": false,
5
5
  "dependencies": {
6
6
  "@angular-material-components/file-input": "^8.0.0",
@@ -22,7 +22,8 @@
22
22
  "exceljs": "^4.3.0",
23
23
  "file-saver": "^2.0.5",
24
24
  "html2canvas": "^1.4.0",
25
- "jspdf": "^1.5.3",
25
+ "jspdf": "^2.5.2",
26
+ "jspdf-autotable": "^3.8.4",
26
27
  "jsreport-browser-client-dist": "^1.3.0",
27
28
  "lottie-web": "^5.7.1",
28
29
  "lz-string": "^1.4.4",
@@ -4,9 +4,9 @@ import * as i2 from "./components/data-table/table-modal/table-modal.component";
4
4
  import * as i3 from "./components/combos/combos.component";
5
5
  import * as i4 from "./components/file-input/file-input.component";
6
6
  import * as i5 from "../services/loading/loading.component";
7
- import * as i6 from "./components/report/generate-pdf/generate-pdf.component";
8
- import * as i7 from "./components/report/template-fuel/template-fuel.component";
9
- import * as i8 from "./components/bread-crumb/bread-crumb.component";
7
+ import * as i6 from "./components/report/template-fuel/template-fuel.component";
8
+ import * as i7 from "./components/bread-crumb/bread-crumb.component";
9
+ import * as i8 from "./components/report/template-ot/template-ot.component";
10
10
  import * as i9 from "./components/buttons/button-label/button-label.component";
11
11
  import * as i10 from "./components/buttons/button-icon/button-icon.component";
12
12
  import * as i11 from "./components/carousel/carousel.component";
@@ -57,6 +57,6 @@ import * as i55 from "@angular/router";
57
57
  export declare function playerFactory(): import("lottie-web").LottiePlayer;
58
58
  export declare class BrainloperUiModule {
59
59
  static ɵfac: i0.ɵɵFactoryDeclaration<BrainloperUiModule, never>;
60
- static ɵmod: i0.ɵɵNgModuleDeclaration<BrainloperUiModule, [typeof i1.DataTableComponent, typeof i2.TableModalComponent, typeof i3.CombosComponent, typeof i4.FileInputComponent, typeof i5.LoadingComponent, typeof i6.GeneratePdfComponent, typeof i7.TemplateFuelComponent, typeof i8.BreadCrumbComponent, typeof i9.ButtonLabelComponent, typeof i10.ButtonIconComponent, typeof i11.CarouselComponent, typeof i12.FiltersComponent, typeof i13.SelectFilterComponent, typeof i14.CarouselItemDirective], [typeof i15.CommonModule, typeof i16.MatButtonModule, typeof i17.MatSlideToggleModule, typeof i18.MatProgressBarModule, typeof i19.MatRippleModule, typeof i20.MatBottomSheetModule, typeof i21.MatChipsModule, typeof i22.MatTreeModule, typeof i16.MatButtonModule, typeof i23.MatButtonToggleModule, typeof i24.MatBadgeModule, typeof i25.MatIconModule, typeof i26.MatProgressSpinnerModule, typeof i27.MatToolbarModule, typeof i28.MatSidenavModule, typeof i29.MatMenuModule, typeof i30.MatListModule, typeof i31.MatDividerModule, typeof i32.MatGridListModule, typeof i33.MatExpansionModule, typeof i34.MatTabsModule, typeof i35.MatCardModule, typeof i36.MatStepperModule, typeof i37.MatFormFieldModule, typeof i38.MatInputModule, typeof i39.MatSelectModule, typeof i40.MatAutocompleteModule, typeof i41.MatCheckboxModule, typeof i42.MatRadioModule, typeof i43.MatDatepickerModule, typeof i44.MatTooltipModule, typeof i45.MatSnackBarModule, typeof i46.MatDialogModule, typeof i47.MatTableModule, typeof i48.MatSortModule, typeof i49.MatPaginatorModule, typeof i50.MatSliderModule, typeof i19.MatNativeDateModule, typeof i51.NgbModule, typeof i52.FormsModule, typeof i52.ReactiveFormsModule, typeof i53.HttpClientModule, typeof i54.LottieModule, typeof i55.RouterModule, typeof i44.MatTooltipModule], [typeof i17.MatSlideToggleModule, typeof i18.MatProgressBarModule, typeof i19.MatRippleModule, typeof i20.MatBottomSheetModule, typeof i21.MatChipsModule, typeof i22.MatTreeModule, typeof i16.MatButtonModule, typeof i23.MatButtonToggleModule, typeof i24.MatBadgeModule, typeof i25.MatIconModule, typeof i26.MatProgressSpinnerModule, typeof i27.MatToolbarModule, typeof i28.MatSidenavModule, typeof i29.MatMenuModule, typeof i30.MatListModule, typeof i31.MatDividerModule, typeof i32.MatGridListModule, typeof i33.MatExpansionModule, typeof i34.MatTabsModule, typeof i35.MatCardModule, typeof i36.MatStepperModule, typeof i37.MatFormFieldModule, typeof i38.MatInputModule, typeof i39.MatSelectModule, typeof i40.MatAutocompleteModule, typeof i41.MatCheckboxModule, typeof i42.MatRadioModule, typeof i43.MatDatepickerModule, typeof i44.MatTooltipModule, typeof i45.MatSnackBarModule, typeof i46.MatDialogModule, typeof i47.MatTableModule, typeof i48.MatSortModule, typeof i49.MatPaginatorModule, typeof i50.MatSliderModule, typeof i19.MatNativeDateModule, typeof i1.DataTableComponent, typeof i2.TableModalComponent, typeof i3.CombosComponent, typeof i4.FileInputComponent, typeof i5.LoadingComponent, typeof i8.BreadCrumbComponent, typeof i9.ButtonLabelComponent, typeof i10.ButtonIconComponent, typeof i51.NgbModule, typeof i11.CarouselComponent, typeof i12.FiltersComponent, typeof i13.SelectFilterComponent, typeof i14.CarouselItemDirective]>;
60
+ static ɵmod: i0.ɵɵNgModuleDeclaration<BrainloperUiModule, [typeof i1.DataTableComponent, typeof i2.TableModalComponent, typeof i3.CombosComponent, typeof i4.FileInputComponent, typeof i5.LoadingComponent, typeof i6.TemplateFuelComponent, typeof i7.BreadCrumbComponent, typeof i8.TemplateOtComponent, typeof i9.ButtonLabelComponent, typeof i10.ButtonIconComponent, typeof i11.CarouselComponent, typeof i12.FiltersComponent, typeof i13.SelectFilterComponent, typeof i14.CarouselItemDirective], [typeof i15.CommonModule, typeof i16.MatButtonModule, typeof i17.MatSlideToggleModule, typeof i18.MatProgressBarModule, typeof i19.MatRippleModule, typeof i20.MatBottomSheetModule, typeof i21.MatChipsModule, typeof i22.MatTreeModule, typeof i16.MatButtonModule, typeof i23.MatButtonToggleModule, typeof i24.MatBadgeModule, typeof i25.MatIconModule, typeof i26.MatProgressSpinnerModule, typeof i27.MatToolbarModule, typeof i28.MatSidenavModule, typeof i29.MatMenuModule, typeof i30.MatListModule, typeof i31.MatDividerModule, typeof i32.MatGridListModule, typeof i33.MatExpansionModule, typeof i34.MatTabsModule, typeof i35.MatCardModule, typeof i36.MatStepperModule, typeof i37.MatFormFieldModule, typeof i38.MatInputModule, typeof i39.MatSelectModule, typeof i40.MatAutocompleteModule, typeof i41.MatCheckboxModule, typeof i42.MatRadioModule, typeof i43.MatDatepickerModule, typeof i44.MatTooltipModule, typeof i45.MatSnackBarModule, typeof i46.MatDialogModule, typeof i47.MatTableModule, typeof i48.MatSortModule, typeof i49.MatPaginatorModule, typeof i50.MatSliderModule, typeof i19.MatNativeDateModule, typeof i51.NgbModule, typeof i52.FormsModule, typeof i52.ReactiveFormsModule, typeof i53.HttpClientModule, typeof i54.LottieModule, typeof i55.RouterModule, typeof i44.MatTooltipModule], [typeof i17.MatSlideToggleModule, typeof i18.MatProgressBarModule, typeof i19.MatRippleModule, typeof i20.MatBottomSheetModule, typeof i21.MatChipsModule, typeof i22.MatTreeModule, typeof i16.MatButtonModule, typeof i23.MatButtonToggleModule, typeof i24.MatBadgeModule, typeof i25.MatIconModule, typeof i26.MatProgressSpinnerModule, typeof i27.MatToolbarModule, typeof i28.MatSidenavModule, typeof i29.MatMenuModule, typeof i30.MatListModule, typeof i31.MatDividerModule, typeof i32.MatGridListModule, typeof i33.MatExpansionModule, typeof i34.MatTabsModule, typeof i35.MatCardModule, typeof i36.MatStepperModule, typeof i37.MatFormFieldModule, typeof i38.MatInputModule, typeof i39.MatSelectModule, typeof i40.MatAutocompleteModule, typeof i41.MatCheckboxModule, typeof i42.MatRadioModule, typeof i43.MatDatepickerModule, typeof i44.MatTooltipModule, typeof i45.MatSnackBarModule, typeof i46.MatDialogModule, typeof i47.MatTableModule, typeof i48.MatSortModule, typeof i49.MatPaginatorModule, typeof i50.MatSliderModule, typeof i19.MatNativeDateModule, typeof i1.DataTableComponent, typeof i2.TableModalComponent, typeof i3.CombosComponent, typeof i4.FileInputComponent, typeof i5.LoadingComponent, typeof i7.BreadCrumbComponent, typeof i9.ButtonLabelComponent, typeof i10.ButtonIconComponent, typeof i51.NgbModule, typeof i11.CarouselComponent, typeof i12.FiltersComponent, typeof i13.SelectFilterComponent, typeof i14.CarouselItemDirective]>;
61
61
  static ɵinj: i0.ɵɵInjectorDeclaration<BrainloperUiModule>;
62
62
  }
@@ -1,4 +1,5 @@
1
1
  import { MessageService } from '../../../../services/message.service';
2
+ import { FuelOrderPdfService } from '../../../../services/fuel-order-pdf.service';
2
3
  import { OnInit } from '@angular/core';
3
4
  import { MatDialog, MatDialogRef } from '@angular/material/dialog';
4
5
  import * as i0 from "@angular/core";
@@ -7,6 +8,7 @@ export declare class TemplateFuelComponent implements OnInit {
7
8
  dataModal: any;
8
9
  private dialog;
9
10
  message: MessageService;
11
+ private FuelOrderPdfService;
10
12
  data: {
11
13
  name: string;
12
14
  nit: string;
@@ -28,10 +30,12 @@ export declare class TemplateFuelComponent implements OnInit {
28
30
  odometer: string;
29
31
  invoiceReference: string;
30
32
  };
31
- constructor(dialogRef: MatDialogRef<TemplateFuelComponent>, dataModal: any, dialog: MatDialog, message: MessageService);
33
+ constructor(dialogRef: MatDialogRef<TemplateFuelComponent>, dataModal: any, dialog: MatDialog, message: MessageService, FuelOrderPdfService: FuelOrderPdfService);
32
34
  ngOnInit(): void;
33
35
  ngAfterViewInit(): void;
34
- downloadPDF(): void;
36
+ generatePdfWithHtml2Canvas(): void;
37
+ generatePdfWithJsPDFVersion2(): void;
38
+ generatePdfWithJsPDFVersion3(): void;
35
39
  static ɵfac: i0.ɵɵFactoryDeclaration<TemplateFuelComponent, never>;
36
40
  static ɵcmp: i0.ɵɵComponentDeclaration<TemplateFuelComponent, "app-template-fuel", never, {}, {}, never, never, false>;
37
41
  }
@@ -1,12 +1,14 @@
1
1
  import { MessageService } from '../../../../services/message.service';
2
+ import { WorkOrderPdfService } from '../../../../services/work-order-pdf.service';
2
3
  import { OnInit } from '@angular/core';
3
4
  import { MatDialog, MatDialogRef } from '@angular/material/dialog';
4
5
  import * as i0 from "@angular/core";
5
- export declare class GeneratePdfComponent implements OnInit {
6
- dialogRef: MatDialogRef<GeneratePdfComponent>;
6
+ export declare class TemplateOtComponent implements OnInit {
7
+ dialogRef: MatDialogRef<TemplateOtComponent>;
7
8
  dataModal: any;
8
9
  private dialog;
9
10
  message: MessageService;
11
+ private workOrderPdfService;
10
12
  data: {
11
13
  name: string;
12
14
  nit: string;
@@ -27,10 +29,12 @@ export declare class GeneratePdfComponent implements OnInit {
27
29
  area: string;
28
30
  invoiceReference: string;
29
31
  };
30
- constructor(dialogRef: MatDialogRef<GeneratePdfComponent>, dataModal: any, dialog: MatDialog, message: MessageService);
32
+ constructor(dialogRef: MatDialogRef<TemplateOtComponent>, dataModal: any, dialog: MatDialog, message: MessageService, workOrderPdfService: WorkOrderPdfService);
31
33
  ngOnInit(): void;
32
34
  ngAfterViewInit(): void;
33
- downloadPDF(): void;
34
- static ɵfac: i0.ɵɵFactoryDeclaration<GeneratePdfComponent, never>;
35
- static ɵcmp: i0.ɵɵComponentDeclaration<GeneratePdfComponent, "app-generate-pdf", never, {}, {}, never, never, false>;
35
+ generatePdfWithHtml2Canvas(): void;
36
+ generatePdfWithJsPDFVersion2(): void;
37
+ generatePdfWithJsPDFVersion3(): void;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<TemplateOtComponent, never>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<TemplateOtComponent, "app-template-ot", never, {}, {}, never, never, false>;
36
40
  }
@@ -0,0 +1,59 @@
1
+ import { jsPDF } from 'jspdf';
2
+ import 'jspdf-autotable';
3
+ import { TemplatePdfFo } from '../interfaces/report/template-pfd-fo';
4
+ import * as i0 from "@angular/core";
5
+ export interface FuelOrderData {
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 declare class FuelOrderPdfService {
27
+ constructor();
28
+ generateFuelOrderPDF(data: TemplatePdfFo): Promise<void>;
29
+ generateFuelOrderProfesionalPDF(data: FuelOrderData, options?: {
30
+ format?: 'letter' | 'a4';
31
+ download?: boolean;
32
+ filename?: string;
33
+ }): Promise<jsPDF>;
34
+ private addHeader;
35
+ private addDocumentTitle;
36
+ private addMainInfo;
37
+ private addProviderInfo;
38
+ private addServiceDetails;
39
+ /**
40
+ * Método auxiliar para manejar texto largo que puede necesitar múltiples páginas
41
+ */
42
+ private addLongText;
43
+ private addAuthorization;
44
+ private addFooter;
45
+ /**
46
+ * Genera PDF optimizado para impresión
47
+ */
48
+ generateForPrint(data: FuelOrderData): Promise<jsPDF>;
49
+ /**
50
+ * Genera PDF y lo devuelve como Blob para envío por email
51
+ */
52
+ generateAsBlob(data: FuelOrderData): Promise<Blob>;
53
+ /**
54
+ * Genera PDF y lo devuelve como base64
55
+ */
56
+ generateAsBase64(data: FuelOrderData): Promise<string>;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<FuelOrderPdfService, never>;
58
+ static ɵprov: i0.ɵɵInjectableDeclaration<FuelOrderPdfService>;
59
+ }
@@ -1,12 +1,21 @@
1
1
  import { MatDialog } from '@angular/material/dialog';
2
2
  import { TemplatePdfOt } from '../interfaces/report/template-pdf-ot';
3
3
  import { TemplatePdfFo } from '../interfaces/report/template-pfd-fo';
4
+ import { WorkOrderPdfService } from './work-order-pdf.service';
5
+ import { FuelOrderPdfService } from './fuel-order-pdf.service';
4
6
  import * as i0 from "@angular/core";
5
7
  export declare class GeneratePdfService {
6
8
  private dialog;
7
- constructor(dialog: MatDialog);
9
+ private workOrderPdfService;
10
+ private FuelOrderPdfService;
11
+ constructor(dialog: MatDialog, workOrderPdfService: WorkOrderPdfService, FuelOrderPdfService: FuelOrderPdfService);
8
12
  getPdfOt(data: TemplatePdfOt, autoGenerateData?: boolean): Promise<unknown>;
9
13
  getPdfFo(data: TemplatePdfFo, autoGenerateData?: boolean): Promise<unknown>;
14
+ /**
15
+ * Método mejorado para generar PDF de orden de combustible
16
+ */
17
+ getPdfFoNew(data: TemplatePdfFo, autoGenerateData?: boolean): Promise<boolean>;
18
+ getPdfOtNew(data: TemplatePdfOt, autoGenerateData?: boolean): Promise<boolean>;
10
19
  static ɵfac: i0.ɵɵFactoryDeclaration<GeneratePdfService, never>;
11
20
  static ɵprov: i0.ɵɵInjectableDeclaration<GeneratePdfService>;
12
21
  }
@@ -0,0 +1,60 @@
1
+ import { jsPDF } from 'jspdf';
2
+ import 'jspdf-autotable';
3
+ import * as i0 from "@angular/core";
4
+ export interface WorkOrderData {
5
+ name?: string;
6
+ nit?: string;
7
+ address?: string;
8
+ telephone?: string;
9
+ mail?: string;
10
+ image?: string;
11
+ code?: string;
12
+ date?: string;
13
+ responsible?: string;
14
+ third?: string;
15
+ approved_by?: string;
16
+ description?: string;
17
+ consecutive?: string;
18
+ nameProvider?: string;
19
+ addressProvider?: string;
20
+ area?: string;
21
+ odometer?: string;
22
+ invoiceReference?: string;
23
+ }
24
+ export declare class WorkOrderPdfService {
25
+ constructor();
26
+ /**
27
+ * Genera PDF de orden de trabajo con diseño profesional
28
+ * Dimensiones fijas, independiente del DOM
29
+ */
30
+ generateWorkOrderPDF(data: WorkOrderData, options?: {
31
+ format?: 'letter' | 'a4';
32
+ download?: boolean;
33
+ filename?: string;
34
+ }): Promise<jsPDF>;
35
+ private addHeader;
36
+ private addDocumentTitle;
37
+ private addMainInfo;
38
+ private addProviderInfo;
39
+ private addServiceDetails;
40
+ /**
41
+ * Método auxiliar para manejar texto largo que puede necesitar múltiples páginas
42
+ */
43
+ private addLongText;
44
+ private addAuthorization;
45
+ private addFooter;
46
+ /**
47
+ * Genera PDF optimizado para impresión
48
+ */
49
+ generateForPrint(data: WorkOrderData): Promise<jsPDF>;
50
+ /**
51
+ * Genera PDF y lo devuelve como Blob para envío por email
52
+ */
53
+ generateAsBlob(data: WorkOrderData): Promise<Blob>;
54
+ /**
55
+ * Genera PDF y lo devuelve como base64
56
+ */
57
+ generateAsBase64(data: WorkOrderData): Promise<string>;
58
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkOrderPdfService, never>;
59
+ static ɵprov: i0.ɵɵInjectableDeclaration<WorkOrderPdfService>;
60
+ }
@@ -1,81 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import jsPDF from 'jspdf';
3
- import html2canvas from 'html2canvas';
4
- import { MAT_DIALOG_DATA } from '@angular/material/dialog';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/material/dialog";
7
- import * as i2 from "../../../../services/message.service";
8
- import * as i3 from "@angular/material/button";
9
- export class GeneratePdfComponent {
10
- constructor(dialogRef, dataModal, dialog, message) {
11
- this.dialogRef = dialogRef;
12
- this.dataModal = dataModal;
13
- this.dialog = dialog;
14
- this.message = message;
15
- this.data = {
16
- name: '',
17
- nit: '',
18
- address: '',
19
- telephone: '',
20
- mail: '',
21
- image: '',
22
- code: '',
23
- date: '',
24
- responsible: '',
25
- third: '',
26
- odometer: '',
27
- approved_by: '',
28
- description: '',
29
- consecutive: '',
30
- nameProvider: '',
31
- addressProvider: '',
32
- area: '',
33
- invoiceReference: '',
34
- };
35
- }
36
- ngOnInit() {
37
- this.data = this.dataModal.data;
38
- }
39
- ngAfterViewInit() {
40
- if (this.dataModal.autoGenerate) {
41
- this.downloadPDF();
42
- }
43
- }
44
- downloadPDF() {
45
- this.message.openLoading("Cargando", "Generando PDF");
46
- const DATA = document.getElementById('templateOT');
47
- const doc = new jsPDF('p', 'pt', 'a4');
48
- const options = {
49
- background: 'white',
50
- scale: 3
51
- };
52
- html2canvas(DATA, options)
53
- .then((canvas) => {
54
- const img = canvas.toDataURL('image/PNG');
55
- //add img canvas to pdf
56
- const bufferX = 15;
57
- const bufferY = 15;
58
- const imgProps = doc.getImageProperties(img);
59
- const pdfWidth = doc.internal.pageSize.getWidth() - 2 * bufferX;
60
- const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
61
- doc.addImage(img, 'PNG', bufferX, bufferY, pdfWidth, pdfHeight, undefined, 'FAST');
62
- return doc;
63
- })
64
- .then((docResult) => {
65
- //docResult.save(`${new Date().toISOString()}_reporte.pdf`);
66
- docResult.output('dataurlnewwindow', { filename: 'reporte.pdf' });
67
- this.dialog.closeAll();
68
- this.message.closeLoading();
69
- });
70
- }
71
- }
72
- GeneratePdfComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GeneratePdfComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i1.MatDialog }, { token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Component });
73
- GeneratePdfComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GeneratePdfComponent, selector: "app-generate-pdf", ngImport: i0, template: "<div id=\"templateOT\" #templateOT>\r\n <div class=\"d-flex flex-column w-100 white-background\">\r\n\r\n <!-- Encabezado -->\r\n <div class=\"borde w-100 d-flex flex-row align-items-center header-section\">\r\n <div class=\"d-flex flex-column align-items-center text-content\" style=\"width:80%\">\r\n <h2 class=\"text-header text-uppercase wrap-text\">{{data.name}}</h2>\r\n <h2 class=\"text-header wrap-text\">NIT: {{data.nit}}</h2>\r\n <div class=\"w-100 d-flex flex-row justify-content-evenly\">\r\n <h3 class=\"text-header wrap-text\">{{data.address}}</h3>\r\n <h3 class=\"text-header wrap-text\">TEL: {{data.telephone}}</h3>\r\n </div>\r\n </div>\r\n <div style=\"width:20%\">\r\n <div class=\"img w-100\" [style.background-image]=\"'url(' + data.image + ')'\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"borde container-headers\">\r\n <h2>Orden de trabajo</h2>\r\n <h2 class=\"wrap-text\">N\u00B0: {{data.consecutive}}</h2>\r\n </div>\r\n\r\n <!-- Cuerpo -->\r\n <div class=\"borde w-100 flexible-row\">\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">\u00C1rea:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:32%\">\r\n <h2 class=\"wrap-text\">{{data.area}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">C\u00F3digo:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:16%\">\r\n <h2 class=\"wrap-text\">{{data.code}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">Fecha:</h2>\r\n </div>\r\n <div class=\"container-text text-content\" style=\"width:16%\">\r\n <h2 class=\"wrap-text\">{{data.date}}</h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"borde w-100 flexible-row\">\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">Operario:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:32%\">\r\n <h2 class=\"wrap-text\">{{data.responsible}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">Od\u00F3metro:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:16%\">\r\n <h2 class=\"wrap-text\">{{data.odometer}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">Referencia Factura:</h2>\r\n </div>\r\n <div class=\"container-text text-content\" style=\"width:16%\">\r\n <h2 class=\"wrap-text\">{{data.invoiceReference}}</h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"borde container-headers\">\r\n <h2>Datos del proveedor</h2>\r\n </div>\r\n\r\n <div class=\"borde flexible-row\">\r\n <div class=\"border-r container-text\" style=\"width:15%\">\r\n <h2 class=\"fw-bold\">Nombre:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:35%\">\r\n <h2 class=\"wrap-text\">{{data.nameProvider}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:15%\">\r\n <h2 class=\"fw-bold\">Direcci\u00F3n:</h2>\r\n </div>\r\n <div class=\"container-text text-content\" style=\"width:35%\">\r\n <h2 class=\"wrap-text\">{{data.addressProvider}}</h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"borde container-headers\">\r\n <h2>Detalles del servicio</h2>\r\n </div>\r\n\r\n <div class=\"borde w-100 description-section\">\r\n <h2 class=\"wrap-text text-start\">{{data.description}}</h2>\r\n </div>\r\n\r\n <div class=\"borde w-100 flexible-row\">\r\n <div class=\"border-r container-text\" style=\"width:35%\">\r\n <h2 class=\"fw-bold\">AUTORIZADA POR:</h2>\r\n </div>\r\n <div class=\"container-text text-content\" style=\"width:65%\">\r\n <h2 class=\"wrap-text\">{{data.approved_by}}</h2>\r\n </div>\r\n </div>\r\n\r\n <!-- piso -->\r\n <div class=\"borde d-flex flex-column align-items-center justify-content-center w-100 footer-section\">\r\n <h2>Favor adjuntar la orden a la factura o cuenta de cobro</h2>\r\n <h2 class=\"wrap-text\">{{data.mail}}</h2>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n<div class=\"download-container\">\r\n <button (click)=\"downloadPDF()\" color='primary' mat-raised-button>Generar PDF</button>\r\n</div>", styles: [".img{background-size:100%;background-repeat:no-repeat;background-position:center;background-size:contain;height:22mm;margin:10px;padding:15px}h2{font-size:1rem;line-height:1.2;margin:0;padding:0;text-align:center}h3{line-height:1.2;margin:0;padding:0;text-align:center}.text-header{line-height:1.5;font-weight:700}.text-uppercase{text-transform:uppercase}.wrap-text{white-space:pre-wrap}.text-content{padding:5px;word-wrap:break-word;overflow-wrap:break-word}.borde{border:1px solid blue}.border-r{border-right:1px solid blue;min-height:100%;align-self:stretch}.container-text{display:flex;justify-content:center;align-items:center;min-height:inherit}.container-headers{display:flex;align-items:center;justify-content:space-evenly;width:100%;min-height:8mm;background:rgba(240,244,255,.6117647059);padding:5px;word-wrap:break-word;overflow-wrap:break-word}.container-headers h2{font-weight:700}.flexible-row{display:flex;flex-direction:row;align-items:stretch;min-height:11mm}.header-section{min-height:25mm}.footer-section{min-height:14mm;background:rgba(240,244,255,.35);padding:5px;word-wrap:break-word;overflow-wrap:break-word}.description-section{min-height:20mm;padding:10px;word-wrap:break-word;overflow-wrap:break-word}.w-100{width:100%!important}.text-start{text-align:start}.white-background{background-color:#fff}.download-container{display:flex;justify-content:center;margin-top:15px}\n"], dependencies: [{ kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GeneratePdfComponent, decorators: [{
75
- type: Component,
76
- args: [{ selector: 'app-generate-pdf', template: "<div id=\"templateOT\" #templateOT>\r\n <div class=\"d-flex flex-column w-100 white-background\">\r\n\r\n <!-- Encabezado -->\r\n <div class=\"borde w-100 d-flex flex-row align-items-center header-section\">\r\n <div class=\"d-flex flex-column align-items-center text-content\" style=\"width:80%\">\r\n <h2 class=\"text-header text-uppercase wrap-text\">{{data.name}}</h2>\r\n <h2 class=\"text-header wrap-text\">NIT: {{data.nit}}</h2>\r\n <div class=\"w-100 d-flex flex-row justify-content-evenly\">\r\n <h3 class=\"text-header wrap-text\">{{data.address}}</h3>\r\n <h3 class=\"text-header wrap-text\">TEL: {{data.telephone}}</h3>\r\n </div>\r\n </div>\r\n <div style=\"width:20%\">\r\n <div class=\"img w-100\" [style.background-image]=\"'url(' + data.image + ')'\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"borde container-headers\">\r\n <h2>Orden de trabajo</h2>\r\n <h2 class=\"wrap-text\">N\u00B0: {{data.consecutive}}</h2>\r\n </div>\r\n\r\n <!-- Cuerpo -->\r\n <div class=\"borde w-100 flexible-row\">\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">\u00C1rea:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:32%\">\r\n <h2 class=\"wrap-text\">{{data.area}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">C\u00F3digo:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:16%\">\r\n <h2 class=\"wrap-text\">{{data.code}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">Fecha:</h2>\r\n </div>\r\n <div class=\"container-text text-content\" style=\"width:16%\">\r\n <h2 class=\"wrap-text\">{{data.date}}</h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"borde w-100 flexible-row\">\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">Operario:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:32%\">\r\n <h2 class=\"wrap-text\">{{data.responsible}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">Od\u00F3metro:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:16%\">\r\n <h2 class=\"wrap-text\">{{data.odometer}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:12%\">\r\n <h2 class=\"fw-bold\">Referencia Factura:</h2>\r\n </div>\r\n <div class=\"container-text text-content\" style=\"width:16%\">\r\n <h2 class=\"wrap-text\">{{data.invoiceReference}}</h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"borde container-headers\">\r\n <h2>Datos del proveedor</h2>\r\n </div>\r\n\r\n <div class=\"borde flexible-row\">\r\n <div class=\"border-r container-text\" style=\"width:15%\">\r\n <h2 class=\"fw-bold\">Nombre:</h2>\r\n </div>\r\n <div class=\"border-r container-text text-content\" style=\"width:35%\">\r\n <h2 class=\"wrap-text\">{{data.nameProvider}}</h2>\r\n </div>\r\n <div class=\"border-r container-text\" style=\"width:15%\">\r\n <h2 class=\"fw-bold\">Direcci\u00F3n:</h2>\r\n </div>\r\n <div class=\"container-text text-content\" style=\"width:35%\">\r\n <h2 class=\"wrap-text\">{{data.addressProvider}}</h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"borde container-headers\">\r\n <h2>Detalles del servicio</h2>\r\n </div>\r\n\r\n <div class=\"borde w-100 description-section\">\r\n <h2 class=\"wrap-text text-start\">{{data.description}}</h2>\r\n </div>\r\n\r\n <div class=\"borde w-100 flexible-row\">\r\n <div class=\"border-r container-text\" style=\"width:35%\">\r\n <h2 class=\"fw-bold\">AUTORIZADA POR:</h2>\r\n </div>\r\n <div class=\"container-text text-content\" style=\"width:65%\">\r\n <h2 class=\"wrap-text\">{{data.approved_by}}</h2>\r\n </div>\r\n </div>\r\n\r\n <!-- piso -->\r\n <div class=\"borde d-flex flex-column align-items-center justify-content-center w-100 footer-section\">\r\n <h2>Favor adjuntar la orden a la factura o cuenta de cobro</h2>\r\n <h2 class=\"wrap-text\">{{data.mail}}</h2>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n<div class=\"download-container\">\r\n <button (click)=\"downloadPDF()\" color='primary' mat-raised-button>Generar PDF</button>\r\n</div>", styles: [".img{background-size:100%;background-repeat:no-repeat;background-position:center;background-size:contain;height:22mm;margin:10px;padding:15px}h2{font-size:1rem;line-height:1.2;margin:0;padding:0;text-align:center}h3{line-height:1.2;margin:0;padding:0;text-align:center}.text-header{line-height:1.5;font-weight:700}.text-uppercase{text-transform:uppercase}.wrap-text{white-space:pre-wrap}.text-content{padding:5px;word-wrap:break-word;overflow-wrap:break-word}.borde{border:1px solid blue}.border-r{border-right:1px solid blue;min-height:100%;align-self:stretch}.container-text{display:flex;justify-content:center;align-items:center;min-height:inherit}.container-headers{display:flex;align-items:center;justify-content:space-evenly;width:100%;min-height:8mm;background:rgba(240,244,255,.6117647059);padding:5px;word-wrap:break-word;overflow-wrap:break-word}.container-headers h2{font-weight:700}.flexible-row{display:flex;flex-direction:row;align-items:stretch;min-height:11mm}.header-section{min-height:25mm}.footer-section{min-height:14mm;background:rgba(240,244,255,.35);padding:5px;word-wrap:break-word;overflow-wrap:break-word}.description-section{min-height:20mm;padding:10px;word-wrap:break-word;overflow-wrap:break-word}.w-100{width:100%!important}.text-start{text-align:start}.white-background{background-color:#fff}.download-container{display:flex;justify-content:center;margin-top:15px}\n"] }]
77
- }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
78
- type: Inject,
79
- args: [MAT_DIALOG_DATA]
80
- }] }, { type: i1.MatDialog }, { type: i2.MessageService }]; } });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtcGRmLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvcmVwb3J0L2dlbmVyYXRlLXBkZi9nZW5lcmF0ZS1wZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9yZXBvcnQvZ2VuZXJhdGUtcGRmL2dlbmVyYXRlLXBkZi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBMkIsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBT3BGLE1BQU0sT0FBTyxvQkFBb0I7SUF1Qi9CLFlBQ1MsU0FBNkMsRUFDcEIsU0FBUyxFQUNqQyxNQUFnQixFQUNqQixPQUF1QjtRQUh2QixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFBO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUF6QmhDLFNBQUksR0FBRztZQUNMLElBQUksRUFBRSxFQUFFO1lBQ1IsR0FBRyxFQUFFLEVBQUU7WUFDUCxPQUFPLEVBQUUsRUFBRTtZQUNYLFNBQVMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLEVBQUU7WUFDUixXQUFXLEVBQUUsRUFBRTtZQUNmLEtBQUssRUFBRSxFQUFFO1lBQ1QsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsRUFBRTtZQUNoQixlQUFlLEVBQUUsRUFBRTtZQUNuQixJQUFJLEVBQUUsRUFBRTtZQUNSLGdCQUFnQixFQUFFLEVBQUU7U0FDckIsQ0FBQTtJQU9HLENBQUM7SUFFTCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQTtJQUNqQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ25CO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ3JELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRztZQUNkLFVBQVUsRUFBRSxPQUFPO1lBQ25CLEtBQUssRUFBRSxDQUFDO1NBQ1QsQ0FBQztRQUNGLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2FBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFM0MsdUJBQXVCO1lBQ3ZCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbkIsTUFBTSxRQUFRLEdBQUksR0FBVyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDL0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDaEUsR0FBRyxDQUFDLFFBQVEsQ0FDVixHQUFHLEVBQ0gsS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxDQUNQLENBQUM7WUFDRixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ25CLDREQUE0RDtZQUMzRCxTQUFTLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUMsUUFBUSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7aUhBNUVVLG9CQUFvQiw4Q0F5QnJCLGVBQWU7cUdBekJkLG9CQUFvQix3RENYakMsNHRLQWtITTsyRkR2R08sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQjs7MEJBNkJ6QixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1nZW5lcmF0ZS1wZGYnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmF0ZS1wZGYuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dlbmVyYXRlLXBkZi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmF0ZVBkZkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGRhdGEgPSB7XHJcbiAgICBuYW1lOiAnJyxcclxuICAgIG5pdDogJycsXHJcbiAgICBhZGRyZXNzOiAnJyxcclxuICAgIHRlbGVwaG9uZTogJycsXHJcbiAgICBtYWlsOiAnJyxcclxuICAgIGltYWdlOiAnJyxcclxuICAgIGNvZGU6ICcnLFxyXG4gICAgZGF0ZTogJycsXHJcbiAgICByZXNwb25zaWJsZTogJycsXHJcbiAgICB0aGlyZDogJycsXHJcbiAgICBvZG9tZXRlcjogJycsXHJcbiAgICBhcHByb3ZlZF9ieTogJycsXHJcbiAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICBjb25zZWN1dGl2ZTogJycsXHJcbiAgICBuYW1lUHJvdmlkZXI6ICcnLFxyXG4gICAgYWRkcmVzc1Byb3ZpZGVyOiAnJyxcclxuICAgIGFyZWE6ICcnLFxyXG4gICAgaW52b2ljZVJlZmVyZW5jZTogJycsXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxHZW5lcmF0ZVBkZkNvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGFNb2RhbCxcclxuICAgIHByaXZhdGUgZGlhbG9nOk1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBtZXNzYWdlOiBNZXNzYWdlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhTW9kYWwuZGF0YVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCl7XHJcbiAgICBpZih0aGlzLmRhdGFNb2RhbC5hdXRvR2VuZXJhdGUpe1xyXG4gICAgICB0aGlzLmRvd25sb2FkUERGKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZFBERigpOiB2b2lkIHtcclxuICAgIHRoaXMubWVzc2FnZS5vcGVuTG9hZGluZyhcIkNhcmdhbmRvXCIsIFwiR2VuZXJhbmRvIFBERlwiKVxyXG4gICAgY29uc3QgREFUQSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wbGF0ZU9UJyk7XHJcbiAgICBjb25zdCBkb2MgPSBuZXcganNQREYoJ3AnLCAncHQnLCAnYTQnKTtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXHJcbiAgICAgIHNjYWxlOiAzXHJcbiAgICB9O1xyXG4gICAgaHRtbDJjYW52YXMoREFUQSwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKGNhbnZhcykgPT4ge1xyXG4gICAgICAgY29uc3QgaW1nID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvUE5HJyk7XHJcblxyXG4gICAgICAvL2FkZCBpbWcgY2FudmFzIHRvIHBkZlxyXG4gICAgICBjb25zdCBidWZmZXJYID0gMTU7XHJcbiAgICAgIGNvbnN0IGJ1ZmZlclkgPSAxNTtcclxuICAgICAgY29uc3QgaW1nUHJvcHMgPSAoZG9jIGFzIGFueSkuZ2V0SW1hZ2VQcm9wZXJ0aWVzKGltZyk7XHJcbiAgICAgIGNvbnN0IHBkZldpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCkgLTIgKiBidWZmZXJYO1xyXG4gICAgICBjb25zdCBwZGZIZWlnaHQgPSAoaW1nUHJvcHMuaGVpZ2h0ICogcGRmV2lkdGgpIC8gaW1nUHJvcHMud2lkdGg7XHJcbiAgICAgIGRvYy5hZGRJbWFnZShcclxuICAgICAgICBpbWcsXHJcbiAgICAgICAgJ1BORycsXHJcbiAgICAgICAgYnVmZmVyWCxcclxuICAgICAgICBidWZmZXJZLFxyXG4gICAgICAgIHBkZldpZHRoLFxyXG4gICAgICAgIHBkZkhlaWdodCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgJ0ZBU1QnXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBkb2M7XHJcbiAgICB9KVxyXG4gICAgLnRoZW4oKGRvY1Jlc3VsdCkgPT4ge1xyXG4gICAgIC8vZG9jUmVzdWx0LnNhdmUoYCR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfV9yZXBvcnRlLnBkZmApO1xyXG4gICAgICBkb2NSZXN1bHQub3V0cHV0KCdkYXRhdXJsbmV3d2luZG93Jywge2ZpbGVuYW1lOiAncmVwb3J0ZS5wZGYnfSk7XHJcbiAgICAgIHRoaXMuZGlhbG9nLmNsb3NlQWxsKClcclxuICAgICAgdGhpcy5tZXNzYWdlLmNsb3NlTG9hZGluZygpXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cInRlbXBsYXRlT1RcIiAjdGVtcGxhdGVPVD5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gdy0xMDAgd2hpdGUtYmFja2dyb3VuZFwiPlxyXG5cclxuICAgICAgICA8IS0tIEVuY2FiZXphZG8gIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSB3LTEwMCBkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGhlYWRlci1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6ODAlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWhlYWRlciB0ZXh0LXVwcGVyY2FzZSB3cmFwLXRleHRcIj57e2RhdGEubmFtZX19PC9oMj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInRleHQtaGVhZGVyIHdyYXAtdGV4dFwiPk5JVDoge3tkYXRhLm5pdH19PC9oMj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWV2ZW5seVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtaGVhZGVyIHdyYXAtdGV4dFwiPnt7ZGF0YS5hZGRyZXNzfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInRleHQtaGVhZGVyIHdyYXAtdGV4dFwiPlRFTDoge3tkYXRhLnRlbGVwaG9uZX19PC9oMz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjIwJVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZyB3LTEwMFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cIid1cmwoJyArIGRhdGEuaW1hZ2UgKyAnKSdcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlIGNvbnRhaW5lci1oZWFkZXJzXCI+XHJcbiAgICAgICAgICAgIDxoMj5PcmRlbiBkZSB0cmFiYWpvPC9oMj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+TsKwOiB7e2RhdGEuY29uc2VjdXRpdmV9fTwvaDI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQ3VlcnBvIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSB3LTEwMCBmbGV4aWJsZS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj7DgXJlYTo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6MzIlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEuYXJlYX19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5Dw7NkaWdvOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDoxNiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIndyYXAtdGV4dFwiPnt7ZGF0YS5jb2RlfX08L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5GZWNoYTo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6MTYlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEuZGF0ZX19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSB3LTEwMCBmbGV4aWJsZS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5PcGVyYXJpbzo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6MzIlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEucmVzcG9uc2libGV9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjEyJVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZnctYm9sZFwiPk9kw7NtZXRybzo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6MTYlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEub2RvbWV0ZXJ9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDoxMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5SZWZlcmVuY2lhIEZhY3R1cmE6PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItdGV4dCB0ZXh0LWNvbnRlbnRcIiBzdHlsZT1cIndpZHRoOjE2JVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+e3tkYXRhLmludm9pY2VSZWZlcmVuY2V9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGUgY29udGFpbmVyLWhlYWRlcnNcIj5cclxuICAgICAgICAgICAgPGgyPkRhdG9zIGRlbCBwcm92ZWVkb3I8L2gyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGUgZmxleGlibGUtcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItciBjb250YWluZXItdGV4dFwiIHN0eWxlPVwid2lkdGg6MTUlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJmdy1ib2xkXCI+Tm9tYnJlOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHQgdGV4dC1jb250ZW50XCIgc3R5bGU9XCJ3aWR0aDozNSVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIndyYXAtdGV4dFwiPnt7ZGF0YS5uYW1lUHJvdmlkZXJ9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLXIgY29udGFpbmVyLXRleHRcIiBzdHlsZT1cIndpZHRoOjE1JVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZnctYm9sZFwiPkRpcmVjY2nDs246PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItdGV4dCB0ZXh0LWNvbnRlbnRcIiBzdHlsZT1cIndpZHRoOjM1JVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+e3tkYXRhLmFkZHJlc3NQcm92aWRlcn19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSBjb250YWluZXItaGVhZGVyc1wiPlxyXG4gICAgICAgICAgICA8aDI+RGV0YWxsZXMgZGVsIHNlcnZpY2lvPC9oMj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlIHctMTAwIGRlc2NyaXB0aW9uLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0IHRleHQtc3RhcnRcIj57e2RhdGEuZGVzY3JpcHRpb259fTwvaDI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZSB3LTEwMCBmbGV4aWJsZS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1yIGNvbnRhaW5lci10ZXh0XCIgc3R5bGU9XCJ3aWR0aDozNSVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj5BVVRPUklaQURBIFBPUjo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci10ZXh0IHRleHQtY29udGVudFwiIHN0eWxlPVwid2lkdGg6NjUlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ3cmFwLXRleHRcIj57e2RhdGEuYXBwcm92ZWRfYnl9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIHBpc28gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCBmb290ZXItc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8aDI+RmF2b3IgYWRqdW50YXIgbGEgb3JkZW4gYSBsYSBmYWN0dXJhIG8gY3VlbnRhIGRlIGNvYnJvPC9oMj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwid3JhcC10ZXh0XCI+e3tkYXRhLm1haWx9fTwvaDI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImRvd25sb2FkLWNvbnRhaW5lclwiPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiZG93bmxvYWRQREYoKVwiIGNvbG9yPSdwcmltYXJ5JyBtYXQtcmFpc2VkLWJ1dHRvbj5HZW5lcmFyIFBERjwvYnV0dG9uPlxyXG48L2Rpdj4iXX0=