import { CommonModule, CurrencyPipe, DatePipe } from '@angular/common'; import { Component, OnInit, computed, inject, signal } from '@angular/core'; import { FormArray, FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; import { ImageCroppedEvent, ImageCropperComponent } from 'ngx-image-cropper'; import { CategoriesService } from '../../core/services/categories.service'; import { ExpensesService } from '../../core/services/expenses.service'; import { MerchantsService } from '../../core/services/merchants.service'; import { ToastService } from '../../core/services/toast.service'; import { UiService } from '../../core/services/ui.service'; import type { DuplicateGroup, Expense, Merchant, Proof } from '../../shared/models'; const formatLocalDate = (date: Date) => { const year = date.getFullYear(); const month = `${date.getMonth() + 1}`.padStart(2, '0'); const day = `${date.getDate()}`.padStart(2, '0'); return `${year}-${month}-${day}`; }; const today = formatLocalDate(new Date()); @Component({ selector: 'app-expenses', standalone: true, imports: [CommonModule, ReactiveFormsModule, CurrencyPipe, DatePipe, ImageCropperComponent], template: `
| {{ ui.t('table.title') }} | {{ ui.t('expenses.field.status') }} | {{ ui.t('table.amount') }} | |
|---|---|---|---|
|
{{ item.title }}
@if (item.possibleDuplicate || item.duplicateStatus) {
{{ duplicateLabel(item) }}
}
@if (item.recurringSourceId) {
{{ ui.t('recurring.badge') }}
}
{{ item.expenseDate | date:'yyyy-MM-dd' }} · {{ item.category.name }} · {{ item.merchant || ui.t('expenses.noMerchant') }}
@if (item.tags.length) { @for (tag of item.tags; track tag) { #{{ tag }} } }
@if (customFieldEntries(item).length) { @for (field of customFieldEntries(item); track field[0]) { {{ field[0] }}: {{ field[1] }} } }
@if (item.proofs.length) { @for (proof of item.proofs; track proof.id) { } }
|
{{ ui.t('status.' + item.status.toLowerCase()) }} | {{ item.amount | currency:'PLN':'symbol':'1.2-2' }} |
@if (item.possibleDuplicate && item.duplicateStatus !== 'CONFIRMED') {
}
@if (item.possibleDuplicate && item.duplicateStatus !== 'DISMISSED') {
}
@if (item.duplicateStatus === 'DISMISSED' || item.duplicateStatus === 'CONFIRMED') {
}
|
| {{ ui.t('expenses.noItems') }} | |||