import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/data/models/client_model.dart'; import 'package:invoiceninja_flutter/data/models/invoice_model.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/payment_model.dart'; import 'package:memoize/memoize.dart'; var memoizedUpcomingInvoices = memo2(( BuiltMap invoiceMap, BuiltMap clientMap, ) => _upcomingInvoices( invoiceMap: invoiceMap, clientMap: clientMap, )); List _upcomingInvoices({ BuiltMap invoiceMap, BuiltMap clientMap, }) { final invoices = []; invoiceMap.forEach((index, invoice) { final client = clientMap[invoice.clientId] ?? ClientEntity(id: invoice.clientId); if (invoice.isNotActive || invoice.isCancelledOrReversed || client.isNotActive) { // do noting } else if (invoice.isUpcoming) { invoices.add(invoice); } }); invoices.sort( (invoiceA, invoiceB) => invoiceA.dueDate.compareTo(invoiceB.dueDate)); return invoices; } var memoizedPastDueInvoices = memo2(( BuiltMap invoiceMap, BuiltMap clientMap, ) => _pastDueInvoices( invoiceMap: invoiceMap, clientMap: clientMap, )); List _pastDueInvoices({ BuiltMap invoiceMap, BuiltMap clientMap, }) { final invoices = []; invoiceMap.forEach((index, invoice) { final client = clientMap[invoice.clientId] ?? ClientEntity(id: invoice.clientId); if (invoice.isNotActive || invoice.isCancelledOrReversed || client.isNotActive) { // do noting } else if (invoice.isPastDue) { invoices.add(invoice); } }); invoices.sort( (invoiceA, invoiceB) => invoiceA.dueDate.compareTo(invoiceB.dueDate)); return invoices; } var memoizedRecentPayments = memo2(( BuiltMap paymentMap, BuiltMap clientMap, ) => _recentPayments( paymentMap: paymentMap, clientMap: clientMap, )); List _recentPayments({ BuiltMap paymentMap, BuiltMap clientMap, }) { final payments = []; final oneMonthAgo = DateTime.now().subtract(Duration(days: 30)).millisecondsSinceEpoch / 1000; paymentMap.forEach((index, payment) { final client = clientMap[payment.clientId] ?? ClientEntity(id: payment.clientId); if (payment.isNotActive || client.isNotActive) { // do noting } else if (payment.isActive && payment.createdAt > oneMonthAgo) { payments.add(payment); } }); payments.sort( (paymentA, paymentB) => paymentB.createdAt.compareTo(paymentA.createdAt)); return payments; } var memoizedUpcomingQuotes = memo2(( BuiltMap quoteMap, BuiltMap clientMap, ) => _upcomingQuotes( quoteMap: quoteMap, clientMap: clientMap, )); List _upcomingQuotes({ BuiltMap quoteMap, BuiltMap clientMap, }) { final quotes = []; quoteMap.forEach((index, quote) { final client = clientMap[quote.clientId] ?? ClientEntity(id: quote.clientId); if (quote.isNotActive || client.isNotActive) { // do noting } else if (quote.isUpcoming) { quotes.add(quote); } }); quotes.sort((quoteA, quoteB) => quoteA.dueDate.compareTo(quoteB.dueDate)); return quotes; } var memoizedExpiredQuotes = memo2(( BuiltMap quoteMap, BuiltMap clientMap, ) => _expiredQuotes( quoteMap: quoteMap, clientMap: clientMap, )); List _expiredQuotes({ BuiltMap quoteMap, BuiltMap clientMap, }) { final quotes = []; quoteMap.forEach((index, quote) { final client = clientMap[quote.clientId] ?? ClientEntity(id: quote.clientId); if (quote.isNotActive || client.isNotActive) { // do noting } else if (quote.isPastDue) { quotes.add(quote); } }); quotes.sort((quoteA, quoteB) => quoteA.dueDate.compareTo(quoteB.dueDate)); return quotes; } var memoizedRunningTasks = memo2(( BuiltMap taskMap, BuiltMap clientMap, ) => _runningTasks( taskMap: taskMap, clientMap: clientMap, )); List _runningTasks({ BuiltMap taskMap, BuiltMap clientMap, }) { final tasks = []; taskMap.forEach((index, task) { final client = clientMap[task.clientId] ?? ClientEntity(id: task.clientId); if (task.isNotActive || client.isNotActive) { // do noting } else if (task.isRunning) { tasks.add(task); } }); tasks.sort((taskA, taskB) => (taskA.startTimestamp ?? 0).compareTo(taskB.startTimestamp ?? 0)); return tasks; } var memoizedRecentTasks = memo2(( BuiltMap taskMap, BuiltMap clientMap, ) => _recentTasks( taskMap: taskMap, clientMap: clientMap, )); List _recentTasks({ BuiltMap taskMap, BuiltMap clientMap, }) { final tasks = []; taskMap.forEach((index, task) { final client = clientMap[task.clientId] ?? ClientEntity(id: task.clientId); if (task.isNotActive || client.isNotActive) { // do noting } else if (!task.isRunning) { tasks.add(task); } }); tasks.sort((taskA, taskB) => (taskA.startTimestamp ?? 0).compareTo(taskB.startTimestamp ?? 0)); return tasks; } /* var memoizedUpcomingExpenses = memo2(( BuiltMap expenseMap, BuiltMap clientMap, ) => _upcomingExpenses( expenseMap: expenseMap, clientMap: clientMap, )); List _upcomingExpenses({ BuiltMap expenseMap, BuiltMap clientMap, }) { final expenses = []; expenseMap.forEach((index, expense) { final client = expenseMap[expense.clientId] ?? ClientEntity(id: expense.clientId); if (expense.isNotActive || client.isNotActive) { // do noting } else if (expense.isUpcoming) { expenses.add(expense); } }); expenses.sort((expenseA, expenseB) => (expenseA.date ?? '').compareTo(expenseB.date ?? '')); return expenses; } */ var memoizedRecentExpenses = memo2(( BuiltMap expenseMap, BuiltMap clientMap, ) => _recentExpenses( expenseMap: expenseMap, clientMap: clientMap, )); List _recentExpenses({ BuiltMap expenseMap, BuiltMap clientMap, }) { final expenses = []; expenseMap.forEach((index, expense) { final client = clientMap[expense.clientId] ?? ClientEntity(id: expense.clientId); if (expense.isNotActive || client.isNotActive) { // do noting } else { expenses.add(expense); } }); expenses.sort((expenseA, expenseB) => (expenseA.date ?? '').compareTo(expenseB.date ?? '')); return expenses; }