SPIS TREŚCI I. WSTĘP OPIS SYSTEMU... 3 1.1 SCHEMAT MONITORINGU LOSÓW ABSOLWENTÓW NA PRZYKŁADZIE KIERUNKU LEKARSKIE 4 1.2 SCHEMAT MONITORINGU LOSÓW ABSOLWENTÓW DLA WSZYSTKICH REGULOWANYCH KIERUNKÓW MEDYCZNYCH PRZY ZASTOSOWANIU SYSTEMU INFORMATYCZNE AGNITIO... 5 II. INSTRUKCJA OBSŁUGI... 6 2.1 MODUŁ ABSOLWENCI... 6 2.1.1 ROCZNIKI ABSOLWENTÓW PODDAWANE BADANIOM... 6 2.1.2 DODAWANIE KOLEJNE ROCZNIKA ABSOLWENTÓW... 11 2.1.3 ARCHIWUM ROCZNIKÓW... 11 2.2 MODUŁ PRACODAWCY... 12 2.2.1 DODAWANIE PRACODAWCY... 12 2.2.2 EDYTOWANIE LISTY PRACODAWCÓW... 13 2.2.3 BADANIE OPINII PRACODAWCÓW... 13 2.2.4 WYNIKI BADAŃ PRACODAWCÓW... 15 2.3 ANALIZA RYNKOWOŚCI KSZTAŁCENIA... 15 2.3.1 WYNIKI OCENY RYNKOWOŚCI KSZTAŁCENIA... 15 2.4 LOWANIE SIĘ DO SYSTEMU... 16 III. INSTRUKCJA INSTALACJI... 17 2.1 DOMENA I WITRYNA... 17 2.2 BAZA DANYCH... 19 2.2.1 UTWORZENIE BAZY DANYCH ORAZ UŻYTKOWNIKÓW... 19 2.3 PLIKI... 23 IV. ARCHITEKTURA I STRUKTURA BAZ DANYCH... 25 V. SKRYPT KONFIGURACJI BAZY DANYCH... 27 VI. LISTING KODU... 74 2
I. WSTĘP OPIS SYSTEMU Bardzo ważną częścią całego modelu monitoringu losów absolwentów regulowanych kierunków medycznych realizowanego przy współpracy z samorządami zawodowymi lekarzy, lekarzy-dentystóww, pielęgniarek i położnych jest system informatyczny (zwany dalej Systemem Agnitio), który wspomaga przepływ oraz gromadzenie informacje a także automatyzuje analizę uzyskiwanych danych. Zgodnie z zaplanowaną koncepcją innowacyjnego projektu, badania losów absolwentów są realizowane na 2 płaszczyznach poprzez: zaimportowanie danych pochodzących z Okręgowych Izb Lekarskich (w przypadku Lekarzy i lekarzy dentystów) oraz Okręgowych Izb Pielęgniarek i Położnych (w przypadku pielęgniarek i położnych) zautomatyzowane przeprowadzenie badań ankietowych uzupełniających informacje o losach absolwentów pochodzących z branżowych rejestrów medycznych. W celu uzyskania szerszego spektrum wiedzy, System Agnitio zawiera również moduł badania opinii pracodawców zatrudniających ww. absolwentów. Realizacja badań absolwentów ma dokonywać się w trzech czasookresach: w roku zakończenia studiów, 3 lata po ukończeniu studiów, 5 lat po ukończeniu studiów. Dużą pomocą dla osób odpowiedzialnych w uczelniach za monitoring, jest zautomatyzowane zliczanie wyników uzyskanych z ww. 3 źródeł. Oprócz tego system zawiera procedurę oceny rynkowości kierunku kształcenia bazującą na prostych modelach ekonometrycznych wykorzystujących dane pochodzących z ankiet wysłanych do absolwentów. 3
1.1 SCHEMAT MONITORINGU LOSÓW ABSOLWENTÓW NA PRZYKŁADZIE KIERUNKU LEKARSKIE 4
1.2 SCHEMAT MONITORINGU LOSÓW ABSOLWENTÓW DLA WSZYSTKICH REGULOWANYCH KIERUNKÓW MEDYCZNYCH PRZY ZASTOSOWANIU SYSTEMU INFORMATYCZNE AGNITIO 5
II. INSTRUKCJA OBSŁUGI Poniższa instrukcja obsługi Systemu Agnitio ma charakter ogólny. Przedstawia w sposób skrótowy podstawową funkcjonalność aplikacji. Niniejsza drukowana cześć, ma tylko przybliżyć zakres działania systemu, ponieważ szczegółowe procedury poruszania się po nim (krok po kroku) zostały zawarte w szkoleniu elearningowym (d osamokształcenia) zawartym w Zeszycie V (część 5_4). Tam też znalazły się filmy video, które w sposób multimedialny przedstawiają poszczególne etapy realizacji badań losów absolwentów przy użyciu Systemu Agnitio, tworzące swoisty video-instruktaż. 2.1 MODUŁ ABSOLWENCI 2.1.1 ROCZNIKI ABSOLWENTÓW PODDAWANE BADANIOM Strona dostępna z menu: Absolwenci >> Roczniki absolwentów poddawane badaniom umożliwia: Przegląd zarejestrowanych roczników (rok i kierunek) Wysyłanie ankiet do poszczególnych roczników absolwentów Weryfikację wyników ankiet Importowanie danych z systemów zewnętrznych z samorządów zawodowych Analizę wyników zaimportowanych danych z samorządów Weryfikację statusów dla ankiet i importu danych z systemów zewnętrznych PRZEGLĄD ZAREJESTROWANYCH ROCZNIKÓW Wszystkie roczniki absolwentów zarejestrowane w systemie prezentowane są na stronie Roczniki absolwentów poddawane badaniom oraz Archiwum roczników. 6
Na pierwszej z nich widoczne są roczniki z ostatnich pięciu lat, na drugiej wszystkie zarejestrowane raczniki starsze niż pięć lat. Każdy rocznik prezentowany jest w postaci jednego wiersza, gdzie dla danego roku mogą istnieć maksymalnie cztery wiersze: lekarze, lekarze dentyści, pielęgniarki oraz położne. Operacje takie jak wysyłanie ankiet, import danych czy podgląd wyników wykonywane są zawsze w kontekście wybranego rocznika oraz okresu badania. Istnieją trzy okresy badania: Zaraz po zakończeniu studiów 3 lata po zakończeniu studiów 5 lat po zakończeniu studio WYSYŁANIE ANKIET DO POSZCZEGÓLNYCH ROCZNIKÓW ABSOLWENTÓW Po wciśnięciu przycisku Wyślij ankietę na stronie Roczniki absolwentów poddawane badaniom dostępna jest nowa strona umożliwiająca wysłanie zaproszenia do wypełnienia ankiety dla wybranego rocznika i kierunku. Po wciśnięciu przycisku Wyślij ankiety rozsyłane są wiadomości e-mail do wszystkich absolwentów, których adresy e-mail zostały zaimportowane podczas tworzenia rocznika na stronie Dodawanie kolejnego rocznika absolwentów. Na treść wiadomości składa się krótki opis oraz link do strony na której można wypełnić ankietę np.: Szanowna Absolwentko / Szanowny Absolwencie! W imieniu uczelni wyższej którą ostatnio ukończyłeś, zwracamy się z prośbą o chwilę uwagi. Ważne jest dla nas, jak kształtują się Pani/Pana losy zawodowe. Czy otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje okazały się właściwymi i oczekiwanymi przez rynek pracy. Ważna jest dla nas także Pani/Pana opinia na temat sposobu realizowania ukończonych studiów. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania. Wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwenta do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy! Ankieta 7
Po kliknięciu na link Ankieta w przeglądarce internetowej otworzona zostanie strona pod przykładowym adresem: http://localhost:59570/usertest.aspx?m=g&t=7d03d1fe-067f-49a6-9551- 2d9a5677d462&y=9c80ce18-c0ad-4004-bdb5-074659cb1ec7&e=bc644d65-fee1-4d5c-9a89-37e9d824ba65 Ankieta do wypełnienia dostępna będzie do momentu aż nie zostanie wypełniona i zamknięta przez osobę do której kierowane jest badanie ankietowe. Po wypełnieniu należy wcisnąć przycisk Wyślij ankietę w celu przekazania danych do badania. WERYFIKACJĘ WYNIKÓW ANKIET Strona Roczniki absolwentów poddawane badaniom umożliwia zweryfikowanie wypełnionych ankiet. Możliwe jest to po wciśnięciu przycisku Zobacz wyniki. Wyświetlona zostanie wtedy nowa strona Wyniki badań absolwentów prezentująca pytania ankiety oraz zliczająca odpowiedzi na nie. 8
IMPORTOWANIE DANYCH Z SYSTEMÓW ZEWNĘTRZNYCH Z SAMORZĄDÓW ZAWODOWYCH W celu zaimportowania danych z zewnętrznych systemów samorządów zawodowych na stronie Roczniki absolwentów poddawane badaniom należy wcisnąć przycisk Importuj dane w odpowiednim kontekście roku ukończenia studiów, kierunku studiów oraz okresu badania. Wyświetlona zostanie wtedy strona Import danych z samorządu zawodowego na której należy wskazać plik do importu. Importowane są pliki w formacie Microsoft Excel 2007-2013. Pliki te muszą spełniać określone ściśle wymagania co do swojej struktury związane z ilością kolumn, ich kolejnością i nazwami. I tak dla samorządu zawodowego lekarzy i dentystów struktura pliku musi obejmować kolumny: drugie_imie, pesel_lek, data_ur, miejsce_ur, inne_nazwiska, imieojca, imiematki, nip, czl_oil, wojsko, stopien, adres_zam, kod_gus, adres_kor, tytul_zaw, nr_prawa, rodz_prawa, dot_nr_prawa, nr_wpisu, data_wpisu, nr_uchw, data_uchw, numer_ser_prawa, numer_ser_leg, numer_akt, numer_dotakt, symbol_rejonu, nazwa_rejonu, jezyki, swiadczenia, zatrudnienie, miejsce_pracy, funkcje_w_izbie, studia, stop_tyt_nauk, specjalizacje, nr_wpdorej, rodz_prak, wpis_zezwol_nr, wpis_waznosc, zezwol1_nr, zezwol2_nr, adresy_adres, adresy_tel, adresy_dnigodz, adresy_rodzajswiad, adresy_nr_zezw, dziedziny_spec, uchwaly, telefon, rl_lek_uwagi, termin_waznosci, ograniczenia_pwz, obywatelstwo, stan Dla samorządu zawodowego pielęgniarek i położnych struktura pliku musi obejmować kolumny: LP, Nazwa szkoły, Miejscowosc, Tytul zawodowy, Stopien, Data wydania dyplomu, Rok ukończenia szkoły, Data wydania PWZ po raz pierwszy, Specjalizacja, Data ukończenia, Uzyskany stopien naukowy, Dziedzina stopnia naukowego, Data uzyskania stopnia naukowego, Uzyskany tytul naukowy, Dziedzina tytulu naukowego, Data uzyskania tytulu naukowego, Stanowisko, Data zatrudnienia, Data zwolnienia, Skreslenie z rejestru, Data skreslenia z rejestru, Wygaśnięcie PWZ, Data wygaśnięcia 9
ANALIZA WYNIKÓW ZAIMPORTOWANYCH DANYCH Z SAMORZĄDU Po zaimportowaniu danych możliwy jest ich przegląd w wybranym na stronie Roczniki absolwentów poddawane badaniom kontekście. W tym celu należy wcisnąć przycisk Zobacz wyniki w kolumnie Dane z samorządu zawodowego. Wyświetlone zostanie wtedy podsumowanie dotyczące zaimportowanych danych. WERYFIKACJA STATUSÓW DLA ANKIET I IMPORTU DANYCH Z SYSTEMÓW ZEWNĘTRZNYCH Każde badanie rocznika absolwentów posiada status TAK lub NIE oznaczony znacznikami: TAK NIE 10
Status określa czy zostało wykonane zadanie (wysłanie ankiet, import danych z systemów samorządu zawodowego) w wybranym kontekście rocznika, kierunku i okresu. 2.1.2 DODAWANIE KOLEJNE ROCZNIKA ABSOLWENTÓW W celu dodania rocznika absolwentów należy wybrać opcję menu: Absolwenci >> Dodawanie kolejnego rocznika absolwentów a następnie zaznaczyć kierunki występujące w danym roku i wybrać pliki z adresami e-mail do importu. Strona umożliwia dodanie kolejnego rocznika absolwentów oraz zaimportowanie listy adresów e-mail absolwentów danego roku i kierunku. Podczas importu dokonywana jest weryfikacja adresów email pod kątem ich poprawności oraz sprawdzane jest czy nie zostały one już wcześniej zaimportowane. Zaimportowane adresy e-mail wykorzystywane są następnie podczas wysyłania ankiet do absolwentów. Adresy e-mail do importu powinny znajdować się w pliku tekstowym oddzielone od siebie średnikami np.: abs1@abc1.lp;abs2@abc1.lp;abs3@abc1.lp;abs4@abc1.lp; 2.1.3 ARCHIWUM ROCZNIKÓW Strona dostępna z menu: Absolwenci >> Archiwum roczników umożliwia: Przegląd zarejestrowanych roczników archiwalnych (starszych niż 5 lat) Weryfikację wyników ankiet Analizę wyników zaimportowanych danych z samorządu zawodowego Strona posiada podobną strukturę do strony Roczniki absolwentów poddawane badaniom z wyjątkiem przycisków do wysyłania ankiet oraz importu danych. 11
2.2 MODUŁ PRACODAWCY System umożliwia wysyłanie ankiet do pracodawców zatrudniających cztery grupy absolwentów: Lekarzy Lekarzy dentystów Pielęgniarki Położne Wyniki ankiet mogą być następnie poddane analizie. 2.2.1 DODAWANIE PRACODAWCY W celu dodania pracodawcy należy otworzyć stronę Pracodawcy >> Dodawanie pracodawcy Następnie należy podać podstawowe dane dodawanego pracodawcy takie jak: Nazwa Imię osoby odpowiedzialnej za wypełnianie ankiet Funkcja osoby odpowiedzialnej za wypełnianie ankiet Telefon E-mail Zatrudniany personel medyczny (lekarze, lekarze dentyści, pielęgniarki, położne) Następnie pracodawca jest tworzony po wciśnięciu przycisku Dodaj pracodawcę 12
2.2.2 EDYTOWANIE LISTY PRACODAWCÓW W celu edycji danych pracodawcy należy otworzyć stronę Pracodawcy >> Edytowanie listy pracodawców Strona umożliwia edycję wszystkich danych pracodawcy jak też jego usunięcie z systemu. 2.2.3 BADANIE OPINII PRACODAWCÓW Strona dostępna z menu Pracodawcy >> Badanie opinii pracodawców umożliwia wysyłanie ankiet do zdefiniowanych wcześniej pracodawców. Po jej otwarciu należy określić rok za który realizowane jest badanie jak również należy wybrać do których pracodawców wysłane mają być ankiety. Zakres ankietowanych pracodawców określany jest poprzez wybranie odpowiednich kierunków studiów. I tak jeżeli zaznaczone zostaną np. kierunki: lekarze oraz lekarze dentyści, to widomości e-mail z prośbą o wypełnienie ankiety wysłane zostaną do wszystkich pracodawców którzy zatrudniają lekarzy lub dentystów. 13
Jeżeli pracodawca zatrudnia absolwentów z dwóch ww. kierunków, to otrzyma wiadomość e-mail z linkami do dwóch ankiet, a jeśli zatrudnia np. absolwentów tylko z jednego kierunku, to otrzyma link do jednej ankiety. Treść przykładowej wiadomości e-mail wysłanej do pracodawcy zatrudniającego absolwentów z jednego kierunku: Szanowna Pani / Szanowny Panie! Nawiązując do wcześniej przeprowadzonej rozmowy, zwracamy się z prośbą o chwilę uwagi. Chcielibyśmy poznać Pani/Pana opinię na temat sylwetki zawodowej pracujących w Pana/Pani zakładzie pracy, absolwentów regulowanych zawodów medycznych. Czy prezentowane przez Państwa pracowników, a otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje są właściwymi w Pani/Pana ocenie? Ważne są dla nas także Pani/Pana oczekiwania względem treści nauczania realizowanych na naszej uczelni. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania. Wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwentów regulowanych zawodów medycznych do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy! Ankieta Po kliknięciu na link Ankieta w przeglądarce internetowej otworzona zostanie strona pod przykładowym adresem: http://localhost:59570/usertest.aspx?m=e&t=38f77779-3582-4d47-aca2-754f8100f85f&yn=14091&e=7c132e68-a18f-4dd2-bf1e-98d6490b8f78 Ankieta do wypełnienia dostępna będzie do momentu aż nie zostanie wypełniona i zamknięta przez osobę do której kierowane jest badanie ankietowe. Po wypełnieniu należy wcisnąć przycisk Wyślij ankietę w celu przekazania danych do badania. 14
2.2.4 WYNIKI BADAŃ PRACODAWCÓW Strona Wyniki badań pracodawców umożliwia zweryfikowanie wypełnionych ankiet przez pracodawców. Możliwe jest to po wciśnięciu przycisku Zobacz wyniki w wybranym kontekście roku i kierunku studiów. Wyświetlona zostanie wtedy nowa strona prezentująca pytania ankiety oraz zliczająca odpowiedzi na nie. 2.3 ANALIZA RYNKOWOŚCI KSZTAŁCENIA 2.3.1 WYNIKI OCENY RYNKOWOŚCI KSZTAŁCENIA Ocena rynkowości kształcenia dostępna jest na stronie uruchamianej z menu Analiza rynkowości kształcenia >> Wyniki zautomatyzowanej oceny rynkowości kształcenia Analiza dostępna jest w kontekście wybranego kierunku kształcenia oraz roku ukończenia studiów w dwóch okresach badawczych: 3 I 5 lat po ukończeniu studiów (jeżeli dla rocznika możliwe jest wykonanie badania w danym okresie). 15
2.4 LOWANIE SIĘ DO SYSTEMU W celu wypełnienia ankiety nie jest wymagane zalogowanie się do systemu. Jeżeli absolwent lub pracodawca otrzyma wiadomość e-mail z linkiem do ankiety jaką powinien wypełnić, to po wejściu na wskazaną stronę wyświetlona zostanie ankieta w kontekście badanej osoby. Wszystkie inne funkcje systemu poza wypełnieniem ankiet wymagają zalogowania się. Zalogować się można po wybraniu opcji Zaloguj widocznej w nagłówku witryny. Zdefiniowany jest jeden użytkownik zarządzający, który posiada dostęp do wszystkich funkcji systemu. Dane do logowania: Nazwa użytkownika oraz hasło dostarczone zostaną przed administratora systemu. Dane te są konfigurowalne na etapie instalacji witryny i możliwe w późniejszym okresie do aktualizacji. 16
III. INSTRUKCJA INSTALACJI W celu uruchomienia witryny należy dysponować: serwerem Microsoft Internet Information Services (IIS) w wersji 7.5 lub wyższej platformą.net 4.0 zainstalowaną na serwerze bazą danych Microsoft SQL Server (w wersji 2008 lub wyższej) zainstalowaną na serwerze baz danych do którego możliwy jest dostęp z serwera IIS zestawem rozszerzeń Microsoft ASP.NET Ajax zainstalowanym na serwerze IIS zestawem komponentów Microsoft Access Database Engine 2010 Redistributable Środowisko takie można uruchomić indywidualnie lub też skorzystać z ofert istniejących na rynku firm świadczących usługi hostingowe. Poniżej przedstawiono sposób instalacji witryny z wykorzystaniem konta jednej z firm hostingowych. Zaleca się powierzenie poniższych czynności informatykowi posiadającego doświadczenie w przedmiotowym zakresie. 2.1 DOMENA I WITRYNA W pierwszym kroku tworzona jest domena pod jaką dostępna będzie witryna. W celu jej utworzenia w panelu administracyjnym należy przejść do sekcji Domeny, a następnie wybrać opcję Dodaj domenę. Z domeną związana będzie witryna tak, więc można zaznaczyć opcję automatycznego tworzenia witryny po utworzeniu domeny oraz ich powiązanie. 17
Po utworzeniu domeny będzie ona widoczna w sekcji Domeny. Dzięki wybraniu opcji automatycznego tworzenia witryny utworzona zostanie też witryna widoczna w sekcji Witryny. 18
2.2 BAZA DANYCH 2.2.1 UTWORZENIE BAZY DANYCH ORAZ UŻYTKOWNIKÓW Kolejnym krokiem jest utworzenie bazy danych. W przypadku przykładowego konta hostingowego baza danych tworzona jest również poprzez panel administracyjny. W celu tym w sekcji Bazy danych należy wybrać opcję Utwórz bazę danych. Przed jej utworzeniem należy utworzyć dwóch użytkowników, którzy będą wykorzystywani na potrzeby administrowania bazą danych jak i na potrzeby komunikacji witryny z bazą danych. W poniższym przykładzie tworzonych jest dwóch użytkowników: monitos_webuser użytkownik na potrzeby aplikacji, z ograniczonymi prawami operacji na bazie dozwolony jedynie odczyt i zapis monitos_webadmin użytkownik administracyjny z pełnią praw operacji na bazie danych Nie ma konieczności trzymania się nazewnictwa w przypadku nazw użytkowników czy nazw bazy danych. Pamiętać jednak należy, że w przypadku, gdy zostaną utworzeni użytkownicy o innych nazwach należy zmienić wpisy w pliku konfiguracyjnym web.config dla witryny. 19
20
Po utworzeniu użytkowników tworzona jest baza danych z wyborem utworzonych w poprzednim kroku użytkowników jako użytkowników automatycznie przypisanych do bazy. Poniższy zrzut przedstawia utworzoną bazę danych oraz dwóch przypisanych do niej użytkowników. Tak utworzona baza danych zostanie w następnym kroku skonfigurowana przy pomocy skryptów SQL. 21
KONFIGURACJA BAZY DANYCH Konfiguracja bazy danych obejmuje: utworzenie wszystkich obiektów takich jak tabele, więzy i funkcje zdefiniowanie uprawnień dla użytkowników wypełnienie części tabel danymi W celu skonfigurowania bazy uruchomić należy skrypt config.sql Skrypt powinien być uruchomiony w kontekście utworzonej wcześniej bazy. Można to zrobić wykorzystując narzędzie sqlcmd lub po połączeniu się z bazą przy pomocy aplikacji SQL Server Management Studio. Po wykonaniu skryptu baza danych będzie gotowa do pracy. Należy pamiętać, że jeżeli utworzona baza lub jej użytkownicy mają inne nazwy niż podane w tej instrukcji, to należy dokonać odpowiedniej korekty w skrypcie konfiguracyjnym we wszystkich miejscach gdzie wykorzystywane są te nazwy. np. w poniższym fragmencie skryptu skorygować należy nazwy zaznaczone na żółto: [ ] ALTER USER [monitos_webuser] WITH DEFAULT_SCHEMA=[dbo] EXEC sp_droprolemember N'db_owner', N'monitos_webuser' EXEC sp_addrolemember N'db_datareader', N'monitos_webuser' EXEC sp_addrolemember N'db_datawriter', N'monitos_webuser' [ ] 22
2.3 PLIKI W celu zainstalowania plików witryny na serwerze należy do katalogu głównego witryny skopiować całą zawartość katalogu Aplikacja z płyty instalacyjnej. Należy to zrobić w taki sposób aby plik web.config znajdował się w katalogu głównym witryny. W przypadku, gdy zmianie uległy nazwy bazy danych, nazwy użytkowników lub dane konfiguracyjne dostępu do bazy danych czy też adres, nazwa użytkownika oraz hasło do konta email, to zmiany te również należy odzwierciedlić w pliku konfiguracyjnym web.config Obszary wymagające korekty w pliku web.config: <connectionstrings> <add name="connstr" connectionstring="data Source=<db_server>; Initial Catalog=<db_name>;User ID=<user>;Password=<password>" providername="system.data.sqlclient"/> </connectionstrings> <system.net> <mailsettings> 23
<smtp from="<email_from>"> <network defaultcredentials="false" enablessl="true" host="<smtp_host>" password="<password>" port="<port>" username="<user_name>"/> </smtp> </mailsettings> </system.net> Uwaga! Modyfikacje należy wprowadzić zaraz po wgraniu plików na serwer IIS lub jeszcze przed wgraniem gdyż przy pierwszym uruchomieniu witryny powyższe sekcje ulegają szyfrowaniu w celu ich zabezpieczenia przed nieuprawnionym dostępem. 24
IV. ARCHITEKTURA I STRUKTURA DANYCH Serwis utworzony został w oparciu o następujące technologie: Microsoft ASP.NET 4.0 Microsoft.NET Framework 4.0 Microsoft SQL Server 2008 Microsoft ASP.NET Ajax Microsoft Access Database Engine 2010 Internet Information Services 7.5 Windows Server 2008 R2 W modelu tym klienci sieci Web poprzez przeglądarki internetowe komunikują się z aplikacją ASP.NET za pośrednictwem serwera IIS (Internet Information Server) IIS działa w środowisku systemu operacyjnego z rodziny Windows Server. Dodatkowo aplikacja ASP.NET łączy się z serwerem bazy danych Microsoft SQL Server, który gromadzi, udostępnia, przetwarza oraz umożliwia operacje na danych wykorzystywanych przez serwis. Zestaw komponentów Microsoft Access Database Engine umożliwia importowanie danych z plików Microsoft Excel do bazy danych Microsoft SQL Server. Microsoft ASP.NET Ajax umożliwia rozbudowę aplikacji ASP.NET o funkcjonalności związane z interakcją po stronie klienta dając w efekcie bardziej rozbudowany i wygodniejszy interface użytkownika. 25
26 STRUKTURY DANYCH Dictionary Id IdId Dict Code Name TestAnswers Id Position Number Answer Notes Type Score Vals Length TestQuestAnswers Id QuestionId AnswerId TestQuestions Id TestId Position Number Question Notes Scale Tests Id Name Description EmailBody EmailTitle TestUI OrdNo TestType TestUserAnswers Id UserId AnswerId QuestionId Scale AnswerText YearId Year Users Id UserName Name1 Description Phone Email ContactPerson MainActivity UserType EmpTypes YearId GradYears Id Year YearUI FieldId StudyFields Id Code FieldName Description PollHistory Id OperDate TestId YearId Status Description Settings UserProfile BackupPath ClassProfile Id YearId RightType Employment Degree Specialization Practice GradNumber Period Citizenship ProfDetails Id ProfId Type Name Count UserTests Id UserId TestId ModDate SentDate YearId Year
V. SKRYPT KONFIGURACJI BAZY DANYCH USE [monitos_primary] SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON SET ANSI_PADDING ON /* TABLES *******************************************/ CREATE TABLE [dbo].[dictionary]( [Id] [int] IDENTITY(1,1) NOT NULL, [IdId] [int] NULL, [Dict] [varchar](50) NOT NULL, [Code] [varchar](10) NULL, [Name] [varchar](500) NULL, CONSTRAINT [PK_slowniki] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[gradyears]( [Id] [int] IDENTITY(1,1) NOT NULL, [Year] [smallint] NOT NULL, [YearUI] [uniqueidentifier] NOT NULL, [FieldId] [int] NOT NULL, CONSTRAINT [PK_GradYears] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[pollhistory]( [Id] [int] IDENTITY(1,1) NOT NULL, [OperDate] [datetime] NOT NULL, [TestId] [int] NOT NULL, [YearId] [int] NOT NULL, [Status] [varchar](10) NOT NULL, [Description] [varchar](1000) NULL, CONSTRAINT [PK_PollHistory] PRIMARY KEY CLUSTERED 27
( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[profprofile]( [Id] [int] IDENTITY(1,1) NOT NULL, [UserId] [uniqueidentifier] NOT NULL, [RightType] [varchar](10) NULL, [Employment] [varchar](10) NULL, [Workplace] [varchar](10) NULL, [Academic] [varchar](10) NULL, [Practice] [varchar](10) NULL, [Period] [int] NOT NULL, CONSTRAINT [PK_ProfProfile] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[settings]( [UserProfile] [nvarchar](128) NOT NULL, [BackupPath] [varchar](256) NULL ) ON [PRIMARY] CREATE TABLE [dbo].[studyfields]( [Id] [int] IDENTITY(1,1) NOT NULL, [Code] [varchar](1) NOT NULL, [FieldName] [varchar](100) NOT NULL, [Description] [varchar](1000) NULL, CONSTRAINT [PK_StudyFields] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[testanswers]( [Id] [int] IDENTITY(1,1) NOT NULL, [Position] [smallint] NULL, [Number] [varchar](10) NOT NULL, [Answer] [varchar](1000) NOT NULL, [Notes] [varchar](5000) NULL, [Type] [varchar](50) NOT NULL, [Score] [smallint] NOT NULL, [Vals] [varchar](4000) NULL, [Length] [smallint] NULL, 28
CONSTRAINT [PK_TestAnswers] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[testquestanswers]( [Id] [int] IDENTITY(1,1) NOT NULL, [QuestionId] [int] NOT NULL, [AnswerId] [int] NOT NULL, CONSTRAINT [PK_TestQuestAnswers] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [UK_TestQuestAnswers] UNIQUE NONCLUSTERED ( [QuestionId] ASC, [AnswerId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[testquestions]( [Id] [int] IDENTITY(1,1) NOT NULL, [TestId] [int] NOT NULL, [Position] [smallint] NOT NULL, [Number] [varchar](10) NOT NULL, [Question] [varchar](1000) NOT NULL, [Notes] [varchar](5000) NULL, [Scale] [int] NULL, CONSTRAINT [PK_TestQuestions] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[tests]( [Id] [int] IDENTITY(1,1) NOT NULL, [Name] [varchar](200) NOT NULL, [Description] [varchar](2000) NULL, [EmailBody] [varchar](5000) NULL, [EmailTitle] [varchar](200) NULL, [TestUI] [uniqueidentifier] NOT NULL, [OrdNo] [tinyint] NULL, [TestType] [varchar](10) NULL, CONSTRAINT [PK_Tests] PRIMARY KEY CLUSTERED ( [Id] ASC 29
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[testuseranswers]( [Id] [int] IDENTITY(1,1) NOT NULL, [UserId] [uniqueidentifier] NOT NULL, [AnswerId] [int] NOT NULL, [QuestionId] [int] NOT NULL, [Scale] [int] NULL, [AnswerText] [varchar](1000) NULL, [YearId] [int] NULL, [Year] [smallint] NULL, CONSTRAINT [PK_TestUserAnswers] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[users]( [Id] [uniqueidentifier] ROWGUIDCOL NOT NULL, [UserName] [varchar](256) NULL, [Name1] [varchar](200) NULL, [Description] [varchar](1000) NULL, [Phone] [varchar](200) NULL, [Email] [varchar](200) NOT NULL, [ContactPerson] [varchar](100) NULL, [MainActivity] [varchar](1000) NULL, [UserType] [varchar](1) NOT NULL, [EmpTypes] [varchar](10) NULL, [YearId] [int] NULL, CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [UK_Users] UNIQUE NONCLUSTERED ( [UserName] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[classprofile]( [Id] [int] IDENTITY(1,1) NOT NULL, [YearId] [int] NOT NULL, [RightType] [int] NULL, [Employment] [int] NULL, [Degree] [int] NULL, [Specialization] [int] NULL, 30
[Practice] [int] NULL, [GradNumber] [int] NOT NULL, [Period] [int] NOT NULL, [Citizenship] int NOT NULL CONSTRAINT [PK_ClassProfile] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[profdetails]( [Id] [int] IDENTITY(1,1) NOT NULL, [ProfId] [int] NOT NULL, [Type] [nvarchar](10) NOT NULL, [Name] [nvarchar](4000) NOT NULL, [Count] [int] NOT NULL CONSTRAINT [PK_ProfDetails] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[usertests]( [Id] [int] IDENTITY(1,1) NOT NULL, [UserId] [uniqueidentifier] NOT NULL, [TestId] [int] NOT NULL, [ModDate] [datetime] NULL, [SentDate] [datetime] NULL, [YearId] int NULL, [Year] smallint NULL CONSTRAINT [PK_UserTests] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] /* CONSTRAINTS *******************************************/ SET ANSI_PADDING OFF ALTER TABLE [dbo].[dictionary] WITH CHECK ADD CONSTRAINT [FK_slowniki_slowniki] FOREIGN KEY([IdId]) REFERENCES [dbo].[dictionary] ([Id]) ALTER TABLE [dbo].[dictionary] CHECK CONSTRAINT [FK_slowniki_slowniki] 31
ALTER TABLE [dbo].[gradyears] WITH CHECK ADD CONSTRAINT [FK_GradYears_StudyFields] FOREIGN KEY([FieldId]) REFERENCES [dbo].[studyfields] ([Id]) ALTER TABLE [dbo].[gradyears] CHECK CONSTRAINT [FK_GradYears_StudyFields] ALTER TABLE [dbo].[gradyears] ADD CONSTRAINT [DF_GradYears_YearCode] DEFAULT (newid()) FOR [YearUI] ALTER TABLE [dbo].[pollhistory] WITH CHECK ADD CONSTRAINT [FK_PollHistory_GradYears] FOREIGN KEY([YearId]) REFERENCES [dbo].[gradyears] ([Id]) ALTER TABLE [dbo].[pollhistory] CHECK CONSTRAINT [FK_PollHistory_GradYears] ALTER TABLE [dbo].[pollhistory] WITH CHECK ADD CONSTRAINT [FK_PollHistory_Tests] FOREIGN KEY([TestId]) REFERENCES [dbo].[tests] ([Id]) ALTER TABLE [dbo].[pollhistory] CHECK CONSTRAINT [FK_PollHistory_Tests] ALTER TABLE [dbo].[pollhistory] ADD CONSTRAINT [DF_PollHistory_OperDate] DEFAULT (getdate()) FOR [OperDate] ALTER TABLE [dbo].[profprofile] WITH CHECK ADD CONSTRAINT [FK_ProfProfile_Users] FOREIGN KEY([UserId]) REFERENCES [dbo].[users] ([Id]) ALTER TABLE [dbo].[profprofile] CHECK CONSTRAINT [FK_ProfProfile_Users] EXEC sys.sp_addextendedproperty @name=n'ms_description', @value=n'typ odpowiedzi: W - pole wyboru, O - opcja, T - tekst', @level0type=n'schema',@level0name=n'dbo', @level1type=n'table',@level1name=n'testanswers', @level2type=n'column',@level2name=n'type' ALTER TABLE [dbo].[testquestanswers] WITH CHECK ADD CONSTRAINT [FK_TestQuestAnswers_TestAnswers] FOREIGN KEY([AnswerId]) REFERENCES [dbo].[testanswers] ([Id]) ALTER TABLE [dbo].[testquestanswers] CHECK CONSTRAINT [FK_TestQuestAnswers_TestAnswers] 32
ALTER TABLE [dbo].[testquestanswers] WITH CHECK ADD CONSTRAINT [FK_TestQuestAnswers_TestQuestions] FOREIGN KEY([QuestionId]) REFERENCES [dbo].[testquestions] ([Id]) ALTER TABLE [dbo].[testquestanswers] CHECK CONSTRAINT [FK_TestQuestAnswers_TestQuestions] ALTER TABLE [dbo].[testquestions] WITH CHECK ADD CONSTRAINT [FK_TestQuestions_Tests] FOREIGN KEY([TestId]) REFERENCES [dbo].[tests] ([Id]) ALTER TABLE [dbo].[testquestions] CHECK CONSTRAINT [FK_TestQuestions_Tests] ALTER TABLE [dbo].[tests] ADD CONSTRAINT [DF_Tests_TestUI] DEFAULT (newid()) FOR [TestUI] ALTER TABLE [dbo].[testuseranswers] WITH CHECK ADD CONSTRAINT [FK_TestUserAnswers_GradYears] FOREIGN KEY([YearId]) REFERENCES [dbo].[gradyears] ([Id]) ALTER TABLE [dbo].[testuseranswers] CHECK CONSTRAINT [FK_TestUserAnswers_GradYears] ALTER TABLE [dbo].[testuseranswers] WITH CHECK ADD CONSTRAINT [FK_TestUserAnswers_TestAnswers] FOREIGN KEY([AnswerId]) REFERENCES [dbo].[testanswers] ([Id]) ALTER TABLE [dbo].[testuseranswers] CHECK CONSTRAINT [FK_TestUserAnswers_TestAnswers] ALTER TABLE [dbo].[testuseranswers] WITH CHECK ADD CONSTRAINT [FK_TestUserAnswers_TestQuestions] FOREIGN KEY([QuestionId]) REFERENCES [dbo].[testquestions] ([Id]) ALTER TABLE [dbo].[testuseranswers] CHECK CONSTRAINT [FK_TestUserAnswers_TestQuestions] ALTER TABLE [dbo].[testuseranswers] WITH CHECK ADD CONSTRAINT [FK_TestUserAnswers_Users] FOREIGN KEY([UserId]) REFERENCES [dbo].[users] ([Id]) ALTER TABLE [dbo].[testuseranswers] CHECK CONSTRAINT [FK_TestUserAnswers_Users] ALTER TABLE [dbo].[users] WITH CHECK ADD CONSTRAINT [FK_Users_GradYears] FOREIGN KEY([YearId]) REFERENCES [dbo].[gradyears] ([Id]) 33
ALTER TABLE [dbo].[users] CHECK CONSTRAINT [FK_Users_GradYears] ALTER TABLE [dbo].[users] ADD CONSTRAINT [DF_Users_Id] DEFAULT (newid()) FOR [Id] ALTER TABLE [dbo].[classprofile] WITH CHECK ADD CONSTRAINT [FK_ClassProfile_GradYears] FOREIGN KEY([YearId]) REFERENCES [dbo].[gradyears] ([Id]) ALTER TABLE [dbo].[classprofile] CHECK CONSTRAINT [FK_ClassProfile_GradYears] ALTER TABLE [dbo].[profdetails] WITH CHECK ADD CONSTRAINT [FK_ProfDetails_ClassProfile] FOREIGN KEY([ProfId]) REFERENCES [dbo].[classprofile] ([Id]) ALTER TABLE [dbo].[profdetails] CHECK CONSTRAINT [FK_ProfDetails_ClassProfile] ALTER TABLE [dbo].[usertests] WITH CHECK ADD CONSTRAINT [FK_UserTests_Tests] FOREIGN KEY([TestId]) REFERENCES [dbo].[tests] ([Id]) ALTER TABLE [dbo].[usertests] CHECK CONSTRAINT [FK_UserTests_Tests] ALTER TABLE [dbo].[usertests] WITH CHECK ADD CONSTRAINT [FK_UserTests_Users] FOREIGN KEY([UserId]) REFERENCES [dbo].[users] ([Id]) ALTER TABLE [dbo].[usertests] CHECK CONSTRAINT [FK_UserTests_Users] ALTER TABLE [dbo].[usertests] WITH CHECK ADD CONSTRAINT [FK_usertests_gradyears] FOREIGN KEY([YearId]) REFERENCES [dbo].[gradyears] ([Id]) /* INDEXES *********************************************/ CREATE UNIQUE NONCLUSTERED INDEX [UI_ClassProfile] ON [dbo].[classprofile] ( [YearId] ASC, [Period] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] CREATE UNIQUE NONCLUSTERED INDEX [UI_ProfDetails] ON [dbo].[profdetails] 34
( [ProfId] ASC, [Type] ASC, [Name] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] CREATE UNIQUE NONCLUSTERED INDEX [UI_UserTests] ON [dbo].[usertests] ( [UserId] ASC, [TestId] ASC, [YearId] ASC, [Year] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] /* FUNCTIONS *******************************************/ CREATE FUNCTION [dbo].[analysis](@year INT, @mode CHAR, @period INT) RETURNS @tbl TABLE ("No" INT, "Description" VARCHAR(200), "Balance" FLOAT, "Factor1" FLOAT, "Factor2" FLOAT, "Factor3" FLOAT) AS BEGIN DECLARE @testid INT, @questid1 INT, @questid2 INT, @questid3 INT, @ans1 INT, @ans2 INT, @ans3 INT, @ans4 INT, @yearid INT, @ile1 INT, @ile2 INT, @val1 FLOAT, @val2 FLOAT, @val3 FLOAT IF @period = 3 SET @testid = CASE WHEN @mode = 'D' THEN 8 WHEN @mode = 'T' THEN 9 WHEN @mode = 'N' THEN 10 WHEN @mode = 'M' THEN 11 END; ELSE SET @testid = CASE WHEN @mode = 'D' THEN 16 WHEN @mode = 'T' THEN 17 WHEN @mode = 'N' THEN 18 WHEN @mode = 'M' THEN 19 END; SELECT @yearid = gy.id FROM GradYears gy, StudyFields sf WHERE gy.fieldid = sf.id AND sf.code = @mode AND gy.year = @year -- 9. Czy Pani/Pan pracuje w zawodzie? ----------------------------------- SELECT @questid1 = Id FROM TestQuestions 35
WHERE Number = 9 AND TestId = @testid -- Tak SELECT @ans1 = ta.id FROM TestAnswers ta, TestQuestAnswers tqa WHERE ta.id = tqa.answerid AND tqa.questionid = @questid1 AND Number = 1 -- Nie SELECT @ans2 = ta.id FROM TestAnswers ta, TestQuestAnswers tqa WHERE ta.id = tqa.answerid AND tqa.questionid = @questid1 AND Number = 2 -- ile na Tak SELECT @ile1 = COUNT(*) FROM TestUserAnswers WHERE YearId = @yearid AND AnswerId = @ans1 AND QuestionId = @questid1 -- ile na Nie SELECT @ile2 = COUNT(*) FROM TestUserAnswers WHERE YearId = @yearid AND AnswerId = @ans2 AND QuestionId = @questid1 IF @ile1 = 0 AND @ile2 = 0 SET @ile2 = 1 SET @val1 = (CONVERT(FLOAT, @ile1) / CONVERT(FLOAT, @ile1 + @ile2)) --SET @val2 = @val1 --SET @val3 = @val1 INSERT INTO @tbl VALUES (1, 'Odsetek absolwentów, którzy pracują w zawodzie', 0.1, @val1, @val1, @val1) -- 11. Czy posiada Pani/Pan specjalizację? ------------------------------- SELECT @questid2 = Id FROM TestQuestions WHERE Number = 11 AND TestId = @testid -- 13. Czy jest Pani/Pan w trakcie specjalizacji? ------------------------ SELECT @questid3 = Id FROM TestQuestions WHERE Number = 13 AND TestId = @testid SELECT @val1 = ISNULL(CASE wszys WHEN 0 THEN 0 ELSE (CONVERT(FLOAT, spec) / CONVERT(FLOAT, wszys)) END, 0) FROM ( 36
SELECT SUM(zaw) wszys, SUM(CASE WHEN maspec = 1 OR wspec = 1 THEN 1 ELSE 0 END) spec FROM ( SELECT UserId, SUM(zaw) zaw, SUM(maspec) maspec, SUM(wspec) wspec FROM ( SELECT UserId, CASE WHEN QuestionId = @questid1 AND AnswerId = @ans1 THEN 1 ELSE 0 END AS zaw, CASE WHEN QuestionId = @questid2 AND AnswerId = @ans1 THEN 1 ELSE 0 END AS maspec, CASE WHEN QuestionId = @questid3 AND AnswerId = @ans1 THEN 1 ELSE 0 END AS wspec FROM TestUserAnswers WHERE QuestionId in (@questid1, @questid2, @questid3) AND YearId = @yearid ) AS t1 GROUP BY UserId ) AS t2 WHERE zaw = 1 ) AS t3 INSERT INTO @tbl VALUES (2, 'Odsetek absolwentów, którzy rozpoczęli lub posiadają specjalizację', 0.3, @val1, @val1, @val1) -- 10. W jakim czasie po studiach podjęła/ął Pani/Pan pracę w zawodzie? -- SELECT @questid2 = Id FROM TestQuestions WHERE Number = 10 AND TestId = @testid SELECT @ans1 = SUM(ans1), @ans2 = SUM(ans2), @ans3 = SUM(ans3), @ans4 = SUM(ans4) FROM ( SELECT CASE Position WHEN 1 THEN ta.id END ans1, CASE Position WHEN 2 THEN ta.id END ans2, CASE Position WHEN 3 THEN ta.id END ans3, CASE Position WHEN 4 THEN ta.id END ans4 FROM TestAnswers ta, TestQuestAnswers tqa WHERE ta.id = tqa.answerid AND tqa.questionid = @questid2 ) AS t1 SELECT @val1 = ISNULL( CONVERT(FLOAT, m6) / (m6 + m12 + l2 + l3) * 0.25 + CONVERT(FLOAT, m12) / (m6 + m12 + l2 + l3) * 0.75 + CONVERT(FLOAT, l2) / (m6 + m12 + l2 + l3) * 1.5 + CONVERT(FLOAT, l3) / (m6 + m12 + l2 + l3) * 3, 0) FROM ( SELECT SUM(m6) m6, SUM(m12) m12, SUM(l2) l2, SUM(l3) l3 FROM ( SELECT UserId, CASE WHEN AnswerId = @ans1 THEN 1 ELSE 0 END AS m6, CASE WHEN AnswerId = @ans2 THEN 1 ELSE 0 END AS m12, CASE WHEN AnswerId = @ans3 THEN 1 ELSE 0 END AS l2, CASE WHEN AnswerId = @ans4 THEN 1 ELSE 0 END AS l3 FROM TestUserAnswers WHERE QuestionId = @questid2 AND YearId = @yearid ) AS t1 37
) AS t2 IF @val1 = 0 SET @val2 = 0 ELSE SET @val2 = 1 / @val1 * 0.25 INSERT INTO @tbl VALUES (3, 'Średni czas, po jakim absolwent podjął pracę w zawodzie', 0.2, ISNULL(@val1, 0), ISNULL(@val2, 0), ISNULL(@val2, 0)) -- 7. Jak ocenia Pani/Pan swoją sytuację zawodową? ----------------------- SELECT @val1 = ISNULL(AVG(CONVERT(FLOAT, AnswerText)), 0) FROM TestUserAnswers WHERE YearId = @yearid AND QuestionId IN (SELECT Id FROM TestQuestions WHERE Number = 7 AND TestId = @testid) INSERT INTO @tbl VALUES (4, 'Średnia ocena sytuacji zawodowej', 0.3, @val1, @val1 / 5, @val1 / 5) -- 1. W jakim stopniu studia przyczyniły się do spełnienia przez Panią/Pana następujących wymagań pracodawców w zakresie wiedzy? -- 2. W jakim stopniu studia przyczyniły się do zdobycia przez Panią/Pana następujących umiejętności? -- 3. W jakim stopniu studia przyczyniły się do zdobycia przez Panią/Pana następujących kompetencji społecznych? SELECT @val1 = ISNULL(AVG(CONVERT(FLOAT, AnswerText)), 0) FROM TestUserAnswers WHERE YearId = @yearid AND QuestionId IN (SELECT Id FROM TestQuestions WHERE Number IN (1, 2, 3) AND TestId = @testid) INSERT INTO @tbl VALUES (5, 'Średnia ocena stopnia, w jakim studia przyczyniły się do osiągnięcia wymagań KRK przez absolwenta', 0.1, @val1, @val1 / 5, @val1 / 5) INSERT INTO @tbl("description", "Balance", "Factor3") SELECT 'Razem', SUM("Balance"), SUM("Balance" * "Factor3") FROM @tbl RETURN END /* USERS *******************************************/ ALTER USER [monitos_webuser] WITH DEFAULT_SCHEMA=[dbo] EXEC sp_droprolemember N'db_owner', N'monitos_webuser' EXEC sp_addrolemember N'db_datareader', N'monitos_webuser' EXEC sp_addrolemember N'db_datawriter', N'monitos_webuser' 38
/* DICTIONARY *******************************************/ SET IDENTITY_INSERT [Dictionary] ON INSERT INTO [Dictionary]([Id],[Dict],[Code],[Name]) VALUES(156,'OKRES','0','zaraz po ukończeniu ') INSERT INTO [Dictionary]([Id],[Dict],[Code],[Name]) VALUES(157,'OKRES','3','3 lata po') INSERT INTO [Dictionary]([Id],[Dict],[Code],[Name]) VALUES(158,'OKRES','5','5 lat po') SET IDENTITY_INSERT [Dictionary] OFF /* SETTINGS ****************************************/ INSERT INTO [Settings]([UserProfile],[BackupPath]) VALUES('8/60Nin2wgVghaM37z7xsQ==', 'D:\PUM\Backup') /* STUDY FIELDS ************************************/ SET IDENTITY_INSERT [StudyFields] ON INSERT INTO [StudyFields]([Id],[Code],[FieldName]) VALUES(1,'D','Lekarze') INSERT INTO [StudyFields]([Id],[Code],[FieldName]) VALUES(2,'T','Lekarze dentyści') INSERT INTO [StudyFields]([Id],[Code],[FieldName]) VALUES(3,'N','Pielęgniarki') INSERT INTO [StudyFields]([Id],[Code],[FieldName]) VALUES(4,'M','Położne') SET IDENTITY_INSERT [StudyFields] OFF /* TESTS *******************************************/ SET IDENTITY_INSERT Tests ON INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(4, 'Ankieta', 'Środowisko absolwentów (lekarze)', 'Badania środowiska absolwentów w momencie ukończenia studiów', 'Szanowna Absolwentko / Szanowny Absolwencie!<br/><br/>W imieniu uczelni wyższej którą ostatnio ukończyłeś, zwracamy się z prośbą o chwilę uwagi. Ważne jest dla nas, jak kształtują się Pani/Pana losy zawodowe. Czy otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje okazały się właściwymi i oczekiwanymi przez rynek pracy. Ważna jest dla nas także Pani/Pana opinia na temat sposobu realizowania ukończonych studiów. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwenta do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', '76F077E8-D93B-4C2D-91B5-F98554B58A4C', 0, 'GD0') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(5, 'Ankieta', 'Środowisko absolwentów (dentyści)', 'Badania środowiska absolwentów w momencie ukończenia studiów', 'Szanowna Absolwentko / Szanowny Absolwencie!<br/><br/>W imieniu uczelni wyższej którą ostatnio ukończyłeś, zwracamy się z prośbą o chwilę uwagi. Ważne jest dla nas, jak kształtują się Pani/Pana losy zawodowe. Czy otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje okazały się właściwymi i oczekiwanymi przez rynek pracy. Ważna jest dla nas także Pani/Pana opinia na temat sposobu realizowania ukończonych studiów. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwenta do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', 'DCEED29C-7341-4C5D-95C1-B3CCEDA400C2', 0, 'GT0') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(6, 'Ankieta', 'Środowisko absolwentów (pielęgniarki)', 'Badania środowiska absolwentów w momencie ukończenia studiów', 'Szanowna Absolwentko / Szanowny Absolwencie!<br/><br/>W imieniu uczelni wyższej którą ostatnio ukończyłeś, 39
zwracamy się z prośbą o chwilę uwagi. Ważne jest dla nas, jak kształtują się Pani/Pana losy zawodowe. Czy otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje okazały się właściwymi i oczekiwanymi przez rynek pracy. Ważna jest dla nas także Pani/Pana opinia na temat sposobu realizowania ukończonych studiów. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwenta do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', '7D03D1FE-067F-49A6-9551-2D9A5677D462', 0, 'GN0') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(7, 'Ankieta', 'Środowisko absolwentów (położne)', 'Badania środowiska absolwentów w momencie ukończenia studiów', 'Szanowna Absolwentko / Szanowny Absolwencie!<br/><br/>W imieniu uczelni wyższej którą ostatnio ukończyłeś, zwracamy się z prośbą o chwilę uwagi. Ważne jest dla nas, jak kształtują się Pani/Pana losy zawodowe. Czy otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje okazały się właściwymi i oczekiwanymi przez rynek pracy. Ważna jest dla nas także Pani/Pana opinia na temat sposobu realizowania ukończonych studiów. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwenta do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', '5419E623-FEEE-4281-8A5D-5BFFE41E9D14', 0, 'GM0') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(8, 'Ankieta', 'Absolwenci po 3 latach (lekarze)', 'Badania absolwentów po 3 latach', 'Szanowna Absolwentko / Szanowny Absolwencie!<br/><br/>W imieniu uczelni wyższej którą ostatnio ukończyłeś, zwracamy się z prośbą o chwilę uwagi. Ważne jest dla nas, jak kształtują się Pani/Pana losy zawodowe. Czy otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje okazały się właściwymi i oczekiwanymi przez rynek pracy. Ważna jest dla nas także Pani/Pana opinia na temat sposobu realizowania ukończonych studiów. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwenta do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', '9E845ACF-803C-4F9A-8B5F- D341B5233B0C', 0, 'GD3') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(9, 'Ankieta', 'Absolwenci po 3 latach (dentyści)', 'Badania absolwentów po 3 latach', 'Szanowna Absolwentko / Szanowny Absolwencie!<br/><br/>W imieniu uczelni wyższej którą ostatnio ukończyłeś, zwracamy się z prośbą o chwilę uwagi. Ważne jest dla nas, jak kształtują się Pani/Pana losy zawodowe. Czy otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje okazały się właściwymi i oczekiwanymi przez rynek pracy. Ważna jest dla nas także Pani/Pana opinia na temat sposobu realizowania ukończonych studiów. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwenta do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', 'C147309E-3F41-40DD-A8E6-388844C6974F', 0, 'GT3') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(10, 'Ankieta', 'Absolwenci po 3 latach (pilęgniarki)', 'Badania absolwentów po 3 latach', 'Szanowna Absolwentko / Szanowny Absolwencie!<br/><br/>W imieniu uczelni wyższej którą ostatnio ukończyłeś, zwracamy się z prośbą o chwilę uwagi. Ważne jest dla nas, jak kształtują się Pani/Pana losy zawodowe. Czy otrzymane 40
w procesie studiowania: wiedza, umiejętności, kompetencje okazały się właściwymi i oczekiwanymi przez rynek pracy. Ważna jest dla nas także Pani/Pana opinia na temat sposobu realizowania ukończonych studiów. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwenta do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', '201A57D8-A9FE-497C-BC28-18612B4B135B', 0, 'GN3') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(11, 'Ankieta', 'Absolwenci po 3 latach (położne)', 'Badania absolwentów po 3 latach', 'Szanowna Absolwentko / Szanowny Absolwencie!<br/><br/>W imieniu uczelni wyższej którą ostatnio ukończyłeś, zwracamy się z prośbą o chwilę uwagi. Ważne jest dla nas, jak kształtują się Pani/Pana losy zawodowe. Czy otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje okazały się właściwymi i oczekiwanymi przez rynek pracy. Ważna jest dla nas także Pani/Pana opinia na temat sposobu realizowania ukończonych studiów. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwenta do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', '995C2400-941B-4AF2-84D4-9DCAF8E0BDC9', 0, 'GM3') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(12, 'Ankieta', 'Pracodawcy (lekarze)', 'Badanie opinii pracodawców zatrudniających lekarzy', 'Szanowna Pani / Szanowny Panie!<br/><br/>Nawiązując do wcześniej przeprowadzonej rozmowy, zwracamy się z prośbą o chwilę uwagi. Chcielibyśmy poznać Pani/Pana opinię na temat sylwetki zawodowej pracujących w Pana/Pani zakładzie pracy, absolwentów regulowanych zawodów medycznych. Czy prezentowane przez Państwa pracowników, a otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje są właściwymi w Pani/Pana ocenie? Ważne są dla nas także Pani/Pana oczekiwania względem treści nauczania realizowanych na naszej uczelni. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwentów regulowanych zawodów medycznych do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', '38F77779-3582-4D47-ACA2-754F8100F85F', 0, 'ED3') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(13, 'Ankieta', 'Pracodawcy (dentyści)', 'Badanie opinii pracodawców zatrudniających dentystów', 'Szanowna Pani / Szanowny Panie!<br/><br/>Nawiązując do wcześniej przeprowadzonej rozmowy, zwracamy się z prośbą o chwilę uwagi. Chcielibyśmy poznać Pani/Pana opinię na temat sylwetki zawodowej pracujących w Pana/Pani zakładzie pracy, absolwentów regulowanych zawodów medycznych. Czy prezentowane przez Państwa pracowników, a otrzymane w procesie studiowania: wiedza, umiejętności, kompetencje są właściwymi w Pani/Pana ocenie? Ważne są dla nas także Pani/Pana oczekiwania względem treści nauczania realizowanych na naszej uczelni. Dlatego, wysyłając poniższy link, prosimy o przeznaczenie kilku minut w celu udzielenia odpowiedzi na zadane pytania.<br/><br/>wierzymy, że podobnie jak dla nas, również dla Pani/Pana ważne jest, by ciągle doskonalić proces nauczania i dopasowywania sylwetki absolwentów regulowanych zawodów medycznych do aktualnych potrzeb rynkowych. Mamy zatem nadzieję na uzyskanie szczerych opinii, za które już teraz serdecznie dziękujemy!<br/><br/>#url#', '5E86FF9B-0BF0-45A3-8ED2-BC88A133B4A5', 0, 'ET3') INSERT INTO Tests(Id, EmailTitle, Name, Description, EmailBody, TestUI, OrdNo, TestType) VALUES(14, 'Ankieta', 'Pracodawcy (pielęgniarki)', 'Badanie opinii pracodawców zatrudniających pielęgniarki', 'Szanowna Pani / Szanowny Panie!<br/><br/>Nawiązując do wcześniej przeprowadzonej rozmowy, zwracamy się z 41