Recurring
This commit is contained in:
parent
3bedf98c42
commit
5e9aaa4b98
|
|
@ -315,13 +315,26 @@ abstract class ExpenseEntity extends Object
|
||||||
actions.add(EntityAction.edit);
|
actions.add(EntityAction.edit);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isInvoiced && userCompany.canCreate(EntityType.invoice)) {
|
if (!isInvoiced &&
|
||||||
|
!isRecurring &&
|
||||||
|
userCompany.canCreate(EntityType.invoice)) {
|
||||||
actions.add(EntityAction.invoiceExpense);
|
actions.add(EntityAction.invoiceExpense);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (userCompany.canCreate(EntityType.task) && !multiselect) {
|
if (userCompany.canCreate(EntityType.expense) &&
|
||||||
actions.add(EntityAction.clone);
|
!multiselect &&
|
||||||
|
!isRecurring) {
|
||||||
|
actions.add(EntityAction.cloneToExpense);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userCompany.canCreate(EntityType.recurringExpense) && !multiselect) {
|
||||||
|
actions.add(EntityAction.cloneToRecurring);
|
||||||
|
}
|
||||||
|
if (userCompany.canCreate(EntityType.expense) &&
|
||||||
|
!multiselect &&
|
||||||
|
isRecurring) {
|
||||||
|
actions.add(EntityAction.cloneToExpense);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actions.isNotEmpty && actions.last != null) {
|
if (actions.isNotEmpty && actions.last != null) {
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ class EntityAction extends EnumClass {
|
||||||
static const EntityAction cloneToCredit = _$cloneToCredit;
|
static const EntityAction cloneToCredit = _$cloneToCredit;
|
||||||
static const EntityAction cloneToInvoice = _$cloneToInvoice;
|
static const EntityAction cloneToInvoice = _$cloneToInvoice;
|
||||||
static const EntityAction cloneToQuote = _$cloneToQuote;
|
static const EntityAction cloneToQuote = _$cloneToQuote;
|
||||||
|
static const EntityAction cloneToExpense = _$cloneToExpense;
|
||||||
static const EntityAction cloneToRecurring = _$cloneToRecurring;
|
static const EntityAction cloneToRecurring = _$cloneToRecurring;
|
||||||
static const EntityAction convertToInvoice = _$convertToInvoice;
|
static const EntityAction convertToInvoice = _$convertToInvoice;
|
||||||
static const EntityAction approve = _$approve;
|
static const EntityAction approve = _$approve;
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ const EntityAction _$cloneToOther = const EntityAction._('cloneToOther');
|
||||||
const EntityAction _$cloneToCredit = const EntityAction._('cloneToCredit');
|
const EntityAction _$cloneToCredit = const EntityAction._('cloneToCredit');
|
||||||
const EntityAction _$cloneToInvoice = const EntityAction._('cloneToInvoice');
|
const EntityAction _$cloneToInvoice = const EntityAction._('cloneToInvoice');
|
||||||
const EntityAction _$cloneToQuote = const EntityAction._('cloneToQuote');
|
const EntityAction _$cloneToQuote = const EntityAction._('cloneToQuote');
|
||||||
|
const EntityAction _$cloneToExpense = const EntityAction._('cloneToExpense');
|
||||||
const EntityAction _$cloneToRecurring =
|
const EntityAction _$cloneToRecurring =
|
||||||
const EntityAction._('cloneToRecurring');
|
const EntityAction._('cloneToRecurring');
|
||||||
const EntityAction _$convertToInvoice =
|
const EntityAction _$convertToInvoice =
|
||||||
|
|
@ -84,6 +85,8 @@ EntityAction _$valueOf(String name) {
|
||||||
return _$cloneToInvoice;
|
return _$cloneToInvoice;
|
||||||
case 'cloneToQuote':
|
case 'cloneToQuote':
|
||||||
return _$cloneToQuote;
|
return _$cloneToQuote;
|
||||||
|
case 'cloneToExpense':
|
||||||
|
return _$cloneToExpense;
|
||||||
case 'cloneToRecurring':
|
case 'cloneToRecurring':
|
||||||
return _$cloneToRecurring;
|
return _$cloneToRecurring;
|
||||||
case 'convertToInvoice':
|
case 'convertToInvoice':
|
||||||
|
|
@ -179,6 +182,7 @@ final BuiltSet<EntityAction> _$values =
|
||||||
_$cloneToCredit,
|
_$cloneToCredit,
|
||||||
_$cloneToInvoice,
|
_$cloneToInvoice,
|
||||||
_$cloneToQuote,
|
_$cloneToQuote,
|
||||||
|
_$cloneToExpense,
|
||||||
_$cloneToRecurring,
|
_$cloneToRecurring,
|
||||||
_$convertToInvoice,
|
_$convertToInvoice,
|
||||||
_$approve,
|
_$approve,
|
||||||
|
|
|
||||||
|
|
@ -255,8 +255,19 @@ void handleExpenseAction(
|
||||||
case EntityAction.edit:
|
case EntityAction.edit:
|
||||||
editEntity(context: context, entity: expense);
|
editEntity(context: context, entity: expense);
|
||||||
break;
|
break;
|
||||||
case EntityAction.clone:
|
case EntityAction.cloneToExpense:
|
||||||
createEntity(context: context, entity: expense.clone);
|
createEntity(
|
||||||
|
context: context,
|
||||||
|
entity:
|
||||||
|
expense.clone.rebuild((b) => b..entityType = EntityType.expense),
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case EntityAction.cloneToRecurring:
|
||||||
|
createEntity(
|
||||||
|
context: context,
|
||||||
|
entity: expense.clone
|
||||||
|
.rebuild((b) => b..entityType = EntityType.recurringExpense),
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case EntityAction.invoiceExpense:
|
case EntityAction.invoiceExpense:
|
||||||
final items = expenses
|
final items = expenses
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/recurring_expense/recurring_expense_actions.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
|
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
|
||||||
|
|
@ -231,7 +232,7 @@ Middleware<AppState> _loadExpenses(ExpenseRepository repository) {
|
||||||
if (action.completer != null) {
|
if (action.completer != null) {
|
||||||
action.completer.complete(null);
|
action.completer.complete(null);
|
||||||
}
|
}
|
||||||
store.dispatch(PersistData());
|
store.dispatch(LoadRecurringExpenses());
|
||||||
}).catchError((Object error) {
|
}).catchError((Object error) {
|
||||||
print(error);
|
print(error);
|
||||||
store.dispatch(LoadExpensesFailure(error));
|
store.dispatch(LoadExpensesFailure(error));
|
||||||
|
|
|
||||||
|
|
@ -299,6 +299,20 @@ void handleRecurringExpenseAction(BuildContext context,
|
||||||
context, localization.deletedRecurringExpense),
|
context, localization.deletedRecurringExpense),
|
||||||
recurringExpenseIds));
|
recurringExpenseIds));
|
||||||
break;
|
break;
|
||||||
|
case EntityAction.cloneToExpense:
|
||||||
|
createEntity(
|
||||||
|
context: context,
|
||||||
|
entity: recurringExpense.clone
|
||||||
|
.rebuild((b) => b..entityType = EntityType.expense),
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case EntityAction.cloneToRecurring:
|
||||||
|
createEntity(
|
||||||
|
context: context,
|
||||||
|
entity: recurringExpense.clone
|
||||||
|
.rebuild((b) => b..entityType = EntityType.recurringExpense),
|
||||||
|
);
|
||||||
|
break;
|
||||||
case EntityAction.toggleMultiselect:
|
case EntityAction.toggleMultiselect:
|
||||||
if (!store.state.recurringExpenseListState.isInMultiselect()) {
|
if (!store.state.recurringExpenseListState.isInMultiselect()) {
|
||||||
store.dispatch(StartRecurringExpenseMultiselect());
|
store.dispatch(StartRecurringExpenseMultiselect());
|
||||||
|
|
|
||||||
|
|
@ -236,11 +236,7 @@ Middleware<AppState> _loadRecurringExpenses(
|
||||||
if (action.completer != null) {
|
if (action.completer != null) {
|
||||||
action.completer.complete(null);
|
action.completer.complete(null);
|
||||||
}
|
}
|
||||||
/*
|
store.dispatch(PersistData());
|
||||||
if (state.productState.isStale) {
|
|
||||||
store.dispatch(LoadProducts());
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}).catchError((Object error) {
|
}).catchError((Object error) {
|
||||||
print(error);
|
print(error);
|
||||||
store.dispatch(LoadRecurringExpensesFailure(error));
|
store.dispatch(LoadRecurringExpensesFailure(error));
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
import 'dart:math';
|
|
||||||
|
|
||||||
import 'package:invoiceninja_flutter/colors.dart';
|
import 'package:invoiceninja_flutter/colors.dart';
|
||||||
import 'package:invoiceninja_flutter/constants.dart';
|
import 'package:invoiceninja_flutter/constants.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/entities.dart';
|
import 'package:invoiceninja_flutter/data/models/entities.dart';
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
static final Map<String, Map<String, String>> _localizedValues = {
|
static final Map<String, Map<String, String>> _localizedValues = {
|
||||||
'en': {
|
'en': {
|
||||||
// STARTER: lang key - do not remove comment
|
// STARTER: lang key - do not remove comment
|
||||||
|
'clone_to_expense': 'Clone to Expense',
|
||||||
'recurring_expense': 'Recurring Expense',
|
'recurring_expense': 'Recurring Expense',
|
||||||
'recurring_expenses': 'Recurring Expenses',
|
'recurring_expenses': 'Recurring Expenses',
|
||||||
'new_recurring_expense': 'New Recurring Expense',
|
'new_recurring_expense': 'New Recurring Expense',
|
||||||
|
|
@ -62589,6 +62590,10 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
_localizedValues[localeCode]['search_recurring_expenses'] ??
|
_localizedValues[localeCode]['search_recurring_expenses'] ??
|
||||||
_localizedValues['en']['search_recurring_expenses'];
|
_localizedValues['en']['search_recurring_expenses'];
|
||||||
|
|
||||||
|
String get cloneToExpense =>
|
||||||
|
_localizedValues[localeCode]['clone_to_expense'] ??
|
||||||
|
_localizedValues['en']['clone_to_expense'];
|
||||||
|
|
||||||
// STARTER: lang field - do not remove comment
|
// STARTER: lang field - do not remove comment
|
||||||
|
|
||||||
String lookup(String key) {
|
String lookup(String key) {
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ IconData getEntityActionIcon(EntityAction entityAction) {
|
||||||
case EntityAction.clone:
|
case EntityAction.clone:
|
||||||
case EntityAction.cloneToOther:
|
case EntityAction.cloneToOther:
|
||||||
case EntityAction.cloneToInvoice:
|
case EntityAction.cloneToInvoice:
|
||||||
|
case EntityAction.cloneToExpense:
|
||||||
case EntityAction.cloneToQuote:
|
case EntityAction.cloneToQuote:
|
||||||
case EntityAction.cloneToCredit:
|
case EntityAction.cloneToCredit:
|
||||||
case EntityAction.cloneToRecurring:
|
case EntityAction.cloneToRecurring:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue