Merge branch 'develop'
This commit is contained in:
commit
1e29930051
|
|
@ -44,20 +44,17 @@ PODS:
|
||||||
- DKImagePickerController/PhotoGallery
|
- DKImagePickerController/PhotoGallery
|
||||||
- Flutter
|
- Flutter
|
||||||
- Flutter (1.0.0)
|
- Flutter (1.0.0)
|
||||||
- FMDB (2.7.5):
|
|
||||||
- FMDB/standard (= 2.7.5)
|
|
||||||
- FMDB/standard (2.7.5)
|
|
||||||
- google_sign_in_ios (0.0.1):
|
- google_sign_in_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- GoogleSignIn (~> 6.2)
|
- GoogleSignIn (~> 7.0)
|
||||||
- GoogleSignIn (6.2.4):
|
- GoogleSignIn (7.0.0):
|
||||||
- AppAuth (~> 1.5)
|
- AppAuth (~> 1.5)
|
||||||
- GTMAppAuth (~> 1.3)
|
- GTMAppAuth (< 3.0, >= 1.3)
|
||||||
- GTMSessionFetcher/Core (< 3.0, >= 1.1)
|
- GTMSessionFetcher/Core (< 4.0, >= 1.1)
|
||||||
- GTMAppAuth (1.3.1):
|
- GTMAppAuth (2.0.0):
|
||||||
- AppAuth/Core (~> 1.6)
|
- AppAuth/Core (~> 1.6)
|
||||||
- GTMSessionFetcher/Core (< 3.0, >= 1.5)
|
- GTMSessionFetcher/Core (< 4.0, >= 1.5)
|
||||||
- GTMSessionFetcher/Core (2.3.0)
|
- GTMSessionFetcher/Core (3.2.0)
|
||||||
- image_cropper (0.0.4):
|
- image_cropper (0.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
- TOCropViewController (~> 2.6.1)
|
- TOCropViewController (~> 2.6.1)
|
||||||
|
|
@ -81,16 +78,16 @@ PODS:
|
||||||
- Flutter
|
- Flutter
|
||||||
- printing (1.0.0):
|
- printing (1.0.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- SDWebImage (5.18.5):
|
- SDWebImage (5.18.7):
|
||||||
- SDWebImage/Core (= 5.18.5)
|
- SDWebImage/Core (= 5.18.7)
|
||||||
- SDWebImage/Core (5.18.5)
|
- SDWebImage/Core (5.18.7)
|
||||||
- Sentry/HybridSDK (8.14.2):
|
- Sentry/HybridSDK (8.15.2):
|
||||||
- SentryPrivate (= 8.14.2)
|
- SentryPrivate (= 8.15.2)
|
||||||
- sentry_flutter (0.0.1):
|
- sentry_flutter (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- Sentry/HybridSDK (= 8.14.2)
|
- Sentry/HybridSDK (= 8.15.2)
|
||||||
- SentryPrivate (8.14.2)
|
- SentryPrivate (8.15.2)
|
||||||
- share_plus (0.0.1):
|
- share_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- shared_preferences_foundation (0.0.1):
|
- shared_preferences_foundation (0.0.1):
|
||||||
|
|
@ -100,9 +97,6 @@ PODS:
|
||||||
- Flutter
|
- Flutter
|
||||||
- smart_auth (0.0.1):
|
- smart_auth (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- sqflite (0.0.3):
|
|
||||||
- Flutter
|
|
||||||
- FMDB (>= 2.7.5)
|
|
||||||
- SwiftyGif (5.4.4)
|
- SwiftyGif (5.4.4)
|
||||||
- TOCropViewController (2.6.1)
|
- TOCropViewController (2.6.1)
|
||||||
- url_launcher_ios (0.0.1):
|
- url_launcher_ios (0.0.1):
|
||||||
|
|
@ -133,7 +127,6 @@ DEPENDENCIES:
|
||||||
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||||
- sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`)
|
- sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`)
|
||||||
- smart_auth (from `.symlinks/plugins/smart_auth/ios`)
|
- smart_auth (from `.symlinks/plugins/smart_auth/ios`)
|
||||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
|
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
|
||||||
- widget_kit_plugin (from `.symlinks/plugins/widget_kit_plugin/ios`)
|
- widget_kit_plugin (from `.symlinks/plugins/widget_kit_plugin/ios`)
|
||||||
|
|
@ -143,7 +136,6 @@ SPEC REPOS:
|
||||||
- AppAuth
|
- AppAuth
|
||||||
- DKImagePickerController
|
- DKImagePickerController
|
||||||
- DKPhotoGallery
|
- DKPhotoGallery
|
||||||
- FMDB
|
|
||||||
- GoogleSignIn
|
- GoogleSignIn
|
||||||
- GTMAppAuth
|
- GTMAppAuth
|
||||||
- GTMSessionFetcher
|
- GTMSessionFetcher
|
||||||
|
|
@ -194,8 +186,6 @@ EXTERNAL SOURCES:
|
||||||
:path: ".symlinks/plugins/sign_in_with_apple/ios"
|
:path: ".symlinks/plugins/sign_in_with_apple/ios"
|
||||||
smart_auth:
|
smart_auth:
|
||||||
:path: ".symlinks/plugins/smart_auth/ios"
|
:path: ".symlinks/plugins/smart_auth/ios"
|
||||||
sqflite:
|
|
||||||
:path: ".symlinks/plugins/sqflite/ios"
|
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||||
webview_flutter_wkwebview:
|
webview_flutter_wkwebview:
|
||||||
|
|
@ -211,11 +201,10 @@ SPEC CHECKSUMS:
|
||||||
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
||||||
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
|
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
|
||||||
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
||||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
google_sign_in_ios: 8115e3fbe097e6509beb819ed602d47369d9011f
|
||||||
google_sign_in_ios: 1256ff9d941db546373826966720b0c24804bcdd
|
GoogleSignIn: b232380cf495a429b8095d3178a8d5855b42e842
|
||||||
GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a
|
GTMAppAuth: 99fb010047ba3973b7026e45393f51f27ab965ae
|
||||||
GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd
|
GTMSessionFetcher: 41b9ef0b4c08a6db4b7eb51a21ae5183ec99a2c8
|
||||||
GTMSessionFetcher: 3a63d75eecd6aa32c2fc79f578064e1214dfdec2
|
|
||||||
image_cropper: a3291c624a953049bc6a02e1f8c8ceb162a24b25
|
image_cropper: a3291c624a953049bc6a02e1f8c8ceb162a24b25
|
||||||
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
||||||
in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43
|
in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43
|
||||||
|
|
@ -226,18 +215,17 @@ SPEC CHECKSUMS:
|
||||||
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
||||||
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
|
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
|
||||||
printing: 233e1b73bd1f4a05615548e9b5a324c98588640b
|
printing: 233e1b73bd1f4a05615548e9b5a324c98588640b
|
||||||
SDWebImage: 7ac2b7ddc5e8484c79aa90fc4e30b149d6a2c88f
|
SDWebImage: f9258c58221ed854cfa0e2b80ee4033710b1c6d3
|
||||||
Sentry: e0ea366f95ebb68f26d6030d8c22d6b2e6d23dd0
|
Sentry: 6f5742b4c47c17c9adcf265f6f328cf4a0ed1923
|
||||||
sentry_flutter: 9a04c51c373d76ee22167bf1e65bc468c0a91fed
|
sentry_flutter: 2c309a1d4b45e59d02cfa15795705687f1e2081b
|
||||||
SentryPrivate: 949a21fa59872427edc73b524c3ec8456761d97f
|
SentryPrivate: b2f7996f37781080f04a946eb4e377ff63c64195
|
||||||
share_plus: c3fef564749587fc939ef86ffb283ceac0baf9f5
|
share_plus: c3fef564749587fc939ef86ffb283ceac0baf9f5
|
||||||
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
|
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
|
||||||
sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440
|
sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440
|
||||||
smart_auth: 4bedbc118723912d0e45a07e8ab34039c19e04f2
|
smart_auth: 4bedbc118723912d0e45a07e8ab34039c19e04f2
|
||||||
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
|
||||||
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
|
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
|
||||||
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
|
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
|
||||||
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b
|
||||||
webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a
|
webview_flutter_wkwebview: 2e2d318f21a5e036e2c3f26171342e95908bd60a
|
||||||
widget_kit_plugin: a245a5248f0cd2bde580285ebe6bee5c6f1f6ce1
|
widget_kit_plugin: a245a5248f0cd2bde580285ebe6bee5c6f1f6ce1
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ const String kWhiteLabelUrl =
|
||||||
'https://app.invoiceninja.com/buy_now/?account_key=AsFmBAeLXF0IKf7tmi0eiyZfmWW9hxMT&product_id=3';
|
'https://app.invoiceninja.com/buy_now/?account_key=AsFmBAeLXF0IKf7tmi0eiyZfmWW9hxMT&product_id=3';
|
||||||
const String kPrivacyPolicyURL = 'https://www.invoiceninja.com/privacy-policy';
|
const String kPrivacyPolicyURL = 'https://www.invoiceninja.com/privacy-policy';
|
||||||
const String kTermsOfServiceURL = 'https://www.invoiceninja.com/terms';
|
const String kTermsOfServiceURL = 'https://www.invoiceninja.com/terms';
|
||||||
const String kBankingURL = 'https://invoiceninja.com/banking/';
|
const String kBankingURL = 'https://invoiceninja.com/banking';
|
||||||
const String kTransifexURL =
|
const String kTransifexURL =
|
||||||
'https://www.transifex.com/invoice-ninja/invoice-ninja';
|
'https://www.transifex.com/invoice-ninja/invoice-ninja';
|
||||||
const String kWebhookSiteURL = 'https://requestcatcher.com';
|
const String kWebhookSiteURL = 'https://requestcatcher.com';
|
||||||
|
|
@ -53,6 +53,11 @@ const String kFacebookUrl = 'https://www.facebook.com/invoiceninja';
|
||||||
const String kYouTubeUrl =
|
const String kYouTubeUrl =
|
||||||
'https://www.youtube.com/channel/UCXAHcBvhW05PDtWYIq7WDFA/videos';
|
'https://www.youtube.com/channel/UCXAHcBvhW05PDtWYIq7WDFA/videos';
|
||||||
|
|
||||||
|
const String kYodleeCoverageUrl =
|
||||||
|
'https://www.yodlee.com/open-banking/data-connections';
|
||||||
|
const String kNordigenCoverageUrl =
|
||||||
|
'https://gocardless.com/bank-account-data/coverage';
|
||||||
|
|
||||||
const String kTaskExtensionUrl =
|
const String kTaskExtensionUrl =
|
||||||
'https://chromewebstore.google.com/detail/invoice-ninja-tasks/dlfcbfdpemfnjbjlladogijcchfmmaaf';
|
'https://chromewebstore.google.com/detail/invoice-ninja-tasks/dlfcbfdpemfnjbjlladogijcchfmmaaf';
|
||||||
const String kTaskExtensionYouTubeUrl =
|
const String kTaskExtensionYouTubeUrl =
|
||||||
|
|
|
||||||
|
|
@ -73,11 +73,15 @@ abstract class BankAccountEntity extends Object
|
||||||
disabledUpstream: false,
|
disabledUpstream: false,
|
||||||
fromDate: '',
|
fromDate: '',
|
||||||
autoSync: false,
|
autoSync: false,
|
||||||
|
integrationType: '',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
BankAccountEntity._();
|
BankAccountEntity._();
|
||||||
|
|
||||||
|
static const String INTEGRATION_TYPE_YODLEE = 'yodlee';
|
||||||
|
static const String INTEGRATION_TYPE_NORDIGEN = 'nordigen';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@memoized
|
@memoized
|
||||||
int get hashCode;
|
int get hashCode;
|
||||||
|
|
@ -103,6 +107,9 @@ abstract class BankAccountEntity extends Object
|
||||||
@BuiltValueField(wireName: 'disabled_upstream')
|
@BuiltValueField(wireName: 'disabled_upstream')
|
||||||
bool get disabledUpstream;
|
bool get disabledUpstream;
|
||||||
|
|
||||||
|
@BuiltValueField(wireName: 'integration_type')
|
||||||
|
String get integrationType;
|
||||||
|
|
||||||
double get balance;
|
double get balance;
|
||||||
|
|
||||||
String get currency;
|
String get currency;
|
||||||
|
|
@ -203,7 +210,8 @@ abstract class BankAccountEntity extends Object
|
||||||
static void _initializeBuilder(BankAccountEntityBuilder builder) => builder
|
static void _initializeBuilder(BankAccountEntityBuilder builder) => builder
|
||||||
..fromDate = ''
|
..fromDate = ''
|
||||||
..disabledUpstream = false
|
..disabledUpstream = false
|
||||||
..autoSync = false;
|
..autoSync = false
|
||||||
|
..integrationType = '';
|
||||||
|
|
||||||
static Serializer<BankAccountEntity> get serializer =>
|
static Serializer<BankAccountEntity> get serializer =>
|
||||||
_$bankAccountEntitySerializer;
|
_$bankAccountEntitySerializer;
|
||||||
|
|
|
||||||
|
|
@ -139,6 +139,9 @@ class _$BankAccountEntitySerializer
|
||||||
'disabled_upstream',
|
'disabled_upstream',
|
||||||
serializers.serialize(object.disabledUpstream,
|
serializers.serialize(object.disabledUpstream,
|
||||||
specifiedType: const FullType(bool)),
|
specifiedType: const FullType(bool)),
|
||||||
|
'integration_type',
|
||||||
|
serializers.serialize(object.integrationType,
|
||||||
|
specifiedType: const FullType(String)),
|
||||||
'balance',
|
'balance',
|
||||||
serializers.serialize(object.balance,
|
serializers.serialize(object.balance,
|
||||||
specifiedType: const FullType(double)),
|
specifiedType: const FullType(double)),
|
||||||
|
|
@ -229,6 +232,10 @@ class _$BankAccountEntitySerializer
|
||||||
result.disabledUpstream = serializers.deserialize(value,
|
result.disabledUpstream = serializers.deserialize(value,
|
||||||
specifiedType: const FullType(bool))! as bool;
|
specifiedType: const FullType(bool))! as bool;
|
||||||
break;
|
break;
|
||||||
|
case 'integration_type':
|
||||||
|
result.integrationType = serializers.deserialize(value,
|
||||||
|
specifiedType: const FullType(String))! as String;
|
||||||
|
break;
|
||||||
case 'balance':
|
case 'balance':
|
||||||
result.balance = serializers.deserialize(value,
|
result.balance = serializers.deserialize(value,
|
||||||
specifiedType: const FullType(double))! as double;
|
specifiedType: const FullType(double))! as double;
|
||||||
|
|
@ -494,6 +501,8 @@ class _$BankAccountEntity extends BankAccountEntity {
|
||||||
@override
|
@override
|
||||||
final bool disabledUpstream;
|
final bool disabledUpstream;
|
||||||
@override
|
@override
|
||||||
|
final String integrationType;
|
||||||
|
@override
|
||||||
final double balance;
|
final double balance;
|
||||||
@override
|
@override
|
||||||
final String currency;
|
final String currency;
|
||||||
|
|
@ -526,6 +535,7 @@ class _$BankAccountEntity extends BankAccountEntity {
|
||||||
required this.fromDate,
|
required this.fromDate,
|
||||||
required this.autoSync,
|
required this.autoSync,
|
||||||
required this.disabledUpstream,
|
required this.disabledUpstream,
|
||||||
|
required this.integrationType,
|
||||||
required this.balance,
|
required this.balance,
|
||||||
required this.currency,
|
required this.currency,
|
||||||
this.isChanged,
|
this.isChanged,
|
||||||
|
|
@ -549,6 +559,8 @@ class _$BankAccountEntity extends BankAccountEntity {
|
||||||
autoSync, r'BankAccountEntity', 'autoSync');
|
autoSync, r'BankAccountEntity', 'autoSync');
|
||||||
BuiltValueNullFieldError.checkNotNull(
|
BuiltValueNullFieldError.checkNotNull(
|
||||||
disabledUpstream, r'BankAccountEntity', 'disabledUpstream');
|
disabledUpstream, r'BankAccountEntity', 'disabledUpstream');
|
||||||
|
BuiltValueNullFieldError.checkNotNull(
|
||||||
|
integrationType, r'BankAccountEntity', 'integrationType');
|
||||||
BuiltValueNullFieldError.checkNotNull(
|
BuiltValueNullFieldError.checkNotNull(
|
||||||
balance, r'BankAccountEntity', 'balance');
|
balance, r'BankAccountEntity', 'balance');
|
||||||
BuiltValueNullFieldError.checkNotNull(
|
BuiltValueNullFieldError.checkNotNull(
|
||||||
|
|
@ -581,6 +593,7 @@ class _$BankAccountEntity extends BankAccountEntity {
|
||||||
fromDate == other.fromDate &&
|
fromDate == other.fromDate &&
|
||||||
autoSync == other.autoSync &&
|
autoSync == other.autoSync &&
|
||||||
disabledUpstream == other.disabledUpstream &&
|
disabledUpstream == other.disabledUpstream &&
|
||||||
|
integrationType == other.integrationType &&
|
||||||
balance == other.balance &&
|
balance == other.balance &&
|
||||||
currency == other.currency &&
|
currency == other.currency &&
|
||||||
isChanged == other.isChanged &&
|
isChanged == other.isChanged &&
|
||||||
|
|
@ -605,6 +618,7 @@ class _$BankAccountEntity extends BankAccountEntity {
|
||||||
_$hash = $jc(_$hash, fromDate.hashCode);
|
_$hash = $jc(_$hash, fromDate.hashCode);
|
||||||
_$hash = $jc(_$hash, autoSync.hashCode);
|
_$hash = $jc(_$hash, autoSync.hashCode);
|
||||||
_$hash = $jc(_$hash, disabledUpstream.hashCode);
|
_$hash = $jc(_$hash, disabledUpstream.hashCode);
|
||||||
|
_$hash = $jc(_$hash, integrationType.hashCode);
|
||||||
_$hash = $jc(_$hash, balance.hashCode);
|
_$hash = $jc(_$hash, balance.hashCode);
|
||||||
_$hash = $jc(_$hash, currency.hashCode);
|
_$hash = $jc(_$hash, currency.hashCode);
|
||||||
_$hash = $jc(_$hash, isChanged.hashCode);
|
_$hash = $jc(_$hash, isChanged.hashCode);
|
||||||
|
|
@ -629,6 +643,7 @@ class _$BankAccountEntity extends BankAccountEntity {
|
||||||
..add('fromDate', fromDate)
|
..add('fromDate', fromDate)
|
||||||
..add('autoSync', autoSync)
|
..add('autoSync', autoSync)
|
||||||
..add('disabledUpstream', disabledUpstream)
|
..add('disabledUpstream', disabledUpstream)
|
||||||
|
..add('integrationType', integrationType)
|
||||||
..add('balance', balance)
|
..add('balance', balance)
|
||||||
..add('currency', currency)
|
..add('currency', currency)
|
||||||
..add('isChanged', isChanged)
|
..add('isChanged', isChanged)
|
||||||
|
|
@ -676,6 +691,11 @@ class BankAccountEntityBuilder
|
||||||
set disabledUpstream(bool? disabledUpstream) =>
|
set disabledUpstream(bool? disabledUpstream) =>
|
||||||
_$this._disabledUpstream = disabledUpstream;
|
_$this._disabledUpstream = disabledUpstream;
|
||||||
|
|
||||||
|
String? _integrationType;
|
||||||
|
String? get integrationType => _$this._integrationType;
|
||||||
|
set integrationType(String? integrationType) =>
|
||||||
|
_$this._integrationType = integrationType;
|
||||||
|
|
||||||
double? _balance;
|
double? _balance;
|
||||||
double? get balance => _$this._balance;
|
double? get balance => _$this._balance;
|
||||||
set balance(double? balance) => _$this._balance = balance;
|
set balance(double? balance) => _$this._balance = balance;
|
||||||
|
|
@ -732,6 +752,7 @@ class BankAccountEntityBuilder
|
||||||
_fromDate = $v.fromDate;
|
_fromDate = $v.fromDate;
|
||||||
_autoSync = $v.autoSync;
|
_autoSync = $v.autoSync;
|
||||||
_disabledUpstream = $v.disabledUpstream;
|
_disabledUpstream = $v.disabledUpstream;
|
||||||
|
_integrationType = $v.integrationType;
|
||||||
_balance = $v.balance;
|
_balance = $v.balance;
|
||||||
_currency = $v.currency;
|
_currency = $v.currency;
|
||||||
_isChanged = $v.isChanged;
|
_isChanged = $v.isChanged;
|
||||||
|
|
@ -778,10 +799,11 @@ class BankAccountEntityBuilder
|
||||||
autoSync, r'BankAccountEntity', 'autoSync'),
|
autoSync, r'BankAccountEntity', 'autoSync'),
|
||||||
disabledUpstream: BuiltValueNullFieldError.checkNotNull(
|
disabledUpstream: BuiltValueNullFieldError.checkNotNull(
|
||||||
disabledUpstream, r'BankAccountEntity', 'disabledUpstream'),
|
disabledUpstream, r'BankAccountEntity', 'disabledUpstream'),
|
||||||
|
integrationType: BuiltValueNullFieldError.checkNotNull(
|
||||||
|
integrationType, r'BankAccountEntity', 'integrationType'),
|
||||||
balance: BuiltValueNullFieldError.checkNotNull(
|
balance: BuiltValueNullFieldError.checkNotNull(
|
||||||
balance, r'BankAccountEntity', 'balance'),
|
balance, r'BankAccountEntity', 'balance'),
|
||||||
currency: BuiltValueNullFieldError.checkNotNull(
|
currency: BuiltValueNullFieldError.checkNotNull(currency, r'BankAccountEntity', 'currency'),
|
||||||
currency, r'BankAccountEntity', 'currency'),
|
|
||||||
isChanged: isChanged,
|
isChanged: isChanged,
|
||||||
createdAt: BuiltValueNullFieldError.checkNotNull(createdAt, r'BankAccountEntity', 'createdAt'),
|
createdAt: BuiltValueNullFieldError.checkNotNull(createdAt, r'BankAccountEntity', 'createdAt'),
|
||||||
updatedAt: BuiltValueNullFieldError.checkNotNull(updatedAt, r'BankAccountEntity', 'updatedAt'),
|
updatedAt: BuiltValueNullFieldError.checkNotNull(updatedAt, r'BankAccountEntity', 'updatedAt'),
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,8 @@ abstract class TransactionEntity extends Object
|
||||||
categoryId: '',
|
categoryId: '',
|
||||||
transactionRuleId: '',
|
transactionRuleId: '',
|
||||||
paymentId: '',
|
paymentId: '',
|
||||||
|
participant: '',
|
||||||
|
participantName: '',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -161,7 +163,11 @@ abstract class TransactionEntity extends Object
|
||||||
@BuiltValueField(wireName: 'bank_transaction_rule_id')
|
@BuiltValueField(wireName: 'bank_transaction_rule_id')
|
||||||
String get transactionRuleId;
|
String get transactionRuleId;
|
||||||
|
|
||||||
@BuiltValueField(serialize: false)
|
@BuiltValueField(wireName: 'participant_name')
|
||||||
|
String get participantName;
|
||||||
|
|
||||||
|
String get participant;
|
||||||
|
|
||||||
String? get pendingVendorId;
|
String? get pendingVendorId;
|
||||||
|
|
||||||
@BuiltValueField(serialize: false)
|
@BuiltValueField(serialize: false)
|
||||||
|
|
@ -383,7 +389,9 @@ abstract class TransactionEntity extends Object
|
||||||
..bankAccountId = ''
|
..bankAccountId = ''
|
||||||
..transactionRuleId = ''
|
..transactionRuleId = ''
|
||||||
..paymentId = ''
|
..paymentId = ''
|
||||||
..currencyId = '';
|
..currencyId = ''
|
||||||
|
..participantName = ''
|
||||||
|
..participant = '';
|
||||||
|
|
||||||
static Serializer<TransactionEntity> get serializer =>
|
static Serializer<TransactionEntity> get serializer =>
|
||||||
_$transactionEntitySerializer;
|
_$transactionEntitySerializer;
|
||||||
|
|
|
||||||
|
|
@ -166,6 +166,12 @@ class _$TransactionEntitySerializer
|
||||||
'bank_transaction_rule_id',
|
'bank_transaction_rule_id',
|
||||||
serializers.serialize(object.transactionRuleId,
|
serializers.serialize(object.transactionRuleId,
|
||||||
specifiedType: const FullType(String)),
|
specifiedType: const FullType(String)),
|
||||||
|
'participant_name',
|
||||||
|
serializers.serialize(object.participantName,
|
||||||
|
specifiedType: const FullType(String)),
|
||||||
|
'participant',
|
||||||
|
serializers.serialize(object.participant,
|
||||||
|
specifiedType: const FullType(String)),
|
||||||
'created_at',
|
'created_at',
|
||||||
serializers.serialize(object.createdAt,
|
serializers.serialize(object.createdAt,
|
||||||
specifiedType: const FullType(int)),
|
specifiedType: const FullType(int)),
|
||||||
|
|
@ -179,6 +185,13 @@ class _$TransactionEntitySerializer
|
||||||
serializers.serialize(object.id, specifiedType: const FullType(String)),
|
serializers.serialize(object.id, specifiedType: const FullType(String)),
|
||||||
];
|
];
|
||||||
Object? value;
|
Object? value;
|
||||||
|
value = object.pendingVendorId;
|
||||||
|
if (value != null) {
|
||||||
|
result
|
||||||
|
..add('pendingVendorId')
|
||||||
|
..add(serializers.serialize(value,
|
||||||
|
specifiedType: const FullType(String)));
|
||||||
|
}
|
||||||
value = object.isChanged;
|
value = object.isChanged;
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
result
|
result
|
||||||
|
|
@ -282,6 +295,18 @@ class _$TransactionEntitySerializer
|
||||||
result.transactionRuleId = serializers.deserialize(value,
|
result.transactionRuleId = serializers.deserialize(value,
|
||||||
specifiedType: const FullType(String))! as String;
|
specifiedType: const FullType(String))! as String;
|
||||||
break;
|
break;
|
||||||
|
case 'participant_name':
|
||||||
|
result.participantName = serializers.deserialize(value,
|
||||||
|
specifiedType: const FullType(String))! as String;
|
||||||
|
break;
|
||||||
|
case 'participant':
|
||||||
|
result.participant = serializers.deserialize(value,
|
||||||
|
specifiedType: const FullType(String))! as String;
|
||||||
|
break;
|
||||||
|
case 'pendingVendorId':
|
||||||
|
result.pendingVendorId = serializers.deserialize(value,
|
||||||
|
specifiedType: const FullType(String)) as String?;
|
||||||
|
break;
|
||||||
case 'isChanged':
|
case 'isChanged':
|
||||||
result.isChanged = serializers.deserialize(value,
|
result.isChanged = serializers.deserialize(value,
|
||||||
specifiedType: const FullType(bool)) as bool?;
|
specifiedType: const FullType(bool)) as bool?;
|
||||||
|
|
@ -606,6 +631,10 @@ class _$TransactionEntity extends TransactionEntity {
|
||||||
@override
|
@override
|
||||||
final String transactionRuleId;
|
final String transactionRuleId;
|
||||||
@override
|
@override
|
||||||
|
final String participantName;
|
||||||
|
@override
|
||||||
|
final String participant;
|
||||||
|
@override
|
||||||
final String? pendingVendorId;
|
final String? pendingVendorId;
|
||||||
@override
|
@override
|
||||||
final String? pendingCategoryId;
|
final String? pendingCategoryId;
|
||||||
|
|
@ -648,6 +677,8 @@ class _$TransactionEntity extends TransactionEntity {
|
||||||
required this.vendorId,
|
required this.vendorId,
|
||||||
required this.transactionId,
|
required this.transactionId,
|
||||||
required this.transactionRuleId,
|
required this.transactionRuleId,
|
||||||
|
required this.participantName,
|
||||||
|
required this.participant,
|
||||||
this.pendingVendorId,
|
this.pendingVendorId,
|
||||||
this.pendingCategoryId,
|
this.pendingCategoryId,
|
||||||
this.pendingExpenseId,
|
this.pendingExpenseId,
|
||||||
|
|
@ -689,6 +720,10 @@ class _$TransactionEntity extends TransactionEntity {
|
||||||
transactionId, r'TransactionEntity', 'transactionId');
|
transactionId, r'TransactionEntity', 'transactionId');
|
||||||
BuiltValueNullFieldError.checkNotNull(
|
BuiltValueNullFieldError.checkNotNull(
|
||||||
transactionRuleId, r'TransactionEntity', 'transactionRuleId');
|
transactionRuleId, r'TransactionEntity', 'transactionRuleId');
|
||||||
|
BuiltValueNullFieldError.checkNotNull(
|
||||||
|
participantName, r'TransactionEntity', 'participantName');
|
||||||
|
BuiltValueNullFieldError.checkNotNull(
|
||||||
|
participant, r'TransactionEntity', 'participant');
|
||||||
BuiltValueNullFieldError.checkNotNull(
|
BuiltValueNullFieldError.checkNotNull(
|
||||||
createdAt, r'TransactionEntity', 'createdAt');
|
createdAt, r'TransactionEntity', 'createdAt');
|
||||||
BuiltValueNullFieldError.checkNotNull(
|
BuiltValueNullFieldError.checkNotNull(
|
||||||
|
|
@ -725,6 +760,8 @@ class _$TransactionEntity extends TransactionEntity {
|
||||||
vendorId == other.vendorId &&
|
vendorId == other.vendorId &&
|
||||||
transactionId == other.transactionId &&
|
transactionId == other.transactionId &&
|
||||||
transactionRuleId == other.transactionRuleId &&
|
transactionRuleId == other.transactionRuleId &&
|
||||||
|
participantName == other.participantName &&
|
||||||
|
participant == other.participant &&
|
||||||
pendingVendorId == other.pendingVendorId &&
|
pendingVendorId == other.pendingVendorId &&
|
||||||
pendingCategoryId == other.pendingCategoryId &&
|
pendingCategoryId == other.pendingCategoryId &&
|
||||||
pendingExpenseId == other.pendingExpenseId &&
|
pendingExpenseId == other.pendingExpenseId &&
|
||||||
|
|
@ -758,6 +795,8 @@ class _$TransactionEntity extends TransactionEntity {
|
||||||
_$hash = $jc(_$hash, vendorId.hashCode);
|
_$hash = $jc(_$hash, vendorId.hashCode);
|
||||||
_$hash = $jc(_$hash, transactionId.hashCode);
|
_$hash = $jc(_$hash, transactionId.hashCode);
|
||||||
_$hash = $jc(_$hash, transactionRuleId.hashCode);
|
_$hash = $jc(_$hash, transactionRuleId.hashCode);
|
||||||
|
_$hash = $jc(_$hash, participantName.hashCode);
|
||||||
|
_$hash = $jc(_$hash, participant.hashCode);
|
||||||
_$hash = $jc(_$hash, pendingVendorId.hashCode);
|
_$hash = $jc(_$hash, pendingVendorId.hashCode);
|
||||||
_$hash = $jc(_$hash, pendingCategoryId.hashCode);
|
_$hash = $jc(_$hash, pendingCategoryId.hashCode);
|
||||||
_$hash = $jc(_$hash, pendingExpenseId.hashCode);
|
_$hash = $jc(_$hash, pendingExpenseId.hashCode);
|
||||||
|
|
@ -791,6 +830,8 @@ class _$TransactionEntity extends TransactionEntity {
|
||||||
..add('vendorId', vendorId)
|
..add('vendorId', vendorId)
|
||||||
..add('transactionId', transactionId)
|
..add('transactionId', transactionId)
|
||||||
..add('transactionRuleId', transactionRuleId)
|
..add('transactionRuleId', transactionRuleId)
|
||||||
|
..add('participantName', participantName)
|
||||||
|
..add('participant', participant)
|
||||||
..add('pendingVendorId', pendingVendorId)
|
..add('pendingVendorId', pendingVendorId)
|
||||||
..add('pendingCategoryId', pendingCategoryId)
|
..add('pendingCategoryId', pendingCategoryId)
|
||||||
..add('pendingExpenseId', pendingExpenseId)
|
..add('pendingExpenseId', pendingExpenseId)
|
||||||
|
|
@ -873,6 +914,15 @@ class TransactionEntityBuilder
|
||||||
set transactionRuleId(String? transactionRuleId) =>
|
set transactionRuleId(String? transactionRuleId) =>
|
||||||
_$this._transactionRuleId = transactionRuleId;
|
_$this._transactionRuleId = transactionRuleId;
|
||||||
|
|
||||||
|
String? _participantName;
|
||||||
|
String? get participantName => _$this._participantName;
|
||||||
|
set participantName(String? participantName) =>
|
||||||
|
_$this._participantName = participantName;
|
||||||
|
|
||||||
|
String? _participant;
|
||||||
|
String? get participant => _$this._participant;
|
||||||
|
set participant(String? participant) => _$this._participant = participant;
|
||||||
|
|
||||||
String? _pendingVendorId;
|
String? _pendingVendorId;
|
||||||
String? get pendingVendorId => _$this._pendingVendorId;
|
String? get pendingVendorId => _$this._pendingVendorId;
|
||||||
set pendingVendorId(String? pendingVendorId) =>
|
set pendingVendorId(String? pendingVendorId) =>
|
||||||
|
|
@ -944,6 +994,8 @@ class TransactionEntityBuilder
|
||||||
_vendorId = $v.vendorId;
|
_vendorId = $v.vendorId;
|
||||||
_transactionId = $v.transactionId;
|
_transactionId = $v.transactionId;
|
||||||
_transactionRuleId = $v.transactionRuleId;
|
_transactionRuleId = $v.transactionRuleId;
|
||||||
|
_participantName = $v.participantName;
|
||||||
|
_participant = $v.participant;
|
||||||
_pendingVendorId = $v.pendingVendorId;
|
_pendingVendorId = $v.pendingVendorId;
|
||||||
_pendingCategoryId = $v.pendingCategoryId;
|
_pendingCategoryId = $v.pendingCategoryId;
|
||||||
_pendingExpenseId = $v.pendingExpenseId;
|
_pendingExpenseId = $v.pendingExpenseId;
|
||||||
|
|
@ -1001,6 +1053,8 @@ class TransactionEntityBuilder
|
||||||
vendorId: BuiltValueNullFieldError.checkNotNull(vendorId, r'TransactionEntity', 'vendorId'),
|
vendorId: BuiltValueNullFieldError.checkNotNull(vendorId, r'TransactionEntity', 'vendorId'),
|
||||||
transactionId: BuiltValueNullFieldError.checkNotNull(transactionId, r'TransactionEntity', 'transactionId'),
|
transactionId: BuiltValueNullFieldError.checkNotNull(transactionId, r'TransactionEntity', 'transactionId'),
|
||||||
transactionRuleId: BuiltValueNullFieldError.checkNotNull(transactionRuleId, r'TransactionEntity', 'transactionRuleId'),
|
transactionRuleId: BuiltValueNullFieldError.checkNotNull(transactionRuleId, r'TransactionEntity', 'transactionRuleId'),
|
||||||
|
participantName: BuiltValueNullFieldError.checkNotNull(participantName, r'TransactionEntity', 'participantName'),
|
||||||
|
participant: BuiltValueNullFieldError.checkNotNull(participant, r'TransactionEntity', 'participant'),
|
||||||
pendingVendorId: pendingVendorId,
|
pendingVendorId: pendingVendorId,
|
||||||
pendingCategoryId: pendingCategoryId,
|
pendingCategoryId: pendingCategoryId,
|
||||||
pendingExpenseId: pendingExpenseId,
|
pendingExpenseId: pendingExpenseId,
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import 'package:flutter_redux/flutter_redux.dart';
|
||||||
import 'package:invoiceninja_flutter/constants.dart';
|
import 'package:invoiceninja_flutter/constants.dart';
|
||||||
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
||||||
import 'package:invoiceninja_flutter/ui/app/icon_text.dart';
|
import 'package:invoiceninja_flutter/ui/app/icon_text.dart';
|
||||||
|
import 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||||
|
|
||||||
class AppButton extends StatelessWidget {
|
class AppButton extends StatelessWidget {
|
||||||
const AppButton({
|
const AppButton({
|
||||||
|
|
@ -38,7 +39,7 @@ class AppButton extends StatelessWidget {
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: iconData != null
|
child: iconData != null && isDesktop(context)
|
||||||
? IconText(
|
? IconText(
|
||||||
icon: iconData,
|
icon: iconData,
|
||||||
text: label,
|
text: label,
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,13 @@ class LearnMoreUrl extends StatelessWidget {
|
||||||
required this.child,
|
required this.child,
|
||||||
required this.url,
|
required this.url,
|
||||||
this.label,
|
this.label,
|
||||||
|
this.isVertical = false,
|
||||||
});
|
});
|
||||||
|
|
||||||
final Widget child;
|
final Widget child;
|
||||||
final String url;
|
final String url;
|
||||||
final String? label;
|
final String? label;
|
||||||
|
final bool isVertical;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
@ -26,26 +28,43 @@ class LearnMoreUrl extends StatelessWidget {
|
||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Row(
|
if (isVertical) {
|
||||||
children: <Widget>[
|
return Column(
|
||||||
Expanded(
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
flex: 2,
|
children: [
|
||||||
child: child,
|
child,
|
||||||
),
|
SizedBox(height: 8),
|
||||||
SizedBox(
|
OutlinedButton(
|
||||||
width: 10,
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: TextButton(
|
|
||||||
child: Text(
|
child: Text(
|
||||||
label ?? localization!.learnMore,
|
label ?? localization!.learnMore,
|
||||||
maxLines: 4,
|
maxLines: 4,
|
||||||
),
|
),
|
||||||
onPressed: () => launchUrl(Uri.parse(url)),
|
onPressed: () => launchUrl(Uri.parse(url)),
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
],
|
);
|
||||||
);
|
} else {
|
||||||
|
return Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
flex: 2,
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
width: 10,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: TextButton(
|
||||||
|
child: Text(
|
||||||
|
label ?? localization!.learnMore,
|
||||||
|
maxLines: 4,
|
||||||
|
),
|
||||||
|
onPressed: () => launchUrl(Uri.parse(url)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import 'package:invoiceninja_flutter/ui/bank_account/bank_account_presenter.dart
|
||||||
import 'package:invoiceninja_flutter/utils/dialogs.dart';
|
import 'package:invoiceninja_flutter/utils/dialogs.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 'package:invoiceninja_flutter/utils/platforms.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
import 'bank_account_screen_vm.dart';
|
import 'bank_account_screen_vm.dart';
|
||||||
|
|
@ -34,6 +35,88 @@ class BankAccountScreen extends StatelessWidget {
|
||||||
final BankAccountScreenVM viewModel;
|
final BankAccountScreenVM viewModel;
|
||||||
|
|
||||||
void connectAccounts(BuildContext context) {
|
void connectAccounts(BuildContext context) {
|
||||||
|
final localization = AppLocalization.of(context)!;
|
||||||
|
|
||||||
|
if (isSelfHosted(context)) {
|
||||||
|
_connectAccounts(context, BankAccountEntity.INTEGRATION_TYPE_NORDIGEN);
|
||||||
|
} else {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: Text(localization.selectProvider),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.of(context).pop(),
|
||||||
|
child: Text(localization.close.toUpperCase()))
|
||||||
|
],
|
||||||
|
content: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
Text('Envestnet - Yodlee'),
|
||||||
|
Text(localization.yodleeRegions,
|
||||||
|
style: Theme.of(context).textTheme.bodySmall),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: AppButton(
|
||||||
|
label: localization.learnMore.toUpperCase(),
|
||||||
|
onPressed: () =>
|
||||||
|
launchUrl(Uri.parse(kYodleeCoverageUrl)),
|
||||||
|
iconData: Icons.info_outline,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: kTableColumnGap),
|
||||||
|
Expanded(
|
||||||
|
child: AppButton(
|
||||||
|
label: localization.connect.toUpperCase(),
|
||||||
|
onPressed: () => _connectAccounts(
|
||||||
|
context,
|
||||||
|
BankAccountEntity.INTEGRATION_TYPE_YODLEE,
|
||||||
|
),
|
||||||
|
iconData: Icons.link,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 30),
|
||||||
|
Text('GoCardless - Nordigen'),
|
||||||
|
Text(localization.nordigenRegions,
|
||||||
|
style: Theme.of(context).textTheme.bodySmall),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: AppButton(
|
||||||
|
label: localization.learnMore.toUpperCase(),
|
||||||
|
onPressed: () =>
|
||||||
|
launchUrl(Uri.parse(kNordigenCoverageUrl)),
|
||||||
|
iconData: Icons.info_outline,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: kTableColumnGap),
|
||||||
|
Expanded(
|
||||||
|
child: AppButton(
|
||||||
|
label: localization.connect.toUpperCase(),
|
||||||
|
onPressed: () => _connectAccounts(
|
||||||
|
context,
|
||||||
|
BankAccountEntity.INTEGRATION_TYPE_NORDIGEN,
|
||||||
|
),
|
||||||
|
iconData: Icons.link,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _connectAccounts(BuildContext context, String integrationType) {
|
||||||
final store = StoreProvider.of<AppState>(context);
|
final store = StoreProvider.of<AppState>(context);
|
||||||
final state = store.state;
|
final state = store.state;
|
||||||
final webClient = WebClient();
|
final webClient = WebClient();
|
||||||
|
|
@ -41,16 +124,25 @@ class BankAccountScreen extends StatelessWidget {
|
||||||
final url = '${credentials.url}/one_time_token';
|
final url = '${credentials.url}/one_time_token';
|
||||||
|
|
||||||
store.dispatch(StartSaving());
|
store.dispatch(StartSaving());
|
||||||
|
|
||||||
webClient
|
webClient
|
||||||
.post(url, credentials.token,
|
.post(url, credentials.token,
|
||||||
data: jsonEncode({
|
data: jsonEncode({
|
||||||
'context': {'return_url': ''}
|
'context':
|
||||||
|
integrationType == BankAccountEntity.INTEGRATION_TYPE_YODLEE
|
||||||
|
? {'return_url': ''}
|
||||||
|
: 'nordigen',
|
||||||
}))
|
}))
|
||||||
.then((dynamic response) {
|
.then((dynamic response) {
|
||||||
store.dispatch(StopSaving());
|
store.dispatch(StopSaving());
|
||||||
launchUrl(Uri.parse(
|
|
||||||
'${cleanApiUrl(credentials.url)}/yodlee/onboard/${response['hash']}'));
|
String connectUrl = cleanApiUrl(credentials.url);
|
||||||
|
if (integrationType == BankAccountEntity.INTEGRATION_TYPE_YODLEE) {
|
||||||
|
connectUrl += '/yodlee/onboard/${response['hash']}';
|
||||||
|
} else {
|
||||||
|
connectUrl += '/nordigen/connect/${response['hash']}';
|
||||||
|
}
|
||||||
|
|
||||||
|
launchUrl(Uri.parse(connectUrl));
|
||||||
}).catchError((dynamic error) {
|
}).catchError((dynamic error) {
|
||||||
store.dispatch(StopSaving());
|
store.dispatch(StopSaving());
|
||||||
showErrorDialog(message: '$error');
|
showErrorDialog(message: '$error');
|
||||||
|
|
@ -62,7 +154,7 @@ class BankAccountScreen extends StatelessWidget {
|
||||||
final store = StoreProvider.of<AppState>(context);
|
final store = StoreProvider.of<AppState>(context);
|
||||||
final state = store.state;
|
final state = store.state;
|
||||||
final userCompany = state.userCompany;
|
final userCompany = state.userCompany;
|
||||||
final localization = AppLocalization.of(context);
|
final localization = AppLocalization.of(context)!;
|
||||||
|
|
||||||
return ListScaffold(
|
return ListScaffold(
|
||||||
entityType: EntityType.bankAccount,
|
entityType: EntityType.bankAccount,
|
||||||
|
|
@ -94,63 +186,61 @@ class BankAccountScreen extends StatelessWidget {
|
||||||
const EdgeInsets.only(left: 16, top: 8, right: 16, bottom: 10),
|
const EdgeInsets.only(left: 16, top: 8, right: 16, bottom: 10),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
if (state.isHosted) ...[
|
if (state.isEnterprisePlan) ...[
|
||||||
if (state.isEnterprisePlan) ...[
|
Expanded(
|
||||||
Expanded(
|
child: AppButton(
|
||||||
child: AppButton(
|
label: localization.connect.toUpperCase(),
|
||||||
label: localization!.connect.toUpperCase(),
|
onPressed: () => connectAccounts(context),
|
||||||
onPressed: () => connectAccounts(context),
|
iconData: Icons.link,
|
||||||
iconData: Icons.link,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(width: kGutterWidth),
|
|
||||||
Expanded(
|
|
||||||
child: AppButton(
|
|
||||||
label: localization.refresh.toUpperCase(),
|
|
||||||
onPressed: () => viewModel.onRefreshAccounts(context),
|
|
||||||
iconData: Icons.refresh,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
] else
|
|
||||||
Expanded(
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 20, bottom: 8),
|
|
||||||
child: Center(
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
HelpText(localization!.upgradeToConnectBankAccount),
|
|
||||||
SizedBox(height: 16),
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
TextButton(
|
|
||||||
onPressed: () =>
|
|
||||||
launchUrl(Uri.parse(kBankingURL)),
|
|
||||||
child: Text(localization.learnMore),
|
|
||||||
),
|
|
||||||
TextButton(
|
|
||||||
onPressed: () {
|
|
||||||
store.dispatch(ViewSettings(
|
|
||||||
clearFilter: true,
|
|
||||||
company: state.company,
|
|
||||||
user: state.user,
|
|
||||||
section: kSettingsAccountManagement));
|
|
||||||
},
|
|
||||||
child: Text(localization.upgrade),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
],
|
|
||||||
)),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
|
),
|
||||||
SizedBox(width: kGutterWidth),
|
SizedBox(width: kGutterWidth),
|
||||||
],
|
Expanded(
|
||||||
|
child: AppButton(
|
||||||
|
label: localization.refresh.toUpperCase(),
|
||||||
|
onPressed: () => viewModel.onRefreshAccounts(context),
|
||||||
|
iconData: Icons.refresh,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
] else
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 20, bottom: 8),
|
||||||
|
child: Center(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
HelpText(localization.upgradeToConnectBankAccount),
|
||||||
|
SizedBox(height: 16),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () =>
|
||||||
|
launchUrl(Uri.parse(kBankingURL)),
|
||||||
|
child: Text(localization.learnMore),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
store.dispatch(ViewSettings(
|
||||||
|
clearFilter: true,
|
||||||
|
company: state.company,
|
||||||
|
user: state.user,
|
||||||
|
section: kSettingsAccountManagement));
|
||||||
|
},
|
||||||
|
child: Text(localization.upgrade),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: kGutterWidth),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: AppButton(
|
child: AppButton(
|
||||||
label: (state.isHosted
|
label: (state.isHosted
|
||||||
? localization!.rules
|
? localization.rules
|
||||||
: localization!.manageRules)
|
: localization.manageRules)
|
||||||
.toUpperCase(),
|
.toUpperCase(),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
store.dispatch(
|
store.dispatch(
|
||||||
|
|
|
||||||
|
|
@ -711,7 +711,7 @@ class _InvoiceEditItemsDesktopState extends State<InvoiceEditItemsDesktop> {
|
||||||
..notes = item.isTask
|
..notes = item.isTask
|
||||||
? item.notes
|
? item.notes
|
||||||
: product.notes
|
: product.notes
|
||||||
..productCost = item.productCost
|
..productCost = product.cost
|
||||||
..cost = item.isTask && item.cost != 0
|
..cost = item.isTask && item.cost != 0
|
||||||
? item.cost
|
? item.cost
|
||||||
: cost
|
: cost
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,9 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
static final Map<String, Map<String, String>> _localizedValues = {
|
static final Map<String, Map<String, String>> _localizedValues = {
|
||||||
'en': {
|
'en': {
|
||||||
// STARTER: lang key - do not remove comment
|
// STARTER: lang key - do not remove comment
|
||||||
|
'yodlee_regions': 'Regions: USA, UK, Australia & India',
|
||||||
|
'nordigen_regions': 'Regions: Europe & UK',
|
||||||
|
'select_provider': 'Select Provider',
|
||||||
'payment_type_credit': 'Payment Type Credit',
|
'payment_type_credit': 'Payment Type Credit',
|
||||||
'payment_type_debit': 'Payment Type Debit',
|
'payment_type_debit': 'Payment Type Debit',
|
||||||
'send_emails_to': 'Send Emails To',
|
'send_emails_to': 'Send Emails To',
|
||||||
|
|
@ -111466,6 +111469,18 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
_localizedValues[localeCode]!['send_emails_to'] ??
|
_localizedValues[localeCode]!['send_emails_to'] ??
|
||||||
_localizedValues['en']!['send_emails_to']!;
|
_localizedValues['en']!['send_emails_to']!;
|
||||||
|
|
||||||
|
String get selectProvider =>
|
||||||
|
_localizedValues[localeCode]!['select_provider'] ??
|
||||||
|
_localizedValues['en']!['select_provider']!;
|
||||||
|
|
||||||
|
String get yodleeRegions =>
|
||||||
|
_localizedValues[localeCode]!['yodlee_regions'] ??
|
||||||
|
_localizedValues['en']!['yodlee_regions']!;
|
||||||
|
|
||||||
|
String get nordigenRegions =>
|
||||||
|
_localizedValues[localeCode]!['nordigen_regions'] ??
|
||||||
|
_localizedValues['en']!['nordigen_regions']!;
|
||||||
|
|
||||||
// STARTER: lang field - do not remove comment
|
// STARTER: lang field - do not remove comment
|
||||||
|
|
||||||
String lookup(String? key) {
|
String lookup(String? key) {
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,6 @@ PODS:
|
||||||
- file_selector_macos (0.0.1):
|
- file_selector_macos (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- FlutterMacOS (1.0.0)
|
- FlutterMacOS (1.0.0)
|
||||||
- FMDB (2.7.5):
|
|
||||||
- FMDB/standard (= 2.7.5)
|
|
||||||
- FMDB/standard (2.7.5)
|
|
||||||
- in_app_purchase_storekit (0.0.1):
|
- in_app_purchase_storekit (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
|
@ -25,13 +22,13 @@ PODS:
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- screen_retriever (0.0.1):
|
- screen_retriever (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- Sentry/HybridSDK (8.14.2):
|
- Sentry/HybridSDK (8.15.2):
|
||||||
- SentryPrivate (= 8.14.2)
|
- SentryPrivate (= 8.15.2)
|
||||||
- sentry_flutter (0.0.1):
|
- sentry_flutter (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- Sentry/HybridSDK (= 8.14.2)
|
- Sentry/HybridSDK (= 8.15.2)
|
||||||
- SentryPrivate (8.14.2)
|
- SentryPrivate (8.15.2)
|
||||||
- share_plus (0.0.1):
|
- share_plus (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- shared_preferences_foundation (0.0.1):
|
- shared_preferences_foundation (0.0.1):
|
||||||
|
|
@ -41,9 +38,6 @@ PODS:
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- smart_auth (0.0.1):
|
- smart_auth (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqflite (0.0.2):
|
|
||||||
- FlutterMacOS
|
|
||||||
- FMDB (>= 2.7.5)
|
|
||||||
- url_launcher_macos (0.0.1):
|
- url_launcher_macos (0.0.1):
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- widget_kit_plugin (0.0.1):
|
- widget_kit_plugin (0.0.1):
|
||||||
|
|
@ -68,14 +62,12 @@ DEPENDENCIES:
|
||||||
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
|
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||||
- sign_in_with_apple (from `Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos`)
|
- sign_in_with_apple (from `Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos`)
|
||||||
- smart_auth (from `Flutter/ephemeral/.symlinks/plugins/smart_auth/macos`)
|
- smart_auth (from `Flutter/ephemeral/.symlinks/plugins/smart_auth/macos`)
|
||||||
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`)
|
|
||||||
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
||||||
- widget_kit_plugin (from `Flutter/ephemeral/.symlinks/plugins/widget_kit_plugin/macos`)
|
- widget_kit_plugin (from `Flutter/ephemeral/.symlinks/plugins/widget_kit_plugin/macos`)
|
||||||
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
|
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
trunk:
|
trunk:
|
||||||
- FMDB
|
|
||||||
- Sentry
|
- Sentry
|
||||||
- SentryPrivate
|
- SentryPrivate
|
||||||
|
|
||||||
|
|
@ -112,8 +104,6 @@ EXTERNAL SOURCES:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/sign_in_with_apple/macos
|
||||||
smart_auth:
|
smart_auth:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/smart_auth/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/smart_auth/macos
|
||||||
sqflite:
|
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos
|
|
||||||
url_launcher_macos:
|
url_launcher_macos:
|
||||||
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
|
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
|
||||||
widget_kit_plugin:
|
widget_kit_plugin:
|
||||||
|
|
@ -126,7 +116,6 @@ SPEC CHECKSUMS:
|
||||||
device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f
|
device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f
|
||||||
file_selector_macos: 468fb6b81fac7c0e88d71317f3eec34c3b008ff9
|
file_selector_macos: 468fb6b81fac7c0e88d71317f3eec34c3b008ff9
|
||||||
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
|
||||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
|
||||||
in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43
|
in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43
|
||||||
in_app_review: a850789fad746e89bce03d4aeee8078b45a53fd0
|
in_app_review: a850789fad746e89bce03d4aeee8078b45a53fd0
|
||||||
package_info: 6eba2fd8d3371dda2d85c8db6fe97488f24b74b2
|
package_info: 6eba2fd8d3371dda2d85c8db6fe97488f24b74b2
|
||||||
|
|
@ -134,14 +123,13 @@ SPEC CHECKSUMS:
|
||||||
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
||||||
printing: 1dd6a1fce2209ec240698e2439a4adbb9b427637
|
printing: 1dd6a1fce2209ec240698e2439a4adbb9b427637
|
||||||
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
|
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
|
||||||
Sentry: e0ea366f95ebb68f26d6030d8c22d6b2e6d23dd0
|
Sentry: 6f5742b4c47c17c9adcf265f6f328cf4a0ed1923
|
||||||
sentry_flutter: 9a04c51c373d76ee22167bf1e65bc468c0a91fed
|
sentry_flutter: 2c309a1d4b45e59d02cfa15795705687f1e2081b
|
||||||
SentryPrivate: 949a21fa59872427edc73b524c3ec8456761d97f
|
SentryPrivate: b2f7996f37781080f04a946eb4e377ff63c64195
|
||||||
share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7
|
share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7
|
||||||
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
|
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
|
||||||
sign_in_with_apple: a9e97e744e8edc36aefc2723111f652102a7a727
|
sign_in_with_apple: a9e97e744e8edc36aefc2723111f652102a7a727
|
||||||
smart_auth: b38e3ab4bfe089eacb1e233aca1a2340f96c28e9
|
smart_auth: b38e3ab4bfe089eacb1e233aca1a2340f96c28e9
|
||||||
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea
|
|
||||||
url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
|
url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95
|
||||||
widget_kit_plugin: 9658611f1ba5faaaa9e8221d94fce53733a6911c
|
widget_kit_plugin: 9658611f1ba5faaaa9e8221d94fce53733a6911c
|
||||||
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
|
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue