This commit is contained in:
Hillel Coren 2018-08-26 12:50:44 -07:00
parent 5ed5f85124
commit 128c025224
7 changed files with 52 additions and 24 deletions

View File

@ -17,8 +17,8 @@ Join the Android beta: https://play.google.com/apps/testing/com.invoiceninja.inv
- [x] Clients
- [x] Products
- [x] Invoices
- [x] Quotes
- [ ] Payments
- [ ] Quotes
- [ ] Credits
- [ ] Recurring
- [ ] Vendors

View File

@ -1,7 +1,8 @@
import 'package:intl/intl.dart';
import 'package:invoiceninja_flutter/redux/company/company_selectors.dart';
import 'package:invoiceninja_flutter/ui/app/app_builder.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/invoice_email_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_email_vm.dart';
import 'package:invoiceninja_flutter/ui/quote/quote_email_vm.dart';
import 'package:redux/redux.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter/material.dart';
@ -146,6 +147,7 @@ class InvoiceNinjaAppState extends State<InvoiceNinjaApp> {
},
QuoteViewScreen.route: (context) => QuoteViewScreen(),
QuoteEditScreen.route: (context) => QuoteEditScreen(),
QuoteEmailScreen.route: (context) => QuoteEmailScreen(),
SettingsScreen.route: (context) => SettingsScreen(),
},
);

View File

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/invoice_email_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_email_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_screen.dart';
import 'package:invoiceninja_flutter/ui/invoice/view/invoice_view_vm.dart';

View File

@ -2,8 +2,9 @@ import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/invoice_email_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_email_vm.dart';
import 'package:invoiceninja_flutter/ui/quote/edit/quote_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/quote/quote_email_vm.dart';
import 'package:invoiceninja_flutter/ui/quote/quote_screen.dart';
import 'package:invoiceninja_flutter/ui/quote/view/quote_view_vm.dart';
import 'package:redux/redux.dart';
@ -80,7 +81,8 @@ Middleware<AppState> _showEmailQuote() {
return (Store<AppState> store, dynamic action, NextDispatcher next) async {
next(action);
final emailWasSent = await Navigator.of(action.context).pushNamed(InvoiceEmailScreen.route);
final emailWasSent =
await Navigator.of(action.context).pushNamed(QuoteEmailScreen.route);
if (action.completer != null && emailWasSent) {
action.completer.complete(null);
@ -92,8 +94,8 @@ Middleware<AppState> _archiveQuote(QuoteRepository repository) {
return (Store<AppState> store, dynamic action, NextDispatcher next) {
final origQuote = store.state.quoteState.map[action.quoteId];
repository
.saveData(store.state.selectedCompany, store.state.authState,
origQuote, EntityAction.archive)
.saveData(store.state.selectedCompany, store.state.authState, origQuote,
EntityAction.archive)
.then((dynamic quote) {
store.dispatch(ArchiveQuoteSuccess(quote));
if (action.completer != null) {
@ -115,8 +117,8 @@ Middleware<AppState> _deleteQuote(QuoteRepository repository) {
return (Store<AppState> store, dynamic action, NextDispatcher next) {
final origQuote = store.state.quoteState.map[action.quoteId];
repository
.saveData(store.state.selectedCompany, store.state.authState,
origQuote, EntityAction.delete)
.saveData(store.state.selectedCompany, store.state.authState, origQuote,
EntityAction.delete)
.then((InvoiceEntity quote) {
store.dispatch(DeleteQuoteSuccess(quote));
store.dispatch(LoadClient(clientId: quote.clientId));
@ -139,8 +141,8 @@ Middleware<AppState> _restoreQuote(QuoteRepository repository) {
return (Store<AppState> store, dynamic action, NextDispatcher next) {
final origQuote = store.state.quoteState.map[action.quoteId];
repository
.saveData(store.state.selectedCompany, store.state.authState,
origQuote, EntityAction.restore)
.saveData(store.state.selectedCompany, store.state.authState, origQuote,
EntityAction.restore)
.then((InvoiceEntity quote) {
store.dispatch(RestoreQuoteSuccess(quote));
store.dispatch(LoadClient(clientId: quote.clientId));
@ -163,8 +165,8 @@ Middleware<AppState> _markSentQuote(QuoteRepository repository) {
return (Store<AppState> store, dynamic action, NextDispatcher next) {
final origQuote = store.state.quoteState.map[action.quoteId];
repository
.saveData(store.state.selectedCompany, store.state.authState,
origQuote, EntityAction.markSent)
.saveData(store.state.selectedCompany, store.state.authState, origQuote,
EntityAction.markSent)
.then((dynamic quote) {
store.dispatch(MarkSentQuoteSuccess(quote));
store.dispatch(LoadClient(clientId: quote.clientId));

View File

@ -2,7 +2,7 @@ import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/ui/app/buttons/refresh_icon_button.dart';
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/invoice_email_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_email_vm.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/ui/app/lists/activity_list_tile.dart';
@ -14,7 +14,7 @@ import 'package:invoiceninja_flutter/utils/templates.dart';
import 'package:html/parser.dart';
class InvoiceEmailView extends StatefulWidget {
final EmailInvoiceVM viewModel;
final EmailEntityVM viewModel;
const InvoiceEmailView({
Key key,
@ -68,14 +68,20 @@ class _InvoiceEmailViewState extends State<InvoiceEmailView> {
}
void loadTemplate(EmailTemplate template) {
final company = widget.viewModel.company;
final viewModel = widget.viewModel;
final company = viewModel.company;
selectedTemplate = template;
switch (template) {
case EmailTemplate.initial:
if (viewModel.invoice.isQuote) {
emailSubject = company.emailSubjectQuote;
emailBody = company.emailBodyQuote;
} else {
emailSubject = company.emailSubjectInvoice;
emailBody = company.emailBodyInvoice;
}
break;
case EmailTemplate.reminder1:
emailSubject = company.emailSubjectReminder1;

View File

@ -41,7 +41,7 @@ class InvoiceEmailScreen extends StatelessWidget {
}
}
class EmailInvoiceVM {
abstract class EmailEntityVM {
final bool isLoading;
final bool isSaving;
final CompanyEntity company;
@ -49,7 +49,7 @@ class EmailInvoiceVM {
final ClientEntity client;
final Function(BuildContext, EmailTemplate, String, String) onSendPressed;
EmailInvoiceVM({
EmailEntityVM({
@required this.isLoading,
@required this.isSaving,
@required this.company,
@ -57,6 +57,25 @@ class EmailInvoiceVM {
@required this.client,
@required this.onSendPressed,
});
}
class EmailInvoiceVM extends EmailEntityVM {
EmailInvoiceVM({
bool isLoading,
bool isSaving,
CompanyEntity company,
InvoiceEntity invoice,
ClientEntity client,
Function(BuildContext, EmailTemplate, String, String) onSendPressed,
}): super(
isLoading: isLoading,
isSaving: isSaving,
company: company,
invoice: invoice,
client: client,
onSendPressed: onSendPressed,
);
factory EmailInvoiceVM.fromStore(
Store<AppState> store, InvoiceEntity invoice) {

View File

@ -9,7 +9,6 @@ import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/app/actions_menu_button.dart';
import 'package:invoiceninja_flutter/ui/app/icon_message.dart';
import 'package:invoiceninja_flutter/ui/app/invoice/invoice_item_view.dart';
import 'package:invoiceninja_flutter/ui/app/two_value_header.dart';
import 'package:invoiceninja_flutter/ui/quote/view/quote_view_vm.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';