brainloper-ui 14.0.15 → 14.0.16
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 +5 -1
- package/esm2020/brainloper-ui.mjs +0 -5
- package/esm2020/public_api.mjs +0 -52
- package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +0 -305
- package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +0 -29
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +0 -23
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +0 -83
- package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +0 -31
- package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +0 -176
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +0 -691
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +0 -118
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +0 -185
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +0 -2
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +0 -2
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +0 -2
- package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +0 -222
- package/esm2020/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.mjs +0 -80
- package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +0 -81
- package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +0 -108
- package/esm2020/src/app/modules/data/rolesAndPermissions.mjs +0 -491
- package/esm2020/src/app/modules/interfaces/buttons/button-icon.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/combos/combos-configuration.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/common/Permissions.mjs +0 -8
- package/esm2020/src/app/modules/interfaces/data-table/params.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/data-table/rules.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/data-table/table-columns.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/data-table/table-configuration.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/enum/enumActions.mjs +0 -7
- package/esm2020/src/app/modules/interfaces/enum/enumRules.mjs +0 -8
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/filters/header-filters.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +0 -8
- package/esm2020/src/app/modules/interfaces/report/template-pdf-ot.mjs +0 -2
- package/esm2020/src/app/modules/interfaces/report/template-pfd-fo.mjs +0 -2
- package/esm2020/src/app/modules/services/crypto.service.mjs +0 -37
- package/esm2020/src/app/modules/services/export-data.service.mjs +0 -78055
- package/esm2020/src/app/modules/services/file-forms.service.mjs +0 -24
- package/esm2020/src/app/modules/services/functions.service.mjs +0 -54
- package/esm2020/src/app/modules/services/generate-pdf.service.mjs +0 -58
- package/esm2020/src/app/modules/services/http.service.mjs +0 -154
- package/esm2020/src/app/modules/services/loading/loading.component.mjs +0 -28
- package/esm2020/src/app/modules/services/local-storage.service.mjs +0 -115
- package/esm2020/src/app/modules/services/message.service.mjs +0 -200
- package/esm2020/src/app/modules/services/screen-size-util.mjs +0 -6
- package/esm2020/src/app/modules/services/session.service.mjs +0 -42
- package/fesm2015/brainloper-ui.mjs +0 -81324
- package/fesm2015/brainloper-ui.mjs.map +0 -1
- package/fesm2020/brainloper-ui.mjs +0 -81285
- package/fesm2020/brainloper-ui.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/public_api.d.ts +0 -51
- package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +0 -73
- package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +0 -13
- package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +0 -10
- package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +0 -24
- package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +0 -12
- package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +0 -46
- package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +0 -121
- package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +0 -21
- package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +0 -42
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +0 -2
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +0 -2
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +0 -2
- package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +0 -30
- package/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.d.ts +0 -35
- package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +0 -36
- package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +0 -26
- package/src/app/modules/data/rolesAndPermissions.d.ts +0 -2
- package/src/app/modules/interfaces/buttons/button-icon.d.ts +0 -9
- package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +0 -6
- package/src/app/modules/interfaces/combos/combos-configuration.d.ts +0 -13
- package/src/app/modules/interfaces/common/Permissions.d.ts +0 -40
- package/src/app/modules/interfaces/data-table/params.d.ts +0 -7
- package/src/app/modules/interfaces/data-table/rules.d.ts +0 -8
- package/src/app/modules/interfaces/data-table/table-columns.d.ts +0 -25
- package/src/app/modules/interfaces/data-table/table-configuration.d.ts +0 -25
- package/src/app/modules/interfaces/enum/enumActions.d.ts +0 -5
- package/src/app/modules/interfaces/enum/enumRules.d.ts +0 -6
- package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +0 -4
- package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +0 -13
- package/src/app/modules/interfaces/filters/header-filters.d.ts +0 -13
- package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +0 -10
- package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +0 -19
- package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +0 -20
- package/src/app/modules/services/crypto.service.d.ts +0 -10
- package/src/app/modules/services/export-data.service.d.ts +0 -18
- package/src/app/modules/services/file-forms.service.d.ts +0 -7
- package/src/app/modules/services/functions.service.d.ts +0 -13
- package/src/app/modules/services/generate-pdf.service.d.ts +0 -12
- package/src/app/modules/services/http.service.d.ts +0 -21
- package/src/app/modules/services/loading/loading.component.d.ts +0 -15
- package/src/app/modules/services/local-storage.service.d.ts +0 -49
- package/src/app/modules/services/message.service.d.ts +0 -23
- package/src/app/modules/services/screen-size-util.d.ts +0 -3
- package/src/app/modules/services/session.service.d.ts +0 -14
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import { ScreenSizeUtil } from '../../../services/screen-size-util';
|
|
2
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
-
import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../../../services/functions.service";
|
|
6
|
-
import * as i2 from "../../../services/http.service";
|
|
7
|
-
import * as i3 from "@angular/common";
|
|
8
|
-
import * as i4 from "@angular/material/icon";
|
|
9
|
-
import * as i5 from "@angular/material/form-field";
|
|
10
|
-
import * as i6 from "@angular/material/input";
|
|
11
|
-
import * as i7 from "@angular/material/select";
|
|
12
|
-
import * as i8 from "@angular/material/core";
|
|
13
|
-
import * as i9 from "@angular/material/datepicker";
|
|
14
|
-
import * as i10 from "@angular/forms";
|
|
15
|
-
import * as i11 from "../select-filter/select-filter.component";
|
|
16
|
-
export class FiltersComponent {
|
|
17
|
-
constructor(functionEter, http) {
|
|
18
|
-
this.functionEter = functionEter;
|
|
19
|
-
this.http = http;
|
|
20
|
-
this.headerFilters = [];
|
|
21
|
-
this.applyFilters = new EventEmitter();
|
|
22
|
-
this.headerFiltersValue = "-1";
|
|
23
|
-
this.headerFiltersSelected = [];
|
|
24
|
-
this.movil = ScreenSizeUtil.isMobile();
|
|
25
|
-
this.filtersPost = [];
|
|
26
|
-
this.loadDates();
|
|
27
|
-
this.loadDatesBetween();
|
|
28
|
-
}
|
|
29
|
-
async ngOnChanges(changes) {
|
|
30
|
-
if (changes) {
|
|
31
|
-
await this.loadFilter();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async ngOnInit() {
|
|
35
|
-
// if(this.headerFilters && this.headerFilters.length > 0)
|
|
36
|
-
// await this.loadFilter()
|
|
37
|
-
}
|
|
38
|
-
handlerFiltersDate(deleteFilter, item, valueDate = null, valueBetween1 = null, valueBetween2 = null) {
|
|
39
|
-
switch (item.type) {
|
|
40
|
-
case 'date':
|
|
41
|
-
if (deleteFilter) {
|
|
42
|
-
this.delteFilter({
|
|
43
|
-
labelFilter: 'Fecha entre',
|
|
44
|
-
type: 'dateRange'
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
this.loadDates(new Date(valueDate + "T05:00:00.000Z"));
|
|
49
|
-
}
|
|
50
|
-
break;
|
|
51
|
-
case 'dateRange':
|
|
52
|
-
if (deleteFilter) {
|
|
53
|
-
this.delteFilter({
|
|
54
|
-
labelFilter: 'Fecha igual a',
|
|
55
|
-
type: 'date'
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
this.loadDatesBetween(false, new Date(valueBetween1 + "T05:00:00.000Z"), new Date(valueBetween2 + "T05:00:00.000Z"));
|
|
60
|
-
}
|
|
61
|
-
break;
|
|
62
|
-
default:
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
selectFilter($event) {
|
|
67
|
-
let validate = this.headerFiltersSelected.find(x => x.labelFilter == $event.value);
|
|
68
|
-
if (!validate) {
|
|
69
|
-
let value = this.headerFilters.find(x => x.labelFilter == $event.value);
|
|
70
|
-
if (value) {
|
|
71
|
-
this.headerFiltersSelected.push(value);
|
|
72
|
-
this.handlerFiltersDate(true, { type: value.type });
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
setTimeout(() => {
|
|
76
|
-
this.headerFiltersValue = null;
|
|
77
|
-
}, 500);
|
|
78
|
-
}
|
|
79
|
-
async selectFilterData($event, item) {
|
|
80
|
-
let i = this.headerFiltersSelected.findIndex(x => x.labelFilter == item.labelFilter);
|
|
81
|
-
if (i >= 0)
|
|
82
|
-
this.headerFiltersSelected[i].value = $event.value;
|
|
83
|
-
let f = this.filtersPost.findIndex(x => x.labelFilter == item.labelFilter);
|
|
84
|
-
if ($event.value) {
|
|
85
|
-
let value = null;
|
|
86
|
-
switch (item.type) {
|
|
87
|
-
case 'select':
|
|
88
|
-
value = $event.value;
|
|
89
|
-
break;
|
|
90
|
-
case 'date':
|
|
91
|
-
value = this.functionEter.dateDB($event.value);
|
|
92
|
-
break;
|
|
93
|
-
case 'dateRange':
|
|
94
|
-
value = `${this.functionEter.dateDB(this.campaignOne.controls.start.value)},${this.functionEter.dateDB(this.campaignOne.controls.end.value)}`;
|
|
95
|
-
break;
|
|
96
|
-
default:
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
if (!value)
|
|
100
|
-
return;
|
|
101
|
-
if (f >= 0) {
|
|
102
|
-
this.filtersPost[f].value = value;
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
this.filtersPost.push({
|
|
106
|
-
tN: btoa(item.tN),
|
|
107
|
-
primaryKey: item.fileNameDb ? item.fileNameDb : item.primaryKey,
|
|
108
|
-
type: item.type,
|
|
109
|
-
value: value,
|
|
110
|
-
labelFilter: item.labelFilter
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
this.applyFilters.emit(this.filtersPost);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
delteFilter(item) {
|
|
117
|
-
let i = this.headerFiltersSelected.findIndex(x => x.labelFilter == item.labelFilter);
|
|
118
|
-
let f = this.filtersPost.findIndex(x => x.labelFilter == item.labelFilter);
|
|
119
|
-
if (i >= 0) {
|
|
120
|
-
this.headerFiltersSelected[i].value = "-1";
|
|
121
|
-
this.headerFiltersSelected.splice(i, 1);
|
|
122
|
-
}
|
|
123
|
-
if (f >= 0) {
|
|
124
|
-
this.filtersPost.splice(f, 1);
|
|
125
|
-
this.applyFilters.emit(this.filtersPost);
|
|
126
|
-
}
|
|
127
|
-
this.handlerFiltersDate(false, item);
|
|
128
|
-
setTimeout(() => {
|
|
129
|
-
this.headerFiltersValue = null;
|
|
130
|
-
}, 500);
|
|
131
|
-
}
|
|
132
|
-
loadDates(value = null) {
|
|
133
|
-
this.fecha = new UntypedFormGroup({
|
|
134
|
-
fecha: new UntypedFormControl(value)
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
loadDatesBetween(init = true, value1 = null, value2 = null) {
|
|
138
|
-
if (init) {
|
|
139
|
-
this.campaignOne = new UntypedFormGroup({
|
|
140
|
-
start: new UntypedFormControl(null),
|
|
141
|
-
end: new UntypedFormControl(null),
|
|
142
|
-
});
|
|
143
|
-
this.campaignTwo = new UntypedFormGroup({
|
|
144
|
-
start: new UntypedFormControl(null),
|
|
145
|
-
end: new UntypedFormControl(null),
|
|
146
|
-
});
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
var day1 = 1;
|
|
150
|
-
var day2 = 15;
|
|
151
|
-
if (!value1) {
|
|
152
|
-
value1 = new Date();
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
day1 = value1.getDate();
|
|
156
|
-
}
|
|
157
|
-
if (!value2) {
|
|
158
|
-
value2 = new Date();
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
day2 = value2.getDate();
|
|
162
|
-
}
|
|
163
|
-
this.campaignOne = new UntypedFormGroup({
|
|
164
|
-
start: new UntypedFormControl(new Date(value1.getFullYear(), value1.getMonth(), day1)),
|
|
165
|
-
end: new UntypedFormControl(new Date(value2.getFullYear(), value2.getMonth(), day2)),
|
|
166
|
-
});
|
|
167
|
-
this.campaignTwo = new UntypedFormGroup({
|
|
168
|
-
start: new UntypedFormControl(new Date(value1.getFullYear(), value1.getMonth(), day1)),
|
|
169
|
-
end: new UntypedFormControl(new Date(value1.getFullYear(), value1.getMonth(), day1)),
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
async loadFilter() {
|
|
173
|
-
// if (this.headerFiltersSelected.length != 0) {
|
|
174
|
-
// return
|
|
175
|
-
// }
|
|
176
|
-
let applyFilter = false;
|
|
177
|
-
for (let element of this.headerFilters) {
|
|
178
|
-
if (element.urlData) {
|
|
179
|
-
let res = await this.http.getDataBody(element.urlData);
|
|
180
|
-
element.body = res;
|
|
181
|
-
}
|
|
182
|
-
else if (element.type == 'select') {
|
|
183
|
-
element.body = element.data;
|
|
184
|
-
}
|
|
185
|
-
element.filteredList = element.body;
|
|
186
|
-
if (!element.primaryKey)
|
|
187
|
-
element.primaryKey = element.visibleField;
|
|
188
|
-
if (element.type == "date")
|
|
189
|
-
element.labelFilter = element.labelFilter ?? "Fecha igual a";
|
|
190
|
-
if (element.type == "dateRange")
|
|
191
|
-
element.labelFilter = element.labelFilter ?? "Fecha entre";
|
|
192
|
-
if (element.active) {
|
|
193
|
-
this.headerFiltersSelected.push(element);
|
|
194
|
-
this.filtersPost.push({
|
|
195
|
-
tN: btoa(element.tN),
|
|
196
|
-
primaryKey: element.fileNameDb ? element.fileNameDb : element.primaryKey,
|
|
197
|
-
type: element.type,
|
|
198
|
-
value: element.value,
|
|
199
|
-
labelFilter: element.labelFilter
|
|
200
|
-
});
|
|
201
|
-
this.handlerFiltersDate(false, element, element.value, element.value.split(',')[0], element.value.split(',')[1]);
|
|
202
|
-
if (element.value && element.value != '') {
|
|
203
|
-
applyFilter = true;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
if (applyFilter) {
|
|
208
|
-
this.applyFilters.emit(this.filtersPost);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FiltersComponent, deps: [{ token: i1.FunctionsService }, { token: i2.HttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
213
|
-
FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: FiltersComponent, selector: "app-filters", inputs: { headerFilters: "headerFilters" }, outputs: { applyFilters: "applyFilters" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\r\n <div class=\"col-md-4 col-12\">\r\n <mat-form-field >\r\n <mat-label>Filtros</mat-label>\r\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\r\n <mat-option\r\n *ngFor=\"let f of headerFilters\"\r\n value=\"{{ f.labelFilter }}\"\r\n >\r\n {{ f.labelFilter }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\r\n <mat-form-field *ngIf=\"item.type == 'select'\">\r\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\r\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\r\n <app-select-filter\r\n [placeholder]=\"'Filter'\"\r\n [displayMember]=\"item.visibleField\"\r\n [array]=\"item.body\"\r\n (filteredReturn)=\"item.filteredList = $event\"\r\n [noResultsMessage]=\"'No hay resultados'\"\r\n >\r\n </app-select-filter>\r\n <mat-option\r\n *ngFor=\"let data of item.filteredList\"\r\n value=\"{{ data[item.primaryKey] }}\"\r\n >\r\n {{ data[item.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\r\n formControlName='fecha' required>\r\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\r\n </mat-datepicker-toggle>\r\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <mat-date-range-input\r\n [formGroup]=\"campaignOne\"\r\n [rangePicker]=\"campaignOnePicker\"\r\n [comparisonStart]=\"campaignTwo.value.start\"\r\n [comparisonEnd]=\"campaignTwo.value.end\">\r\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\r\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\r\n </mat-form-field>\r\n\r\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i9.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i9.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i9.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i9.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i11.SelectFilterComponent, selector: "app-select-filter", inputs: ["array", "placeholder", "color", "displayMember", "showSpinner", "noResultsMessage", "hasGroup", "groupArrayName"], outputs: ["filteredReturn"] }] });
|
|
214
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: FiltersComponent, decorators: [{
|
|
215
|
-
type: Component,
|
|
216
|
-
args: [{ selector: 'app-filters', template: "<div *ngIf=\"headerFilters && headerFilters.length > 0\" style=\"display: flex; width: 100%; flex-wrap: wrap;\" class=\"col-12 mb-2\">\r\n <div class=\"col-md-4 col-12\">\r\n <mat-form-field >\r\n <mat-label>Filtros</mat-label>\r\n <mat-select (selectionChange)=\"selectFilter($event)\" [(ngModel)]=\"headerFiltersValue\">\r\n <mat-option\r\n *ngFor=\"let f of headerFilters\"\r\n value=\"{{ f.labelFilter }}\"\r\n >\r\n {{ f.labelFilter }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div *ngFor=\"let item of headerFiltersSelected\" class=\"col-md-4 col-12 d-flex align-items-center\">\r\n <mat-form-field *ngIf=\"item.type == 'select'\">\r\n <mat-label>Filtrar por {{item.labelFilter}}</mat-label>\r\n <mat-select (selectionChange)=\"selectFilterData($event, item)\" [value]=\"item.value\">\r\n <app-select-filter\r\n [placeholder]=\"'Filter'\"\r\n [displayMember]=\"item.visibleField\"\r\n [array]=\"item.body\"\r\n (filteredReturn)=\"item.filteredList = $event\"\r\n [noResultsMessage]=\"'No hay resultados'\"\r\n >\r\n </app-select-filter>\r\n <mat-option\r\n *ngFor=\"let data of item.filteredList\"\r\n value=\"{{ data[item.primaryKey] }}\"\r\n >\r\n {{ data[item.visibleField] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'date'\" [formGroup]=\"fecha\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <input (dateInput)=\"selectFilterData($event, item)\" matInput [matDatepicker]=\"Fecha\" autocomplete=\"off\" matInput\r\n formControlName='fecha' required>\r\n <mat-datepicker-toggle matSuffix [for]=\"Fecha\">\r\n </mat-datepicker-toggle>\r\n <mat-datepicker dateInput #Fecha [touchUi]='movil?true:false'></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field *ngIf=\"item.type == 'dateRange'\">\r\n <mat-label>{{item.labelFilter}}</mat-label>\r\n <mat-date-range-input\r\n [formGroup]=\"campaignOne\"\r\n [rangePicker]=\"campaignOnePicker\"\r\n [comparisonStart]=\"campaignTwo.value.start\"\r\n [comparisonEnd]=\"campaignTwo.value.end\">\r\n <input matStartDate placeholder=\"Start date\" formControlName=\"start\">\r\n <input (dateInput)=\"selectFilterData($event, item)\" matEndDate placeholder=\"End date\" formControlName=\"end\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"campaignOnePicker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #campaignOnePicker></mat-date-range-picker>\r\n </mat-form-field>\r\n\r\n <div class=\"p-2\" style=\"cursor: pointer\" (click)=\"delteFilter(item)\"><mat-icon>cancel</mat-icon></div>\r\n\r\n </div>\r\n</div>\r\n", styles: ["mat-form-field{padding:0!important;width:100%}\n"] }]
|
|
217
|
-
}], ctorParameters: function () { return [{ type: i1.FunctionsService }, { type: i2.HttpService }]; }, propDecorators: { headerFilters: [{
|
|
218
|
-
type: Input
|
|
219
|
-
}], applyFilters: [{
|
|
220
|
-
type: Output
|
|
221
|
-
}] } });
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL2ZpbHRlcnMvZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBVyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBU3RFLE1BQU0sT0FBTyxnQkFBZ0I7SUFlM0IsWUFDVSxZQUE4QixFQUM5QixJQUFpQjtRQURqQixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQWZsQixrQkFBYSxHQUFlLEVBQUUsQ0FBQTtRQUM3QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFakQsdUJBQWtCLEdBQUcsSUFBSSxDQUFBO1FBQ3pCLDBCQUFxQixHQUFnQixFQUFFLENBQUE7UUFJdkMsVUFBSyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUdsQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQTtRQU1kLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUN4QixDQUFDO0lBQ0YsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFzQjtRQUN0QyxJQUFLLE9BQU8sRUFBRTtZQUNaLE1B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MkZEbERhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxhQUFhO2lJQU1kLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRnVuY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Z1bmN0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2NyZWVuU2l6ZVV0aWwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zY3JlZW4tc2l6ZS11dGlsJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBEb0NoZWNrLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZWxlbWVudCB9IGZyb20gJ3Byb3RyYWN0b3InO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGhlYWRlckZpbHRlcnM6IEFycmF5PGFueT4gPSBbXVxyXG4gIEBPdXRwdXQoKSBhcHBseUZpbHRlcnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgaGVhZGVyRmlsdGVyc1ZhbHVlID0gXCItMVwiXHJcbiAgaGVhZGVyRmlsdGVyc1NlbGVjdGVkIDogQXJyYXk8YW55PiA9IFtdXHJcbiAgY2FtcGFpZ25PbmU6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgY2FtcGFpZ25Ud286IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZmVjaGE6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgbW92aWwgPSBTY3JlZW5TaXplVXRpbC5pc01vYmlsZSgpO1xyXG5cclxuXHJcbiAgZmlsdGVyc1Bvc3QgPSBbXVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZnVuY3Rpb25FdGVyOiBGdW5jdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMubG9hZERhdGVzKClcclxuICAgIHRoaXMubG9hZERhdGVzQmV0d2VlbigpXHJcbiAgIH1cclxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoIGNoYW5nZXMpIHtcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkRmlsdGVyKClcclxuICAgIH1cclxuICB9ICBcclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBpZih0aGlzLmhlYWRlckZpbHRlcnMgJiYgdGhpcy5oZWFkZXJGaWx0ZXJzLmxlbmd0aCA+IDApXHJcbiAgICAvLyAgIGF3YWl0IHRoaXMubG9hZEZpbHRlcigpXHJcbiAgfVxyXG5cclxuICBoYW5kbGVyRmlsdGVyc0RhdGUoZGVsZXRlRmlsdGVyOmJvb2xlYW4sIGl0ZW06YW55LCB2YWx1ZURhdGUgPSBudWxsLCB2YWx1ZUJldHdlZW4xID0gbnVsbCwgdmFsdWVCZXR3ZWVuMiA9IG51bGwpe1xyXG4gICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgaWYoZGVsZXRlRmlsdGVyKXtcclxuICAgICAgICAgIHRoaXMuZGVsdGVGaWx0ZXIoe1xyXG4gICAgICAgICAgICBsYWJlbEZpbHRlcjonRmVjaGEgZW50cmUnLFxyXG4gICAgICAgICAgICB0eXBlOidkYXRlUmFuZ2UnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5sb2FkRGF0ZXMobmV3IERhdGUodmFsdWVEYXRlICsgXCJUMDU6MDA6MDAuMDAwWlwiKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnZGF0ZVJhbmdlJzpcclxuICAgICAgICBpZihkZWxldGVGaWx0ZXIpe1xyXG4gICAgICAgICAgdGhpcy5kZWx0ZUZpbHRlcih7XHJcbiAgICAgICAgICAgIGxhYmVsRmlsdGVyOidGZWNoYSBpZ3VhbCBhJyxcclxuICAgICAgICAgICAgdHlwZTonZGF0ZSdcclxuICAgICAgICB9KVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5sb2FkRGF0ZXNCZXR3ZWVuKGZhbHNlLCBuZXcgRGF0ZSh2YWx1ZUJldHdlZW4xICsgXCJUMDU6MDA6MDAuMDAwWlwiKSAsIG5ldyBEYXRlKHZhbHVlQmV0d2VlbjIgKyBcIlQwNTowMDowMC4wMDBaXCIpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEZpbHRlcigkZXZlbnQpe1xyXG4gICAgbGV0IHZhbGlkYXRlID0gdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQuZmluZCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gJGV2ZW50LnZhbHVlKVxyXG4gICAgaWYoIXZhbGlkYXRlKXtcclxuICAgICAgbGV0IHZhbHVlID0gdGhpcy5oZWFkZXJGaWx0ZXJzLmZpbmQoeCA9PiB4LmxhYmVsRmlsdGVyID09ICRldmVudC52YWx1ZSlcclxuICAgICAgaWYodmFsdWUpe1xyXG4gICAgICAgIHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkLnB1c2godmFsdWUpXHJcbiAgICAgICAgdGhpcy5oYW5kbGVyRmlsdGVyc0RhdGUodHJ1ZSAsIHt0eXBlOnZhbHVlLnR5cGV9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzVmFsdWUgPSBudWxsXHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pe1xyXG4gICAgbGV0IGkgPSB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5maW5kSW5kZXgoeCA9PiB4LmxhYmVsRmlsdGVyID09IGl0ZW0ubGFiZWxGaWx0ZXIpXHJcbiAgICBpZihpID49IDAgKSB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZFtpXS52YWx1ZSA9ICRldmVudC52YWx1ZVxyXG4gICAgbGV0IGYgPSB0aGlzLmZpbHRlcnNQb3N0LmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcclxuICAgIGlmKCRldmVudC52YWx1ZSl7XHJcbiAgICAgIGxldCB2YWx1ZSA9IG51bGxcclxuICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdzZWxlY3QnOlxyXG4gICAgICAgICAgdmFsdWUgPSAkZXZlbnQudmFsdWVcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmZ1bmN0aW9uRXRlci5kYXRlREIoJGV2ZW50LnZhbHVlKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdkYXRlUmFuZ2UnOlxyXG4gICAgICAgICAgdmFsdWUgPSBgJHt0aGlzLmZ1bmN0aW9uRXRlci5kYXRlREIodGhpcy5jYW1wYWlnbk9uZS5jb250cm9scy5zdGFydC52YWx1ZSl9LCR7dGhpcy5mdW5jdGlvbkV0ZXIuZGF0ZURCKHRoaXMuY2FtcGFpZ25PbmUuY29udHJvbHMuZW5kLnZhbHVlKX1gXHJcbiAgICAgICAgICBicmVha1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYoIXZhbHVlKSByZXR1cm5cclxuICAgICAgaWYoZiA+PSAwKXtcclxuICAgICAgICB0aGlzLmZpbHRlcnNQb3N0W2ZdLnZhbHVlID0gdmFsdWVcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdC5wdXNoKHtcclxuICAgICAgICAgIHROOmJ0b2EoaXRlbS50TiksXHJcbiAgICAgICAgICBwcmltYXJ5S2V5Oml0ZW0uZmlsZU5hbWVEYj9pdGVtLmZpbGVOYW1lRGI6aXRlbS5wcmltYXJ5S2V5LFxyXG4gICAgICAgICAgdHlwZTppdGVtLnR5cGUsXHJcbiAgICAgICAgICB2YWx1ZTp2YWx1ZSxcclxuICAgICAgICAgIGxhYmVsRmlsdGVyOml0ZW0ubGFiZWxGaWx0ZXJcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzUG9zdClcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgZGVsdGVGaWx0ZXIoaXRlbSl7XHJcbiAgICBsZXQgaSA9IHRoaXMuaGVhZGVyRmlsdGVyc1NlbGVjdGVkLmZpbmRJbmRleCh4ID0+IHgubGFiZWxGaWx0ZXIgPT0gaXRlbS5sYWJlbEZpbHRlcilcclxuICAgIGxldCBmID0gdGhpcy5maWx0ZXJzUG9zdC5maW5kSW5kZXgoeCA9PiB4LmxhYmVsRmlsdGVyID09IGl0ZW0ubGFiZWxGaWx0ZXIpXHJcbiAgICBpZihpID49IDApIHtcclxuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWRbaV0udmFsdWUgPSBcIi0xXCJcclxuICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQuc3BsaWNlKGksIDEpXHJcbiAgICB9XHJcbiAgICBpZihmID49IDApIHtcclxuICAgICAgdGhpcy5maWx0ZXJzUG9zdC5zcGxpY2UoZiwxKVxyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycy5lbWl0KHRoaXMuZmlsdGVyc1Bvc3QpXHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZXJGaWx0ZXJzRGF0ZShmYWxzZSwgaXRlbSlcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhlYWRlckZpbHRlcnNWYWx1ZSA9IG51bGxcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBsb2FkRGF0ZXModmFsdWUgOiBEYXRlID0gbnVsbCl7XHJcbiAgICB0aGlzLmZlY2hhID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xyXG4gICAgICBmZWNoYTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCh2YWx1ZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZERhdGVzQmV0d2Vlbihpbml0OmJvb2xlYW4gPSB0cnVlLCB2YWx1ZTEgOiBEYXRlID0gbnVsbCwgdmFsdWUyIDogRGF0ZSA9IG51bGwpe1xyXG4gICAgaWYoaW5pdCl7XHJcbiAgICAgIHRoaXMuY2FtcGFpZ25PbmUgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgICAgc3RhcnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgZW5kOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FtcGFpZ25Ud28gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgICAgc3RhcnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgZW5kOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB2YXIgZGF5MSA9IDFcclxuICAgIHZhciBkYXkyID0gMTVcclxuICAgIGlmKCF2YWx1ZTEpe1xyXG4gICAgICB2YWx1ZTEgPSBuZXcgRGF0ZSgpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgZGF5MSA9IHZhbHVlMS5nZXREYXRlKClcclxuICAgIH1cclxuXHJcbiAgICBpZighdmFsdWUyKXtcclxuICAgICAgdmFsdWUyID0gbmV3IERhdGUoKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIGRheTIgPSB2YWx1ZTIuZ2V0RGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYW1wYWlnbk9uZSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcclxuICAgICAgc3RhcnQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUxLmdldEZ1bGxZZWFyKCksIHZhbHVlMS5nZXRNb250aCgpLCBkYXkxKSksXHJcbiAgICAgIGVuZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChuZXcgRGF0ZSh2YWx1ZTIuZ2V0RnVsbFllYXIoKSwgdmFsdWUyLmdldE1vbnRoKCksIGRheTIpKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FtcGFpZ25Ud28gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgIHN0YXJ0OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG5ldyBEYXRlKHZhbHVlMS5nZXRGdWxsWWVhcigpLCB2YWx1ZTEuZ2V0TW9udGgoKSwgZGF5MSkpLFxyXG4gICAgICBlbmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobmV3IERhdGUodmFsdWUxLmdldEZ1bGxZZWFyKCksIHZhbHVlMS5nZXRNb250aCgpLCBkYXkxKSksXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkRmlsdGVyKCl7XHJcbiAgICAvLyBpZiAodGhpcy5oZWFkZXJGaWx0ZXJzU2VsZWN0ZWQubGVuZ3RoICE9IDApIHtcclxuICAgIC8vICAgcmV0dXJuXHJcbiAgICAvLyB9XHJcbiAgICBsZXQgYXBwbHlGaWx0ZXIgPSBmYWxzZSBcclxuICAgIGZvcihsZXQgZWxlbWVudCBvZiB0aGlzLmhlYWRlckZpbHRlcnMpe1xyXG4gICAgIFxyXG4gICAgICBpZihlbGVtZW50LnVybERhdGEpe1xyXG4gICAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLmh0dHAuZ2V0RGF0YUJvZHk8YW55PihlbGVtZW50LnVybERhdGEpXHJcbiAgICAgICAgZWxlbWVudC5ib2R5ID0gcmVzO1xyXG4gICAgICB9ZWxzZSBpZiAoZWxlbWVudC50eXBlID09ICdzZWxlY3QnKSB7ICAgICAgIFxyXG4gICAgICAgIGVsZW1lbnQuYm9keSA9IGVsZW1lbnQuZGF0YSAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIGVsZW1lbnQuZmlsdGVyZWRMaXN0ID0gZWxlbWVudC5ib2R5O1xyXG4gICAgICBpZighZWxlbWVudC5wcmltYXJ5S2V5KSBlbGVtZW50LnByaW1hcnlLZXkgPSBlbGVtZW50LnZpc2libGVGaWVsZFxyXG4gICAgICBpZihlbGVtZW50LnR5cGUgPT0gXCJkYXRlXCIpIGVsZW1lbnQubGFiZWxGaWx0ZXIgPSBlbGVtZW50LmxhYmVsRmlsdGVyID8/IFwiRmVjaGEgaWd1YWwgYVwiXHJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PSBcImRhdGVSYW5nZVwiKSBlbGVtZW50LmxhYmVsRmlsdGVyID0gZWxlbWVudC5sYWJlbEZpbHRlciA/PyBcIkZlY2hhIGVudHJlXCJcclxuICAgICAgaWYoZWxlbWVudC5hY3RpdmUpIHtcclxuICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnNTZWxlY3RlZC5wdXNoKGVsZW1lbnQpXHJcbiAgICAgICAgdGhpcy5maWx0ZXJzUG9zdC5wdXNoKHtcclxuICAgICAgICAgIHROOmJ0b2EoZWxlbWVudC50TiksXHJcbiAgICAgICAgICBwcmltYXJ5S2V5OmVsZW1lbnQuZmlsZU5hbWVEYj9lbGVtZW50LmZpbGVOYW1lRGI6ZWxlbWVudC5wcmltYXJ5S2V5LFxyXG4gICAgICAgICAgdHlwZTplbGVtZW50LnR5cGUsXHJcbiAgICAgICAgICB2YWx1ZTplbGVtZW50LnZhbHVlLFxyXG4gICAgICAgICAgbGFiZWxGaWx0ZXI6ZWxlbWVudC5sYWJlbEZpbHRlclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5oYW5kbGVyRmlsdGVyc0RhdGUoZmFsc2UsIGVsZW1lbnQsIGVsZW1lbnQudmFsdWUsIGVsZW1lbnQudmFsdWUuc3BsaXQoJywnKVswXSwgZWxlbWVudC52YWx1ZS5zcGxpdCgnLCcpWzFdKVxyXG4gICAgICAgIGlmIChlbGVtZW50LnZhbHVlICYmIGVsZW1lbnQudmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgIGFwcGx5RmlsdGVyID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFwcGx5RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzLmVtaXQodGhpcy5maWx0ZXJzUG9zdCkgICAgICBcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImhlYWRlckZpbHRlcnMgJiYgaGVhZGVyRmlsdGVycy5sZW5ndGggPiAwXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJTsgZmxleC13cmFwOiB3cmFwO1wiIGNsYXNzPVwiY29sLTEyIG1iLTJcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgY29sLTEyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICA8bWF0LWxhYmVsPkZpbHRyb3M8L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RGaWx0ZXIoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwiaGVhZGVyRmlsdGVyc1ZhbHVlXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmIG9mIGhlYWRlckZpbHRlcnNcIlxyXG4gICAgICAgICAgdmFsdWU9XCJ7eyBmLmxhYmVsRmlsdGVyIH19XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBmLmxhYmVsRmlsdGVyIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYWRlckZpbHRlcnNTZWxlY3RlZFwiIGNsYXNzPVwiY29sLW1kLTQgY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiaXRlbS50eXBlID09ICdzZWxlY3QnXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5GaWx0cmFyIHBvciB7e2l0ZW0ubGFiZWxGaWx0ZXJ9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pXCIgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cclxuICAgICAgICAgIDxhcHAtc2VsZWN0LWZpbHRlclxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0ZpbHRlcidcIlxyXG4gICAgICAgICAgICBbZGlzcGxheU1lbWJlcl09XCJpdGVtLnZpc2libGVGaWVsZFwiXHJcbiAgICAgICAgICAgIFthcnJheV09XCJpdGVtLmJvZHlcIlxyXG4gICAgICAgICAgICAoZmlsdGVyZWRSZXR1cm4pPVwiaXRlbS5maWx0ZXJlZExpc3QgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICBbbm9SZXN1bHRzTWVzc2FnZV09XCInTm8gaGF5IHJlc3VsdGFkb3MnXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvYXBwLXNlbGVjdC1maWx0ZXI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBpdGVtLmZpbHRlcmVkTGlzdFwiXHJcbiAgICAgICAgICAgIHZhbHVlPVwie3sgZGF0YVtpdGVtLnByaW1hcnlLZXldIH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgZGF0YVtpdGVtLnZpc2libGVGaWVsZF0gfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZSdcIiBbZm9ybUdyb3VwXT1cImZlY2hhXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7aXRlbS5sYWJlbEZpbHRlcn19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgKGRhdGVJbnB1dCk9XCJzZWxlY3RGaWx0ZXJEYXRhKCRldmVudCwgaXRlbSlcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJGZWNoYVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSdmZWNoYScgcmVxdWlyZWQ+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIkZlY2hhXCI+XHJcbiAgICAgICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciBkYXRlSW5wdXQgI0ZlY2hhIFt0b3VjaFVpXT0nbW92aWw/dHJ1ZTpmYWxzZSc+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGF0ZVJhbmdlJ1wiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3tpdGVtLmxhYmVsRmlsdGVyfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXRcclxuICAgICAgICAgIFtmb3JtR3JvdXBdPVwiY2FtcGFpZ25PbmVcIlxyXG4gICAgICAgICAgW3JhbmdlUGlja2VyXT1cImNhbXBhaWduT25lUGlja2VyXCJcclxuICAgICAgICAgIFtjb21wYXJpc29uU3RhcnRdPVwiY2FtcGFpZ25Ud28udmFsdWUuc3RhcnRcIlxyXG4gICAgICAgICAgW2NvbXBhcmlzb25FbmRdPVwiY2FtcGFpZ25Ud28udmFsdWUuZW5kXCI+XHJcbiAgICAgICAgICA8aW5wdXQgIG1hdFN0YXJ0RGF0ZSBwbGFjZWhvbGRlcj1cIlN0YXJ0IGRhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiPlxyXG4gICAgICAgICAgPGlucHV0IChkYXRlSW5wdXQpPVwic2VsZWN0RmlsdGVyRGF0YSgkZXZlbnQsIGl0ZW0pXCIgbWF0RW5kRGF0ZSBwbGFjZWhvbGRlcj1cIkVuZCBkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCI+XHJcbiAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImNhbXBhaWduT25lUGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjY2FtcGFpZ25PbmVQaWNrZXI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicC0yXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIiAoY2xpY2spPVwiZGVsdGVGaWx0ZXIoaXRlbSlcIj48bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj48L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -1,80 +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
|
-
};
|
|
34
|
-
}
|
|
35
|
-
ngOnInit() {
|
|
36
|
-
this.data = this.dataModal.data;
|
|
37
|
-
}
|
|
38
|
-
ngAfterViewInit() {
|
|
39
|
-
if (this.dataModal.autoGenerate) {
|
|
40
|
-
this.downloadPDF();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
downloadPDF() {
|
|
44
|
-
this.message.openLoading("Cargando", "Generando PDF");
|
|
45
|
-
const DATA = document.getElementById('templateOT');
|
|
46
|
-
const doc = new jsPDF('p', 'pt', 'a4');
|
|
47
|
-
const options = {
|
|
48
|
-
background: 'white',
|
|
49
|
-
scale: 3
|
|
50
|
-
};
|
|
51
|
-
html2canvas(DATA, options)
|
|
52
|
-
.then((canvas) => {
|
|
53
|
-
const img = canvas.toDataURL('image/PNG');
|
|
54
|
-
//add img canvas to pdf
|
|
55
|
-
const bufferX = 15;
|
|
56
|
-
const bufferY = 15;
|
|
57
|
-
const imgProps = doc.getImageProperties(img);
|
|
58
|
-
const pdfWidth = doc.internal.pageSize.getWidth() - 2 * bufferX;
|
|
59
|
-
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
|
|
60
|
-
doc.addImage(img, 'PNG', bufferX, bufferY, pdfWidth, pdfHeight, undefined, 'FAST');
|
|
61
|
-
return doc;
|
|
62
|
-
})
|
|
63
|
-
.then((docResult) => {
|
|
64
|
-
//docResult.save(`${new Date().toISOString()}_reporte.pdf`);
|
|
65
|
-
docResult.output('dataurlnewwindow', { filename: 'reporte.pdf' });
|
|
66
|
-
this.dialog.closeAll();
|
|
67
|
-
this.message.closeLoading();
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
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 });
|
|
72
|
-
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=\"template-ot\" style=\"display: flex; flex-direction: column; width:100%; margin:0; background-color: white;\">\r\n\r\n <!-- Encabezado -->\r\n <div class=\"borde\" style=\"width:100%; height:30mm; display:flex; flex-direction: row; align-items: center; \">\r\n <div style=\"width:70%; display:flex; flex-direction:column; align-items: center;\">\r\n <h2 style=\"margin:0; padding:0; text-align: center; text-transform: uppercase;\">{{data.name}}</h2>\r\n <h2 style=\"margin:0; padding:0; text-align: center; \">NIT: {{data.nit}}</h2>\r\n <div style=\"width:70%; display:flex; flex-direction:row; justify-content: space-around;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center; \">{{data.address}}</h3>\r\n <h3 style=\"margin:0; padding:0; text-align: center; \">TEL: {{data.telephone}}</h3>\r\n </div>\r\n </div>\r\n <div style=\"width:30%;\">\r\n <div class=\"img\"\r\n style=\"width:90%; height:100px; margin: 10px; padding: 15px; background-image: url({{data.image}});\">\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"borde\"\r\n style=\"width:100%; height:10mm; display:flex; flex-direction: row; justify-content: space-around; align-items: center; background: #F0F4FF;\">\r\n <h2 style=\"margin:0; padding:0;\">ORDEN DE TRABAJO</h2>\r\n <h2 style=\"margin:0; padding:0;\">N\u00B0: {{data.consecutive}}</h2>\r\n\r\n </div>\r\n\r\n <!-- Cuerpo -->\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:13%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Fecha:</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.date}}</h2>\r\n </div>\r\n <div style=\"width:13%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">C\u00F3digo:</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.code}}</h2>\r\n </div>\r\n <div style=\"width:12%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">\u00C1rea:</h2>\r\n </div>\r\n <div style=\"width:32%\">\r\n <h2 style=\"text-align: center; margin-top:20px; padding:0;\">{{data.area}}</h2>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:13%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Operario:</h2>\r\n </div>\r\n <div style=\"width:47%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.responsible}}</h2>\r\n </div>\r\n <div style=\"width:18%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Od\u00F3metro:</h2>\r\n </div>\r\n <div style=\"width:22%\">\r\n <h2 style=\"text-align: center; margin-top:15px; padding:0\">{{data.odometer}}</h2>\r\n </div>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:10m; background: #F0F4FF;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Datos del proveedor</h3>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row ; align-items: center\">\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Nombre:</h2>\r\n </div>\r\n <div style=\"width:35%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">{{data.nameProvider}}</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Direcci\u00F3n:</h2>\r\n </div>\r\n <div style=\"width:35%\">\r\n <h2 style=\"text-align: center; margin-top:20px; padding:0;\">{{data.addressProvider}}</h2>\r\n </div>\r\n\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:8mm; background: #F0F4FF;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Detalles del servicio</h3>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:20mm;\">\r\n <h3 style=\"margin-top:11px; padding:0;\">{{data.description}}</h3>\r\n </div>\r\n\r\n <div class=\"borde\" style=\"width:100%; height:10mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:35%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin:1px; padding:0;\">AUTORIZADA POR:</h2>\r\n </div>\r\n <div style=\"width:65%\">\r\n <h2 style=\"text-align: center; margin:5px; padding:0;\">{{data.approved_by}}</h2>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- piso -->\r\n <div class=\"borde\"\r\n style=\"width:100%; height:15mm; display: flex; flex-direction: column; justify-content: center;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Favor adjuntar la orden a la factura o cuenta de cobro\r\n </h3>\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">{{data.mail}}</h3>\r\n\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n<div style=\"display: flex; justify-content: center; margin-top: 15px;\">\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}h2{font-size:1rem}.borde{border:1px solid blue}\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"] }] });
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GeneratePdfComponent, decorators: [{
|
|
74
|
-
type: Component,
|
|
75
|
-
args: [{ selector: 'app-generate-pdf', template: "<div id=\"templateOT\" #templateOT>\r\n <div class=\"template-ot\" style=\"display: flex; flex-direction: column; width:100%; margin:0; background-color: white;\">\r\n\r\n <!-- Encabezado -->\r\n <div class=\"borde\" style=\"width:100%; height:30mm; display:flex; flex-direction: row; align-items: center; \">\r\n <div style=\"width:70%; display:flex; flex-direction:column; align-items: center;\">\r\n <h2 style=\"margin:0; padding:0; text-align: center; text-transform: uppercase;\">{{data.name}}</h2>\r\n <h2 style=\"margin:0; padding:0; text-align: center; \">NIT: {{data.nit}}</h2>\r\n <div style=\"width:70%; display:flex; flex-direction:row; justify-content: space-around;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center; \">{{data.address}}</h3>\r\n <h3 style=\"margin:0; padding:0; text-align: center; \">TEL: {{data.telephone}}</h3>\r\n </div>\r\n </div>\r\n <div style=\"width:30%;\">\r\n <div class=\"img\"\r\n style=\"width:90%; height:100px; margin: 10px; padding: 15px; background-image: url({{data.image}});\">\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"borde\"\r\n style=\"width:100%; height:10mm; display:flex; flex-direction: row; justify-content: space-around; align-items: center; background: #F0F4FF;\">\r\n <h2 style=\"margin:0; padding:0;\">ORDEN DE TRABAJO</h2>\r\n <h2 style=\"margin:0; padding:0;\">N\u00B0: {{data.consecutive}}</h2>\r\n\r\n </div>\r\n\r\n <!-- Cuerpo -->\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:13%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Fecha:</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.date}}</h2>\r\n </div>\r\n <div style=\"width:13%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">C\u00F3digo:</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.code}}</h2>\r\n </div>\r\n <div style=\"width:12%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">\u00C1rea:</h2>\r\n </div>\r\n <div style=\"width:32%\">\r\n <h2 style=\"text-align: center; margin-top:20px; padding:0;\">{{data.area}}</h2>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:13%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Operario:</h2>\r\n </div>\r\n <div style=\"width:47%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.responsible}}</h2>\r\n </div>\r\n <div style=\"width:18%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Od\u00F3metro:</h2>\r\n </div>\r\n <div style=\"width:22%\">\r\n <h2 style=\"text-align: center; margin-top:15px; padding:0\">{{data.odometer}}</h2>\r\n </div>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:10m; background: #F0F4FF;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Datos del proveedor</h3>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row ; align-items: center\">\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Nombre:</h2>\r\n </div>\r\n <div style=\"width:35%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">{{data.nameProvider}}</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Direcci\u00F3n:</h2>\r\n </div>\r\n <div style=\"width:35%\">\r\n <h2 style=\"text-align: center; margin-top:20px; padding:0;\">{{data.addressProvider}}</h2>\r\n </div>\r\n\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:8mm; background: #F0F4FF;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Detalles del servicio</h3>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:20mm;\">\r\n <h3 style=\"margin-top:11px; padding:0;\">{{data.description}}</h3>\r\n </div>\r\n\r\n <div class=\"borde\" style=\"width:100%; height:10mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:35%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin:1px; padding:0;\">AUTORIZADA POR:</h2>\r\n </div>\r\n <div style=\"width:65%\">\r\n <h2 style=\"text-align: center; margin:5px; padding:0;\">{{data.approved_by}}</h2>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- piso -->\r\n <div class=\"borde\"\r\n style=\"width:100%; height:15mm; display: flex; flex-direction: column; justify-content: center;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Favor adjuntar la orden a la factura o cuenta de cobro\r\n </h3>\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">{{data.mail}}</h3>\r\n\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n<div style=\"display: flex; justify-content: center; margin-top: 15px;\">\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}h2{font-size:1rem}.borde{border:1px solid blue}\n"] }]
|
|
76
|
-
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
77
|
-
type: Inject,
|
|
78
|
-
args: [MAT_DIALOG_DATA]
|
|
79
|
-
}] }, { type: i1.MatDialog }, { type: i2.MessageService }]; } });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtcGRmLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9icmFpbmxvcGVyLXVpL2NvbXBvbmVudHMvcmVwb3J0L2dlbmVyYXRlLXBkZi9nZW5lcmF0ZS1wZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9yZXBvcnQvZ2VuZXJhdGUtcGRmL2dlbmVyYXRlLXBkZi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBMkIsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBT3BGLE1BQU0sT0FBTyxvQkFBb0I7SUFzQi9CLFlBQ1MsU0FBNkMsRUFDcEIsU0FBUyxFQUNqQyxNQUFnQixFQUNqQixPQUF1QjtRQUh2QixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFBO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUF4QmhDLFNBQUksR0FBRztZQUNMLElBQUksRUFBRSxFQUFFO1lBQ1IsR0FBRyxFQUFFLEVBQUU7WUFDUCxPQUFPLEVBQUUsRUFBRTtZQUNYLFNBQVMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLEVBQUU7WUFDUixXQUFXLEVBQUUsRUFBRTtZQUNmLEtBQUssRUFBRSxFQUFFO1lBQ1QsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsRUFBRTtZQUNoQixlQUFlLEVBQUUsRUFBRTtZQUNuQixJQUFJLEVBQUUsRUFBRTtTQUNULENBQUE7SUFPRyxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUE7SUFDakMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtTQUNuQjtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUNyRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUc7WUFDZCxVQUFVLEVBQUUsT0FBTztZQUNuQixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7UUFDRixXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQzthQUN2QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNoQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTNDLHVCQUF1QjtZQUN2QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbkIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE1BQU0sUUFBUSxHQUFJLEdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQy9ELE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2hFLEdBQUcsQ0FBQyxRQUFRLENBQ1YsR0FBRyxFQUNILEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sQ0FDUCxDQUFDO1lBQ0YsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNuQiw0REFBNEQ7WUFDM0QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2lIQTNFVSxvQkFBb0IsOENBd0JyQixlQUFlO3FHQXhCZCxvQkFBb0Isd0RDWGpDLDIvTUFtSE07MkZEeEdPLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7OzBCQTRCekIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCBodG1sMmNhbnZhcyBmcm9tICdodG1sMmNhbnZhcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZ2VuZXJhdGUtcGRmJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJhdGUtcGRmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmF0ZS1wZGYuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJhdGVQZGZDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBkYXRhID0ge1xyXG4gICAgbmFtZTogJycsXHJcbiAgICBuaXQ6ICcnLFxyXG4gICAgYWRkcmVzczogJycsXHJcbiAgICB0ZWxlcGhvbmU6ICcnLFxyXG4gICAgbWFpbDogJycsXHJcbiAgICBpbWFnZTogJycsXHJcbiAgICBjb2RlOiAnJyxcclxuICAgIGRhdGU6ICcnLFxyXG4gICAgcmVzcG9uc2libGU6ICcnLFxyXG4gICAgdGhpcmQ6ICcnLFxyXG4gICAgb2RvbWV0ZXI6ICcnLFxyXG4gICAgYXBwcm92ZWRfYnk6ICcnLFxyXG4gICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgY29uc2VjdXRpdmU6ICcnLFxyXG4gICAgbmFtZVByb3ZpZGVyOiAnJyxcclxuICAgIGFkZHJlc3NQcm92aWRlcjogJycsXHJcbiAgICBhcmVhOiAnJyxcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEdlbmVyYXRlUGRmQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YU1vZGFsLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6TWF0RGlhbG9nLFxyXG4gICAgcHVibGljIG1lc3NhZ2U6IE1lc3NhZ2VTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGFNb2RhbC5kYXRhXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKXtcclxuICAgIGlmKHRoaXMuZGF0YU1vZGFsLmF1dG9HZW5lcmF0ZSl7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRQREYoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkUERGKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZXNzYWdlLm9wZW5Mb2FkaW5nKFwiQ2FyZ2FuZG9cIiwgXCJHZW5lcmFuZG8gUERGXCIpXHJcbiAgICBjb25zdCBEQVRBID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBsYXRlT1QnKTtcclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcsICdhNCcpO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgYmFja2dyb3VuZDogJ3doaXRlJyxcclxuICAgICAgc2NhbGU6IDNcclxuICAgIH07XHJcbiAgICBodG1sMmNhbnZhcyhEQVRBLCBvcHRpb25zKVxyXG4gICAgICAudGhlbigoY2FudmFzKSA9PiB7XHJcbiAgICAgICBjb25zdCBpbWcgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9QTkcnKTtcclxuXHJcbiAgICAgIC8vYWRkIGltZyBjYW52YXMgdG8gcGRmXHJcbiAgICAgIGNvbnN0IGJ1ZmZlclggPSAxNTtcclxuICAgICAgY29uc3QgYnVmZmVyWSA9IDE1O1xyXG4gICAgICBjb25zdCBpbWdQcm9wcyA9IChkb2MgYXMgYW55KS5nZXRJbWFnZVByb3BlcnRpZXMoaW1nKTtcclxuICAgICAgY29uc3QgcGRmV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuZ2V0V2lkdGgoKSAtMiAqIGJ1ZmZlclg7XHJcbiAgICAgIGNvbnN0IHBkZkhlaWdodCA9IChpbWdQcm9wcy5oZWlnaHQgKiBwZGZXaWR0aCkgLyBpbWdQcm9wcy53aWR0aDtcclxuICAgICAgZG9jLmFkZEltYWdlKFxyXG4gICAgICAgIGltZyxcclxuICAgICAgICAnUE5HJyxcclxuICAgICAgICBidWZmZXJYLFxyXG4gICAgICAgIGJ1ZmZlclksXHJcbiAgICAgICAgcGRmV2lkdGgsXHJcbiAgICAgICAgcGRmSGVpZ2h0LFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAnRkFTVCdcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGRvYztcclxuICAgIH0pXHJcbiAgICAudGhlbigoZG9jUmVzdWx0KSA9PiB7XHJcbiAgICAgLy9kb2NSZXN1bHQuc2F2ZShgJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9X3JlcG9ydGUucGRmYCk7XHJcbiAgICAgIGRvY1Jlc3VsdC5vdXRwdXQoJ2RhdGF1cmxuZXd3aW5kb3cnLCB7ZmlsZW5hbWU6ICdyZXBvcnRlLnBkZid9KTtcclxuICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKVxyXG4gICAgICB0aGlzLm1lc3NhZ2UuY2xvc2VMb2FkaW5nKClcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwidGVtcGxhdGVPVFwiICN0ZW1wbGF0ZU9UPlxyXG4gICAgPGRpdiBjbGFzcz1cInRlbXBsYXRlLW90XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB3aWR0aDoxMDAlOyBtYXJnaW46MDsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCI+XHJcblxyXG4gICAgICAgIDwhLS0gRW5jYWJlemFkbyAgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlXCIgc3R5bGU9XCJ3aWR0aDoxMDAlOyBoZWlnaHQ6MzBtbTsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyBhbGlnbi1pdGVtczogY2VudGVyOyBcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjcwJTsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJtYXJnaW46MDsgcGFkZGluZzowOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XCI+e3tkYXRhLm5hbWV9fTwvaDI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJtYXJnaW46MDsgcGFkZGluZzowOyB0ZXh0LWFsaWduOiBjZW50ZXI7IFwiPk5JVDoge3tkYXRhLm5pdH19PC9oMj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDo3MCU7IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9XCJtYXJnaW46MDsgcGFkZGluZzowOyB0ZXh0LWFsaWduOiBjZW50ZXI7IFwiPnt7ZGF0YS5hZGRyZXNzfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT1cIm1hcmdpbjowOyBwYWRkaW5nOjA7IHRleHQtYWxpZ246IGNlbnRlcjsgXCI+VEVMOiB7e2RhdGEudGVsZXBob25lfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MzAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo5MCU7IGhlaWdodDoxMDBweDsgbWFyZ2luOiAxMHB4OyAgIHBhZGRpbmc6IDE1cHg7ICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoe3tkYXRhLmltYWdlfX0pO1wiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlOyBoZWlnaHQ6MTBtbTsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgYmFja2dyb3VuZDogI0YwRjRGRjtcIj5cclxuICAgICAgICAgICAgPGgyIHN0eWxlPVwibWFyZ2luOjA7IHBhZGRpbmc6MDtcIj5PUkRFTiBERSBUUkFCQUpPPC9oMj5cclxuICAgICAgICAgICAgPGgyIHN0eWxlPVwibWFyZ2luOjA7IHBhZGRpbmc6MDtcIj5OwrA6IHt7ZGF0YS5jb25zZWN1dGl2ZX19PC9oMj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQ3VlcnBvIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjExbW07IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93OyBhbGlnbi1pdGVtczogY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxMyU7IGJvcmRlci1yaWdodDoxcHggc29saWQgYmx1ZTsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOjVweDsgcGFkZGluZzowO1wiPkZlY2hhOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MTUlOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICBibHVlOyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6NXB4OyBwYWRkaW5nOjA7XCI+e3tkYXRhLmRhdGV9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MTMlOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICBibHVlOyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6NXB4OyBwYWRkaW5nOjA7XCI+Q8OzZGlnbzo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjE1JTsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAgYmx1ZTsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOjVweDsgcGFkZGluZzowO1wiPnt7ZGF0YS5jb2RlfX08L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjEyJTsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAgYmx1ZTsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOjVweDsgcGFkZGluZzowO1wiPsOBcmVhOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MzIlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6MjBweDsgcGFkZGluZzowO1wiPnt7ZGF0YS5hcmVhfX08L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjExbW07IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93OyBhbGlnbi1pdGVtczogY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxMyU7IGJvcmRlci1yaWdodDoxcHggc29saWQgIGJsdWU7IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDo1cHg7IHBhZGRpbmc6MDtcIj5PcGVyYXJpbzo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjQ3JTsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAgYmx1ZTsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOjVweDsgcGFkZGluZzowO1wiPnt7ZGF0YS5yZXNwb25zaWJsZX19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxOCU7IGJvcmRlci1yaWdodDoxcHggc29saWQgIGJsdWU7IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDozcHg7IHBhZGRpbmc6MDtcIj5PZMOzbWV0cm86PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoyMiVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDoxNXB4OyBwYWRkaW5nOjBcIj57e2RhdGEub2RvbWV0ZXJ9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjEwbTsgYmFja2dyb3VuZDogI0YwRjRGRjtcIj5cclxuICAgICAgICAgICAgPGgzIHN0eWxlPVwibWFyZ2luOjA7IHBhZGRpbmc6MDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPkRhdG9zIGRlbCBwcm92ZWVkb3I8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjExbW07IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93IDsgYWxpZ24taXRlbXM6IGNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MTUlOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkIGJsdWU7IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDozcHg7IHBhZGRpbmc6MDtcIj5Ob21icmU6PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDozNSU7IGJvcmRlci1yaWdodDoxcHggc29saWQgIGJsdWU7IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDozcHg7IHBhZGRpbmc6MDtcIj57e2RhdGEubmFtZVByb3ZpZGVyfX08L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjE1JTsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAgYmx1ZTsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOjNweDsgcGFkZGluZzowO1wiPkRpcmVjY2nDs246PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDozNSVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDoyMHB4OyBwYWRkaW5nOjA7XCI+e3tkYXRhLmFkZHJlc3NQcm92aWRlcn19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjhtbTsgYmFja2dyb3VuZDogI0YwRjRGRjtcIj5cclxuICAgICAgICAgICAgPGgzIHN0eWxlPVwibWFyZ2luOjA7IHBhZGRpbmc6MDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPkRldGFsbGVzIGRlbCBzZXJ2aWNpbzwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlXCIgc3R5bGU9XCJ3aWR0aDoxMDAlOyBoZWlnaHQ6MjBtbTtcIj5cclxuICAgICAgICAgICAgPGgzIHN0eWxlPVwibWFyZ2luLXRvcDoxMXB4OyBwYWRkaW5nOjA7XCI+e3tkYXRhLmRlc2NyaXB0aW9ufX08L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7IGhlaWdodDoxMG1tOyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOnJvdzsgYWxpZ24taXRlbXM6IGNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MzUlOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkIGJsdWU7ICBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjoxcHg7IHBhZGRpbmc6MDtcIj5BVVRPUklaQURBIFBPUjo8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjY1JVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW46NXB4OyBwYWRkaW5nOjA7XCI+e3tkYXRhLmFwcHJvdmVkX2J5fX08L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gcGlzbyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7IGhlaWdodDoxNW1tOyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGgzIHN0eWxlPVwibWFyZ2luOjA7IHBhZGRpbmc6MDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPkZhdm9yIGFkanVudGFyIGxhIG9yZGVuIGEgbGEgZmFjdHVyYSBvIGN1ZW50YSBkZSBjb2Jyb1xyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgc3R5bGU9XCJtYXJnaW46MDsgcGFkZGluZzowOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+e3tkYXRhLm1haWx9fTwvaDM+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG48ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IG1hcmdpbi10b3A6IDE1cHg7XCI+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJkb3dubG9hZFBERigpXCIgY29sb3I9J3ByaW1hcnknIG1hdC1yYWlzZWQtYnV0dG9uPkdlbmVyYXIgUERGPC9idXR0b24+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -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 TemplateFuelComponent {
|
|
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
|
-
id_place: '',
|
|
26
|
-
approved_by: '',
|
|
27
|
-
detalle: '',
|
|
28
|
-
description: '',
|
|
29
|
-
consecutive: '',
|
|
30
|
-
namePlace: '',
|
|
31
|
-
addressPlace: '',
|
|
32
|
-
area: '',
|
|
33
|
-
odometer: '',
|
|
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('templateFO');
|
|
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: 'fuekreporte.pdf' });
|
|
67
|
-
this.dialog.closeAll();
|
|
68
|
-
this.message.closeLoading();
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
TemplateFuelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TemplateFuelComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i1.MatDialog }, { token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
73
|
-
TemplateFuelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TemplateFuelComponent, selector: "app-template-fuel", ngImport: i0, template: "<div id=\"templateFO\" #templateFO>\r\n <div class=\"template-ot\" style=\"display: flex; flex-direction: column; width:100%; margin:0; background-color: white;\">\r\n\r\n <!-- Encabezado -->\r\n <div class=\"borde\" style=\"width:100%; height:30mm; display:flex; flex-direction: row; align-items: center; \">\r\n <div style=\"width:70%; display:flex; flex-direction:column; align-items: center;\">\r\n <h2 style=\"margin:0; padding:0; text-align: center; text-transform: uppercase;\">{{data.name}}</h2>\r\n <h2 style=\"margin:0; padding:0; text-align: center; \">NIT: {{data.nit}}</h2>\r\n <div style=\"width:70%; display:flex; flex-direction:row; justify-content: space-around;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center; \">{{data.address}}</h3>\r\n <h3 style=\"margin:0; padding:0; text-align: center; \">TEL: {{data.telephone}}</h3>\r\n </div>\r\n </div>\r\n <div style=\"width:30%;\">\r\n <div class=\"img\"\r\n style=\"width:90%; height:100px; margin: 10px; padding: 15px; background-image: url({{data.image}});\">\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"borde\"\r\n style=\"width:100%; height:10mm; display:flex; flex-direction: row; justify-content: space-around; align-items: center; background: #F0F4FF;\">\r\n <h2 style=\"margin:0; padding:0;\">ORDEN DE COMBUSTIBLE</h2>\r\n <h2 style=\"margin:0; padding:0;\">N\u00B0: {{data.consecutive}}</h2>\r\n\r\n </div>\r\n\r\n <!-- Cuerpo -->\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Fecha:</h2>\r\n </div>\r\n <div style=\"width:20%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.date}}</h2>\r\n </div>\r\n <div style=\"width:18%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Od\u00F3metro:</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.odometer}}</h2>\r\n </div>\r\n <div style=\"width:20%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">\u00C1rea:</h2>\r\n </div>\r\n <div style=\"width:40%\">\r\n <h2 style=\"text-align: center; margin-top:20px; padding:0;\">{{data.area}}</h2>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">C\u00F3digo:</h2>\r\n </div>\r\n <div style=\"width:20%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.code}}</h2>\r\n </div>\r\n <div style=\"width:20%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Operario:</h2>\r\n </div>\r\n <div style=\"width:45%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.responsible}}</h2>\r\n </div>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:10m; background: #F0F4FF;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Datos del proveedor</h3>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row ; align-items: center\">\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Lugar:</h2>\r\n </div>\r\n <div style=\"width:35%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">{{data.namePlace}}</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Direcci\u00F3n:</h2>\r\n </div>\r\n <div style=\"width:35%\">\r\n <h2 style=\"text-align: center; margin-top:20px; padding:0;\">{{data.addressPlace}}</h2>\r\n </div>\r\n\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:8mm; background: #F0F4FF;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Detalles del servicio</h3>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:20mm;\">\r\n <h3 style=\"margin: 6px 0 0 25px; padding:0;\">{{data.detalle}}</h3>\r\n <h3 style=\"margin: 0 0 0 25px; padding:0;\">Descripci\u00F3n: {{data.description}}</h3>\r\n </div>\r\n\r\n <div class=\"borde\" style=\"width:100%; height:10mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:35%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin:1px; padding:0;\">AUTORIZADA POR:</h2>\r\n </div>\r\n <div style=\"width:65%\">\r\n <h2 style=\"text-align: center; margin:5px; padding:0;\">{{data.approved_by}}</h2>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- piso -->\r\n <div class=\"borde\"\r\n style=\"width:100%; height:15mm; display: flex; flex-direction: column; justify-content: center;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Favor adjuntar la orden de venta o factura\r\n </h3>\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">{{data.mail}}</h3>\r\n\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n<div style=\"display: flex; justify-content: center; margin-top: 15px;\">\r\n <button (click)=\"downloadPDF()\" color='primary' mat-raised-button>Generar PDF</button>\r\n</div>\r\n", styles: [".img{background-size:100%;background-repeat:no-repeat;background-position:center;background-size:contain}h2{font-size:1rem}.borde{border:1px solid blue}\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: TemplateFuelComponent, decorators: [{
|
|
75
|
-
type: Component,
|
|
76
|
-
args: [{ selector: 'app-template-fuel', template: "<div id=\"templateFO\" #templateFO>\r\n <div class=\"template-ot\" style=\"display: flex; flex-direction: column; width:100%; margin:0; background-color: white;\">\r\n\r\n <!-- Encabezado -->\r\n <div class=\"borde\" style=\"width:100%; height:30mm; display:flex; flex-direction: row; align-items: center; \">\r\n <div style=\"width:70%; display:flex; flex-direction:column; align-items: center;\">\r\n <h2 style=\"margin:0; padding:0; text-align: center; text-transform: uppercase;\">{{data.name}}</h2>\r\n <h2 style=\"margin:0; padding:0; text-align: center; \">NIT: {{data.nit}}</h2>\r\n <div style=\"width:70%; display:flex; flex-direction:row; justify-content: space-around;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center; \">{{data.address}}</h3>\r\n <h3 style=\"margin:0; padding:0; text-align: center; \">TEL: {{data.telephone}}</h3>\r\n </div>\r\n </div>\r\n <div style=\"width:30%;\">\r\n <div class=\"img\"\r\n style=\"width:90%; height:100px; margin: 10px; padding: 15px; background-image: url({{data.image}});\">\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"borde\"\r\n style=\"width:100%; height:10mm; display:flex; flex-direction: row; justify-content: space-around; align-items: center; background: #F0F4FF;\">\r\n <h2 style=\"margin:0; padding:0;\">ORDEN DE COMBUSTIBLE</h2>\r\n <h2 style=\"margin:0; padding:0;\">N\u00B0: {{data.consecutive}}</h2>\r\n\r\n </div>\r\n\r\n <!-- Cuerpo -->\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Fecha:</h2>\r\n </div>\r\n <div style=\"width:20%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.date}}</h2>\r\n </div>\r\n <div style=\"width:18%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Od\u00F3metro:</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.odometer}}</h2>\r\n </div>\r\n <div style=\"width:20%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">\u00C1rea:</h2>\r\n </div>\r\n <div style=\"width:40%\">\r\n <h2 style=\"text-align: center; margin-top:20px; padding:0;\">{{data.area}}</h2>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">C\u00F3digo:</h2>\r\n </div>\r\n <div style=\"width:20%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.code}}</h2>\r\n </div>\r\n <div style=\"width:20%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">Operario:</h2>\r\n </div>\r\n <div style=\"width:45%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:5px; padding:0;\">{{data.responsible}}</h2>\r\n </div>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:10m; background: #F0F4FF;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Datos del proveedor</h3>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:11mm; display:flex; flex-direction:row ; align-items: center\">\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Lugar:</h2>\r\n </div>\r\n <div style=\"width:35%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">{{data.namePlace}}</h2>\r\n </div>\r\n <div style=\"width:15%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin-top:3px; padding:0;\">Direcci\u00F3n:</h2>\r\n </div>\r\n <div style=\"width:35%\">\r\n <h2 style=\"text-align: center; margin-top:20px; padding:0;\">{{data.addressPlace}}</h2>\r\n </div>\r\n\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:8mm; background: #F0F4FF;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Detalles del servicio</h3>\r\n </div>\r\n <div class=\"borde\" style=\"width:100%; height:20mm;\">\r\n <h3 style=\"margin: 6px 0 0 25px; padding:0;\">{{data.detalle}}</h3>\r\n <h3 style=\"margin: 0 0 0 25px; padding:0;\">Descripci\u00F3n: {{data.description}}</h3>\r\n </div>\r\n\r\n <div class=\"borde\" style=\"width:100%; height:10mm; display:flex; flex-direction:row; align-items: center\">\r\n <div style=\"width:35%; border-right:1px solid blue; height: 100%;\">\r\n <h2 style=\"text-align: center; margin:1px; padding:0;\">AUTORIZADA POR:</h2>\r\n </div>\r\n <div style=\"width:65%\">\r\n <h2 style=\"text-align: center; margin:5px; padding:0;\">{{data.approved_by}}</h2>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- piso -->\r\n <div class=\"borde\"\r\n style=\"width:100%; height:15mm; display: flex; flex-direction: column; justify-content: center;\">\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">Favor adjuntar la orden de venta o factura\r\n </h3>\r\n <h3 style=\"margin:0; padding:0; text-align: center;\">{{data.mail}}</h3>\r\n\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n<div style=\"display: flex; justify-content: center; margin-top: 15px;\">\r\n <button (click)=\"downloadPDF()\" color='primary' mat-raised-button>Generar PDF</button>\r\n</div>\r\n", styles: [".img{background-size:100%;background-repeat:no-repeat;background-position:center;background-size:contain}h2{font-size:1rem}.borde{border:1px solid blue}\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZnVlbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL3JlcG9ydC90ZW1wbGF0ZS1mdWVsL3RlbXBsYXRlLWZ1ZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2JyYWlubG9wZXItdWkvY29tcG9uZW50cy9yZXBvcnQvdGVtcGxhdGUtZnVlbC90ZW1wbGF0ZS1mdWVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUEyQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7QUFPcEYsTUFBTSxPQUFPLHFCQUFxQjtJQXVCaEMsWUFDUyxTQUE4QyxFQUNyQixTQUFTLEVBQ2pDLE1BQWdCLEVBQ2pCLE9BQXVCO1FBSHZCLGNBQVMsR0FBVCxTQUFTLENBQXFDO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQUE7UUFDakMsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQXpCaEMsU0FBSSxHQUFHO1lBQ0wsSUFBSSxFQUFFLEVBQUU7WUFDUixHQUFHLEVBQUUsRUFBRTtZQUNQLE9BQU8sRUFBRSxFQUFFO1lBQ1gsU0FBUyxFQUFFLEVBQUU7WUFDYixJQUFJLEVBQUUsRUFBRTtZQUNSLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxFQUFFLEVBQUU7WUFDUixJQUFJLEVBQUUsRUFBRTtZQUNSLFdBQVcsRUFBRSxFQUFFO1lBQ2YsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsRUFBRTtZQUNmLE9BQU8sRUFBQyxFQUFFO1lBQ1YsV0FBVyxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsRUFBRTtZQUNmLFNBQVMsRUFBRSxFQUFFO1lBQ2IsWUFBWSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxFQUFFLEVBQUU7WUFDUixRQUFRLEVBQUMsRUFBRTtTQUNaLENBQUE7SUFPRyxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUE7SUFDakMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtTQUNuQjtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUNyRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUc7WUFDZCxVQUFVLEVBQUUsT0FBTztZQUNuQixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUM7UUFDRixXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQzthQUN2QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNoQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTNDLHVCQUF1QjtZQUN2QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbkIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE1BQU0sUUFBUSxHQUFJLEdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQy9ELE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2hFLEdBQUcsQ0FBQyxRQUFRLENBQ1YsR0FBRyxFQUNILEtBQUssRUFDTCxPQUFPLEVBQ1AsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULE1BQU0sQ0FDUCxDQUFDO1lBQ0YsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNuQiw0REFBNEQ7WUFDM0QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBQyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7a0hBNUVVLHFCQUFxQiw4Q0F5QnRCLGVBQWU7c0dBekJkLHFCQUFxQix5RENYbEMsdW9OQXFIQTsyRkQxR2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjs7MEJBNkIxQixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcclxuaW1wb3J0IHtNYXREaWFsb2csICBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC10ZW1wbGF0ZS1mdWVsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGVtcGxhdGUtZnVlbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGVtcGxhdGUtZnVlbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUZ1ZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBkYXRhID0ge1xyXG4gICAgbmFtZTogJycsXHJcbiAgICBuaXQ6ICcnLFxyXG4gICAgYWRkcmVzczogJycsXHJcbiAgICB0ZWxlcGhvbmU6ICcnLFxyXG4gICAgbWFpbDogJycsXHJcbiAgICBpbWFnZTogJycsXHJcbiAgICBjb2RlOiAnJyxcclxuICAgIGRhdGU6ICcnLFxyXG4gICAgcmVzcG9uc2libGU6ICcnLFxyXG4gICAgaWRfcGxhY2U6ICcnLFxyXG4gICAgYXBwcm92ZWRfYnk6ICcnLFxyXG4gICAgZGV0YWxsZTonJyxcclxuICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgIGNvbnNlY3V0aXZlOiAnJyxcclxuICAgIG5hbWVQbGFjZTogJycsXHJcbiAgICBhZGRyZXNzUGxhY2U6ICcnLFxyXG4gICAgYXJlYTogJycsXHJcbiAgICBvZG9tZXRlcjonJyxcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlRnVlbENvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGFNb2RhbCxcclxuICAgIHByaXZhdGUgZGlhbG9nOk1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBtZXNzYWdlOiBNZXNzYWdlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhTW9kYWwuZGF0YVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCl7XHJcbiAgICBpZih0aGlzLmRhdGFNb2RhbC5hdXRvR2VuZXJhdGUpe1xyXG4gICAgICB0aGlzLmRvd25sb2FkUERGKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZFBERigpOiB2b2lkIHtcclxuICAgIHRoaXMubWVzc2FnZS5vcGVuTG9hZGluZyhcIkNhcmdhbmRvXCIsIFwiR2VuZXJhbmRvIFBERlwiKVxyXG4gICAgY29uc3QgREFUQSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wbGF0ZUZPJyk7XHJcbiAgICBjb25zdCBkb2MgPSBuZXcganNQREYoJ3AnLCAncHQnLCAnYTQnKTtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXHJcbiAgICAgIHNjYWxlOiAzXHJcbiAgICB9O1xyXG4gICAgaHRtbDJjYW52YXMoREFUQSwgb3B0aW9ucylcclxuICAgICAgLnRoZW4oKGNhbnZhcykgPT4ge1xyXG4gICAgICAgY29uc3QgaW1nID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvUE5HJyk7XHJcblxyXG4gICAgICAvL2FkZCBpbWcgY2FudmFzIHRvIHBkZlxyXG4gICAgICBjb25zdCBidWZmZXJYID0gMTU7XHJcbiAgICAgIGNvbnN0IGJ1ZmZlclkgPSAxNTtcclxuICAgICAgY29uc3QgaW1nUHJvcHMgPSAoZG9jIGFzIGFueSkuZ2V0SW1hZ2VQcm9wZXJ0aWVzKGltZyk7XHJcbiAgICAgIGNvbnN0IHBkZldpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCkgLTIgKiBidWZmZXJYO1xyXG4gICAgICBjb25zdCBwZGZIZWlnaHQgPSAoaW1nUHJvcHMuaGVpZ2h0ICogcGRmV2lkdGgpIC8gaW1nUHJvcHMud2lkdGg7XHJcbiAgICAgIGRvYy5hZGRJbWFnZShcclxuICAgICAgICBpbWcsXHJcbiAgICAgICAgJ1BORycsXHJcbiAgICAgICAgYnVmZmVyWCxcclxuICAgICAgICBidWZmZXJZLFxyXG4gICAgICAgIHBkZldpZHRoLFxyXG4gICAgICAgIHBkZkhlaWdodCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgJ0ZBU1QnXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBkb2M7XHJcbiAgICB9KVxyXG4gICAgLnRoZW4oKGRvY1Jlc3VsdCkgPT4ge1xyXG4gICAgIC8vZG9jUmVzdWx0LnNhdmUoYCR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfV9yZXBvcnRlLnBkZmApO1xyXG4gICAgICBkb2NSZXN1bHQub3V0cHV0KCdkYXRhdXJsbmV3d2luZG93Jywge2ZpbGVuYW1lOiAnZnVla3JlcG9ydGUucGRmJ30pO1xyXG4gICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpXHJcbiAgICAgIHRoaXMubWVzc2FnZS5jbG9zZUxvYWRpbmcoKVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJ0ZW1wbGF0ZUZPXCIgI3RlbXBsYXRlRk8+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGUtb3RcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IHdpZHRoOjEwMCU7IG1hcmdpbjowOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIj5cclxuXHJcbiAgICAgICAgPCEtLSBFbmNhYmV6YWRvICAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7IGhlaWdodDozMG1tOyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IFwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6NzAlOyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cIm1hcmdpbjowOyBwYWRkaW5nOjA7IHRleHQtYWxpZ246IGNlbnRlcjsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcIj57e2RhdGEubmFtZX19PC9oMj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cIm1hcmdpbjowOyBwYWRkaW5nOjA7IHRleHQtYWxpZ246IGNlbnRlcjsgXCI+TklUOiB7e2RhdGEubml0fX08L2gyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjcwJTsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpyb3c7IGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT1cIm1hcmdpbjowOyBwYWRkaW5nOjA7IHRleHQtYWxpZ246IGNlbnRlcjsgXCI+e3tkYXRhLmFkZHJlc3N9fTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPVwibWFyZ2luOjA7IHBhZGRpbmc6MDsgdGV4dC1hbGlnbjogY2VudGVyOyBcIj5URUw6IHt7ZGF0YS50ZWxlcGhvbmV9fTwvaDM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDozMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjkwJTsgaGVpZ2h0OjEwMHB4OyBtYXJnaW46IDEwcHg7ICAgcGFkZGluZzogMTVweDsgIGJhY2tncm91bmQtaW1hZ2U6IHVybCh7e2RhdGEuaW1hZ2V9fSk7XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCU7IGhlaWdodDoxMG1tOyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyBhbGlnbi1pdGVtczogY2VudGVyOyBiYWNrZ3JvdW5kOiAjRjBGNEZGO1wiPlxyXG4gICAgICAgICAgICA8aDIgc3R5bGU9XCJtYXJnaW46MDsgcGFkZGluZzowO1wiPk9SREVOIERFIENPTUJVU1RJQkxFPC9oMj5cclxuICAgICAgICAgICAgPGgyIHN0eWxlPVwibWFyZ2luOjA7IHBhZGRpbmc6MDtcIj5OwrA6IHt7ZGF0YS5jb25zZWN1dGl2ZX19PC9oMj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQ3VlcnBvIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjExbW07IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93OyBhbGlnbi1pdGVtczogY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxNSU7IGJvcmRlci1yaWdodDoxcHggc29saWQgYmx1ZTsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOjVweDsgcGFkZGluZzowO1wiPkZlY2hhOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MjAlOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICBibHVlOyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6NXB4OyBwYWRkaW5nOjA7XCI+e3tkYXRhLmRhdGV9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MTglOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICBibHVlOyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6NXB4OyBwYWRkaW5nOjA7XCI+T2TDs21ldHJvOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MTUlOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICBibHVlOyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6NXB4OyBwYWRkaW5nOjA7XCI+e3tkYXRhLm9kb21ldGVyfX08L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjIwJTsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAgYmx1ZTsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOjVweDsgcGFkZGluZzowO1wiPsOBcmVhOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6NDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6MjBweDsgcGFkZGluZzowO1wiPnt7ZGF0YS5hcmVhfX08L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjExbW07IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93OyBhbGlnbi1pdGVtczogY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxNSU7IGJvcmRlci1yaWdodDoxcHggc29saWQgIGJsdWU7IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDo1cHg7IHBhZGRpbmc6MDtcIj5Dw7NkaWdvOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MjAlOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICBibHVlOyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6NXB4OyBwYWRkaW5nOjA7XCI+e3tkYXRhLmNvZGV9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MjAlOyBib3JkZXItcmlnaHQ6MXB4IHNvbGlkICBibHVlOyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6NXB4OyBwYWRkaW5nOjA7XCI+T3BlcmFyaW86PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDo0NSU7IGJvcmRlci1yaWdodDoxcHggc29saWQgIGJsdWU7IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDo1cHg7IHBhZGRpbmc6MDtcIj57e2RhdGEucmVzcG9uc2libGV9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7IGhlaWdodDoxMG07IGJhY2tncm91bmQ6ICNGMEY0RkY7XCI+XHJcbiAgICAgICAgICAgIDxoMyBzdHlsZT1cIm1hcmdpbjowOyBwYWRkaW5nOjA7IHRleHQtYWxpZ246IGNlbnRlcjtcIj5EYXRvcyBkZWwgcHJvdmVlZG9yPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVcIiBzdHlsZT1cIndpZHRoOjEwMCU7IGhlaWdodDoxMW1tOyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOnJvdyA7IGFsaWduLWl0ZW1zOiBjZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjE1JTsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCBibHVlOyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6M3B4OyBwYWRkaW5nOjA7XCI+THVnYXI6PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDozNSU7IGJvcmRlci1yaWdodDoxcHggc29saWQgIGJsdWU7IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDozcHg7IHBhZGRpbmc6MDtcIj57e2RhdGEubmFtZVBsYWNlfX08L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjE1JTsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAgYmx1ZTsgaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tdG9wOjNweDsgcGFkZGluZzowO1wiPkRpcmVjY2nDs246PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDozNSVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDoyMHB4OyBwYWRkaW5nOjA7XCI+e3tkYXRhLmFkZHJlc3NQbGFjZX19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjhtbTsgYmFja2dyb3VuZDogI0YwRjRGRjtcIj5cclxuICAgICAgICAgICAgPGgzIHN0eWxlPVwibWFyZ2luOjA7IHBhZGRpbmc6MDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPkRldGFsbGVzIGRlbCBzZXJ2aWNpbzwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlXCIgc3R5bGU9XCJ3aWR0aDoxMDAlOyBoZWlnaHQ6MjBtbTtcIj5cclxuICAgICAgICAgICAgPGgzIHN0eWxlPVwibWFyZ2luOiA2cHggMCAwIDI1cHg7IHBhZGRpbmc6MDtcIj57e2RhdGEuZGV0YWxsZX19PC9oMz5cclxuICAgICAgICAgICAgPGgzIHN0eWxlPVwibWFyZ2luOiAwIDAgMCAyNXB4OyBwYWRkaW5nOjA7XCI+RGVzY3JpcGNpw7NuOiB7e2RhdGEuZGVzY3JpcHRpb259fTwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjEwbW07IGRpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246cm93OyBhbGlnbi1pdGVtczogY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDozNSU7IGJvcmRlci1yaWdodDoxcHggc29saWQgYmx1ZTsgIGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luOjFweDsgcGFkZGluZzowO1wiPkFVVE9SSVpBREEgUE9SOjwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6NjUlXCI+XHJcbiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjo1cHg7IHBhZGRpbmc6MDtcIj57e2RhdGEuYXBwcm92ZWRfYnl9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBwaXNvIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6MTAwJTsgaGVpZ2h0OjE1bW07IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGp1c3RpZnktY29udGVudDogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8aDMgc3R5bGU9XCJtYXJnaW46MDsgcGFkZGluZzowOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+RmF2b3IgYWRqdW50YXIgbGEgb3JkZW4gZGUgdmVudGEgbyBmYWN0dXJhXHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBzdHlsZT1cIm1hcmdpbjowOyBwYWRkaW5nOjA7IHRleHQtYWxpZ246IGNlbnRlcjtcIj57e2RhdGEubWFpbH19PC9oMz5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWFyZ2luLXRvcDogMTVweDtcIj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkUERGKClcIiBjb2xvcj0ncHJpbWFyeScgbWF0LXJhaXNlZC1idXR0b24+R2VuZXJhciBQREY8L2J1dHRvbj5cclxuPC9kaXY+XHJcbiJdfQ==
|