Bladeren bron

Editar Tarjetas de Dashboard principal

oscarleiva 5 jaren geleden
bovenliggende
commit
9c91a4d067

+ 47 - 180
src/app/components/dashboard/dashboard.component.html

@@ -3,171 +3,51 @@
 <div class="main-content">
   <div class="container-fluid">
     <div class="row">
-      <div class="col-lg-12">
+      <!-- <div class="col-lg-12">
         <a href="#!" class="btn btn-sm btn-warning pull-right"
           >Actualizar a usuario pro</a
         >
-      </div>
+      </div> -->
     </div>
     <br />
     <div class="row">
       <div class="col-lg-12">
-        <div class="card white-skin bg-gradient-danger card-img-holder">
+        <div *ngIf="tarifa" class="card">
+
+          <div class="card-header card-header-inverlec">
+            <p class="card-category">Tarifas de Energía al Usuario Final</p>
+            <h3 class="card-title">{{tarifa.distribuidora}}</h3>
+
+
+          </div>
           <div class="card-body">
-            <img
-              alt="circle-image"
-              class="card-img-absolute"
-              src="assets/img/money-rate.png"
-            />
-            <h4 class="font-weight-normal mb-3">
-              Tarifa por distribuidora y código
-              <i class="mdi mdi-chart-line mdi-24px float-right"></i>
-            </h4>
             <div class="row no-gutters">
-              <div class="col-sm-12 col-md-6">
-                <h3 class="mb-3">
-                  Distribuidora:
-                  <strong>
-                    {{ rates.distribuidora }}
-                  </strong>
-                </h3>
-                <div>
-                  <h3>
-                    Vigencia:
-                    <strong *ngIf="rates.tarifa_actual.dateMin">
-                      {{ rates.tarifa_actual.dateMin | date: "dd/MMM/yyyy" }} -
-                      {{ rates.tarifa_actual.dateMax | date: "dd/MMM/yyyy" }}
-                    </strong>
-                  </h3>
-                </div>
-              </div>
-              <div class="col-sm-12 col-md-6">
-                <h4>Tarifa actual (USD$/kWh):</h4>
-                <div *ngIf="rates.tarifa_actual.cargo_energia">
-                  Cargo de energia:
-                  <strong>
-                    {{ rates.tarifa_actual.cargo_energia | number: "1.2-4" }}
-                    USD$/kWh
-                  </strong>
-                </div>
-                <div *ngIf="rates.tarifa_actual.cargo_energia_b1">
-                  Bloque 1:
-                  <strong>
-                    {{ rates.tarifa_actual.cargo_energia_b1 | number: "1.2-4" }}
-                    USD$/kWh
-                  </strong>
-                </div>
-                <div *ngIf="rates.tarifa_actual.cargo_energia_b2">
-                  Bloque 2:
-                  <strong>
-                    {{ rates.tarifa_actual.cargo_energia_b2 | number: "1.2-4" }}
-                    USD$/kWh
-                  </strong>
-                </div>
-                <div *ngIf="rates.tarifa_actual.cargo_energia_b3">
-                  Bloque 3:
-                  <strong>
-                    {{ rates.tarifa_actual.cargo_energia_b3 | number: "1.2-4" }}
-                    USD$/kWh
-                  </strong>
-                </div>
-                <div *ngIf="rates.tarifa_actual.cargo_energia_punta">
-                  Punta:
-                  <strong>
-                    {{
-                      rates.tarifa_actual.cargo_energia_punta | number: "1.2-4"
-                    }}
-                    USD$/kWh
-                  </strong>
-                </div>
-                <div *ngIf="rates.tarifa_actual.cargo_energia_resto">
-                  Resto:
-                  <strong>
-                    {{
-                      rates.tarifa_actual.cargo_energia_resto | number: "1.2-4"
-                    }}
-                    USD$/kWh
-                  </strong>
-                </div>
-                <div *ngIf="rates.tarifa_actual.cargo_energia_valle">
-                  Valle:
-                  <strong>
-                    {{
-                      rates.tarifa_actual.cargo_energia_valle | number: "1.2-4"
-                    }}
-                    USD$/kWh
-                  </strong>
-                </div>
-                <br />
+              <div *ngFor="let cargo of tarifaActual" class="col-xl-4">
+                <h4><small>{{cargo.label}}</small></h4>
+                <h3 class="valor-tarifa"><strong>{{cargo.value}} $/MWh</strong></h3>
               </div>
             </div>
           </div>
-        </div>
-      </div>
-
-      <!--
-      <div class="col-lg-6">
-        <div class="card cream-skin bg-gradient-danger card-img-holder">
-          <div class="card-body">
-            <img
-              alt="circle-image"
-              class="card-img-absolute"
-              src="assets/img/money-rate.png"
-            />
-            <h4 class="font-weight-normal mb-3">
-              Historico de tarifa por distribuidora y código
-              <i class="mdi mdi-chart-line mdi-24px float-right"></i>
-            </h4>
-            <h3 class="mb-3" *ngIf="listAssets">
-              Distribuidora {{ rates.distribuidora }}
-            </h3>
-            <div *ngIf="rates.tarifa_actual.cargo_energia">
-              Cargo de energia: {{ rates.tarifa_actual.cargo_energia }}
-            </div>
-            <div *ngIf="rates.tarifa_actual.cargo_energia_b1">
-              Cargo de energia por bloque 1:
-              {{ rates.tarifa_actual.cargo_energia_b1 }}
-            </div>
-            <div *ngIf="rates.tarifa_actual.cargo_energia_b2">
-              Cargo de energia por bloque 2:
-              {{ rates.tarifa_actual.cargo_energia_b2 }}
-            </div>
-            <div *ngIf="rates.tarifa_actual.cargo_energia_b3">
-              Cargo de energia por bloque 3:
-              {{ rates.tarifa_actual.cargo_energia_b3 }}
-            </div>
-            <div *ngIf="rates.tarifa_actual.cargo_energia_punta">
-              Cargo de energia punta:
-              {{ rates.tarifa_actual.cargo_energia_punta }}
-            </div>
-            <div *ngIf="rates.tarifa_actual.cargo_energia_resto">
-              Cargo de energia resto:
-              {{ rates.tarifa_actual.cargo_energia_resto }}
-            </div>
-            <div *ngIf="rates.tarifa_actual.cargo_energia_valle">
-              Cargo de energia valle:
-              {{ rates.tarifa_actual.cargo_energia_valle }}
+          <div class="card-footer d-flex">
+            <div class="card-stats d-flex justify-content-end">
+              <i class="material-icons">calendar_today</i>{{vigencia}}
             </div>
           </div>
         </div>
       </div>
-    --></div>
+
+    </div>
   </div>
   <br />
   <div class="container-fluid" *ngIf="listAssets">
     <div class="row">
       <div class="col-lg-6 col-md-6 col-sm-6">
-        <div
-          class="card dark-yellow-skin bg-gradient-danger card-img-holder text-white"
-        >
+        <div class="card dark-yellow-skin bg-gradient-danger card-img-holder text-white">
           <div class="card-body">
-            <img
-              alt="circle-image"
-              class="card-img-absolute"
-              src="assets/img/waves-opt.png"
-            />
+            <i class="fa fa-bolt card-icon-absolute"></i>
+            <!-- <img alt="circle-image" class="card-img-absolute" src="assets/img/waves-opt.png" /> -->
             <h4 class="font-weight-normal mb-3">
-              Total de plantas instaladas
+              Total de Plantas Instaladas
               <i class="mdi mdi-chart-line mdi-24px float-right"></i>
             </h4>
             <h2 class="mb-3">{{ totalAssetsInstalled }}</h2>
@@ -175,17 +55,12 @@
         </div>
       </div>
       <div class="col-lg-6 col-md-6 col-sm-6">
-        <div
-          class="card sky-skin bg-gradient-danger card-img-holder text-white"
-        >
+        <div class="card sky-skin bg-gradient-danger card-img-holder text-white">
           <div class="card-body">
-            <img
-              alt="circle-image"
-              class="card-img-absolute"
-              src="assets/img/waves-opt.png"
-            />
+            <i class="fa fa-solar-panel card-icon-absolute"></i>
+            <!-- <img alt="circle-image" class="card-img-absolute" src="assets/img/waves-opt.png" /> -->
             <h4 class="font-weight-normal mb-3">
-              Capacidad instalada total
+              Capacidad Total Instalada
               <i class="mdi mdi-chart-line mdi-24px float-right"></i>
             </h4>
             <h2 class="mb-3">{{ sumarize }} kW</h2>
@@ -212,33 +87,33 @@
       <div class="col-md-8">
         <div class="card border-success">
           <div class="card-body">
-            <div
-              style="height: 350px;"
-              leaflet
-              [leafletOptions]="options"
-              [leafletLayers]="markers"
-              (leafletMapReady)="onMapReady($event)"
-            ></div>
+            <div style="height: 350px;" leaflet [leafletOptions]="options" [leafletLayers]="markers"
+              (leafletMapReady)="onMapReady($event)"></div>
           </div>
         </div>
       </div>
       <div class="col-md-4">
         <div class="plant-detail" *ngIf="selectedPlant">
           <div class="card border-success" style="height: 390px;">
-            <div class="card-body">
-              <h3><i class="fa fa-bolt"></i> {{ selectedPlant.name }}</h3>
+            <div class="card-header card-header-inverlec">
+              <h3 class="card-title"><i class="fa fa-solar-panel"
+                  style="font-size:30px; vertical-align: middle;"></i>&nbsp;
+                <strong>{{selectedPlant.name}}</strong>
+              </h3>
 
-              <p class="h4">País: {{ selectedPlant.country }}</p>
-              <p class="h4">Ciudad: {{ selectedPlant.city }}</p>
-              <p class="h4">Dirección: {{ selectedPlant.address }}</p>
-              <p class="h4">Capacidad Instalada: {{ totalInstalled }} kW</p>
+            </div>
+            <div class="card-body d-flex flex-column">
+
+              <p class="h4"><small>País:</small><br>{{ selectedPlant.country }}</p>
+              <p class="h4"><small>Ciudad:</small><br>{{ selectedPlant.city }}</p>
+              <p class="h4"><small>Dirección:</small><br>{{ selectedPlant.address }}</p>
+              <p class="h4"><small>Capacidad Instalada:</small><br>{{ totalInstalled }} kW</p>
+              <div class="d-flex justify-content-end">
+                <button class="btn btn-success btn-flat " (click)="goToAsset(selectedPlant.id)">
+                  Ir a Planta
+                </button>
+              </div>
 
-              <button
-                class="btn bg-yellow btn-flat"
-                (click)="goToAsset(selectedPlant.id)"
-              >
-                Ir a Planta
-              </button>
             </div>
           </div>
         </div>
@@ -280,11 +155,7 @@
                 <th mat-header-cell *matHeaderCellDef>&nbsp;</th>
                 <td mat-cell *matCellDef="let row">
                   <div class="action-buttons">
-                    <a
-                      class="btn btn-primary btn-sm"
-                      (click)="goToAsset(row.id)"
-                      href="javascript:void(0)"
-                    >
+                    <a class="btn btn-primary btn-sm" (click)="goToAsset(row.id)" href="javascript:void(0)">
                       Ir a planta
                     </a>
                   </div>
@@ -295,11 +166,7 @@
               <tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
             </table>
 
-            <mat-paginator
-              [pageSizeOptions]="[5, 10, 20]"
-              [pageIndex]="0"
-              [pageSize]="5"
-            ></mat-paginator>
+            <mat-paginator [pageSizeOptions]="[5, 10, 20]" [pageIndex]="0" [pageSize]="5"></mat-paginator>
           </div>
         </div>
       </div>

+ 9 - 0
src/app/components/dashboard/dashboard.component.scss

@@ -20,6 +20,7 @@ agm-map {
   h3 {
     margin-top: 0;
   }
+
   button {
     position: absolute;
     bottom: 15px;
@@ -29,7 +30,15 @@ agm-map {
 h3 {
   margin: 5px 0 10px;
   font-size: 1.2rem;
+
   strong {
     font-size: 1.3rem;
   }
 }
+
+.card-icon-absolute {
+  position: absolute;
+  bottom: 15px;
+  right: 15px;
+  font-size: 60px;
+}

+ 69 - 53
src/app/components/dashboard/dashboard.component.ts

@@ -1,10 +1,10 @@
-import { ActivatedRoute, Router } from "@angular/router";
-import { Component, OnInit, NgZone, ViewChild } from "@angular/core";
-import { Plant } from "src/app/models/plant";
-import { Rate } from "src/app/models/rate";
+import { ActivatedRoute, Router } from '@angular/router';
+import { Component, OnInit, NgZone, ViewChild } from '@angular/core';
+import { Plant } from 'src/app/models/plant';
+import { Rate } from 'src/app/models/rate';
 
-import { PlantsService } from "src/app/services/plants.service";
-import { OrganizationsService } from "src/app/services/organizations.service";
+import { PlantsService } from 'src/app/services/plants.service';
+import { OrganizationsService } from 'src/app/services/organizations.service';
 import {
   latLng,
   tileLayer,
@@ -15,26 +15,29 @@ import {
   latLngBounds,
   LatLng,
   point,
-} from "leaflet";
+} from 'leaflet';
 
-import { MatPaginator } from "@angular/material/paginator";
-import { MatSort } from "@angular/material/sort";
-import { MatTableDataSource } from "@angular/material/table";
-import { AuthService } from "@app/services/auth2.service";
+import { MatPaginator } from '@angular/material/paginator';
+import { MatSort } from '@angular/material/sort';
+import { MatTableDataSource } from '@angular/material/table';
+import { AuthService } from '@app/services/auth2.service';
 
-import { of as observableOf, Observable, throwError, from } from "rxjs";
+import { of as observableOf, Observable, throwError, from } from 'rxjs';
 
-import * as moment from "moment";
-import Swal from "sweetalert2";
-import { RatesService } from "@app/services/rates.service";
+import * as moment from 'moment';
+import Swal from 'sweetalert2';
+import { RatesService } from '@app/services/rates.service';
+import { Tariff } from '@app/models/tariff';
+import { Cargo } from '@app/models/cargo';
+import { DatePipe } from '@angular/common';
 
 @Component({
-  selector: "app-dashboard",
-  templateUrl: "./dashboard.component.html",
-  styleUrls: ["./dashboard.component.scss"],
+  selector: 'app-dashboard',
+  templateUrl: './dashboard.component.html',
+  styleUrls: ['./dashboard.component.scss'],
 })
 export class DashboardComponent implements OnInit {
-  title = "Dashboard";
+  title = 'Dashboard';
 
   listData: any;
   rows = [];
@@ -43,7 +46,7 @@ export class DashboardComponent implements OnInit {
 
   listAssets: any;
   dataSource = new MatTableDataSource(this.listAssets);
-  displayedColumns: string[] = ["name", "country", "city", "id"];
+  displayedColumns: string[] = ['name', 'country', 'city', 'id'];
 
   error: boolean;
   listOrganizations: any;
@@ -68,14 +71,14 @@ export class DashboardComponent implements OnInit {
   icon = icon({
     iconSize: [25, 41],
     iconAnchor: [13, 41],
-    iconUrl: "assets/img/marker-icon.png",
+    iconUrl: 'assets/img/marker-icon.png',
     //shadowUrl: 'marker-shadow.png'
   });
 
   // Open Street Map definitions
-  LAYER_OSM = tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
+  LAYER_OSM = tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
     maxZoom: 18,
-    attribution: "&copy; OpenStreetMap contributors",
+    attribution: '&copy; OpenStreetMap contributors',
   });
 
   // Values to bind to Leaflet Directive
@@ -91,8 +94,8 @@ export class DashboardComponent implements OnInit {
   totalAssetsInstalled: any;
 
   rates: Rate = {
-    distribuidora: "-",
-    codigo_tarifa: "-",
+    distribuidora: '-',
+    codigo_tarifa: '-',
     tarifa_actual: {
       dateMin: null,
       dateMax: null,
@@ -116,6 +119,10 @@ export class DashboardComponent implements OnInit {
   };
   defaultRates: boolean;
 
+  tarifa: Tariff;
+  vigencia: string;
+  tarifaActual: Cargo[];
+
   constructor(
     private plantsService: PlantsService,
     private route: ActivatedRoute,
@@ -123,22 +130,23 @@ export class DashboardComponent implements OnInit {
     private router: Router,
     private zone: NgZone,
     private authService: AuthService,
-    private ratesService: RatesService
+    private ratesService: RatesService,
+    private datePipe: DatePipe,
   ) {
     //DEMO
     this.userLevel = +this.authService.getUserLevel();
 
     Swal.fire({
       allowOutsideClick: false,
-      type: "info",
-      text: "Espere por favor...",
+      type: 'info',
+      text: 'Espere por favor...',
     });
     Swal.showLoading();
 
     this.plantsService.getAllAssets().subscribe(
       (res) => {
         if (res != null) {
-          this.listAssets = res["data"]["assets"];
+          this.listAssets = res.data.assets;
           this.dataSource.data = this.listAssets;
           this.dataSource.paginator = this.paginator;
           this.dataSource.sort = this.sort;
@@ -152,13 +160,13 @@ export class DashboardComponent implements OnInit {
             this.totalAssetsInstalled = this.listAssets.length || 0;
             for (let prop in this.assetKeys) {
               this.meterKeys2 = Object.keys(
-                this.listAssets.map((item) => item["meters_installed"])[prop]
+                this.listAssets.map((item) => item['meters_installed'])[prop]
               );
               if (this.meterKeys2.length > 0) {
                 for (let prop2 in this.meterKeys2) {
                   this.sumarize += this.listAssets
-                    .map((item) => item["meters_installed"])
-                    [prop].map((response) => response["installedCapacity_kW"])[
+                    .map((item) => item['meters_installed'])
+                  [prop].map((response) => response['installedCapacity_kW'])[
                     prop2
                   ];
                   //this.totalMetersInstalled = this.sumarize.toString();
@@ -179,8 +187,8 @@ export class DashboardComponent implements OnInit {
       },
       (err) => {
         Swal.fire({
-          type: "error",
-          title: "Error en el servidor",
+          type: 'error',
+          title: 'Error en el servidor',
           text: err.message,
         });
       }
@@ -193,13 +201,14 @@ export class DashboardComponent implements OnInit {
     }, 3000);
 
     this.ratesService.getDefaultRate().subscribe((res) => {
-      this.rates = res["data"];
-      this.defaultRates = true;
+      this.tarifa = res.data;
+      this.tarifaActual = this.tarifa.tarifa_actual.cargos.filter(cargo => cargo.value !== '');
+      this.vigencia = this.getTariffPeriod(this.tarifa);
     });
 
     var responsiveOptions: any[] = [
       [
-        "screen and (max-width: 640px)",
+        'screen and (max-width: 640px)',
         {
           seriesBarDistance: 5,
           axisX: {
@@ -226,24 +235,24 @@ export class DashboardComponent implements OnInit {
   addMarkers() {
     let lat, long, address, name2;
     for (const plant of this.listAssets) {
-      if (plant["meters_installed"].length > 0) {
+      if (plant['meters_installed'].length > 0) {
         // DEMO
         if (this.userLevel == 0) {
-          lat = "13.6613819";
-          long = "-89.2514334";
+          lat = '13.6613819';
+          long = '-89.2514334';
           address =
-            "Urbanización Madre Selva Calle Llama del Bosque, Edificio Avante, Local 4-5/4-6, Antiguo Cuscatlán";
-          name2 = "Inversiones MERELEC S.A de C.V";
+            'Urbanización Madre Selva Calle Llama del Bosque, Edificio Avante, Local 4-5/4-6, Antiguo Cuscatlán';
+          name2 = 'Inversiones MERELEC S.A de C.V';
         } else {
-          lat = plant["meters_installed"][0].gpsLat;
-          long = plant["meters_installed"][0].gpsLong;
+          lat = plant['meters_installed'][0].gpsLat;
+          long = plant['meters_installed'][0].gpsLong;
           address = plant.address;
           name2 = plant.name;
         }
 
         const newMarker = marker([lat, long], { icon: this.icon })
-          .bindPopup("<b>" + name2 + "</b><br>Dirección: " + address)
-          .on("click", () => {
+          .bindPopup('<b>' + name2 + '</b><br>Dirección: ' + address)
+          .on('click', () => {
             this.zone.run(() => {
               this.sendPlantId(plant.id);
             });
@@ -259,11 +268,11 @@ export class DashboardComponent implements OnInit {
     // DEMO
     if (this.userLevel == 0) {
       this.selectedPlant = {
-        name: "Inversiones MERELEC S.A de C.V",
-        country: "El Salvador",
-        city: "La Libertad",
+        name: 'Inversiones MERELEC S.A de C.V',
+        country: 'El Salvador',
+        city: 'La Libertad',
         address:
-          "Urbanización Madre Selva Calle Llama del Bosque, Edificio Avante, Local 4-5/4-6, Antiguo Cuscatlán",
+          'Urbanización Madre Selva Calle Llama del Bosque, Edificio Avante, Local 4-5/4-6, Antiguo Cuscatlán',
         installedCapacity_kW: 300,
       };
       this.totalInstalled = 320;
@@ -272,12 +281,12 @@ export class DashboardComponent implements OnInit {
       this.selectedPlant = this.listAssets.find((e) => e.id === this.plantId);
       let keys = Object.keys(
         this.selectedPlant.meters_installed.map(
-          (item) => item["meters_installed"]
+          (item) => item['meters_installed']
         )
       );
       for (let prop2 in keys) {
         this.totalInstalled += this.selectedPlant.meters_installed.map(
-          (response) => response["installedCapacity_kW"]
+          (response) => response['installedCapacity_kW']
         )[prop2];
       }
     }
@@ -297,6 +306,13 @@ export class DashboardComponent implements OnInit {
   }
 
   goToAsset(id: string) {
-    this.router.navigate(["/assets"], { queryParams: { id: id } });
+    this.router.navigate(['/assets'], { queryParams: { id: id } });
+  }
+
+  getTariffPeriod(tarifa: Tariff) {
+    const inicio = this.datePipe.transform(new Date(tarifa.tarifa_actual.vigencia.inicio), 'dd/MMM/yy', '+0000')
+    const fin = this.datePipe.transform(new Date(tarifa.tarifa_actual.vigencia.fin), 'dd/MMM/yy', '+0000')
+    const period = `Vigencia: ${inicio} - ${fin}`;
+    return period;
   }
 }

+ 1 - 1
src/app/components/plugins/icon-card/icon-card.component.html

@@ -9,7 +9,7 @@
     </h3>
   </div>
   <div class="card-footer">
-    <div class="stats">
+    <div class="card-stats">
       {{footer}}
     </div>
   </div>

+ 1 - 0
src/assets/scss/material-dashboard.scss

@@ -71,6 +71,7 @@
 .white-skin {
   background-color: $white;
   border-color: #104911 !important;
+  color: #000;
 }
 
 .yellow-skin {