<!--
  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 balance' | translate}}" [navigateBackTo]="['../']">
  <div layout="row">
    <table td-data-table *ngIf="balance$ | async as balance">
      <thead>
        <tr td-data-table-column-row>
          <th td-data-table-column>
            <span translate>Transaction date</span>
          </th>
          <th td-data-table-column>
            <span translate>Message</span>
          </th>
          <th td-data-table-column>
            <span translate>Cash Received</span>
          </th>
          <th td-data-table-column>
            <span translate>Cash Disbursed</span>
          </th>
          <th td-data-table-column>
            <span translate>Cheques Received</span>
          </th>
        </tr>
      </thead>
      <tbody>
        <tr td-data-table-row *ngFor="let row of balance.entries">
          <td td-data-table-cell>
            {{row['transactionDate'] | date:'short' }}
          </td>
          <td td-data-table-cell>
            {{row['message'] }}
          </td>
          <td td-data-table-cell>
            {{row['type'] == 'DEBIT' ? (row['amount'] | number:numberFormat) : '-'}}
          </td>
          <td td-data-table-cell>
            {{row['type'] == 'CREDIT' ? (row['amount'] | number:numberFormat): '-'}}
          </td>
          <td td-data-table-cell>
            {{row['type'] == 'CHEQUE' ? (row['amount'] | number:numberFormat) : '-'}}
          </td>
        </tr>
        <tr td-data-table-row>
          <td td-data-table-cell></td>
          <td td-data-table-cell>
            <b translate>Subtotal</b>
          </td>
          <td td-data-table-cell>
            <b>{{balance.cashReceivedTotal | number:numberFormat}}</b>
          </td>
          <td td-data-table-cell>
            <b>{{balance.cashDisbursedTotal | number:numberFormat}}</b>
          </td>
          <td td-data-table-cell>
            <b>{{balance.chequesReceivedTotal | number:numberFormat}}</b>
          </td>
        </tr>
        <tr td-data-table-row>
          <td td-data-table-cell></td>
          <td td-data-table-cell>
            <b translate>Cash on hand</b>
          </td>
          <td td-data-table-cell>
            <b>{{balance.cashOnHand | number:numberFormat}}</b>
          </td>
          <td td-data-table-cell></td>
          <td td-data-table-cell></td>
        </tr>
      </tbody>
    </table>
  </div>
</fims-layout-card-over>
