Compare commits

...

2 Commits

Author SHA1 Message Date
Tomasi - Developing
54bf204a51 . 2026-02-02 14:15:49 +01:00
Tomasi - Developing
2bde6c110a v1.001 2026-02-02 14:14:39 +01:00
8 changed files with 239 additions and 201 deletions

152
CHANGELOG-BETA.md Normal file
View File

@ -0,0 +1,152 @@
# Changelog Beta Phase
All notable changes during the beta phase of PlayerManagement
from **0.3.0-beta** to **0.11.0** are documented here.
⚠️ These versions are no longer actively maintained.
---
## [0.11.0] 2025-06-19
### ✨ Added
- **Squad Management per Player:** You can now add up to **four squads per player**, each with:
- Power (in millions)
- Position
- Type: Tank, Aircraft, Missile, or Mixed
- **Visual Enhancements:** Squad types are displayed with custom icons and total power is summarized at the top of the squad card.
### 🛠️ Fixed
- (N/A)
---
## [0.10.0] 2025-06-02
### ✨ Added
- **Team Selection for Desert Storm:** Team A / Team B selectable when creating an entry.
- **Team Display in Table:** Selected team is shown in the Desert Storm overview table.
---
## [0.9.1] 2025-04-24
### ✨ Added
- **Number Formatting Input Mask:** Automatic formatting (e.g. `250000``250.000`).
### 🛠️ Fixed
- Selected category was not saved correctly when updating a custom event.
---
## [0.9.0] 2025-04-23
### ✨ Added
- Event categories for custom events.
- Category-based leaderboards depending on event type.
### 🛠️ Fixed
- Minor display issues in events and leaderboards.
---
## [0.8.3] 2025-04-10
### ♻️ Changed
- Updated all NuGet packages.
- Cleaned up Serilog and Seq configuration.
---
## [0.8.0] 2025-03-11
### ✨ Added
- Feedback page with GitHub issue creation.
- Screenshot upload support.
- Success message with GitHub issue link.
---
## [0.7.0] 2025-02-06
### ✨ Added
- MVP page with calculation formula.
- Filters for R4/R5 members.
- API key generation.
- MVP list API endpoint.
---
## [0.6.1] 2025-01-28
### 🛠️ Fixed
- VS table data display bug.
---
## [0.6.0-beta] 2025-01-28
### ✨ Added
- Pagination for all tables.
- Alliance-wide Zombie Siege wave overview.
---
## [0.5.1-beta] 2025-01-27
### 🛠️ Fixed
- Zombie Siege: custom smile for exactly 20 waves.
---
## [0.5.0-beta] 2025-01-21
### ✨ Added
- VS Duel bar chart for player detail view.
---
## [0.4.1-beta] 2025-01-21
### ✨ Added
- Excel import for players.
### 🛠️ Fixed
- Week pipe calculation logic.
---
## [0.4.0-beta] 2025-01-20
### ✨ Added
- Player dismissal page (GUI).
---
## [0.3.6-beta] 2025-01-16
### ✨ Added
- Core player dismissal functionality.
---
## [0.3.5-beta] 2025-01-09
### 🛠️ Fixed
- MVP calculation formula.
---
## [0.3.4-beta] 2025-01-07
### ✨ Added
- Alliance MVP calculation with API support.
---
## [0.3.3-beta] 2024-12-17
### ✨ Added
- Custom event functionality.
---
## [0.3.2-beta] 2024-12-03
### ✨ Added
- Event progress status.
- League tiers in VS Duel.
---
## [0.3.1-beta] 2024-11-28
### ✨ Added
- Zombie Siege event.
---
## [0.3.0-beta] 2024-11-26
### ✨ Added
- Initial beta release.

View File

@ -15,6 +15,7 @@ Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "Ui", "Ui\Ui.esproj", "{7716
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{E8BE2EF5-0D8D-4D68-9979-0680938F26DF}"
ProjectSection(SolutionItems) = preProject
CHANGELOG-BETA.md = CHANGELOG-BETA.md
README.md = README.md
EndProjectSection
EndProject

207
README.md
View File

@ -14,203 +14,24 @@
[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=TomasiDeveloping_PlayerManagement&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=TomasiDeveloping_PlayerManagement)
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=TomasiDeveloping_PlayerManagement&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=TomasiDeveloping_PlayerManagement)
## Changelog
## Changelog
All notable changes to this project are documented here.
This project is currently in the **Beta Phase**.
All notable changes to PlayerManagement are documented here.
This section contains **stable (non-beta) releases only**.
📜 **Beta history:**
All beta versions (0.x.x) can be found here →
➡️ [`CHANGELOG-BETA.md`](CHANGELOG-BETA.md)
---
### **[0.11.0]** - *2025-06-19*
#### ✨ Added
- **Squad Management per Player:** You can now add up to **four squads per player**, each with:
- **Power** (in millions)
- **Position**
- **Type**: Tank, Aircraft, Missile, or Mixed
- **Visual Enhancements:** Squad types are displayed with custom icons and total power is summarized at the top of the squad card.
### **[1.0.1]** *2026-02-02* 🎉
#### ✨ Added
- **Zombie Siege Perfect Checkbox**
A new **“Perfect” checkbox** is available for each player.
When enabled, the survived wave is **automatically set to 20**.
🛠️ **Fixed**
- (N/A)
- **Player Search in Add & Edit Dialogs**
In **Zombie Siege** and **Desert Storm**, players can now be **searched by player name** when **adding or editing** entries.
---
### **[0.10.0]** - *2025-06-02*
#### ✨ Added
- **Team Selection for Desert Storm:** You can now assign **Team A** or **Team B** when creating a Desert Storm entry.
- **Team Display in Table:** The selected team is now also shown in the Desert Storm overview table.
🛠️ **Fixed**
- (N/A)
---
### **[0.9.1]** - *2025-04-24*
#### ✨ Added
- **Number Formatting Input Mask:** Numbers are now automatically formatted for better readability (e.g., `250000``250.000`).
🛠️ **Fixed**
- Fixed an issue where the selected category was not saved correctly when updating a custom event.
---
### **[0.9.0]** - *2025-04-23*
#### ✨ Added
- **Event Categories:** Custom events can now be assigned to specific categories.
- **Category-Based Leaderboards:** Each category can have its own leaderboard, depending on the event type (e.g., participation-only, points-only, or a combination).
🛠️ **Fixed**
- Minor display issues in the event and leaderboard sections have been resolved.
---
### **[0.8.3]** - *2025-04-10*
#### ♻️ Changed
- **NuGet Packages:** Updated all dependencies, including Serilog and Seq, to their latest stable versions.
- **Logging Setup:** Cleaned up and reorganized the Serilog configuration for improved clarity and maintainability.
🛠️ **Fixed**
- (N/A)
---
### **[0.8.0]** - *2025-03-11*
#### ✨ Added
- **Feedback Page:** Users can now submit feedback, including bug reports and feature requests.
- **GitHub Integration:** Feedback is automatically created as a GitHub issue, providing a direct link to track progress.
- **Screenshot Upload:** Users can attach a screenshot to better illustrate issues.
- **Success Message:** After submission, the form hides, and a success message with the GitHub issue link is displayed.
🛠️ **Fixed**
- (N/A)
---
### **[0.7.0]** - *2025-02-06*
#### ✨ Added
- **MVP Page**: A new page has been introduced where players can be loaded and a list of MVPs is displayed based on a calculation formula.
- **Filter Options**: You can now display the entire alliance, only R4/R5 members, or just players without R5/R4.
- **API Key**: A new tab has been added under the alliance section, allowing users to generate an API key to access endpoints and integrate them into their own systems.
- **MVP List Endpoint**: The API endpoint for fetching the MVP list is now available.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.6.1]** - *2025-01-28*
#### ✨ Added
- *(N/A)*
#### 🛠️ Fixed
- **VS Table**: Resolved a bug that caused incorrect data display.
---
### **[0.6.0-beta]** - *2025-01-28*
#### ✨ Added
- **Pagination**: Implemented and adjusted for all tables.
- **Zombie Siege**: Expanded the table to display all waves survived by the entire alliance.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.5.1-beta]** - *2025-01-27*
#### ✨ Added
- *(N/A)*
#### 🛠️ Fixed
- *Zombie siege**: Smile customised for exactly 20 waves
---
### **[0.5.0-beta]** - *2025-01-21*
#### ✨ Added
- **Player VS Duel**: In the player detail view, the VS points can now be viewed as a bar chart.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.4.1-beta]** - *2025-01-21*
#### ✨ Added
- **Excel Import**: Players can now be imported via Excel.
#### 🛠️ Fixed
- **Week Pipe Logic**: Corrected calculation logic for weekly processing.
---
### **[0.4.0-beta]** - *2025-01-20*
#### ✨ Added
- **Player Dismissal Page**: A new GUI page was added for dismissing players.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.6-beta]** - *2025-01-16*
#### ✨ Added
- **Player Dismissal Function**: Core dismissal functionality implemented.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.5-beta]** - *2025-01-09*
#### ✨ Added
- *(N/A)*
#### 🛠️ Fixed
- **MVP Formula**: Corrected MVP calculation formula.
---
### **[0.3.4-beta]** - *2025-01-07*
#### ✨ Added
- **Alliance MVP Calculation**: Implemented MVP calculation for alliances with API endpoint support.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.3-beta]** - *2024-12-17*
#### ✨ Added
- **Custom Event**: Introduced custom event functionality.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.2-beta]** - *2024-12-03*
#### ✨ Added
- **Event Progress**: "In Progress" status added to events.
- **League Details in VS Duel**: Added league tiers (e.g., Silver, Gold, Diamond).
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.1-beta]** - *2024-11-28*
#### ✨ Added
- **Zombie Siege Event**: Introduced a new Zombie Siege event.
#### 🛠️ Fixed
- *(N/A)*
---
### **[0.3.0-beta]** - *2024-11-26*
#### ✨ Added
- **Initial Beta Release**: Core features introduced in the first beta release.
#### 🛠️ Fixed
- *(N/A in the initial release)*

View File

@ -6,8 +6,19 @@
</div>
<div class="modal-body">
<!-- 🔍 Suche oben, volle Breite -->
<div class="mb-3 w-75 m-auto">
<div class="input-group">
<input
type="search"
class="form-control"
placeholder="Search player..."
[(ngModel)]="playerSearch"
/>
</div>
</div>
<div class="row">
@for (player of playerParticipated; track player.playerId; let i = $index) {
@for (player of filteredPlayers; track player.playerId; let i = $index) {
<div class="col-12 col-md-6 mb-4">
<div class="d-flex flex-column align-items-center border p-3">
<h6 class="mb-4 text-color">{{player.playerName}}</h6>

View File

@ -18,6 +18,7 @@ export class DesertStormParticipantsModalComponent implements OnInit {
@Input({required: true}) allianceId!: string;
@Input() players: {playerId: string, playerName: string, participated: boolean, registered: boolean, startPlayer: boolean}[] | undefined;
playerSearch: string = '';
ngOnInit() {
if (this.players) {
@ -27,6 +28,15 @@ export class DesertStormParticipantsModalComponent implements OnInit {
}
}
get filteredPlayers() {
const q = this.playerSearch.trim().toLowerCase();
if (!q) return this.playerParticipated;
return this.playerParticipated.filter(p =>
(p.playerName ?? '').toLowerCase().includes(q)
);
}
getPlayers() {
this._playerService.getAlliancePlayer(this.allianceId).subscribe({
next: ((response) => {

View File

@ -6,15 +6,37 @@
</div>
<div class="modal-body">
<!-- 🔍 Suche oben, volle Breite -->
<div class="mb-3 w-75 m-auto">
<div class="input-group">
<input
type="search"
class="form-control"
placeholder="Search player..."
[(ngModel)]="playerSearch"
/>
</div>
</div>
<div class="check-box-container d-flex flex-wrap">
@for (player of playerParticipated; track player.playerId) {
@for (player of filteredPlayers; track player.playerId) {
<div class="form-check flex-item">
<label class="form-check-label" for="{{player.playerId}}">
<span class="text-color">{{player.playerName}}</span>
</label>
<select class="form-select" [(ngModel)]="player.survivedWaves">
<div class="d-flex align-items-center justify-content-between">
<span class="text-color">{{ player.playerName }}</span>
<div class="d-flex align-items-center gap-2">
<input
type="checkbox"
class="form-check-input m-0"
[checked]="player.survivedWaves === 20"
(change)="onPerfectToggle($event, player)"
/>
<span class="small text-warning">Perfect</span>
</div>
</div>
<select class="form-select mt-1" [(ngModel)]="player.survivedWaves">
@for (wave of waves; track wave) {
<option [ngValue]="wave">{{wave}}</option>
<option [ngValue]="wave">{{ wave }}</option>
}
</select>
</div>

View File

@ -19,6 +19,17 @@ export class ZombieSiegeParticipantsModalComponent implements OnInit {
@Input() players: { playerId: string, playerName: string, survivedWaves: number; }[] | undefined;
@Input({required: true}) allianceId!: string;
playerSearch: string = '';
get filteredPlayers() {
const q = this.playerSearch.trim().toLowerCase();
if (!q) return this.playerParticipated;
return this.playerParticipated.filter(p =>
(p.playerName ?? '').toLowerCase().includes(q)
);
}
ngOnInit() {
if (this.players) {
@ -42,4 +53,14 @@ export class ZombieSiegeParticipantsModalComponent implements OnInit {
})
});
}
onPerfectToggle(event: Event, player: any) {
const checked = (event.target as HTMLInputElement).checked;
if (checked) {
player.survivedWaves = 20;
} else {
player.survivedWaves = 0;
}
}
}

View File

@ -65,7 +65,7 @@
}
<!-- No Squads -->
@if (!squads?.length) {
@if (!squads.length) {
<div class="text-muted text-center">
No squads available.
</div>