From 21755fa14ce85579a54458e9d2cae4057ec1c28e Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Fri, 20 May 2022 12:05:46 +0300 Subject: [PATCH] CSV export --- lib/data/models/import_model.dart | 25 +++++++++ lib/data/models/import_model.g.dart | 87 +++++++++++++++++++++++++++++ lib/ui/settings/import_export.dart | 37 +++++++++--- lib/utils/i18n.dart | 15 +++++ 4 files changed, 156 insertions(+), 8 deletions(-) diff --git a/lib/data/models/import_model.dart b/lib/data/models/import_model.dart index 7807260be..c687ab860 100644 --- a/lib/data/models/import_model.dart +++ b/lib/data/models/import_model.dart @@ -170,3 +170,28 @@ class ImportType extends EnumClass { static ImportType valueOf(String name) => _$typeValueOf(name); } + +class ExportType extends EnumClass { + const ExportType._(String name) : super(name); + + static Serializer get serializer => _$exportTypeSerializer; + + static const ExportType clients = _$clients; + static const ExportType contacts = _$contacts; + static const ExportType credits = _$credits; + static const ExportType documents = _$documents; + static const ExportType expenses = _$expenses; + static const ExportType invoices = _$invoices; + static const ExportType invoice_items = _$invoice_items; + static const ExportType quotes = _$quotes; + static const ExportType quote_items = _$quote_items; + static const ExportType recurring_invoices = _$recurring_invoices; + static const ExportType payments = _$payments; + static const ExportType products = _$products; + static const ExportType tasks = _$tasks; + static const ExportType profitloss = _$profitloss; + + static BuiltSet get values => _$exportValues; + + static ExportType valueOf(String name) => _$exportValueOf(name); +} diff --git a/lib/data/models/import_model.g.dart b/lib/data/models/import_model.g.dart index 59ebd26df..32da212e6 100644 --- a/lib/data/models/import_model.g.dart +++ b/lib/data/models/import_model.g.dart @@ -46,6 +46,75 @@ final BuiltSet _$typeValues = _$zoho, ]); +const ExportType _$clients = const ExportType._('clients'); +const ExportType _$contacts = const ExportType._('contacts'); +const ExportType _$credits = const ExportType._('credits'); +const ExportType _$documents = const ExportType._('documents'); +const ExportType _$expenses = const ExportType._('expenses'); +const ExportType _$invoices = const ExportType._('invoices'); +const ExportType _$invoice_items = const ExportType._('invoice_items'); +const ExportType _$quotes = const ExportType._('quotes'); +const ExportType _$quote_items = const ExportType._('quote_items'); +const ExportType _$recurring_invoices = + const ExportType._('recurring_invoices'); +const ExportType _$payments = const ExportType._('payments'); +const ExportType _$products = const ExportType._('products'); +const ExportType _$tasks = const ExportType._('tasks'); +const ExportType _$profitloss = const ExportType._('profitloss'); + +ExportType _$exportValueOf(String name) { + switch (name) { + case 'clients': + return _$clients; + case 'contacts': + return _$contacts; + case 'credits': + return _$credits; + case 'documents': + return _$documents; + case 'expenses': + return _$expenses; + case 'invoices': + return _$invoices; + case 'invoice_items': + return _$invoice_items; + case 'quotes': + return _$quotes; + case 'quote_items': + return _$quote_items; + case 'recurring_invoices': + return _$recurring_invoices; + case 'payments': + return _$payments; + case 'products': + return _$products; + case 'tasks': + return _$tasks; + case 'profitloss': + return _$profitloss; + default: + throw new ArgumentError(name); + } +} + +final BuiltSet _$exportValues = + new BuiltSet(const [ + _$clients, + _$contacts, + _$credits, + _$documents, + _$expenses, + _$invoices, + _$invoice_items, + _$quotes, + _$quote_items, + _$recurring_invoices, + _$payments, + _$products, + _$tasks, + _$profitloss, +]); + Serializer _$preImportResponseSerializer = new _$PreImportResponseSerializer(); Serializer @@ -56,6 +125,7 @@ Serializer _$importRequestSerializer = Serializer _$importRequestMappingSerializer = new _$ImportRequestMappingSerializer(); Serializer _$importTypeSerializer = new _$ImportTypeSerializer(); +Serializer _$exportTypeSerializer = new _$ExportTypeSerializer(); class _$PreImportResponseSerializer implements StructuredSerializer { @@ -303,6 +373,23 @@ class _$ImportTypeSerializer implements PrimitiveSerializer { ImportType.valueOf(serialized as String); } +class _$ExportTypeSerializer implements PrimitiveSerializer { + @override + final Iterable types = const [ExportType]; + @override + final String wireName = 'ExportType'; + + @override + Object serialize(Serializers serializers, ExportType object, + {FullType specifiedType = FullType.unspecified}) => + object.name; + + @override + ExportType deserialize(Serializers serializers, Object serialized, + {FullType specifiedType = FullType.unspecified}) => + ExportType.valueOf(serialized as String); +} + class _$PreImportResponse extends PreImportResponse { @override final String hash; diff --git a/lib/ui/settings/import_export.dart b/lib/ui/settings/import_export.dart index 78a00fc4d..95510cead 100644 --- a/lib/ui/settings/import_export.dart +++ b/lib/ui/settings/import_export.dart @@ -48,8 +48,9 @@ class _ImportExportState extends State { FocusScopeNode _focusNode; bool autoValidate = false; PreImportResponse _response; - var _importType = ImportType.csv; - var _exportType = ImportType.csv; + var _importFormat = ImportType.csv; + var _exportFormat = ImportType.csv; + var _exportType = ExportType.clients; bool _isExporting = false; @override @@ -82,9 +83,9 @@ class _ImportExportState extends State { children: [ if (_response == null) _FileImport( - importType: _importType, + importType: _importFormat, onUploaded: (response) => { - if (_importType == ImportType.csv) + if (_importFormat == ImportType.csv) { setState(() => _response = response), } @@ -94,12 +95,12 @@ class _ImportExportState extends State { } }, onImportTypeChanged: (importType) => - setState(() => _importType = importType), + setState(() => _importFormat = importType), ) else _FileMapper( key: ValueKey(_response.hash), - importType: _importType, + importType: _importFormat, formKey: _formKey, response: _response, onCancelPressed: () => setState(() => _response = null), @@ -117,10 +118,10 @@ class _ImportExportState extends State { child: DropdownButtonHideUnderline( child: DropdownButton( isDense: true, - value: _exportType, + value: _exportFormat, onChanged: (dynamic value) { setState(() { - _exportType = value; + _exportFormat = value; }); }, items: [ @@ -134,6 +135,26 @@ class _ImportExportState extends State { .toList()), ), ), + InputDecorator( + decoration: + InputDecoration(labelText: localization.exportType), + child: DropdownButtonHideUnderline( + child: DropdownButton( + isDense: true, + value: _exportType, + onChanged: (dynamic value) { + setState(() { + _exportType = value; + }); + }, + items: ExportType.values + .map((importType) => DropdownMenuItem( + value: importType, + child: + Text(localization.lookup('$importType')))) + .toList()), + ), + ), AppButton( iconData: MdiIcons.export, label: localization.export.toUpperCase(), diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index 27fd7b58d..47ff84c36 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -16,6 +16,9 @@ mixin LocalizationsProvider on LocaleCodeAware { static final Map> _localizedValues = { 'en': { // STARTER: lang key - do not remove comment + 'invoice_items': 'Invoice Items', + 'quote_items': 'Quote Items', + 'profitloss': 'Profit and Loss', 'import_format': 'Import Format', 'export_format': 'Export Format', 'export_type': 'Export Type', @@ -69693,6 +69696,18 @@ mixin LocalizationsProvider on LocaleCodeAware { _localizedValues[localeCode]['export_format'] ?? _localizedValues[localeCode]['export_format']; + String get invoiceItems => + _localizedValues[localeCode]['invoice_items'] ?? + _localizedValues[localeCode]['invoice_items']; + + String get quoteItems => + _localizedValues[localeCode]['quote_items'] ?? + _localizedValues[localeCode]['quote_items']; + + String get profitloss => + _localizedValues[localeCode]['profitloss'] ?? + _localizedValues[localeCode]['profitloss']; + // STARTER: lang field - do not remove comment String lookup(String key) {