250 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			250 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Component, OnInit, ViewChild } from "@angular/core";
 | |
| import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
 | |
| import { TableApiService } from "src/app/_services/table-api.service";
 | |
| import { ModalAddEditComponent } from "./modal-add-edit/modal-add-edit.component";
 | |
| import { ActivatedRoute, Router } from "@angular/router";
 | |
| import { BuildingService } from "../service/monitoring-api.service";
 | |
| import { DeviceService } from "../service/device.service";
 | |
| import { ToastrService } from "ngx-toastr";
 | |
| import * as FileSaver from "file-saver";
 | |
| import * as XLSX from "xlsx";
 | |
| import { TableexcelService } from "src/app/_services/tableexcel.service";
 | |
| 
 | |
| @Component({
 | |
|   selector: "app-device",
 | |
|   templateUrl: "./device.component.html",
 | |
|   styleUrls: ["./device.component.css"],
 | |
| })
 | |
| export class DeviceComponent implements OnInit {
 | |
|   data: any;
 | |
|   totalOn: any;
 | |
|   totalOff: any;
 | |
|   filteredRows: any[];
 | |
|   searchTerm: string = "";
 | |
|   buildingSelected: any;
 | |
|   statusSelected: any;
 | |
|   categorySelected: any;
 | |
|   dataMasterCategori: any;
 | |
|   dataBuildingList: any;
 | |
|   dataMasterStatus: any;
 | |
|   data_device: any;
 | |
|   spinnerFilterActive = false;
 | |
|   storedData: any;
 | |
| 
 | |
|   rows: any = [];
 | |
|   public breadcrumb: any;
 | |
|   spinnerActive: boolean = false;
 | |
|   spinnerExportActive: boolean = false;
 | |
| 
 | |
|   singlebasicSelected: any;
 | |
| 
 | |
|   constructor(
 | |
|     private modalService: NgbModal,
 | |
|     private router: Router,
 | |
|     private monitoringApiService: BuildingService,
 | |
|     private deviceService: DeviceService,
 | |
|     private toastr: ToastrService,
 | |
|     private tableexcelService: TableexcelService
 | |
|   ) {}
 | |
| 
 | |
|   ngOnInit() {
 | |
|     this.breadcrumb = {
 | |
|       mainlabel: "Device",
 | |
|       links: [
 | |
|         {
 | |
|           name: "Home",
 | |
|           isLink: false,
 | |
|           link: "/dashboard/sales",
 | |
|         },
 | |
|         {
 | |
|           name: "Device",
 | |
|           isLink: false,
 | |
|         },
 | |
|       ],
 | |
|     };
 | |
|     this.storedData = JSON.parse(localStorage.getItem("currentUser"));
 | |
|     this.buildingSelected = this.storedData.buildingId;
 | |
|     this.fetchData(
 | |
|       this.buildingSelected,
 | |
|       this.categorySelected,
 | |
|       this.statusSelected
 | |
|     );
 | |
|     this.dataListMaster();
 | |
|     this.dataListBuilding();
 | |
|   }
 | |
| 
 | |
|   fetchData(buildingSelected, categorySelected, statusSelected) {
 | |
|     this.deviceService
 | |
|       .getDeviceData(buildingSelected, categorySelected, statusSelected)
 | |
|       .subscribe((res) => {
 | |
|         this.data = res;
 | |
|         this.filteredRows = this.data.results.data;
 | |
|         this.data_device = this.filteredRows.map((item) => ({
 | |
|           buildingName: item.building_name,
 | |
|           id: item.id,
 | |
|           name: item.name,
 | |
|           icon: item.icon,
 | |
|           watt: item.watt,
 | |
|           categoryName: item.category_name,
 | |
|           typeName: item.type_name,
 | |
|           voltageName: item.voltage_name,
 | |
|           statusName: item.status_name,
 | |
|         }));
 | |
|         this.totalOn = this.filteredRows.filter(
 | |
|           (row) => row.status_id === 2
 | |
|         ).length;
 | |
|         this.totalOff = this.filteredRows.filter(
 | |
|           (row) => row.status_id === 3
 | |
|         ).length;
 | |
|       });
 | |
|   }
 | |
| 
 | |
|   dataListMaster() {
 | |
|     this.monitoringApiService.getMasterListData().subscribe((data) => {
 | |
|       const dataCategory = data.data.find(
 | |
|         (item) => item.name === "master_category"
 | |
|       ).headerDetailParam;
 | |
|       const dataStatus = data.data.find(
 | |
|         (item) => item.name === "master_status"
 | |
|       ).headerDetailParam;
 | |
|       this.dataMasterCategori = dataCategory.filter(
 | |
|         (item) => item.status === "2"
 | |
|       );
 | |
|       this.dataMasterStatus = dataStatus.filter((item) => item.status === "2");
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   dataListBuilding() {
 | |
|     this.monitoringApiService.getBuildingList().subscribe((data) => {
 | |
|       this.dataBuildingList = data.data.filter((item) => item.statusId === 2);
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   doFilter() {
 | |
|     if (!this.buildingSelected) {
 | |
|       this.toastr.error("Warning", "Filter Building tidak boleh kosong.", {
 | |
|         timeOut: 5000,
 | |
|         closeButton: true,
 | |
|       });
 | |
|     } else {
 | |
|       this.spinnerFilterActive = true;
 | |
|       this.fetchData(
 | |
|         this.buildingSelected,
 | |
|         this.categorySelected,
 | |
|         this.statusSelected
 | |
|       );
 | |
|       setTimeout(() => {
 | |
|         this.spinnerFilterActive = false;
 | |
|       }, 3000);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   doCancelFilter() {
 | |
|     this.storedData = JSON.parse(localStorage.getItem("currentUser"));
 | |
|     this.buildingSelected = this.storedData.buildingId;
 | |
|     this.categorySelected = undefined;
 | |
|     this.statusSelected = undefined;
 | |
|     this.fetchData(this.buildingSelected, 0, 0);
 | |
|   }
 | |
| 
 | |
|   filterRows() {
 | |
|     if (!this.searchTerm) {
 | |
|       this.filteredRows = [...this.data.results.data];
 | |
|     } else {
 | |
|       this.filteredRows = this.data.results.data.filter((row) =>
 | |
|         this.rowContainsSearchTerm(row)
 | |
|       );
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   rowContainsSearchTerm(row: any): boolean {
 | |
|     const searchTermLC = this.searchTerm.toLowerCase();
 | |
|     return Object.values(row).some(
 | |
|       (value) =>
 | |
|         value !== null && value.toString().toLowerCase().includes(searchTermLC)
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   addFieldValue() {
 | |
|     const modalRef = this.modalService.open(ModalAddEditComponent, {
 | |
|       size: "lg",
 | |
|     });
 | |
|     modalRef.componentInstance.newAttribute = {
 | |
|       id: null,
 | |
|       name: "",
 | |
|       position: "",
 | |
|       office: "",
 | |
|       age: "",
 | |
|       salary: "",
 | |
|       startdate: "",
 | |
|     };
 | |
| 
 | |
|     modalRef.result.then(
 | |
|       (result) => {
 | |
|         if (result) {
 | |
|           this.rows.push(result);
 | |
|           this.rows = [...this.rows];
 | |
|         }
 | |
|       },
 | |
|       (reason) => {
 | |
|         console.log(`Dismissed: ${reason}`);
 | |
|       }
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   viewRow(row) {
 | |
|     this.router.navigate(["/device/view", row.id]);
 | |
|   }
 | |
| 
 | |
|   editRow(row) {
 | |
|     this.router.navigate(["/device/edit", row.id]);
 | |
|   }
 | |
| 
 | |
|   deleteRow(row) {
 | |
|     console.log("Delete row:", row);
 | |
|   }
 | |
| 
 | |
|   addDevice(): void {
 | |
|     // Aktifkan spinner
 | |
|     this.spinnerActive = true;
 | |
|     this.deviceService.getSyncDeviceData().subscribe((res) => {
 | |
|       console.log(res);
 | |
|     });
 | |
| 
 | |
|     setTimeout(() => {
 | |
|       this.spinnerActive = false;
 | |
|       this.toastr.success("Success", "Sync Completed.", {
 | |
|         timeOut: 2000,
 | |
|         closeButton: true,
 | |
|       });
 | |
|       this.fetchData(
 | |
|         this.buildingSelected,
 | |
|         this.categorySelected,
 | |
|         this.statusSelected
 | |
|       );
 | |
|     }, 3000);
 | |
|   }
 | |
| 
 | |
|   exportDevice() {
 | |
|     this.spinnerExportActive = true;
 | |
|     setTimeout(() => {
 | |
|       const columnsToExport = [
 | |
|         "name",
 | |
|         "building_name",
 | |
|         "room_name",
 | |
|         "watt",
 | |
|         "category_name",
 | |
|         "status_name",
 | |
|         "type_name",
 | |
|         "voltage_name",
 | |
|       ];
 | |
|       this.tableexcelService.exportAsExcelFileDevice(
 | |
|         this.filteredRows,
 | |
|         "Smart_building_list_device",
 | |
|         columnsToExport
 | |
|       );
 | |
|       this.spinnerExportActive = false;
 | |
|     }, 3000);
 | |
|   }
 | |
| }
 |