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