Add designs templates
This commit is contained in:
parent
bd1d619604
commit
a7de25323e
|
|
@ -14,14 +14,13 @@ import 'package:invoiceninja_flutter/constants.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/models.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_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/document/document_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/product/product_selectors.dart';
|
import 'package:invoiceninja_flutter/redux/product/product_selectors.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
|
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/dialogs.dart';
|
import 'package:invoiceninja_flutter/utils/dialogs.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
|
|
||||||
import '../document/document_actions.dart';
|
|
||||||
|
|
||||||
class ViewProductList implements PersistUI {
|
class ViewProductList implements PersistUI {
|
||||||
ViewProductList({
|
ViewProductList({
|
||||||
this.force = false,
|
this.force = false,
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:invoiceninja_flutter/constants.dart';
|
import 'package:invoiceninja_flutter/constants.dart';
|
||||||
import 'package:invoiceninja_flutter/data/repositories/purchase_order_repository.dart';
|
import 'package:invoiceninja_flutter/data/repositories/purchase_order_repository.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/document/document_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart';
|
import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/purchase_order/purchase_order_actions.dart';
|
import 'package:invoiceninja_flutter/redux/purchase_order/purchase_order_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/purchase_order/edit/purchase_order_edit_vm.dart';
|
import 'package:invoiceninja_flutter/ui/purchase_order/edit/purchase_order_edit_vm.dart';
|
||||||
|
|
@ -20,8 +21,6 @@ import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
|
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
|
||||||
|
|
||||||
import '../document/document_actions.dart';
|
|
||||||
|
|
||||||
List<Middleware<AppState>> createStorePurchaseOrdersMiddleware([
|
List<Middleware<AppState>> createStorePurchaseOrdersMiddleware([
|
||||||
PurchaseOrderRepository repository = const PurchaseOrderRepository(),
|
PurchaseOrderRepository repository = const PurchaseOrderRepository(),
|
||||||
]) {
|
]) {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:invoiceninja_flutter/constants.dart';
|
import 'package:invoiceninja_flutter/constants.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/document/document_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart';
|
import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart';
|
||||||
|
|
||||||
// Package imports:
|
// Package imports:
|
||||||
|
|
@ -20,8 +21,6 @@ import 'package:invoiceninja_flutter/ui/recurring_invoice/recurring_invoice_pdf_
|
||||||
import 'package:invoiceninja_flutter/ui/recurring_invoice/recurring_invoice_screen.dart';
|
import 'package:invoiceninja_flutter/ui/recurring_invoice/recurring_invoice_screen.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/recurring_invoice/view/recurring_invoice_view_vm.dart';
|
import 'package:invoiceninja_flutter/ui/recurring_invoice/view/recurring_invoice_view_vm.dart';
|
||||||
|
|
||||||
import '../document/document_actions.dart';
|
|
||||||
|
|
||||||
List<Middleware<AppState>> createStoreRecurringInvoicesMiddleware([
|
List<Middleware<AppState>> createStoreRecurringInvoicesMiddleware([
|
||||||
RecurringInvoiceRepository repository = const RecurringInvoiceRepository(),
|
RecurringInvoiceRepository repository = const RecurringInvoiceRepository(),
|
||||||
]) {
|
]) {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import 'dart:convert';
|
||||||
|
|
||||||
// Flutter imports:
|
// Flutter imports:
|
||||||
import 'package:built_collection/built_collection.dart';
|
import 'package:built_collection/built_collection.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
// Package imports:
|
// Package imports:
|
||||||
|
|
@ -15,6 +14,7 @@ import 'package:http/http.dart';
|
||||||
import 'package:invoiceninja_flutter/constants.dart';
|
import 'package:invoiceninja_flutter/constants.dart';
|
||||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
import 'package:invoiceninja_flutter/main_app.dart';
|
import 'package:invoiceninja_flutter/main_app.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/design/design_selectors.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
|
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
|
import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
|
import 'package:invoiceninja_flutter/ui/app/dialogs/error_dialog.dart';
|
||||||
|
|
@ -40,11 +40,6 @@ import 'package:invoiceninja_flutter/utils/dialogs.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||||
|
|
||||||
import 'package:invoiceninja_flutter/utils/web_stub.dart'
|
|
||||||
if (dart.library.html) 'package:invoiceninja_flutter/utils/web.dart';
|
|
||||||
|
|
||||||
import '../../redux/design/design_selectors.dart';
|
|
||||||
|
|
||||||
class ClientPdfView extends StatefulWidget {
|
class ClientPdfView extends StatefulWidget {
|
||||||
const ClientPdfView({
|
const ClientPdfView({
|
||||||
Key? key,
|
Key? key,
|
||||||
|
|
@ -70,7 +65,6 @@ class _ClientPdfViewState extends State<ClientPdfView> {
|
||||||
convertDateTimeToSqlDate(DateTime.now().subtract(Duration(days: 365)));
|
convertDateTimeToSqlDate(DateTime.now().subtract(Duration(days: 365)));
|
||||||
String? _endDate = convertDateTimeToSqlDate();
|
String? _endDate = convertDateTimeToSqlDate();
|
||||||
String _status = kStatementStatusAll;
|
String _status = kStatementStatusAll;
|
||||||
String? _pdfString;
|
|
||||||
String? _designId;
|
String? _designId;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
@ -86,7 +80,6 @@ class _ClientPdfViewState extends State<ClientPdfView> {
|
||||||
}
|
}
|
||||||
|
|
||||||
final localization = AppLocalization.of(context);
|
final localization = AppLocalization.of(context);
|
||||||
final state = widget.viewModel.state;
|
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
_isLoading = true;
|
_isLoading = true;
|
||||||
|
|
@ -100,12 +93,6 @@ class _ClientPdfViewState extends State<ClientPdfView> {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_response = response;
|
_response = response;
|
||||||
|
|
||||||
if (kIsWeb && state.prefState.enableNativeBrowser) {
|
|
||||||
_pdfString = 'data:application/pdf;base64,' +
|
|
||||||
base64Encode(response!.bodyBytes);
|
|
||||||
WebUtils.registerWebView(_pdfString);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_isLoading = false;
|
_isLoading = false;
|
||||||
|
|
@ -501,19 +488,15 @@ class _ClientPdfViewState extends State<ClientPdfView> {
|
||||||
Expanded(
|
Expanded(
|
||||||
child: _isLoading || _response == null
|
child: _isLoading || _response == null
|
||||||
? LoadingIndicator()
|
? LoadingIndicator()
|
||||||
: (kIsWeb && state.prefState.enableNativeBrowser)
|
: PdfPreview(
|
||||||
? HtmlElementView(viewType: _pdfString!)
|
build: (format) => _response!.bodyBytes,
|
||||||
: PdfPreview(
|
canChangeOrientation: false,
|
||||||
build: (format) => _response!.bodyBytes,
|
canChangePageFormat: false,
|
||||||
canChangeOrientation: false,
|
canDebug: false,
|
||||||
canChangePageFormat: false,
|
maxPageWidth: 600,
|
||||||
canDebug: false,
|
pdfFileName:
|
||||||
maxPageWidth: 600,
|
localization.statement + '_' + client.number + '.pdf',
|
||||||
pdfFileName: localization.statement +
|
),
|
||||||
'_' +
|
|
||||||
client.number +
|
|
||||||
'.pdf',
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,11 @@ import 'package:invoiceninja_flutter/data/models/entities.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/static/static_selectors.dart';
|
import 'package:invoiceninja_flutter/redux/static/static_selectors.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
|
import 'package:invoiceninja_flutter/ui/app/buttons/elevated_button.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
|
import 'package:invoiceninja_flutter/ui/app/entity_dropdown.dart';
|
||||||
|
import 'package:invoiceninja_flutter/ui/app/form_card.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
import 'package:invoiceninja_flutter/ui/app/forms/decorated_form_field.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
|
import 'package:invoiceninja_flutter/ui/client/edit/client_edit_vm.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/completers.dart';
|
import 'package:invoiceninja_flutter/utils/completers.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
import '../../app/form_card.dart';
|
|
||||||
|
|
||||||
class ClientEditShippingAddress extends StatefulWidget {
|
class ClientEditShippingAddress extends StatefulWidget {
|
||||||
const ClientEditShippingAddress({
|
const ClientEditShippingAddress({
|
||||||
|
|
|
||||||
|
|
@ -6,14 +6,13 @@ import 'package:flutter_styled_toast/flutter_styled_toast.dart';
|
||||||
|
|
||||||
// Project imports:
|
// Project imports:
|
||||||
import 'package:invoiceninja_flutter/data/models/models.dart';
|
import 'package:invoiceninja_flutter/data/models/models.dart';
|
||||||
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
|
import 'package:invoiceninja_flutter/ui/app/help_text.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
|
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_contacts_vm.dart';
|
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_contacts_vm.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
|
|
||||||
import '../../../redux/app/app_state.dart';
|
|
||||||
|
|
||||||
class InvoiceEditContacts extends StatelessWidget {
|
class InvoiceEditContacts extends StatelessWidget {
|
||||||
const InvoiceEditContacts({
|
const InvoiceEditContacts({
|
||||||
Key? key,
|
Key? key,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
// Dart imports:
|
// Dart imports:
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
// Flutter imports:
|
// Flutter imports:
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
@ -31,9 +30,6 @@ import 'package:invoiceninja_flutter/utils/formatting.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/localization.dart';
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
||||||
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||||
|
|
||||||
import 'package:invoiceninja_flutter/utils/web_stub.dart'
|
|
||||||
if (dart.library.html) 'package:invoiceninja_flutter/utils/web.dart';
|
|
||||||
|
|
||||||
class InvoicePdfView extends StatefulWidget {
|
class InvoicePdfView extends StatefulWidget {
|
||||||
const InvoicePdfView({
|
const InvoicePdfView({
|
||||||
Key? key,
|
Key? key,
|
||||||
|
|
@ -53,7 +49,6 @@ class _InvoicePdfViewState extends State<InvoicePdfView> {
|
||||||
bool _isDeliveryNote = false;
|
bool _isDeliveryNote = false;
|
||||||
String? _designId;
|
String? _designId;
|
||||||
String? _activityId;
|
String? _activityId;
|
||||||
String? _pdfString;
|
|
||||||
http.Response? _response;
|
http.Response? _response;
|
||||||
//int _pageCount = 1;
|
//int _pageCount = 1;
|
||||||
//int _currentPage = 1;
|
//int _currentPage = 1;
|
||||||
|
|
@ -75,7 +70,6 @@ class _InvoicePdfViewState extends State<InvoicePdfView> {
|
||||||
void loadPdf() {
|
void loadPdf() {
|
||||||
final viewModel = widget.viewModel;
|
final viewModel = widget.viewModel;
|
||||||
final invoice = viewModel.invoice!;
|
final invoice = viewModel.invoice!;
|
||||||
final state = viewModel.state;
|
|
||||||
|
|
||||||
if (invoice.invitations.isEmpty) {
|
if (invoice.invitations.isEmpty) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -95,12 +89,6 @@ class _InvoicePdfViewState extends State<InvoicePdfView> {
|
||||||
setState(() {
|
setState(() {
|
||||||
_response = response;
|
_response = response;
|
||||||
_isLoading = false;
|
_isLoading = false;
|
||||||
|
|
||||||
if (kIsWeb && state!.prefState.enableNativeBrowser) {
|
|
||||||
_pdfString = 'data:application/pdf;base64,' +
|
|
||||||
base64Encode(response!.bodyBytes);
|
|
||||||
WebUtils.registerWebView(_pdfString);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}).catchError((Object error) {
|
}).catchError((Object error) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|
@ -144,42 +132,39 @@ class _InvoicePdfViewState extends State<InvoicePdfView> {
|
||||||
];
|
];
|
||||||
*/
|
*/
|
||||||
|
|
||||||
final activityPicker =
|
final activityPicker = _activityId == null
|
||||||
_activityId == null || (kIsWeb && state.prefState.enableNativeBrowser)
|
? SizedBox()
|
||||||
? SizedBox()
|
: Expanded(
|
||||||
: Expanded(
|
child: Padding(
|
||||||
child: Padding(
|
padding: const EdgeInsets.only(left: 17),
|
||||||
padding: const EdgeInsets.only(left: 17),
|
child: IgnorePointer(
|
||||||
child: IgnorePointer(
|
ignoring: _isLoading,
|
||||||
ignoring: _isLoading,
|
child: AppDropdownButton<String>(
|
||||||
child: AppDropdownButton<String>(
|
value: _activityId,
|
||||||
value: _activityId,
|
onChanged: (dynamic activityId) {
|
||||||
onChanged: (dynamic activityId) {
|
setState(() {
|
||||||
setState(() {
|
_activityId = activityId;
|
||||||
_activityId = activityId;
|
loadPdf();
|
||||||
loadPdf();
|
});
|
||||||
});
|
},
|
||||||
},
|
items: invoice.balanceHistory
|
||||||
items: invoice.balanceHistory
|
.map((history) => DropdownMenuItem(
|
||||||
.map((history) => DropdownMenuItem(
|
child: Text(formatNumber(history.amount, context,
|
||||||
child: Text(formatNumber(
|
clientId: invoice.clientId)! +
|
||||||
history.amount, context,
|
' • ' +
|
||||||
clientId: invoice.clientId)! +
|
formatDate(
|
||||||
' • ' +
|
convertTimestampToDateString(
|
||||||
formatDate(
|
history.createdAt),
|
||||||
convertTimestampToDateString(
|
context,
|
||||||
history.createdAt),
|
showTime: true)),
|
||||||
context,
|
value: history.activityId,
|
||||||
showTime: true)),
|
))
|
||||||
value: history.activityId,
|
.toList()),
|
||||||
))
|
),
|
||||||
.toList()),
|
),
|
||||||
),
|
);
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
final designPicker = _activityId != null ||
|
final designPicker = _activityId != null ||
|
||||||
(kIsWeb && state.prefState.enableNativeBrowser) ||
|
|
||||||
!hasDesignTemplatesForEntityType(
|
!hasDesignTemplatesForEntityType(
|
||||||
state.designState.map, invoice.entityType!)
|
state.designState.map, invoice.entityType!)
|
||||||
? SizedBox()
|
? SizedBox()
|
||||||
|
|
@ -289,20 +274,18 @@ class _InvoicePdfViewState extends State<InvoicePdfView> {
|
||||||
Expanded(
|
Expanded(
|
||||||
child: _isLoading || _response == null
|
child: _isLoading || _response == null
|
||||||
? LoadingIndicator()
|
? LoadingIndicator()
|
||||||
: (kIsWeb && state.prefState.enableNativeBrowser)
|
: PdfPreview(
|
||||||
? HtmlElementView(viewType: _pdfString!)
|
build: (format) => _response!.bodyBytes,
|
||||||
: PdfPreview(
|
canChangeOrientation: false,
|
||||||
build: (format) => _response!.bodyBytes,
|
canChangePageFormat: false,
|
||||||
canChangeOrientation: false,
|
canDebug: false,
|
||||||
canChangePageFormat: false,
|
maxPageWidth: 600,
|
||||||
canDebug: false,
|
pdfFileName:
|
||||||
maxPageWidth: 600,
|
localization.lookup(invoice.entityType!.snakeCase) +
|
||||||
pdfFileName:
|
'_' +
|
||||||
localization.lookup(invoice.entityType!.snakeCase) +
|
invoice.number +
|
||||||
'_' +
|
'.pdf',
|
||||||
invoice.number +
|
),
|
||||||
'.pdf',
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue