From 1a96288ebd4f39f0298166f4539fc2534b2eda81 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Tue, 24 Oct 2023 11:22:44 +0300 Subject: [PATCH] integration of quotes into the project section #598 --- lib/redux/invoice/invoice_selectors.dart | 23 +++++++++++++++++++ lib/redux/project/project_actions.dart | 6 +++++ .../project/view/project_view_overview.dart | 10 ++++++++ 3 files changed, 39 insertions(+) diff --git a/lib/redux/invoice/invoice_selectors.dart b/lib/redux/invoice/invoice_selectors.dart index 7e38c3ca8..d6d1ff462 100644 --- a/lib/redux/invoice/invoice_selectors.dart +++ b/lib/redux/invoice/invoice_selectors.dart @@ -343,6 +343,29 @@ EntityStats invoiceStatsForProject( return EntityStats(countActive: countActive, countArchived: countArchived); } +var memoizedQuoteStatsForProject = memo2(( + String projectId, + BuiltMap quoteMap, +) => + quoteStatsForProject(projectId, quoteMap)); + +EntityStats quoteStatsForProject( + String projectId, BuiltMap quoteMap) { + int countActive = 0; + int countArchived = 0; + quoteMap.forEach((quoteId, quote) { + if (quote.projectId == projectId) { + if (quote.isActive) { + countActive++; + } else if (quote.isArchived) { + countArchived++; + } + } + }); + + return EntityStats(countActive: countActive, countArchived: countArchived); +} + var memoizedInvoiceStatsForUser = memo2( (String userId, BuiltMap invoiceMap) => invoiceStatsForUser(userId, invoiceMap)); diff --git a/lib/redux/project/project_actions.dart b/lib/redux/project/project_actions.dart index fddb0b628..be5b05cca 100644 --- a/lib/redux/project/project_actions.dart +++ b/lib/redux/project/project_actions.dart @@ -280,6 +280,12 @@ void handleProjectAction( entity: InvoiceEntity(state: state, client: client) .rebuild((b) => b..projectId = project.id)); break; + case EntityAction.newQuote: + createEntity( + entity: InvoiceEntity( + state: state, client: client, entityType: EntityType.quote) + .rebuild((b) => b..projectId = project.id)); + break; case EntityAction.invoiceProject: String lastClientId = ''; bool hasMultipleClients = false; diff --git a/lib/ui/project/view/project_view_overview.dart b/lib/ui/project/view/project_view_overview.dart index c75bb6903..9ca7a566f 100644 --- a/lib/ui/project/view/project_view_overview.dart +++ b/lib/ui/project/view/project_view_overview.dart @@ -154,6 +154,16 @@ class _ProjectOverviewState extends State { project.id, state.invoiceState.map) .present(localization.active, localization.archived), ), + if (company.isModuleEnabled(EntityType.quote)) + EntitiesListTile( + entity: project, + isFilter: widget.isFilter, + entityType: EntityType.quote, + title: localization.quotes, + subtitle: + memoizedQuoteStatsForProject(project.id, state.quoteState.map) + .present(localization.active, localization.archived), + ), ]; widgets.addAll([