| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- 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 {
- latLng,
- tileLayer,
- marker,
- Layer,
- icon,
- Map,
- latLngBounds,
- LatLng,
- point,
- } 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 { of as observableOf, Observable, throwError, from } from "rxjs";
- import * as moment from "moment";
- import Swal from "sweetalert2";
- import { RatesService } from "@app/services/rates.service";
- @Component({
- selector: "app-dashboard",
- templateUrl: "./dashboard.component.html",
- styleUrls: ["./dashboard.component.scss"],
- })
- export class DashboardComponent implements OnInit {
- title = "Dashboard";
- listData: any;
- rows = [];
- markers: Layer[] = [];
- points: LatLng[] = [];
- listAssets: any;
- dataSource = new MatTableDataSource(this.listAssets);
- displayedColumns: string[] = ["name", "country", "city", "id"];
- error: boolean;
- listOrganizations: any;
- plantId: string;
- plant: any;
- sub: any;
- plantNotFound: boolean;
- selectedPlant: any;
- meterKeys: any;
- meterKeys2: any;
- assetKeys: any;
- sumarize: number = 0;
- totalInstalled: number = 0;
- totalMetersInstalled: string;
- lastUpdate = new Date().toLocaleString();
- i: number;
- // Leajflet map
- icon = icon({
- iconSize: [25, 41],
- iconAnchor: [13, 41],
- 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", {
- maxZoom: 18,
- attribution: "© OpenStreetMap contributors",
- });
- // Values to bind to Leaflet Directive
- options = {
- layers: [this.LAYER_OSM],
- zoom: 10,
- center: latLng([13.661714, -89.25153]),
- };
- @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
- @ViewChild(MatSort, { static: true }) sort: MatSort;
- userLevel: number;
- totalAssetsInstalled: any;
- rates: Rate = {
- distribuidora: "-",
- codigo_tarifa: "-",
- tarifa_actual: {
- dateMin: null,
- dateMax: null,
- cargo_energia: null,
- cargo_energia_b1: null,
- cargo_energia_b2: null,
- cargo_energia_b3: null,
- cargo_energia_punta: null,
- cargo_energia_resto: null,
- cargo_energia_valle: null,
- },
- incremento_porcentaje: {
- cargo_energia: null,
- cargo_energia_b1: null,
- cargo_energia_b2: null,
- cargo_energia_b3: null,
- cargo_energia_punta: null,
- cargo_energia_resto: null,
- cargo_energia_valle: null,
- },
- };
- defaultRates: boolean;
- constructor(
- private plantsService: PlantsService,
- private route: ActivatedRoute,
- private orgService: OrganizationsService,
- private router: Router,
- private zone: NgZone,
- private authService: AuthService,
- private ratesService: RatesService
- ) {
- //DEMO
- this.userLevel = +this.authService.getUserLevel();
- Swal.fire({
- allowOutsideClick: false,
- type: "info",
- text: "Espere por favor...",
- });
- Swal.showLoading();
- this.plantsService.getAllAssets().subscribe(
- (res) => {
- if (res != null) {
- this.listAssets = res["data"]["assets"];
- this.dataSource.data = this.listAssets;
- this.dataSource.paginator = this.paginator;
- this.dataSource.sort = this.sort;
- this.assetKeys = Object.keys(this.listAssets);
- //DEMO
- if (this.userLevel == 0) {
- this.sumarize = 320;
- this.totalAssetsInstalled = 1;
- } else {
- this.totalAssetsInstalled = this.listAssets.length || 0;
- for (let prop in this.assetKeys) {
- this.meterKeys2 = Object.keys(
- 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"])[
- prop2
- ];
- //this.totalMetersInstalled = this.sumarize.toString();
- //localStorage.setItem("installedCapacityTotal_kW", this.totalMetersInstalled);
- }
- }
- }
- }
- }
- setTimeout(() => {
- if (this.listAssets != undefined) {
- this.addMarkers();
- this.sendPlantId(this.listAssets[0].id);
- }
- Swal.close();
- }, 1800);
- },
- (err) => {
- Swal.fire({
- type: "error",
- title: "Error en el servidor",
- text: err.message,
- });
- }
- );
- }
- ngOnInit() {
- setTimeout(() => {
- Swal.close();
- }, 3000);
- this.ratesService.getDefaultRate().subscribe((res) => {
- this.rates = res["data"];
- this.defaultRates = true;
- });
- var responsiveOptions: any[] = [
- [
- "screen and (max-width: 640px)",
- {
- seriesBarDistance: 5,
- axisX: {
- labelInterpolationFnc: function (value) {
- return value[0];
- },
- },
- },
- ],
- ];
- }
- ngOnChanges(): void {
- if (this.listAssets != undefined) {
- this.addMarkers();
- this.sendPlantId(this.listAssets[0].id);
- }
- }
- getAsset(id: string) {
- return observableOf(this.listAssets.find((e) => e.id === id));
- }
- addMarkers() {
- let lat, long, address, name2;
- for (const plant of this.listAssets) {
- if (plant["meters_installed"].length > 0) {
- // DEMO
- if (this.userLevel == 0) {
- 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";
- } else {
- 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", () => {
- this.zone.run(() => {
- this.sendPlantId(plant.id);
- });
- });
- this.points.push(latLng([lat, long]));
- this.markers.push(newMarker);
- }
- }
- }
- sendPlantId(id: string) {
- this.plantId = id;
- // DEMO
- if (this.userLevel == 0) {
- this.selectedPlant = {
- 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",
- installedCapacity_kW: 300,
- };
- this.totalInstalled = 320;
- } else {
- this.totalInstalled = 0;
- this.selectedPlant = this.listAssets.find((e) => e.id === this.plantId);
- let keys = Object.keys(
- this.selectedPlant.meters_installed.map(
- (item) => item["meters_installed"]
- )
- );
- for (let prop2 in keys) {
- this.totalInstalled += this.selectedPlant.meters_installed.map(
- (response) => response["installedCapacity_kW"]
- )[prop2];
- }
- }
- }
- onMapReady(map: Map) {
- setTimeout(() => {
- map.invalidateSize();
- }, 0);
- const bounds = latLngBounds(this.points);
- //map.fitBounds(bounds, {
- // padding: point(24, 24),
- // maxZoom: 9.5,
- // animate: true
- //});
- }
- goToAsset(id: string) {
- this.router.navigate(["/assets"], { queryParams: { id: id } });
- }
- }
|