diff --git a/src/app/content/hemat-app/list-monitoring/add-edit-list/add-edit-list.component.ts b/src/app/content/hemat-app/list-monitoring/add-edit-list/add-edit-list.component.ts index 9462886..971b365 100644 --- a/src/app/content/hemat-app/list-monitoring/add-edit-list/add-edit-list.component.ts +++ b/src/app/content/hemat-app/list-monitoring/add-edit-list/add-edit-list.component.ts @@ -320,7 +320,7 @@ export class AddEditListComponent { } else { delete this.projectInfo.value.userArray; this.monitoringApiService - .puttBuildingRoom(this.projectInfo.value, this.roombuildingId) + .putBuildingRoom(this.projectInfo.value, this.roombuildingId) .subscribe((data) => { this.router.navigate(["/list-monitoring"]); }); diff --git a/src/app/content/hemat-app/monitoring/detail/detail.component.ts b/src/app/content/hemat-app/monitoring/detail/detail.component.ts index 3fca4c0..74b0e72 100644 --- a/src/app/content/hemat-app/monitoring/detail/detail.component.ts +++ b/src/app/content/hemat-app/monitoring/detail/detail.component.ts @@ -66,7 +66,6 @@ export class DetailComponent { private currencyPipe: CurrencyPipe, private router: Router, private authService: LoginService, - private deviceService: DeviceService ) {} get formattedSummaryCost(): string { diff --git a/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.css b/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.css new file mode 100644 index 0000000..ba00b75 --- /dev/null +++ b/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.css @@ -0,0 +1,444 @@ +:host ::ng-deep .progress-bar { + background-color: #bef264 !important; +} + +:host ::ng-deep .donut-chart2 .ct-series-a .ct-slice-donut { + stroke: #8a8a8a; + stroke-width: 20px !important; +} + +:host ::ng-deep .donut-chart2 .ct-series-b .ct-slice-donut { + stroke: #bef264; + stroke-width: 20px !important; +} + +:host ::ng-deep .donut-chart2 .ct-label { + fill: #ffffff; + color: rgb(255, 255, 255); + font-size: 12px; + line-height: 1; +} + +:host ::ng-deep .sp-line-total-cost .ct-series-a .ct-point { + stroke: #bef264; +} + +:host ::ng-deep .sp-line-total-cost .ct-series-a .ct-line { + stroke: #bef264; +} + +:host ::ng-deep .sp-line-total-cost .ct-series-a .ct-area { + fill: #bef264; + fill-opacity: 1; +} + +:host ::ng-deep .sp-line-total-cost .ct-point { + stroke-width: 0px; +} + +.ct-chart-bar .ct-series .ct-bar { + stroke-width: 20px !important; /* Atur lebar bar sesuai kebutuhan */ +} + +.ct-chart-bar .ct-label.ct-horizontal { + margin-left: -10px !important; /* Mengatur margin label horizontal */ + margin-right: -10px !important; +} + +:host ::ng-deep .donut-chart3 .ct-series-a .ct-bar { + stroke: #bef264; + fill: none; + stroke-width: 30px; +} + +:host ::ng-deep .donut-chart3 .ct-series-b .ct-bar { + stroke: #bef264; + fill: none; + stroke-width: 30px; +} + +:host ::ng-deep .donut-chart3 .ct-label { + fill: #ffffff; + color: rgb(255, 255, 255); + font-size: 12px; + line-height: 1; + margin-right: 20px; +} + +:host ::ng-deep .ct-label.ct-horizontal { + font-size: 12px; /* Adjust font size */ + transform: rotate(-45deg); /* Rotate labels if needed for better fit */ + text-anchor: end; + margin-top: 10px; +} + +:host ::ng-deep .ct-chart-bar .ct-labels .ct-label.ct-horizontal { + margin-right: 20px; /* Adjust margin for labels */ +} + +.chart-title { + font-size: 18px; + margin-bottom: 10px; + font-weight: bold; +} + +/* Hide the default calendar icon */ +input[type="month"]::-webkit-calendar-picker-indicator { + background-color: #ffffff; +} + +/* table */ +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-header + .datatable-header-cell + .datatable-header-cell-label { + font-family: inherit; + font-size: medium; + font-weight: bold; + color: #6b6f82; +} +:host ::ng-deep .ngx-datatable .datatable-row-center, +.ngx-datatable .datatable-row-group, +.ngx-datatable .datatable-row-right { + position: relative; + height: 50px !important; +} + +:host ::ng-deep .datatable-icon-right:before { + font-family: "icofont"; + font-style: normal; +} + +:host ::ng-deep .datatable-icon-skip:before { + font-family: "icofont"; + font-style: normal; +} + +:host ::ng-deep .datatable-icon-left:before { + font-family: "icofont"; + font-style: normal; +} + +:host ::ng-deep .datatable-icon-left:before { + content: "\2039"; + font-size: x-large; +} + +:host ::ng-deep .datatable-icon-prev:before { + content: "\00AB"; + font-size: x-large; +} + +:host ::ng-deep .datatable-icon-right:before { + content: "\203A"; + font-size: x-large; +} + +:host ::ng-deep .datatable-icon-skip:before { + content: "\00BB"; + font-size: x-large; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-left, +.ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-right, +.ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-prev { + font-size: 16px; + line-height: 22px; + padding: 0px 09px; + background-color: #d4d2e7; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-right, +.ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-right { + font-size: 16px; + line-height: 22px; + padding: 0px 09px; + background-color: #d4d2e7; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-skip { + font-size: 16px; + line-height: 22px; + padding: 0px 09px; + background-color: #d4d2e7; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-prev { + font-size: 16px; + line-height: 22px; + padding: 0px 09px; + background-color: #d4d2e7; +} + +:host + ::ng-deep + .datatable-footer + .datatable-pager + ul + li:not(.disabled).active + a, +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + ul[_ngcontent-c11] + li[_ngcontent-c11]:not(.disabled):hover + a[_ngcontent-c11] { + background-color: #d4d2e7; + font-weight: bold; + font-size: larger; +} + +:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer .datatable-pager a { + height: 32px; + min-width: 34px; + line-height: 22px; + padding: 0; + border-radius: 3px; + margin: 0 3px; + text-align: center; + vertical-align: top; + padding-top: 3px; + text-decoration: none; + vertical-align: bottom; + color: #7c8091; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-left, +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-right[_ngcontent-c11], +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-prev[_ngcontent-c11] { + font-size: 14px; + line-height: 9px; + padding: 0px 08px; + background-color: #ffffff; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-left, +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-right[_ngcontent-c11], +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-prev[_ngcontent-c11] { + font-size: 0px; + line-height: 22px; + padding: 0px 09px; + background-color: #ffffff; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-right, +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-right[_ngcontent-c11], +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-prev[_ngcontent-c11] { + font-size: 0px; + line-height: 22px; + padding: 0px 09px; + background-color: #ffffff; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-skip, +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-right[_ngcontent-c11], +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-prev[_ngcontent-c11] { + font-size: 0px; + line-height: 22px; + padding: 0px 09px; + background-color: #ffffff; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + .datatable-icon-prev, +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-right[_ngcontent-c11], +.ngx-datatable.bootstrap[_ngcontent-c11] + .datatable-footer[_ngcontent-c11] + .datatable-pager[_ngcontent-c11] + .datatable-icon-prev[_ngcontent-c11] { + font-size: 0px; + line-height: 22px; + padding: 0px 09px; + background-color: #ffffff; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + ul + li:not(.disabled):hover + a { + background-color: #545454; + font-weight: bold; + color: white; +} + +:host + ::ng-deep + .ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + ul + li:not(.disabled).active + a, +.ngx-datatable.bootstrap + .datatable-footer + .datatable-pager + ul + li:not(.disabled):hover + a { + background-color: #252525; + font-weight: bold; + color: white; +} + +:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer { + background: #DDE1E6; + color: #242222; + margin-top: -1px; + overflow: inherit; +} + +:host ::ng-deep .ngx-datatable.bootstrap .datatable-header { + background: #DDE1E6; + color: #242222; + font-weight: bold; + height: unset !important; + overflow: inherit; +} + +:host ::ng-deep .ngx-datatable .datatable-footer .datatable-pager { + flex: 0 0 0%; +} + +:host ::ng-deep .ngx-datatable .datatable-footer .datatable-pager .pager { + display: flex; +} + +:host + ::ng-deep + .ngx-datatable + .datatable-footer + .selected-count + .datatable-pager { + flex: 0 0 0%; +} + +:host ::ng-deep .ngx-datatable { + display: -webkit-box; +} + +:host ::ng-deep .ng-select .ng-select-container { + color: #242222 !important; + background-color: #FBFBFB !important; + height: 40px !important; + border-radius: 12px !important; + box-shadow: 0 2px 4px rgba(36, 34, 34, 0.2) !important; /* Bayangan lebih tipis */ +} + +:host ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input>input { + color: #242222 !important; +} + +:host ::ng-deep .ngx-datatable.bootstrap .datatable-body-row { + background-color: #FBFBFB; /* Black color for table rows */ +} + +:host ::ng-deep .ngx-datatable.bootstrap .datatable-body-row:hover { + background-color: #DDE1E6; /* Darker black for hover effect */ +} + +.text-custom-label{ + color: #242222 !important; + font-family: "Open Sans", sans-serif !important; + font-size: 16px; +} + +.text-custom-data{ + color: #242222 !important; + font-family: "Open Sans", sans-serif !important; + font-size: 24px; + font-weight: 700; +} + +.style-custom-label{ + color: #242222 !important; +} + +::ng-deep .modal-backdrop.show { + z-index: auto !important; +} diff --git a/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.html b/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.html new file mode 100644 index 0000000..bf30cfe --- /dev/null +++ b/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.html @@ -0,0 +1,156 @@ + + diff --git a/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.spec.ts b/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.spec.ts new file mode 100644 index 0000000..676c92a --- /dev/null +++ b/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ModalExportComponent } from './modal-export.component'; + +describe('ModalExportComponent', () => { + let component: ModalExportComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ModalExportComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ModalExportComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.ts b/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.ts new file mode 100644 index 0000000..a6434b1 --- /dev/null +++ b/src/app/content/hemat-app/monitoring/modal-export/modal-export.component.ts @@ -0,0 +1,103 @@ +import { Component, Input } from "@angular/core"; +import { NgbActiveModal } from "@ng-bootstrap/ng-bootstrap"; +import { DeviceService } from "../../service/device.service"; +import { CostManagementService } from "../../service/cost-management.service"; +import { TableexcelService } from "src/app/_services/tableexcel.service"; +import { LoginService } from "../../service/login.service"; + +@Component({ + selector: "app-modal-export", + templateUrl: "./modal-export.component.html", + styleUrls: ["./modal-export.component.css"], +}) +export class ModalExportComponent { + @Input() buildingId: number; + @Input() dataRow: any; + data: any; + filteredRows: any[]; + data_device: any[]; + kwhTerm: string = ""; + costTerm: string = ""; + data_cost: any; + dataExport: any; + formattedEndDate: any; + spinnerExportActive = false; + constructor( + public activeModal: NgbActiveModal, + private costService: CostManagementService, + private tableexcelService: TableexcelService, + private authService: LoginService + ) {} + + ngOnInit() { + this.authService.startTokenCheck(); + this.authService.startTrackingActivity(); + const dateRow = this.convertToUTC7(this.dataRow.endDate) + this.formattedEndDate = dateRow.slice(0, 7); + } + + ngAfterViewInit(): void { + console.log(this.dataRow); + this.fetchData( + this.dataRow.categoryId, + this.dataRow.roomId, + this.formattedEndDate + ); + } + + fetchData(category, room, period) { + this.costService + .getCostDetail(category, room, period) + .subscribe((response) => { + this.dataExport = response.data; + console.log(this.dataExport); + this.data_cost = response.data.map((item) => ({ + deviceName: item.device_name, + roomName: item.room_name, + categoryName: item.category_name, + estimationCost: item.estimation_cost, + totalKwh: item.total_kwh, + watt: item.watt, + duration: item.duration, + priceKwh: item.price_kwh, + // periode: item.periode, + periode: this.convertToUTC7(item.periode) + })); + console.log(this.data_cost); + + }); + } + + convertToUTC7(dateString: string): string { + const date = new Date(dateString); + const utc7Offset = 7 * 60; // UTC+7 in minutes + const localOffset = date.getTimezoneOffset(); + const totalOffset = utc7Offset - localOffset; + const utc7Date = new Date(date.getTime() + totalOffset * 60 * 1000); + return utc7Date.toISOString(); + } + + export() { + this.spinnerExportActive = true; + setTimeout(() => { + const columnsToExport = [ + "periode", + "deviceName", + "roomName", + "categoryName", + "estimationCost", + "totalKwh", + "watt", + "duration", + "priceKwh", + ]; + this.tableexcelService.exportAsExcelFileManageDetail( + this.data_cost, + "export_detail_cost_management", + columnsToExport + ); + this.spinnerExportActive = false; + this.activeModal.close("Export completed"); + }, 3000); + } +} diff --git a/src/app/content/hemat-app/monitoring/monitoring.module.ts b/src/app/content/hemat-app/monitoring/monitoring.module.ts index eea419e..b9a1067 100644 --- a/src/app/content/hemat-app/monitoring/monitoring.module.ts +++ b/src/app/content/hemat-app/monitoring/monitoring.module.ts @@ -30,6 +30,7 @@ import { ControlDeviceSeemoreComponent } from './control-device-seemore/control- import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { HttpErrorInterceptorService } from 'src/app/interceptors/http-error-interceptor.service'; import { ClipboardModule } from 'ngx-clipboard'; +import { ModalExportComponent } from './modal-export/modal-export.component'; @NgModule({ declarations: [ @@ -40,7 +41,8 @@ import { ClipboardModule } from 'ngx-clipboard'; FilterTopUsePipe, SurveillanceComponent, WaterComponent, - ControlDeviceSeemoreComponent + ControlDeviceSeemoreComponent, + ModalExportComponent ], imports: [ CommonModule, diff --git a/src/app/content/hemat-app/service/energy-monitoring.service.ts b/src/app/content/hemat-app/service/energy-monitoring.service.ts index 511519f..90386e3 100644 --- a/src/app/content/hemat-app/service/energy-monitoring.service.ts +++ b/src/app/content/hemat-app/service/energy-monitoring.service.ts @@ -1,73 +1,46 @@ import { Injectable } from "@angular/core"; -import { HttpClient, HttpHeaders } from "@angular/common/http"; +import { HttpClient, HttpHeaders } from "@angular/common/http"; import { Observable } from "rxjs"; @Injectable({ providedIn: "root", }) export class EnergyMonitoringService { + private readonly baseUrl = 'https://kapi.absys.ninja/hemat'; + private readonly apiKey = 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT'; + private readonly headers = new HttpHeaders({ + 'Content-Type': 'application/json', + 'x-api-key': this.apiKey + }); + constructor(private http: HttpClient) {} + private get(endpoint: string, params: any = {}): Observable { + const url = `${this.baseUrl}/${endpoint}`; + return this.http.get(url, { headers: this.headers, params }); + } + getListRoomData(): Observable { - const url = `https://kapi.absys.ninja/hemat/room/list`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); + return this.get('room/list'); } - getDashboardTopCard(building_id, floor_id, room_id): Observable { - const url = `https://kapi.absys.ninja/hemat/dashboard/top-card?building_id=${building_id}&floor_id=${floor_id}&room_id=${room_id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); + getDashboardTopCard(buildingId: string, floorId: string, roomId: string): Observable { + return this.get('dashboard/top-card', { building_id: buildingId, floor_id: floorId, room_id: roomId }); } - getDashboardSummary(building_id, floor_id, room_id): Observable { - const url = `https://kapi.absys.ninja/hemat/dashboard/summary-cost?building_id=${building_id}&floor_id=${floor_id}&room_id=${room_id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); + getDashboardSummary(buildingId: string, floorId: string, roomId: string): Observable { + return this.get('dashboard/summary-cost', { building_id: buildingId, floor_id: floorId, room_id: roomId }); } - // getDashboardTemperature(id): Observable { - // const url = `https://kapi.absys.ninja/hemat/dashboard/temperature-humidity?building_id=${id}`; - // const headers = new HttpHeaders({ - // 'Content-Type': 'application/json', - // 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - // }); - // return this.http.get(url, { headers }); - // } - - getDashboardDeviceCategory(building_id, floor_id, room_id): Observable { - const url = `https://kapi.absys.ninja/hemat/dashboard/device-category-use?building_id=${building_id}&floor_id=${floor_id}&room_id=${room_id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); - } - getDashboardChartKwhWater(building_id, floor_id, room_id): Observable { - const url = `https://kapi.absys.ninja/hemat/dashboard/chartKwhWater?building_id=${building_id}&floor_id=${floor_id}&room_id=${room_id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); + getDashboardDeviceCategory(buildingId: string, floorId: string, roomId: string): Observable { + return this.get('dashboard/device-category-use', { building_id: buildingId, floor_id: floorId, room_id: roomId }); } - getDeviceStatus(id): Observable { - const endpoint = `devices`; - const url = `https://kapi.absys.ninja/hemat/${endpoint}/status?id=${id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); + getDashboardChartKwhWater(buildingId: string, floorId: string, roomId: string): Observable { + return this.get('dashboard/chartKwhWater', { building_id: buildingId, floor_id: floorId, room_id: roomId }); + } + + getDeviceStatus(deviceId: any): Observable { + return this.get('devices/status', { id: deviceId }); } } diff --git a/src/app/content/hemat-app/service/master-api.service.ts b/src/app/content/hemat-app/service/master-api.service.ts index 93c1f65..9d226b9 100644 --- a/src/app/content/hemat-app/service/master-api.service.ts +++ b/src/app/content/hemat-app/service/master-api.service.ts @@ -14,131 +14,6 @@ export class MasterService { this.loadDataIcon = `${this.apiBaseURL}/hemat/remixicons.json`; } - getMasterListData(): Observable { - const url = `https://kapi.absys.ninja/hemat/header-param/list`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); - } - - getMasterData(page: number = 1, limit: number = 100): Observable { - const url = `https://kapi.absys.ninja/hemat/header-param?page=${page}&limit=${limit}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); - } - - postHeaderDetailParam(data: any): Observable { - const url = `https://kapi.absys.ninja/hemat/header-detail-param`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.post(url, data, { headers }); - } - putHeaderDetailParam(data: any, id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/header-detail-param/${id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.put(url, data, { headers }); - } - - deleteHeaderDetailParam(id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/header-detail-param/${id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.delete(url, { headers }); - } - - postMasterBuildingParam(data: any): Observable { - const url = `https://kapi.absys.ninja/hemat/building`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.post(url, data, { headers }); - } - - getMasterBuildingData(page: number = 1, limit: number = 100): Observable { - const url = `https://kapi.absys.ninja/hemat/building?page=${page}&limit=${limit}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); - } - - getBuildingList(): Observable { - const url = `https://kapi.absys.ninja/hemat/building/list`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); - } - - putMasterBuildingParam(data: any, id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/building/${id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.put(url, data, { headers }); - } - - deleteMasterBuildingParam(id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/building/${id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.delete(url, { headers }); - } - - postMasterRoomParam(data: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.post(url, data, { headers }); - } - - putMasterRoomParam(data: any, id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room/${id}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.put(url, data, { headers }); - } - - getListRoomData(): Observable { - const url = `https://kapi.absys.ninja/hemat/room/list`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); - } - - getMasterRoomData(page: number = 1, limit: number = 100): Observable { - const url = `https://kapi.absys.ninja/hemat/room?page=${page}&limit=${limit}`; - const headers = new HttpHeaders({ - 'Content-Type': 'application/json', - 'x-api-key': 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT' - }); - return this.http.get(url, { headers }); - } - getIconData(): Observable { return this.http.get(this.loadDataIcon, httpOptions); } diff --git a/src/app/content/hemat-app/service/monitoring-api.service.ts b/src/app/content/hemat-app/service/monitoring-api.service.ts index 2301b82..ae1a260 100644 --- a/src/app/content/hemat-app/service/monitoring-api.service.ts +++ b/src/app/content/hemat-app/service/monitoring-api.service.ts @@ -2,290 +2,162 @@ import { Injectable } from "@angular/core"; import { HttpClient, HttpHeaders } from "@angular/common/http"; import { Observable } from "rxjs"; +const httpOptions = { + headers: new HttpHeaders({ 'Content-Type': 'application/json' }) +}; + @Injectable({ providedIn: "root", }) export class BuildingService { + private readonly apiBaseURL = 'https://kapi.absys.ninja/hemat'; + private readonly apiKey = 'j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT'; + private readonly headers = new HttpHeaders({ + "Content-Type": "application/json", + "x-api-key": this.apiKey, + }); + + loadDataIcon = null; + constructor(private http: HttpClient) {} + private get(endpoint: string, params: any = {}): Observable { + const url = `${this.apiBaseURL}/${endpoint}`; + return this.http.get(url, { headers: this.headers, params }); + } + + private post(endpoint: string, data: any): Observable { + const url = `${this.apiBaseURL}/${endpoint}`; + return this.http.post(url, data, { headers: this.headers }); + } + + private put(endpoint: string, data: any): Observable { + const url = `${this.apiBaseURL}/${endpoint}`; + return this.http.put(url, data, { headers: this.headers }); + } + + private delete(endpoint: string, params: any = {}): Observable { + const url = `${this.apiBaseURL}/${endpoint}`; + return this.http.delete(url, { headers: this.headers, params }); + } + postLogin(data: any): Observable { - const url = `https://kapi.absys.ninja/hemat/users/login`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.post(url, data, { headers }); + return this.post('users/login', data); } listBuilding(): Observable { - const url = `https://kapi.absys.ninja/hemat/building/dashboard/list`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + return this.get('building/dashboard/list'); } - getBuildingData(page: number = 1, limit: number = 10): Observable { - const url = `https://kapi.absys.ninja/hemat/building?page=${page}&limit=${limit}`; - // const headers = new HttpHeaders().set('Content-Type', 'application/json'); - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + getRoomByBuildingId(buildingId: string): Observable { + return this.get('room-building/list/byIds', { buildingId }); } - getRoomByBuildingId(buildingId: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room-building/list/byIds?buildingId=${buildingId}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); - } - - getDeviceById(deviceId: any): Observable { - const url = `https://kapi.absys.ninja/hemat/devices/${deviceId}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + getDeviceById(deviceId: string): Observable { + return this.get(`devices/${deviceId}`); } getMasterListData(): Observable { - const url = `https://kapi.absys.ninja/hemat/header-param/list`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + return this.get('header-param/list'); } getMasterData(page: number = 1, limit: number = 100): Observable { - const url = `https://kapi.absys.ninja/hemat/header-param?page=${page}&limit=${limit}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + return this.get('header-param', { page, limit }); } - getMasterDataListFloor(buildingId): Observable { - const url = `https://kapi.absys.ninja/hemat/header-detail-param/list?headerId=6&building_id=${buildingId}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + getMasterDataListFloor(buildingId: string): Observable { + return this.get('header-detail-param/list', { headerId: 6, building_id: buildingId }); } - getMasterBuildingData( - page: number = 1, - limit: number = 100 - ): Observable { - const url = `https://kapi.absys.ninja/hemat/building?page=${page}&limit=${limit}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + getMasterBuildingData(page: number = 1, limit: number = 100): Observable { + return this.get('building', { page, limit }); } getBuildingList(): Observable { - const url = `https://kapi.absys.ninja/hemat/building/list`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + return this.get('building/list'); } getListRoomData(): Observable { - const url = `https://kapi.absys.ninja/hemat/room/list`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + return this.get('room/list'); } getListRoomDataUnmap(): Observable { - const url = `https://kapi.absys.ninja/hemat/room/list/unmap`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + return this.get('room/list/unmap'); } - getListFloorDataUnmap(id): Observable { - const url = `https://kapi.absys.ninja/hemat/header-detail-param/list/unmap-room-building?headerId=${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + getListFloorDataUnmap(id: any): Observable { + return this.get('header-detail-param/list/unmap-room-building', { headerId: id }); } getMasterRoomData(page: number = 1, limit: number = 100): Observable { - const url = `https://kapi.absys.ninja/hemat/room?page=${page}&limit=${limit}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + return this.get('room', { page, limit }); } getCostManagement(page: number = 1, limit: number = 100): Observable { - const url = `https://kapi.absys.ninja/hemat/cost_management?page=${page}&limit=${limit}&building_id=4&periode=2024-06`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + return this.get('cost_management', { page, limit, building_id: 4, periode: '2024-06' }); } postHeaderDetailParam(data: any): Observable { - const url = `https://kapi.absys.ninja/hemat/header-detail-param`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.post(url, data, { headers }); - } - putHeaderDetailParam(data: any, id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/header-detail-param/${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.put(url, data, { headers }); + return this.post('header-detail-param', data); } - deleteHeaderDetailParam(id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/header-detail-param/${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.delete(url, { headers }); + putHeaderDetailParam(data: any, id: string): Observable { + return this.put(`header-detail-param/${id}`, data); + } + + deleteHeaderDetailParam(id: string): Observable { + return this.delete(`header-detail-param/${id}`); } postMasterBuildingParam(data: any): Observable { - const url = `https://kapi.absys.ninja/hemat/building`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.post(url, data, { headers }); - } - putMasterBuildingParam(data: any, id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/building/${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.put(url, data, { headers }); + return this.post('building', data); } - deleteMasterBuildingParam(id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/building/${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.delete(url, { headers }); + putMasterBuildingParam(data: any, id: string): Observable { + return this.put(`building/${id}`, data); + } + + deleteMasterBuildingParam(id: string): Observable { + return this.delete(`building/${id}`); } postMasterRoomParam(data: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.post(url, data, { headers }); - } - - putMasterRoomParam(data: any, id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room/${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.put(url, data, { headers }); + return this.post('room', data); } - deleteRoom(id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room/${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.delete(url, { headers }); + putMasterRoomParam(data: any, id: string): Observable { + return this.put(`room/${id}`, data); + } + + deleteRoom(id: string): Observable { + return this.delete(`room/${id}`); } postBatchBuilding(data: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room-building/post-batch/room`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.post(url, data, { headers }); + return this.post('room-building/post-batch/room', data); } getBuildingRoomList(page: number = 1, limit: number = 1000): Observable { - const url = `https://kapi.absys.ninja/hemat/room-building?page=${page}&limit=${limit}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + return this.get('room-building', { page, limit }); } - puttBuildingRoom(data: any, id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room-building/${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.put(url, data, { headers }); + putBuildingRoom(data: any, id: string): Observable { + return this.put(`room-building/${id}`, data); } - putDevice(data: any, id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/devices/${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.put(url, data, { headers }); + putDevice(data: any, id: string): Observable { + return this.put(`devices/${id}`, data); } - getRoomBuildingById(roomBuildingId: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room-building/${roomBuildingId}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.get(url, { headers }); + getRoomBuildingById(roomBuildingId: string): Observable { + return this.get(`room-building/${roomBuildingId}`); } - deleteRoomBuilding(id: any): Observable { - const url = `https://kapi.absys.ninja/hemat/room-building/${id}`; - const headers = new HttpHeaders({ - "Content-Type": "application/json", - "x-api-key": "j2yaYvPSQcsEEmHh3NEobfiXyyXmmnHT", - }); - return this.http.delete(url, { headers }); + deleteRoomBuilding(id: string): Observable { + return this.delete(`room-building/${id}`); } - getDevicesWithSwitchMapping(devices: any[]): any[] { - return devices.filter((device) => - device.mapping.some((map: any) => map.name.includes('switch')) - // device.mapping.some((map: any) => console.log(map)) - ); + getIconData(): Observable { + return this.http.get(this.loadDataIcon, httpOptions); } - - }