Purchase orders

This commit is contained in:
Hillel Coren 2022-06-23 12:27:35 +03:00
parent 5643c981e2
commit be5d35d5c4
4 changed files with 82 additions and 7 deletions

View File

@ -483,8 +483,10 @@ Future handleCreditAction(
case EntityAction.emailCredit:
case EntityAction.bulkEmailCredit:
bool emailValid = true;
creditIds.forEach((element) {
final client = state.clientState.get(credit.clientId);
credits.forEach((credit) {
final client = state.clientState.get(
(credit as InvoiceEntity).clientId,
);
if (!client.hasEmailAddress) {
emailValid = false;
}

View File

@ -569,8 +569,10 @@ void handleInvoiceAction(BuildContext context, List<BaseEntity> invoices,
case EntityAction.emailInvoice:
case EntityAction.bulkEmailInvoice:
bool emailValid = true;
invoiceIds.forEach((element) {
final client = state.clientState.get(invoice.clientId);
invoices.forEach((invoice) {
final client = state.clientState.get(
(invoice as InvoiceEntity).clientId,
);
if (!client.hasEmailAddress) {
emailValid = false;
}

View File

@ -1,11 +1,12 @@
import 'dart:async';
import 'package:built_collection/built_collection.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
@ -172,6 +173,25 @@ class SavePurchaseOrderFailure implements StopSaving {
final Object error;
}
class BulkEmailPurchaseOrdersRequest implements StartSaving {
BulkEmailPurchaseOrdersRequest(this.completer, this.purchaseOrderIds);
final Completer completer;
final List<String> purchaseOrderIds;
}
class BulkEmailPurchaseOrdersSuccess implements StopSaving, PersistData {
BulkEmailPurchaseOrdersSuccess(this.purchaseOrders);
final List<InvoiceEntity> purchaseOrders;
}
class BulkEmailPurchaseOrdersFailure implements StopSaving {
BulkEmailPurchaseOrdersFailure(this.error);
final dynamic error;
}
class ArchivePurchaseOrdersRequest implements StartSaving {
ArchivePurchaseOrdersRequest(this.completer, this.purchaseOrderIds);
@ -429,6 +449,7 @@ void handlePurchaseOrderAction(BuildContext context,
}
final store = StoreProvider.of<AppState>(context);
final state = store.state;
final localization = AppLocalization.of(context);
final purchaseOrder = purchaseOrders.first as InvoiceEntity;
final purchaseOrderIds =
@ -480,6 +501,54 @@ void handlePurchaseOrderAction(BuildContext context,
}
}
break;
case EntityAction.emailPurchaseOrder:
case EntityAction.bulkEmailPurchaseOrder:
bool emailValid = true;
purchaseOrders.forEach((purchaseOrder) {
final client = state.clientState.get(
(purchaseOrder as InvoiceEntity).clientId,
);
if (!client.hasEmailAddress) {
emailValid = false;
}
});
if (!emailValid) {
showMessageDialog(
context: context,
message: localization.clientEmailNotSet,
secondaryActions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
editEntity(
entity: state.clientState.get(purchaseOrder.clientId));
},
child: Text(localization.editClient.toUpperCase()))
]);
return;
}
if (action == EntityAction.emailQuote) {
store.dispatch(ShowEmailPurchaseOrder(
completer: snackBarCompleter<Null>(
context, localization.emailedPurchaseOrder),
purchaseOrder: purchaseOrder,
context: context));
} else {
confirmCallback(
context: context,
message: localization.bulkEmailQuote,
callback: (_) {
store.dispatch(BulkEmailPurchaseOrdersRequest(
snackBarCompleter<Null>(
context,
purchaseOrderIds.length == 1
? localization.emailedPurchaseOrder
: localization.emailedPurchaseOrders),
purchaseOrderIds));
});
}
break;
case EntityAction.more:
showEntityActionsDialog(
entities: [purchaseOrder],

View File

@ -522,8 +522,10 @@ Future handleQuoteAction(
case EntityAction.emailQuote:
case EntityAction.bulkEmailQuote:
bool emailValid = true;
quoteIds.forEach((element) {
final client = state.clientState.get(quote.clientId);
quotes.forEach((quote) {
final client = state.clientState.get(
(quote as InvoiceEntity).clientId,
);
if (!client.hasEmailAddress) {
emailValid = false;
}