From cc0cc3d7f766e6057721807f29d3e7cffbded08d Mon Sep 17 00:00:00 2001 From: Dimitar Byalkov Date: Fri, 9 Jun 2023 07:18:11 +0200 Subject: [PATCH] Events on desktop --- .../Data/ComplaintRepository.cs | 2 +- StudentHouseDashboard/Data/EventRepository.cs | 147 ++++++++++++++ StudentHouseDashboard/Logic/EventManager.cs | 42 ++++ .../Logic/IEventRepository.cs | 20 ++ StudentHouseDashboard/Models/Event.cs | 8 + .../WebApp/Pages/Index.cshtml | 1 + StudentHouseDashboard/WebApp/Program.cs | 1 + .../WinForms/AnnouncementForm.resx | 62 +++++- .../WinForms/Dashboard.Designer.cs | 80 ++++++++ StudentHouseDashboard/WinForms/Dashboard.cs | 60 ++++++ .../WinForms/EventForm.Designer.cs | 189 ++++++++++++++++++ StudentHouseDashboard/WinForms/EventForm.cs | 69 +++++++ StudentHouseDashboard/WinForms/EventForm.resx | 120 +++++++++++ .../WinForms/WinForms.csproj | 3 + docs/dbdiagram.png | Bin 15024 -> 22876 bytes docs/testplan.docx | Bin 36586 -> 36506 bytes table.sql | 11 + 17 files changed, 813 insertions(+), 2 deletions(-) create mode 100644 StudentHouseDashboard/Data/EventRepository.cs create mode 100644 StudentHouseDashboard/Logic/EventManager.cs create mode 100644 StudentHouseDashboard/Logic/IEventRepository.cs create mode 100644 StudentHouseDashboard/WinForms/EventForm.Designer.cs create mode 100644 StudentHouseDashboard/WinForms/EventForm.cs create mode 100644 StudentHouseDashboard/WinForms/EventForm.resx diff --git a/StudentHouseDashboard/Data/ComplaintRepository.cs b/StudentHouseDashboard/Data/ComplaintRepository.cs index f7b03ca..d1d4eed 100644 --- a/StudentHouseDashboard/Data/ComplaintRepository.cs +++ b/StudentHouseDashboard/Data/ComplaintRepository.cs @@ -144,7 +144,7 @@ namespace Data var writer = cmd.ExecuteNonQuery(); if (writer == -1) { - throw new DatabaseOperationException("Database error: Complaint not created"); + throw new DatabaseOperationException("Database error: Complaint not updated"); } } } diff --git a/StudentHouseDashboard/Data/EventRepository.cs b/StudentHouseDashboard/Data/EventRepository.cs new file mode 100644 index 0000000..60f0b25 --- /dev/null +++ b/StudentHouseDashboard/Data/EventRepository.cs @@ -0,0 +1,147 @@ +using Logic; +using Logic.Exceptions; +using Models; +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Data +{ + public class EventRepository : IEventRepository + { + public Event CreateEvent(string title, string description, User author, DateTime publishDate, DateTime startDate, DateTime endDate) + { + using (SqlConnection conn = SqlConnectionHelper.CreateConnection()) + { + string sql = "INSERT INTO Events (Author, Description, Title, PublishDate, StartDate, EndDate) VALUES (@author, @desc, @title, @date, @start, @end) " + + "SELECT SCOPE_IDENTITY();"; + SqlCommand cmd = new SqlCommand(sql, conn); + cmd.Parameters.AddWithValue("@author", author.ID); + cmd.Parameters.AddWithValue("@desc", description); + cmd.Parameters.AddWithValue("@title", title); + cmd.Parameters.AddWithValue("@date", publishDate); + cmd.Parameters.AddWithValue("@start", startDate); + cmd.Parameters.AddWithValue("@end", endDate); + int newId = Convert.ToInt32(cmd.ExecuteScalar()); + if (newId == 0) + { + throw new DatabaseOperationException("Database error: Event not created"); + } + else + { + return GetEventById(newId); + } + } + } + + public void DeleteEvent(int id) + { + using (SqlConnection conn = SqlConnectionHelper.CreateConnection()) + { + string sql = "DELETE FROM Events WHERE Id = @id;"; + SqlCommand cmd = new SqlCommand(sql, conn); + cmd.Parameters.AddWithValue("@id", id); + int writer = cmd.ExecuteNonQuery(); + if (writer != 1) + { + throw new DatabaseOperationException("Database error: Event not deleted"); + } + } + } + + public List GetAllCurrentEvents() + { + List events = new List(); + UserRepository userRepository = new UserRepository(); + using (SqlConnection conn = SqlConnectionHelper.CreateConnection()) + { + string sql = "SELECT * FROM Events WHERE StartDate >= CURRENT_TIMESTAMP;"; + SqlCommand cmd = new SqlCommand(sql, conn); + var reader = cmd.ExecuteReader(); + + while (reader.Read()) + { + Event @event = new Event(Convert.ToInt32(reader["ID"]), + userRepository.GetUserById(Convert.ToInt32(reader["Author"])), + reader["Description"].ToString(), reader["Title"].ToString(), + (DateTime)reader["PublishDate"], (DateTime)reader["StartDate"], + (DateTime)reader["EndDate"]); + // ID, Name, Password, Role + events.Add(@event); + } + conn.Close(); + } + return events; + } + + public List GetAllEvents() + { + List events = new List(); + UserRepository userRepository = new UserRepository(); + using (SqlConnection conn = SqlConnectionHelper.CreateConnection()) + { + string sql = "SELECT * FROM Events;"; + SqlCommand cmd = new SqlCommand(sql, conn); + var reader = cmd.ExecuteReader(); + + while (reader.Read()) + { + Event @event = new Event(Convert.ToInt32(reader["ID"]), + userRepository.GetUserById(Convert.ToInt32(reader["Author"])), + reader["Description"].ToString(), reader["Title"].ToString(), + (DateTime)reader["PublishDate"], (DateTime)reader["StartDate"], + (DateTime)reader["EndDate"]); + // ID, Name, Password, Role + events.Add(@event); + } + conn.Close(); + } + return events; + } + + public Event GetEventById(int id) + { + UserRepository userRepository = new UserRepository(); + using (SqlConnection conn = SqlConnectionHelper.CreateConnection()) + { + string sql = "SELECT * FROM Events WHERE ID = @id;"; + SqlCommand cmd = new SqlCommand(sql, conn); + cmd.Parameters.AddWithValue("id", id); + var reader = cmd.ExecuteReader(); + reader.Read(); + Event @event = new Event(Convert.ToInt32(reader["ID"]), + userRepository.GetUserById(Convert.ToInt32(reader["Author"])), + reader["Description"].ToString(), reader["Title"].ToString(), + (DateTime)reader["PublishDate"], (DateTime)reader["StartDate"], + (DateTime)reader["EndDate"]); + conn.Close(); + return @event; + } + } + + public void UpdateEvent(int id, string title, string description, DateTime startDate, DateTime endDate) + { + using (SqlConnection conn = SqlConnectionHelper.CreateConnection()) + { + string sql = "UPDATE Events " + + "SET Description = @desc, Title = @title, StartDate = @start, EndDate = @end " + + "WHERE ID = @id " + + "SELECT SCOPE_IDENTITY();"; + SqlCommand cmd = new SqlCommand(sql, conn); + cmd.Parameters.AddWithValue("@id", id); + cmd.Parameters.AddWithValue("@desc", description); + cmd.Parameters.AddWithValue("@title", title); + cmd.Parameters.AddWithValue("@status", startDate); + cmd.Parameters.AddWithValue("@severity", endDate); + var writer = cmd.ExecuteNonQuery(); + if (writer == -1) + { + throw new DatabaseOperationException("Database error: Event not updated"); + } + } + } + } +} diff --git a/StudentHouseDashboard/Logic/EventManager.cs b/StudentHouseDashboard/Logic/EventManager.cs new file mode 100644 index 0000000..79847f2 --- /dev/null +++ b/StudentHouseDashboard/Logic/EventManager.cs @@ -0,0 +1,42 @@ +using Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Logic +{ + public class EventManager + { + private IEventRepository eventRepository; + public EventManager(IEventRepository eventRepository) + { + this.eventRepository = eventRepository; + } + public List GetAllEvents() + { + return eventRepository.GetAllEvents(); + } + public List GetAllCurrentEvents() + { + return eventRepository.GetAllCurrentEvents(); + } + public Event GetEventById(int id) + { + return eventRepository.GetEventById(id); + } + public Event CreateEvent(string title, string description, User author, DateTime publishDate, DateTime startDate, DateTime endDate) + { + return eventRepository.CreateEvent(title, description, author, publishDate, startDate, endDate); + } + public void UpdateEvent(int id, string title, string description, DateTime startDate, DateTime endDate) + { + eventRepository.UpdateEvent(id, title, description, startDate, endDate); + } + public void DeleteEvent(int id) + { + eventRepository.DeleteEvent(id); + } + } +} diff --git a/StudentHouseDashboard/Logic/IEventRepository.cs b/StudentHouseDashboard/Logic/IEventRepository.cs new file mode 100644 index 0000000..aae4bd9 --- /dev/null +++ b/StudentHouseDashboard/Logic/IEventRepository.cs @@ -0,0 +1,20 @@ +using Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Logic +{ + public interface IEventRepository + { + public List GetAllEvents(); + public List GetAllCurrentEvents(); + public Event GetEventById(int id); + public Event CreateEvent(string title, string description, User author, DateTime publishDate, DateTime startDate, DateTime endDate); + public void UpdateEvent(int id, string title, string description, DateTime startDate, DateTime endDate); + public void DeleteEvent(int id); + } +} + \ No newline at end of file diff --git a/StudentHouseDashboard/Models/Event.cs b/StudentHouseDashboard/Models/Event.cs index 2474992..8e83f5f 100644 --- a/StudentHouseDashboard/Models/Event.cs +++ b/StudentHouseDashboard/Models/Event.cs @@ -7,6 +7,10 @@ namespace Models { public class Event : GenericMessage { + public Event() + { + + } public Event(int id, User author, string description, string title, DateTime publishDate, DateTime startDate, DateTime endDate) : base(id, author, description, title, publishDate) { StartDate = startDate; @@ -22,5 +26,9 @@ namespace Models { get;set; } + public override string ToString() + { + return $"({StartDate.ToString("g")} - {EndDate.ToString("g")}; {Author.Name}) {Title}"; + } } } \ No newline at end of file diff --git a/StudentHouseDashboard/WebApp/Pages/Index.cshtml b/StudentHouseDashboard/WebApp/Pages/Index.cshtml index 4079123..e160478 100644 --- a/StudentHouseDashboard/WebApp/Pages/Index.cshtml +++ b/StudentHouseDashboard/WebApp/Pages/Index.cshtml @@ -17,6 +17,7 @@ { Announcements Complaints + Events } diff --git a/StudentHouseDashboard/WebApp/Program.cs b/StudentHouseDashboard/WebApp/Program.cs index 06e2107..d49db10 100644 --- a/StudentHouseDashboard/WebApp/Program.cs +++ b/StudentHouseDashboard/WebApp/Program.cs @@ -22,6 +22,7 @@ namespace WebApp builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); + builder.Services.AddScoped(); var app = builder.Build(); diff --git a/StudentHouseDashboard/WinForms/AnnouncementForm.resx b/StudentHouseDashboard/WinForms/AnnouncementForm.resx index f298a7b..a395bff 100644 --- a/StudentHouseDashboard/WinForms/AnnouncementForm.resx +++ b/StudentHouseDashboard/WinForms/AnnouncementForm.resx @@ -1,4 +1,64 @@ - + + + diff --git a/StudentHouseDashboard/WinForms/Dashboard.Designer.cs b/StudentHouseDashboard/WinForms/Dashboard.Designer.cs index d998d26..944964f 100644 --- a/StudentHouseDashboard/WinForms/Dashboard.Designer.cs +++ b/StudentHouseDashboard/WinForms/Dashboard.Designer.cs @@ -52,6 +52,12 @@ lbComplaints = new ListBox(); tpEvents = new TabPage(); btnLogout = new Button(); + panel1 = new Panel(); + btnNewEvent = new Button(); + btnDeleteEvent = new Button(); + btnViewEvent = new Button(); + btnEditEvent = new Button(); + lbEvents = new ListBox(); tabControl1.SuspendLayout(); tpUsers.SuspendLayout(); panelUserFunctions.SuspendLayout(); @@ -59,6 +65,8 @@ panelAnnouncementsFunctions.SuspendLayout(); tpComplaints.SuspendLayout(); panelComplaintFunctions.SuspendLayout(); + tpEvents.SuspendLayout(); + panel1.SuspendLayout(); SuspendLayout(); // // lblUserStatus @@ -297,6 +305,8 @@ // // tpEvents // + tpEvents.Controls.Add(panel1); + tpEvents.Controls.Add(lbEvents); tpEvents.Location = new Point(4, 24); tpEvents.Name = "tpEvents"; tpEvents.Size = new Size(723, 340); @@ -314,6 +324,68 @@ btnLogout.UseVisualStyleBackColor = true; btnLogout.Click += btnLogout_Click; // + // panel1 + // + panel1.Controls.Add(btnNewEvent); + panel1.Controls.Add(btnDeleteEvent); + panel1.Controls.Add(btnViewEvent); + panel1.Controls.Add(btnEditEvent); + panel1.Dock = DockStyle.Bottom; + panel1.Location = new Point(0, 301); + panel1.Name = "panel1"; + panel1.Size = new Size(723, 39); + panel1.TabIndex = 8; + // + // btnNewEvent + // + btnNewEvent.Location = new Point(3, 3); + btnNewEvent.Name = "btnNewEvent"; + btnNewEvent.Size = new Size(75, 23); + btnNewEvent.TabIndex = 2; + btnNewEvent.Text = "New"; + btnNewEvent.UseVisualStyleBackColor = true; + btnNewEvent.Click += btnNewEvent_Click; + // + // btnDeleteEvent + // + btnDeleteEvent.Location = new Point(84, 3); + btnDeleteEvent.Name = "btnDeleteEvent"; + btnDeleteEvent.Size = new Size(75, 23); + btnDeleteEvent.TabIndex = 3; + btnDeleteEvent.Text = "Delete"; + btnDeleteEvent.UseVisualStyleBackColor = true; + btnDeleteEvent.Click += btnDeleteEvent_Click; + // + // btnViewEvent + // + btnViewEvent.Location = new Point(246, 3); + btnViewEvent.Name = "btnViewEvent"; + btnViewEvent.Size = new Size(75, 23); + btnViewEvent.TabIndex = 5; + btnViewEvent.Text = "View"; + btnViewEvent.UseVisualStyleBackColor = true; + btnViewEvent.Click += btnViewEvent_Click; + // + // btnEditEvent + // + btnEditEvent.Location = new Point(165, 3); + btnEditEvent.Name = "btnEditEvent"; + btnEditEvent.Size = new Size(75, 23); + btnEditEvent.TabIndex = 4; + btnEditEvent.Text = "Edit"; + btnEditEvent.UseVisualStyleBackColor = true; + btnEditEvent.Click += btnEditEvent_Click; + // + // lbEvents + // + lbEvents.Dock = DockStyle.Top; + lbEvents.FormattingEnabled = true; + lbEvents.ItemHeight = 15; + lbEvents.Location = new Point(0, 0); + lbEvents.Name = "lbEvents"; + lbEvents.Size = new Size(723, 304); + lbEvents.TabIndex = 9; + // // Dashboard // AutoScaleDimensions = new SizeF(7F, 15F); @@ -332,6 +404,8 @@ panelAnnouncementsFunctions.ResumeLayout(false); tpComplaints.ResumeLayout(false); panelComplaintFunctions.ResumeLayout(false); + tpEvents.ResumeLayout(false); + panel1.ResumeLayout(false); ResumeLayout(false); PerformLayout(); } @@ -362,5 +436,11 @@ private Button btnViewComplaint; private Button btnEditComplaint; private Button btnLogout; + private Panel panel1; + private Button btnNewEvent; + private Button btnDeleteEvent; + private Button btnViewEvent; + private Button btnEditEvent; + private ListBox lbEvents; } } \ No newline at end of file diff --git a/StudentHouseDashboard/WinForms/Dashboard.cs b/StudentHouseDashboard/WinForms/Dashboard.cs index edf60b9..8c15d25 100644 --- a/StudentHouseDashboard/WinForms/Dashboard.cs +++ b/StudentHouseDashboard/WinForms/Dashboard.cs @@ -129,6 +129,12 @@ namespace WinForms { lbComplaints.Items.Add(complaint); } + EventManager eventManager = new EventManager(new EventRepository()); + lbEvents.Items.Clear(); + foreach (Event @event in eventManager.GetAllEvents()) + { + lbEvents.Items.Add(@event); + } } private void Dashboard_FormClosed(object sender, FormClosedEventArgs e) @@ -244,5 +250,59 @@ namespace WinForms Close(); } } + + private void btnNewEvent_Click(object sender, EventArgs e) + { + EventForm eventForm = new EventForm(null, false, user); + eventForm.ShowDialog(); + RefreshLists(); + } + + private void btnDeleteEvent_Click(object sender, EventArgs e) + { + if (lbEvents.SelectedIndex == -1) + { + MessageBox.Show("Please select an item from the list"); + } + else + { + Event currentEvent = (Event)lbEvents.SelectedItem; + if (MessageBox.Show($"Are you sure you want to delete\n{currentEvent.Title}\nCreated at {currentEvent.PublishDate.ToString("g")} by {currentEvent.Author.Name}", + "Delete announcement", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + EventManager eventManager = new EventManager(new EventRepository()); + eventManager.DeleteEvent(currentEvent.ID); + } + RefreshLists(); + } + } + + private void btnEditEvent_Click(object sender, EventArgs e) + { + if (lbEvents.SelectedIndex == -1) + { + MessageBox.Show("Please select an item from the list"); + } + else + { + EventForm eventForm = new EventForm((Event)lbEvents.SelectedItem, false, user); + eventForm.ShowDialog(); + RefreshLists(); + } + } + + private void btnViewEvent_Click(object sender, EventArgs e) + { + if (lbEvents.SelectedIndex == -1) + { + MessageBox.Show("Please select an item from the list"); + } + else + { + EventForm eventForm = new EventForm((Event)lbEvents.SelectedItem, true, user); + eventForm.ShowDialog(); + RefreshLists(); + } + } } } diff --git a/StudentHouseDashboard/WinForms/EventForm.Designer.cs b/StudentHouseDashboard/WinForms/EventForm.Designer.cs new file mode 100644 index 0000000..d8f53eb --- /dev/null +++ b/StudentHouseDashboard/WinForms/EventForm.Designer.cs @@ -0,0 +1,189 @@ +namespace WinForms +{ + partial class EventForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + lblTitle = new Label(); + tbTitle = new TextBox(); + lblDescription = new Label(); + tbDescription = new TextBox(); + lblPublishDate = new Label(); + btnSave = new Button(); + dtpPublishDate = new DateTimePicker(); + lblAuthor = new Label(); + lblStart = new Label(); + dtpStartDate = new DateTimePicker(); + lblEnd = new Label(); + dtpEndDate = new DateTimePicker(); + SuspendLayout(); + // + // lblTitle + // + lblTitle.AutoSize = true; + lblTitle.Location = new Point(12, 9); + lblTitle.Name = "lblTitle"; + lblTitle.Size = new Size(32, 15); + lblTitle.TabIndex = 0; + lblTitle.Text = "Title:"; + // + // tbTitle + // + tbTitle.Location = new Point(94, 6); + tbTitle.Name = "tbTitle"; + tbTitle.Size = new Size(405, 23); + tbTitle.TabIndex = 1; + // + // lblDescription + // + lblDescription.AutoSize = true; + lblDescription.Location = new Point(12, 38); + lblDescription.Name = "lblDescription"; + lblDescription.Size = new Size(70, 15); + lblDescription.TabIndex = 2; + lblDescription.Text = "Description:"; + // + // tbDescription + // + tbDescription.Location = new Point(94, 35); + tbDescription.Multiline = true; + tbDescription.Name = "tbDescription"; + tbDescription.Size = new Size(405, 112); + tbDescription.TabIndex = 3; + // + // lblPublishDate + // + lblPublishDate.AutoSize = true; + lblPublishDate.Location = new Point(12, 159); + lblPublishDate.Name = "lblPublishDate"; + lblPublishDate.Size = new Size(75, 15); + lblPublishDate.TabIndex = 4; + lblPublishDate.Text = "Publish date:"; + // + // btnSave + // + btnSave.Location = new Point(424, 212); + btnSave.Name = "btnSave"; + btnSave.Size = new Size(75, 23); + btnSave.TabIndex = 6; + btnSave.Text = "Save changes"; + btnSave.UseVisualStyleBackColor = true; + btnSave.Click += btnSave_Click; + // + // dtpPublishDate + // + dtpPublishDate.CustomFormat = "dd-MM-yyyy hh:mm"; + dtpPublishDate.Format = DateTimePickerFormat.Custom; + dtpPublishDate.Location = new Point(94, 153); + dtpPublishDate.Name = "dtpPublishDate"; + dtpPublishDate.Size = new Size(141, 23); + dtpPublishDate.TabIndex = 9; + // + // lblAuthor + // + lblAuthor.AutoSize = true; + lblAuthor.Location = new Point(241, 159); + lblAuthor.Name = "lblAuthor"; + lblAuthor.Size = new Size(70, 15); + lblAuthor.TabIndex = 10; + lblAuthor.Text = "Created by: "; + // + // lblStart + // + lblStart.AutoSize = true; + lblStart.Location = new Point(12, 188); + lblStart.Name = "lblStart"; + lblStart.Size = new Size(60, 15); + lblStart.TabIndex = 11; + lblStart.Text = "Start date:"; + // + // dtpStartDate + // + dtpStartDate.CustomFormat = "dd-MM-yyyy hh:mm"; + dtpStartDate.Format = DateTimePickerFormat.Custom; + dtpStartDate.Location = new Point(94, 182); + dtpStartDate.Name = "dtpStartDate"; + dtpStartDate.Size = new Size(141, 23); + dtpStartDate.TabIndex = 12; + // + // lblEnd + // + lblEnd.AutoSize = true; + lblEnd.Location = new Point(241, 188); + lblEnd.Name = "lblEnd"; + lblEnd.Size = new Size(56, 15); + lblEnd.TabIndex = 13; + lblEnd.Text = "End date:"; + // + // dtpEndDate + // + dtpEndDate.CustomFormat = "dd-MM-yyyy hh:mm"; + dtpEndDate.Format = DateTimePickerFormat.Custom; + dtpEndDate.Location = new Point(303, 183); + dtpEndDate.Name = "dtpEndDate"; + dtpEndDate.Size = new Size(141, 23); + dtpEndDate.TabIndex = 14; + // + // EventForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(511, 246); + Controls.Add(dtpEndDate); + Controls.Add(lblEnd); + Controls.Add(dtpStartDate); + Controls.Add(lblStart); + Controls.Add(lblAuthor); + Controls.Add(dtpPublishDate); + Controls.Add(btnSave); + Controls.Add(lblPublishDate); + Controls.Add(tbDescription); + Controls.Add(lblDescription); + Controls.Add(tbTitle); + Controls.Add(lblTitle); + Name = "EventForm"; + Text = "Event"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label lblTitle; + private TextBox tbTitle; + private Label lblDescription; + private TextBox tbDescription; + private Label lblPublishDate; + private Button btnSave; + private DateTimePicker dtpPublishDate; + private Label lblAuthor; + private Label lblStart; + private DateTimePicker dtpStartDate; + private Label lblEnd; + private DateTimePicker dtpEndDate; + } +} \ No newline at end of file diff --git a/StudentHouseDashboard/WinForms/EventForm.cs b/StudentHouseDashboard/WinForms/EventForm.cs new file mode 100644 index 0000000..2bca789 --- /dev/null +++ b/StudentHouseDashboard/WinForms/EventForm.cs @@ -0,0 +1,69 @@ +using Data; +using Logic; +using Models; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace WinForms +{ + public partial class EventForm : Form + { + Event @event; + User currentUser; + public EventForm(Event? @event, bool readOnly, User currentUser) + { + InitializeComponent(); + this.@event = @event; + this.currentUser = currentUser; + + dtpPublishDate.Enabled = false; + if (readOnly) + { + btnSave.Enabled = false; + tbTitle.Enabled = false; + tbDescription.Enabled = false; + dtpStartDate.Enabled = false; + dtpEndDate.Enabled = false; + } + if (@event != null) + { + tbTitle.Text = @event.Title; + lblAuthor.Text = $"Created by: {@event.Author.Name}"; + tbDescription.Text = @event.Description; + dtpPublishDate.Value = @event.PublishDate; + dtpStartDate.Value = @event.EndDate; + } + if (currentUser != null) + { + lblAuthor.Text = $"Created by: {currentUser.Name}"; + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + EventManager eventManager = new EventManager(new EventRepository()); + if (string.IsNullOrEmpty(tbTitle.Text)) + { + MessageBox.Show("Please enter a title"); + return; + } + + if (this.@event == null) + { + eventManager.CreateEvent(tbTitle.Text, tbDescription.Text, currentUser, dtpPublishDate.Value, dtpStartDate.Value, dtpEndDate.Value); + } + else + { + eventManager.UpdateEvent(@event.ID, tbTitle.Text, tbDescription.Text, dtpStartDate.Value, dtpEndDate.Value); + } + this.DialogResult = DialogResult.OK; + } + } +} diff --git a/StudentHouseDashboard/WinForms/EventForm.resx b/StudentHouseDashboard/WinForms/EventForm.resx new file mode 100644 index 0000000..a395bff --- /dev/null +++ b/StudentHouseDashboard/WinForms/EventForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/StudentHouseDashboard/WinForms/WinForms.csproj b/StudentHouseDashboard/WinForms/WinForms.csproj index b78d006..dc340a6 100644 --- a/StudentHouseDashboard/WinForms/WinForms.csproj +++ b/StudentHouseDashboard/WinForms/WinForms.csproj @@ -16,6 +16,9 @@ + + Form + Form diff --git a/docs/dbdiagram.png b/docs/dbdiagram.png index 47b23f52d988569bdbd76f171a08c00a75a0371e..42151ddd45d82e66a888c9df68c6b257270fc42f 100644 GIT binary patch literal 22876 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 %erg8aooP&PE484XDrbSN9Bbs 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 ShnA{A9m$I+Ur{T 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 diff --git a/table.sql b/table.sql index 35da05c..66a6bf4 100644 --- a/table.sql +++ b/table.sql @@ -81,4 +81,15 @@ CREATE TABLE ComplaintsComments ( ComplaintID INT FOREIGN KEY REFERENCES Complaints(ID) NOT NULL, CommentID INT FOREIGN KEY REFERENCES Comments(ID) NOT NULL ) +GO + +CREATE TABLE Events ( + ID INT PRIMARY KEY IDENTITY NOT NULL, + [Author] INT FOREIGN KEY REFERENCES Users(ID) NOT NULL, + [Description] NVARCHAR(MAX), + [Title] NVARCHAR(255) NOT NULL, + [PublishDate] DATETIME NOT NULL, + [StartDate] DATETIME NOT NULL, + [EndDate] DATETIME NOT NULL +) GO \ No newline at end of file