This commit is contained in:
Hillel Coren 2020-10-18 12:44:44 +03:00
parent c8da195422
commit 988c0e4f04
5 changed files with 74 additions and 20 deletions

View File

@ -155,12 +155,25 @@ abstract class ProjectEntity extends Object
actions.add(EntityAction.edit);
}
if (userCompany.canCreate(EntityType.task) && isActive) {
actions.add(EntityAction.newTask);
}
if (userCompany.canCreate(EntityType.invoice) && isActive) {
actions.add(EntityAction.newInvoice);
if (isActive && client?.isActive == true) {
if (userCompany.canCreate(EntityType.invoice)) {
actions.add(EntityAction.newInvoice);
}
if (userCompany.canCreate(EntityType.recurringInvoice)) {
actions.add(EntityAction.newRecurringInvoice);
}
if (userCompany.canCreate(EntityType.quote)) {
actions.add(EntityAction.newQuote);
}
if (userCompany.canCreate(EntityType.credit)) {
actions.add(EntityAction.newCredit);
}
if (userCompany.canCreate(EntityType.task)) {
actions.add(EntityAction.newTask);
}
if (userCompany.canCreate(EntityType.expense)) {
actions.add(EntityAction.newInvoice);
}
}
}

View File

@ -544,6 +544,10 @@ void createEntityByType(
final state = store.state;
final navigator = Navigator.of(context);
if (!state.userCompany.canCreate(entityType)) {
return;
}
checkForChanges(
store: store,
context: context,
@ -712,9 +716,14 @@ void createEntity({
Completer cancelCompleter,
}) {
final store = StoreProvider.of<AppState>(context);
final uiState = store.state.uiState;
final state = store.state;
final uiState = state.uiState;
final navigator = Navigator.of(context);
if (!state.userCompany.canCreate(entity.entityType)) {
return;
}
checkForChanges(
store: store,
context: context,

View File

@ -7,7 +7,6 @@ import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/project/project_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
@ -266,6 +265,7 @@ void handleProjectAction(
final state = store.state;
final project = projects.first as ProjectEntity;
final projectIds = projects.map((project) => project.id).toList();
final client = state.clientState.get(project.clientId);
switch (action) {
case EntityAction.edit:
@ -279,6 +279,12 @@ void handleProjectAction(
..clientId = project.clientId));
break;
case EntityAction.newInvoice:
createEntity(
context: context,
entity: InvoiceEntity(state: state, client: client).rebuild((b) => b
..projectId = project.id
..clientId = project.clientId));
/*
final items =
convertProjectToInvoiceItem(project: project, context: context);
createEntity(
@ -286,7 +292,39 @@ void handleProjectAction(
entity: InvoiceEntity(state: state).rebuild((b) => b
..hasTasks = true
..clientId = project.clientId
..lineItems.addAll(items)));
..lineItems.addAll(items)));
*/
break;
case EntityAction.newQuote:
createEntity(
context: context,
entity: InvoiceEntity(state: state, client: client).rebuild((b) => b
..projectId = project.id
..clientId = project.clientId
..entityType = EntityType.quote));
break;
case EntityAction.newCredit:
createEntity(
context: context,
entity: InvoiceEntity(state: state, client: client).rebuild((b) => b
..projectId = project.id
..clientId = project.clientId
..entityType = EntityType.credit));
break;
case EntityAction.newRecurringInvoice:
createEntity(
context: context,
entity: InvoiceEntity(state: state, client: client).rebuild((b) => b
..projectId = project.id
..clientId = project.clientId
..entityType = EntityType.recurringInvoice));
break;
case EntityAction.newExpense:
createEntity(
context: context,
entity: ExpenseEntity(state: state).rebuild((b) => b
..projectId = project.id
..clientId = project.clientId));
break;
case EntityAction.clone:
createEntity(context: context, entity: project.clone);

View File

@ -75,20 +75,13 @@ class ProjectViewVM {
onRefreshed: (context) => _handleRefresh(context),
onEntityPressed: (BuildContext context, EntityType entityType,
{bool longPress = false}) {
if (!longPress || !project.isActive || !client.isActive) {
if (longPress && project.isActive && client.isActive) {
handleProjectAction(
context, [project], EntityAction.newEntityType(entityType));
} else {
viewEntitiesByType(
context: context, entityType: entityType, filterEntity: project);
}
switch (entityType) {
case EntityType.task:
createEntity(
context: context,
entity: TaskEntity(state: state).rebuild((b) => b
..projectId = project.id
..clientId = project.clientId));
break;
}
},
onAddTaskPressed: (context) {
createEntity(

View File

@ -47,6 +47,7 @@ IconData getEntityActionIcon(EntityAction entityAction) {
case EntityAction.newPayment:
case EntityAction.newQuote:
case EntityAction.newCredit:
case EntityAction.newRecurringInvoice:
return Icons.add_circle_outline;
case EntityAction.resume:
case EntityAction.start: