| ☰ |
{{ formatDisplayTime(item.startTime) }} |
@@ -435,13 +451,11 @@
{{ getVisibleGroupActivities(item).length }} {{ $t('diary.groupsLabel') }}
- {{ item.groupActivity ? item.groupActivity.name : '' }}
+ {{ item.planGroup ? item.planGroup.name : '' }}
- {{ item.duration || '' }} ({{
- item.durationText }})
+ {{ getPlanDurationDisplay(item) }}
|
@@ -916,7 +930,6 @@ export default {
addtype: 'activity',
addNewItem: false,
addNewGroupActivity: false,
- planGroupFilter: '__all__',
addNewTimeblock: false,
activeOverviewPanel: 'trainingDay',
editingGroupId: null,
@@ -969,6 +982,9 @@ export default {
editingGroupActivity: null, // Gruppenaktivität, die gerade bearbeitet wird
editingGroupActivityId: null, // ID der Gruppenaktivität, die inline bearbeitet wird
editingGroupActivityText: '', // Text für inline-edit
+ editingGroupActivityDuration: null,
+ editingGroupActivityDurationText: '',
+ editingGroupActivityGroupId: '',
// Schnell hinzufügen Dialog
showQuickAddDialog: false,
newMember: {
@@ -983,7 +999,8 @@ export default {
activeTab: 'plan', // 'plan', 'members', 'activities'
isMobileView: typeof window !== 'undefined' ? window.innerWidth <= 768 : false,
participantSearchQuery: '',
- participantFilter: 'all'
+ participantFilter: 'all',
+ planGroupFilter: '__all__'
};
},
watch: {
@@ -1030,6 +1047,27 @@ export default {
standalonePlanItemCount() {
return (this.trainingPlan || []).filter(item => item && !item.isTimeblock).length;
},
+ filteredTrainingPlan() {
+ const allItems = Array.isArray(this.trainingPlan) ? this.trainingPlan : [];
+ if (this.planGroupFilter === '__all__') {
+ return allItems;
+ }
+ const selectedGroupId = Number(this.planGroupFilter);
+ if (!Number.isFinite(selectedGroupId)) {
+ return allItems;
+ }
+ return allItems.filter((item) => {
+ if (!item) return false;
+ if (item.isTimeblock) {
+ return this.getVisibleGroupActivities(item).length > 0;
+ }
+ if (!item.groupId) {
+ // Globale Aktivitäten immer sichtbar
+ return true;
+ }
+ return Number(item.groupId) === selectedGroupId;
+ });
+ },
activePlanEditorType() {
if (this.editingActivityId) return 'activity';
if (this.editingGroupActivityId) return 'groupActivity';
@@ -2153,15 +2191,45 @@ export default {
this.showInfo(this.$t('messages.note'), this.$t('diary.dateNoLongerCurrent'), '', 'warning');
return;
}
- await apiClient.post(`/diary-date-activities/${this.currentClub}`, {
- diaryDateId: this.date.id,
- activity: this.addNewTimeblock ? '' : this.newPlanItem.activity,
- predefinedActivityId: this.newPlanItem.predefinedActivityId,
- isTimeblock: this.addNewTimeblock,
- duration: this.newPlanItem.duration,
- durationText: this.newPlanItem.durationText,
- orderId: this.trainingPlan.length
- });
+ if (!this.addNewTimeblock && (this.groups || []).length > 0) {
+ const targetGroupIds = this.planGroupFilter !== '__all__'
+ ? [Number(this.planGroupFilter)]
+ : this.groups.map((g) => Number(g.id)).filter((id) => Number.isFinite(id));
+ if (targetGroupIds.length > 0) {
+ for (const groupId of targetGroupIds) {
+ await apiClient.post(`/diary-date-activities/${this.currentClub}`, {
+ diaryDateId: this.date.id,
+ activity: this.newPlanItem.activity,
+ predefinedActivityId: this.newPlanItem.predefinedActivityId,
+ isTimeblock: false,
+ duration: this.newPlanItem.duration,
+ durationText: this.newPlanItem.durationText,
+ groupId,
+ orderId: this.trainingPlan.length
+ });
+ }
+ } else {
+ await apiClient.post(`/diary-date-activities/${this.currentClub}`, {
+ diaryDateId: this.date.id,
+ activity: this.newPlanItem.activity,
+ predefinedActivityId: this.newPlanItem.predefinedActivityId,
+ isTimeblock: false,
+ duration: this.newPlanItem.duration,
+ durationText: this.newPlanItem.durationText,
+ orderId: this.trainingPlan.length
+ });
+ }
+ } else {
+ await apiClient.post(`/diary-date-activities/${this.currentClub}`, {
+ diaryDateId: this.date.id,
+ activity: this.addNewTimeblock ? '' : this.newPlanItem.activity,
+ predefinedActivityId: this.newPlanItem.predefinedActivityId,
+ isTimeblock: this.addNewTimeblock,
+ duration: this.newPlanItem.duration,
+ durationText: this.newPlanItem.durationText,
+ orderId: this.trainingPlan.length
+ });
+ }
} else if (this.addNewGroupActivity) {
if (!this.newPlanItem.groupId || !this.newPlanItem.activity) {
this.showInfo(this.$t('messages.note'), this.$t('diary.selectGroupAndActivity'), '', 'warning');
@@ -2394,6 +2462,45 @@ export default {
this.editingDuration = calculatedDuration;
}
},
+ calculateDurationForEditGroupActivity() {
+ const input = this.editingGroupActivityDurationText;
+ let calculatedDuration = 0;
+ const multiplyPattern = /(\d+)\s*[x*]\s*(\d+)/i;
+ const match = String(input || '').match(multiplyPattern);
+ if (match) {
+ const [, num1, num2] = match;
+ calculatedDuration = parseInt(num1, 10) * parseInt(num2, 10);
+ } else if (!isNaN(input) && String(input).trim() !== '') {
+ calculatedDuration = parseInt(input, 10);
+ }
+ if (calculatedDuration > 0) {
+ calculatedDuration = Math.ceil(calculatedDuration / 5) * 5;
+ this.editingGroupActivityDuration = calculatedDuration;
+ }
+ },
+ getPlanDurationDisplay(item) {
+ if (!item?.isTimeblock) {
+ if (!item) return '';
+ return `${item.duration || ''}${item.durationText && item.durationText.trim() !== '' ? ` (${item.durationText})` : ''}`;
+ }
+ const maxDuration = this.getTimeblockMaxGroupDuration(item);
+ if (maxDuration > 0) {
+ return `${maxDuration}`;
+ }
+ return `${item.duration || ''}${item.durationText && item.durationText.trim() !== '' ? ` (${item.durationText})` : ''}`;
+ },
+ getTimeblockMaxGroupDuration(timeblockItem) {
+ const entries = Array.isArray(timeblockItem?.groupActivities) ? timeblockItem.groupActivities : [];
+ if (!entries.length) return 0;
+ const totalsByGroup = new Map();
+ for (const entry of entries) {
+ const groupId = Number(entry?.groupsGroupActivity?.id);
+ const duration = Number(entry?.duration || 0);
+ if (!Number.isFinite(groupId) || !Number.isFinite(duration) || duration <= 0) continue;
+ totalsByGroup.set(groupId, (totalsByGroup.get(groupId) || 0) + duration);
+ }
+ return Math.max(0, ...Array.from(totalsByGroup.values()));
+ },
async removePlanItem(planItemId) {
try {
await apiClient.delete(`/diary-date-activities/${this.currentClub}/${planItemId}`);
@@ -3202,6 +3309,9 @@ export default {
? groupItem.groupPredefinedActivity.code
: groupItem.groupPredefinedActivity.name)
: '';
+ this.editingGroupActivityDuration = groupItem.duration ?? null;
+ this.editingGroupActivityDurationText = groupItem.durationText || '';
+ this.editingGroupActivityGroupId = groupItem?.groupsGroupActivity?.id ? String(groupItem.groupsGroupActivity.id) : '';
},
async onEditGroupActivityInputChange(groupItem) {
@@ -3245,7 +3355,10 @@ export default {
// Aktualisiere die Gruppenaktivität mit der neuen PredefinedActivity
await apiClient.put(`/diary-date-activities/group/${this.currentClub}/${groupItem.id}`, {
- predefinedActivityId: existing.id
+ predefinedActivityId: existing.id,
+ duration: this.editingGroupActivityDuration || null,
+ durationText: this.editingGroupActivityDurationText || null,
+ groupId: this.editingGroupActivityGroupId ? Number(this.editingGroupActivityGroupId) : null
});
// Lade den Trainingsplan neu
@@ -3253,6 +3366,9 @@ export default {
this.editingGroupActivityId = null;
this.editingGroupActivityText = '';
+ this.editingGroupActivityDuration = null;
+ this.editingGroupActivityDurationText = '';
+ this.editingGroupActivityGroupId = '';
this.editShowDropdown = false;
this.editSearchResults = [];
} catch (error) {
@@ -3264,6 +3380,9 @@ export default {
cancelGroupActivityEdit() {
this.editingGroupActivityId = null;
this.editingGroupActivityText = '';
+ this.editingGroupActivityDuration = null;
+ this.editingGroupActivityDurationText = '';
+ this.editingGroupActivityGroupId = '';
this.editShowDropdown = false;
this.editSearchResults = [];
},
|