import 'package:pocketbase/pocketbase.dart'; import '../../../core/api/pocketbase_client.dart'; import '../../../models/finance_entry.dart'; class LabFinanceRepository { LabFinanceRepository._(); static final instance = LabFinanceRepository._(); PocketBase get _pb => PocketBaseClient.instance.pb; Future> listEntries( String tenantId, { String? status, int page = 1, int limit = 30, }) async { final filterParts = ['tenant_id = "$tenantId"', 'type = "receivable"']; if (status != null) filterParts.add('status = "$status"'); final result = await _pb.collection('finance_entries').getList( page: page, perPage: limit, filter: filterParts.join(' && '), expand: 'job_id', ); return (result.items.map((r) => FinanceEntry.fromJson(r.toJson())).toList() ..sort((a, b) => (b.dateCreated ?? '').compareTo(a.dateCreated ?? ''))); } Future> summary(String tenantId) async { final all = await listEntries(tenantId, limit: 200); double pending = 0, paid = 0; for (final e in all) { if (e.status == FinanceStatus.pending) { pending += e.amount; } else { paid += e.amount; } } return {'pending': pending, 'paid': paid}; } Future> byCounterparty(String tenantId) async { final entries = await listEntries(tenantId, limit: 300); final map = {}; for (final entry in entries) { final key = entry.counterpartyTenantId ?? entry.counterpartyName ?? 'unknown'; final current = map[key]; final pending = (current?.pendingAmount ?? 0) + (entry.status == FinanceStatus.pending ? entry.amount : 0); final paid = (current?.paidAmount ?? 0) + (entry.status == FinanceStatus.paid ? entry.amount : 0); map[key] = CounterpartyFinanceSummary( counterpartyTenantId: entry.counterpartyTenantId, counterpartyName: entry.counterpartyName ?? 'Karşı Taraf', currency: entry.currency, pendingAmount: pending, paidAmount: paid, entryCount: (current?.entryCount ?? 0) + 1, ); } final list = map.values.toList(); list.sort((a, b) => b.pendingAmount.compareTo(a.pendingAmount)); return list; } }