- Συγχώνευση των αρχείων τεκμηρίωσης της πτυχιακής σε ένα έγγραφό.

- Προσθήκη του λογότυπου της εφαρμογής.
- Προσθήκη τεκμηρίωσης του κώδικα (PHP + Javascript)
This commit is contained in:
alextselegidis@gmail.com 2013-06-01 11:03:17 +00:00
parent ab6c6d959d
commit 534b17dc80
75 changed files with 986 additions and 488 deletions

View File

@ -1,8 +1,9 @@
VERSION 0.2
===========
- Use the PHPMailer class for sending HTML emails.
- Includes complete Google Sync protocol.
- Includes complete Google Sync protocol document.
- Customers can book appointments only for the available hours.
- Generation of code documentation.
- Unit test the controller classes.
- Customers can edit the application through unique links (from their emails).
- Minor Fixes

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

View File

@ -1,55 +0,0 @@
%% =============================
%% GENERAL SETTINGS
%% =============================
\documentclass[12pt]{article}
\usepackage [margin=2.5cm]{geometry}
\usepackage {graphics}
\usepackage {xltxtra}
\usepackage {xgreek}
\usepackage {color}
\usepackage {hyperref}
\hypersetup {colorlinks}
\setmainfont[Mapping=tex-text]{Tahoma}
\setlength{\parindent}{0cm} %% No paragraph indent
\definecolor{darkred}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\definecolor{darkblue}{rgb}{0,0,0.5}
\hypersetup{ colorlinks,
linkcolor=darkblue,
filecolor=darkgreen,
urlcolor=darkblue,
citecolor=darkred }
%% =============================
%% DOCUMENT PROPERTIES
%% =============================
\title{{\Huge {\bf Easy!Appointments}} \\[0.3cm] Περίπτωση Χρήσης Κράτηση Ραντεβού}
\author{Αλέξανδρος Τσελεγγίδης}
\date{Απρίλιος 2013}
%% =============================
%% DOCUMENT CONTENT
%% =============================
\begin{document}
\maketitle
\thispagestyle{empty} %% Απομάκρυνση page number από την πρώτη σελίδα
%% ΑΝΑΛΥΤΙΚΗ ΠΕΡΙΓΡΑΦΗ ΚΡΑΤΗΣΗΣ ΡΑΝΤΕΒΟΥ
{\bf Βασική Ροή}
\\[0.3cm]
Ο χρήστης μπαίνει στην σελίδα κράτησης ραντεβού και επιλέγει την υπηρεσία και τον πάροχο που τον ενδιαφέρει. Στην συνέχεια θα χρειαστεί να επιλέξει μια από τις διαθέσιμες ημερομηνίες και ώρες για να κλείσει το ραντεβού του. Αφού γίνει και αυτό θα χρειαστεί να συμπληρώσει τα στοιχεία του έτσι ώστε να μπορέσει η εταιρεία να έρθει σε επαφή μαζί του αν χρειαστεί. Τέλος ένα email θα σταλθεί πίσω στον πελάτη ότι το ραντεβού του έχει καταχωρηθεί με επιτυχία.
\\[0.3cm]
{\bf Εναλλακτικές Ροές}
\begin{itemize}
\item Αν ο πελάτης αργήσει να επιλέξει ημερομηνία και στο ενδιάμεσο τον προλάβει ένας άλλος, θα πρέπει να επιστραφεί μήνυμα το οποίο θα τον προτρέψει να βρει άλλη ημερομηνία και ώρα για το ραντεβού του.
\item Όταν ο πελάτης συμπληρώνει τα στοιχεία του και αφήσει κενό ένα πεδίο το οποίο είναι υποχρεωτικό για να ολοκληρωθεί η διαδικασία, θα εμφανιστεί μήνυμα το οποίο θα τον προτρέψει να συμπληρώσει όλα τα υποχρεωτικά πεδία.
\end{itemize}
\end{document}

View File

@ -1,165 +0,0 @@
%% =============================
%% GENERAL SETTINGS
%% =============================
\documentclass[12pt]{article}
\usepackage [margin=2.5cm]{geometry}
\usepackage {graphics}
\usepackage {xltxtra}
\usepackage {xgreek}
\usepackage {color}
\usepackage {hyperref}
\hypersetup {colorlinks}
\setmainfont[Mapping=tex-text]{Tahoma}
\setlength{\parindent}{0cm} %% No paragraph indent
\definecolor{darkred}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\definecolor{darkblue}{rgb}{0,0,0.5}
\hypersetup{ colorlinks,
linkcolor=darkblue,
filecolor=darkgreen,
urlcolor=darkblue,
citecolor=darkred }
%% =============================
%% DOCUMENT PROPERTIES
%% =============================
\title{{\Huge {\bf Easy!Appointments}} \\[0.3cm] Google Calendar API}
\author{Αλέξανδρος Τσελεγγίδης}
\date{Απρίλιος 2013}
%% =============================
%% DOCUMENT CONTENT
%% =============================
\begin{document}
\maketitle
\thispagestyle{empty} %% Απομάκρυνση page number από την πρώτη σελίδα
%% ΕΙΣΑΓΩΓΗ ΣΤΟ API
\section {Εισαγωγή}
Το Ημερολόγιο της Google είναι μια διαδικτυακή εφαρμογή που επιτρέπει στους χρήστες της να κρατάνε τα ραντεβού και τα συμβάντα τους σε ένα όμορφο περιβάλλον. Εκτός αυτού υπάρχουν πολλές πρόσθετες δυνατότητες όπως ο συγχρονισμός ημερολογίου με κάποια άλλη εφαρμογή ή η κοινή χρήση ενός ημερολογίου από πολλά άτομα.
\\[0.3cm]
Όπως και με τα περισσότερα προϊόντα της Google παρέχονται εργαλεία με τα οποία μπορούν οι προγραμματιστές να επικοινωνήσουν και να λάβουν δεδομένα από τις υπηρεσίες της εταιρείας. Με αυτόν τον τρόπο είναι δυνατή η ανάπτυξη εφαρμογών οι οποίες διαχειρίζονται αυτά τα δεδομένα.
\\[0.3cm]
Το Google Calendar API (Application Programming Interface) είναι μια πλατφόρμα διαχείρισης συμβάντων ενός ημερολογίου από την Google. Επιτρέπει στον προγραμματιστή να πραγματοποιήσει λειτουργίες προσθήκης, επεξεργασίας, διαγραφής και αναζήτησης συμβάντων μέσω ενός RESTful στυλ κλήσεων προς τον server.
\\[0.3cm]
Με την έννοια RESTful (Representional State Transfer) εννοείται ένας από τους πιο δημοφιλής τρόπους επικοινωνίας στον παγκόσμιο ιστό. Η επικοινωνία γίνεται με την χρήση ειδικών αιτήσεων προς τους servers, οι οποίοι με την σειρά τους είναι σε θέση να τις επεξεργαστούν και να επιστρέψουν δεδομένα πίσω στον client. Οι μέθοδοι αιτήσεων που είναι διαθέσιμες είναι:
\begin{enumerate}
\item GET
\item POST
\item PUT
\item DELETE
\end{enumerate}
Το API μπορεί να χρησιμοποιηθεί από διάφορες γλώσσες (PHP, Java, .NET, Ruby κτλ) χάρη στις βιβλιοθήκες που παρέχει η Google προς χρήση. Έτσι διευκολύνεται πολύ η διαδικασία ανάπτυξης μιας εφαρμογής που βασίζεται πάνω σε αυτήν την υπηρεσία.
\\[0.3cm]
Για να αποτρέψει η Google την υπερβολική χρήση της υπηρεσίας Calendar, έχει θέσει ένα υπέρτατο όριο 10.000 request την ημέρα. Αν κάποια εταιρεία ξεπεράσει αυτό το όριο τότε θα χρειαστεί να πληρώσει κάποιο αντίτιμο για να μπορέσει να συνεχίσει κανονικά την χρήση.
\section {Περιγραφή Του API}
Το Ημερολόγιο της Google είναι ένα πολύ δυνατό και ευέλικτο εργαλείο. Οι χρήστες μπορούν να βλέπουν το ίδιο ημερολόγιο σε οποιαδήποτε συσκευή βρίσκονται έχοντας απλώς σύνδεση με το διαδίκτυο για να μπορέσει να εκτελεστεί η διαδικασία του συγχρονισμού. Όλες οι εφαρμογές αυτές χρησιμοποιούν το API για να υλοποιήσουν τις βασικές λειτουργίες ενός ημερολογίου, δηλαδή την διαχείριση και την εύκολη εύρεση συμβάντων. Αφού γίνουν οι αλλαγές αυτές θα χρειαστεί να συγχρονιστεί το ημερολόγιο με το διαδίκτυο έτσι ώστε να είναι διαθέσιμο και στις υπόλοιπες συσκευές.
\\[0.3cm]
Στην ευρεία χρήση της υπηρεσίας συντελεί το ότι η πλατφόρμα του ημερολογίου είναι συμβατή με διάφορες γλώσσες προγραμματισμού και έτσι μπορεί να υλοποιηθούν εφαρμογές για όλες τις συσκευές με ανεπτυγμένο λειτουργικό σύστημα.
\\[0.3cm]
Οι βασικές έννοιες του συστήματος ενός ημερολογίου είναι:
\begin{itemize}
\item Συμβάν (Event) - αντιπροσωπεύει ένα συμβάν στο ημερολόγιο το οποίο έχει τίτλο, περιγραφή,
ημερομηνία και συμμετέχοντες.
\item Ημερολόγιο (Calendar) - αντιπροσωπεύει ένα ημερολόγιο το οποίο περιέχει πολλά συμβάντα. Ένας χρήστης μπορεί να έχει πολλά ημερολόγια. Περιέχει επιπλέον πληροφορίες όπως η περιγραφή του ημερολογίου, ο ιδιοκτήτης κτλ.
\item Λίστα Ημερολογίων (Calendar List) - αντιπροσωπεύει μια λίστα με όλα τα ημερολόγια ενός χρήστη της υπηρεσίας αυτής.
\item Ρύθμιση (Setting) - αντιπροσωπεύει μια επιλογή του χρήστη, η οποία επηρεάζει τον τρόπο λειτουργίας της υπηρεσίας (πχ ρύθμιση ζώνης ώρας).
\item ACL (Access Control Rule) - αντιπροσωπεύει έναν κανόνα πρόσβασης του ημερολογίου (όπως παραδείγματος χάρη το αν το ημερολόγιο είναι δημόσιο ή ιδιωτικό).
\item Χρώμα (Color) - αντιπροσωπεύει το χρώμα για κάποια στοιχεία στο περιβάλλον χρήστη της εφαρμογής και τα συμβάντα.
\item Ελεύθερος / Απασχολημένος (Free / Busy) - αντιπροσωπεύει μια χρονική περίοδο στο ημερολόγιο όπου ο χρήστης είναι είτε απασχολημένος είτε ελεύθερος. Αν είναι απασχολημένος δεν μπορούν να υπάρχουν συμβάντα σε αυτό το διάστημα.
\end{itemize}
Το API της Google λειτουργεί με “resources” και “collections” για να χειριστεί τις προαναφερθέντες έννοιες. Ένα resource αντιπροσωπεύει μια συγκεκριμένη οντότητα η οποία περιέχει δεδομένα για την εφαρμογή. Πολλά resource μαζί απαρτίζουν ένα collection το οποίο περιέχει πολλές χρήσιμες μεθόδους μαζικής διαχείρισης δεδομένων.
\\[0.3cm]
Οι προγραμματιστές διαμορφώνουν τον κωδικά τους έτσι ώστε να είναι συμβατός με αυτήν την δομή και έτσι η επικοινωνία με την υπηρεσία της Google να είναι ευκολότερη.
\section {Πως χρησιμοποιείται το API}
Η χρήση του API μπορεί να γίνει απευθείας με κλήσεις RESTful προς τον server της Google, είτε με χρήση κάποιων από τις έτοιμες βιβλιοθήκες που παρέχει η εταιρεία. Επίσης είναι απαραίτητη η ύπαρξη ενός λογαριασμού στην Google καθώς και η καταχώρηση του project στο Google API Console έτσι ώστε να πάρει ο προγραμματιστείς ένα API Key, ένα κλειδί το οποίο είναι απαραίτητο για την χρήση της υπηρεσίας.
\\[0.3cm]
Αν ο προγραμματιστής επιλέξει την χρήση της RESTful μεθόδου επικοινωνίας, θα χρειαστεί αν στέλνει request σε διάφορα URL και έτσι να παίρνει απαντήσεις με τα δεδομένα που χρειάζεται. Όλες οι απαντήσεις είναι σε JSON μορφή οπότε είναι πιθανόν να χρειαστεί να τις αναλύσει (parse) πριν τις χρησιμοποιήσει στην εφαρμογή του.
\\[0.3cm]
Δείγματα από URL για την κλήση διαφόρων μεθόδων:
\begin{verbatim}
https://www.googleapis.com/calendar/v3/lists/calendarListID/calendar?parameters
https://www.googleapis.com/calendar/v3/users/userID/lists?parameters
\end{verbatim}
Αντιθέτως με την χρήση των έτοιμων βιβλιοθηκών οι διαδικασίες επικοινωνίας είναι έτοιμες και ο προγραμματιστής μπορεί να πετύχει την επικοινωνία με τους servers της Google γρηγορότερα και ευκολότερα. Υπάρχουν βιβλιοθήκες για την Java, την PHP, την Python, το .NET περιβάλλον και την Ruby και πολλές άλλες γλώσσες και τεχνολογίες.
\\[0.3cm]
Αφού κατεβάσουμε τις βιβλιοθήκες και τις βάλουμε σε κάποιο σημείο μέσα στο project, μπορούμε να τις χρησιμοποιήσουμε μέσα από τον κώδικα:
\begin{verbatim}
require_once "../src/apiClient.php";
require_once "../src/contrib/apiCalendarService.php";
\end{verbatim}
Στην συνέχεια είναι απαραίτητο να ρυθμίσουμε κάποιες παραμέτρους έτσι ώστε να είμαστε σε θέση να χρησιμοποιήσουμε αυτήν την υπηρεσία:
\begin{verbatim}
global $apiConfig;
$apiConfig = array(
// Site name to show in Google's OAuth authentication screen
'site_name' => 'www.example.org',
// OAuth2 Setting, you can get these keys on the API Access tab on
// the Google APIs Console
'oauth2_client_id' => 'YOUR_CLIENT_ID',
'oauth2_client_secret' => 'YOUR_CLIENT_SECRET',
'oauth2_redirect_uri' => 'YOUR_REDIRECT_URL',
// The developer key; you get this from the Google APIs Console
'developer_key' => 'YOUR_DEVELOPER_KEY',
...
// Which Authentication, Storage and HTTP IO classes to use.
'authClass' => 'apiOAuth2',
....
// Definition of service specific values like scopes, OAuth token URLs, etc
'services' => array(
'calendar' => array('scope' => 'https://www.googleapis.com/auth/calendar'),
)
);
\end{verbatim}
Έπειτα θα χρειαστεί να γίνει εκκίνηση του service και να ολοκληρωθεί η διαδικασία πιστοποίησης (authenticate) με την χρήση του API Key που αντιστοιχεί στην εφαρμογή.
\begin{verbatim}
<?php
session_start();
require_once "../src/apiClient.php";
require_once "../src/contrib/apiCalendarService.php";
$apiClient = new apiClient();
$apiClient->setUseObjects(true);
$service = new apiCalendarService($apiClient);
if (isset($_SESSION['oauth_access_token'])) {
$apiClient->setAccessToken($_SESSION['oauth_access_token']);
} else {
$token = $apiClient->authenticate();
$_SESSION['oauth_access_token'] = $token;
}
...
\end{verbatim}
Με αυτόν τον τρόπο εκτελούνται οι διαδικασίες ανταλλαγής δεδομένων μεταξύ του Google Calendar και του συστήματος του προγραμματιστή.
\end{document}

Binary file not shown.

View File

@ -1,68 +0,0 @@
%% =============================
%% GENERAL SETTINGS
%% =============================
\documentclass[12pt]{article}
\usepackage[margin=0.7in]{geometry}
\usepackage {graphics}
\usepackage{xltxtra}
\usepackage{xgreek}
\setmainfont[Mapping=tex-text]{Tahoma}
\setlength{\parindent}{0cm} %% No paragraph indent
%% =============================
%% DOCUMENT PROPERTIES
%% =============================
\title{Easy!Appointments - Vision Document}
\author{Αλέξανδρος Τσελεγγιδης}
\date{Νοέμβριος 2012}
%% =============================
%% DOCUMENT CONTENT
%% =============================
\begin{document}
\maketitle
\pagebreak
%% ΣΚΟΠΟΣ ΤΟΥ ΕΡΓΟΥ
\section{Σκοπός του Έργου}
Σκοπός του Easy!Appointments ειναι να αναπτυχθεί ένα web σύστημα κρατήσεων ραντεβού (για οποιαδήποτε υπηρεσία ή γραφείο) το οποίο να μπορεί να παραμετροποιείται καταλλήλως και να συγχρονίζεται με το Google Calendar. Στόχος είναι να παράγεται κώδικας που να είναι συμβατός με οποιοδηποτε διακοσμητή AMP.
%% ΠΙΘΑΝΟΙ ΠΕΛΑΤΕΣ
\section{Πιθανοί Πελάτες}
Οποιαδήποτε εταιρεία ή επιχείρηση λειτουργεί με ραντεβού σε γραφείο ή κατάστημα μπορεί να χρησιμοποιήσει την εφαρμογή για να διαχειρίζεται τα ραντεβού ηλεκτρονικά και μέσω του internet. Αυτήν την στιγμή δεν υπάρχουν αντιστοιχα προγρ
%% ΚΥΡΙΟΙ ΠΑΡΑΓΟΝΤΕΣ
\section{Κύριοι Παράγοντες}
\begin{enumerate}
\item{Αξιοπιστια}
\item{Ταχύτητα}
\item{Ευχρηστία}
\item{Συνεργασία μεταξύ διαφόρων υπαλλήλων}
\end{enumerate}
%% ΚΥΡΙΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ
\section{Χαρακτηριστικά και Τεχνολογία}
\begin{enumerate}
\item{Χρήση της βιβλιοθήκης Google Calendar API}
\item{Χρήση της εφαρμογής Google Calendar Sync (παροχή αυτόματων ενημερώσεων)}
\item{Εύχρηστο και όμορφο περιβάλλον}
\item{Ασφαλής λειτουργία της εφαρμογής (χωρίς απώλειες δεδομένων)}
\item{Υλοποίηση με PHP, MySQL, jQuery, CodeIgniter Framework}
\end{enumerate}
%% ΑΛΛΟΙ ΣΗΜΑΝΤΙΚΟΙ ΠΑΡΑΓΟΝΤΕΣ
\section{Άλλοι Παράγοντες}
\begin{enumerate}
\item{Η εφαρμογή δεν πρέπει να "κρασάρει"}
\item{Δυνατότητα ενημέρωσης με SMS των χρηστών για αλλαγές στο εβδομαδιαίο πλάνο τους}
\end{enumerate}
%% ΟΙΚΟΝΟΜΙΚΟΙ ΠΑΡΑΓΟΝΤΕΣ
\section{Οικονομικοί Παράγοντες}
Πρέπει να προωθηθεί σε όλα τα site που ασχολούνται με τα CMS, το ελεύθερο λογισμικό και τα επιχειρηματικά βοηθήματα.
\\[0.3cm]
Η εφαρμογή θα διατίθεται δωρεάν μέσω της άδειας GNU/GPL και τα έσοδα θα προέρχονται από διαφημίσεις, δωρεές, εκπαίδευση και την συντήρηση.
\end{document}

View File

Before

Width:  |  Height:  |  Size: 238 B

After

Width:  |  Height:  |  Size: 238 B

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

View File

Before

Width:  |  Height:  |  Size: 216 B

After

Width:  |  Height:  |  Size: 216 B

View File

Before

Width:  |  Height:  |  Size: 171 B

After

Width:  |  Height:  |  Size: 171 B

View File

Before

Width:  |  Height:  |  Size: 126 B

After

Width:  |  Height:  |  Size: 126 B

View File

Before

Width:  |  Height:  |  Size: 128 B

After

Width:  |  Height:  |  Size: 128 B

View File

Before

Width:  |  Height:  |  Size: 172 B

After

Width:  |  Height:  |  Size: 172 B

View File

Before

Width:  |  Height:  |  Size: 127 B

After

Width:  |  Height:  |  Size: 127 B

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

49
doc/thesis/compile.bat Normal file
View File

@ -0,0 +1,49 @@
:: ===============================================
:: GENERATES THE EASY!APPOINTMENTS THESIS DOCUMENT
:: ===============================================
:: Run Cleanup
call:cleanupq
:: Run XeLaTex on main file.
xelatex thesis.tex --quiet
bibtex thesis.tex
:: If you are using multibib the following will run bibtex on all aux files
:: FOR /R . %%G IN (*.aux) DO bibtex %%G
xelatex thesis.tex --quiet
:: Run Cleanup
call:cleanup
:: Open PDF (Script updated based on comments by 'menfeser'
:: START "" "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" %2.pdf
START "" thesis.pdf
:: Cleanup Function
:cleanup
del *.log
del *.dvi
del *.aux
del *.bbl
del *.blg
del *.brf
del *.out
del *.log
del *.bcf
del *.xml
del *.toc
del includes\*.log
del includes\*.dvi
del includes\*.aux
del includes\*.bbl
del includes\*.blg
del includes\*.brf
del includes\*.out
del includes\*.log
del includes\*.bcf
del includes\*.xml
del includes\*.toc
goto:eof

View File

@ -0,0 +1,33 @@
%% ΑΛΛΑ ΕΞΩΤΕΡΙΚΑ ΕΡΓΑΛΕΙΑ
%% Σε αυτό το κεφάλαιο γίνεται περιγραφή των υπόλοιπων εξωτερικών
%% εργαλείων που χρησιμοποιήθηκαν από για την υλοποίηση του συστήματος
%% κρατήσεων ραντεβού.
\chapter{Άλλα Εξωτερικά Εργαλεία}
Εκτός του Calendar API και των βιβλιοθηκών που παρέχει η Google, έχουν χρησιμοποιηθεί και κάποια άλλα εργαλεία ανάπτυξης λογισμικού, τα οποία βοήθησαν στην άρτια και ποιοτικότερη παραγωγή του συστήματος κρατήσεων ραντεβού. Τα εργαλεία αυτά είναι όλα ανοιχτού κώδικα (open source) και έχουν στόχο να βοηθήσουν τον προγραμματιστή να επικεντρωθεί περισσότερο σε αυτό που έχει να κάνει και όχι τόσο στα τετριμμένα πράγματα τα οποία αποσπούν μεγάλο χρονικό διάστημα άσκοπα. Εν ολίγοις πρόκειται για ένα σύνολο από διάφορα framework τα οποία είναι πολύ χρήσιμα για οποιαδήποτε ανάπτυξη λογισμικού.
\section{CodeIgniter}
Το CodeIgniter είναι ένα PHP framework το οποίο έχει ως στόχο την αποδοτικότητα και την ταχύτητα, μιας και καταναλώνει πολύ λίγους υπολογιστικούς πόρους σε αντίθεση με άλλα βοηθητικά συστήματα του είδους του. Θετικό στοιχείο είναι ότι είναι πολύ απλό στην χρήση, δίνει την δυνατότητα στον προγραμματιστή να παραμετροποιήσει τον πυρήνα του καταπώς τον βολεύει και βασίζεται στην αρχιτεκτονική MVC (Model View Controller). Όντας έργο ανοιχτού λογισμικού, κατέχει μια μεγάλη κοινότητα που το υποστηρίζει και επίσης προσφέρει μια καλά ενημερωμένη γνωσιακή βάση, η οποία μπορεί να καθοδηγήσει τον προγραμματιστή στο πως θα χρησιμοποιήσει το framework.
Η αρχιτεκτονική MVC είναι η πλέον διαδεδομένη κυρίως στις διαδικτυακές εφαρμογές μιας και βοηθάει στην καλύτερη οργάνωση και συντήρηση του κώδικα. Ουσιαστικά πρόκειται για τον διαχωρισμό της εφαρμογής σε τρία μέρη:
\begin{enumerate}
\item Models: Περιέχουν συναρτήσεις και μεθόδους που αλληλεπιδρούν με την βάση δεδομένων. Χρησιμοποιούνται σε διάφορες περιπτώσεις από τους Controllers. Με αυτόν τον τρόπο επιτυγχάνεται η επαναχρησιμοποίηση ενός μέρος του κώδικα, κάτι το οποίο είναι πολύ σημαντικό στην αρχιτεκτονική ενός συστήματος.
\item Views: Τα views είναι τα κομμάτια κώδικα τα οποία παράγουν το αποτέλεσμα το οποίο βλέπει ο χρήστης κάθε φορά. Στόχος τους είναι απλώς να δείξουν και όχι να υπολογίσουν ή να φέρουν κάποια δεδομένα (αυτό είναι δουλειά των άλλων δυο τμημάτων της αρχιτεκτονικής). Κάθε φορά που χρειάζεται να αλλάξει κάτι στην εμφάνιση του συστήματος μπορεί να γίνει αλλαγή στο αντίστοιχο view χωρίς να επηρεαστούν τα άλλα συστήματα.
\item Controllers: Το μέρος αυτό του συστήματος αναλαμβάνει να οργανώσει τα άλλα δυο. Κάθε φορά που πρέπει να παραχθεί μια σελίδα, η διαδικασία θα ξεκινήσει από τον αντίστοιχο controller. Αυτός στην συνέχεια θα καλέσει τις απαραίτητες συναρτήσεις και θα παρέχει τα δεδομένα που απαιτεί το view για να εμφανιστεί σωστά η σελίδα.
\end{enumerate}
Το σύστημα που υλοποιήθηκε χρησιμοποιεί το CodeIgniter για την κάλυψη των βασικών εργασιών έτσι ώστε να υπάρχει η δομή MVC στον κώδικα. Επίσης γίνεται χρήση της ενσωματωμένης βιβλιοθήκης επικοινωνίας με την βάση δεδομένων. Εκτός αυτών των δύο, ο υπόλοιπος κώδικας έχει γραφεί κανονικά και τηρεί τις προϋποθέσεις της πτυχιακής εργασίας.
\section {jQuery & jQuery UI}
Ένα μεγάλο μέρος των σύγχρονων διαδικτυακών εφαρμογών βασίζει την λειτουργία του σε κώδικα Javascript έτσι ώστε να κάνει το λογισμικό πιο φιλικό προς τον χρήστη. Διάφορες βιβλιοθήκες έχουν δημιουργηθεί τα τελευταία χρόνια που στόχο έχουν την εξέλιξη και την αποδοτικότερη χρήση της γλώσσας javscript. Η πιο δημοφιλής από όλες αυτές τις βιβλιοθήκες είναι η βιβλιοθήκη jQuery η οποία συνοδεύεται απο το jQuery UI, ένα framework για την παραγωγή ελεκτηρίων (controls) στα οποία μπορεί ο κάθε χρήστης να εκτελέσει διάφορες ενέργειες. Το jQuery έχει καταφέρει να απλοποιήσει την συγγραφή Javascript κώδικα και επιπλέον παρέχει στην διάθεση του προγραμματιστή έτοιμες ρουτίνες animation και διαφόρων άλλων ενεργειών, οι οποίες διαφορετικά θα καταλάμβαναν αρκετό χρόνο για την υλοποίηση τους. Πρόκειται για μια βιβλιοθήκη ανοιχτού λογισμικού η οποία υποστηρίζεται από μια πολύ μεγάλη κοινότητα προγραμματιστών, οι οποίοι δημιουργούν μάλιστα πολλά πρόσθετα (plugins) με λειτουργίες οι οποίες δεν είναι διαθέσιμες στην βασική βιβλιοθήκη.
Η βιβλιοθήκη jQuery ουσιαστικά λειτουργεί σαν ένα επίπεδο πάνω από την Javascript, βοηθώντας τον προγραμματιστή να γράψει διάφορες δομές κώδικα πιο γρήγορα και οργανωμένα. Ο κώδικας που γράφεται είναι πάλι Javascript οπότε είναι πολύ εύκολο στον καθένα να χρησιμοποιήσει την βιβλιοθήκη. Στόχος της είναι η πιο εύκολη περιήγηση στα αντικείμενα μιας σελίδας (DOM elements), η εύκολη δημιουργία εφέ κινήσεων τα οποία προσδίδουν πολύ αισθητικά σε μια ιστοσελίδα, η ευκολότερη χρήση της τεχνολογίας AJAX, μιας τεχνολογίας η οποία χρησιμοποιείται όλο και περισσότερο από τα σύγχρονα συστήματα.
Το σύστημα που παράχθηκε χρησιμοποιεί αυτήν την βιβλιοθήκη για τον προγραμματισμό του client-side μέρους της εφαρμογής. Ανάλογα με την κάθε περίσταση, μερικές φορές είναι αποδοτικότερο και χρησιμότερο να χρησιμοποιηθεί Javascript έναντι της PHP και για αυτόν τον λόγο το jQuery Framework βοηθάει στην απόδοση που έχει ο κώδικας της εφαρμογής.
\section {Bootstrap}
Το Bootstrap είναι ένα ολοκληρωμένο CSS Framework, με την προσθήκη κάποιων βιβλιοθηκών Javascript έτσι ώστε να προσφέρει μερικές επιπλέον δυνατότητές. Έχει κατασκευαστεί από την εταιρεία πίσω από την σελίδα κοινωνικής δικτύωσης Twitter και χρησιμοποιείται από αυτό ως βάση για την υλοποίηση του. Η εταιρεία έχει διάθεση το framework ως ανοιχτό λογισμικό και οι προγραμματιστές μπορούν να το χρησιμοποιήσουν ελεύθερα στις σελίδες τους. Η ίδια η εταιρεία επωφελείται μέσω της συμμετοχής της κοινότητας για να ανάπτυξη περαιτέρω αυτό το framework.
Το framework αυτό περιέχει έτοιμο κώδικα CSS ο οποίος ακολουθεί την μεθοδολογία παραγωγής responsive ιστοσελίδων. Με την έννοια αυτή εννοείται ότι η μορφοποίηση των σελίδων στοχεύει στο να είναι συμβατή με οποιαδήποτε συσκευή, λειτουργικό σύστημα και περιηγητή ιστού. Είναι πολύ σημαντικό για την ανάπτυξη μιας εφαρμογής, το να είναι διαθέσιμη σε οποιοδήποτε μηχάνημα υποστηρίζει τα τελευταία standards του ιστού. Απαρτίζεται από κανονικό CSS και Javascript το οποίο μάλιστα χρησιμοποιεί την βιβλιοθήκη jQuery για την υλοποίηση διαφόρων τεχνικών (πχ εμφάνιση παραθύρου διαλόγου κτλ).
Στην παραγωγή του συστήματος κρατήσεων ραντεβού χρησιμοποιήθηκε ως η βάση για τη μορφοποίηση και κάποιες μέθοδοι Javascript φάνηκαν αρκετά χρήσιμα σε κάποια σημεία. Στην συνέχεια με βάση αυτά γράφτηκαν ξεχωριστά αρχεία CSS και Javascript τα οποία αποτελούν το τελικό αποτέλεσμα που έπρεπε να επιτευχθεί.

View File

@ -0,0 +1,146 @@
%% ΠΕΡΙΓΡΑΦΗ ΤΟΥ GOOGLE CALENDAR API
%% Σε αυτό το κεφάλαιο περιγράφεται το Google Calendar API
%% και το πως χρησιμοποιείται από το σύστημα για να πραγματοποιηθεί
%% η διαδικασία του συγχρονισμού.
\chapter{Google Calendar API}
Το Ημερολόγιο της Google είναι μια διαδικτυακή εφαρμογή που επιτρέπει στους χρήστες της να αποθηκεύουν και να διαχειρίζονται τα ραντεβού και τα συμβάντα τους σε ένα όμορφο περιβάλλον. Εκτός αυτού, υπάρχουν πολλές πρόσθετες δυνατότητες όπως ο συγχρονισμός ημερολογίου με κάποια άλλη εφαρμογή ή η κοινή χρήση ενός ημερολογίου από
πολλά άτομα.
Όπως και με τα περισσότερα προϊόντα της Google παρέχονται εργαλεία με τα οποία μπορούν οι προγραμματιστές να επικοινωνήσουν και να λάβουν δεδομένα από τις υπηρεσίες της εταιρείας. Με
αυτόν τον τρόπο είναι δυνατή η ανάπτυξη εφαρμογών οι οποίες διαχειρίζονται αυτά τα δεδομένα, διευκολύνοντας έτσι τον χρήστη.
Το Google Calendar API (Application Programming Interface)
είναι μια πλατφόρμα διαχείρισης συμβάντων ενός ημερολογίου από την Google. Επιτρέπει στον προγραμματιστή να πραγματοποιήσει λειτουργίες προσθήκης, επεξεργασίας, διαγραφής και αναζήτησης συμβάντων μέσω ενός RESTful στυλ κλήσεων προς τον server.
Με την έννοια RESTful (Representional State Transfer) εννοείται ένας από τους πιο δημοφιλής τρόπους επικοινωνίας στον παγκόσμιο ιστό. Η επικοινωνία γίνεται με την χρήση ειδικών αιτήσεων προς τους servers, οι οποίοι με την σειρά τους είναι σε θέση να τις επεξεργαστούν και να επιστρέψουν δεδομένα πίσω στους clients. Οι μέθοδοι αιτήσεων που είναι διαθέσιμες είναι:
\begin{enumerate}
\item GET
\item POST
\item PUT
\item DELETE
\end{enumerate}
Πρακτικά η μέθοδος επικοινωνίας RESTFul μπορεί να χρησιμοποιηθεί από οποιοδήποτε σύστημα υποστηρίζει το πρωτόκολλο HTTP. Για να διευκολύνει όμως η Google τους προγραμματιστές, έχει αναπτύξει βιβλιοθήκες κώδικα σε διάφορες γλώσσες προγραμματισμού (PHP, Java, .NET, Ruby κτλ) οι οποίες περιέχουν έτοιμες μεθόδους επικοινωνίας με τις υπηρεσίες της. Έτσι διευκολύνεται πολύ η διαδικασία ανάπτυξης μιας εφαρμογής που βασίζεται πάνω στα δεδομένα των χρηστών της Google.
Για να αποτραπεί η υπερβολική χρήση της υπηρεσίας Calendar, η εταιρεία έχει θέσει ένα υπέρτατο όριο 10.000 request την ημέρα. Αν κάποια εταιρεία ξεπεράσει αυτό το όριο τότε θα χρειαστεί να πληρώσει κάποιο αντίτιμο για να μπορέσει να συνεχίσει κανονικά την χρήση. Για αυτό τον λόγο είναι και απαραίτητο οποιοσδήποτε client χρησιμοποιεί το Calendar API, να έχει πρώτα δημιουργήσει ένα API Key μέσω της σελίδας API Console που προσφέρει η Google.
\section {Περιγραφή Του API}
Το Ημερολόγιο της Google είναι ένα πολύ δυνατό και ευέλικτο εργαλείο. Οι χρήστες μπορούν να βλέπουν το ίδιο ημερολόγιο σε οποιαδήποτε συσκευή βρίσκονται έχοντας απλώς σύνδεση με το διαδίκτυο, για να μπορέσουν να ληφθούν τα δεδομένα από την υπηρεσία. Όλες οι εφαρμογές αυτές χρησιμοποιούν το API για να υλοποιήσουν τις βασικές λειτουργίες ενός ημερολογίου, δηλαδή την διαχείριση και την εύκολη εύρεση συμβάντων που είναι καταχωρημένα στο Google Calendar. Αφού γίνουν οι αλλαγές αυτές θα χρειαστεί να εκτελεστεί η διαδικασία του συγχρονισμού έτσι ώστε τα νέα δεδομένα να είναι και στις υπόλοιπες εφαρμογές που έχουν πρόσβαση στο ημερολόγιο.
Στην ευρεία χρήση της υπηρεσίας συντελεί το ότι η πλατφόρμα του ημερολογίου είναι συμβατή με διάφορες γλώσσες προγραμματισμού και έτσι μπορούν να υλοποιηθούν εφαρμογές για όλες τις συσκευές με εξελιγμένο λειτουργικό σύστημα (Windows, Linux, MacOsX, Android, iOs, Windows Phone κτλ).
Οι βασικές έννοιες του συστήματος ενός ημερολογίου είναι:
\begin{itemize}
\item Συμβάν (Event) - αντιπροσωπεύει ένα συμβάν στο ημερολόγιο το οποίο έχει τίτλο, περιγραφή, ημερομηνία και συμμετέχοντες.
\item Ημερολόγιο (Calendar) - αντιπροσωπεύει ένα ημερολόγιο το οποίο περιέχει πολλά συμβάντα. Ένας χρήστης μπορεί να έχει πολλά ημερολόγια. Περιέχει επιπλέον πληροφορίες όπως η περιγραφή του ημερολογίου, ο ιδιοκτήτης κτλ.
\item Λίστα Ημερολογίων (Calendar List) - αντιπροσωπεύει μια λίστα με όλα τα ημερολόγια ενός χρήστη της υπηρεσίας αυτής.
\item Ρύθμιση (Setting) - αντιπροσωπεύει μια επιλογή του χρήστη, η οποία επηρεάζει τον τρόπο λειτουργίας της υπηρεσίας (πχ ρύθμιση ζώνης ώρας).
\item ACL (Access Control Rule) - αντιπροσωπεύει έναν κανόνα πρόσβασης του ημερολογίου (όπως παραδείγματος χάρη το αν το ημερολόγιο είναι δημόσιο ή ιδιωτικό).
\item Χρώμα (Color) - αντιπροσωπεύει το χρώμα για κάποια στοιχεία στο περιβάλλον χρήστη της εφαρμογής και τα συμβάντα.
\item Ελεύθερος / Απασχολημένος (Free / Busy) - αντιπροσωπεύει μια χρονική περίοδο στο ημερολόγιο όπου ο χρήστης είναι είτε απασχολημένος είτε ελεύθερος. Αν είναι απασχολημένος δεν μπορούν να υπάρχουν συμβάντα
σε αυτό το διάστημα.
\end{itemize}
Το API της Google λειτουργεί με “resources” και “collections” για να χειριστεί τις προαναφερθέντες έννοιες. Ένα resource αντιπροσωπεύει μια συγκεκριμένη οντότητα η οποία περιέχει δεδομένα για την εφαρμογή. Πολλά resource μαζί απαρτίζουν ένα collection το οποίο περιέχει πολλές χρήσιμες μεθόδους μαζικής διαχείρισης δεδομένων.
Οι προγραμματιστές διαμορφώνουν τον κωδικά τους έτσι ώστε να είναι συμβατός με αυτήν την δομή και έτσι η επικοινωνία με την υπηρεσία της Google να είναι ευκολότερη.
\section {Πως χρησιμοποιείται το API}
Η χρήση του API μπορεί να γίνει απευθείας με κλήσεις RESTful προς τον server της Google, είτε με χρήση κάποιων από τις έτοιμες βιβλιοθήκες που παρέχει η εταιρεία. Επίσης είναι απαραίτητη η ύπαρξη ενός λογαριασμού στην Google καθώς και η καταχώρηση του project στο Google API Console έτσι ώστε να πάρει ο προγραμματιστής ένα API Key, ένα κλειδί το οποίο είναι απαραίτητο για την χρήση της υπηρεσίας.
Αν ο προγραμματιστής επιλέξει την χρήση της RESTful μεθόδου επικοινωνίας, θα χρειαστεί αν στέλνει request σε διάφορα URL και έτσι να παίρνει απαντήσεις με τα δεδομένα που χρειάζεται. Όλες οι απαντήσεις είναι σε JSON μορφή οπότε είναι πιθανόν να χρειαστεί να τις αναλύσει (parse) πριν τις χρησιμοποιήσει στην εφαρμογή του.
Δείγματα από URL για την κλήση διαφόρων μεθόδων:
\begin{verbatim}
https://www.googleapis.com/calendar/v3/lists/calendarListID/calendar?parameters
https://www.googleapis.com/calendar/v3/users/userID/lists?parameters
\end{verbatim}
Αντιθέτως με την χρήση των έτοιμων βιβλιοθηκών οι διαδικασίες επικοινωνίας είναι έτοιμες και ο προγραμματιστής μπορεί να πετύχει την επικοινωνία με τους servers της Google γρηγορότερα και ευκολότερα.
Υπάρχουν βιβλιοθήκες για την Java, την PHP, την Python, το .NET περιβάλλον και την Ruby και πολλές άλλες γλώσσες και τεχνολογίες.
Αφού κατεβάσουμε τις βιβλιοθήκες και τις βάλουμε σε κάποιο σημείο μέσα στο project, μπορούμε να τις χρησιμοποιήσουμε μέσα από τον κώδικα:
\begin{verbatim}
require_once "../src/apiClient.php";
require_once "../src/contrib/apiCalendarService.php";
\end{verbatim}
Στην συνέχεια είναι απαραίτητο να ρυθμίσουμε κάποιες παραμέτρους έτσι ώστε να είμαστε σε θέση να χρησιμοποιήσουμε αυτήν την υπηρεσία:
\begin{verbatim}
global $apiConfig;
$apiConfig = array(
// Site name to show in Google's OAuth authentication screen
'site_name' => 'www.example.org',
// OAuth2 Setting, you can get these keys on the API Access tab on
// the Google APIs Console
'oauth2_client_id' => 'YOUR_CLIENT_ID',
'oauth2_client_secret' => 'YOUR_CLIENT_SECRET',
'oauth2_redirect_uri' => 'YOUR_REDIRECT_URL',
// The developer key; you get this from the Google APIs Console
'developer_key' => 'YOUR_DEVELOPER_KEY',
...
// Which Authentication, Storage and HTTP IO classes to use.
'authClass' => 'apiOAuth2',
....
// Definition of service specific values like scopes, OAuth token URLs, etc
'services' => array(
'calendar' => array('scope' => 'https://www.googleapis.com/auth/calendar'),
)
);
\end{verbatim}
Έπειτα θα χρειαστεί να γίνει εκκίνηση του service και να ολοκληρωθεί η διαδικασία πιστοποίησης (authenticate) με την χρήση του API Key που αντιστοιχεί στην εφαρμογή.
\begin{verbatim}
<?php
session_start();
require_once "../src/apiClient.php";
require_once "../src/contrib/apiCalendarService.php";
$apiClient = new apiClient();
$apiClient->setUseObjects(true);
$service = new apiCalendarService($apiClient);
if (isset($_SESSION['oauth_access_token'])) {
$apiClient->setAccessToken($_SESSION['oauth_access_token']);
} else {
$token = $apiClient->authenticate();
$_SESSION['oauth_access_token'] = $token;
}
...
\end{verbatim}
Με αυτόν τον τρόπο εκτελούνται οι διαδικασίες ανταλλαγής δεδομένων μεταξύ του Google Calendar και του συστήματος του προγραμματιστή.
\section{Συγχρονισμός Ραντεβού με το Google Calendar}
Ο συγχρονισμός δεδομένων μεταξύ δυο συστημάτων είναι μια περίπλοκη και υποτιμημένη διαδικασία, διότι ο προγραμματιστής έχει κάνει αρκετή δουλειά έτσι ώστε να καταφέρει να γεφυρώσει και τις δυο πηγές δεδομένων με τον καλύτερο τρόπο. Το αποτέλεσμα δεν μπορεί ποτέ να είναι 100\% επιτυχές διότι μερικές φορές τα δεδομένα και οι αλλαγές μπορεί να έρχονται σε σύγκρουση (conflict) και έτσι θα χρειαστεί να παρθούν αποφάσεις είτε με βάση κάποιους κανόνες, είτε από τον ίδιο τον χρήστη για το ποια αλλαγή θα υπερισχύσει. Το πράγμα μάλιστα δυσκολεύει περισσότερο όταν δεν υπάρχει πρόσβαση στον κώδικα του ενός από τα δύο συστήματα (πχ Google Calendar) και όλη η διαδικασία θα πρέπει να τρέξει από το άλλο.
Στην περίπτωση του Easy!Appointments θα πρέπει να υλοποιηθεί μια διαδικασία η οποία θα συγχρονίζει τα ραντεβού και τα συμβάντα του συστήματος με αυτά του Google Calendar. Η διαδικασία αυτή θα εκτελείτε όταν δημιουργούνται συγκεκριμένα συμβάντα (πχ. προσθήκη ραντεβού) και θα φέρνει και τα δύο πλάνα στην ίδια κατάσταση. Ο συγχρονισμός θα εκτελείται κάθε φορά για το πλάνο ενός πάροχου υπηρεσιών και εφόσον έχει ήδη δοθεί η άδεια στην εφαρμογή να έχει πρόσβαση στα δεδομένα του Google Calendar του συγκεκριμένου χρήστη.
Με αυτόν τον τρόπο τα ραντεβού και οι αλλαγές που θα γίνονται από τα δυο συστήματα θα συγχωνεύονται και ο χρήστης θα μπορεί να τα διαχειρίζεται και από τις δύο πλευρές. Το μόνο πρόβλημα είναι ότι από την πλευρά του Google Calendar δεν είναι δυνατό να εκκινηθεί η διαδικασία του συγχρονισμού και έτσι αυτό θα πρέπει να γίνεται πάντοτε από την πλευρά του Easy!Appointments.
Η διαδικασία αυτή θα μπορούσε να αυτοματοποιηθεί με την χρήση της μεθόδου cron job, αλλά κάτι τέτοιο θα μπορούσε να αποφέρει επιπλέον προβλήματα, μιας και είναι απαραίτητο ο χρήστης να έχει τα κατάλληλα δικαιώματα στον server για να το κάνει και αυτό δεν είναι πάντα εφικτό. Οπότε η μέθοδος αυτή απορρίπτεται λόγο αυτής της δυσκολίας.
Η μέθοδος συγχρονισμού του Easy!Appointments είναι αμφίδρομη. Με την έννοια αυτή εννοείται ότι συγχρονίζονται τόσο οι αλλαγές που γίνονται στο Easy!Appointments, όσο και οι αλλαγές που γίνονται από το Google Calendar, προσφέροντας έτσι μεγαλύτερη ελευθερία και προσβασιμότητα στα δεδομένα των χρηστών της εφαρμογής. Παρακάτω αναλύονται τα βήματα που ακολουθούνται κατα την διαδικασία του συγχρονισμού.
\begin{enumerate}
\item Η διαδικασία χωρίζεται σε δύο μέρη. Το πρώτο μέρος έχει να κάνει με τον συχρονισμό μιας ενέργειας που μόλις έχει γίνει στο Easy!Appointments (πχ ένας πελάτης πραγματοποίησε μια κράτηση στο πλάνο ενός πάροχου υπηρεσιών). Το καινούργιο αυτό ραντεβού που μόλις καταχωρήθηκε στο σύστημα θα χρειαστεί να ενσωματωθεί και στο Google Calendar. Έτσι τρέχει μια διαδικασία η οποία προσθέτει αυτό το ραντεβού στην υπηρεσία της Google.
\item Εκτός όμως του ραντεβού που δημιουργήθηκε στο Easy!Appointments, θα χρειαστεί να ληφθούν και οι αλλαγές που έχουν γίνει στο Google Calendar. Για αυτόν τον λόγο είναι απαραίτητο να ανιχνευθούν όλα τα καταχωρημένα ραντεβού και να ελεγχθούν για τυχόν αλλαγές. Επειδή αυτό όμως μπορεί να γίνει αρκετά χρονοβόρο υπάρχει μια παράμετρος στο σύστημα του Easy!Appointments η οποία καθορίζει το χρονικό διάστημα στο παρελθόν και το μέλλον, για το οποίο θέλει ο χρήστης να εκτελείται ο συγχρονισμός. Επίσης τα ραντεβού που έχουν συγχρονιστεί με το Google Calendar έχουν κρατημένο το id της εγγραφής στο σύστημα της Google, έτσι ώστε να είναι δυνατό να ανιχνευθούν οι αλλαγές που έχουν γίνει από τον χρήστη. Έτσι αν για παράδειγμα ένας χρήστης διαγράψει ένα ραντεβού από το Google Calendar το οποίο ήταν συγχρονισμένο και στο Easy!Appointments, η διαδικασία του συγχρονισμού θα καταλάβει ότι το ραντεβού λείπει και έτσι θα το διαγράψει και από το σύστημα του Easy!Appointments.
\end{enumerate}

View File

@ -0,0 +1,31 @@
\documentclass[oneside, 12pt]{book}
\usepackage{thesis}
\usepackage{tabularx}
\usepackage{epsfig}
\usepackage{hyperref}
\usepackage {color}
\hypersetup {colorlinks}
\definecolor{darkred}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\definecolor{darkblue}{rgb}{0,0,0.5}
\hypersetup{
colorlinks,
linkcolor=darkblue,
filecolor=darkgreen,
urlcolor=darkblue,
citecolor=darkred
}
%% ΤΑ ΠΑΡΑΚΑΤΩ ΕΙΝΑΙ ΥΠΟΧΡΕΩΤΙΚΑ
\renewcommand{\thesistitle}{Δημιουργία διαδικτυακού συστήματος συνατντήσεων (appointments) με χρήση Google Calendar PHP API}
\renewcommand{\thesisauthor}{Αλέξανδρος Τσελεγγίδης (2503)}
\renewcommand{\thesisauthorabbrv}{Α. Τσελεγγίδης}
\renewcommand{\thesisauthorinitials}{ΑΤ}
\renewcommand{\thesissupervisor}{Δρ. Νικόλαος Πεταλίδης, Επιστημονικός Συνεργάτης}
\renewcommand{\thesismonth}{Ιούνιος}
\renewcommand{\thesisyear}{2013}
%% ΒΙΒΛΙΟΓΡΑΦΙΑ
\addbibresource{thesis.bib}

View File

@ -1,154 +1,142 @@
%% =============================
%% GENERAL SETTINGS
%% =============================
\documentclass[12pt]{article}
\usepackage [margin=2.5cm]{geometry}
\usepackage {graphics}
\usepackage {xltxtra}
\usepackage {xgreek}
\usepackage {color}
\usepackage {hyperref}
\hypersetup {colorlinks}
\setmainfont[Mapping=tex-text]{Tahoma}
\setlength{\parindent}{0cm} %% No paragraph indent
\definecolor{darkred}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\definecolor{darkblue}{rgb}{0,0,0.5}
\hypersetup{ colorlinks,
linkcolor=darkblue,
filecolor=darkgreen,
urlcolor=darkblue,
citecolor=darkred }
%% =============================
%% DOCUMENT PROPERTIES
%% =============================
\title{{\Huge {\bf Easy!Appointments}} \\[0.3cm] Εισαγωγικό Κεφάλαιο}
\author{Αλέξανδρος Τσελεγγίδης}
\date{Νοέμβριος 2012}
%% =============================
%% DOCUMENT CONTENT
%% =============================
\begin{document}
\maketitle
\thispagestyle{empty} %% Απομάκρυνση page number από την πρώτη σελίδα
\pagebreak
%% ΕΙΣΑΓΩΓΙΚΟ ΣΗΜΕΙΩΜΑ
\section* {Εισαγωγή} %% Ο αστερίσκος δεν βάζει νούμερο στο section
Το παρόν κεφάλαιο επεξηγεί τον σκοπό ανάπτυξης του Easy!Appointments καθώς και τις ανάγκες που καλύπτει σε μια επιχείρηση. Επιπρόσθετα αναφέρονται παρόμοια συστήματα και οι διαφορές που έχουν σε σχέση με την εφαρμογή.
%% ΠΟΙΑ ΠΡΟΒΛΗΜΑΤΑ ΠΡΟΣΠΑΘΕΙ ΝΑ ΛΥΣΕΙ Η ΕΦΑΡΜΟΓΗ
\section {Ποια προβλήματα προσπαθεί να λύσει η εφαρμογή}
Οι επιχειρήσεις από την φύση τους χρειάζεται να έρχονται σε επαφή με τους πελάτες, για να μπορέσουν να τους εξυπηρετήσουν και έτσι να πάρουν την αμοιβή τους. Ανάλογα με την μορφή και το είδος της επιχείρησης, η επαφή αυτή διαφέρει. Για παράδειγμα κάποιες έρχονται σε επαφή με περισσότερους πελάτες, άλλες με λιγότερους άλλα η εξυπηρέτηση μπορεί να είναι πάλι παθητική (πχ κατάστημα ηλεκτρονικών ειδών) και κάποιες απαιτούν ιδιαίτερη προσοχή στον πελάτη καθώς η εξυπηρέτησή του μπορεί να γίνει μόνο προσωπικώς από κάποιον υπάλληλο ή επαγγελματία. Η τελευταία κατηγορία περιέχει ένα μεγάλο εύρος επιχειρήσεων το οποίο για να οργανώσει και να διευκολύνει το πελατειακό κοινό του, λειτουργεί κανονίζοντας ραντεβού με τους ενδιαφερόμενους.
\\[0.3cm]
Η κράτηση ενός ραντεβού είναι μια διαδικασία η οποία γίνεται συνήθως τηλεφωνικώς είτε μετά από προσωπικό κανονισμό με κάποιον αρμόδιο. Η διαδικασία αυτή αποτελείται συνήθως από τα παρακάτω μέρη:
\begin{enumerate}
\item Ο ενδιαφερόμενος πελάτης έρχεται σε επαφή με την επιχείρηση και ζητάει να κάνει κράτηση την επιθυμητή ημερομηνία και ώρα.
\item Ο αρμόδιος υπάλληλος ψάχνει σε κάποιο ημερολόγιο ή αρχείο υπολογιστή τα ραντεβού για την συγκεκριμένη ημερομηνία και ανάλογα με την διαθεσιμότητα ανταποκρίνεται στον πελάτη.
\item Αν η συγκεκριμένη χρονική στιγμή δεν είναι διαθέσιμη θα χρειαστεί να γίνει μια αντιπρόταση από τον υπάλληλο ή ο πελάτης να βρει κάποια άλλη στιγμή που θα είναι αυτός διαθέσιμος.
\end{enumerate}
Αν παρατηρήσουμε όμως την παραπάνω διαδικασία, θα δούμε πως έχει κάποια σημαντικά μειονεκτήματα, τα οποία μάλιστα συνεπάγονται την αύξηση του κόστους λειτουργίας μιας επιχείρησης και την μείωση της ποιότητας εξυπηρέτησης των πελατών.
\\[0.3cm]
Η ίδια η διαδικασία της κράτησης ενός ραντεβού με τον συγκεκριμένο τρόπο απαιτεί από μόνη της την ύπαρξη ενός υπαλλήλου, ο οποίος θα σπαταλάει αρκετό, αν όχι τον περισσότερο, από τον χρόνο του για να κάνει αυτήν την εργασία. Αυτό πρακτικά σημαίνει δέσμευση ανθρώπινων πόρων της επιχείρησης και συνεπάγεται στην αύξηση των εξόδων λειτουργίας.
\\[0.3cm]
Επιπλέον η ίδια η διαδικασία μπορεί να είναι χρονοβόρα και κουραστική για τους πελάτες, ειδικά στις περιπτώσεις όπου υπάρχει λίγο προσωπικό για να καλύψει μεγάλο κοινό (πχ νοσοκομεία). Στις περιπτώσεις αυτές οι πελάτες περιμένουν στην αναμονή για μεγάλο χρονικό διάστημα και μάλιστα πολλές φορές δεν πιάνουν γραμμή για να μπορέσουν να κρατήσουν κάποιο ραντεβού. Επίσης πρέπει να σημειωθεί ότι όταν ο πελάτης καταφέρει να κλείσει το ραντεβού του, συνήθως δεν έχει επιλογή για το πότε θα γίνει και απλώς ενημερώνεται για την ημερομηνία την οποία έχει ορίσει το προσωπικό, ανάλογα με τις εκάστοτε συνθήκες.
\\[0.3cm]
Εκτός αυτών η εκτέλεση αυτής της διαδικασίας είναι αρκετά επιρρεπής στο να έχει ασαφές αποτελέσματα, με την έννοια του ότι δεν υπάρχει κάποιο κοινό σημείο αναφοράς για την συμφωνία που πραγματοποιείται μεταξύ της επιχείρησης και του πελάτη, έτσι ώστε να μπορεί να γίνει εξακρίβωση και επαλήθευση των ιδιοτήτων μιας κράτησης και από τις δύο πλευρές. Αυτό μπορεί να οδηγήσει σε προβλήματα με τους πελάτες, κάτι το οποίο δεν είναι επιθυμητό σε καμία περίπτωση.
\\[0.3cm]
Μικρό είναι το μέρος των πληροφοριών που καταγράφεται με το πέρας της κράτησης, καθώς τα μέσα που χρησιμοποιούνται δεν επιτρέπουν ή κάνουν δύσκολη και χρονοβόρα την αποθήκευση όλων των δεδομένων. Αυτό συντελεί στην επιπλέον μείωση της ποιότητας εξυπηρέτησης και τις απόδοσης της επιχείρησης.
\\[0.3cm]
Τα δεδομένα αυτά διαχειρίζονται συνήθως δύσκολά. Ακόμα και στην περίπτωση που χρησιμοποιούνται ηλεκτρονικά μέσα για την αποθήκευση των κρατήσεων, η τροποποίηση ή ο έλεγχος μπορούν να είναι δύσκολες και χρονοβόρες διαδικασίες, οι οποίες εξαρτώνται κάθε φορά από το επίπεδο της οργάνωσης της επιχείρησης και τις τεχνολογίες που χρησιμοποιούνται.
\\[0.3cm]
Επίσης τα δεδομένα αυτά δεν είναι προσβάσιμα από οποιονδήποτε ανά πάσα στιγμή, αλλά μόνο στον χώρο της επιχείρησης και μόνο από το άτομο το οποίο διαχειρίζεται τα ραντεβού.
\\[0.3cm]
Τα παραπάνω προβλήματα διογκώνονται σημαντικά όταν πρόκειται για μεγάλες επιχειρήσεις και οργανισμούς, οι οποίοι εξυπηρετούν μεγάλο αριθμό πελατών.
%% ΓΙΑΤΙ ΕΙΝΑΙ ΣΗΜΑΝΤΙΚΑ ΤΑ ΠΡΟΒΛΗΜΑΤΑ ΑΥΤΑ
\section {Γιατί ειναι σημαντικά τα προβλήματα αυτά}
Οι απαιτήσεις και η ανταγωνιστικότητα που υπάρχει μεταξύ των επιχειρήσεων στην εποχή μας, απαιτεί την γρήγορη και άμεση διεκπεραίωση διεργασιών και την όσο το δυνατόν καλύτερη οργάνωση τους, για να μπορούν να παρέχουν υπηρεσίες υψηλού επιπέδου με το χαμηλότερο δυνατό κόστος και προσωπικό. Για να επιτύχουν τον σκοπό αυτό οι επιχειρήσεις πρέπει να επιλέξουν τα κατάλληλα εργαλεία οργάνωσης και εξυπηρέτησης των πελατών τους.
\\[0.3cm]
Βλέποντας τα προβλήματα που αναφέρθηκαν προηγουμένως είναι κατανοητό ότι με την χρήση της έως τώρα μεθόδου κράτησης ραντεβού, επέρχεται μείωση της ποιότητας και της απόδοσης της επιχείρησης. Αυτό σημαίνει ότι το επίπεδο εξυπηρέτησης είναι χαμηλότερο και έτσι η επιχείρηση αδυνατεί να είναι ανταγωνιστική προς τις άλλες καθώς γίνεται σπατάλη πόρων για την υλοποίηση αυτής της διαδικασίας.
\\[0.3cm]
Η μείωση αυτή επιφέρει αύξηση του κόστους λειτουργίας το οποίο αποτελεί ένα επιπρόσθετο εμπόδιο στην προσπάθεια για ανάπτυξη και επέκταση. Πολλές φορές μάλιστα αυτή η αύξηση του κόστους σε συνδιασμό με άλλους παράγοντες μπορεί να συντελέσουν στην μη βιωσιμότητα και το κλείσιμο της επιχείρησης, εφόσον αυτή δεν μπορεί να παράγει κέρδη.
\\[0.3cm]
Παρατηρούμε λοιπόν ότι η σημερινή οργάνωση των επιχειρήσεων που λειτουργούν με ραντεβού, θα μπορούσε να βελτιωθεί με την χρήση ενός ηλεκτρονικού συστήματος που θα επίλυε τα προαναφερθέντα προβλήματα και θα πρόσδιδε μεγαλύτερη ευκολία στην εξυπηρέτηση του κοινού. Η προτεινόμενη λύση αποσκοπεί στο να εκπληρώσει αυτά τα κενά και να εντάξει στο ενεργητικό της επιχείρησης ένα δυνατό εργαλείο οργάνωσης.
%% ΠΑΡΟΜΟΙΕΣ ΛΥΣΕΙΣ
\section{Παρόμοιες λύσεις που υπάρχουν ήδη}
\subsection{Genbook}
Το Genbook είναι μια online υπηρεσία που προσφέρει στις επιχειρήσεις την δυνατότητα να εγγραφούν (πληρώνοντας το αντίτιμο) και να χρησιμοποιήσουν την εφαρμογή που τους επιτρέπει να διαχειρίζονται τα ραντεβού. Παρέχει αρκετά φιλικό περιβάλλον, είναι παραμετροποιήσιμο και περιέχει την δυνατότητα παραγωγής στατιστικών στοιχείων για τις υπηρεσίες που είναι διαθέσιμες προς το κοινό.
\\[0.3cm]
Αυτό που δεν υποστηρίζει είναι η δημιουργία πολλαπλών πλάνων που να αντιπροσωπεύουν διαφορετικούς τομείς ή υπαλλήλους (όλα τα ραντεβού φαίνονται σε ένα ημερολόγιο).
\\[0.3cm]
Παρατηρήσεις : επί πληρωμή, ικανοποιητικά παραμετροποιήσιμο, δημιουργία στατιστικών
\\[0.3cm]
\href{http://www.genbook.com}{Website}
\subsection{Web Appointment Scheduling System (WASS)}
Το WASS είναι μια λύση ανοιχτού κώδικα, η οποία περιέχει τις βασικότερες λειτουργίες διαχείρισης ραντεβού για μια επιχείρηση. Από την εφαρμογή αυτή λείπουν κάποια στοιχεία διαχείρισης και παραμετροποίησης και το γραφικό περιβάλλον του χρήστη χρειάζεται επιπλέον δουλειά. Παρ' όλα αυτά είναι δωρεάν και προτείνεται για οποιαδήποτε μικρή επιχείρηση. Η εφαρμογή υποστηρίζει το iCal της Apple και την δημιουργία πολλών πλάνων.
\\[0.3cm]
Παρατηρήσεις : δωρεάν, βασικές λειτουργίες, ανοιχτός κώδικας, υποστήριξη iCal
\\[0.3cm]
\href{https://wass.princeton.edu/pages/login.page.php}{Website} |
\href{http://sourceforge.net/projects/wass/}{Source Code}
\subsection{Appointment-plus}
Το Appointment-plus είναι από τις πιο οργανωμένες και εμπλουτισμένες εφαρμογές που υπάρχουν σε αυτόν τον τομέα. Έχει εκδόσεις για οποιαδήποτε συσκευή (pc, tablets, smartphones), όμορφο περιβάλλον, υποστήριξη συγχρονισμού δεδομένων με άλλες υπηρεσίες και εφαρμογές (Google, Outlook, iCal κτλ), χρήση από πολλούς υπαλλήλους και πολλά πλάνα. Παρέχει λειτουργία αναμονής για τους πελάτες σε περίπτωση που η επιθυμητή ώρα είναι πιασμένη. Υπάρχει σύστημα email στα οποία ο πελάτης μπορεί να κάνει επιλογές και να τις αποστείλει πίσω στο σύστημα. Δυνατότητα για τροποποίηση της σελίδας που βλέπει ο χρήστης και πώλησης προϊόντων μέσω της εφαρμογής. Η εταιρεία προσφέρει σε κάθε πελάτη έναν βοηθό στον οποίο θα μπορεί να απευθυνθεί για να ρυθμίσει την εφαρμογή.
\\[0.3cm]
Παρατηρήσεις : επί πληρωμή, πλήρως παραμετροποιήσιμο, λειτουργία σε διαφορετικές συσκευές, πολλαπλά πλάνα, υποστήριξη (τηλέφωνο - email), το χρησιμοποιούν μεγάλες εταιρείες, οργανισμοί και πανεπιστημιακά ιδρύματα
\\[0.3cm]
\href{http://www.appointment-plus.com/}{Website}
\subsection{Acuity Scheduling}
Η εφαρμογή αυτή αν και πιο απλή από την Appointment-plus περιέχει όλες τις βασικές λειτουργίες που θα χρειαστεί μια επιχείρηση για την υλοποίηση ενός συστήματος ραντεβού. Υποστηρίζει την δυνατότητα τροποποίησης της εμφάνισης, δημιουργία πολλών υπαλλήλων και πλάνων, ηλεκτρονικών πληρωμών με πιστωτική κάρτα, εξαγωγή ημερολογίου σε άλλες εφαρμογές (Facebook, Google και Outlook), ιστορικό, διαχείριση πελατών και λειτουργία σε iPhone. Επίσης δίνει την δυνατότητα πώλησης προϊόντων (eshop) για ηλεκτρονικές αγορές.
\\[0.3cm]
Παρατηρήσεις : επί πληρωμή (δωρεάν για έναν χρήστη αλλά με περιορισμούς), υποστήριξη προϊόντων, iPhone, εξαγωγή σε Google, Outlook και Facebook
\\[0.3cm]
\href{http://www.acuityscheduling.com/}{Website}
\subsection{SetMore}
Το SetMore έχει απλή και όμορφη εμφάνιση και παρέχει ένα πλήρως παραμετροποιήσιμο περιβάλλον. Είναι το μόνο που υποστηρίζει sms ειδοποιήσεις και αυτό σε beta στάδιο. Η διαδικασία κράτησης ενός ραντεβού χωρίζεται όπως και με τα υπόλοιπα, σε έναν οδηγό με 4-5 βήματα στα οποία ο χρήστης επιλέγει ποια υπηρεσία και σε ποιόν υπάλληλο θέλει να κλείσει ραντεβού. Είναι πολύ εύκολο στην χρήση και υποστηρίζει το WordPress και το Facebook.
\\[0.3cm]
Παρατηρήσεις : επί πληρωμή, υποστήριξη sms, λειτουργία με WordPress και Facebook, δεν μπορεί να εξάγει τα δεδομένα του σε άλλη εφαρμογή (Google Calendar, Outlook)
\\[0.3cm]
\href{http://www.setmore.com/}{Website}
\subsection{Υπόλοιπα συστήματα}
Εκτός των αναφερθέντων υπάρχουν πολλές άλλες εφαρμογές διαθέσιμες προς το κοινό. Μερικές από αυτές αναφέρονται στην παρακάτω λίστα:
\begin{enumerate}
\item SnapAppointments
\item Doodle
\item Bookeo
\item ScheduleOnce
\item BookingBug
\item SetSter
\item Agreedo
\item BookedIn
\item Book'd
\item Schedulista
\end{enumerate}
%% ΣΕ ΤΙ ΔΙΑΦΕΡΕΙ ΑΠΟ ΤΙΣ ΥΠΟΛΟΙΠΕΣ Η ΠΡΟΤΕΙΝΟΜΕΝΗ ΛΥΣΗ
\section{Σε τι διαφέρει από τις υπόλοιπες η προτεινόμενη λύση}
Το Easy!Appointments έχει ως σκοπό να αυτοματοποιήσει την διαδικασία της κράτησης και διαχείρισης ραντεβού για οποιαδήποτε επιχείρηση. Χρησιμοποιώντας τις δυνατότητες που μας παρέχει το διαδίκτυο, μπορεί να υλοποιηθεί ένα σύστημα το οποίο να έχει την δυνατότητα να οργανώσει τα επαγγελματικά πλάνα πολλών υπαλλήλων ταυτόχρονα, επιφέροντας έτσι όχι μόνο την μείωση του χρόνου που απαιτούσαν οι παλιές μέθοδοι διαχείρισης ραντεβού, αλλά και την αύξηση της παραγωγικότητας της επιχείρησης. Οι πελάτες δεν θα χρειάζεται πλέον να τηλεφωνούν ή να πηγαίνουν στο κατάστημα, αλλά θα μπορούν να βλέπουν το πλάνο της επιχείρησης και να κλείνουν το ραντεβού την επιθυμητή ημερομηνία και ώρα, μέσω του υπολογιστή τους. Αυτό έχει ως αποτέλεσμα την ποιοτικότερη αλλά και αποδοτικότερη εξυπηρέτηση τους. Επιπρόσθετα βελτιώνεται η επικοινωνία και η οργάνωση των συντελεστών της επιχείρησης, παρέχοντας δυνατότητες αρχειοθέτησης και διαχείρισης των δεδομένων που αποθηκεύονται στο σύστημα ανά πάσα στιγμή και σε οποιοδήποτε μέρος. Σε αντίθεση με τα άλλα συστήματα, προσφέρει επιπλέον τα εξής:
\begin{enumerate}
\item {\bf Αυτόνομη Εγκατάσταση :} Η επιχείρηση που θέλει να χρησιμοποιήσει την εφαρμογή θα μπορεί να την εγκαταστήσει στον server της και να την τρέξει μαζί με κάποιο άλλο site, έχοντας έτσι πλήρη πρόσβαση στα δεδομένα και τον κώδικα. Η διαδικασία της εγκατάστασης και παραμετροποίησης θα είναι παρόμοια με άλλα συστήματα (Joomla, WordPress κτλ) και όσο πιο αυτοματοποιημένη γίνεται.
\item {\bf Προεπιλεγμένα Προφίλ Ρυθμίσεων :} To Easy!Appointments θα έρχεται μαζί με κάποια προεπιλεγμένα προφίλ ρυθμίσεων ανάλογα με το είδος της επιχείρησης, έτσι ώστε να είναι πιο εύκολο στην ρύθμισή του. Τα προφίλ αυτά θα μπορούν να αποθηκεύονται και εξωτερικά για να μπορούν να διαμοιράζονται και στην κοινότητα των χρηστών της εφαρμογής.
\item {\bf Διαμόρφωση Πρότυπου Πλάνου :} Το σύστημα θα έχει ενσωματωμένη δυνατότητα δημιουργίας πρότυπου πλάνου για τον κάθε πάροχο υπηρεσιών, το οποίο θα αποτελεί την βάση της κάθε εβδομάδας και από εκεί και πέρα ο διαχειριστής θα μπορεί να κάνει αλλαγές. Η επανάληψη του πλάνου καθώς και το από ποιά προτυπα πλάνα θα αποτελείται ένας μήνας θα συμπεριλαμβάνονται στην ρύθμιση της εφαρμογής.
\item {\bf Ρύθμιση Δικαιωμάτων Πάροχων :} Ο διαχειριστής θα έχει την δυνατότητα να ορίζει τα δικαιώματα αλλαγών και ρυθμίσεων που θα έχει στην διάθεσή του ο κάθε πάροχος υπηρεσιών. Έτσι μπορεί να διασφαλιστεί η ασφάλεια των δεδομένων όπου κρίνεται αυτό χρήσιμο, είτε να διευκολυνθεί η διαχείρηση των ραντεβού έτσι ώστε να μπορεί ο κάθε πάροχος να διαχειρίζεται τα δικά του.
\item {\bf Υποστήριξη Γραμματείας :} Αν παρόλα αυτά η εταιρεία ορίσει κάποια γραμματέα ως υπεύθυνση των ραντεβού, τότε είναι απαραίτητο να μπορεί να διαχειρίζεται μόνο αυτά και τους πελάτες που είναι καταχωρημένοι στο σύστημα. Το Easy!Appointments υποστηρίζει την δημιουργία χρηστών που αντιπροσωπεύουν αυτόν τον σκοπό.
\end{enumerate}
\end{document}
%% ΕΙΣΑΓΩΓΙΚΟ ΚΕΦΑΛΑΙΟ
%% Το μέρος του εγγράφου αυτού περιέχει τα πρώτα μέρη της διπλωματικής
%% (πρωτοσέλιδο, περιεχόμενα, πρόλογος κτλ) καθώς και ένα κεφάλαιο που
%% αναλύει και περιγράφει το πρόβλημα που επιλύει το σύστημα που αναπτήχθηκε.
\Titlepage
\Declarationpage
\begin{Abstract}
Η εργασία αυτή πραγματεύεται την υλοποίηση ενός διαδικτυακού συστήματος κρατήσεων ραντεβού για επιχειρήσεις, με πλήρη περιβάλλον διαχείρισης και την δυνατότητα συγχρονισμού των ραντεβού με το Google Calendar API. Στόχος είναι να κατασκευαστεί ένα ευέλικτο σύστημα, το οποίο να είναι σε θέση να εξυπηρετήσει τις ανάγκες οποιασδήποτε επιχείρησης, βελτιώνοντας έτσι την μηχανογράφηση και την οργάνωση της και κατ' επέκταση την απόδοση της. Όλα αυτά σαφώς συντελούν στην μείωση του κόστους λειτουργίας, κάτι το οποίο είναι πολύ σημαντικό. Για την υλοποίηση της εφαρμογής επιλέχθηκε η γλώσσα προγραμματισμού PHP και Javascript καθώς και κάποιες εξωτερικές βιβλιοθήκες κώδικα, οι οποίες φάνηκαν πολύ χρήσιμες κατά την υλοποίηση του συστήματος.
\end{Abstract}
\tableofcontents
\begin{Definitions}
Στο έγγραφο αυτό υπάρχουν κάποιες έννοιες οι οποίες χρησιμοποιούνται
σε διάφορα σημεία. Παρακάτω παρατίθενται οι περιγραφές τους.
\begin{description}
\item [Διαχειριστής] Ο διαχειριστής του συστήματος είναι ο χρήστης ο οποίος έχει όλα τα δικαιώματα αλλαγών και ρυθμίσεων του Easy!Appointments. Μπορεί να ορίσει νέες υπηρεσίες και πάροχους υπηρεσίας, να ρυθμίσει το σύστημα ειδοποιήσεων και να εκτελέσει όλες τις δυνατές διαδικασίες διαχείρισης των δεδομένων.
\item [Πάροχος Υπηρεσίας] Ο πάροχος υπηρεσίας είναι η οντότητα που εξυπηρετεί μια ή περισσότερες υπηρεσίες. Μπορεί να αντιπροσωπεύει ένα άτομο ή μια ομάδα ατόμων. Σε κάθε περίπτωση όμως διαχειρίζεται από έναν χρήστη του συστήματος.
\item [Πελάτης] Ο πελάτης αφού δει τις διαθέσιμες ημερομηνίες και ώρες για τις επιλεγμένες υπηρεσίες και παρόχους, μπορεί να κλείνει ραντεβού με την επιχείρηση. Αν γίνει οποιαδήποτε αλλαγή σε κάποιο ραντεβού του πελάτη τότε αυτός θα ενημερωθεί με σχετικό email.
\item [Γραμματέας] Ο γραμματέας είναι ένας χρήστης ο οποίος μπορεί να διαχειριστεί τα ραντεβού και τους πελάτες του συστήματος για συγκεκριμένους πάροχους υπηρεσιών. Το σε ποιους πάροχους αντιστοιχεί ο κάθε χρήστης γραμματέας ορίζεται από τον διαχειριστή στο περιβάλλον ρυθμίσεων της εφαρμογής.
\item [Πλάνο Πάροχου] Από την στιγμή που κλείνονται ραντεβού σε έναν πάροχο υπηρεσιών το ημερολογιακό του πλάνο αρχίζει να γεμίζει από χρονικά διαστήματα, τα οποία είναι δεσμευμένα και αντιπροσωπεύουν συναντήσεις με τους πελάτες. Εκτός αυτού υπάρχει και η δυνατότητα να τεθεί ένα ανενεργό χρονικό διάστημα, στο οποίο ο συγκεκριμένος πάροχος δεν θα είναι διαθέσιμος έτσι ώστε να μην μπορούν οι πελάτες να κλείνουν ραντεβού σε αυτό το διάστημα. Αυτό το πλάνο μπορεί να συγχρονιστεί με το Google Calendar έτσι ώστε να είναι προσβάσιμο και από άλλες υπηρεσίες.
\end{description}
\end{Definitions}
%% =============================================
%% ΚΕΦΑΛΑΙΟ 1 - ΕΙΣΑΓΩΓΗ
%% =============================================
\chapter{Εισαγωγή}
\leftmark\rightmark
Το παρόν κεφάλαιο επεξηγεί τον σκοπό ανάπτυξης του Easy!Appointments καθώς και τις ανάγκες που καλύπτει σε μια επιχείρηση. Επιπρόσθετα αναφέρονται παρόμοια συστήματα και οι διαφορές που έχουν σε σχέση με την εφαρμογή.
\section {Ποια προβλήματα προσπαθεί να λύσει η εφαρμογή}
Οι επιχειρήσεις από την φύση τους χρειάζεται να έρχονται σε επαφή με τους πελάτες, για να μπορέσουν να τους εξυπηρετήσουν και έτσι να πάρουν την αμοιβή τους. Ανάλογα με την μορφή και το είδος της επιχείρησης, η επαφή αυτή διαφέρει. Για παράδειγμα κάποιες επιχειρήσεις έρχονται σε επαφή με περισσότερους πελάτες, άλλες με λιγότερους αλλά η εξυπηρέτηση μπορεί να είναι παθητική (πχ κατάστημα ηλεκτρονικών ειδών) και κάποιες απαιτούν ιδιαίτερη προσοχή στον πελάτη καθώς η εξυπηρέτησή του μπορεί να γίνει μόνο προσωπικώς, από κάποιον υπάλληλο ή επαγγελματία (πάροχος της υπηρεσίας). Η τελευταία κατηγορία περιέχει ένα μεγάλο εύρος επιχειρήσεων το οποίο για να οργανώσει και να διευκολύνει το πελατειακό κοινό του, λειτουργεί κανονίζοντας ραντεβού με τους ενδιαφερόμενους πελάτες.
Η κράτηση ενός ραντεβού είναι μια διαδικασία η οποία γίνεται συνήθως τηλεφωνικώς, είτε μετά από προσωπικό κανονισμό με κάποιον αρμόδιο. Η διαδικασία αυτή αποτελείται συνήθως από τα παρακάτω μέρη:
\begin{enumerate}
\item Ο ενδιαφερόμενος πελάτης έρχεται σε επαφή με την επιχείρηση και ζητάει να κάνει κράτηση την επιθυμητή ημερομηνία και ώρα, για μια συγκεκριμένη υπηρεσία.
\item Ο αρμόδιος υπάλληλος ψάχνει σε κάποιο ημερολόγιο ή αρχείο υπολογιστή τα ραντεβού για την συγκεκριμένη ημερομηνία και ανάλογα με την διαθεσιμότητα ανταποκρίνεται στον πελάτη.
\item Αν η συγκεκριμένη χρονική στιγμή δεν είναι διαθέσιμη θα χρειαστεί να γίνει μια αντιπρόταση από τον υπάλληλο ή ο πελάτης να βρει κάποια άλλη στιγμή που θα είναι αυτός διαθέσιμος.
\end{enumerate}
Αν παρατηρήσουμε όμως την παραπάνω διαδικασία, θα δούμε πως έχει κάποια σημαντικά μειονεκτήματα, τα οποία μάλιστα συνεπάγονται την αύξηση του κόστους λειτουργίας μιας επιχείρησης και την μείωση της ποιότητας εξυπηρέτησης των πελατών.
Η ίδια η διαδικασία της κράτησης ενός ραντεβού με τον συγκεκριμένο τρόπο απαιτεί από μόνη της την ύπαρξη ενός υπαλλήλου, ο οποίος θα σπαταλάει αρκετό, αν όχι τον περισσότερο, από τον χρόνο του για να κάνει αυτήν την εργασία. Αυτό πρακτικά σημαίνει δέσμευση ανθρώπινων πόρων της επιχείρησης και συνεπάγεται στην αύξηση των εξόδων λειτουργίας.
Επιπλέον, η ίδια η διαδικασία μπορεί να είναι χρονοβόρα και κουραστική για τους πελάτες, ειδικά στις περιπτώσεις όπου υπάρχει λίγο προσωπικό για να καλύψει μεγάλο κοινό (πχ νοσοκομεία). Στις περιπτώσεις αυτές οι πελάτες περιμένουν στην αναμονή για μεγάλο χρονικό διάστημα και μάλιστα πολλές φορές δεν πιάνουν γραμμή για να μπορέσουν να κρατήσουν κάποιο ραντεβού. Επίσης πρέπει να σημειωθεί ότι όταν ο πελάτης καταφέρει να κλείσει το ραντεβού του, συνήθως δεν έχει επιλογή για το πότε θα γίνει και απλώς ενημερώνεται για την ημερομηνία την οποία έχει ορίσει το προσωπικό, ανάλογα με τις εκάστοτε συνθήκες.
Εκτός αυτών η εκτέλεση αυτής της διαδικασίας είναι αρκετά επιρρεπής στο να έχει ασαφές αποτελέσματα, με την έννοια του ότι δεν υπάρχει κάποιο κοινό σημείο αναφοράς για την συμφωνία που πραγματοποιείται μεταξύ της επιχείρησης και του πελάτη, έτσι ώστε να μπορεί να γίνει εξακρίβωση και επαλήθευση των ιδιοτήτων μιας κράτησης και από τις δύο πλευρές. Αυτό μπορεί να οδηγήσει σε προβλήματα με τους πελάτες, κάτι το οποίο δεν είναι επιθυμητό σε καμία περίπτωση.
Μικρό είναι το μέρος των πληροφοριών που καταγράφεται με το πέρας της κράτησης, καθώς τα μέσα που χρησιμοποιούνται δεν επιτρέπουν ή κάνουν δύσκολη και χρονοβόρα την αποθήκευση όλων των δεδομένων. Αυτό συντελεί στην επιπλέον μείωση της ποιότητας εξυπηρέτησης και τις απόδοσης της επιχείρησης.
Τα δεδομένα αυτά διαχειρίζονται συνήθως δύσκολα. Ακόμα και στην περίπτωση που χρησιμοποιούνται ηλεκτρονικά μέσα για την αποθήκευση των κρατήσεων, η τροποποίηση ή ο έλεγχος μπορούν να είναι δύσκολες και χρονοβόρες διαδικασίες, οι οποίες εξαρτώνται κάθε φορά από το επίπεδο της οργάνωσης της επιχείρησης και τις τεχνολογίες που χρησιμοποιούνται.
Επίσης τα δεδομένα αυτά δεν είναι προσβάσιμα από οποιονδήποτε ανά πάσα στιγμή, αλλά μόνο στον χώρο της επιχείρησης και μόνο από το άτομο το οποίο διαχειρίζεται τα ραντεβού.
Τα παραπάνω προβλήματα διογκώνονται σημαντικά όταν πρόκειται για μεγάλες επιχειρήσεις και οργανισμούς, οι οποίοι εξυπηρετούν μεγάλο αριθμό πελατών.
\section {Γιατί είναι σημαντικά τα προβλήματα αυτά}
Οι απαιτήσεις και η ανταγωνιστικότητα που υπάρχει μεταξύ των επιχειρήσεων στην εποχή μας, απαιτεί την γρήγορη και άμεση διεκπεραίωση διεργασιών και την όσο το δυνατόν καλύτερη οργάνωση τους, για να μπορούν να παρέχουν υπηρεσίες υψηλού επιπέδου με το χαμηλότερο δυνατό κόστος και προσωπικό. Για να επιτύχουν τον σκοπό αυτό οι επιχειρήσεις πρέπει να επιλέξουν τα κατάλληλα εργαλεία οργάνωσης και εξυπηρέτησης των πελατών τους.
Βλέποντας τα προβλήματα που αναφέρθηκαν προηγουμένως είναι κατανοητό ότι με την χρήση της έως τώρα μεθόδου κράτησης ραντεβού, επέρχεται μείωση της ποιότητας και της απόδοσης της επιχείρησης. Αυτό σημαίνει ότι το επίπεδο εξυπηρέτησης είναι χαμηλότερο και έτσι η επιχείρηση αδυνατεί να είναι ανταγωνιστική προς τις άλλες καθώς γίνεται σπατάλη πόρων για την υλοποίηση αυτής της διαδικασίας.
Η μείωση αυτή επιφέρει αύξηση του κόστους λειτουργίας το οποίο αποτελεί ένα επιπρόσθετο εμπόδιο στην προσπάθεια για ανάπτυξη και επέκταση. Πολλές φορές μάλιστα αυτή η αύξηση του κόστους σε συνδιασμό με άλλους παράγοντες μπορεί να συντελέσουν στην μη βιωσιμότητα και το κλείσιμο της επιχείρησης, εφόσον αυτή δεν μπορεί να παράγει κέρδη.
Παρατηρούμε λοιπόν ότι η σημερινή οργάνωση των επιχειρήσεων που λειτουργούν με ραντεβού, θα μπορούσε να βελτιωθεί με την χρήση ενός ηλεκτρονικού συστήματος που θα επίλυε τα προαναφερθέντα προβλήματα και θα πρόσδιδε μεγαλύτερη ευκολία στην εξυπηρέτηση του κοινού. Η προτεινόμενη λύση αποσκοπεί στο να εκπληρώσει αυτά τα κενά και να εντάξει στο ενεργητικό της επιχείρησης ένα δυνατό εργαλείο οργάνωσης.
\section{Παρόμοιες λύσεις που υπάρχουν ήδη}
\subsection{Genbook}
Το Genbook είναι μια online υπηρεσία που προσφέρει στις επιχειρήσεις την δυνατότητα να εγγραφούν (πληρώνοντας το αντίτιμο) και να χρησιμοποιήσουν την εφαρμογή που τους επιτρέπει να διαχειρίζονται τα ραντεβού. Παρέχει αρκετά φιλικό περιβάλλον, είναι παραμετροποιήσιμο και περιέχει την δυνατότητα παραγωγής στατιστικών στοιχείων για τις υπηρεσίες που είναι διαθέσιμες προς το κοινό.
Αυτό που δεν υποστηρίζει είναι η δημιουργία πολλαπλών πλάνων που να αντιπροσωπεύουν διαφορετικούς τομείς ή υπαλλήλους (όλα τα ραντεβού φαίνονται σε ένα ημερολόγιο).
Παρατηρήσεις : επί πληρωμή, ικανοποιητικά παραμετροποιήσιμο, δημιουργία στατιστικών
\href{http://www.genbook.com}{www.genbook.com}
\subsection{Web Appointment Scheduling System (Open Source)}
Το WASS είναι μια λύση ανοιχτού κώδικα, η οποία περιέχει τις βασικότερες λειτουργίες διαχείρισης ραντεβού για μια επιχείρηση. Από την εφαρμογή αυτή λείπουν κάποια στοιχεία διαχείρισης και παραμετροποίησης και το γραφικό περιβάλλον του χρήστη χρειάζεται επιπλέον δουλειά. Παρ' όλα αυτά είναι δωρεάν και προτείνεται για οποιαδήποτε μικρή επιχείρηση. Η εφαρμογή υποστηρίζει το iCal της Apple και την δημιουργία πολλών πλάνων.
Παρατηρήσεις : δωρεάν, βασικές λειτουργίες, ανοιχτός κώδικας, υποστήριξη iCal
\href{https://wass.princeton.edu/pages/login.page.php}{www.wass.princeton.edu} |
\href{http://sourceforge.net/projects/wass/}{www.sourceforge.net}
\subsection{Appointment-plus}
Το Appointment-plus είναι από τις πιο οργανωμένες και εμπλουτισμένες εφαρμογές που υπάρχουν σε αυτόν τον τομέα. Έχει εκδόσεις για οποιαδήποτε συσκευή (pc, tablets, smartphones), όμορφο περιβάλλον, υποστήριξη συγχρονισμού δεδομένων με άλλες υπηρεσίες και εφαρμογές (Google, Outlook, iCal κτλ), χρήση από πολλούς υπαλλήλους και πολλά πλάνα. Παρέχει λειτουργία αναμονής για τους πελάτες σε περίπτωση που η επιθυμητή ώρα είναι πιασμένη. Υπάρχει σύστημα email στα οποία ο πελάτης μπορεί να κάνει επιλογές και να τις αποστείλει πίσω στο σύστημα. Δυνατότητα για τροποποίηση της σελίδας που βλέπει ο χρήστης και πώλησης προϊόντων μέσω της εφαρμογής. Η εταιρεία προσφέρει σε κάθε πελάτη έναν βοηθό στον οποίο θα μπορεί να απευθυνθεί για να ρυθμίσει την εφαρμογή.
Παρατηρήσεις : επί πληρωμή, πλήρως παραμετροποιήσιμο, λειτουργία σε διαφορετικές συσκευές, πολλαπλά πλάνα, υποστήριξη (τηλέφωνο - email), το χρησιμοποιούν μεγάλες εταιρείες, οργανισμοί και πανεπιστημιακά ιδρύματα
\href{http://www.appointment-plus.com/}{www.appointment-plus.com}
\subsection{Acuity Scheduling}
Η εφαρμογή αυτή αν και πιο απλή από την Appointment-plus περιέχει όλες τις βασικές λειτουργίες που θα χρειαστεί μια επιχείρηση για την υλοποίηση ενός συστήματος ραντεβού. Υποστηρίζει την δυνατότητα τροποποίησης της εμφάνισης, δημιουργία πολλών υπαλλήλων και πλάνων, ηλεκτρονικών πληρωμών με πιστωτική κάρτα, εξαγωγή ημερολογίου σε άλλες εφαρμογές (Facebook, Google και Outlook), ιστορικό, διαχείριση πελατών και λειτουργία σε iPhone. Επίσης δίνει την δυνατότητα πώλησης προϊόντων (eshop) για ηλεκτρονικές αγορές.
Παρατηρήσεις : επί πληρωμή (δωρεάν για έναν χρήστη αλλά με περιορισμούς), υποστήριξη προϊόντων, iPhone, εξαγωγή σε Google, Outlook και Facebook
\href{http://www.acuityscheduling.com/}{www.acuityscheduling.com}
\subsection{SetMore}
Το SetMore έχει απλή και όμορφη εμφάνιση και παρέχει ένα πλήρως παραμετροποιήσιμο περιβάλλον. Είναι το μόνο που υποστηρίζει SMS ειδοποιήσεις και αυτό σε beta στάδιο. Η διαδικασία κράτησης ενός ραντεβού χωρίζεται όπως και με τα υπόλοιπα συστήματα, σε έναν οδηγό με 4-5 βήματα στα οποία ο χρήστης επιλέγει σε ποια υπηρεσία και σε ποιόν υπάλληλο θέλει να κλείσει ραντεβού. Είναι πολύ εύκολο στην χρήση και υποστηρίζει plugins για το WordPress και το Facebook.
Παρατηρήσεις : επί πληρωμή, υποστήριξη SMS, λειτουργία με WordPress και Facebook, δεν μπορεί να εξάγει τα δεδομένα του σε άλλη εφαρμογή (Google Calendar, Outlook)
\href{http://www.setmore.com/}{www.setmore.com}
\subsection{Υπόλοιπα συστήματα}
Εκτός των αναφερθέντων υπάρχουν πολλές άλλες εφαρμογές διαθέσιμες προς το κοινό. Μερικές από αυτές αναφέρονται στην παρακάτω λίστα:
\begin{enumerate}
\item SnapAppointments
\item Doodle
\item Bookeo
\item ScheduleOnce
\item BookingBug
\item SetSter
\item Agreedo
\item BookedIn
\item Book'd
\item Schedulista
\end{enumerate}
\section{Σε τι διαφέρει από τις υπόλοιπες η προτεινόμενη λύση}
Το Easy!Appointments έχει ως σκοπό να αυτοματοποιήσει την διαδικασία της κράτησης και διαχείρισης ραντεβού για οποιαδήποτε επιχείρηση. Χρησιμοποιώντας τις δυνατότητες που μας παρέχει το διαδίκτυο, μπορεί να υλοποιηθεί ένα σύστημα το οποίο να έχει την δυνατότητα να οργανώσει τα επαγγελματικά πλάνα πολλών υπαλλήλων ταυτόχρονα, επιφέροντας έτσι όχι μόνο την μείωση του χρόνου που απαιτούσαν οι παλιές μέθοδοι διαχείρισης ραντεβού, αλλά και την αύξηση της παραγωγικότητας της επιχείρησης. Οι πελάτες δεν θα χρειάζεται πλέον να τηλεφωνούν ή να πηγαίνουν στο κατάστημα, αλλά θα μπορούν να βλέπουν τις διαθέσιμες ώρες της επιχείρησης και να κλείνουν το ραντεβού τους την επιθυμητή ημερομηνία και ώρα, μέσω του υπολογιστή και του internet. Αυτό έχει ως αποτέλεσμα την ποιοτικότερη αλλά και αποδοτικότερη εξυπηρέτηση τους. Επιπρόσθετα βελτιώνεται η επικοινωνία και η οργάνωση των συντελεστών της επιχείρησης, παρέχοντας δυνατότητες αρχειοθέτησης και διαχείρισης των δεδομένων που αποθηκεύονται στο σύστημα ανά πάσα στιγμή και σε οποιοδήποτε μέρος. Σε αντίθεση με τα άλλα συστήματα, προσφέρει επιπλέον τα εξής:
\begin{enumerate}
\item {\bf Αυτόνομη Εγκατάσταση :} Η επιχείρηση που θέλει να χρησιμοποιήσει την εφαρμογή θα μπορεί να την εγκαταστήσει στον server της και να την τρέξει μαζί με κάποιο άλλο site, έχοντας έτσι πλήρη πρόσβαση στα δεδομένα και τον κώδικα. Η διαδικασία της εγκατάστασης και παραμετροποίησης θα είναι παρόμοια με άλλα συστήματα (Joomla, WordPress κτλ) και όσο πιο αυτοματοποιημένη γίνεται.
\item {\bf Προεπιλεγμένα Προφίλ Ρυθμίσεων :} Το Easy!Appointments θα έρχεται μαζί με κάποια προεπιλεγμένα προφίλ ρυθμίσεων ανάλογα με το είδος της επιχείρησης, έτσι ώστε να είναι πιο εύκολο στην ρύθμισή του. Τα προφίλ αυτά θα μπορούν να αποθηκεύονται και εξωτερικά για να μπορούν να διαμοιράζονται και στην κοινότητα των χρηστών της εφαρμογής.
\item {\bf Διαμόρφωση Πρότυπου Πλάνου :} Το σύστημα θα έχει ενσωματωμένη δυνατότητα δημιουργίας πρότυπου πλάνου για τον κάθε πάροχο υπηρεσιών, το οποίο θα αποτελεί την βάση της κάθε εβδομάδας και από εκεί και πέρα ο διαχειριστής θα μπορεί να κάνει αλλαγές. Η επανάληψη του πλάνου καθώς και το από ποιά προτυπα πλάνα θα αποτελείται ένας μήνας θα συμπεριλαμβάνονται στην ρύθμιση της εφαρμογής.
\item {\bf Ρύθμιση Δικαιωμάτων Πάροχων :} Ο διαχειριστής θα έχει την δυνατότητα να ορίζει τα δικαιώματα αλλαγών και ρυθμίσεων που θα έχει στην διάθεσή του ο κάθε πάροχος υπηρεσιών. Έτσι μπορεί να διασφαλιστεί η ασφάλεια των δεδομένων όπου κρίνεται αυτό χρήσιμο, είτε να διευκολυνθεί η διαχείριση των ραντεβού έτσι ώστε να μπορεί ο κάθε πάροχος να διαχειρίζεται τα δικά του.
\item {\bf Υποστήριξη Γραμματείας :} Αν παρόλα αυτά η εταιρεία ορίσει κάποια γραμματέα ως υπεύθυνση των ραντεβού, τότε είναι απαραίτητο να μπορεί να διαχειρίζεται μόνο αυτά και τους πελάτες που είναι καταχωρημένοι στο σύστημα. Το Easy!Appointments υποστηρίζει την δημιουργία χρηστών που αντιπροσωπεύουν αυτόν τον σκοπό.
\item {\bf Αμφίδρομος Συγχρονισμός με το Google Calendar :} Το σύστημα θα υποστηρίζει τον αμφίδρομο συγχρονισμό ραντεβού με το Google Calendar, κάνοντας χρήση του Google Calendar API. Με αυτόν τον τρόπο η διαχείριση των ραντεβού μπορεί να γίνει ακόμα πιο εύκολη, λαμβάνοντας υπόψιν το πόσο δημοφιλής είναι η συγκεκριμένη υπηρεσία της Google.
\end{enumerate}

View File

@ -1,57 +1,21 @@
%% =============================
%% GENERAL SETTINGS
%% =============================
\documentclass[12pt]{article}
%% ΣΕΝΑΡΙΟ ΧΡΗΣΗΣ
%% Σε αυτό το κεφάλαιο γίνεται περιγραφή ενός σεναρίου χρήσης του συστήματος
%% για κάθε έναν από τους ρόλους των χρηστών της εφαρμογής.
\usepackage [margin=2.5cm]{geometry}
\usepackage {graphics}
\usepackage {xltxtra}
\usepackage {xgreek}
\usepackage {color}
\usepackage {hyperref}
\hypersetup {colorlinks}
\setmainfont[Mapping=tex-text]{Tahoma}
\setlength{\parindent}{0cm} %% No paragraph indent
\definecolor{darkred}{rgb}{0.5,0,0}
\definecolor{darkgreen}{rgb}{0,0.5,0}
\definecolor{darkblue}{rgb}{0,0,0.5}
\hypersetup{ colorlinks,
linkcolor=darkblue,
filecolor=darkgreen,
urlcolor=darkblue,
citecolor=darkred }
%% =============================
%% DOCUMENT PROPERTIES
%% =============================
\title{{\Huge {\bf Easy!Appointments}} \\[0.3cm] Σενάριο Χρήσης}
\author{Αλέξανδρος Τσελεγγίδης}
\date{Νοέμβριος 2012}
%% =============================
%% DOCUMENT CONTENT
%% =============================
\begin{document}
\maketitle
\thispagestyle{empty} %% Απομάκρυνση page number από την πρώτη σελίδα
\pagebreak
\chapter{Σενάρια Χρήσης}
Το κεφάλαιο αυτό έχει ως στόχο να δώσει μια τυπική περιγραφή της χρήσης της εφαρμογής, για όλους τους διαθέσιμους ρόλους των χρηστών της, έτσι ώστε να γίνει περισσότερο κατανοητός ο τρόπος με τον οποίον θα λειτουργεί το σύστημα κρατήσεων ραντεβού.
%% ΣΕΝΑΡΙΟ ΧΡΗΣΗΣ ΔΙΑΧΕΙΡΙΣΤΗ
\section{Σενάριο Χρήσης Διαχειριστή}
Μετά από αρκετό καιρό χρήσης του Easy!Appointments η εταιρεία προσθέτει μια νέα υπηρεσία στο ενεργητικό της και για τον σκοπό αυτό ανοίγει ένα νέο τμήμα υπαλλήλων. Ο διαχειριστής του συστήματος πρέπει να ενημερώσει το σύστημα και να προσθέσει την νέα υπηρεσία, καθώς και τους νέους πάροχους υπηρεσιών, έτσι ώστε να μπορούν οι πελάτες να κλείνουν ραντεβού μαζί τους από εδώ και πέρα.
Μετά από αρκετό καιρό χρήσης του Easy!Appointments η εταιρεία προσθέτει μια νέα υπηρεσία στο ενεργητικό της και για τον σκοπό αυτό ανοίγει ένα νέο τμήμα υπαλλήλων. Ο διαχειριστής του συστήματος πρέπει να ενημερώσει την εφαρμογή και να προσθέσει την νέα υπηρεσία, καθώς και τους νέους πάροχους υπηρεσιών, έτσι ώστε να μπορούν οι πελάτες να κλείνουν ραντεβού μαζί τους από εδώ και πέρα. Εφόσον γίνει αυτό, οι πελάτες θα μπορούν να επιλέξουν τις αντίστοιχες εγγραφές από την φόρμα κράτησης ραντεβού.
%% ΣΕΝΑΡΙΟ ΧΡΗΣΗ ΠΑΡΟΧΟΥ ΥΠΗΡΕΣΙΩΝ
\section{Σενάριο Χρήσης Πάροχου Υπηρεσιών}
Ο πάροχος υπηρεσιών της εφαρμογής λαμβάνει μια ειδοποίηση από την εφαρμογή (email) ότι έχει γίνει μια κράτηση για ραντεβού. Βλέποντας τα στοιχεία της κράτησης και την ημερομηνία αποφασίζει ότι δεν θα μπορέσει να είναι εκείνη την στιγμή διαθέσιμος, οπότε συνδέεται στην εφαρμογή και αλλάζει την ημερομηνία του ραντεβού. Αμέσως μετά πηγαίνει στο πρόγραμμά του και ενημερώνει την χρονική στιγμή στην οποία δεν θα είναι διαθέσιμος, έτσι ώστε να μην μπορούν πλέον οι πελάτες να κάνουν κρατήσεις σε εκείνη την χρονική περίοδο. Στην συνέχεια αποστέλεται ειδοποίηση στον πελάτη και αυτός μπορεί να κρίνει αν τον βολεύει η νέα ημερομηνία. Αν όχι θα πρέπει να ακυρώσει το ραντεβού και να το ξαναπροσθέσει σε κάποια άλλη χρονική στιγμή.
Ο πάροχος υπηρεσιών της εφαρμογής λαμβάνει μια ειδοποίηση από την εφαρμογή (email) ότι έχει γίνει μια κράτηση για ραντεβού. Βλέποντας τα στοιχεία της κράτησης και την ημερομηνία αποφασίζει ότι δεν θα μπορέσει να είναι εκείνη την στιγμή διαθέσιμος, οπότε συνδέεται στην εφαρμογή και αλλάζει την ημερομηνία του ραντεβού. Αμέσως μετά πηγαίνει στο πρόγραμμά του και ενημερώνει την χρονική στιγμή στην οποία δεν θα είναι διαθέσιμος, έτσι ώστε να μην μπορούν πλέον οι πελάτες να κάνουν κρατήσεις σε εκείνη την χρονική περίοδο. Στην συνέχεια αποστέλλεται ειδοποίηση στον πελάτη και αυτός μπορεί να κρίνει αν τον βολεύει η νέα ημερομηνία. Αν όχι θα πρέπει να ακυρώσει το ραντεβού και να το ξανά-προσθέσει σε κάποια άλλη χρονική στιγμή.
%% ΣΕΝΑΡΙΟ ΧΡΗΣΗΣ ΠΕΛΑΤΗ
\section{Σενάριο Χρήσης Πελάτη}
Ο πελάτης ενδιαφέρεται να κλείσει ραντεβού στην επιχείρηση για μια συγκεκριμένη υπηρεσία. Πηγαίνει στην σελίδα της επιχείρησης και βλέπει το πλάνο, αφού έχει επιλέξει ποια υπηρεσία και ποιόν υπάλληλο προτιμάει. Στην συνέχεια επιλέγει μια χρονική στιγμή που τον βολεύει και την κατοχυρώνει. Για να ολοκληρωθεί η διαδικασία θα χρειαστεί να απαντήσει σε ένα επιβεβαιωτικό mail που θα του έρθει. Από την στιγμή αυτήν και μετά το ραντεβού έχει κατοχυρωθεί και ο πελάτης μπορεί να ενημερωθεί ανά πάσα στιγμή για την κατάστασή του.
Ο πελάτης ενδιαφέρεται να κλείσει ραντεβού στην επιχείρηση για μια συγκεκριμένη υπηρεσία. Πηγαίνει στην σελίδα της επιχείρησης και βλέπει το πλάνο, αφού έχει επιλέξει ποια υπηρεσία και ποιόν υπάλληλο προτιμάει. Στην συνέχεια επιλέγει μια χρονική στιγμή που τον βολεύει και την κατοχυρώνει. Για να ολοκληρωθεί η διαδικασία θα χρειαστεί να απαντήσει σε ένα επιβεβαιωτικό email που θα του έρθει. Από την στιγμή αυτήν και μετά το ραντεβού έχει κατοχυρωθεί και ο πελάτης μπορεί να ενημερωθεί ανά πάσα στιγμή για την κατάστασή του.
\section{Σενάριο Χρήσης Γραμματέας}
Ένας από τους πάροχους υπηρεσίας έχει κλειστεί εντελώς από ραντεβού και δεν μπορεί να δεχτεί άλλα για αυτήν την εβδομάδα. Ένας άλλος πάροχος προσφέρεται να βοηθήσει και έτσι κάποια ραντεβού πρέπει να μεταφερθούν στο ημερολογιακό πλάνο του δεύτερου πάροχου. Την διαδικασία αυτήν θα πρέπει να την αναλάβει η γραμματεία γιατί όλοι οι άλλοι είναι πολύ απασχολημένοι με το να εξυπηρετήσουν τους πελάτες τους.
\end{document}
Ένας από τους πάροχους υπηρεσίας έχει κλειστεί εντελώς από ραντεβού και δεν μπορεί να δεχτεί άλλα για αυτήν την εβδομάδα. Ένας άλλος πάροχος προσφέρεται να βοηθήσει και έτσι κάποια ραντεβού πρέπει να μεταφερθούν στο ημερολογιακό πλάνο του δεύτερου πάροχου. Την διαδικασία αυτήν θα πρέπει να την αναλάβει η γραμματεία γιατί όλοι οι άλλοι είναι πολύ απασχολημένοι με το να εξυπηρετήσουν τους πελάτες τους.

View File

@ -0,0 +1,50 @@
%% ΠΕΡΙΓΡΑΦΗ ΠΕΡΙΠΤΩΣΕΩΝ ΧΡΗΣΗΣ
%% Σε αυτό το κεφάλαιο γίνεται αναλυτική περιγραφή των περιπτώσεων χρήσης
%% του συστήματος κρατήσεων ραντεβου (βασική και εναλλακτικές ροές).
\chapter{Περιπτώσεις Χρήσης}
Σε αυτό το κεφάλαιο θα γίνει η αναλυτική περιγραφή των περιπτώσεων χρήσης του συστήματος που υλοποιήθηκε. Θα περιγραφούν τόσο η βασική ροή όσο και οι εναλλακτικές ροές για όλες τις περιπτώσεις χρήσης. Το κεφάλαιο χωρίζεται σε τμήματα ανάλογα με τον ρόλο (actor) της εφαρμογής στον οποίο ανήκουν.
\section{Περιπτώσεις Χρήσης Πελάτη}
\subsection{Κράτηση Ραντεβού}
Η βασικότερη περίπτωση χρήσης της εφαρμογής είναι η διαδικασία της κράτησης ραντεβού του πελάτη με έναν πάροχο υπηρεσίας για την υπηρεσία που τον ενδιαφέρει. Αυτή η περίπτωση χρήσης αποτελεί το βασικότερο κομμάτι, μιας και το σύστημα έχει ως στόχο την ευκολότερη διαχείριση των ραντεβού με τους πελάτες.
\textbf{ΒΑΣΙΚΗ ΡΟΗ}
Ο χρήστης μπαίνει στην σελίδα κράτησης ραντεβού και επιλέγει την υπηρεσία και τον πάροχο που τον ενδιαφέρει. Στην συνέχεια θα χρειαστεί να επιλέξει μια από τις διαθέσιμες ημερομηνίες και ώρες για να κλείσει το ραντεβού του. Αφού γίνει και αυτό θα πρέπει να συμπληρώσει τα στοιχεία του στην φόρμα που θα εμφανιστεί έτσι ώστε να μπορέσει η εταιρεία να έρθει σε επαφή μαζί του αν χρειαστεί. Τέλος ένα email θα σταλθεί πίσω στον πελάτη ότι το ραντεβού του έχει καταχωρηθεί με επιτυχία. Σε αυτό το email θα εμπεριέχεται και ένα link το οποίο θα του επιτρέπει να κάνει τροποποιήσει ή και να ακυρώσει το συγκεκριμένο ραντεβού.
\textbf{ΕΝΑΛΛΑΚΤΙΚΕΣ ΡΟΕΣ}
\begin{itemize}
\item Αν ο πελάτης αργήσει να επιλέξει ημερομηνία και στο ενδιάμεσο τον προλάβει ένας άλλος, θα πρέπει να επιστραφεί μήνυμα το οποίο θα τον προτρέψει να βρει άλλη ημερομηνία και ώρα για το ραντεβού του.
\item Όταν ο πελάτης συμπληρώνει τα στοιχεία του και αφήσει κενό ένα πεδίο το οποίο είναι υποχρεωτικό για να ολοκληρωθεί η διαδικασία, θα εμφανιστεί μήνυμα το οποίο θα τον προτρέψει να συμπληρώσει όλα τα υποχρεωτικά πεδία.
\end{itemize}
\subsection{Επεξεργασία - Ακύρωση Ραντεβού}
Εφόσον καταχωρηθεί ένα ραντεβού είναι πολύ σημαντικό να μπορέσει και να τροποποιηθεί με κάποιον τρόπο. Το σύστημα από την στιγμή που καταχωρεί ένα ραντεβού κρατάει και τα στοιχεία του πελάτη σε μια εγγραφή. Παρ' όλα αυτό δεν θα ήταν καλό να αναγκάζει τον πελάτη να δημιουργεί νέο χρήστη (με username και password) έτσι ώστε να μπορέσει να κάνει αλλαγές. Κάτι τέτοιο θα μείωνε την αποδοτικότητα της εφαρμογής μιας και προσθέτει ένα επιπλέον βήμα στην όλη διαδικασία, το οποίο μάλιστα θεωρείται εκνευριστικό αφού ένας μέσος χρήστης θα χρειαστεί να δημιουργήσει δεκάδες λογαριασμούς σε διάφορες ιστοσελίδες. Λαμβάνοντας αυτά υπόψιν για να μπορέσει ο πελάτης να πραγματοποιήσει αλλαγές ή και ακύρωση σε κάποιο ραντεβού του θα ακολουθεί έναν μοναδικό σύνδεσμο ο οποίος θα του έρχεται με email.
\textbf{ΒΑΣΙΚΗ ΡΟΗ}
Ο χρήστης ολοκληρώνει την διαδικασία κράτησης ραντεβού. Σε αυτήν την διαδικασία έχει ήδη δώσει το email του, οπότε του έρχεται ένα email το οποίο περιέχει τις πληροφορίες του ραντεβού στο οποίο έχει κάνει την κράτηση και μαζί έναν σύνδεσμο, ο οποίος επιτρέπει στον χρήστη να πραγματοποιήσει αλλαγές στο συγκεκριμένο ραντεβού ή και να το ακυρώσει. Αφού ο χρήστης ακολουθήσει τον σύνδεσμο θα βρεθεί σε μια σελίδα η οποία θα περιέχει τις πληροφορίες του ραντεβού και θα του επιτρέπει να κάνει διάφορες αλλαγές. Όταν ολοκληρώσει την διαδικασία θα πατάει ένα κουμπί το οποίο θα αποθηκεύει τις αλλαγές και ένα νέο email θα έρχεται πάλι στον χρήστη αλλά και στον συγκεκριμένο πάροχο ότι έχουν πραγματοποιηθεί αλλαγές στο πλάνο του.
\textbf{ΕΝΑΛΛΑΚΤΙΚΕΣ ΡΟΕΣ}
\begin{itemize}
\item Ο χρήστης μπορεί εν τέλη να μην θέλει να αποθηκεύσει τις αλλαγές του και έτσι να κλείσει την σελίδα ή να πατήσει το αντίστοιχο κουμπί ακύρωσης.
\item Ο διαχειριστής του συστήματος μπορεί να έχει ορίσει ένα χρονικό περιθώριο πριν το ραντεβού, στο οποίο δεν επιτρέπεται να γίνονται αλλαγές (λόγω σταθερότητας του πλάνου). Αν ο χρήστης βρίσκεται μέσα σε αυτό το περιθώριο τότε θα εμφανιστεί μήνυμα το οποίο θα τον ενημερώνει για τον λόγο τον οποίο δεν μπορεί να πραγματοποιήσει αλλαγές στο ραντεβού του.
\end{itemize}
\section {Περιπτώσεις Χρήσης Πάροχου Υπηρεσιών}
\subsection {Συγχρονισμός Πλάνου με το Google Calendar}
Βασικό στοιχείο για την χρησιμότητα και την απόδοση του συστήματος είναι η διαχείριση των δεδομένων να γίνεται από πολλά συστήματα. Κάτι τέτοιο μπορεί να επιτεφθχεί με τον συγρονισμό των ραντεβού με το Google Calendar API. Σε αυτό ο χρήστης θα μπορεί να πραγματοποιεί αλλαγές στο πλάνο του μέσω του Google Calendar και αυτές να εφαρμόζονται και στο σύστημα κρατήσεων ραντεβού, κάνοντας έτσι την εργασία του πολύ εύκολη.
\textbf{ΒΑΣΙΚΗ ΡΟΗ}
Ο χρήστης βλέπει το πλάνο του μέσω της υπηρεσίας Google Calendar και προσθέτει ένα συμβάν κατά την διάρκεια του οποίο δεν είναι διαθέσιμος. Έπειτα από λίγο τρέχει χειροκίνητα τον συγχρονισμό από το Easy!Appointments και αυτό ανακαλύπτει ότι υπάρχει ένα νέο συμβάν στο Google Calendar το οποίο δεν είναι καταχωρημένο στην βάση δεδομένων του. Αμέσως μετά παίρνει τα στοιχεία του νέου συμβάντος μέσω του API που παρέχει η Google και το αποθηκεύει στην βάση δεδομένων έτσι ώστε να μην είναι διαθέσιμος ο πάροχος την συγκεκριμένη χρονική στιγμή. Την επόμενη φορά που θα πάει ένας πελάτης να κλείσει ραντεβού με τον συγκεκριμένο πάροχο θα δει ότι το συγκεκριμένο χρονικό διάστημα δεν είναι διαθέσιμο.
\textbf{ΕΝΑΛΛΑΚΤΙΚΕΣ ΡΟΕΣ}
\begin{itemize}
\item Υπάρχει η περίπτωση στην οποία ο πάροχος έχει πραγματοποιήσει αλλαγές στο Google Calendar και στο Easy!Appointments ταυτόχρονα, χωρίς να έχει τρέξει η διαδικασία του συγχρονισμού. Σε αυτήν την περίπτωση υπάρχει μεγάλη πιθανότητα να δημιουργηθεί κάποια σύγκρουση (conflict) και να υπάρχουν δυο συμβάντα τα οποία να ανταποκρίνονται στην ίδια χρονική περίοδο. Σε αυτήν την κατάσταση ο χρήστης είναι υπεύθυνος να λύσει την σύγκρουση μεταξύ των δύο συμβάντων και να φέρει το πλάνο του στην σωστή του μορφή.
\item Πιθανό είναι επίσης να γίνει μια αλλαγή σε ένα συγχρονισμένο συμβάν στο Google Calendar το οποίο όμως να έχει αλλαχθεί και στο Easy!Appointments. Σε αυτήν την περίπτωση θεωρείται ότι υπερισχύει η αλλαγή που έχει γίνει στο Easy!Appointmets διότι δεν υπάρχει η δυνατότητα να ελεγχθεί και στα δύο συστήματα το πότε (χρονική στιγμή) έχει γίνει η τροποποίηση.
\end{itemize}

54
doc/thesis/thesis.bib Normal file
View File

@ -0,0 +1,54 @@
@Book{goosens93,
Hyphenation = {english},
author = {Michel Goosens and Frank Mittelbach},
title = {The \LaTeX Companion},
publisher = {Addison-Wesley Publishing Company},
year = 1993
}
@article{Schmidt98,
Hyphenation = {english},
Author = {Frank L. Schmidt and John E. Hunter},
Journal = {Psychological Bulletin},
Number = 2,
Pages = {262--274},
Title = {The Validity and Utility of Selection Methods in
Personnel Psychology: Practical and Theoretical
Implications of 85 Years of Research Findings},
Volume = 124,
Year = 1998
}
@Book{Chatzigeorgiou05,
Hyphenation = {greek},
author = {Αλέξανδρος Ν. Χατζηγεωργίου},
title = {Αντικειμενοστρεφής Σχεδίαση: UML, Αρχές Πρότυπα και Ευρετικοί Κανόνες},
publisher = {Κλειδάριθμος},
year = 2005}
@Book{Sommerville09,
Hyphenation = {english},
author = {Ian Sommerville},
title = {Βασικές Αρχές Τεχνολογίας Λογισμικού},
publisher = {Κλειδάριθμος},
year = 2009}
@INPROCEEDINGS{4343930,
author={Cousot, P.},
Hyphenation = {english},
booktitle={Software Engineering and Formal Methods, 2007. SEFM 2007. Fifth IEEE International Conference on},
title={The Role of Abstract Interpretation in Formal Methods},
year={2007},
pages={135--140}
}
@MISC{Wikipedia_BibTeX,
Hyphenation = {english},
author = {Wikipedia},
title = {BibTeX},
url = {http://en.wikipedia.org/wiki/BibTeX},
year = {2011},
urldate = {2011-03-22}
}

BIN
doc/thesis/thesis.pdf Normal file

Binary file not shown.

450
doc/thesis/thesis.sty Normal file
View File

@ -0,0 +1,450 @@
% ΤΕΙ Σερρών
% Σχολή Τεχνολογικών Εφαρμογών
% Τμήμα Πληροφορικής και Επικοινωνιών
% Πτυχιακή εργασία
%
% Nicholaos Petalidis, 15/08/1998
% icdthesis.sty Style file for TEI of SERRES, ICD, final year
% dissertation thesis
% Copyright (C) yyyy name of author
% This program is free software; you can redistribute it and/or
% modify it under the terms of the GNU General Public License
% as published by the Free Software Foundation; either version 2
% of the License, or (at your option) any later version.
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
%---------------------------Identification Part--------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{icdthesisUTF}
%--------------------------Initial Code----------------------------------------
% This part is empty
%--------------------------Declaration of Options------------------------------
\DeclareOption{a4paper}{\setlength{\paperheight}{297mm}%
\setlength{\paperwidth}{210mm}}
\ExecuteOptions{a4paper,12pt}
\ProcessOptions
%-------------------------Package Loading--------------------------------------
\RequirePackage{polyglossia}
\RequirePackage{fontspec} % necessary of XeTeX
\RequirePackage{xunicode} % Unicode from accented glyphs
\RequirePackage{xltxtra} % loads fixltx2e, etex, xunicode, fontspec
%\RequirePackage{xgreek} % for greek documents
\RequirePackage[backend=biber,bibencoding=utf8,natbib=false,bibstyle=authoryear,citestyle=authoryear,babel=hyphen]{biblatex}
\RequirePackage{ifthen}
\RequirePackage{url}
\RequirePackage{csquotes}
\RequirePackage[font=small,format=plain,labelfont=bf]{caption}
\setdefaultlanguage{greek}
\setotherlanguage{english}
%set fonts required by the guidelines
\setmainfont[Mapping=tex-text]{Times New Roman}
\setmonofont[Mapping=tex-text]{Courier New}
%\setmonofont[Script=Latin,Mapping=tex-text]{Courier New}
%\newfontfamily\greekfont[Script=Greek,Mapping=tex-text]{Times New Roman}
%Redefine greek font family because some fonts although they have greek glyphs they
%do not explicitly support the Greek script
\newfontfamily\greekfont[Mapping=tex-text]{Times New Roman}
\newfontfamily\greekfonttt[Mapping=tex-text]{Courier New}
\newfontfamily\greekfontsf[Mapping=tex-text]{Arial}
\gappto\captionsgreek{\renewcommand{\figurename}{Διάγραμμα}}
\gappto\captionsgreek{\renewcommand{\listfigurename}{Κατάλογος διαγραμμάτων}}
%--------------------------- Main Code-----------------------------------------
\typeout{----------------------------------------------------------------------}
\typeout{- Τμήμα Πληροφορικής και Επικοινωνιών }
\typeout{- ΤΕΙ Σερρών, version 0.3, 27/11/2011 }
\typeout{- Nicholaos Petalidis, nikos <at> petalidis.gr }
\typeout{-----------------------------------------------------------------------}
%\tracingmacros=1
%\tracingcommands=1
%-----------------------Set up margins-----------------------------------------
% Define hoffset to be -1in. This way calculations start from 0in
% from the left side of the paper instead of 1in.
\setlength{\hoffset}{-1in}
% Define the left margin to be 40mm
% No need to set evensidemargin for one-sided printing
% 40mm = 114pt
\setlength{\oddsidemargin}{114pt}
% Define the right margin to be 15mm
% Leave the marginparsep unchanged
% Set the maginparwidth to be the remaining space from marginparsep
% 25mm = 71pt
\setlength{\marginparwidth}{71pt}
\addtolength{\marginparwidth}{-\marginparsep}
\setlength{\marginparpush}{0mm}
% Calculate the textwidth:
% This is a bit difficult. The standard says there must be around 60-70
% characters per line... I reckon that a textwidth of around 120mm
% should give 60-70 characters of 11pt size.
% On the other hand I don't like the output, (lines look too short)
% so I have put it to the maximum: 14.5mm = 413pt
\setlength{\textwidth}{413pt}
% An update:
% The width of the a4 : 210mm
% The width of the left margin : 40mm
% The width of the right margin: 25mm
% The width of the text: 145mm
% The standard says ``all other margins should be at least 15mm''
% This includes the top and bottom margin
% Define voffset to be -1in. This way calculations start from 0in
% from the top side of the paper instead of 1in.
\setlength{\voffset}{-1in}
% Define the topmargin to be 15mm
% This is the minimum recommended top margin
\setlength{\topmargin}{43pt}
% Define the distance between the heading (page number) and the text
% to be 8mm = 23pt
\setlength{\headsep}{23pt}
% Define the height of a heading to be 12pt
\setlength{\headheight}{12pt}
% Define the distance between the bottom of a footnote and
% the bottom of the text to be 10.5mm=30pt
\setlength{\footskip}{30pt}
% Change the textheight so that the bottom margin is 15mm=43pt
\setlength{\textheight}{695pt}
%------------------Typography--------------------------------------------------
%Paragraphs should be indented 5-10mm with no additional space between
%paragraphs. I set the indent to be 7.5 mm
\setlength{\parindent}{7.5mm}
%Set the spacing between lines to one and a half
\renewcommand{\baselinestretch }{1.5}
%----------Set up commands----------------------------------------------------
\newcommand{\thesistitle}{A title}
\newcommand{\thesisauthorsex}{male}
\newcommand{\thesisauthor}{Ένας Σπουδαστής}
\newcommand{\thesisauthorabbrv}{Ε. Σπουδαστής}
\newcommand{\thesisauthorinitials}{ΕΑ}
\newcommand{\thesisSecondAuthor}{}
\newcommand{\thesisSecondAuthorabbrv}{Ε. Σπουδαστής}
\newcommand{\thesisSecondAuthorInitials}{}
\newcommand{\thesissupervisor}{Ν. Πεταλίδης}
\newcommand{\thesismonth}{August}
\newcommand{\thesistype}{Thesis}
\newcommand{\degreetitle}{Πτυχίο}
\newcommand{\degreetitleabbr}{Πτυχίο}
\newcommand{\thesisyear}{1900}
\newcommand{\thesisschool}{Σχολή Τεχνολογικών Εφαρμογών}
\newcommand{\thesisuniversity}{ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΣΕΡΡΩΝ}
\newcommand{\thesisdepartment}{Τμήμα Πληροφορικής \& Επικοινωνιών}
%--------------------Format the page style-------------------------------------
%According to BS 4821 page numbers should appear at the top outer corner
% First define a heading that has a page number on the top outer corner
\renewcommand{\ps@myheadings}{%
\renewcommand{\@oddhead}{\hfil\thepage}%
\renewcommand{\@evenhead}{\@oddhead}%
\renewcommand{\@evenfoot}{}% empty
\renewcommand{\@oddfoot}{}% empty
}
% The standard wants page numbers to appear in the top outer corner.
% To overcome the problems with the \chapter, \tableofcontents
% pagestyles I redefine the plain page style to be that of myheadings
\let\ps@plain=\ps@myheadings
% Apparently most definitions use @mkboth instead of markboth.
% This command does nothing in myheadings so I have to redefine it
\renewcommand{\@mkboth}{\markboth}
% **************************TITLE PAGE**********************************
% A specimen is provided in the handbook for a title page.
% Apparenrtly the specimen is wrong and everything should be centered
% instead of being flushed-left. In that specimen the title and author
% name appears in upper case. I have it in upper case here as well.
\newcommand{\Titlepage}{
\thispagestyle{empty}
\begin{center}
%\fontsize{12pt}{\baselineskip}\selectfont
\MakeUppercase{\textbf{\thesisuniversity}}\\
\MakeUppercase{\textbf{\thesisschool}}\\
\MakeUppercase{\textbf{\thesisdepartment}}\\
\vfill
%\fontsize{16}{\baselineskip}\selectfont % The standard requires 16pt
% for the title page
\Large{\MakeUppercase{\textbf{\thesistitle}}}
%\fontsize{14}{\baselineskip}\selectfont % The standard requires 14pt
% for the title page
\vfill
\large{
\ifthenelse{\equal{\thesisSecondAuthor}{}}{
\ifthenelse{\equal{\thesisauthorsex}{male}}
{\textbf{Πτυχιακή εργασία του}\\\thesisauthor}
{\textbf{Πτυχιακή εργασία της}\\\thesisauthor}}
{\textbf{Πτυχιακή εργασία των}\\\thesisauthor\\\thesisSecondAuthor}
\\Επιβλέπων: \thesissupervisor}
\vfill
%\fontsize{12}{\baselineskip}\selectfont % The standard requires
\MakeUppercase{\textbf{ΣΕΡΡΕΣ, \thesismonth\ \thesisyear}}
\end{center}
% Make the default to be myheadings
\pagestyle{myheadings}
}
%**********************************************************************
% *****************************ABSTRACT********************************
% Not much information is provided about the abstract so I took
% the liberty of creating my own:-)
\newcommand{\thesisabstract}{Σύνοψη}
\newcommand{\@thesisabstract}{\thesisabstract}
\newenvironment{Abstract}
{
\chapter*{\@thesisabstract
\@mkboth{}
{}}
\addcontentsline{toc}{chapter}{\@thesisabstract}
}
{}
%**********************************************************************
% *************************ACKNOWLEDGEMENTS****************************
\newcommand{\thesisacknowledgementhead}{Ευχαριστίες}
\newcommand{\@thesisacknowledgementhead}{\thesisacknowledgementhead}
\newenvironment{Acknowledgement}
{
\chapter*{\@thesisacknowledgementhead
\@mkboth{}{}}
\addcontentsline{toc}{chapter}{\@thesisacknowledgementhead}
}
{}
%********************************************************************
% ******************************PREFACE******************************
\newcommand{\thesispreface}{Πρόλογος}
\newcommand{\@thesispreface}{\thesispreface}
\newenvironment{Preface}
{
\chapter*{\@thesispreface
\@mkboth{}{}}
\addcontentsline{toc}{chapter}{\@thesispreface}
}
{ }
%**********************************************************************
% ******************************AUTHORS DECLARATION********************
\newcommand{\thesisdeclaration}{Υπεύθυνη δήλωση}
\newcommand{\@thesisdeclaration}{\thesisdeclaration}
\newenvironment{Declaration}
{
\chapter*{\@thesisdeclaration
\@mkboth{}{}}
\addcontentsline{toc}{chapter}{\@thesisdeclaration}
}
{ }
\newcommand{\Declarationpage}{
\vfill
\begin{Declaration}
\textbf{\underline{Υπεύθυνη Δήλωση}}:
\ifthenelse{\equal{\thesisSecondAuthor}{}}{
Βεβαιώνω ότι είμαι συγγραφέας αυτής της πτυχιακής εργασίας και ότι κάθε βοήθεια
την οποία είχα για την προετοιμασία της, είναι πλήρως
αναγνωρισμένη και αναφέρεται στην πτυχιακή εργασία. Επίσης έχω
αναφέρει τις όποιες πηγές από τις οποίες έκανα χρήση δεδομένων,
ιδεών ή λέξεων, είτε αυτές αναφέρονται ακριβώς είτε
παραφρασμένες. Επίσης βεβαιώνω ότι αυτή η πτυχιακή εργασία
προετοιμάστηκε από εμένα προσωπικά ειδικά για τις απαιτήσεις του
προγράμματος σπουδών του Τμήματος Πληροφορικής \& Επικοινωνιών
του Τ.Ε.Ι. Σερρών.
}
{Βεβαιώνουμε ότι είμαστε συγγραφείς αυτής της πτυχιακής εργασίας και ότι κάθε βοήθεια
την οποία είχαμε για την προετοιμασία της, είναι πλήρως
αναγνωρισμένη και αναφέρεται στην πτυχιακή εργασία. Επίσης έχουμε
αναφέρει τις όποιες πηγές από τις οποίες κάναμε χρήση δεδομένων,
ιδεών ή λέξεων, είτε αυτές αναφέρονται ακριβώς είτε
παραφρασμένες. Επίσης βεβαιώνουμε ότι αυτή η πτυχιακή εργασία
προετοιμάστηκε από εμάς προσωπικά ειδικά για τις απαιτήσεις του
προγράμματος σπουδών του Τμήματος Πληροφορικής \& Επικοινωνιών
του Τ.Ε.Ι. Σερρών. }
\end{Declaration}
}
%**********************************************************************
% ******************************DEFINITIONS****************************
\newcommand{\thesisdefinitions}{Ορισμοί}
\newcommand{\@thesisdefinitions}{\thesisdefinitions}
\newenvironment{Definitions}
{
\chapter*{\@thesisdefinitions
\@mkboth{}{}}
\addcontentsline{toc}{chapter}{\@thesisdefinitions}
}
{}
%**********************************************************************
%****************************Starting the main text!*******************
% The following code tries to fix ``running heads''
% Running heads are not necessary but if they exist they should
% give the author's name with initials, year of submission and
% chapter number or heading
% First make it show the chapter number and heading
\renewcommand{\chaptermark}[1]{\markboth{\
\thechapter. #1}{\
\thechapter. #1}}
\renewcommand{\sectionmark}[1]{\markright{\thesection. #1}}
% Now redefine myheadings to include all the relevant information
\newcommand{\Startpage}{\renewcommand{\ps@myheadings}{%
\renewcommand{\@oddhead}{\leftmark,\
~\thesisauthorabbrv,\thesisSecondAuthorabbrv\
~\thesisyear\hfil\thepage}%
\renewcommand{\@evenhead}{\@oddhead}%
\renewcommand{\@evenfoot}{}% empty
\renewcommand{\@oddfoot}{}% empty
}
\pagestyle{myheadings}}
%**************************************************************************
%*******************************GLOSSARY*******************************
\newcommand{\thesisglossary}{Γλωσσάρι}
\newcommand{\@thesisglossary}{\thesisglossary}
\newenvironment{Glossary}
{
\chapter*{\@thesisglossary
\@mkboth{\thesisglossary}{\thesisglossary}}
\addcontentsline{toc}{chapter}{\@thesisglossary}
}
{ }
%**************************************************************************
%**********************************************************************
% Code shamelessly stolen follows now!
% ******************************APPENDIX*******************************
%% The following is taken from: csthesis.cls (Edinburgh University)
%% I changed the numbering to be arabic.
%% Redefine the appendix command to ensure that it does a pagebreak
%% (sorts problem of Appendix appearing in header of last page before
%% the first apppendix).
%%
%\renewcommand{\appendixname}{Παράρτημα}
\renewcommand{\appendix}{\vfill\pagebreak
\setcounter{chapter}{0}%
\setcounter{section}{0}%
\renewcommand\@chapapp{\appendixname}%
\renewcommand\chaptername{\appendixname}%
\renewcommand\thechapter{\@arabic\c@chapter}
}
%
% ************************Table of contents****************************
%
% The following code is taken from report.cls (c) LaTeX 3 Project
% I changed a little bit the definitions in order to produce running
% heads according to the BS standard
\renewcommand\tableofcontents{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\contentsname
\@mkboth{%
\hfil\thepage}{\hfil\thepage}}%
\@starttoc{toc}%
\if@restonecol\twocolumn\fi
}
\renewcommand\listoffigures{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\listfigurename
\@mkboth{\hfil\thepage}%
{\hfil\thepage}}%
\@starttoc{lof}%
\if@restonecol\twocolumn\fi
}
\renewcommand\listoftables{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse
\fi
\chapter*{\listtablename
\@mkboth{%
\hfil\thepage}{\hfil\thepage}}%
\@starttoc{lot}%
\if@restonecol\twocolumn\fi
}
% ******************************REFERENCES*****************************
%%%
%%% Command from report.cls, (c) LaTeX3 Project.
%%%
% \renewenvironment{thebibliography}[1]
% {\chapter*{\bibname
% \@mkboth{\bibname}{\bibname}}%
% \addcontentsline{toc}{chapter}{\bibname}
% \list{\@biblabel{\@arabic\c@enumiv}}%
% {\settowidth\labelwidth{\@biblabel{#1}}%
% \leftmargin\labelwidth
% \advance\leftmargin\labelsep
% \@openbib@code
% \usecounter{enumiv}%
% \let\p@enumiv\@empty
% \renewcommand\theenumiv{\@arabic\c@enumiv}}%
% \sloppy
% \clubpenalty4000
% \@clubpenalty \clubpenalty
% \widowpenalty4000%
% \sfcode`\.\@m}
% {\def\@noitemerr
% {\@latex@warning{Empty `thebibliography' environment}}%
% \endlist}
\newcommand{\citep}[1]{\parencite{#1}}

20
doc/thesis/thesis.tex Normal file
View File

@ -0,0 +1,20 @@
%% -----------------------------------------------------------
%% EASY!APPOINTMENTS THESIS
%%
%% STUDENT : ALEXANDROS TSELEGIDIS
%% INSTITUTION : TEI SERRON
%% DEPARTMENT : INFORMATION AND COMMUNICATION SCIENCE
%% DATE : JUNE 2013
%%
%% THIS FILE CONTAINS THE BSC THESIS FOR THE EASY!APPOINTMENTS
%% APPLICATION. THE DOCUMENT IS SPLIT INTO MULTIPLE FILES, IN
%% ORDER TO BE MORE FLEXIBLE AND EASY TO MAINTAIN.
%% -----------------------------------------------------------
\input{includes/headers.tex}
\begin{document}
\input{includes/introduction.tex}
\input{includes/google-calendar-api.tex}
\input{includes/external-tools.tex}
\input{includes/usage-scenarios.tex}
\input{includes/use-cases.tex}
\end{document}