invoice/lib/ui/app/presenters/entity_presenter.dart

117 lines
3.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
class EntityPresenter {
EntityPresenter initialize(BaseEntity entity, BuildContext context) {
this.entity = entity;
this.context = context;
return this;
}
BaseEntity entity;
BuildContext context;
String get title {
final localization = AppLocalization.of(context);
final type = localization.lookup('${entity.entityType}');
final name = entity.listDisplayName;
return isMobile(context) ? '$type: $name' : '$type $name';
}
static List<String> getBaseFields() {
return [
EntityFields.createdAt,
EntityFields.updatedAt,
EntityFields.archivedAt,
EntityFields.assignedTo,
EntityFields.createdBy,
EntityFields.state,
EntityFields.isDeleted,
];
}
Widget getField({String field, BuildContext context}) {
final localization = AppLocalization.of(context);
final store = StoreProvider.of<AppState>(context);
final state = store.state;
switch (field) {
case EntityFields.createdAt:
return Text(formatDate(
convertTimestampToDateString(entity.createdAt), context,
showTime: true));
case EntityFields.updatedAt:
return Text(entity.updatedAt == 0
? ''
: formatDate(
convertTimestampToDateString(entity.updatedAt), context,
showTime: true));
case EntityFields.archivedAt:
return Text(entity.archivedAt == 0
? ''
: formatDate(
convertTimestampToDateString(entity.archivedAt), context,
showTime: true));
case EntityFields.state:
return Text(entity.isActive
? localization.active
: entity.isArchived
? localization.archived
: localization.deleted);
case EntityFields.createdBy:
return Text(
state.userState.map[entity.createdUserId]?.listDisplayName ?? '');
case EntityFields.assignedTo:
return Text(
state.userState.map[entity.assignedUserId]?.listDisplayName ?? '');
case EntityFields.isDeleted:
return Text(entity.isDeleted ? localization.yes : localization.no);
}
return Text('Error: $field not found');
}
static bool isFieldLocalized(String field) => [
'status',
].contains(field);
static bool isFieldNumeric(String field) {
final value = [
'balance',
'paid_to_date',
'amount',
'quantity',
'price',
'cost',
'line_total',
'discount',
'profit',
'total',
'invoice_amount',
'invoice_balance',
'client_balance',
'credit_balance',
'tax_rate',
'tax_amount',
'tax_paid',
'payment_amount',
'net_balance',
'rate',
'calculated_rate',
'duration',
'net_amount',
'converted_amount',
'converted_balance',
].contains(field);
return value;
}
}