EHM DAL 0.2.5
Data abstraction layer for Eastside Hockey Manager
Loading...
Searching...
No Matches
schedule_template_generator.h
1#pragma once
2
3// Application headers
4#include "include/spreadsheet/spreadsheet.h"
5#include "include/tools/schedule_generator/schedule_template_generator/schedule_club.h"
6#include "include/tools/schedule_generator/schedule_template_generator/schedule_game_table.h"
7#include "include/tools/schedule_generator/schedule_template_generator/schedule_matrix.h"
8
9// Qt headers
10class QDate;
11#include <memory>
12#include <vector>
13
14namespace ehm_dal::tools::schedule_template_generator {
15
16// --- Schedule template generator --- //
21{
22public:
24
25 // Clubs
26 qint32 addClub(const qint32 encoded_division_club_id);
27 void addDivision(const qint32 division_id,
28 const qint32 club_count,
29 const qint32 first_club_id = 0);
30 std::shared_ptr<ScheduleClub> club(const qint32 club_id);
31 std::shared_ptr<ScheduleClub> clubFromEncodedId(const qint32 club_encoded_id);
32 inline qint32 clubCount() const { return static_cast<qint32>(clubs_.size()); }
33 std::shared_ptr<ScheduleClub> findOrAddClub(const qint32 club_encoded_id);
34 bool isValidClubId(const qint32 club_id) const;
35 std::vector<std::shared_ptr<ScheduleClub>> sortedClubList();
36
37 // Dates
38 inline void addDays(const qint32 days) { games_.addDays(days); }
39 inline qint32 generatedDateCount() const { return generated_date_count_; }
40 inline qint32 generatedRoundCount() const { return generated_round_count_; }
41
42 // Export data
43 bool exportSchedule();
44 bool exportSchedule(ehm_dal::spreadsheet::Spreadsheet &sheet);
45
46 // Games
47 void addGame(const qint32 road_club_id, const qint32 home_club_id, const QDate &date);
48 void addGame(const qint32 road_club_id,
49 const qint32 home_club_id,
50 const qint32 day_of_month,
51 const qint32 month,
52 const qint32 year_offset);
53 void addGameFromEncodedId(const qint32 road_club_encoded_id,
54 const qint32 home_club_encoded_id,
55 const qint32 day_of_month,
56 const qint32 month,
57 const qint32 year_offset);
58 inline const ScheduleGameTable *games() { return &games_; };
59 void printGame(const qint32 game_id);
60
61 // Generator
62 bool generate(const QDate &start_date,
63 const QDate &end_date,
64 const std::vector<qint32> &day_priorities,
65 const QDate &exclusion_range_start_date = QDate(),
66 const QDate &exclusion_range_end_date = QDate());
67 std::unique_ptr<ScheduleMatrix> matrix(const qint32 default_games_played_count = 1);
68 std::unique_ptr<ScheduleMatrix> matrix(spreadsheet::Spreadsheet &sheet);
69
70 // Reset
71 void reset();
72
73 // Start year
74 inline void setStartYear(const qint32 start_year) { games_.setStartYear(start_year); }
75 inline qint32 startYear() const { return games_.startYear(); }
76
77private:
78 std::vector<std::shared_ptr<ScheduleClub>> clubs_;
79 ScheduleGameTable games_;
80 qint32 generated_date_count_{0};
81 qint32 generated_round_count_{0};
82
83 // Clubs
84 qint32 toEncodedDivisionClubId(const qint32 division_id, const qint32 club_id) const;
85
86 // Generator
87 void initClubGameCounts(const qint32 default_games_played_count);
88 void resetClubUnallocatedGames();
89 qint32 unallocatedGameCount() const;
90
91 // Settings
92 qint32 generate_iteration_limit_{2000};
93};
94} // namespace ehm_dal::tools::schedule_template_generator
Definition: spreadsheet.h:30
The ScheduleGameTable class is a container for ScheduleGames.
Definition: schedule_game_table.h:20
The ScheduleTemplateGenerator class generates EHM schedule templates.
Definition: schedule_template_generator.h:21