diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index edaa373..aff1598 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -388,7 +388,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 5; DEVELOPMENT_TEAM = SFJJBDCU6Z; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -531,7 +531,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 5; DEVELOPMENT_TEAM = SFJJBDCU6Z; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -566,7 +566,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 5; DEVELOPMENT_TEAM = SFJJBDCU6Z; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( diff --git a/lib/bloc/exercise_new/exercise_new_bloc.dart b/lib/bloc/exercise_new/exercise_new_bloc.dart index f937831..65a877b 100644 --- a/lib/bloc/exercise_new/exercise_new_bloc.dart +++ b/lib/bloc/exercise_new/exercise_new_bloc.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'package:aitrainer_app/repository/mautic_repository.dart'; import 'package:intl/intl.dart'; import 'package:aitrainer_app/bloc/menu/menu_bloc.dart'; @@ -154,6 +155,8 @@ class ExerciseNewBloc extends Bloc with Logg } exerciseRepository.end = DateTime.now(); await exerciseRepository.addExercise(); + MauticRepository mauticRepository = MauticRepository(customerRepository: customerRepository); + await mauticRepository.sendMauticExercise(); // exerciseRepository.initExercise(); menuBloc.add(MenuTreeDown(parent: 0)); Cache().initBadges(); diff --git a/lib/bloc/sales/sales_bloc.dart b/lib/bloc/sales/sales_bloc.dart index 03cc536..4a1c774 100644 --- a/lib/bloc/sales/sales_bloc.dart +++ b/lib/bloc/sales/sales_bloc.dart @@ -4,7 +4,9 @@ import 'dart:io'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/product.dart'; import 'package:aitrainer_app/model/purchase.dart'; +import 'package:aitrainer_app/repository/customer_repository.dart'; import 'package:aitrainer_app/repository/description_repository.dart'; +import 'package:aitrainer_app/repository/mautic_repository.dart'; import 'package:aitrainer_app/repository/split_test_respository.dart'; import 'package:aitrainer_app/service/logging.dart'; import 'package:aitrainer_app/service/purchase_service.dart'; @@ -88,6 +90,10 @@ class SalesBloc extends Bloc with Logging { purchase.currency = "EUR"; await PurchaseApi().savePurchase(purchase); Track().track(TrackingEvent.purchase_successful, eventValue: selectedProduct.localizedPrice.toString()); + CustomerRepository customerRepository = CustomerRepository(); + customerRepository.customer = Cache().userLoggedIn; + MauticRepository mauticRepository = MauticRepository(customerRepository: customerRepository); + await mauticRepository.sendMauticPurchase(); } yield SalesSuccessful(); } else { diff --git a/lib/bloc/test_set_new/test_set_new_bloc.dart b/lib/bloc/test_set_new/test_set_new_bloc.dart index 74b11b9..d8a6f2d 100644 --- a/lib/bloc/test_set_new/test_set_new_bloc.dart +++ b/lib/bloc/test_set_new/test_set_new_bloc.dart @@ -3,7 +3,9 @@ import 'dart:async'; import 'package:aitrainer_app/bloc/test_set_execute/test_set_execute_bloc.dart'; import 'package:aitrainer_app/model/cache.dart'; import 'package:aitrainer_app/model/exercise_type.dart'; +import 'package:aitrainer_app/repository/customer_repository.dart'; import 'package:aitrainer_app/repository/exercise_repository.dart'; +import 'package:aitrainer_app/repository/mautic_repository.dart'; import 'package:aitrainer_app/util/enums.dart'; import 'package:aitrainer_app/util/track.dart'; import 'package:bloc/bloc.dart'; @@ -52,6 +54,11 @@ class TestSetNewBloc extends Bloc { await exerciseRepository.addExercise(); executeBloc.add( TestSetExecuteExerciseFinished(exerciseTypeId: exerciseType.exerciseTypeId, quantity: quantity, unitQuantity: unitQuantity)); + CustomerRepository customerRepository = CustomerRepository(); + customerRepository.customer = Cache().userLoggedIn; + MauticRepository mauticRepository = MauticRepository(customerRepository: customerRepository); + await mauticRepository.sendMauticExercise(); + Track().track(TrackingEvent.test_set_new, eventValue: exerciseType.name); } } on Exception catch (e) { diff --git a/lib/bloc/training_plan/training_plan_bloc.dart b/lib/bloc/training_plan/training_plan_bloc.dart index 047f809..2a5902f 100644 --- a/lib/bloc/training_plan/training_plan_bloc.dart +++ b/lib/bloc/training_plan/training_plan_bloc.dart @@ -10,6 +10,8 @@ import 'package:aitrainer_app/model/exercise_type.dart'; import 'package:aitrainer_app/model/training_plan.dart'; import 'package:aitrainer_app/model/training_plan_detail.dart'; import 'package:aitrainer_app/model/workout_menu_tree.dart'; +import 'package:aitrainer_app/repository/customer_repository.dart'; +import 'package:aitrainer_app/repository/mautic_repository.dart'; import 'package:aitrainer_app/repository/training_plan_repository.dart'; import 'package:aitrainer_app/service/exercise_service.dart'; import 'package:aitrainer_app/util/app_language.dart'; @@ -143,6 +145,10 @@ class TrainingPlanBloc extends Bloc { Cache().myTrainingPlan = _myPlan; await Cache().saveMyTrainingPlan(); } + CustomerRepository customerRepository = CustomerRepository(); + customerRepository.customer = Cache().userLoggedIn; + MauticRepository mauticRepository = MauticRepository(customerRepository: customerRepository); + await mauticRepository.sendMauticExercise(); Track().track(TrackingEvent.training_plan_execute, eventValue: event.detail.exerciseType!.name); if (isDayDone()) { diff --git a/lib/model/cache.dart b/lib/model/cache.dart index b4b712a..c936751 100644 --- a/lib/model/cache.dart +++ b/lib/model/cache.dart @@ -763,19 +763,22 @@ class Cache with Logging { setTrainingPlanDays(value) => this._trainingPlanDays = value; bool canTrial() { + bool can = true; if (Cache().userLoggedIn == null) { - return false; + can = false; } for (var element in _purchases) { if (element.customerId == Cache().userLoggedIn!.customerId) { - return false; + can = false; } } if (userLoggedIn!.trialDate != null) { - return false; + can = false; } - return true; + print("Can Trial $can"); + + return can; } } diff --git a/lib/model/mautic.dart b/lib/model/mautic.dart index aa212f9..a94180b 100644 --- a/lib/model/mautic.dart +++ b/lib/model/mautic.dart @@ -8,6 +8,8 @@ class Mautic { int? databaseId; String? subscriptionDate; String? language; + String? purchaseDate; + String? exerciseDate; Map toJson() => { "formId": this.formId, @@ -31,6 +33,8 @@ class Mautic { form += this.subscriptionDate == null ? "" : "&mauticform[subscribed]=${this.subscriptionDate}"; form += this.databaseId == null ? "" : "&mauticform[database_id]=${this.databaseId}"; form += this.language == null ? "" : "&mauticform[language]=${this.language}"; + form += this.purchaseDate == null ? "" : "&mauticform[purchase_date]=${this.purchaseDate}"; + form += this.exerciseDate == null ? "" : "&mauticform[last_exercise]=${this.exerciseDate}"; return form; } diff --git a/lib/repository/mautic_repository.dart b/lib/repository/mautic_repository.dart index f00136b..9b20b8b 100644 --- a/lib/repository/mautic_repository.dart +++ b/lib/repository/mautic_repository.dart @@ -46,4 +46,32 @@ class MauticRepository { await MauticApi().sendMauticForm(mautic); } + + Future sendMauticPurchase() async { + Mautic mautic = Mautic(); + mautic.formId = 4; + mautic.firstname = customerRepository.customer!.firstname == null ? "" : customerRepository.customer!.firstname!; + mautic.lastname = customerRepository.customer!.name == null ? "" : customerRepository.customer!.name!; + mautic.email = customerRepository.customer!.email == null ? "" : customerRepository.customer!.email!; + if (mautic.email == null || mautic.email!.contains("privaterelay.appleid.com")) { + return; + } + mautic.purchaseDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()); + + await MauticApi().sendMauticForm(mautic); + } + + Future sendMauticExercise() async { + Mautic mautic = Mautic(); + mautic.formId = 5; + mautic.firstname = customerRepository.customer!.firstname == null ? "" : customerRepository.customer!.firstname!; + mautic.lastname = customerRepository.customer!.name == null ? "" : customerRepository.customer!.name!; + mautic.email = customerRepository.customer!.email == null ? "" : customerRepository.customer!.email!; + if (mautic.email == null || mautic.email!.contains("privaterelay.appleid.com")) { + return; + } + mautic.exerciseDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now()); + + await MauticApi().sendMauticForm(mautic); + } } diff --git a/lib/util/session.dart b/lib/util/session.dart index f5369ad..da96042 100644 --- a/lib/util/session.dart +++ b/lib/util/session.dart @@ -1,6 +1,5 @@ import 'dart:io'; -import 'package:aitrainer_app/service/firebase_api.dart'; import 'package:aitrainer_app/util/app_language.dart'; import 'package:aitrainer_app/util/app_localization.dart'; import 'package:aitrainer_app/service/api.dart'; diff --git a/lib/view/settings.dart b/lib/view/settings.dart index 98d01fd..566f2d6 100644 --- a/lib/view/settings.dart +++ b/lib/view/settings.dart @@ -116,6 +116,8 @@ class SettingsPage extends StatelessWidget with Trans { inactiveFgColor: Colors.grey[900], labels: [t('Live-Server'), t('Test-Server')], onToggle: (index) { + final String live = index == 0 ? "live" : "test"; + print("Server setting to: $live"); settingsBloc.add(SettingsSetServer(live: index == 0)); }, ), diff --git a/lib/widgets/menu_page_widget.dart b/lib/widgets/menu_page_widget.dart index 4132f1c..6e0a43d 100644 --- a/lib/widgets/menu_page_widget.dart +++ b/lib/widgets/menu_page_widget.dart @@ -325,46 +325,6 @@ class _MenuPageWidgetState extends State with Trans, Logging { } }, ), - /* Cache().myTrainingPlan != null - ? GestureDetector( - onTap: () => showDialog( - context: context, - builder: (BuildContext context) { - return DialogCommon( - title: t("You have an active Training Plan"), - descriptions: Cache().myTrainingPlan!.name != null ? Cache().myTrainingPlan!.name! : "", - description2: t("Press OK to continue"), - text: "OK", - onTap: () { - Navigator.of(context).pop(); - if (Cache().myTrainingPlan != null) { - final TrainingPlanBloc bloc = BlocProvider.of(context); - bloc.setMyPlan(Cache().myTrainingPlan); - Navigator.of(context).popAndPushNamed("myTrainingPlanExecute"); - } - }, - onCancel: () => { - Navigator.of(context).pop(), - }, - ); - }), - child: AnimatedBuilder( - animation: animation, - builder: (context, snapshot) { - return Center( - child: Container( - width: animation.value, - height: animation.value, - child: Image.asset("asset/image/continue.png"), - ), - ); - })) - : Offstage(), */ - /* activeExercisePlan - ? SizedBox( - width: 10, - ) - : Offstage(), */ Cache().activeExercisePlan != null ? GestureDetector( onTap: () => showDialog( diff --git a/pubspec.yaml b/pubspec.yaml index f3dd53d..b459be3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.1.22+93 +version: 1.1.22+94 environment: sdk: ">=2.12.0 <3.0.0"