diff --git a/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.css b/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.css
new file mode 100644
index 0000000..fa6d7fd
--- /dev/null
+++ b/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.css
@@ -0,0 +1,56 @@
+/* modal-add-edit.component.css */
+::ng-deep .modal-backdrop.show {
+ z-index: auto !important;
+ }
+
+ ::ng-deep .input-group-append .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-radius: 0;
+ border-left: 0;
+ flex-grow: 0;
+ border-left: 1px solid #ced4da;
+ padding: 0.375rem 0.75rem;
+ }
+
+ ::ng-deep .input-group {
+ display: flex;
+ flex-wrap: nowrap; /* Prevents wrapping of the items */
+ align-items: center;
+ }
+
+ ::ng-deep .form-control {
+ flex-grow: 1; /* Ensures select takes up available space */
+ padding-right: 0.5rem;
+ }
+
+ ::ng-deep .input-group select,
+ ::ng-deep .input-group .input-group-append .btn {
+ padding-right: 5px; /* Adjust padding if necessary */
+ }
+
+ ::ng-deep .input-group .form-control {
+ margin-right: 2px; /* Adjust margin to make space */
+ }
+
+
+ .form-group {
+ margin-bottom: 1rem;
+ }
+
+ .form-control {
+ display: block;
+ width: 100%;
+ height: calc(1.5em + 0.75rem + 2px);
+ padding: 0.375rem 0.75rem;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #495057;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ced4da;
+ border-radius: 0.25rem;
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
+ }
+
\ No newline at end of file
diff --git a/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.html b/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.html
new file mode 100644
index 0000000..27d5378
--- /dev/null
+++ b/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.html
@@ -0,0 +1,55 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.spec.ts b/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.spec.ts
new file mode 100644
index 0000000..0e6033a
--- /dev/null
+++ b/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { AddEditMasterRoomComponent } from './add-edit-master-room.component';
+
+describe('AddEditMasterRoomComponent', () => {
+ let component: AddEditMasterRoomComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ AddEditMasterRoomComponent ]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(AddEditMasterRoomComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.ts b/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.ts
new file mode 100644
index 0000000..7876901
--- /dev/null
+++ b/src/app/content/hemat-app/master/master-room/add-edit-master-room/add-edit-master-room.component.ts
@@ -0,0 +1,78 @@
+import { Component, Input } from '@angular/core';
+import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { BuildingService } from '../../../service/monitoring-api.service';
+
+@Component({
+ selector: 'app-add-edit-master-room',
+ templateUrl: './add-edit-master-room.component.html',
+ styleUrls: ['./add-edit-master-room.component.css']
+})
+export class AddEditMasterRoomComponent {
+ @Input() dataRow: any;
+ @Input() mode: any;
+ myForm: FormGroup;
+
+ data: any;
+ dataStatus: any[];
+ filteredDataStatus: any[];
+ dataMasterStatus: any;
+
+ constructor(
+ public activeModal: NgbActiveModal,
+ private fb: FormBuilder,
+ private monitoringApiService: BuildingService
+ ) {}
+
+ ngOnInit() {
+ this.createForm();
+ this.listDataStatus();
+
+ if (this.dataRow) {
+ this.editForm();
+ }
+ }
+
+ createForm() {
+ this.myForm = this.fb.group({
+ name: ["", Validators.required],
+ // statusId: [0, Validators.required],
+ description: ["", Validators.required],
+ });
+ }
+
+ editForm() {
+ this.myForm = this.fb.group({
+ id: this.dataRow.id,
+ name: this.dataRow.name,
+ // statusId: this.dataRow.statusId,
+ description: this.dataRow.description,
+ });
+ }
+
+ listDataStatus() {
+ this.monitoringApiService.getMasterData().subscribe((res) => {
+ this.data = res.results.data;
+ this.dataMasterStatus = res.results.data.find(
+ (item) => item.name === "master_status"
+ );
+ this.dataStatus = this.dataMasterStatus.headerDetailParam;
+ this.filteredDataStatus = this.dataStatus.filter(
+ (item) => item.status === "1"
+ );
+ });
+ }
+
+ addRow() {
+ if (this.myForm.valid) {
+ this.activeModal.close(this.myForm.value);
+ }
+ }
+
+ addDepartment() {
+ let newDept = prompt("Enter new department name:");
+ if (newDept) {
+ alert(`Department ${newDept} added! (simulated)`);
+ }
+ }
+}
diff --git a/src/app/content/hemat-app/master/master-room/master-room.component.css b/src/app/content/hemat-app/master/master-room/master-room.component.css
index e69de29..bd893c0 100644
--- a/src/app/content/hemat-app/master/master-room/master-room.component.css
+++ b/src/app/content/hemat-app/master/master-room/master-room.component.css
@@ -0,0 +1,190 @@
+: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: #545454;
+ font-weight: bold;
+ color: white;
+}
+
+:host ::ng-deep .ngx-datatable.bootstrap .datatable-footer {
+ background: #727e8e;
+ color: #ededed;
+ margin-top: -1px;
+ overflow: inherit;
+}
+
+:host ::ng-deep .ngx-datatable.bootstrap .datatable-header {
+ 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 .block-ui-wrapper {
+ background: rgba(255, 249, 249, 0.5) !important;
+}
+:host ::ng-deep .ngx-datatable .datatable-footer .selected-count .datatable-pager {
+ flex: 0 0 0%;
+}
+
+:host ::ng-deep .ngx-datatable {
+ display: -webkit-box;
+}
+
diff --git a/src/app/content/hemat-app/master/master-room/master-room.component.html b/src/app/content/hemat-app/master/master-room/master-room.component.html
index 79ba11b..addf22b 100644
--- a/src/app/content/hemat-app/master/master-room/master-room.component.html
+++ b/src/app/content/hemat-app/master/master-room/master-room.component.html
@@ -1 +1,129 @@
-master-room works!
+
+
+
+
+
+
+
+
+
+ Master Building Table
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ rowIndex + 1 }}
+
+
+
+
+ Room Name
+
+
+ {{ value }}
+
+
+
+
+
+ Status
+
+
+ {{ value === 2 ? 'Aktif' : 'Tidak Aktif'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/content/hemat-app/master/master-room/master-room.component.ts b/src/app/content/hemat-app/master/master-room/master-room.component.ts
index 1dc1173..0e731f6 100644
--- a/src/app/content/hemat-app/master/master-room/master-room.component.ts
+++ b/src/app/content/hemat-app/master/master-room/master-room.component.ts
@@ -1,4 +1,9 @@
import { Component } from '@angular/core';
+import { AddEditMasterRoomComponent } from './add-edit-master-room/add-edit-master-room.component';
+import { TableApiService } from 'src/app/_services/table-api.service';
+import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
+import { Router } from '@angular/router';
+import { BuildingService } from '../../service/monitoring-api.service';
@Component({
selector: 'app-master-room',
@@ -6,5 +11,114 @@ import { Component } from '@angular/core';
styleUrls: ['./master-room.component.css']
})
export class MasterRoomComponent {
+ data: any;
+ filteredRows: any[];
+ searchTerm: string = "";
+ rows: any = [];
+ public breadcrumb: any;
+ constructor(
+ private tableApiservice: TableApiService,
+ private modalService: NgbModal,
+ private router: Router,
+ private monitoringApiService: BuildingService
+ ) {}
+
+ ngOnInit() {
+ this.breadcrumb = {
+ mainlabel: "Master Building",
+ links: [
+ {
+ name: "Home",
+ isLink: false,
+ },
+ {
+ name: "Master Building",
+ isLink: false,
+ },
+ ],
+ };
+ this.fetchData();
+ }
+
+ fetchData() {
+ this.monitoringApiService.getMasterRoomData().subscribe((res) => {
+ this.data = res.results.data;
+ this.filteredRows = this.data;
+ });
+ }
+
+ filterRows() {
+ if (!this.searchTerm) {
+ this.filteredRows = [...this.data];
+ } else {
+ this.filteredRows = this.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)
+ );
+ }
+
+ openAddMasterModal() {
+ const modalRef = this.modalService.open(AddEditMasterRoomComponent, {
+ size: "lg",
+ });
+
+ modalRef.componentInstance.mode = "add";
+ modalRef.result.then(
+ (result) => {
+ if (result) {
+ this.monitoringApiService
+ .postMasterRoomParam(result)
+ .subscribe((res) => {
+ this.fetchData();
+ });
+ }
+ },
+ (reason) => {
+ console.log(`Dismissed: ${reason}`);
+ }
+ );
+ }
+
+ editRow(row) {
+ const modalRef = this.modalService.open(AddEditMasterRoomComponent, {
+ size: "lg",
+ });
+
+ modalRef.componentInstance.dataRow = row;
+ modalRef.componentInstance.mode = "edit";
+ modalRef.result.then(
+ (result) => {
+ if (result) {
+ this.monitoringApiService
+ .putMasterRoomParam(result, row.id)
+ .subscribe((res) => {
+ this.fetchData();
+ });
+ }
+ },
+ (reason) => {
+ console.log(`Dismissed: ${reason}`);
+ }
+ );
+ }
+
+ deleteRow(row) {
+ const confirmDelete = confirm("Are you sure you want to delete this item?");
+ if (confirmDelete) {
+ this.monitoringApiService
+ .deleteHeaderDetailParam(row.id)
+ .subscribe((res) => {
+ this.fetchData();
+ });
+ }
+ }
}
diff --git a/src/app/content/hemat-app/master/master.module.ts b/src/app/content/hemat-app/master/master.module.ts
index b70440f..79cdc74 100644
--- a/src/app/content/hemat-app/master/master.module.ts
+++ b/src/app/content/hemat-app/master/master.module.ts
@@ -25,6 +25,7 @@ import { MasterFloorComponent } from './master-floor/master-floor.component';
import { MasterRoomComponent } from './master-room/master-room.component';
import { MasterBuildingComponent } from './master-building/master-building.component';
import { AddEditMasterBuildingComponent } from './master-building/add-edit-master-building/add-edit-master-building.component';
+import { AddEditMasterRoomComponent } from './master-room/add-edit-master-room/add-edit-master-room.component';
@@ -41,7 +42,8 @@ import { AddEditMasterBuildingComponent } from './master-building/add-edit-maste
MasterFloorComponent,
MasterRoomComponent,
MasterBuildingComponent,
- AddEditMasterBuildingComponent
+ AddEditMasterBuildingComponent,
+ AddEditMasterRoomComponent
],
imports: [
CommonModule,
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 0af6f46..345ae05 100644
--- a/src/app/content/hemat-app/service/monitoring-api.service.ts
+++ b/src/app/content/hemat-app/service/monitoring-api.service.ts
@@ -72,6 +72,15 @@ export class BuildingService {
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 });
+ }
+
postHeaderDetailParam(data: any): Observable {
const url = `https://kapi.absys.ninja/hemat/header-detail-param`;
const headers = new HttpHeaders({
@@ -114,4 +123,21 @@ export class BuildingService {
});
return this.http.put(url, data, { 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 });
+ }
}