WT 1.1.25+3 flutter 2.8, activate training plan

This commit is contained in:
bossanyit
2021-12-12 16:17:47 +01:00
parent 72ae1c8f8c
commit 54a61fa585
96 changed files with 944 additions and 655 deletions
+6
View File
@@ -257,6 +257,12 @@ class CustomerRepository with Logging {
Future<void> saveCustomer() async {
if (this.customer == null) throw Exception("Initialize the customer object");
final Customer modelCustomer = customer!;
if (modelCustomer.sex == null) {
modelCustomer.sex = "m";
}
if (modelCustomer.fitnessLevel == null) {
modelCustomer.fitnessLevel = "beginner";
}
await CustomerApi().saveCustomer(modelCustomer);
await this.saveProperties(modelCustomer.properties);
}
@@ -4,7 +4,6 @@ import 'package:aitrainer_app/model/evaluation.dart';
import 'package:aitrainer_app/model/evaluation_attribute.dart';
import 'package:aitrainer_app/util/enums.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class EvaluationRepository {
List<Evaluation>? evaluations;
+1 -1
View File
@@ -166,7 +166,7 @@ class ExercisePlanRepository {
if (exercisePlan == null) {
this.createNewPlan();
}
;
Cache().setMyExercisePlan(exercisePlan!);
return exercisePlan;
}
+116 -5
View File
@@ -6,6 +6,7 @@ import 'package:aitrainer_app/model/exercise_plan_detail.dart';
import 'package:aitrainer_app/model/exercise_tree.dart';
import 'package:aitrainer_app/model/fitness_state.dart';
import 'package:aitrainer_app/model/training_plan.dart';
import 'package:aitrainer_app/model/training_plan_detail.dart';
import 'package:aitrainer_app/repository/training_plan_day_repository.dart';
import 'package:aitrainer_app/util/app_language.dart';
import 'package:aitrainer_app/util/common.dart';
@@ -69,9 +70,13 @@ class TrainingPlanRepository {
// 3 calculate weights
int index = 0;
int exerciseTypeIdOrig = 0;
trainingPlan.details!.forEach((elem) {
CustomerTrainingPlanDetails detail = CustomerTrainingPlanDetails();
List<CustomerTrainingPlanDetails> list = createDetail(plan, elem, exerciseTypeIdOrig, index);
list.forEach((element) {
plan.details.add(element);
});
/* CustomerTrainingPlanDetails detail = CustomerTrainingPlanDetails();
detail.customerTrainingPlanDetailsId = ++index;
detail.trainingPlanDetailsId = elem.trainingPlanDetailId;
detail.exerciseTypeId = elem.exerciseTypeId;
@@ -107,7 +112,25 @@ class TrainingPlanRepository {
detail.baseOneRepMax = Common.calculate1RM(detail.weight!, detail.repeats!.toDouble());
}
detail.alternatives = Common.getExerciseTypeAlternatives(detail.exerciseTypeId);
plan.details.add(detail);
// first repeat: 50% more
if (detail.weight != null && detail.weight! > 0 && exerciseTypeIdOrig != detail.exerciseTypeId && detail.repeats! > 0) {
CustomerTrainingPlanDetails firstDetail = CustomerTrainingPlanDetails();
firstDetail.copy(detail);
firstDetail.repeats = (detail.repeats! * 1.5).round();
firstDetail.set = 1;
detail.set = detail.set! - 1;
if (detail.set! > 0) {
index++;
}
detail.customerTrainingPlanDetailsId = index;
plan.details.add(firstDetail);
exerciseTypeIdOrig = detail.exerciseTypeId!;
}
if (detail.set! > 0) {
plan.details.add(detail);
} */
});
Cache().myTrainingPlan = plan;
@@ -116,6 +139,68 @@ class TrainingPlanRepository {
return plan;
}
List<CustomerTrainingPlanDetails> createDetail(CustomerTrainingPlan plan, TrainingPlanDetail elem, int exerciseTypeIdOrig, int index,
{bool changeExerciseType = false}) {
List<CustomerTrainingPlanDetails> list = [];
CustomerTrainingPlanDetails detail = CustomerTrainingPlanDetails();
detail.customerTrainingPlanDetailsId = ++index;
detail.trainingPlanDetailsId = elem.trainingPlanDetailId;
detail.exerciseTypeId = changeExerciseType ? exerciseTypeIdOrig : elem.exerciseTypeId;
detail.repeats = elem.repeats;
detail.set = elem.set;
detail.dayId = elem.dayId;
TrainingPlanDayRepository trainingPlanDayRepository = TrainingPlanDayRepository();
detail.day = trainingPlanDayRepository.getNameById(elem.dayId);
detail.parallel = elem.parallel;
detail.restingTime = elem.restingTime;
detail.exerciseType = Cache().getExerciseTypeById(detail.exerciseTypeId!);
detail.alternatives = Common.getExerciseTypeAlternatives(detail.exerciseTypeId);
if (elem.weight == -1) {
if (detail.exerciseType!.unitQuantityUnit != null) {
detail = getCalculatedWeightRepeats(elem.exerciseTypeId, detail);
} else {
detail.weight = 0;
}
} else if (elem.weight == -2) {
final CustomerTrainingPlanDetails calculated = this.isWeightCalculatedByExerciseType(elem.exerciseTypeId, detail, plan);
if (calculated.weight != -1) {
detail.weight = calculated.weight;
} else {
detail.weight = -2;
}
} else {
detail.weight = elem.weight;
}
print("Detail $detail exerciseType: ${detail.exerciseType!.exerciseTypeId}");
detail.state = ExercisePlanDetailState.start;
if (detail.weight != null && detail.weight! > 0) {
detail.baseOneRepMax = Common.calculate1RM(detail.weight!, detail.repeats!.toDouble());
}
// first repeat: 50% more
if (detail.weight != null && detail.weight! > 0 && exerciseTypeIdOrig != detail.exerciseTypeId && detail.repeats! > 0) {
CustomerTrainingPlanDetails firstDetail = CustomerTrainingPlanDetails();
firstDetail.copy(detail);
firstDetail.repeats = (detail.repeats! * 1.5).round();
firstDetail.set = 1;
detail.set = detail.set! - 1;
if (detail.set! > 0) {
index++;
}
detail.customerTrainingPlanDetailsId = index;
//plan.details.add(firstDetail);
list.add(firstDetail);
exerciseTypeIdOrig = detail.exerciseTypeId!;
}
if (detail.set! > 0) {
//plan.details.add(detail);
list.add(detail);
}
return list;
}
CustomerTrainingPlanDetails isWeightCalculatedByExerciseType(
int exerciseTypeId, CustomerTrainingPlanDetails detail, CustomerTrainingPlan plan) {
CustomerTrainingPlanDetails calculated = detail;
@@ -172,10 +257,16 @@ class TrainingPlanRepository {
Exercise? lastExercise1RM;
DateTime dt = DateTime.now().subtract(Duration(days: 30));
Cache().getExercises()!.forEach((exercise) {
List<Exercise> exercises = Cache().getExercises()!;
exercises.sort((a, b) {
// reverse
return a.dateAdd!.compareTo(b.dateAdd!);
});
exercises.forEach((exercise) {
if (exercise.exerciseTypeId == exerciseTypeId && exercise.dateAdd!.compareTo(dt) >= 0) {
detail.weight = weight;
lastExercise1RM = exercise;
print("last exercise: $exercise");
}
});
@@ -185,7 +276,8 @@ class TrainingPlanRepository {
return detail;
}
double oneRepMax = Common.calculate1RM(lastExercise1RM!.unitQuantity!, lastExercise1RM!.quantity!);
double oneRepMax = calculateMax1RMSameDay(lastExercise1RM!);
// Common.calculate1RM(lastExercise1RM!.unitQuantity!, lastExercise1RM!.quantity!);
print("Exercise $exerciseTypeId - 1RM : $oneRepMax");
weight = oneRepMax * Common.get1RMPercent(detail.repeats!);
print("Exercise $exerciseTypeId - weight : $weight");
@@ -201,6 +293,25 @@ class TrainingPlanRepository {
return detail;
}
double calculateMax1RMSameDay(Exercise actual) {
List<Exercise> exercises = Cache().getExercises()!;
double max1RM = 0.0;
exercises.forEach((exercise) {
if (actual.exerciseTypeId == exercise.exerciseTypeId &&
actual.dateAdd!.year == exercise.dateAdd!.year &&
actual.dateAdd!.month == exercise.dateAdd!.month &&
actual.dateAdd!.day == exercise.dateAdd!.day) {
double oneRepMax = Common.calculate1RM(exercise.unitQuantity!, exercise.quantity!);
if (max1RM < oneRepMax) {
max1RM = oneRepMax;
}
}
});
return max1RM;
}
int getOriginalRepeats(int trainingPlanId, CustomerTrainingPlanDetails detail) {
TrainingPlan? plan = getTrainingPlanById(trainingPlanId);
if (plan == null) {