Invoice projects
This commit is contained in:
parent
ccc6c5c59b
commit
26c0f10119
|
|
@ -245,7 +245,6 @@ void handleExpenseAction(
|
|||
BuildContext context, List<BaseEntity> expenses, EntityAction action) {
|
||||
final store = StoreProvider.of<AppState>(context);
|
||||
final state = store.state;
|
||||
final CompanyEntity company = state.company;
|
||||
final localization = AppLocalization.of(context);
|
||||
final expense = expenses.first as ExpenseEntity;
|
||||
final expenseIds = expenses.map((expense) => expense.id).toList();
|
||||
|
|
@ -277,8 +276,7 @@ void handleExpenseAction(
|
|||
})
|
||||
.map((expense) => convertExpenseToInvoiceItem(
|
||||
expense: expense,
|
||||
categoryMap: state.expenseCategoryState.map,
|
||||
company: company,
|
||||
context: context,
|
||||
))
|
||||
.toList();
|
||||
if (items.isNotEmpty) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja_flutter/redux/static/static_state.dart';
|
||||
import 'package:memoize/memoize.dart';
|
||||
|
|
@ -8,9 +10,12 @@ import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
|
|||
|
||||
InvoiceItemEntity convertExpenseToInvoiceItem({
|
||||
@required ExpenseEntity expense,
|
||||
@required BuiltMap<String, ExpenseCategoryEntity> categoryMap,
|
||||
@required CompanyEntity company,
|
||||
@required BuildContext context,
|
||||
}) {
|
||||
final state = StoreProvider.of<AppState>(context).state;
|
||||
final company = state.company;
|
||||
final categoryMap = state.expenseCategoryState.map;
|
||||
|
||||
return InvoiceItemEntity().rebuild((b) => b
|
||||
..typeId = InvoiceItemEntity.TYPE_EXPENSE
|
||||
..expenseId = expense.id
|
||||
|
|
|
|||
|
|
@ -1,16 +1,20 @@
|
|||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_redux/flutter_redux.dart';
|
||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||
import 'package:invoiceninja_flutter/redux/expense/expense_selectors.dart';
|
||||
import 'package:invoiceninja_flutter/redux/task/task_selectors.dart';
|
||||
import 'package:memoize/memoize.dart';
|
||||
import 'package:built_collection/built_collection.dart';
|
||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
|
||||
|
||||
List<InvoiceItemEntity> convertProjectToInvoiceItem(
|
||||
{BuildContext context, ProjectEntity project}) {
|
||||
List<InvoiceItemEntity> convertProjectToInvoiceItem({
|
||||
BuildContext context,
|
||||
ProjectEntity project,
|
||||
}) {
|
||||
final List<InvoiceItemEntity> items = [];
|
||||
final state = StoreProvider.of<AppState>(context).state;
|
||||
|
||||
final tasks = <TaskEntity>[];
|
||||
state.taskState.map.forEach((index, task) {
|
||||
if (task.isActive &&
|
||||
|
|
@ -21,12 +25,25 @@ List<InvoiceItemEntity> convertProjectToInvoiceItem(
|
|||
}
|
||||
});
|
||||
|
||||
final expenses = <ExpenseEntity>[];
|
||||
state.expenseState.map.forEach((index, expense) {
|
||||
if (expense.isActive &&
|
||||
expense.projectId == project.id &&
|
||||
expense.isPending) {
|
||||
expenses.add(expense);
|
||||
}
|
||||
});
|
||||
|
||||
tasks.sort((taskA, taskB) {
|
||||
final taskADate = taskA.getTaskTimes().first.startDate;
|
||||
final taskBDate = taskB.getTaskTimes().first.startDate;
|
||||
return taskADate.compareTo(taskBDate);
|
||||
});
|
||||
|
||||
expenses.sort((expenseA, expenseB) {
|
||||
return expenseA.date.compareTo(expenseB.date);
|
||||
});
|
||||
|
||||
for (var i = 0; i < tasks.length; i++) {
|
||||
final task = tasks[i];
|
||||
var item = convertTaskToInvoiceItem(task: task, context: context);
|
||||
|
|
@ -39,6 +56,18 @@ List<InvoiceItemEntity> convertProjectToInvoiceItem(
|
|||
items.add(item);
|
||||
}
|
||||
|
||||
for (var i = 0; i < expenses.length; i++) {
|
||||
final expense = expenses[i];
|
||||
var item = convertExpenseToInvoiceItem(expense: expense, context: context);
|
||||
|
||||
if (i == 0) {
|
||||
item =
|
||||
item.rebuild((b) => b.notes = '## ${project.name}\n\n${item.notes}');
|
||||
}
|
||||
|
||||
items.add(item);
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,9 +83,9 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector>
|
|||
} else if (entity.entityType == EntityType.expense) {
|
||||
final expense = entity as ExpenseEntity;
|
||||
items.add(convertExpenseToInvoiceItem(
|
||||
expense: expense,
|
||||
categoryMap: state.expenseCategoryState.map,
|
||||
company: company));
|
||||
expense: expense,
|
||||
context: context,
|
||||
));
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue