<!--
  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="{{ ledger.identifier + ' - ' + ledger.name }}" [subTitle]="ledger.description" [navigateBackTo]="ledger.parentLedgerIdentifier ? ['../'] : ['../../../../']">
  <fims-layout-card-over-header-menu layout="row" layout-align="end center">
    <a mat-icon-button [routerLink]="['edit']" *hasPermission="{ id: 'accounting_ledgers', accessLevel: 'CHANGE' }"><mat-icon>mode_edit</mat-icon></a>
    <button mat-icon-button (click)="deleteLedger()" title="{{'Delete this ledger' | translate}}" *hasPermission="{ id: 'accounting_ledgers', accessLevel: 'DELETE' }"><mat-icon>delete</mat-icon></button>
  </fims-layout-card-over-header-menu>
  <div class="mat-content inset" flex>
    <div layout="row">
      <mat-list>
        <mat-list-item>
          <mat-icon matListAvatar>account_balance</mat-icon>
          <h3 matLine translate>Type</h3>
          <p matLine>{{ledger.type}}</p>
        </mat-list-item>
        <mat-list-item>
          <h3 matLine translate>Balance</h3>
          <p matLine>{{ledger.totalValue | displayFimsNumber}}</p>
        </mat-list-item>
      </mat-list>
    </div>
    <div layout="row">
      <div layout="column" flex-gt-md="100">
        <h3 translate>Subledgers</h3>
        <fims-data-table flex
                         (onActionCellClick)="rowSelect($event)"
                         [columns]="columns"
                         [data]="ledgerData">
        </fims-data-table>
      </div>
    </div>
  </div>
</fims-layout-card-over>
<fims-fab-button title="{{'Add subledger' | translate}}" icon="add" [link]="['create']" [permission]="{ id: 'accounting_ledgers', accessLevel: 'CHANGE'}"></fims-fab-button>
