diff --git a/lib/data/models/entities.dart b/lib/data/models/entities.dart index 5a4647a28..8ba4291e8 100644 --- a/lib/data/models/entities.dart +++ b/lib/data/models/entities.dart @@ -259,6 +259,8 @@ abstract class BaseEntity implements SelectableEntity { bool get isArchived => archivedAt != null && archivedAt > 0 && !(isDeleted ?? false); + bool get isEditable => !isDeleted; + bool userCanAccess(String userId) => createdUserId == userId || assignedUserId == userId; diff --git a/lib/data/models/invoice_model.dart b/lib/data/models/invoice_model.dart index f6f6674ed..280e3070c 100644 --- a/lib/data/models/invoice_model.dart +++ b/lib/data/models/invoice_model.dart @@ -337,6 +337,21 @@ abstract class InvoiceEntity extends Object bool get hasInvoice => '${invoiceId ?? ''}'.isNotEmpty; + @override + bool get isEditable { + if (isDeleted) { + return false; + } + + if (entityType == EntityType.invoice) { + if (isCancelledOrReversed) { + return false; + } + } + + return true; + } + int get age { int ageInDays = 0; if (isPastDue) { diff --git a/lib/redux/app/app_actions.dart b/lib/redux/app/app_actions.dart index 13a8f6a55..7bb13f81a 100644 --- a/lib/redux/app/app_actions.dart +++ b/lib/redux/app/app_actions.dart @@ -740,7 +740,7 @@ void editEntityById( final map = store.state.getEntityMap(entityType); final entity = map[entityId] as BaseEntity; - if (entity.isDeleted) { + if (!entity.isEditable) { return; } diff --git a/lib/ui/app/view_scaffold.dart b/lib/ui/app/view_scaffold.dart index 0f8318a0c..b00e8545c 100644 --- a/lib/ui/app/view_scaffold.dart +++ b/lib/ui/app/view_scaffold.dart @@ -87,7 +87,7 @@ class ViewScaffold extends StatelessWidget { userCompany.canEditEntity(entity) ? Builder(builder: (context) { return EditIconButton( - isVisible: !(entity.isDeleted ?? false), + isVisible: entity.isEditable, onPressed: () => editEntity(context: context, entity: entity), );