Skip to content
Snippets Groups Projects
Commit 420614cc authored by poka's avatar poka
Browse files

can renew memberhsip after expiration

parent 46223f14
No related branches found
No related tags found
No related merge requests found
Pipeline #39321 waiting for manual action
......@@ -242,6 +242,7 @@
"renewMembership": "Renew my membership",
"areYouSureYouWantToRenewMembership": "Are you sure you want to renew your membership ?",
"membershipExpiredOn": "Membership expired on {}",
"membershipExpired": "Membership expired",
"membershipExpiresOnSimple": "Membership expires on {}",
"membershipExpiresOn": "Membership expires on {} (Renewal possible from {})",
"renewingMembership": "Renewing membership",
......
......@@ -243,6 +243,7 @@
"renewMembership": "Renovar mi adhésion",
"areYouSureYouWantToRenewMembership": "¿Estás seguro de que quieres renovar tu adhésion?",
"membershipExpiredOn": "Adhésion expirée el {}",
"membershipExpired": "Adhésion expirée",
"membershipExpiresOnSimple": "Adhésion expira el {}",
"membershipExpiresOn": "Adhésion expira el {} (Renovación posible a partir de {})",
"renewingMembership": "Renovando adhésion",
......
......@@ -242,6 +242,7 @@
"renewMembership": "Renouveler mon adhésion",
"areYouSureYouWantToRenewMembership": "Êtes-vous sûr de vouloir renouveler votre adhésion ?",
"membershipExpiredOn": "Adhésion expirée le {}",
"membershipExpired": "Adhésion expirée",
"membershipExpiresOnSimple": "Adhésion expire le {}",
"membershipExpiresOn": "Adhésion expire le {} (Renouvellement possible à partir du {})",
"renewingMembership": "Renouvellement d'adhésion",
......
......@@ -3,6 +3,7 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/screens/transaction_in_progress.dart';
......@@ -14,7 +15,13 @@ import 'package:gecko/models/membership_status.dart';
class MembershipRenewal {
static RenewalInfo calculateRenewalInfo(MembershipStatus status, int renewalPeriodBlocks) {
if (status.expireDate == null) {
return RenewalInfo(canRenew: false);
return status.idtyStatus == IdtyStatus.notMember
? RenewalInfo(
canRenew: true,
isExpired: true,
hasPendingRenewal: status.hasPendingRenewal,
)
: RenewalInfo(canRenew: false);
}
final now = DateTime.now();
......@@ -56,7 +63,7 @@ class MembershipRenewal {
}
static Widget buildExpirationText(RenewalInfo info, {double? width}) {
if (info.expireDate == null) return const SizedBox.shrink();
if (info.expireDate == null && !info.isExpired) return const SizedBox.shrink();
final isRenewalStartDateInFuture = info.renewalStartDate != null && info.renewalStartDate!.isAfter(DateTime.now());
......@@ -64,7 +71,7 @@ class MembershipRenewal {
if (info.hasPendingRenewal) {
text = 'membershipRenewalPending'.tr();
} else if (info.isExpired) {
text = 'membershipExpiredOn'.tr(args: [DateFormat('dd/MM/yyyy').format(info.expireDate!)]);
text = info.expireDate != null ? 'membershipExpiredOn'.tr(args: [DateFormat('dd/MM/yyyy').format(info.expireDate!)]) : 'membershipExpired'.tr();
} else if (!isRenewalStartDateInFuture) {
text = 'membershipExpiresOnSimple'.tr(args: [DateFormat('dd/MM/yyyy').format(info.expireDate!)]);
} else {
......
import 'package:gecko/models/wallet_data.dart';
class MembershipStatus {
final DateTime? expireDate;
final bool hasPendingRenewal;
final DateTime? renewalStartDate;
final IdtyStatus idtyStatus;
MembershipStatus({
required this.expireDate,
required this.hasPendingRenewal,
required this.renewalStartDate,
required this.idtyStatus,
});
static MembershipStatus empty() => MembershipStatus(expireDate: null, hasPendingRenewal: false, renewalStartDate: null);
static MembershipStatus empty() => MembershipStatus(expireDate: null, hasPendingRenewal: false, renewalStartDate: null, idtyStatus: IdtyStatus.none);
}
......@@ -454,6 +454,11 @@ class SubstrateSdk with ChangeNotifier {
return resultStatus;
}
Future<IdtyStatus> idtyStatusByIndex(int idtyIndex) async {
final idtyStatus = await _getStorage('identity.identities($idtyIndex)');
return mapStatus[idtyStatus['status']] ?? IdtyStatus.unknown;
}
Future<bool> isSmith(String address) async {
var idtyIndex = await _getIdentityIndexOf(address);
if (idtyIndex == -1) return false;
......@@ -1294,13 +1299,26 @@ newKeySig: $newKeySigType""");
}
Future<MembershipStatus> getMembershipStatus(String address) async {
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
final idtyIndex = await _getIdentityIndexOf(address);
if (idtyIndex == null) return MembershipStatus.empty();
final idtyStatus = await sub.idtyStatusByIndex(idtyIndex);
// Vérifier si une évaluation est en cours
final hasPendingRenewal = await _getStorage('distance.pendingEvaluationRequest($idtyIndex)') != null;
final expireOnMap = await _getStorage('membership.membership($idtyIndex)') ?? {};
final Map<String, dynamic> expireOnMap = await _getStorage('membership.membership($idtyIndex)') ?? {};
if (expireOnMap.isEmpty && idtyStatus == IdtyStatus.notMember) {
return MembershipStatus(
expireDate: null,
hasPendingRenewal: hasPendingRenewal,
renewalStartDate: null,
idtyStatus: idtyStatus,
);
}
final expireOn = expireOnMap['expireOn'] as int;
// Calculate time difference from current block (6 seconds per block)
......@@ -1317,6 +1335,7 @@ newKeySig: $newKeySigType""");
expireDate: expireDate,
hasPendingRenewal: hasPendingRenewal,
renewalStartDate: renewalStartDate,
idtyStatus: idtyStatus,
);
}
}
......@@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:gecko/globals.dart';
import 'package:flutter/material.dart';
import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart';
......@@ -193,8 +194,7 @@ class ManageMembership extends StatelessWidget {
status,
sub.currencyParameters['membershipRenewalPeriod']!,
);
if (info.expireDate == null) return const SizedBox.shrink();
if (info.expireDate == null && status.idtyStatus != IdtyStatus.notMember) return const SizedBox.shrink();
return Container(
height: scaleSize(64),
......
......@@ -317,7 +317,7 @@ class WalletOptions extends StatelessWidget {
);
final twentyDaysBeforeExpiration = info.expireDate?.subtract(const Duration(days: 20));
final shouldHideButton = !info.canRenew || !(twentyDaysBeforeExpiration?.isBefore(DateTime.now()) ?? false);
final shouldHideButton = !info.canRenew || (info.expireDate != null && !(twentyDaysBeforeExpiration?.isBefore(DateTime.now()) ?? false));
if (shouldHideButton) return const SizedBox.shrink();
......
......@@ -2,7 +2,7 @@ name: gecko
description: Pay with G1.
publish_to: "none"
version: 0.1.17+89
version: 0.1.18+90
environment:
sdk: ^3.5.3
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment