From 93cc11bd01a8b41c9a93d52eb38fb01a3687c3b5 Mon Sep 17 00:00:00 2001 From: Mateusz Skoczek Date: Sun, 28 May 2023 17:43:48 +0200 Subject: [PATCH] Changes in core, HTML export added --- TimetableDesigner.Core/BaseGroup.cs | 12 ++--- TimetableDesigner.Core/Classroom.cs | 11 +--- TimetableDesigner.Core/Group.cs | 2 +- TimetableDesigner.Core/IUnit.cs | 17 ------ TimetableDesigner.Core/Subgroup.cs | 2 +- TimetableDesigner.Core/Teacher.cs | 13 ++--- .../TimetableDesigner.Core.csproj | 2 +- TimetableDesigner.sln | 10 ++++ .../Converters/ViewModelToViewConverter.cs | 1 + .../Properties/Resources.Designer.cs | 45 +++++++++------- TimetableDesigner/Properties/Resources.resx | 15 +++--- TimetableDesigner/Resources/Images.xaml | 2 + .../Services/FileDialog/FileDialogService.cs | 2 +- TimetableDesigner/TimetableDesigner.csproj | 9 ++++ TimetableDesigner/ViewModels/IUnitVM.cs | 4 +- .../ViewModels/Models/BaseGroupVM.cs | 4 +- .../ViewModels/Models/ClassroomVM.cs | 4 +- .../ViewModels/Models/TeacherVM.cs | 4 +- .../ViewModels/Views/ClassroomEditorViewVM.cs | 2 +- .../ViewModels/Views/GroupEditorViewVM.cs | 10 +++- .../ViewModels/Views/MainWindowVM.cs | 41 ++++++++++++-- .../ViewModels/Views/TeacherEditorViewVM.cs | 2 +- TimetableDesigner/Views/MainWindow.xaml | 54 ++++++++++++------- 23 files changed, 165 insertions(+), 103 deletions(-) delete mode 100644 TimetableDesigner.Core/IUnit.cs diff --git a/TimetableDesigner.Core/BaseGroup.cs b/TimetableDesigner.Core/BaseGroup.cs index 7771057..65afdc4 100644 --- a/TimetableDesigner.Core/BaseGroup.cs +++ b/TimetableDesigner.Core/BaseGroup.cs @@ -6,11 +6,11 @@ using System.Threading.Tasks; namespace TimetableDesigner.Core { - public abstract class BaseGroup : IUnit + [Serializable] + public abstract class BaseGroup : Unit { #region FIELDS - private string _name; private string _shortName; #endregion @@ -19,11 +19,6 @@ namespace TimetableDesigner.Core #region PROPERTIES - public string Name - { - get => _name; - set => _name = value; - } public string ShortName { get => _shortName; @@ -36,9 +31,8 @@ namespace TimetableDesigner.Core #region CONSTRUCTORS - public BaseGroup() + public BaseGroup(ulong id) : base(id) { - _name = string.Empty; _shortName = string.Empty; } diff --git a/TimetableDesigner.Core/Classroom.cs b/TimetableDesigner.Core/Classroom.cs index d3950b2..b177872 100644 --- a/TimetableDesigner.Core/Classroom.cs +++ b/TimetableDesigner.Core/Classroom.cs @@ -8,11 +8,10 @@ using System.Threading.Tasks; namespace TimetableDesigner.Core { [Serializable] - public class Classroom : IUnit + public class Classroom : Unit { #region FIELDS - private string _name; private string _shortName; private string _description; private bool _isCapacityLimited; @@ -24,11 +23,6 @@ namespace TimetableDesigner.Core #region PROPERTIES - public string Name - { - get => _name; - set => _name = value; - } public string ShortName { get => _shortName; @@ -56,9 +50,8 @@ namespace TimetableDesigner.Core #region CONSTRUCTORS - public Classroom() + public Classroom(ulong id) : base(id) { - _name = string.Empty; _shortName = string.Empty; _description = string.Empty; _isCapacityLimited = false; diff --git a/TimetableDesigner.Core/Group.cs b/TimetableDesigner.Core/Group.cs index 8a1d4bd..76e1665 100644 --- a/TimetableDesigner.Core/Group.cs +++ b/TimetableDesigner.Core/Group.cs @@ -33,7 +33,7 @@ namespace TimetableDesigner.Core #region CONSTRUCTORS - public Group() : base() + public Group(ulong id) : base(id) { _description = string.Empty; _assignedSubgroups = new HashSet(); diff --git a/TimetableDesigner.Core/IUnit.cs b/TimetableDesigner.Core/IUnit.cs deleted file mode 100644 index fa02155..0000000 --- a/TimetableDesigner.Core/IUnit.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace TimetableDesigner.Core -{ - public interface IUnit - { - #region PROPERTIES - - string Name { get; } - - #endregion - } -} diff --git a/TimetableDesigner.Core/Subgroup.cs b/TimetableDesigner.Core/Subgroup.cs index 22c0c40..87b8983 100644 --- a/TimetableDesigner.Core/Subgroup.cs +++ b/TimetableDesigner.Core/Subgroup.cs @@ -11,7 +11,7 @@ namespace TimetableDesigner.Core { #region CONSTRUCTORS - public Subgroup() : base() + public Subgroup(ulong id) : base(id) { } #endregion diff --git a/TimetableDesigner.Core/Teacher.cs b/TimetableDesigner.Core/Teacher.cs index a201c6b..2efdb30 100644 --- a/TimetableDesigner.Core/Teacher.cs +++ b/TimetableDesigner.Core/Teacher.cs @@ -8,11 +8,10 @@ using TimetableDesigner.Customs; namespace TimetableDesigner.Core { [Serializable] - public class Teacher : IUnit + public class Teacher : Unit { #region FIELDS - private string _name; private string _shortName; private string _description; private JsonSerializableDictionary _availabilityHours; @@ -23,11 +22,6 @@ namespace TimetableDesigner.Core #region PROPERTIES - public string Name - { - get => _name; - set => _name = value; - } public string ShortName { get => _shortName; @@ -38,7 +32,7 @@ namespace TimetableDesigner.Core get => _description; set => _description = value; } - public IDictionary AvailabilityHours => _availabilityHours; + public JsonSerializableDictionary AvailabilityHours => _availabilityHours; #endregion @@ -46,9 +40,8 @@ namespace TimetableDesigner.Core #region CONSTRUCTORS - public Teacher() + public Teacher(ulong id) : base(id) { - _name = string.Empty; _shortName = string.Empty; _description = string.Empty; _availabilityHours = new JsonSerializableDictionary(); diff --git a/TimetableDesigner.Core/TimetableDesigner.Core.csproj b/TimetableDesigner.Core/TimetableDesigner.Core.csproj index 5417903..bc05e18 100644 --- a/TimetableDesigner.Core/TimetableDesigner.Core.csproj +++ b/TimetableDesigner.Core/TimetableDesigner.Core.csproj @@ -1,7 +1,7 @@ - net7.0-windows + net7.0 enable enable diff --git a/TimetableDesigner.sln b/TimetableDesigner.sln index 00fd91c..325a235 100644 --- a/TimetableDesigner.sln +++ b/TimetableDesigner.sln @@ -11,6 +11,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TimetableDesigner.Tests", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TimetableDesigner.Customs", "TimetableDesigner.Customs\TimetableDesigner.Customs.csproj", "{BCA4CD04-FD49-4C28-9743-F4F6C1888E7E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TimetableDesigner.Export", "TimetableDesigner.Export\TimetableDesigner.Export.csproj", "{C97DB09E-CB48-432A-8BA4-108B21F2DF94}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -51,6 +53,14 @@ Global {BCA4CD04-FD49-4C28-9743-F4F6C1888E7E}.Release|Any CPU.Build.0 = Release|Any CPU {BCA4CD04-FD49-4C28-9743-F4F6C1888E7E}.Release|x64.ActiveCfg = Release|Any CPU {BCA4CD04-FD49-4C28-9743-F4F6C1888E7E}.Release|x64.Build.0 = Release|Any CPU + {C97DB09E-CB48-432A-8BA4-108B21F2DF94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C97DB09E-CB48-432A-8BA4-108B21F2DF94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C97DB09E-CB48-432A-8BA4-108B21F2DF94}.Debug|x64.ActiveCfg = Debug|Any CPU + {C97DB09E-CB48-432A-8BA4-108B21F2DF94}.Debug|x64.Build.0 = Debug|Any CPU + {C97DB09E-CB48-432A-8BA4-108B21F2DF94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C97DB09E-CB48-432A-8BA4-108B21F2DF94}.Release|Any CPU.Build.0 = Release|Any CPU + {C97DB09E-CB48-432A-8BA4-108B21F2DF94}.Release|x64.ActiveCfg = Release|Any CPU + {C97DB09E-CB48-432A-8BA4-108B21F2DF94}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/TimetableDesigner/Converters/ViewModelToViewConverter.cs b/TimetableDesigner/Converters/ViewModelToViewConverter.cs index 41d19b7..09fde3d 100644 --- a/TimetableDesigner/Converters/ViewModelToViewConverter.cs +++ b/TimetableDesigner/Converters/ViewModelToViewConverter.cs @@ -26,6 +26,7 @@ namespace TimetableDesigner.Converters { typeof(TeacherEditorViewVM), typeof(TeacherEditorView) }, { typeof(GroupEditorViewVM), typeof(GroupEditorView) }, { typeof(TimetableEditorViewVM), typeof(TimetableEditorView) }, + { typeof(ExportHTMLViewVM), typeof(ExportHTMLView) }, }; #endregion diff --git a/TimetableDesigner/Properties/Resources.Designer.cs b/TimetableDesigner/Properties/Resources.Designer.cs index d2675f0..23301c4 100644 --- a/TimetableDesigner/Properties/Resources.Designer.cs +++ b/TimetableDesigner/Properties/Resources.Designer.cs @@ -538,6 +538,15 @@ namespace TimetableDesigner.Properties { } } + /// + /// Looks up a localized string similar to HTML. + /// + public static string Main_Ribbon_Export_Timetable_HTML { + get { + return ResourceManager.GetString("Main.Ribbon.Export.Timetable.HTML", resourceCulture); + } + } + /// /// Looks up a localized string similar to PDF. /// @@ -664,24 +673,6 @@ namespace TimetableDesigner.Properties { } } - /// - /// Looks up a localized string similar to Import groups. - /// - public static string Main_Ribbon_Project_Import_ImportGroups { - get { - return ResourceManager.GetString("Main.Ribbon.Project.Import.ImportGroups", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Import teachers. - /// - public static string Main_Ribbon_Project_Import_ImportTeachers { - get { - return ResourceManager.GetString("Main.Ribbon.Project.Import.ImportTeachers", resourceCulture); - } - } - /// /// Looks up a localized string similar to New. /// @@ -988,6 +979,15 @@ namespace TimetableDesigner.Properties { } } + /// + /// Looks up a localized string similar to Export to HTML. + /// + public static string Tabs_ExportHTML { + get { + return ResourceManager.GetString("Tabs.ExportHTML", resourceCulture); + } + } + /// /// Looks up a localized string similar to Group editing. /// @@ -997,6 +997,15 @@ namespace TimetableDesigner.Properties { } } + /// + /// Looks up a localized string similar to Import classrooms. + /// + public static string Tabs_ImportClassroom { + get { + return ResourceManager.GetString("Tabs.ImportClassroom", resourceCulture); + } + } + /// /// Looks up a localized string similar to Project settings. /// diff --git a/TimetableDesigner/Properties/Resources.resx b/TimetableDesigner/Properties/Resources.resx index c0c2017..cc691c6 100644 --- a/TimetableDesigner/Properties/Resources.resx +++ b/TimetableDesigner/Properties/Resources.resx @@ -276,6 +276,9 @@ Timetable + + HTML + PDF @@ -318,12 +321,6 @@ Import classrooms - - Import groups - - - Import teachers - New @@ -426,9 +423,15 @@ Classroom editing + + Export to HTML + Group editing + + Import classrooms + Project settings diff --git a/TimetableDesigner/Resources/Images.xaml b/TimetableDesigner/Resources/Images.xaml index fb07e2d..0446037 100644 --- a/TimetableDesigner/Resources/Images.xaml +++ b/TimetableDesigner/Resources/Images.xaml @@ -4,6 +4,7 @@ + @@ -33,4 +34,5 @@ + \ No newline at end of file diff --git a/TimetableDesigner/Services/FileDialog/FileDialogService.cs b/TimetableDesigner/Services/FileDialog/FileDialogService.cs index b2c32f4..1ccb34b 100644 --- a/TimetableDesigner/Services/FileDialog/FileDialogService.cs +++ b/TimetableDesigner/Services/FileDialog/FileDialogService.cs @@ -57,7 +57,7 @@ namespace TimetableDesigner.Services.FileDialog List extensionStrings = new List(); foreach (string extension in type.Value) { - extensionStrings.Add($"*.{extension}"); + extensionStrings.Add($"*.{extension.ToLower()}"); } sb.Append(string.Join(';', extensionStrings)); diff --git a/TimetableDesigner/TimetableDesigner.csproj b/TimetableDesigner/TimetableDesigner.csproj index 8b189fe..a0e5c93 100644 --- a/TimetableDesigner/TimetableDesigner.csproj +++ b/TimetableDesigner/TimetableDesigner.csproj @@ -35,6 +35,8 @@ + + @@ -91,6 +93,12 @@ Always + + Always + + + Always + Always @@ -170,6 +178,7 @@ + diff --git a/TimetableDesigner/ViewModels/IUnitVM.cs b/TimetableDesigner/ViewModels/IUnitVM.cs index 2df389b..7942c0c 100644 --- a/TimetableDesigner/ViewModels/IUnitVM.cs +++ b/TimetableDesigner/ViewModels/IUnitVM.cs @@ -11,7 +11,9 @@ namespace TimetableDesigner.ViewModels.Models.Base { #region PROPERTIES - IUnit Unit { get; } + Unit Unit { get; } + Guid Guid { get; } + ulong Id { get; } string Name { get; } #endregion diff --git a/TimetableDesigner/ViewModels/Models/BaseGroupVM.cs b/TimetableDesigner/ViewModels/Models/BaseGroupVM.cs index 5dc5e68..c1713d3 100644 --- a/TimetableDesigner/ViewModels/Models/BaseGroupVM.cs +++ b/TimetableDesigner/ViewModels/Models/BaseGroupVM.cs @@ -21,9 +21,11 @@ namespace TimetableDesigner.ViewModels.Models #region PROPERTIES - IUnit IUnitVM.Unit => _baseGroup; + Unit IUnitVM.Unit => _baseGroup; public BaseGroup BaseGroup => _baseGroup; + public ulong Id => _baseGroup.Id; + public Guid Guid => _baseGroup.Guid; public string Name { get => _baseGroup.Name; diff --git a/TimetableDesigner/ViewModels/Models/ClassroomVM.cs b/TimetableDesigner/ViewModels/Models/ClassroomVM.cs index 16d516b..e3206f2 100644 --- a/TimetableDesigner/ViewModels/Models/ClassroomVM.cs +++ b/TimetableDesigner/ViewModels/Models/ClassroomVM.cs @@ -21,9 +21,11 @@ namespace TimetableDesigner.ViewModels.Models #region PROPERTIES - IUnit IUnitVM.Unit => _classroom; + Unit IUnitVM.Unit => _classroom; public Classroom Classroom => _classroom; + public Guid Guid => _classroom.Guid; + public ulong Id => _classroom.Id; public string Name { get => _classroom.Name; diff --git a/TimetableDesigner/ViewModels/Models/TeacherVM.cs b/TimetableDesigner/ViewModels/Models/TeacherVM.cs index e7a8bf5..a3c7355 100644 --- a/TimetableDesigner/ViewModels/Models/TeacherVM.cs +++ b/TimetableDesigner/ViewModels/Models/TeacherVM.cs @@ -24,9 +24,11 @@ namespace TimetableDesigner.ViewModels.Models #region PROPERTIES - IUnit IUnitVM.Unit => _teacher; + Unit IUnitVM.Unit => _teacher; public Teacher Teacher => _teacher; + public Guid Guid => _teacher.Guid; + public ulong Id => _teacher.Id; public string Name { get => _teacher.Name; diff --git a/TimetableDesigner/ViewModels/Views/ClassroomEditorViewVM.cs b/TimetableDesigner/ViewModels/Views/ClassroomEditorViewVM.cs index 670052a..8cd5fb0 100644 --- a/TimetableDesigner/ViewModels/Views/ClassroomEditorViewVM.cs +++ b/TimetableDesigner/ViewModels/Views/ClassroomEditorViewVM.cs @@ -64,7 +64,7 @@ namespace TimetableDesigner.ViewModels.Views #region CONSTRUCTORS - public ClassroomEditorViewVM() : this(new ClassroomVM(new Classroom())) + public ClassroomEditorViewVM() : this(new ClassroomVM(new Classroom(0))) { } public ClassroomEditorViewVM(ClassroomVM classroom) diff --git a/TimetableDesigner/ViewModels/Views/GroupEditorViewVM.cs b/TimetableDesigner/ViewModels/Views/GroupEditorViewVM.cs index cd2dba6..5b5dc8f 100644 --- a/TimetableDesigner/ViewModels/Views/GroupEditorViewVM.cs +++ b/TimetableDesigner/ViewModels/Views/GroupEditorViewVM.cs @@ -93,7 +93,7 @@ namespace TimetableDesigner.ViewModels.Views #region CONSTRUCTORS - public GroupEditorViewVM() : this(new GroupVM(new Group())) + public GroupEditorViewVM() : this(new GroupVM(new Group(0))) { } public GroupEditorViewVM(GroupVM group) @@ -117,7 +117,13 @@ namespace TimetableDesigner.ViewModels.Views private void AddSubgroup() { - Subgroup subgroup = new Subgroup() + ulong id = 0; + if (_projectService.ProjectViewModel.Subgroups.Count() > 0) + { + id = _projectService.ProjectViewModel.Subgroups.Select(x => x.Id).Max() + 1; + } + + Subgroup subgroup = new Subgroup(id) { Name = NewSubgroupName }; diff --git a/TimetableDesigner/ViewModels/Views/MainWindowVM.cs b/TimetableDesigner/ViewModels/Views/MainWindowVM.cs index e9fd846..9b65c7d 100644 --- a/TimetableDesigner/ViewModels/Views/MainWindowVM.cs +++ b/TimetableDesigner/ViewModels/Views/MainWindowVM.cs @@ -29,6 +29,7 @@ using System.Windows.Forms; using TimetableDesigner.Services.FileDialog; using TimetableDesigner.Services.Scheduler; using static TimetableDesigner.ViewModels.Views.TimetableEditorViewVM; +using TimetableDesigner.Views; namespace TimetableDesigner.ViewModels.Views { @@ -80,6 +81,7 @@ namespace TimetableDesigner.ViewModels.Views public ICommand RemoveSubgroupCommand { get; set; } public ICommand EditTimetableCommand { get; set; } public ICommand AutoScheduleCommand { get; set; } + public ICommand ExportHTMLCommand { get; set; } // Others public string? Version { get; set; } @@ -116,6 +118,7 @@ namespace TimetableDesigner.ViewModels.Views RemoveSubgroupCommand = new RelayCommand(RemoveSubgroup); EditTimetableCommand = new RelayCommand(EditTimetable); AutoScheduleCommand = new RelayCommand(param => AutoSchedule()); + ExportHTMLCommand = new RelayCommand(param => ExportHTML()); Version = Assembly.GetExecutingAssembly().GetName().Version?.ToString(); } @@ -212,7 +215,13 @@ namespace TimetableDesigner.ViewModels.Views { if (ProjectService.ProjectViewModel is not null) { - Classroom classroom = new Classroom() + ulong id = 0; + if (ProjectService.ProjectViewModel.Classrooms.Count() > 0) + { + id = ProjectService.ProjectViewModel.Classrooms.Select(x => x.Id).Max() + 1; + } + + Classroom classroom = new Classroom(id) { Name = Resources.Global_DefaultClassroomName }; @@ -225,7 +234,13 @@ namespace TimetableDesigner.ViewModels.Views { if (ProjectService.ProjectViewModel is not null) { - Teacher teacher = new Teacher() + ulong id = 0; + if (ProjectService.ProjectViewModel.Teachers.Count() > 0) + { + id = ProjectService.ProjectViewModel.Teachers.Select(x => x.Id).Max() + 1; + } + + Teacher teacher = new Teacher(id) { Name = Resources.Global_DefaultTeacherName }; @@ -238,7 +253,13 @@ namespace TimetableDesigner.ViewModels.Views { if (ProjectService.ProjectViewModel is not null) { - Group group = new Group() + ulong id = 0; + if (ProjectService.ProjectViewModel.Groups.Count() > 0) + { + id = ProjectService.ProjectViewModel.Groups.Select(x => x.Id).Max() + 1; + } + + Group group = new Group(id) { Name = Resources.Global_DefaultGroupName }; @@ -382,6 +403,20 @@ namespace TimetableDesigner.ViewModels.Views } } + private void ExportHTML() + { + if (ProjectService.ProjectViewModel is not null) + { + TabItem exportHTMLTab = new TabItem() + { + Title = Resources.Tabs_ExportHTML, + IsClosable = true, + ViewModel = new ExportHTMLViewVM() + }; + _tabNavigationService.AddAndActivate(exportHTMLTab); + } + } + #endregion } } diff --git a/TimetableDesigner/ViewModels/Views/TeacherEditorViewVM.cs b/TimetableDesigner/ViewModels/Views/TeacherEditorViewVM.cs index 63ad600..2afb29d 100644 --- a/TimetableDesigner/ViewModels/Views/TeacherEditorViewVM.cs +++ b/TimetableDesigner/ViewModels/Views/TeacherEditorViewVM.cs @@ -132,7 +132,7 @@ namespace TimetableDesigner.ViewModels.Views #region CONSTRUCTORS - public TeacherEditorViewVM() : this(new TeacherVM(new Teacher())) + public TeacherEditorViewVM() : this(new TeacherVM(new Teacher(0))) { } public TeacherEditorViewVM(TeacherVM teacher) diff --git a/TimetableDesigner/Views/MainWindow.xaml b/TimetableDesigner/Views/MainWindow.xaml index f27c78b..5597164 100644 --- a/TimetableDesigner/Views/MainWindow.xaml +++ b/TimetableDesigner/Views/MainWindow.xaml @@ -9,7 +9,7 @@ - + @@ -50,39 +50,55 @@ - - - + + + - + - - - - - - - - + + + + - + - + - - + + @@ -258,7 +274,7 @@ CommandParameter="{Binding ProjectService.Errors/Unit}"/> - + @@ -281,7 +297,7 @@ - +