Support viewing invoice from quote

This commit is contained in:
Hillel Coren 2022-02-08 16:19:01 +02:00
parent d12d16767d
commit 0378e4e56b
8 changed files with 24 additions and 3 deletions

View File

@ -897,8 +897,12 @@ abstract class InvoiceEntity extends Object
}
}
if (isQuote && (invoiceId ?? '').isEmpty) {
if (isQuote) {
if ((invoiceId ?? '').isEmpty) {
actions.add(EntityAction.convertToInvoice);
} else {
actions.add(EntityAction.viewInvoice);
}
}
}

View File

@ -106,6 +106,7 @@ class EntityAction extends EnumClass {
static const EntityAction invoiceProject = _$invoiceProject;
static const EntityAction resendInvite = _$resendInvite;
static const EntityAction disconnect = _$disconnect;
static const EntityAction viewInvoice = _$viewInvoice;
@override
String toString() {

View File

@ -72,6 +72,7 @@ const EntityAction _$invoiceExpense = const EntityAction._('invoiceExpense');
const EntityAction _$invoiceProject = const EntityAction._('invoiceProject');
const EntityAction _$resendInvite = const EntityAction._('resendInvite');
const EntityAction _$disconnect = const EntityAction._('disconnect');
const EntityAction _$viewInvoice = const EntityAction._('viewInvoice');
EntityAction _$valueOf(String name) {
switch (name) {
@ -193,6 +194,8 @@ EntityAction _$valueOf(String name) {
return _$resendInvite;
case 'disconnect':
return _$disconnect;
case 'viewInvoice':
return _$viewInvoice;
default:
throw new ArgumentError(name);
}
@ -259,6 +262,7 @@ final BuiltSet<EntityAction> _$values =
_$invoiceProject,
_$resendInvite,
_$disconnect,
_$viewInvoice,
]);
Serializer<EntityAction> _$entityActionSerializer =

View File

@ -474,6 +474,9 @@ Future handleQuoteAction(
snackBarCompleter<Null>(context, localization.convertedQuote),
quoteIds));
break;
case EntityAction.viewInvoice:
viewEntityById(entityId: quote.invoiceId, entityType: EntityType.invoice);
break;
case EntityAction.markSent:
store.dispatch(MarkSentQuotesRequest(
snackBarCompleter<Null>(context, localization.markedQuoteAsSent),

View File

@ -305,6 +305,9 @@ Middleware<AppState> _saveQuote(QuoteRepository repository) {
} else {
store.dispatch(SaveQuoteSuccess(quote));
}
if (action.action == EntityAction.convertToInvoice) {
store.dispatch(RefreshData());
}
action.completer.complete(quote);
}).catchError((Object error) {
print(error);

View File

@ -97,6 +97,7 @@ class QuoteEditVM extends AbstractInvoiceEditVM {
EntityAction.emailQuote,
EntityAction.viewPdf,
EntityAction.download,
EntityAction.viewInvoice,
].contains(action)) {
handleEntityAction(quote, action);
} else {
@ -132,6 +133,7 @@ class QuoteEditVM extends AbstractInvoiceEditVM {
EntityAction.emailQuote,
EntityAction.viewPdf,
EntityAction.download,
EntityAction.viewInvoice,
].contains(action)) {
handleEntityAction(savedQuote, action);
}

View File

@ -100,7 +100,9 @@ class _QuoteEditState extends State<QuoteEdit>
EntityAction.download,
EntityAction.emailQuote,
if (!invoice.isSent) EntityAction.markSent,
if (!invoice.isApproved) EntityAction.convertToInvoice,
invoice.invoiceId.isEmpty
? EntityAction.convertToInvoice
: EntityAction.viewInvoice,
],
onActionPressed: (context, action) => _onSavePressed(context, action),
appBarBottom: TabBar(

View File

@ -91,6 +91,8 @@ IconData getEntityActionIcon(EntityAction entityAction) {
return MdiIcons.lanDisconnect;
case EntityAction.purge:
return Icons.delete_forever;
case EntityAction.viewInvoice:
return MdiIcons.fileAccount;
default:
return null;
}