iptdevs-design-system 2.7.43 → 2.7.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +24 -24
  2. package/esm2020/iptdevs-design-system.mjs +4 -4
  3. package/esm2020/lib/cod/cod-documents-section/cod-documents-section.component.mjs +16 -16
  4. package/esm2020/lib/cod/cod-form/cod-form.component.mjs +227 -227
  5. package/esm2020/lib/cod/cod.module.mjs +90 -90
  6. package/esm2020/lib/cod/logic/calculate-quotes.service.mjs +72 -72
  7. package/esm2020/lib/cod/logic/cod-form-controls.mjs +91 -91
  8. package/esm2020/lib/cod/logic/cod-form-steps.mjs +29 -29
  9. package/esm2020/lib/cod/logic/communicator.service.mjs +28 -28
  10. package/esm2020/lib/cod/logic/local-storage-cod.service.mjs +39 -39
  11. package/esm2020/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.mjs +146 -146
  12. package/esm2020/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.mjs +251 -251
  13. package/esm2020/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.mjs +200 -200
  14. package/esm2020/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.mjs +175 -175
  15. package/esm2020/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.mjs +255 -255
  16. package/esm2020/lib/components/atoms/aside-button/aside-button.component.mjs +50 -50
  17. package/esm2020/lib/components/atoms/button/button.component.mjs +64 -64
  18. package/esm2020/lib/components/atoms/checkbox/checkbox.component.mjs +47 -47
  19. package/esm2020/lib/components/atoms/datalist/datalist.component.mjs +94 -94
  20. package/esm2020/lib/components/atoms/input/input.component.mjs +145 -145
  21. package/esm2020/lib/components/atoms/level-button/level-button.component.mjs +64 -64
  22. package/esm2020/lib/components/atoms/level-text/level-text.component.mjs +19 -19
  23. package/esm2020/lib/components/atoms/loader/loader.component.mjs +48 -48
  24. package/esm2020/lib/components/atoms/radio/radio.component.mjs +47 -47
  25. package/esm2020/lib/components/atoms/select/select.component.mjs +102 -102
  26. package/esm2020/lib/components/atoms/text-link/text-link.component.mjs +39 -39
  27. package/esm2020/lib/components/components.module.mjs +123 -123
  28. package/esm2020/lib/components/forms/create-user-form/create-user-form.component.mjs +228 -228
  29. package/esm2020/lib/components/forms/login-form/login-form.component.mjs +93 -93
  30. package/esm2020/lib/components/material.module.mjs +19 -19
  31. package/esm2020/lib/components/molecules/question-type/edit-question-types.component.mjs +346 -346
  32. package/esm2020/lib/components/molecules/sidenav/sidenav.component.mjs +150 -150
  33. package/esm2020/lib/core/core.module.mjs +73 -73
  34. package/esm2020/lib/core/models/academic/academic.component.mjs +2 -2
  35. package/esm2020/lib/core/models/activities/activities.interface.mjs +2 -2
  36. package/esm2020/lib/core/models/attendance/attendance.interface.mjs +2 -2
  37. package/esm2020/lib/core/models/budget/budget.model.mjs +2 -2
  38. package/esm2020/lib/core/models/calendar/calendar-rq.models.mjs +2 -2
  39. package/esm2020/lib/core/models/classroom/classroom-rq.model.mjs +2 -2
  40. package/esm2020/lib/core/models/cod/cod-rq.model.mjs +2 -2
  41. package/esm2020/lib/core/models/commercial/commercial.model.mjs +2 -2
  42. package/esm2020/lib/core/models/course/course-rq.model.mjs +2 -2
  43. package/esm2020/lib/core/models/course/courses.model.mjs +2 -2
  44. package/esm2020/lib/core/models/cronogram/cronogram.models.mjs +2 -2
  45. package/esm2020/lib/core/models/marketing/marketing.model.mjs +2 -2
  46. package/esm2020/lib/core/models/notes/notes.interface.mjs +2 -2
  47. package/esm2020/lib/core/models/payment/payment-rq.model.mjs +2 -2
  48. package/esm2020/lib/core/models/response/response.interface.mjs +2 -2
  49. package/esm2020/lib/core/models/session/session.model.mjs +3 -3
  50. package/esm2020/lib/core/models/student/student.interface.mjs +2 -2
  51. package/esm2020/lib/core/models/table/table-rs.model.mjs +2 -2
  52. package/esm2020/lib/core/models/test/test.model.mjs +2 -2
  53. package/esm2020/lib/core/models/url/url.model.mjs +2 -2
  54. package/esm2020/lib/core/models/user/user-rq.model.mjs +2 -2
  55. package/esm2020/lib/core/models/user/user-rs.model.mjs +5 -5
  56. package/esm2020/lib/core/services/academic-service/academic.service.mjs +55 -55
  57. package/esm2020/lib/core/services/activity-service/activity.service.mjs +87 -87
  58. package/esm2020/lib/core/services/attendance-service/attendance.service.mjs +64 -64
  59. package/esm2020/lib/core/services/budget-service/budget-service.mjs +66 -66
  60. package/esm2020/lib/core/services/calendar-service/calendar.service.mjs +65 -65
  61. package/esm2020/lib/core/services/certificate-service/certificate.service.mjs +26 -26
  62. package/esm2020/lib/core/services/classroom-service/classroom-service.service.mjs +36 -36
  63. package/esm2020/lib/core/services/commercial-service/comercial.service.mjs +49 -49
  64. package/esm2020/lib/core/services/commercial-service/validators.mjs +4 -4
  65. package/esm2020/lib/core/services/copies.service.mjs +17 -17
  66. package/esm2020/lib/core/services/course-service/course-service.model.mjs +70 -70
  67. package/esm2020/lib/core/services/ekt-service/userekt.service.mjs +29 -29
  68. package/esm2020/lib/core/services/marketing-service/marketing-service.mjs +52 -52
  69. package/esm2020/lib/core/services/notes-service/notes.service.mjs +46 -46
  70. package/esm2020/lib/core/services/parameters-service/parameters.service.mjs +173 -173
  71. package/esm2020/lib/core/services/service-enviroments.mjs +26 -26
  72. package/esm2020/lib/core/services/storage-service/storage-service.mjs +50 -50
  73. package/esm2020/lib/core/services/student-service/student.service.mjs +26 -26
  74. package/esm2020/lib/core/services/switch-service/switch.service.mjs +16 -16
  75. package/esm2020/lib/core/services/test-service/test.service.mjs +128 -128
  76. package/esm2020/lib/core/services/user-service/user-service.mjs +100 -100
  77. package/esm2020/lib/core/utils/base-service/base.service.mjs +191 -191
  78. package/esm2020/lib/core/utils/copies.mjs +214 -214
  79. package/esm2020/lib/core/utils/route-service/route.service.mjs +18 -18
  80. package/esm2020/lib/design-system.module.mjs +40 -40
  81. package/esm2020/public-api.mjs +89 -89
  82. package/fesm2015/iptdevs-design-system.mjs +4592 -4592
  83. package/fesm2015/iptdevs-design-system.mjs.map +1 -1
  84. package/fesm2020/iptdevs-design-system.mjs +4589 -4589
  85. package/fesm2020/iptdevs-design-system.mjs.map +1 -1
  86. package/iptdevs-design-system.d.ts +5 -5
  87. package/lib/cod/cod-documents-section/cod-documents-section.component.d.ts +8 -8
  88. package/lib/cod/cod-form/cod-form.component.d.ts +37 -37
  89. package/lib/cod/cod.module.d.ts +21 -21
  90. package/lib/cod/logic/calculate-quotes.service.d.ts +14 -14
  91. package/lib/cod/logic/cod-form-controls.d.ts +16 -16
  92. package/lib/cod/logic/cod-form-steps.d.ts +15 -15
  93. package/lib/cod/logic/communicator.service.d.ts +13 -13
  94. package/lib/cod/logic/local-storage-cod.service.d.ts +8 -8
  95. package/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.d.ts +31 -31
  96. package/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.d.ts +47 -47
  97. package/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.d.ts +46 -46
  98. package/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.d.ts +35 -35
  99. package/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.d.ts +44 -44
  100. package/lib/components/atoms/aside-button/aside-button.component.d.ts +11 -11
  101. package/lib/components/atoms/button/button.component.d.ts +13 -13
  102. package/lib/components/atoms/checkbox/checkbox.component.d.ts +11 -11
  103. package/lib/components/atoms/datalist/datalist.component.d.ts +20 -20
  104. package/lib/components/atoms/input/input.component.d.ts +26 -26
  105. package/lib/components/atoms/level-button/level-button.component.d.ts +11 -11
  106. package/lib/components/atoms/level-text/level-text.component.d.ts +7 -7
  107. package/lib/components/atoms/loader/loader.component.d.ts +7 -7
  108. package/lib/components/atoms/radio/radio.component.d.ts +11 -11
  109. package/lib/components/atoms/select/select.component.d.ts +26 -26
  110. package/lib/components/atoms/text-link/text-link.component.d.ts +12 -12
  111. package/lib/components/components.module.d.ts +25 -25
  112. package/lib/components/forms/create-user-form/create-user-form.component.d.ts +36 -36
  113. package/lib/components/forms/login-form/login-form.component.d.ts +13 -13
  114. package/lib/components/material.module.d.ts +11 -11
  115. package/lib/components/molecules/question-type/edit-question-types.component.d.ts +11 -11
  116. package/lib/components/molecules/sidenav/sidenav.component.d.ts +25 -25
  117. package/lib/core/core.module.d.ts +6 -6
  118. package/lib/core/models/academic/academic.component.d.ts +26 -26
  119. package/lib/core/models/activities/activities.interface.d.ts +12 -12
  120. package/lib/core/models/attendance/attendance.interface.d.ts +62 -62
  121. package/lib/core/models/budget/budget.model.d.ts +69 -69
  122. package/lib/core/models/calendar/calendar-rq.models.d.ts +27 -27
  123. package/lib/core/models/classroom/classroom-rq.model.d.ts +23 -23
  124. package/lib/core/models/cod/cod-rq.model.d.ts +168 -168
  125. package/lib/core/models/commercial/commercial.model.d.ts +10 -10
  126. package/lib/core/models/course/course-rq.model.d.ts +86 -86
  127. package/lib/core/models/course/courses.model.d.ts +18 -18
  128. package/lib/core/models/cronogram/cronogram.models.d.ts +184 -183
  129. package/lib/core/models/marketing/marketing.model.d.ts +104 -104
  130. package/lib/core/models/notes/notes.interface.d.ts +89 -89
  131. package/lib/core/models/payment/payment-rq.model.d.ts +212 -212
  132. package/lib/core/models/response/response.interface.d.ts +10 -10
  133. package/lib/core/models/session/session.model.d.ts +5 -5
  134. package/lib/core/models/student/student.interface.d.ts +4 -4
  135. package/lib/core/models/table/table-rs.model.d.ts +7 -7
  136. package/lib/core/models/test/test.model.d.ts +219 -219
  137. package/lib/core/models/url/url.model.d.ts +8 -8
  138. package/lib/core/models/user/user-rq.model.d.ts +90 -90
  139. package/lib/core/models/user/user-rs.model.d.ts +35 -35
  140. package/lib/core/services/academic-service/academic.service.d.ts +20 -20
  141. package/lib/core/services/activity-service/activity.service.d.ts +25 -25
  142. package/lib/core/services/attendance-service/attendance.service.d.ts +22 -22
  143. package/lib/core/services/budget-service/budget-service.d.ts +23 -23
  144. package/lib/core/services/calendar-service/calendar.service.d.ts +23 -23
  145. package/lib/core/services/certificate-service/certificate.service.d.ts +13 -13
  146. package/lib/core/services/classroom-service/classroom-service.service.d.ts +15 -15
  147. package/lib/core/services/commercial-service/comercial.service.d.ts +19 -19
  148. package/lib/core/services/commercial-service/validators.d.ts +2 -2
  149. package/lib/core/services/copies.service.d.ts +7 -7
  150. package/lib/core/services/course-service/course-service.model.d.ts +23 -23
  151. package/lib/core/services/ekt-service/userekt.service.d.ts +13 -13
  152. package/lib/core/services/marketing-service/marketing-service.d.ts +19 -19
  153. package/lib/core/services/notes-service/notes.service.d.ts +18 -18
  154. package/lib/core/services/parameters-service/parameters.service.d.ts +49 -49
  155. package/lib/core/services/service-enviroments.d.ts +5 -5
  156. package/lib/core/services/storage-service/storage-service.d.ts +18 -18
  157. package/lib/core/services/student-service/student.service.d.ts +13 -13
  158. package/lib/core/services/switch-service/switch.service.d.ts +8 -8
  159. package/lib/core/services/test-service/test.service.d.ts +33 -33
  160. package/lib/core/services/user-service/user-service.d.ts +30 -30
  161. package/lib/core/utils/base-service/base.service.d.ts +23 -23
  162. package/lib/core/utils/copies.d.ts +1 -1
  163. package/lib/core/utils/route-service/route.service.d.ts +9 -9
  164. package/lib/design-system.module.d.ts +10 -10
  165. package/package.json +1 -1
  166. package/public-api.d.ts +76 -76
@@ -1,191 +1,191 @@
1
- import { Injectable } from '@angular/core';
2
- import Swal from 'sweetalert2';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../services/user-service/user-service";
5
- import * as i2 from "../../services/storage-service/storage-service";
6
- import * as i3 from "../../services/calendar-service/calendar.service";
7
- export class BaseService {
8
- constructor(userService, storageService, calendarService) {
9
- this.userService = userService;
10
- this.storageService = storageService;
11
- this.calendarService = calendarService;
12
- }
13
- webLogin(user, password) {
14
- let request = {
15
- user: user,
16
- password: password
17
- };
18
- let service = this.userService;
19
- let storage = this.storageService;
20
- let appUser = this.isAnAppUser();
21
- return new Promise(function (resolve, reject) {
22
- service.login(request).subscribe(response => {
23
- switch (response.message.code) {
24
- case 1:
25
- if (!appUser) {
26
- Swal.fire({
27
- 'title': '<p style="font-family: Poppins"">Perfect!</p>',
28
- 'html': '<p style="font-family: Poppins"">Succesfull login</p>',
29
- 'icon': 'success',
30
- });
31
- }
32
- const loginRegisterUser = {
33
- token: response.data.token,
34
- user: response.data,
35
- };
36
- storage.setCurrentSession(loginRegisterUser);
37
- resolve(true);
38
- break;
39
- case 2:
40
- Swal.fire({
41
- 'title': '<p style="font-family: Poppins"">Warning!</p>',
42
- 'html': '<p style="font-family: Poppins"">The data does not correspond to a user registered in our system, please review them.</p>',
43
- 'icon': 'warning',
44
- });
45
- resolve(false);
46
- break;
47
- case 3:
48
- Swal.fire({
49
- 'title': '<p style="font-family: Poppins"">Error!</p>',
50
- 'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
51
- 'icon': 'error',
52
- });
53
- resolve(false);
54
- break;
55
- default:
56
- Swal.fire({
57
- 'title': '<p style="font-family: Poppins"">Error!</p>',
58
- 'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
59
- 'icon': 'error',
60
- });
61
- resolve(false);
62
- break;
63
- }
64
- reject('Unhandled exception');
65
- });
66
- });
67
- }
68
- getCronogramAvailability(isTeacher, code, startDate, numClass, weekDays, startTime, endTime) {
69
- let request = {
70
- isTeacher: isTeacher,
71
- code: code,
72
- startDate: startDate,
73
- numClass: numClass,
74
- weekDays: weekDays,
75
- startTime: startTime,
76
- endTime: endTime,
77
- };
78
- let service = this.calendarService;
79
- return new Promise(function (resolve, reject) {
80
- service.postCreateQueryEvent(request).subscribe((response) => {
81
- switch (response.message.code) {
82
- case 1:
83
- resolve(response.data);
84
- break;
85
- default:
86
- reject('Unhandled exception');
87
- }
88
- reject('Unhandled exception');
89
- });
90
- });
91
- }
92
- isAnAppUser() {
93
- const userAgent = window.navigator.userAgent;
94
- return userAgent.includes('Flutter IPT APP');
95
- }
96
- getUserRole() {
97
- let user = this.storageService.getCurrentUser()?.role;
98
- return user === undefined ? -1 : user;
99
- }
100
- getUserToken() {
101
- let token = this.storageService.getCurrentUser()?.token;
102
- return token === undefined ? '-1' : token;
103
- }
104
- getUserName() {
105
- let user = this.storageService.getCurrentUser();
106
- let response = user === null ? '' : user.name;
107
- return response;
108
- }
109
- getUserCode() {
110
- let user = this.storageService.getCurrentUser();
111
- let response = user === null ? -1 : user.code;
112
- return response;
113
- }
114
- registerUserFromDashboard(registerDashboardRq) {
115
- let request = registerDashboardRq;
116
- let service = this.userService;
117
- return new Promise(function (resolve, reject) {
118
- service.registerDashboard(request).subscribe((response) => {
119
- switch (response.message.code) {
120
- case 1:
121
- Swal.fire({
122
- 'title': '<p style="font-family: Poppins"">Perfect!</p>',
123
- 'html': '<p style="font-family: Poppins"">Sucesfull register!</p>',
124
- 'icon': 'success',
125
- });
126
- resolve(true);
127
- break;
128
- case 3:
129
- Swal.fire({
130
- 'title': '<p style="font-family: Poppins"">Error!</p>',
131
- 'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
132
- 'icon': 'error',
133
- });
134
- resolve(false);
135
- break;
136
- case 4:
137
- Swal.fire({
138
- 'title': '<p style="font-family: Poppins">Ups!</p>',
139
- 'html': '<p style="font-family: Poppins">The input data has a high relation with a user that already exists!</p>',
140
- 'icon': 'warning',
141
- });
142
- resolve(false);
143
- break;
144
- default:
145
- Swal.fire({
146
- 'title': '<p style="font-family: Poppins"">Error!</p>',
147
- 'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
148
- 'icon': 'error',
149
- });
150
- resolve(false);
151
- break;
152
- }
153
- reject('Unhandled exception');
154
- });
155
- });
156
- }
157
- jsonToArray(data) {
158
- var response = [];
159
- data.forEach((element) => {
160
- var object = [];
161
- for (var clave in element) {
162
- if (element.hasOwnProperty(clave)) {
163
- if (typeof element[clave] == 'object') {
164
- element[clave] = this.subJsonToArray(element[clave]);
165
- }
166
- object.push(element[clave]);
167
- }
168
- }
169
- response.push(object);
170
- });
171
- return response;
172
- }
173
- subJsonToArray(data) {
174
- var object = '';
175
- for (var clave in data) {
176
- if (clave != 'code') {
177
- object += '\n' + data[clave];
178
- }
179
- }
180
- return object;
181
- }
182
- }
183
- BaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, deps: [{ token: i1.UserService }, { token: i2.StorageService }, { token: i3.CalendarService }], target: i0.ɵɵFactoryTarget.Injectable });
184
- BaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, providedIn: 'root' });
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, decorators: [{
186
- type: Injectable,
187
- args: [{
188
- providedIn: 'root',
189
- }]
190
- }], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.StorageService }, { type: i3.CalendarService }]; } });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvcmUvdXRpbHMvYmFzZS1zZXJ2aWNlL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFVL0IsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFDVSxXQUF3QixFQUN4QixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSixRQUFRLENBQUMsSUFBWSxFQUFFLFFBQWdCO1FBQ3JDLElBQUksT0FBTyxHQUFZO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQTtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFTLE9BQU8sRUFBRSxNQUFNO1lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUMzQyxRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO29CQUM3QixLQUFLLENBQUM7d0JBQ0osSUFBRyxDQUFDLE9BQU8sRUFBRTs0QkFDWCxJQUFJLENBQUMsSUFBSSxDQUFFO2dDQUNULE9BQU8sRUFBRSwrQ0FBK0M7Z0NBQ3hELE1BQU0sRUFBRSx1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QUU7d0JBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUN0RDtvQkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM3QjthQUNGO1lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBVztRQUN4QixJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDeEIsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO2dCQUNuQixNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM5QjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7d0dBcE1VLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvZ2luUnEsIFJlZ2lzdGVyRGFzaGJvYXJkUnEgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci91c2VyLXJxLm1vZGVsJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLXNlcnZpY2UvdXNlci1zZXJ2aWNlJztcclxuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5pbXBvcnQgeyBTZXNzaW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Nlc3Npb24vc2Vzc2lvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS1zZXJ2aWNlL3N0b3JhZ2Utc2VydmljZSc7XHJcbmltcG9ydCB7IEF2YWlsYWJpbGl0eVF1ZXJ5UnEgfSBmcm9tICcuLi8uLi9tb2RlbHMvY3Jvbm9ncmFtL2Nyb25vZ3JhbS5tb2RlbHMnO1xyXG5pbXBvcnQgeyBDYWxlbmRhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYWxlbmRhci1zZXJ2aWNlL2NhbGVuZGFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9yZXNwb25zZS9yZXNwb25zZS5pbnRlcmZhY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgd2ViTG9naW4odXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcclxuICAgIGxldCByZXF1ZXN0OiBMb2dpblJxID0ge1xyXG4gICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICBwYXNzd29yZDogcGFzc3dvcmRcclxuICAgIH1cclxuICAgIGxldCBzZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZTtcclxuICAgIGxldCBzdG9yYWdlID0gdGhpcy5zdG9yYWdlU2VydmljZTtcclxuICAgIGxldCBhcHBVc2VyID0gdGhpcy5pc0FuQXBwVXNlcigpO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgc2VydmljZS5sb2dpbihyZXF1ZXN0KS5zdWJzY3JpYmUoIHJlc3BvbnNlID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLm1lc3NhZ2UuY29kZSkge1xyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBpZighYXBwVXNlcikge1xyXG4gICAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xyXG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlBlcmZlY3QhPC9wPicsXHJcbiAgICAgICAgICAgICAgICAnaHRtbCc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5TdWNjZXNmdWxsIGxvZ2luPC9wPicsXHJcbiAgICAgICAgICAgICAgICAnaWNvbic6J3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGxvZ2luUmVnaXN0ZXJVc2VyOiBTZXNzaW9uID0ge1xyXG4gICAgICAgICAgICAgIHRva2VuOiByZXNwb25zZS5kYXRhLnRva2VuLFxyXG4gICAgICAgICAgICAgIHVzZXI6IHJlc3BvbnNlLmRhdGEsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBzdG9yYWdlLnNldEN1cnJlbnRTZXNzaW9uKGxvZ2luUmVnaXN0ZXJVc2VyKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPldhcm5pbmchPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+VGhlIGRhdGEgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHVzZXIgcmVnaXN0ZXJlZCBpbiBvdXIgc3lzdGVtLCBwbGVhc2UgcmV2aWV3IHRoZW0uPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2ljb24nOid3YXJuaW5nJyxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkVycm9yITwvcD4nLFxyXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlRoZSBpbnB1dCBkYXRhIGRvZXMgbm90IG1lZXQgdGhlIGVzdGFibGlzaGVkIHBhcmFtZXRlcnMuPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2ljb24nOidlcnJvcicsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+QW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJyZWQ8L3A+JyxcclxuICAgICAgICAgICAgICAnaWNvbic6J2Vycm9yJyxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlamVjdCgnVW5oYW5kbGVkIGV4Y2VwdGlvbicpO1xyXG4gICAgICB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRDcm9ub2dyYW1BdmFpbGFiaWxpdHkoaXNUZWFjaGVyOiBib29sZWFuLCBjb2RlOiBudW1iZXIsIHN0YXJ0RGF0ZTogc3RyaW5nLCBudW1DbGFzczogbnVtYmVyLCB3ZWVrRGF5czogYW55W10sIHN0YXJ0VGltZTogc3RyaW5nLCBlbmRUaW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT57XHJcbiAgICBsZXQgcmVxdWVzdDogQXZhaWxhYmlsaXR5UXVlcnlScSA9IHtcclxuICAgICAgaXNUZWFjaGVyOiBpc1RlYWNoZXIsXHJcbiAgICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlLFxyXG4gICAgICBudW1DbGFzczogbnVtQ2xhc3MsXHJcbiAgICAgIHdlZWtEYXlzOiB3ZWVrRGF5cyxcclxuICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXHJcbiAgICAgIGVuZFRpbWU6IGVuZFRpbWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBzZXJ2aWNlID0gdGhpcy5jYWxlbmRhclNlcnZpY2U7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICBzZXJ2aWNlLnBvc3RDcmVhdGVRdWVyeUV2ZW50KHJlcXVlc3QpLnN1YnNjcmliZSggIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLm1lc3NhZ2UuY29kZSkge1xyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlamVjdCgnVW5oYW5kbGVkIGV4Y2VwdGlvbicpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNBbkFwcFVzZXIoKSB7XHJcbiAgICBjb25zdCB1c2VyQWdlbnQ6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgcmV0dXJuIHVzZXJBZ2VudC5pbmNsdWRlcygnRmx1dHRlciBJUFQgQVBQJyk7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyUm9sZSgpOiBudW1iZXIge1xyXG4gICAgbGV0IHVzZXIgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk/LnJvbGU7XHJcbiAgICByZXR1cm4gdXNlciA9PT0gdW5kZWZpbmVkID8gLTEgOiB1c2VyO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlclRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk/LnRva2VuO1xyXG4gICAgcmV0dXJuIHRva2VuID09PSB1bmRlZmluZWQgPyAnLTEnIDogdG9rZW47XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHVzZXIgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gJycgOiB1c2VyLm5hbWU7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyQ29kZSgpOiBudW1iZXIge1xyXG4gICAgbGV0IHVzZXIgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gLTEgOiB1c2VyLmNvZGU7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclVzZXJGcm9tRGFzaGJvYXJkKHJlZ2lzdGVyRGFzaGJvYXJkUnE6IFJlZ2lzdGVyRGFzaGJvYXJkUnEpOiBQcm9taXNlPGJvb2xlYW4+e1xyXG4gICAgbGV0IHJlcXVlc3QgPSByZWdpc3RlckRhc2hib2FyZFJxO1xyXG4gICAgbGV0IHNlcnZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgc2VydmljZS5yZWdpc3RlckRhc2hib2FyZChyZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgIHN3aXRjaCAocmVzcG9uc2UubWVzc2FnZS5jb2RlKSB7XHJcbiAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xyXG4gICAgICAgICAgICAgICd0aXRsZSc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5QZXJmZWN0ITwvcD4nLFxyXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlN1Y2VzZnVsbCByZWdpc3RlciE8L3A+JyxcclxuICAgICAgICAgICAgICAnaWNvbic6J3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xyXG4gICAgICAgICAgICAgICd0aXRsZSc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5FcnJvciE8L3A+JyxcclxuICAgICAgICAgICAgICAnaHRtbCc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5UaGUgaW5wdXQgZGF0YSBkb2VzIG5vdCBtZWV0IHRoZSBlc3RhYmxpc2hlZCBwYXJhbWV0ZXJzLjwvcD4nLFxyXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBTd2FsLmZpcmUgKHtcclxuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiPlVwcyE8L3A+JyxcclxuICAgICAgICAgICAgICAnaHRtbCc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCI+VGhlIGlucHV0IGRhdGEgaGFzIGEgaGlnaCByZWxhdGlvbiB3aXRoIGEgdXNlciB0aGF0IGFscmVhZHkgZXhpc3RzITwvcD4nLFxyXG4gICAgICAgICAgICAgICdpY29uJzogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgU3dhbC5maXJlICh7XHJcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkVycm9yITwvcD4nLFxyXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkPC9wPicsXHJcbiAgICAgICAgICAgICAgJ2ljb24nOidlcnJvcicsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWplY3QoJ1VuaGFuZGxlZCBleGNlcHRpb24nKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGpzb25Ub0FycmF5KGRhdGE6IGFueVtdKTogYW55W11bXSB7XHJcbiAgICB2YXIgcmVzcG9uc2U6IGFueVtdID0gW107XHJcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgdmFyIG9iamVjdDogYW55W10gPSBbXTtcclxuICAgICAgZm9yICh2YXIgY2xhdmUgaW4gZWxlbWVudCkge1xyXG4gICAgICAgIGlmIChlbGVtZW50Lmhhc093blByb3BlcnR5KGNsYXZlKSkge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50W2NsYXZlXSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBlbGVtZW50W2NsYXZlXSA9IHRoaXMuc3ViSnNvblRvQXJyYXkoZWxlbWVudFtjbGF2ZV0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIG9iamVjdC5wdXNoKGVsZW1lbnRbY2xhdmVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmVzcG9uc2UucHVzaChvYmplY3QpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBzdWJKc29uVG9BcnJheShkYXRhOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICB2YXIgb2JqZWN0OiBzdHJpbmcgPSAnJztcclxuICAgIGZvciAodmFyIGNsYXZlIGluIGRhdGEpIHtcclxuICAgICAgaWYgKGNsYXZlICE9ICdjb2RlJykge1xyXG4gICAgICAgIG9iamVjdCArPSAnXFxuJyArIGRhdGFbY2xhdmVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0O1xyXG4gIH1cclxuXHJcbn1cclxuIl19
1
+ import { Injectable } from '@angular/core';
2
+ import Swal from 'sweetalert2';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/user-service/user-service";
5
+ import * as i2 from "../../services/storage-service/storage-service";
6
+ import * as i3 from "../../services/calendar-service/calendar.service";
7
+ export class BaseService {
8
+ constructor(userService, storageService, calendarService) {
9
+ this.userService = userService;
10
+ this.storageService = storageService;
11
+ this.calendarService = calendarService;
12
+ }
13
+ webLogin(user, password) {
14
+ let request = {
15
+ user: user,
16
+ password: password
17
+ };
18
+ let service = this.userService;
19
+ let storage = this.storageService;
20
+ let appUser = this.isAnAppUser();
21
+ return new Promise(function (resolve, reject) {
22
+ service.login(request).subscribe(response => {
23
+ switch (response.message.code) {
24
+ case 1:
25
+ if (!appUser) {
26
+ Swal.fire({
27
+ 'title': '<p style="font-family: Poppins"">Perfect!</p>',
28
+ 'html': '<p style="font-family: Poppins"">Succesfull login</p>',
29
+ 'icon': 'success',
30
+ });
31
+ }
32
+ const loginRegisterUser = {
33
+ token: response.data.token,
34
+ user: response.data,
35
+ };
36
+ storage.setCurrentSession(loginRegisterUser);
37
+ resolve(true);
38
+ break;
39
+ case 2:
40
+ Swal.fire({
41
+ 'title': '<p style="font-family: Poppins"">Warning!</p>',
42
+ 'html': '<p style="font-family: Poppins"">The data does not correspond to a user registered in our system, please review them.</p>',
43
+ 'icon': 'warning',
44
+ });
45
+ resolve(false);
46
+ break;
47
+ case 3:
48
+ Swal.fire({
49
+ 'title': '<p style="font-family: Poppins"">Error!</p>',
50
+ 'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
51
+ 'icon': 'error',
52
+ });
53
+ resolve(false);
54
+ break;
55
+ default:
56
+ Swal.fire({
57
+ 'title': '<p style="font-family: Poppins"">Error!</p>',
58
+ 'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
59
+ 'icon': 'error',
60
+ });
61
+ resolve(false);
62
+ break;
63
+ }
64
+ reject('Unhandled exception');
65
+ });
66
+ });
67
+ }
68
+ getCronogramAvailability(isTeacher, code, startDate, numClass, weekDays, startTime, endTime) {
69
+ let request = {
70
+ isTeacher: isTeacher,
71
+ code: code,
72
+ startDate: startDate,
73
+ numClass: numClass,
74
+ weekDays: weekDays,
75
+ startTime: startTime,
76
+ endTime: endTime,
77
+ };
78
+ let service = this.calendarService;
79
+ return new Promise(function (resolve, reject) {
80
+ service.postCreateQueryEvent(request).subscribe((response) => {
81
+ switch (response.message.code) {
82
+ case 1:
83
+ resolve(response.data);
84
+ break;
85
+ default:
86
+ reject('Unhandled exception');
87
+ }
88
+ reject('Unhandled exception');
89
+ });
90
+ });
91
+ }
92
+ isAnAppUser() {
93
+ const userAgent = window.navigator.userAgent;
94
+ return userAgent.includes('Flutter IPT APP');
95
+ }
96
+ getUserRole() {
97
+ let user = this.storageService.getCurrentUser()?.role;
98
+ return user === undefined ? -1 : user;
99
+ }
100
+ getUserToken() {
101
+ let token = this.storageService.getCurrentUser()?.token;
102
+ return token === undefined ? '-1' : token;
103
+ }
104
+ getUserName() {
105
+ let user = this.storageService.getCurrentUser();
106
+ let response = user === null ? '' : user.name;
107
+ return response;
108
+ }
109
+ getUserCode() {
110
+ let user = this.storageService.getCurrentUser();
111
+ let response = user === null ? -1 : user.code;
112
+ return response;
113
+ }
114
+ registerUserFromDashboard(registerDashboardRq) {
115
+ let request = registerDashboardRq;
116
+ let service = this.userService;
117
+ return new Promise(function (resolve, reject) {
118
+ service.registerDashboard(request).subscribe((response) => {
119
+ switch (response.message.code) {
120
+ case 1:
121
+ Swal.fire({
122
+ 'title': '<p style="font-family: Poppins"">Perfect!</p>',
123
+ 'html': '<p style="font-family: Poppins"">Sucesfull register!</p>',
124
+ 'icon': 'success',
125
+ });
126
+ resolve(true);
127
+ break;
128
+ case 3:
129
+ Swal.fire({
130
+ 'title': '<p style="font-family: Poppins"">Error!</p>',
131
+ 'html': '<p style="font-family: Poppins"">The input data does not meet the established parameters.</p>',
132
+ 'icon': 'error',
133
+ });
134
+ resolve(false);
135
+ break;
136
+ case 4:
137
+ Swal.fire({
138
+ 'title': '<p style="font-family: Poppins">Ups!</p>',
139
+ 'html': '<p style="font-family: Poppins">The input data has a high relation with a user that already exists!</p>',
140
+ 'icon': 'warning',
141
+ });
142
+ resolve(false);
143
+ break;
144
+ default:
145
+ Swal.fire({
146
+ 'title': '<p style="font-family: Poppins"">Error!</p>',
147
+ 'html': '<p style="font-family: Poppins"">An unexpected error has occurred</p>',
148
+ 'icon': 'error',
149
+ });
150
+ resolve(false);
151
+ break;
152
+ }
153
+ reject('Unhandled exception');
154
+ });
155
+ });
156
+ }
157
+ jsonToArray(data) {
158
+ var response = [];
159
+ data.forEach((element) => {
160
+ var object = [];
161
+ for (var clave in element) {
162
+ if (element.hasOwnProperty(clave)) {
163
+ if (typeof element[clave] == 'object') {
164
+ element[clave] = this.subJsonToArray(element[clave]);
165
+ }
166
+ object.push(element[clave]);
167
+ }
168
+ }
169
+ response.push(object);
170
+ });
171
+ return response;
172
+ }
173
+ subJsonToArray(data) {
174
+ var object = '';
175
+ for (var clave in data) {
176
+ if (clave != 'code') {
177
+ object += '\n' + data[clave];
178
+ }
179
+ }
180
+ return object;
181
+ }
182
+ }
183
+ BaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, deps: [{ token: i1.UserService }, { token: i2.StorageService }, { token: i3.CalendarService }], target: i0.ɵɵFactoryTarget.Injectable });
184
+ BaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, providedIn: 'root' });
185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: BaseService, decorators: [{
186
+ type: Injectable,
187
+ args: [{
188
+ providedIn: 'root',
189
+ }]
190
+ }], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.StorageService }, { type: i3.CalendarService }]; } });
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvcmUvdXRpbHMvYmFzZS1zZXJ2aWNlL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFVL0IsTUFBTSxPQUFPLFdBQVc7SUFFdEIsWUFDVSxXQUF3QixFQUN4QixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSixRQUFRLENBQUMsSUFBWSxFQUFFLFFBQWdCO1FBQ3JDLElBQUksT0FBTyxHQUFZO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQTtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFTLE9BQU8sRUFBRSxNQUFNO1lBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUMzQyxRQUFRLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO29CQUM3QixLQUFLLENBQUM7d0JBQ0osSUFBRyxDQUFDLE9BQU8sRUFBRTs0QkFDWCxJQUFJLENBQUMsSUFBSSxDQUFFO2dDQUNULE9BQU8sRUFBRSwrQ0FBK0M7Z0NBQ3hELE1BQU0sRUFBRSx1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QUU7d0JBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUN0RDtvQkFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUM3QjthQUNGO1lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBVztRQUN4QixJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDeEIsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFO2dCQUNuQixNQUFNLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM5QjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7d0dBcE1VLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dpblJxLCBSZWdpc3RlckRhc2hib2FyZFJxIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXIvdXNlci1ycS5tb2RlbCc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItc2VydmljZS91c2VyLXNlcnZpY2UnO1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJy4uLy4uL21vZGVscy9zZXNzaW9uL3Nlc3Npb24ubW9kZWwnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLXNlcnZpY2Uvc3RvcmFnZS1zZXJ2aWNlJztcbmltcG9ydCB7IEF2YWlsYWJpbGl0eVF1ZXJ5UnEgfSBmcm9tICcuLi8uLi9tb2RlbHMvY3Jvbm9ncmFtL2Nyb25vZ3JhbS5tb2RlbHMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FsZW5kYXItc2VydmljZS9jYWxlbmRhci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlL3Jlc3BvbnNlLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBCYXNlU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZVxuICApIHt9XG5cbiAgd2ViTG9naW4odXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPntcbiAgICBsZXQgcmVxdWVzdDogTG9naW5ScSA9IHtcbiAgICAgIHVzZXI6IHVzZXIsXG4gICAgICBwYXNzd29yZDogcGFzc3dvcmRcbiAgICB9XG4gICAgbGV0IHNlcnZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlO1xuICAgIGxldCBzdG9yYWdlID0gdGhpcy5zdG9yYWdlU2VydmljZTtcbiAgICBsZXQgYXBwVXNlciA9IHRoaXMuaXNBbkFwcFVzZXIoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHNlcnZpY2UubG9naW4ocmVxdWVzdCkuc3Vic2NyaWJlKCByZXNwb25zZSA9PiB7XG4gICAgICAgIHN3aXRjaCAocmVzcG9uc2UubWVzc2FnZS5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYoIWFwcFVzZXIpIHtcbiAgICAgICAgICAgICAgU3dhbC5maXJlICh7XG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlBlcmZlY3QhPC9wPicsXG4gICAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+U3VjY2VzZnVsbCBsb2dpbjwvcD4nLFxuICAgICAgICAgICAgICAgICdpY29uJzonc3VjY2VzcycsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbG9naW5SZWdpc3RlclVzZXI6IFNlc3Npb24gPSB7XG4gICAgICAgICAgICAgIHRva2VuOiByZXNwb25zZS5kYXRhLnRva2VuLFxuICAgICAgICAgICAgICB1c2VyOiByZXNwb25zZS5kYXRhLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc3RvcmFnZS5zZXRDdXJyZW50U2Vzc2lvbihsb2dpblJlZ2lzdGVyVXNlcik7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPldhcm5pbmchPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlRoZSBkYXRhIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSB1c2VyIHJlZ2lzdGVyZWQgaW4gb3VyIHN5c3RlbSwgcGxlYXNlIHJldmlldyB0aGVtLjwvcD4nLFxuICAgICAgICAgICAgICAnaWNvbic6J3dhcm5pbmcnLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkVycm9yITwvcD4nLFxuICAgICAgICAgICAgICAnaHRtbCc6ICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5UaGUgaW5wdXQgZGF0YSBkb2VzIG5vdCBtZWV0IHRoZSBlc3RhYmxpc2hlZCBwYXJhbWV0ZXJzLjwvcD4nLFxuICAgICAgICAgICAgICAnaWNvbic6J2Vycm9yJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkPC9wPicsXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KVxuICB9XG5cbiAgZ2V0Q3Jvbm9ncmFtQXZhaWxhYmlsaXR5KGlzVGVhY2hlcjogYm9vbGVhbiwgY29kZTogbnVtYmVyLCBzdGFydERhdGU6IHN0cmluZywgbnVtQ2xhc3M6IG51bWJlciwgd2Vla0RheXM6IGFueVtdLCBzdGFydFRpbWU6IHN0cmluZywgZW5kVGltZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+e1xuICAgIGxldCByZXF1ZXN0OiBBdmFpbGFiaWxpdHlRdWVyeVJxID0ge1xuICAgICAgaXNUZWFjaGVyOiBpc1RlYWNoZXIsXG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgc3RhcnREYXRlOiBzdGFydERhdGUsXG4gICAgICBudW1DbGFzczogbnVtQ2xhc3MsXG4gICAgICB3ZWVrRGF5czogd2Vla0RheXMsXG4gICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSxcbiAgICAgIGVuZFRpbWU6IGVuZFRpbWUsXG4gICAgfTtcblxuICAgIGxldCBzZXJ2aWNlID0gdGhpcy5jYWxlbmRhclNlcnZpY2U7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBzZXJ2aWNlLnBvc3RDcmVhdGVRdWVyeUV2ZW50KHJlcXVlc3QpLnN1YnNjcmliZSggIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS5tZXNzYWdlLmNvZGUpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQW5BcHBVc2VyKCkge1xuICAgIGNvbnN0IHVzZXJBZ2VudDogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgcmV0dXJuIHVzZXJBZ2VudC5pbmNsdWRlcygnRmx1dHRlciBJUFQgQVBQJyk7XG4gIH1cblxuICBnZXRVc2VyUm9sZSgpOiBudW1iZXIge1xuICAgIGxldCB1c2VyID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRDdXJyZW50VXNlcigpPy5yb2xlO1xuICAgIHJldHVybiB1c2VyID09PSB1bmRlZmluZWQgPyAtMSA6IHVzZXI7XG4gIH1cblxuICBnZXRVc2VyVG9rZW4oKTogc3RyaW5nIHtcbiAgICBsZXQgdG9rZW4gPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk/LnRva2VuO1xuICAgIHJldHVybiB0b2tlbiA9PT0gdW5kZWZpbmVkID8gJy0xJyA6IHRva2VuO1xuICB9XG5cbiAgZ2V0VXNlck5hbWUoKTogc3RyaW5nIHtcbiAgICBsZXQgdXNlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gJycgOiB1c2VyLm5hbWU7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgZ2V0VXNlckNvZGUoKTogbnVtYmVyIHtcbiAgICBsZXQgdXNlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBsZXQgcmVzcG9uc2UgPSB1c2VyID09PSBudWxsID8gLTEgOiB1c2VyLmNvZGU7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcmVnaXN0ZXJVc2VyRnJvbURhc2hib2FyZChyZWdpc3RlckRhc2hib2FyZFJxOiBSZWdpc3RlckRhc2hib2FyZFJxKTogUHJvbWlzZTxib29sZWFuPntcbiAgICBsZXQgcmVxdWVzdCA9IHJlZ2lzdGVyRGFzaGJvYXJkUnE7XG4gICAgbGV0IHNlcnZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgc2VydmljZS5yZWdpc3RlckRhc2hib2FyZChyZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgc3dpdGNoIChyZXNwb25zZS5tZXNzYWdlLmNvZGUpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBTd2FsLmZpcmUgKHtcbiAgICAgICAgICAgICAgJ3RpdGxlJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlBlcmZlY3QhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlN1Y2VzZnVsbCByZWdpc3RlciE8L3A+JyxcbiAgICAgICAgICAgICAgJ2ljb24nOidzdWNjZXNzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPlRoZSBpbnB1dCBkYXRhIGRvZXMgbm90IG1lZXQgdGhlIGVzdGFibGlzaGVkIHBhcmFtZXRlcnMuPC9wPicsXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiPlVwcyE8L3A+JyxcbiAgICAgICAgICAgICAgJ2h0bWwnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiPlRoZSBpbnB1dCBkYXRhIGhhcyBhIGhpZ2ggcmVsYXRpb24gd2l0aCBhIHVzZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyE8L3A+JyxcbiAgICAgICAgICAgICAgJ2ljb24nOiAnd2FybmluZycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIFN3YWwuZmlyZSAoe1xuICAgICAgICAgICAgICAndGl0bGUnOiAnPHAgc3R5bGU9XCJmb250LWZhbWlseTogUG9wcGluc1wiXCI+RXJyb3IhPC9wPicsXG4gICAgICAgICAgICAgICdodG1sJzogJzxwIHN0eWxlPVwiZm9udC1mYW1pbHk6IFBvcHBpbnNcIlwiPkFuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkPC9wPicsXG4gICAgICAgICAgICAgICdpY29uJzonZXJyb3InLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVqZWN0KCdVbmhhbmRsZWQgZXhjZXB0aW9uJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGpzb25Ub0FycmF5KGRhdGE6IGFueVtdKTogYW55W11bXSB7XG4gICAgdmFyIHJlc3BvbnNlOiBhbnlbXSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgdmFyIG9iamVjdDogYW55W10gPSBbXTtcbiAgICAgIGZvciAodmFyIGNsYXZlIGluIGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoY2xhdmUpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50W2NsYXZlXSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZWxlbWVudFtjbGF2ZV0gPSB0aGlzLnN1Ykpzb25Ub0FycmF5KGVsZW1lbnRbY2xhdmVdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYmplY3QucHVzaChlbGVtZW50W2NsYXZlXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlLnB1c2gob2JqZWN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBzdWJKc29uVG9BcnJheShkYXRhOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgdmFyIG9iamVjdDogc3RyaW5nID0gJyc7XG4gICAgZm9yICh2YXIgY2xhdmUgaW4gZGF0YSkge1xuICAgICAgaWYgKGNsYXZlICE9ICdjb2RlJykge1xuICAgICAgICBvYmplY3QgKz0gJ1xcbicgKyBkYXRhW2NsYXZlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG59XG4iXX0=