Aam-Digital/ndb-core

View on GitHub
src/app/child-dev-project/attendance/attendance-details/attendance-details.component.ts

Summary

Maintainability
A
0 mins
Test Coverage
D
60%
import { Component, Inject, Input } from "@angular/core";
import { ActivityAttendance } from "../model/activity-attendance";
import { Note } from "../../notes/model/note";
import { calculateAverageAttendance } from "../model/calculate-average-event-attendance";
import { FormFieldConfig } from "../../../core/common-components/entity-form/FormConfig";
import { FormDialogService } from "../../../core/form-dialog/form-dialog.service";
import { EventNote } from "../model/event-note";
import { DialogCloseComponent } from "../../../core/common-components/dialog-close/dialog-close.component";
import { MAT_DIALOG_DATA, MatDialogModule } from "@angular/material/dialog";
import { MatFormFieldModule } from "@angular/material/form-field";
import { DatePipe, NgIf, PercentPipe } from "@angular/common";
import { FormsModule } from "@angular/forms";
import { MatInputModule } from "@angular/material/input";
import { AttendanceCalendarComponent } from "../attendance-calendar/attendance-calendar.component";
import { EntitiesTableComponent } from "../../../core/common-components/entities-table/entities-table.component";

@Component({
  selector: "app-attendance-details",
  templateUrl: "./attendance-details.component.html",
  styleUrls: ["./attendance-details.component.scss"],
  imports: [
    DialogCloseComponent,
    MatDialogModule,
    MatFormFieldModule,
    NgIf,
    PercentPipe,
    DatePipe,
    FormsModule,
    MatInputModule,
    EntitiesTableComponent,
    AttendanceCalendarComponent,
  ],
  standalone: true,
})
export class AttendanceDetailsComponent {
  @Input() entity: ActivityAttendance;
  @Input() forChild: string;
  EventNote = EventNote;

  eventsColumns: FormFieldConfig[] = [
    { id: "date" },
    { id: "subject", label: $localize`Event` },
    {
      id: "getAttendance",
      label: $localize`:How a child attended, e.g. too late, in time, excused, e.t.c:Attended`,
      viewComponent: "ReadonlyFunction",
      additional: (note: Note) => {
        if (this.forChild) {
          return note.getAttendance(this.forChild)?.status?.label || "-";
        } else {
          return (
            (calculateAverageAttendance(note).average * 100).toFixed(0) + "%" ||
            "N/A"
          );
        }
      },
    },
  ];

  constructor(
    private formDialog: FormDialogService,
    @Inject(MAT_DIALOG_DATA)
    data: { forChild: string; attendance: ActivityAttendance },
  ) {
    this.entity = data.attendance;
    this.forChild = data.forChild;
  }

  showEventDetails(event: EventNote) {
    this.formDialog.openView(event, "NoteDetails");
  }
}