Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:start [2010/06/10 16:01] ztb2010 utworzono |
pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:start [2019/06/27 15:50] (aktualna) |
====== Opis aplikacji ====== | ====== Opis aplikacji ====== |
| |
**Aplikacja będzie miała za zadanie katalogować i zarządzać szkoleniami BHP, a ponadto móc generować raporty z bieżącego szkolenia jak i ze szkoleń w historii. Docelowym użytkownikiem aplikacji będzie pojedynczy, zewnętrzny szkoleniowiec, prowadzący szkolenia w pewnych zakładach pracy i mający pod opieką pewną grupę pracowników dla których konieczne są szkolenia, zarówno jednorazowe jak i okresowe.** | **Aplikacja będzie miała za zadanie katalogować i zarządzać szkoleniami BHP, a ponadto móc generować raporty z bieżącego szkolenia jak i ze szkoleń w historii. Docelowym użytkownikiem aplikacji będzie pojedynczy, zewnętrzny szkoleniowiec prowadzący szkolenia w pewnych zakładach pracy i mający pod opieką pewną grupę pracowników dla których konieczne są szkolenia, zarówno jednorazowe jak i okresowe.** |
| |
===== Opis funkcjonalny ===== | ===== Opis funkcjonalny ===== |
* Użycie funkcji CLR (implementowanych przy użyciu C# i .NET Framework) wewnątrz bazy danych. Funkcje mogłyby zapewnić integralność informacji o plikach, przechowywanych w bazie z ich fizyczną reprezentacją na dysku na poziomie mechanizmów samej bazy. | * Użycie funkcji CLR (implementowanych przy użyciu C# i .NET Framework) wewnątrz bazy danych. Funkcje mogłyby zapewnić integralność informacji o plikach, przechowywanych w bazie z ich fizyczną reprezentacją na dysku na poziomie mechanizmów samej bazy. |
* Użycie biblioteki Open XML SDK 2.0 dającej możliwość manipulacją plikami formatu OpenXML w celu generowania elastycznych raportów na podstawie wcześniej przygotowywanych, standardowych i łatwych w tworzeniu dokumentów pakietu MS Office 2007 lub OpenOffice. | * Użycie biblioteki Open XML SDK 2.0 dającej możliwość manipulacją plikami formatu OpenXML w celu generowania elastycznych raportów na podstawie wcześniej przygotowywanych, standardowych i łatwych w tworzeniu dokumentów pakietu MS Office 2007 lub OpenOffice. |
| \\ |
====== Projekt bazy danych ====== | ====== Projekt bazy danych ====== |
| |
Baza danych będzie implementowana jako darmowa baza SQLExpress, która jest oparta na komercyjnym SZBD MS SQL Server 2008 R2. | Baza danych będzie implementowana jako darmowa baza SQLExpress, która jest oparta na komercyjnym SZBD MS SQL Server 2008 R2. |
| |
===== Diagram ===== | ===== Tabele ===== |
| |
{{:pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:database_diagram.gif|}} | {{:pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:database_diagram.gif|}} |
| |
| \\ |
| |
| ===== Wyzwalacze ===== |
| Implementacja dodatkowych wyzwalaczy była konieczna ze względu na to, że MS SQL Server nie dopuszcza definiowania kluczy obcych, które tworzyły by w bazie zapętlone wywołania //ON DELETE ACTION// lub //ON UPDATE ACTION//. |
| |
| ==== Wyzwalacze dla tabeli Template ==== |
| |
| Wyzwalacz utrzymuje więzy integralności z innymi tabelami w przypadku usuwania danych. |
| <code> |
| CREATE TRIGGER [dbo].[ForDeleteTemplateTrigger] |
| ON [dbo].[Template] |
| FOR DELETE |
| AS |
| -- aktualizacja tabeli Training |
| |
| UPDATE dbo.Training |
| SET ProtocolTemplateId = NULL |
| WHERE ProtocolTemplateId IN (SELECT Id FROM deleted) |
| |
| UPDATE dbo.Training |
| SET CertificateTemplateId = NULL |
| WHERE CertificateTemplateId IN (SELECT Id FROM deleted) |
| |
| -- aktualizacja tabeli TrainingCategory |
| |
| UPDATE dbo.TrainingCategory |
| SET ProtocolTemplateId = NULL |
| WHERE ProtocolTemplateId IN (SELECT Id FROM deleted) |
| |
| UPDATE dbo.TrainingCategory |
| SET CertificateTemplateId = NULL |
| WHERE CertificateTemplateId IN (SELECT Id FROM deleted) |
| |
| GO |
| </code> |
| \\ |
| Wyzwalacz utrzymuje więzy integralności z innymi tabelami w przypadku modyfikowania klucza głównego. |
| <code> |
| -- Utrzymuje więzy integralności innych tabel z tabelą Template w przypadku modyfikowania klucza głównego. |
| CREATE TRIGGER [dbo].[ForUpdateTemplateTrigger] |
| ON [dbo].[Template] |
| FOR UPDATE |
| AS |
| -- aktualizacja tabel TrainingCategory i Training |
| |
| IF UPDATE(Id) |
| BEGIN |
| DECLARE @insertedId uniqueidentifier, @deletedId uniqueidentifier |
| |
| DECLARE ForUpdateInsertedRowsCursor CURSOR FOR |
| SELECT Id FROM inserted |
| DECLARE ForUpdateDeletedRowsCursor CURSOR FOR |
| SELECT Id FROM deleted |
| |
| OPEN ForUpdateInsertedRowsCursor |
| OPEN ForUpdateDeletedRowsCursor |
| |
| FETCH NEXT FROM ForUpdateInsertedRowsCursor |
| INTO @insertedId |
| FETCH NEXT FROM ForUpdateDeletedRowsCursor |
| INTO @deletedId |
| WHILE @@FETCH_STATUS = 0 |
| BEGIN |
| |
| -- aktualizacja tabeli TrainingCategory |
| |
| UPDATE dbo.TrainingCategory |
| SET ProtocolTemplateId = @insertedId |
| WHERE ProtocolTemplateId = @deletedId |
| |
| UPDATE dbo.TrainingCategory |
| SET CertificateTemplateId = @insertedId |
| WHERE CertificateTemplateId = @deletedId |
| |
| -- aktualizacja tabeli Training |
| |
| UPDATE dbo.Training |
| SET ProtocolTemplateId = @insertedId |
| WHERE ProtocolTemplateId = @deletedId |
| |
| UPDATE dbo.Training |
| SET CertificateTemplateId = @insertedId |
| WHERE CertificateTemplateId = @deletedId |
| |
| -- wczytanie kolejnego rekordu |
| |
| FETCH NEXT FROM ForUpdateInsertedRowsCursor |
| INTO @insertedId |
| FETCH NEXT FROM ForUpdateDeletedRowsCursor |
| INTO @deletedId |
| END |
| |
| CLOSE ForUpdateInsertedRowsCursor |
| CLOSE ForUpdateDeletedRowsCursor |
| DEALLOCATE ForUpdateInsertedRowsCursor |
| DEALLOCATE ForUpdateDeletedRowsCursor |
| END |
| </code> |
| |
| ==== Wyzwalacze dla tabeli TrainingCategory ==== |
| |
| Wyzwalacz utrzymuje więzy integralności z innymi tabelami w przypadku usuwania danych. |
| <code> |
| CREATE TRIGGER [dbo].[DeleteTrainingCategoryTrigger] |
| ON [dbo].[TrainingCategory] |
| FOR DELETE |
| AS |
| -- aktualizacja tabeli Training |
| |
| UPDATE dbo.Training |
| SET TrainingCategoryId = NULL |
| WHERE TrainingCategoryId IN (SELECT Id FROM deleted) |
| GO |
| </code> |
| \\ |
| Wyzwalacz utrzymuje więzy integralności z innymi tabelami w przypadku modyfikowania klucza głównego. |
| <code> |
| CREATE TRIGGER [dbo].[UpdateTrainingCategoryTrigger] |
| ON [dbo].[TrainingCategory] |
| FOR UPDATE |
| AS |
| -- aktualizacja tabeli Training |
| |
| IF UPDATE(Id) |
| BEGIN |
| DECLARE @insertedId uniqueidentifier, @deletedId uniqueidentifier |
| |
| DECLARE InsertedRowsCursor CURSOR FOR |
| SELECT Id FROM inserted |
| DECLARE DeletedRowsCursor CURSOR FOR |
| SELECT Id FROM deleted |
| |
| OPEN InsertedRowsCursor |
| OPEN DeletedRowsCursor |
| |
| FETCH NEXT FROM InsertedRowsCursor |
| INTO @insertedId |
| FETCH NEXT FROM DeletedRowsCursor |
| INTO @deletedId |
| WHILE @@FETCH_STATUS = 0 |
| BEGIN |
| UPDATE dbo.Training |
| SET TrainingCategoryId = @insertedId |
| WHERE TrainingCategoryId = @deletedId |
| |
| FETCH NEXT FROM InsertedRowsCursor |
| INTO @insertedId |
| FETCH NEXT FROM DeletedRowsCursor |
| INTO @deletedId |
| END |
| |
| CLOSE InsertedRowsCursor |
| CLOSE DeletedRowsCursor |
| DEALLOCATE InsertedRowsCursor |
| DEALLOCATE DeletedRowsCursor |
| END |
| </code> |
| |
| ===== Widoki ===== |
| |
| ==== Widok zakładu pracy ==== |
| |
| Widok umożliwia wybranie istotnych dla użytkownika informacji dla danego zakładu pracy. |
| |
| === Diagram === |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:companymainview.gif|}} |
| |
| === Skrypt === |
| |
| <code> |
| CREATE VIEW [dbo].[TrainingCategoryView] |
| AS |
| SELECT dbo.TrainingCategory.Id, dbo.TrainingCategory.Name, dbo.TrainingCategory.ExpiryTime, dbo.TrainingCategory.Description, dbo.TrainingCategory.LastNumber, |
| ProtocolTemplate.Name AS ProtocolName, CertificateTemplate.Name AS CertificateName, ProtocolTemplate.Id AS ProtocolId, |
| CertificateTemplate.Id AS CertificateId |
| FROM dbo.Template AS CertificateTemplate RIGHT OUTER JOIN |
| dbo.TrainingCategory ON CertificateTemplate.Id = dbo.TrainingCategory.CertificateTemplateId LEFT OUTER JOIN |
| dbo.Template AS ProtocolTemplate ON dbo.TrainingCategory.ProtocolTemplateId = ProtocolTemplate.Id |
| </code> |
| |
| ==== Widok pracownika ==== |
| |
| Widok grupuje informacje na temat pracownika, jego zakładu pracy oraz aktualnie ważnego szkolenia. |
| |
| === Diagram === |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:employeemainview.gif|}} |
| |
| === Skrypt === |
| |
| <code> |
| CREATE VIEW [dbo].[EmployeeDetailsView] |
| AS |
| SELECT dbo.Employee.Surname, dbo.Employee.Forename, dbo.Employee.Street, dbo.Employee.BuildingNumber, dbo.Employee.FlatNumber, dbo.Employee.City, |
| dbo.Employee.PostalCode, dbo.Employee.Post, dbo.Employee.Phone, dbo.Employee.Email, dbo.Employee.BirthDate, dbo.Employee.BirthPlace, |
| dbo.Employee.Position, dbo.Employee.CheckupExpiryDate, dbo.Employee.Id, dbo.Company.Name, dbo.Employee.CompanyId, dbo.Training.Number, |
| dbo.Training.TrainingDate, dbo.Training.ExpiryDate, dbo.TrainingCategory.Name AS CategoryName |
| FROM dbo.TrainingCategory RIGHT OUTER JOIN |
| dbo.Training ON dbo.TrainingCategory.Id = dbo.Training.TrainingCategoryId RIGHT OUTER JOIN |
| dbo.Company INNER JOIN |
| dbo.Employee ON dbo.Company.Id = dbo.Employee.CompanyId ON dbo.Training.Id = dbo.Employee.CurrentTrainingId |
| </code> |
| |
| ==== Widok kategorii szkoleń ==== |
| |
| Widok grupuje informacje na temat szkoleń i przypisanych raportów. |
| |
| === Diagram === |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:trainingcategoryview.gif|}} |
| |
| === Skrypt === |
| |
| <code> |
| CREATE VIEW [dbo].[TrainingCategoryView] |
| AS |
| SELECT dbo.TrainingCategory.Id, dbo.TrainingCategory.Name, dbo.TrainingCategory.ExpiryTime, dbo.TrainingCategory.Description, dbo.TrainingCategory.LastNumber, |
| ProtocolTemplate.Name AS ProtocolName, CertificateTemplate.Name AS CertificateName, ProtocolTemplate.Id AS ProtocolId, |
| CertificateTemplate.Id AS CertificateId |
| FROM dbo.Template AS CertificateTemplate RIGHT OUTER JOIN |
| dbo.TrainingCategory ON CertificateTemplate.Id = dbo.TrainingCategory.CertificateTemplateId LEFT OUTER JOIN |
| dbo.Template AS ProtocolTemplate ON dbo.TrainingCategory.ProtocolTemplateId = ProtocolTemplate.Id |
| </code> |
| |
| |
| ==== Widok historii szkoleń ==== |
| |
| Widok grupuje informacje na temat szkoleń, ich kategorii oraz przypisanych raportów. |
| |
| === Diagram === |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:traininghistoryview.gif|}} |
| |
| === Skrypt === |
| |
| <code> |
| CREATE VIEW [dbo].[TrainingHistoryView] |
| AS |
| SELECT dbo.Training.Id, dbo.Training.Number, dbo.Training.TrainingDate, dbo.Training.ExpiryDate, dbo.Training.Description, dbo.TrainingCategory.Name AS CategoryName, |
| ProtocolTemplate.Name AS ProtocolName, CertificateTemplate.Name AS CertificateName, ProtocolTemplate.Id AS ProtocolId, CertificateTemplate.Id AS CertificateId, |
| ProtocolTemplate.FileName AS ProtocolFileName, CertificateTemplate.FileName AS CertificateFileName |
| FROM dbo.Template AS ProtocolTemplate RIGHT OUTER JOIN |
| dbo.Training ON ProtocolTemplate.Id = dbo.Training.ProtocolTemplateId LEFT OUTER JOIN |
| dbo.TrainingCategory ON dbo.Training.TrainingCategoryId = dbo.TrainingCategory.Id LEFT OUTER JOIN |
| dbo.Template AS CertificateTemplate ON dbo.Training.CertificateTemplateId = CertificateTemplate.Id |
| </code> |
| |
| \\ |
| ===== Funkcje ===== |
| |
| ==== IsTemplateUsing ==== |
| |
| Funkcja sprawdza czy dany plik szablonu jest gdziekolwiek wykorzystywany w bazie. Funkcja umożliwi wielokrotne wykorzystywanie tego samego pliku i jednocześnie automatyczne jego usuwanie, jeżeli nie będzie już potrzebny. |
| |
| === Skrypt === |
| |
| <code> |
| CREATE FUNCTION [dbo].[IsTempleteUsing] |
| ( |
| @templateIdParam uniqueidentifier |
| ) |
| RETURNS BIT |
| AS |
| BEGIN |
| IF EXISTS (SELECT Id FROM TrainingCategory WHERE ProtocolTemplateId = @templateIdParam) |
| RETURN 1 |
| |
| IF EXISTS (SELECT Id FROM TrainingCategory WHERE CertificateTemplateId = @templateIdParam) |
| RETURN 1 |
| |
| IF EXISTS (SELECT Id FROM Training WHERE ProtocolTemplateId = @templateIdParam) |
| RETURN 1 |
| |
| IF EXISTS (SELECT Id FROM Training WHERE CertificateTemplateId = @templateIdParam) |
| RETURN 1 |
| |
| RETURN 0 |
| END |
| </code> |
| |
| \\ |
| ===== Procedury ===== |
| |
| ==== SelectTrainingsByEmployeeId ==== |
| |
| Procedura umożliwia wybranie rekordów wszystkich szkoleń w których uczestniczył zadany pracownik. |
| |
| === Skrypt === |
| |
| <code> |
| CREATE PROCEDURE [dbo].[SelectTrainingsByEmployeeId] |
| @employeeIdParam uniqueidentifier |
| AS |
| SET NOCOUNT ON; |
| SELECT * |
| FROM dbo.TrainingHistoryView |
| WHERE (Id IN (SELECT TrainingId FROM dbo.EmployeeTraining WHERE (EmployeeId = @employeeIdParam))); |
| RETURN |
| </code> |
| |
| ==== SelectEmployeesByTrainingId ==== |
| |
| Procedura umożliwia wybranie wszystkich rekordów pracowników, którzy uczestniczyli w zadanym szkoleniu. |
| |
| === Skrypt === |
| |
| <code> |
| CREATE PROCEDURE [dbo].[SelectEmployeesByTrainingId] |
| @trainingIdParam uniqueidentifier |
| AS |
| SET NOCOUNT ON; |
| SELECT EmployeeDetailsView.Surname, EmployeeDetailsView.Forename, EmployeeDetailsView.Street, EmployeeDetailsView.BuildingNumber, |
| EmployeeDetailsView.FlatNumber, EmployeeDetailsView.City, EmployeeDetailsView.PostalCode, EmployeeDetailsView.Post, EmployeeDetailsView.Phone, |
| EmployeeDetailsView.Email, EmployeeDetailsView.BirthDate, EmployeeDetailsView.BirthPlace, EmployeeDetailsView.Position, |
| EmployeeDetailsView.CheckupExpiryDate, EmployeeDetailsView.Id, EmployeeDetailsView.Name, EmployeeDetailsView.CompanyId, EmployeeDetailsView.Number, |
| EmployeeDetailsView.TrainingDate, EmployeeDetailsView.ExpiryDate, EmployeeDetailsView.CategoryName |
| FROM EmployeeTraining INNER JOIN |
| EmployeeDetailsView ON EmployeeTraining.EmployeeId = EmployeeDetailsView.Id |
| WHERE (EmployeeTraining.TrainingId = @trainingIdParam) |
| RETURN |
| </code> |
| \\ |
| ====== Diagram przypadków użycia ====== |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:przypadki_uzycia.gif|}} |
| |
| |
| \\ |
| ====== Diagram klas ====== |
| {{:pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:classdiagram.gif|}} |
| |
| \\ |
| ====== Diagramy sekwencji ====== |
| \\ |
| ===== Przeprowadzenie szkolenia ===== |
| {{:pl:dydaktyka:ztb:2010:projekty:menadzer_szkolen:diagram_sekwencji.gif|}} |
| |