<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<fims-layout-card-over title="{{ 'Teller' | translate }}" [navigateBackTo]="['../../../../../']">
  <td-message *ngIf="isClosed$ | async" label="{{'Teller can be opened' | translate }}" color="warn" icon="error">
    <a td-message-actions mat-button [routerLink]="['command']" [queryParams]="{ action: 'OPEN'}"
            *hasPermission="{ id: 'teller_management', accessLevel: 'CHANGE'}" translate>OPEN TELLER
    </a>
  </td-message>
  <td-message *ngIf="!(isClosed$ | async)" label="{{'Teller can be closed' | translate }}" color="accent" icon="check">
    <a td-message-actions mat-button [routerLink]="['command']" [queryParams]="{ action: 'CLOSE'}"
            *hasPermission="{ id: 'teller_management', accessLevel: 'CHANGE'}" translate>CLOSE TELLER
    </a>
  </td-message>
  <fims-two-column-layout>
    <mat-nav-list left>
      <h3 mat-subheader translate>Management</h3>
      <a mat-list-item [routerLink]="['balance']">
        <mat-icon matListAvatar>account_balance</mat-icon>
        <h3 matLine translate>Teller balance</h3>
        <p matLine translate>View current teller balance</p>
      </a>
      <a mat-list-item [routerLink]="['denominations']">
        <mat-icon matListAvatar>attach_money</mat-icon>
        <h3 matLine translate>Denominations</h3>
        <p matLine translate>Manage denominations</p>
      </a>
    </mat-nav-list>
    <mat-list *ngIf="teller$ | async as teller" right>
      <h3 mat-subheader translate>Current status</h3>
      <fims-state-display [state]="teller.state"></fims-state-display>
      <mat-list-item>
        <h3 matLine translate>Number</h3>
        <p matLine>{{teller.code}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Cash withdrawal limit</h3>
        <p matLine>{{teller.cashdrawLimit}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Teller account</h3>
        <p matLine>{{teller.tellerAccountIdentifier}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Vault account</h3>
        <p matLine>{{teller.vaultAccountIdentifier}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Cheques receivable account</h3>
        <p matLine>{{teller.chequesReceivableAccount}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Cash over short account</h3>
        <p matLine>{{teller.cashOverShortAccount}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Denomination required?</h3>
        <p matLine>{{teller.denominationRequired}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Assigned employee</h3>
        <p matLine>{{teller.assignedEmployee}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Created by</h3>
        <p matLine>{{teller.createdBy}} - {{teller.createdOn | date:'medium'}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Last modified by</h3>
        <p matLine>{{teller.lastModifiedBy}} - {{teller.lastModifiedOn | date:'medium'}}</p>
      </mat-list-item>
      <mat-list-item>
        <h3 matLine translate>Last opened by</h3>
        <p matLine>{{teller.lastOpenedBy}} - {{teller.lastOpenedOn | date:'medium'}}</p>
      </mat-list-item>
    </mat-list>
  </fims-two-column-layout>
</fims-layout-card-over>
<fims-fab-button title="{{'Edit teller' | translate}}" icon="mode_edit" [link]="['edit']" [permission]="{ id: 'teller_management', accessLevel: 'CHANGE'}"></fims-fab-button>
