assets.component.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459
  1. <h2 class="floating-title">{{ title }}</h2>
  2. <div class="main-content">
  3. <div class="container-fluid" *ngIf="!noPlants">
  4. <div class="row align-container">
  5. <div class="col-12">
  6. <label for="sel3">Plantas</label>
  7. </div>
  8. </div>
  9. <div class="row align-container">
  10. <div class="col-lg-6 col-sm-6 p-1">
  11. <div class="row">
  12. <div class="col-lg-12 col-sm-12">
  13. <select
  14. class="custom-select"
  15. (change)="onChangeObj($event)"
  16. name="sel3"
  17. >
  18. <option
  19. *ngFor="let item of listAssets"
  20. [selected]="item.id === assetID"
  21. [value]="item.id"
  22. >{{ userLevel == 0 ? "PLANTA INVERLEC" : item.name }}</option
  23. >
  24. </select>
  25. </div>
  26. </div>
  27. <div class="row">
  28. <div class="col-lg-12">
  29. <div class="widget environment-meters">
  30. <div class="mini-stats">
  31. <!--<i class="fas fa-money-check-alt"></i> <i class="fas fa-hand-holding-usd"></i>-->
  32. <span class="savings-skin"
  33. ><i class="fas fa-money-check-alt"></i
  34. ></span>
  35. <div class="savings">
  36. <h4>Ahorro total</h4>
  37. <h3 *ngIf="eProduced">${{ total_savings }}</h3>
  38. </div>
  39. <div class="savings-last-24h">
  40. <i class="material-icons">
  41. trending_up
  42. </i>
  43. Ahorro últimas 24hrs. <span>${{ last_day_savings }}</span>
  44. </div>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <!-- Weather card -->
  51. <div class="col-lg-6 col-sm-6 p-1">
  52. <div class="row">
  53. <div class="col-lg-12">
  54. <app-weather-card [city]="city"></app-weather-card>
  55. </div>
  56. </div>
  57. </div>
  58. </div>
  59. <div class="row align-container" *ngIf="!metersInstalled">
  60. <div class="col-12 p-1">
  61. <br />
  62. <div class="alert alert-danger" role="alert">
  63. <h4 class="card-text">
  64. <i class="fas fa-exclamation-circle"></i>
  65. La planta no tiene medidores asignados
  66. </h4>
  67. </div>
  68. </div>
  69. </div>
  70. <!-- Basic stats cards -->
  71. <div class="row align-container" *ngIf="metersInstalled">
  72. <div class="col-sm-12 col-md-6">
  73. <div class="row p-0">
  74. <div class="col-xl-6 col-md-6 col-sm-12 p-1">
  75. <div class="widget energy-stats">
  76. <div class="mini-stats ">
  77. <span class="sky-skin"><i class="fa fa-bolt"></i></span>
  78. <h3 *ngIf="eProduced">
  79. {{ energyDay }}
  80. <small>kWh</small>
  81. </h3>
  82. <p>Ultimo dia</p>
  83. </div>
  84. </div>
  85. </div>
  86. <div class="col-xl-6 col-md-6 col-sm-12 p-1">
  87. <div class="widget energy-stats">
  88. <div class="mini-stats ">
  89. <span class="dark-yellow-skin"><i class="fa fa-bolt"></i></span>
  90. <h3 *ngIf="eProduced">
  91. {{ energyWeek }}
  92. <small>MWh</small>
  93. </h3>
  94. <p>Ultima semana</p>
  95. </div>
  96. </div>
  97. </div>
  98. <div class="col-xl-6 col-md-6 col-sm-12 p-1">
  99. <div class="widget energy-stats">
  100. <div class="mini-stats ">
  101. <span class="yellow-skin"><i class="fa fa-bolt"></i></span>
  102. <h3 *ngIf="eProduced">
  103. {{ energyMonth }}
  104. <small>MWh</small>
  105. </h3>
  106. <p>Ultimos 30 días</p>
  107. </div>
  108. </div>
  109. </div>
  110. <div class="col-xl-6 col-md-6 col-sm-12 p-1">
  111. <div class="widget energy-stats">
  112. <div class="mini-stats ">
  113. <span class="green-skin"><i class="fa fa-bolt"></i></span>
  114. <h3 *ngIf="eProduced">
  115. {{ energyYear }}
  116. <small>MWh</small>
  117. </h3>
  118. <p>Total</p>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. </div>
  124. <div class="col-sm-12 col-md-6">
  125. <div class="row p-0">
  126. <div class="col-12 p-1">
  127. <div class="certification-stats">
  128. <span class="cert-skin">
  129. <img src="assets/img/medal.png" alt="Certificate" />
  130. </span>
  131. <div class="cert-title">
  132. <h2>Certificados de Origen</h2>
  133. </div>
  134. <div class="cdo-items">
  135. <i class="material-icons">
  136. check_box
  137. </i>
  138. Total de certificados de origen:
  139. <span class="cdo-total">{{ totalCertificates }}</span>
  140. </div>
  141. <div class="cdo-items">
  142. <i class="material-icons">
  143. offline_bolt
  144. </i>
  145. Fecha de último CdO generado:
  146. <span class="cdo-date">
  147. {{ lastGeneratedDateCertificate }}
  148. </span>
  149. </div>
  150. <div class="cdo-items">
  151. <i class="material-icons ">
  152. money
  153. </i>
  154. Monto total por CdO generados:
  155. <span class="cdo-money">${{ totalCertificatesValue }}</span>
  156. </div>
  157. </div>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. <!-- Chartjs potency generation graphic -->
  163. <div class="row align-container">
  164. <div class="col-lg-12 col-md-12 col-sm-12 p-1">
  165. <div class="widget">
  166. <div class="mini-stats">
  167. <div class="row" *ngIf="metersInstalled">
  168. <div class="col-12">
  169. <p class="align-right">
  170. Seleccione un rango y un tipo de visualización
  171. </p>
  172. <div class="visualization">
  173. <div class=" action-buttons">
  174. <button
  175. class="btn btn-link"
  176. [class.btn-success]="isActive[0]"
  177. (click)="getMeasureRangeChart('day')"
  178. >
  179. 1D
  180. </button>
  181. <button
  182. class="btn btn-link"
  183. [class.btn-success]="isActive[1]"
  184. (click)="getMeasureRangeChart('week')"
  185. >
  186. 7D
  187. </button>
  188. <button
  189. class="btn btn-link"
  190. [class.btn-success]="isActive[2]"
  191. (click)="getMeasureRangeChart('WTD')"
  192. >
  193. WTD
  194. </button>
  195. <button
  196. class="btn btn-link"
  197. [class.btn-success]="isActive[3]"
  198. (click)="getMeasureRangeChart('month')"
  199. >
  200. 1M
  201. </button>
  202. <button
  203. class="btn btn-link"
  204. [class.btn-success]="isActive[4]"
  205. (click)="getMeasureRangeChart('MTD')"
  206. >
  207. MTD
  208. </button>
  209. <button
  210. class="btn btn-link"
  211. [class.btn-success]="isActive[5]"
  212. (click)="getMeasureRangeChart('3m')"
  213. >
  214. 3M
  215. </button>
  216. <button
  217. class="btn btn-link"
  218. [class.btn-success]="isActive[6]"
  219. (click)="getMeasureRangeChart('12m')"
  220. >
  221. 12M
  222. </button>
  223. <button
  224. class="btn btn-link"
  225. [class.btn-success]="isActive[7]"
  226. (click)="getMeasureRangeChart('YTD')"
  227. >
  228. YTD
  229. </button>
  230. <button
  231. class="btn btn-link"
  232. [class.btn-success]="isActive[8]"
  233. (click)="getMeasureRangeChart('total')"
  234. >
  235. TOTAL
  236. </button>
  237. <div class="input-box-container">
  238. <div>
  239. <p>
  240. <i class="far fa-calendar" aria-hidden="true"></i>
  241. </p>
  242. <input
  243. class="input-box form-control"
  244. placeholder="Seleccione una fecha"
  245. angular-mydatepicker
  246. name="mydate"
  247. (click)="dp.toggleCalendar()"
  248. [(ngModel)]="model"
  249. [options]="myDpOptions"
  250. (dateChanged)="onDateChanged($event)"
  251. #dp="angular-mydatepicker"
  252. />
  253. </div>
  254. </div>
  255. </div>
  256. <div class=" action-buttons">
  257. <button
  258. title="Barra"
  259. [ngClass]="[
  260. chartActive[0] == true
  261. ? 'btn btn-success'
  262. : 'btn btn-dark'
  263. ]"
  264. (click)="changeGraphicType('bar')"
  265. >
  266. <i class="fa fa-chart-bar"></i>
  267. </button>
  268. <button
  269. title="Línea"
  270. [ngClass]="[
  271. chartActive[1] == true
  272. ? 'btn btn-success'
  273. : 'btn btn-dark'
  274. ]"
  275. (click)="changeGraphicType('line')"
  276. >
  277. <i class="fa fa-chart-area"></i>
  278. </button>
  279. <!--
  280. <button title="Area" [ngClass]="[chartActive[2]==true ? 'btn btn-success' : 'btn btn-dark']" (click)="changeGraphicType('radar')">
  281. <i class="fa fa-chart-area"></i>
  282. </button>-->
  283. <button
  284. title="Tabla"
  285. [ngClass]="[
  286. chartActive[3] == true
  287. ? 'btn btn-success'
  288. : 'btn btn-dark'
  289. ]"
  290. (click)="changeToTable()"
  291. >
  292. <i class="fa fa-table"></i>
  293. </button>
  294. </div>
  295. </div>
  296. </div>
  297. </div>
  298. <div class="chart-container" id="chart-wrapper">
  299. <canvas id="canvas">{{ chart1 }}</canvas>
  300. </div>
  301. <div class="no-data">
  302. <h2>
  303. Información no disponible
  304. </h2>
  305. </div>
  306. <div id="toogleTable">
  307. <ng-container
  308. class="example-container mat-elevation-z8"
  309. *ngIf="showTable"
  310. >
  311. <div class="example-table-container">
  312. <div class="action-buttons">
  313. <button
  314. class="btn btn-primary btn-sm"
  315. mat-raised-button
  316. (click)="exporter.exportTable(exportExcel, ExcelOptions)"
  317. >
  318. <i class="fas fa-file-excel"></i>
  319. EXCEL
  320. </button>
  321. <button
  322. class="btn btn-primary btn-sm"
  323. mat-raised-button
  324. (click)="exporter.exportTable(exportCSV, CSVOptions)"
  325. >
  326. <i class="fas fa-file-csv"></i>
  327. CSV
  328. </button>
  329. <button
  330. class="btn btn-primary btn-sm"
  331. mat-raised-button
  332. (click)="exporter.exportTable(exportJSON, JSONOptions)"
  333. >
  334. <i class="fas fa-file-alt"></i>
  335. JSON
  336. </button>
  337. <button
  338. class="btn btn-primary btn-sm"
  339. mat-raised-button
  340. (click)="printTable()"
  341. >
  342. <i class="fas fa-file-alt"></i>
  343. IMPRIMIR
  344. </button>
  345. </div>
  346. <mat-table
  347. matTableExporter
  348. #table
  349. [dataSource]="dataSource"
  350. #exporter="matTableExporter"
  351. id="measuresTable"
  352. >
  353. <div
  354. *ngFor="
  355. let disCol of displayedColumns;
  356. let colIndex = index
  357. "
  358. matColumnDef="{{ disCol }}"
  359. >
  360. <mat-header-cell *matHeaderCellDef>{{
  361. disCol
  362. }}</mat-header-cell>
  363. <mat-cell *matCellDef="let element">
  364. {{ element[colIndex] }}
  365. </mat-cell>
  366. </div>
  367. <mat-header-row
  368. *matHeaderRowDef="displayedColumns"
  369. ></mat-header-row>
  370. <mat-row
  371. *matRowDef="let row; columns: displayedColumns"
  372. ></mat-row>
  373. </mat-table>
  374. </div>
  375. </ng-container>
  376. <mat-paginator
  377. class="hiddenonload"
  378. [pageSizeOptions]="[5, 10, 25, dataSource.data.length]"
  379. [length]="dataSource.data.length"
  380. [pageIndex]="0"
  381. [pageSize]="10"
  382. ></mat-paginator>
  383. </div>
  384. </div>
  385. </div>
  386. </div>
  387. </div>
  388. <!-- Enviromental cool stats cards -->
  389. <div class="row align-container" *ngIf="metersInstalled">
  390. <div class="col-xl-4 col-lg-6 col-md-6 col-sm-6 p-1">
  391. <div class="widget">
  392. <div class="enviroment-stats">
  393. <div class="enviromental-icon">
  394. <img src="assets/img/barrels2.png" alt="" />
  395. </div>
  396. <div class="enviromental-text">
  397. <span>{{ environmentFuel }}</span>
  398. Barriles de petróleo crudo no producidos.
  399. </div>
  400. </div>
  401. </div>
  402. </div>
  403. <div class="col-xl-4 col-lg-6 col-md-6 col-sm-6 p-1">
  404. <div class="widget">
  405. <div class="enviroment-stats">
  406. <div class="enviromental-icon">
  407. <img src="assets/img/car2-icon.png" alt="" />
  408. </div>
  409. <div class="enviromental-text">
  410. <span>{{ environmentCO2 }}Kg.</span>
  411. De gases CO2 evitados.
  412. </div>
  413. </div>
  414. </div>
  415. </div>
  416. <div class="col-xl-4 col-lg-6 col-md-6 col-sm-6 p-1">
  417. <div class="widget">
  418. <div class="enviroment-stats">
  419. <div class="enviromental-icon">
  420. <img src="assets/img/poweredhouse.png" alt="" />
  421. </div>
  422. <div class="enviromental-text">
  423. La energía que demandan
  424. <span>{{ environmentHouse }}</span>
  425. hogares durante 1 año.
  426. </div>
  427. </div>
  428. </div>
  429. </div>
  430. </div>
  431. </div>
  432. <div class="container-fluid" *ngIf="noPlants">
  433. <div class="row">
  434. <div class="col-lg-12">
  435. <div class="card border-danger">
  436. <div class="card-body">
  437. No posee organizaciones/plantas asociadas a su cuenta
  438. </div>
  439. </div>
  440. </div>
  441. </div>
  442. </div>
  443. </div>