Stowarzyszenie Sieć Obywatelska – Watchdog Polska od lat prowadzi projekt Pozarządowe Centrum Dostępu do Informacji Publicznej (PC-DIP).
W związku z projektem systemowym „STRAŻNICTWO – profesjonalnie i trwale w interesie publicznym” Sieć zamierza usprawnić funkcjonowanie PC-DIP. Chce stworzyć korpusu służby prawnej dla organizacji strażniczych, zwłaszcza lokalnych.
Dotychczas działalność PC-DIP obecnie opiera się na współdzielonej skrzynce pocztowej na którą spływają zapytania, a następnie są na nie udzielane odpowiedzi w formie zwykłej wiadomości. Zapytań jest sporo. Jak to w skrzynce pocztowej nie ma możliwości stopniowania uprawnień, przeszukiwanie i łączenie wątków jest utrudnione.
Prowadzi do np. utrudnienia w rozbudowie kadry o wolontariuszy, praktykantów, ekspertów, którzy mogliby mieć dostęp do wyselekcjonowanych spraw i przygotowywać projekty pism, ale niedopuszczalne jest, aby mieli wgląd w dane wszystkich klientów.
Nie znaleziono odpowiedniego wolnego oprogramowania. A może istnieje?
Z tego względu postanowiono stworzyć własne oprogramowanie to zapewniające, chociaż idea takiego oprogramowania istnieje w Stowarzyszeniu od dawna.
Spisałem wymagania i opublikowałem je w Bitbucket, za co na moje konto wpłynął przelew 910 PLN ze środków prywatnych. Zaznaczam, bo w tym wypadku nie jest to wyłącznie praca wolontariacka.
Ustalono, że w dalszym ciągu możliwie duża ilość komunikacji będzie się odbywać poprzez e-maile, ale będzie także rejestracja przez WWW. Po prostu, pocztę każdy regularnie czyta, bo spodziewa się np. odpowiedzi na wnioski o informacje publiczną.
Jako zadanie zlecono mi także stworzenie kodu aplikacji. Zdecydowałem się na wykorzystanie Django.
Wydzieliłem początkowe aplikacje: cases, events, letters, records, tracking, users.
Zależności pomiędzy nimi przedstawione są na diagramie:
Mamy sprawy (cases), zawierające rekordy (records), czyli informacje o obserwowaniu (tracking), wydarzeniach (events), alarmach (alarm) i listach(letters).
Listy mogą zawierać załączniki (attachment), natomiast z wydarzeniami powiązane są alarmy (alarm), które są – po prostu – wywołanymi wydarzeniami.
Obserwowanie ma dwojaką funkcje. Z jednej strony służy jako podstawa do wzbudzenia powiadomień facebook-like (zamierzam wykorzystać django-notifications), a z drugiej strony określa poziom uprawnień na poziomie sprawy.
Dzięki wykorzystaniu Django wiele kodu mogę po prostu ponownie wykorzystać korzystając z gotowych aplikacji:
[code language=”bash”]
$ da diffsettings | grep 'APPS’
DJANGO_APPS = (’django.contrib.auth’, 'django.contrib.contenttypes’, 'django.contrib.sessions’, 'django.contrib.sites’, 'django.contrib.messages’, 'django.contrib.staticfiles’, 'django.contrib.admin’) ###
INSTALLED_APPS = (’django.contrib.auth’, 'django.contrib.contenttypes’, 'django.contrib.sessions’, 'django.contrib.sites’, 'django.contrib.messages’, 'django.contrib.staticfiles’, 'django.contrib.admin’, 'crispy_forms’, 'avatar’, 'allauth’, 'allauth.account’, 'allauth.socialaccount’, 'guardian’, 'users’, 'cases’, 'letters’, 'records’, 'tracking’, 'events’, 'debug_toolbar’, 'django_extensions’)
LOCAL_APPS = (’users’, 'cases’, 'letters’, 'records’, 'tracking’, 'events’) ###
THIRD_PARTY_APPS = (’crispy_forms’, 'avatar’, 'allauth’, 'allauth.account’, 'allauth.socialaccount’, 'guardian’) ###
[/code]
Prowadzi to do usprawiedliwionego rozrostu bazy danych:
W najbliższych dniach skupie się na doprowadzeniu do używalności cases, letters z poziomu różnych ról, które wyróżniłem:
Zespół | Osoba zewnętrzna | |||||
Sekretarka | Prawnik | Obserwator | Praktykant | Klient | Anonymous | |
ogólne | ||||||
cases.form | + | + | + | + | + | + |
cases.all_cases | + | + | – | – | – | – |
cases.assign_to_lawyer | + | – | – | – | – | – |
cases.assign_to_me | – | + | – | – | – | – |
per sprawa | ||||||
cases.view | + | + | + | + | + | – |
cases.view_document | + | + | + | + | + | – |
cases.view_document_project | + | + | + | + | – | – |
cases.view_comment | + | + | + | + | – | – |
alarms.views | + | + | + | + | – | – |
letters.fast_reply | + | + | – | – | – | – |
letters.status_change | – | + | – | – | – | – |
alarm.create_alarm | + | + | – | + | – | – |
letters.create_project | + | + | – | + | – | – |
letters.create_comment | + | + | + | + | – | – |
zmiana własnych treści | + | + | + | + | + | – |
zmiana cudzych treści | – | + | – | – | – | – |
Jest to wstępny projekt uprawnień.
Następnie stanę przed zadaniem importowania poczty.
Szczęśliwie, można porzucić archiwum poczty.
Już spodziewam się ciekawej zagadki, aby połączyć django-allauth z modułem pobierania poczty. Musi się to odbyć w taki sposób, aby automatycznie rejestrowało nowych użytkowników i przesyłało im wygenerowane hasło, zamiast formularza WWW.
Jeżeli masz ochotę – koduj dla Sieci projekt Poradnia. Kod jest dostępny na Bitbucket /siecobywatelska/poradnia/.
powyższe to modele pojęciowe czy struktury kodu?
Czy mogę dla sportu zacząć robić równolegle projekt w pełni obiektowy (projekt a nie kod)? 🙂 powody czysto badawcze 🙂