integration of quotes into the project section #598

This commit is contained in:
Hillel Coren 2023-10-24 11:22:44 +03:00
parent a1900ea267
commit 1a96288ebd
3 changed files with 39 additions and 0 deletions

View File

@ -343,6 +343,29 @@ EntityStats invoiceStatsForProject(
return EntityStats(countActive: countActive, countArchived: countArchived); return EntityStats(countActive: countActive, countArchived: countArchived);
} }
var memoizedQuoteStatsForProject = memo2((
String projectId,
BuiltMap<String, InvoiceEntity> quoteMap,
) =>
quoteStatsForProject(projectId, quoteMap));
EntityStats quoteStatsForProject(
String projectId, BuiltMap<String, InvoiceEntity> 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( var memoizedInvoiceStatsForUser = memo2(
(String userId, BuiltMap<String, InvoiceEntity> invoiceMap) => (String userId, BuiltMap<String, InvoiceEntity> invoiceMap) =>
invoiceStatsForUser(userId, invoiceMap)); invoiceStatsForUser(userId, invoiceMap));

View File

@ -280,6 +280,12 @@ void handleProjectAction(
entity: InvoiceEntity(state: state, client: client) entity: InvoiceEntity(state: state, client: client)
.rebuild((b) => b..projectId = project.id)); .rebuild((b) => b..projectId = project.id));
break; break;
case EntityAction.newQuote:
createEntity(
entity: InvoiceEntity(
state: state, client: client, entityType: EntityType.quote)
.rebuild((b) => b..projectId = project.id));
break;
case EntityAction.invoiceProject: case EntityAction.invoiceProject:
String lastClientId = ''; String lastClientId = '';
bool hasMultipleClients = false; bool hasMultipleClients = false;

View File

@ -154,6 +154,16 @@ class _ProjectOverviewState extends State<ProjectOverview> {
project.id, state.invoiceState.map) project.id, state.invoiceState.map)
.present(localization.active, localization.archived), .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([ widgets.addAll([