diff --git a/doc/thesis/includes/external-tools.tex b/doc/thesis/includes/external-tools.tex index e1ef8486..7c981da6 100644 --- a/doc/thesis/includes/external-tools.tex +++ b/doc/thesis/includes/external-tools.tex @@ -4,16 +4,16 @@ %% κρατήσεων ραντεβού. \chapter{Εξωτερικά Εργαλεία} -Εκτός του Calendar API και των βιβλιοθηκών που παρέχει η Google, έχουν χρησιμοποιηθεί και κάποια άλλα εργαλεία ανάπτυξης λογισμικού, τα οποία βοήθησαν στην άρτια και ποιοτικότερη παραγωγή του συστήματος κρατήσεων ραντεβού. Τα εργαλεία αυτά είναι όλα ανοιχτού κώδικα (open source) και έχουν στόχο να βοηθήσουν τον προγραμματιστή να επικεντρωθεί περισσότερο σε αυτό που έχει να κάνει και όχι τόσο στα τετριμμένα πράγματα τα οποία αποσπούν μεγάλο χρονικό διάστημα άσκοπα. Εν ολίγοις πρόκειται για ένα σύνολο από διάφορα framework τα οποία είναι πολύ χρήσιμα για οποιαδήποτε ανάπτυξη λογισμικού. +Εκτός του Calendar API και των βιβλιοθηκών που παρέχει η Google, έχουν χρησιμοποιηθεί και κάποια άλλα εργαλεία ανάπτυξης λογισμικού τα οποία βοήθησαν στην άρτια και ποιοτικότερη παραγωγή του συστήματος κρατήσεων ραντεβού. Τα εργαλεία αυτά είναι όλα ανοιχτού κώδικα (open source) και έχουν στόχο να βοηθήσουν τον προγραμματιστή να επικεντρωθεί περισσότερο σε αυτό που έχει να κάνει και όχι τόσο στα τετριμμένα πράγματα τα οποία αποσπούν μεγάλο χρονικό διάστημα άσκοπα. Εν ολίγοις πρόκειται για ένα σύνολο από διάφορα framework τα οποία είναι πολύ χρήσιμα για οποιαδήποτε ανάπτυξη λογισμικού. \section{CodeIgniter} -Το CodeIgniter είναι ένα PHP framework το οποίο έχει ως στόχο την αποδοτικότητα και την ταχύτητα, μιας και καταναλώνει πολύ λίγους υπολογιστικούς πόρους σε αντίθεση με άλλα βοηθητικά συστήματα του είδους του. Θετικό στοιχείο είναι ότι είναι πολύ απλό στην χρήση, δίνει την δυνατότητα στον προγραμματιστή να παραμετροποιήσει τον πυρήνα του καταπώς τον βολεύει και βασίζεται στην αρχιτεκτονική MVC (Model - View - Controller). Όντας έργο ανοιχτού λογισμικού, κατέχει μια μεγάλη κοινότητα που το υποστηρίζει και επίσης προσφέρει μια καλά ενημερωμένη γνωσιακή βάση, η οποία μπορεί να καθοδηγήσει τον προγραμματιστή στο πως θα χρησιμοποιήσει το framework. +Το CodeIgniter είναι ένα PHP framework το οποίο έχει ως στόχο την αποδοτικότητα και την ταχύτητα μιας και καταναλώνει πολύ λίγους υπολογιστικούς πόρους σε αντίθεση με άλλα βοηθητικά συστήματα του είδους του. Θετικό στοιχείο είναι ότι είναι πολύ απλό στην χρήση, δίνει την δυνατότητα στον προγραμματιστή να παραμετροποιήσει τον πυρήνα του καταπώς τον βολεύει και βασίζεται στην αρχιτεκτονική MVC (Model - View - Controller). Όντας έργο ανοιχτού λογισμικού κατέχει μια μεγάλη κοινότητα που το υποστηρίζει και επίσης προσφέρει μια καλά ενημερωμένη γνωσιακή βάση, η οποία μπορεί να καθοδηγήσει τον προγραμματιστή στο πως θα χρησιμοποιήσει το framework. Η αρχιτεκτονική MVC είναι η πλέον διαδεδομένη κυρίως στις διαδικτυακές εφαρμογές αφού αποσκοπεί στην καλύτερη οργάνωση και συντήρηση του κώδικα. Ουσιαστικά πρόκειται για τον διαχωρισμό της εφαρμογής σε τρία μέρη: \begin{enumerate} -\item Models: Περιέχουν συναρτήσεις και μεθόδους που αλληλεπιδρούν με την βάση δεδομένων. Χρησιμοποιούνται σε διάφορες περιπτώσεις από τους Controllers. Με αυτόν τον τρόπο επιτυγχάνεται η επαναχρησιμοποίηση ενός μέρος του κώδικα, κάτι το οποίο είναι πολύ σημαντικό στην αρχιτεκτονική ενός συστήματος. +\item Models: Περιέχουν συναρτήσεις και μεθόδους που αλληλεπιδρούν με την βάση δεδομένων. Χρησιμοποιούνται σε διάφορες περιπτώσεις από τους Controllers. Με αυτόν τον τρόπο επιτυγχάνεται η επαναχρησιμοποίηση ενός μέρους του κώδικα, κάτι το οποίο είναι πολύ σημαντικό στην αρχιτεκτονική ενός συστήματος. \item Views: Τα views είναι τα κομμάτια κώδικα τα οποία παράγουν το αποτέλεσμα το οποίο βλέπει ο χρήστης κάθε φορά. Στόχος τους είναι απλώς να δείξουν και όχι να υπολογίσουν ή να φέρουν κάποια δεδομένα (αυτό είναι δουλειά των άλλων δυο τμημάτων της αρχιτεκτονικής). Κάθε φορά που χρειάζεται να αλλάξει κάτι στην εμφάνιση του συστήματος μπορεί να γίνει αλλαγή στο αντίστοιχο view χωρίς να επηρεαστούν τα άλλα συστήματα. -\item Controllers: Το μέρος αυτό του συστήματος αναλαμβάνει να οργανώσει τα άλλα δυο. Κάθε φορά που πρέπει να παραχθεί μια σελίδα, η διαδικασία θα ξεκινήσει από τον αντίστοιχο controller. Αυτός στην συνέχεια θα καλέσει τις απαραίτητες συναρτήσεις και θα παρέχει τα δεδομένα που απαιτεί το view για να εμφανιστεί σωστά η σελίδα. +\item Controllers: Το μέρος αυτό του συστήματος αναλαμβάνει να οργανώσει τα άλλα δυο. Κάθε φορά που πρέπει να παραχθεί μια σελίδα η διαδικασία θα ξεκινήσει από τον αντίστοιχο controller. Αυτός στην συνέχεια θα καλέσει τις απαραίτητες συναρτήσεις και θα παρέχει τα δεδομένα που απαιτεί το view για να εμφανιστεί σωστά η σελίδα. \end{enumerate} \begin{figure} @@ -26,15 +26,15 @@ Το σύστημα που υλοποιήθηκε χρησιμοποιεί το CodeIgniter για την κάλυψη των βασικών εργασιών έτσι ώστε να υπάρχει η δομή MVC στον κώδικα. Επίσης γίνεται χρήση της ενσωματωμένης βιβλιοθήκης επικοινωνίας με την βάση δεδομένων. Εκτός αυτών των δύο, ο υπόλοιπος κώδικας έχει γραφεί κανονικά και τηρεί τις προϋποθέσεις της πτυχιακής εργασίας. \section {jQuery \& jQuery UI} -Ένα μεγάλο μέρος των σύγχρονων διαδικτυακών εφαρμογών βασίζει την λειτουργία του σε κώδικα Javascript έτσι ώστε να κάνει το λογισμικό πιο φιλικό προς τον χρήστη. Διάφορες βιβλιοθήκες έχουν δημιουργηθεί τα τελευταία χρόνια που στόχο έχουν την εξέλιξη και την αποδοτικότερη χρήση της γλώσσας javscript. Η πιο δημοφιλής από όλες αυτές τις βιβλιοθήκες είναι η βιβλιοθήκη jQuery η οποία συνοδεύεται απο το jQuery UI, ένα framework για την παραγωγή ελεκτηρίων (controls) στα οποία μπορεί ο κάθε χρήστης να εκτελέσει διάφορες ενέργειες. Το jQuery έχει καταφέρει να απλοποιήσει την συγγραφή Javascript κώδικα και επιπλέον παρέχει στην διάθεση του προγραμματιστή έτοιμες ρουτίνες animation και διαφόρων άλλων ενεργειών, οι οποίες διαφορετικά θα καταλάμβαναν αρκετό χρόνο για την υλοποίηση τους. Πρόκειται για μια βιβλιοθήκη ανοιχτού λογισμικού η οποία υποστηρίζεται από μια πολύ μεγάλη κοινότητα προγραμματιστών, οι οποίοι δημιουργούν μάλιστα πολλά πρόσθετα (plugins) με λειτουργίες οι οποίες δεν είναι διαθέσιμες στην βασική βιβλιοθήκη. +Ένα μεγάλο μέρος των σύγχρονων διαδικτυακών εφαρμογών βασίζει την λειτουργία του σε κώδικα JavaScript έτσι ώστε να κάνει το λογισμικό πιο φιλικό προς τον χρήστη. Διάφορες βιβλιοθήκες έχουν δημιουργηθεί τα τελευταία χρόνια που στόχο έχουν την εξέλιξη και την αποδοτικότερη χρήση της γλώσσας JavaScript. Η πιο δημοφιλής από όλες αυτές τις βιβλιοθήκες είναι η jQuery η οποία συνοδεύεται από το jQuery UI, ένα framework για την παραγωγή ελεκτηρίων (controls) στα οποία μπορεί ο κάθε χρήστης να εκτελέσει διάφορες ενέργειες. Το jQuery έχει καταφέρει να απλοποιήσει την συγγραφή JavaScript κώδικα και επιπλέον παρέχει στην διάθεση του προγραμματιστή έτοιμες ρουτίνες animation και διαφόρων άλλων ενεργειών, οι οποίες διαφορετικά θα καταλάμβαναν αρκετό χρόνο για την υλοποίηση τους. Πρόκειται για μια βιβλιοθήκη ανοιχτού λογισμικού η οποία υποστηρίζεται από μια πολύ μεγάλη κοινότητα προγραμματιστών. Υπάρχει επίσης πληθώρα πρόσθετων (plugins) με λειτουργίες οι οποίες δεν είναι διαθέσιμες στην βασική βιβλιοθήκη. -Η βιβλιοθήκη jQuery ουσιαστικά λειτουργεί σαν ένα επίπεδο πάνω από την Javascript, βοηθώντας τον προγραμματιστή να γράψει διάφορες δομές κώδικα πιο γρήγορα και οργανωμένα. Ο κώδικας που γράφεται είναι πάλι Javascript οπότε είναι πολύ εύκολο στον καθένα να χρησιμοποιήσει την βιβλιοθήκη. Στόχος της είναι η πιο εύκολη περιήγηση στα αντικείμενα μιας σελίδας (DOM elements), η εύκολη δημιουργία εφέ κινήσεων τα οποία προσδίδουν πολύ αισθητικά σε μια ιστοσελίδα, η ευκολότερη χρήση της τεχνολογίας AJAX, μιας τεχνολογίας η οποία χρησιμοποιείται όλο και περισσότερο από τα σύγχρονα συστήματα. +Η jQuery ουσιαστικά λειτουργεί σαν ένα επίπεδο πάνω από την JavaScript βοηθώντας τον προγραμματιστή να γράψει διάφορες δομές κώδικα πιο γρήγορα και οργανωμένα. Ο κώδικας που γράφεται είναι πάλι JavaScript οπότε είναι πολύ εύκολο στον καθένα να χρησιμοποιήσει την βιβλιοθήκη. Στόχος της είναι η πιο εύκολη περιήγηση στα αντικείμενα μιας σελίδας (DOM elements), η εύκολη δημιουργία εφέ κινήσεων τα οποία προσδίδουν πολύ αισθητικά σε μια ιστοσελίδα, η ευκολότερη χρήση της τεχνολογίας AJAX, μιας τεχνολογίας η οποία χρησιμοποιείται όλο και περισσότερο από τα σύγχρονα συστήματα. -Το σύστημα που παράχθηκε χρησιμοποιεί αυτήν την βιβλιοθήκη για τον προγραμματισμό του client-side μέρους της εφαρμογής. Ανάλογα με την κάθε περίσταση, μερικές φορές είναι αποδοτικότερο και χρησιμότερο να χρησιμοποιηθεί Javascript έναντι της PHP και για αυτόν τον λόγο το jQuery Framework βοηθάει στην απόδοση που έχει ο κώδικας της εφαρμογής. +Το σύστημα που παράχθηκε χρησιμοποιεί αυτήν την βιβλιοθήκη για τον προγραμματισμό του client-side μέρους της εφαρμογής. Ανάλογα με την κάθε περίσταση, μερικές φορές είναι αποδοτικότερο και χρησιμότερο να χρησιμοποιηθεί JavaScript έναντι της PHP και για αυτόν τον λόγο επιλέγχθηκε το jQuery Framework ως εργαλείο κατά την υλοποίηση του συστήματος. \section {Bootstrap} -Το Bootstrap είναι ένα ολοκληρωμένο CSS Framework, με την προσθήκη κάποιων βιβλιοθηκών Javascript έτσι ώστε να προσφέρει μερικές επιπλέον δυνατότητές. Έχει κατασκευαστεί από την εταιρεία πίσω από την σελίδα κοινωνικής δικτύωσης Twitter και χρησιμοποιείται από αυτό ως βάση για την υλοποίηση του. Η εταιρεία έχει διάθεση το framework ως ανοιχτό λογισμικό και οι προγραμματιστές μπορούν να το χρησιμοποιήσουν ελεύθερα στις σελίδες τους. Η ίδια η εταιρεία επωφελείται μέσω της συμμετοχής της κοινότητας για να ανάπτυξη περαιτέρω αυτό το framework. +Το Bootstrap είναι ένα ολοκληρωμένο CSS Framework με την προσθήκη κάποιων βιβλιοθηκών JavaScript έτσι ώστε να προσφέρει μερικές επιπλέον δυνατότητες. Έχει κατασκευαστεί από την εταιρεία πίσω από την σελίδα κοινωνικής δικτύωσης Twitter και χρησιμοποιείται από αυτό ως βάση για την υλοποίηση του. Η εταιρεία έχει διαθέσει το framework ως ανοιχτό λογισμικό και οι προγραμματιστές μπορούν να το χρησιμοποιήσουν ελεύθερα στις σελίδες τους. Η ίδια η εταιρεία επωφελείται μέσω της συμμετοχής της κοινότητας για να αναπτύξει περαιτέρω το framework. -Το framework αυτό περιέχει έτοιμο κώδικα CSS ο οποίος ακολουθεί την μεθοδολογία παραγωγής responsive ιστοσελίδων. Με την έννοια αυτή εννοείται ότι η μορφοποίηση των σελίδων στοχεύει στο να είναι συμβατή με οποιαδήποτε συσκευή, λειτουργικό σύστημα και περιηγητή ιστού. Είναι πολύ σημαντικό για την ανάπτυξη μιας εφαρμογής, το να είναι διαθέσιμη σε οποιοδήποτε μηχάνημα υποστηρίζει τα τελευταία standards του ιστού. Απαρτίζεται από κανονικό CSS και Javascript το οποίο μάλιστα χρησιμοποιεί την βιβλιοθήκη jQuery για την υλοποίηση διαφόρων τεχνικών (πχ εμφάνιση παραθύρου διαλόγου κτλ). +Το Bootstrap περιέχει έτοιμο κώδικα CSS ο οποίος ακολουθεί την μεθοδολογία παραγωγής responsive ιστοσελίδων. Με την έννοια αυτή εννοείται ότι η μορφοποίηση των σελίδων στοχεύει στο να είναι συμβατή με οποιαδήποτε συσκευή, λειτουργικό σύστημα και περιηγητή ιστού. Είναι πολύ σημαντικό για την αναγνωρισιμότητα και ευχρηστία μιας εφαρμογής το να είναι διαθέσιμη σε οποιοδήποτε μηχάνημα υποστηρίζει τα τελευταία standards του ιστού. Το JavaScript μέρος του framework χρησιμοποιεί το jQuery για την υλοποίηση διαφόρων τεχνικών (πχ εμφάνιση παραθύρου διαλόγου). -Στην παραγωγή του συστήματος κρατήσεων ραντεβού χρησιμοποιήθηκε ως η βάση για τη μορφοποίηση και κάποιες μέθοδοι Javascript φάνηκαν αρκετά χρήσιμα σε κάποια σημεία. Στην συνέχεια με βάση αυτά γράφτηκαν ξεχωριστά αρχεία CSS και Javascript τα οποία αποτελούν το τελικό αποτέλεσμα που έπρεπε να επιτευχθεί. \ No newline at end of file +Στην παραγωγή του συστήματος κρατήσεων ραντεβού χρησιμοποιήθηκε ως η βάση για τη μορφοποίηση και κάποιες μέθοδοι JavaScript φάνηκαν αρκετά χρήσιμα σε κάποια σημεία. Στην συνέχεια με βάση αυτά γράφτηκαν ξεχωριστά αρχεία CSS και JavaScript τα οποία αποτελούν το τελικό αποτέλεσμα που έπρεπε να επιτευχθεί. \ No newline at end of file diff --git a/doc/thesis/includes/google-calendar-api.tex b/doc/thesis/includes/google-calendar-api.tex index 96a2fdb0..1cdb1b8d 100644 --- a/doc/thesis/includes/google-calendar-api.tex +++ b/doc/thesis/includes/google-calendar-api.tex @@ -13,14 +13,14 @@ \begin{figure}[h] \centering \includegraphics[width=150mm]{images/google-calendar-api.png} -\caption{Ιστότοπος περιγραφής του Google Calendar API} +\caption{Ιστότοπος περιγραφής του Google Calendar API.} \label{google-calendar-api} \end{figure} Το Google Calendar API (Application Programming Interface) είναι μια πλατφόρμα διαχείρισης συμβάντων ενός ημερολογίου από την Google. Επιτρέπει στον προγραμματιστή να πραγματοποιήσει λειτουργίες προσθήκης, επεξεργασίας, διαγραφής και αναζήτησης συμβάντων μέσω ενός RESTful στυλ κλήσεων προς τον server. -Με την έννοια RESTful (Representional State Transfer) εννοείται ένας από τους πιο δημοφιλής τρόπους επικοινωνίας στον παγκόσμιο ιστό. Η επικοινωνία γίνεται με την χρήση ειδικών αιτήσεων προς τους servers, οι οποίοι με την σειρά τους είναι σε θέση να τις επεξεργαστούν και να επιστρέψουν δεδομένα πίσω στους clients. Οι μέθοδοι αιτήσεων που είναι διαθέσιμες είναι: +Με την έννοια RESTful (Representional State Transfer) εννοείται ένας από τους πιο δημοφιλής τρόπους επικοινωνίας στον παγκόσμιο ιστό. Η επικοινωνία γίνεται με την χρήση ειδικών αιτήσεων προς τους servers οι οποίοι με την σειρά τους είναι σε θέση να τις επεξεργαστούν και να επιστρέψουν δεδομένα πίσω στους clients. Οι μέθοδοι αιτήσεων που είναι διαθέσιμες είναι: \begin{enumerate} \item GET \item POST @@ -28,12 +28,12 @@ \item DELETE \end{enumerate} -Πρακτικά η μέθοδος επικοινωνίας RESTFul μπορεί να χρησιμοποιηθεί από οποιοδήποτε σύστημα υποστηρίζει το πρωτόκολλο HTTP. Για να διευκολύνει όμως η Google τους προγραμματιστές, έχει αναπτύξει βιβλιοθήκες κώδικα σε διάφορες γλώσσες προγραμματισμού (PHP, Java, .NET, Ruby κτλ) οι οποίες περιέχουν έτοιμες μεθόδους επικοινωνίας με τις υπηρεσίες της. Έτσι διευκολύνεται πολύ η διαδικασία ανάπτυξης μιας εφαρμογής που βασίζεται πάνω στα δεδομένα των χρηστών της Google. +Πρακτικά η μέθοδος επικοινωνίας RESTFul μπορεί να χρησιμοποιηθεί από οποιοδήποτε σύστημα υποστηρίζει το πρωτόκολλο HTTP. Για να διευκολύνει όμως η Google τους προγραμματιστές έχει αναπτύξει βιβλιοθήκες κώδικα σε διάφορες γλώσσες προγραμματισμού (PHP, Java, .NET, Ruby κτλ) οι οποίες περιέχουν έτοιμες μεθόδους επικοινωνίας με τις υπηρεσίες της. Έτσι διευκολύνεται πολύ η διαδικασία ανάπτυξης μιας εφαρμογής που βασίζεται πάνω στα δεδομένα των χρηστών της Google. Για να αποτραπεί η υπερβολική χρήση της υπηρεσίας Calendar, η εταιρεία έχει θέσει ένα υπέρτατο όριο 10.000 request την ημέρα. Αν κάποια εταιρεία ξεπεράσει αυτό το όριο τότε θα χρειαστεί να πληρώσει κάποιο αντίτιμο για να μπορέσει να συνεχίσει κανονικά την χρήση. Για αυτό τον λόγο είναι και απαραίτητο οποιοσδήποτε client χρησιμοποιεί το Calendar API, να έχει πρώτα δημιουργήσει ένα API Key μέσω της σελίδας API Console που προσφέρει η Google. \section {Περιγραφή του Calendar API} -Το Ημερολόγιο της Google είναι ένα πολύ δυνατό και ευέλικτο εργαλείο. Οι χρήστες μπορούν να βλέπουν το ίδιο ημερολόγιο σε οποιαδήποτε συσκευή βρίσκονται έχοντας απλώς σύνδεση με το διαδίκτυο, για να μπορέσουν να ληφθούν τα δεδομένα από την υπηρεσία. Όλες οι εφαρμογές αυτές χρησιμοποιούν το API για να υλοποιήσουν τις βασικές λειτουργίες ενός ημερολογίου, δηλαδή την διαχείριση και την εύκολη εύρεση συμβάντων που είναι καταχωρημένα στο Google Calendar. Αφού γίνουν οι αλλαγές αυτές θα χρειαστεί να εκτελεστεί η διαδικασία του συγχρονισμού έτσι ώστε τα νέα δεδομένα να είναι και στις υπόλοιπες εφαρμογές που έχουν πρόσβαση στο ημερολόγιο. +Το Ημερολόγιο της Google είναι ένα πολύ δυνατό και ευέλικτο εργαλείο. Οι χρήστες μπορούν να βλέπουν το ίδιο ημερολόγιο σε οποιαδήποτε συσκευή βρίσκονται έχοντας απλώς σύνδεση με το διαδίκτυο (για να είναι εφικτή η λήψη των δεδομένων από την υπηρεσία). Όλες οι εφαρμογές αυτές χρησιμοποιούν το API για να υλοποιήσουν τις βασικές λειτουργίες ενός ημερολογίου, δηλαδή την διαχείριση και την εύκολη εύρεση συμβάντων που είναι καταχωρημένα στο Google Calendar. Αφού γίνουν οι αλλαγές αυτές θα χρειαστεί να εκτελεστεί η διαδικασία του συγχρονισμού έτσι ώστε τα νέα δεδομένα να είναι και στις υπόλοιπες εφαρμογές που έχουν πρόσβαση στο ημερολόγιο. Στην ευρεία χρήση της υπηρεσίας συντελεί το ότι η πλατφόρμα του ημερολογίου είναι συμβατή με διάφορες γλώσσες προγραμματισμού και έτσι μπορούν να υλοποιηθούν εφαρμογές για όλες τις συσκευές με εξελιγμένο λειτουργικό σύστημα (Windows, Linux, Mac OS, Android, iOS, Windows Phone κτλ). @@ -63,7 +63,7 @@ \section {Πως χρησιμοποιείται} Η χρήση του API μπορεί να γίνει απευθείας με κλήσεις RESTful προς τον server της Google, είτε με χρήση κάποιων από τις έτοιμες βιβλιοθήκες που παρέχει η εταιρεία. Επίσης είναι απαραίτητη η ύπαρξη ενός λογαριασμού στην Google καθώς και η καταχώρηση του project στο Google API Console έτσι ώστε να πάρει ο προγραμματιστής ένα API Key, ένα κλειδί το οποίο είναι απαραίτητο για την χρήση της υπηρεσίας. -Αν ο προγραμματιστής επιλέξει την χρήση της RESTful μεθόδου επικοινωνίας, θα χρειαστεί αν στέλνει request σε διάφορα URL και έτσι να παίρνει απαντήσεις με τα δεδομένα που χρειάζεται. Όλες οι απαντήσεις είναι σε JSON μορφή οπότε είναι πιθανόν να χρειαστεί να τις αναλύσει (parse) πριν τις χρησιμοποιήσει στην εφαρμογή του. +Αν ο προγραμματιστής επιλέξει την χρήση της RESTful μεθόδου επικοινωνίας θα χρειαστεί να στέλνει request σε διάφορα URL και έτσι να παίρνει απαντήσεις με τα δεδομένα που χρειάζεται. Όλες οι απαντήσεις είναι σε JSON μορφή οπότε θα χρειαστεί να τις αναλύσει (parse) πριν τις χρησιμοποιήσει στην εφαρμογή του. Δείγματα από URL για την κλήση διαφόρων μεθόδων: @@ -137,9 +137,9 @@ if (isset($_SESSION['oauth_access_token'])) { Με αυτόν τον τρόπο εκτελούνται οι διαδικασίες ανταλλαγής δεδομένων μεταξύ του Google Calendar και του συστήματος του προγραμματιστή. \section{Συγχρονισμός ραντεβού} -Ο συγχρονισμός δεδομένων μεταξύ δυο συστημάτων είναι μια περίπλοκη και πολλές φορές υποτιμημένη διαδικασία, διότι ο προγραμματιστής έχει να κάνει αρκετή δουλειά έτσι ώστε να καταφέρει να γεφυρώσει και τις δυο πηγές δεδομένων με τον καλύτερο τρόπο. Το αποτέλεσμα δεν μπορεί ποτέ να είναι 100\% επιτυχές διότι μερικές φορές τα δεδομένα και οι αλλαγές μπορεί να έρχονται σε σύγκρουση (conflict) και έτσι θα χρειαστεί να παρθούν αποφάσεις είτε με βάση κάποιους κανόνες, είτε από τον ίδιο τον χρήστη για το ποια αλλαγή θα υπερισχύσει. Το πράγμα μάλιστα δυσκολεύει περισσότερο όταν δεν υπάρχει πρόσβαση στον κώδικα του ενός από τα δύο συστήματα (πχ Google Calendar) και όλη η διαδικασία θα πρέπει να τρέξει από την μια πλευρά. +Ο συγχρονισμός δεδομένων μεταξύ δυο συστημάτων είναι μια περίπλοκη και πολλές φορές υποτιμημένη διαδικασία, διότι ο προγραμματιστής έχει να κάνει αρκετή δουλειά έτσι ώστε να καταφέρει να γεφυρώσει και τις δυο πηγές δεδομένων με τον καλύτερο δυνατό τρόπο. Το αποτέλεσμα δεν μπορεί ποτέ να είναι 100\% επιτυχές διότι μερικές φορές τα δεδομένα και οι αλλαγές μπορεί να έρχονται σε σύγκρουση (conflict) και έτσι θα χρειαστεί να παρθούν αποφάσεις είτε με βάση κάποιους κανόνες προτεραιότητας, είτε από τον ίδιο τον χρήστη για το ποια αλλαγή θα υπερισχύσει εν τέλη. Το πράγμα μάλιστα δυσκολεύει περισσότερο όταν δεν υπάρχει πρόσβαση στον κώδικα του ενός από τα δύο συστήματα (πχ Google Calendar) και όλη η διαδικασία θα πρέπει να τρέξει από την μια πλευρά. -Στην περίπτωση του Easy!Appointments θα πρέπει να υλοποιηθεί μια διαδικασία η οποία θα συγχρονίζει τα ραντεβού και τα συμβάντα του συστήματος με αυτά του Google Calendar. Η διαδικασία αυτή θα εκτελείται όταν δημιουργούνται συγκεκριμένα συμβάντα (πχ. προσθήκη ραντεβού) και θα φέρνει και τα δύο πλάνα στην ίδια κατάσταση. Ο συγχρονισμός θα εκτελείται κάθε φορά για το πλάνο ενός πάροχου υπηρεσιών και εφόσον έχει ήδη δοθεί η άδεια στην εφαρμογή να έχει πρόσβαση στα δεδομένα του Google Calendar του συγκεκριμένου χρήστη. +Στην περίπτωση του Easy!Appointments έχει υλοποιηθεί μια διαδικασία η οποία συγχρονίζει τα ραντεβού και τα συμβάντα του συστήματος με αυτά του Google Calendar. Η διαδικασία αυτή εκτελείται όταν δημιουργούνται συγκεκριμένα συμβάντα (πχ. προσθήκη ραντεβού) και φέρνει και τα δύο ημερολόγια στην ίδια κατάσταση. Ο συγχρονισμός εκτελείται κάθε φορά για το πλάνο ενός πάροχου υπηρεσιών και εφόσον έχει ήδη δοθεί η άδεια στην εφαρμογή να έχει πρόσβαση στα δεδομένα του Google Calendar, για τον συγκεκριμένου χρήστη. Με αυτόν τον τρόπο τα ραντεβού και οι αλλαγές που θα γίνονται από τα δυο συστήματα θα συγχωνεύονται και ο χρήστης θα μπορεί να τα διαχειρίζεται και από τις δύο πλευρές. Το μόνο πρόβλημα είναι ότι από την πλευρά του Google Calendar δεν είναι δυνατό να εκκινηθεί η διαδικασία του συγχρονισμού και έτσι αυτό θα πρέπει να γίνεται πάντοτε από την πλευρά του Easy!Appointments. @@ -149,5 +149,5 @@ if (isset($_SESSION['oauth_access_token'])) { \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. +\item Εκτός όμως του ραντεβού που δημιουργήθηκε στο Easy!Appointments, θα χρειαστεί να ληφθούν και οι αλλαγές που έχουν γίνει στο Google Calendar. Για αυτόν τον λόγο είναι απαραίτητο να ανιχνευθούν όλα τα καταχωρημένα ραντεβού και να ελεγχθούν για τυχόν αλλαγές. Επειδή αυτό όμως μπορεί να γίνει αρκετά χρονοβόρο υπάρχει μια παράμετρος στο σύστημα του Easy!Appointments η οποία καθορίζει το χρονικό διάστημα στο παρελθόν και το μέλλον για το οποίο θέλει ο χρήστης να εκτελείται ο συγχρονισμός. Επίσης τα ραντεβού που έχουν συγχρονιστεί με το Google Calendar έχουν κρατημένο το id της εγγραφής στο σύστημα της Google, έτσι ώστε να είναι δυνατό να ανιχνευθούν οι αλλαγές που έχουν γίνει από τον χρήστη. Έτσι αν για παράδειγμα ένας χρήστης διαγράψει ένα ραντεβού από το Google Calendar το οποίο ήταν συγχρονισμένο και στο Easy!Appointments, η διαδικασία του συγχρονισμού θα καταλάβει ότι το ραντεβού λείπει και έτσι θα το διαγράψει και από το σύστημα του Easy!Appointments. \end{enumerate} \ No newline at end of file diff --git a/doc/thesis/includes/implementation.tex b/doc/thesis/includes/implementation.tex index 44dbc75d..81f100d8 100644 --- a/doc/thesis/includes/implementation.tex +++ b/doc/thesis/includes/implementation.tex @@ -5,19 +5,19 @@ %% του κώδικα. \chapter{Σχεδίαση \& Υλοποίηση} -Σε αυτό το κεφάλαιο γίνεται ανάλυση του συστήματος στα επιμέρους μέρη που το απαρτίζουν και περιγράφεται η διαδικασία της υλοποίησης τους. Επεξηγούνται επίσης τα σημαντικότερα σημεία στον κώδικα και οι αλγόριθμοι που χρησιμοποιούνται για την επίλυση των κυριότερων λειτουργιών. Έχουν συμπεριληφθεί τμήματα κώδικα αλλά και διαγράμματα τα οποία βοηθούν στην κατανόηση των λύσεων που έχουν χρησιμοποιηθεί. +Σε αυτό το κεφάλαιο γίνεται ανάλυση του συστήματος στα επιμέρους μέρη που το απαρτίζουν και περιγράφεται η διαδικασία της υλοποίησης τους. Επεξηγούνται τα σημαντικότερα σημεία στον κώδικα και οι αλγόριθμοι που χρησιμοποιούνται για την επίλυση των κυριότερων λειτουργιών. Έχουν συμπεριληφθεί τμήματα κώδικα αλλά και διαγράμματα τα οποία βοηθούν στην κατανόηση των λύσεων που επιλέχθηκαν για την ολοκλήρωση της εφαρμογής. \begin{figure}[ht!] \centering \includegraphics[width=130mm]{images/backend-calendar.jpg} -\caption{Σελίδα διαχείρισης ραντεβού} +\caption{Σελίδα διαχείρισης ραντεβού.} \label{backend-calendar} \end{figure} \begin{figure}[ht!] \centering \includegraphics[width=130mm]{images/book-appointment.jpg} -\caption{Σελίδα κράτησης ραντεβού} +\caption{Σελίδα κράτησης ραντεβού.} \label{book-appointment} \end{figure} @@ -30,11 +30,11 @@ \begin{figure}[ht!] \centering \includegraphics[width=160mm]{images/domain-model.png} -\caption{Domain model του συστήματος} +\caption{Domain model του συστήματος.} \label{domain-model} \end{figure} -Με βάση αυτό το σχεδιάγραμμα μπορεί πολύ εύκολα να προκύψει και το σχεδιακό μοντέλο της βάσης δεδομένων, δεδομένου ότι έχουμε και τις οντότητες, αλλά και τις σχέσεις μεταξύ τους. Όλοι οι χρήστες κληρονομούν την συμπεριφορά τους από μια οντότητα (User) και επιπρόσθετα κατέχουν διάφορες ιδιότητες που είναι αναγκαίες για τον ρόλο τους μέσα στην εφαρμογή. Για παράδειγμα ο χρήστης γραμματέας (Secretary) περιέχει έναν πίνακα από πάροχους (Providers) τους οποίους μπορεί να διαχειριστεί, ή ένα ραντεβού είναι ξεκάθαρο ότι περιέχει στην πληροφορία του έναν πελάτη, έναν πάροχο και μια υπηρεσία. +Με βάση αυτό το σχεδιάγραμμα μπορεί πολύ εύκολα να προκύψει και το σχεδιακό μοντέλο της βάσης δεδομένων, δεδομένου ότι έχουμε τις οντότητες αλλά και τις σχέσεις μεταξύ τους. Όλοι οι χρήστες κληρονομούν την συμπεριφορά τους από μια οντότητα (User) και επιπρόσθετα κατέχουν διάφορες ιδιότητες που είναι αναγκαίες για τον ρόλο τους μέσα στην εφαρμογή. Για παράδειγμα ο χρήστης γραμματέας (Secretary) περιέχει έναν πίνακα από πάροχους (Providers) τους οποίους μπορεί να διαχειριστεί όπως και ένα ραντεβού είναι ξεκάθαρο ότι περιέχει στην πληροφορία του έναν πελάτη, έναν πάροχο και μια υπηρεσία. \begin{figure}[ht!] \centering @@ -43,7 +43,7 @@ \label{er} \end{figure} -Για την διαχείριση των δεδομένων της βάσης δημιουργήθηκαν ειδικές κλάσεις (models) οι οποίες περιέχουν μεθόδους που χρησιμοποιούνται από τους controllers του συστήματος. Το CodeIgniter δίνει στον προγραμματιστή ένα δικό του μέσο επικοινωνίας με την βάση δεδομένων, το οποίο είναι ένα πολύ ισχυρό και ευέλικτο εργαλείο. Η επονομαζόμενη Database Class του CodeIgniter επιτρέπει στον προγραμματιστεί να εκτελεί ερωτήματα προς την βάση, να παράγει αποτελέσματα και να τα αναλύει σε ξεχωριστές εγγραφές, να κρατάει στην μνήμη ερωτήματα για γρηγορότερη ανταπόκριση (query caching) και κυριότερο την κλάση Active Record. Η κλάση αυτή έχει έναν δικό της τρόπο για την εκτέλεση των ερωτημάτων προς την βάση. Όλα τα τμήματα ενός τυπικού ερωτήματος είναι μέθοδοι, οι οποίες χρησιμοποιούνται από τον προγραμματιστή ως το μέσο επικοινωνίας με την βάση δεδομένων. Το θετικό είναι ότι ανεξαρτήτως τον τύπο της βάσης η κλάση αυτή λειτουργεί με τον ίδιο τρόπο (MySQL, PostGre, MSSQL κτλ). Η τεχνική αυτή λέγεται Active Record Database Pattern και έχει να κάνει με την αλλαγή adapter στην κλάση ανάλογα με τον τύπο της βάσης. Σε κάθε περίπτωση όμως ο τρόπος λειτουργίας της είναι ο ίδιος. Στο παρακάτω τμήμα κώδικα αναφέρεται ένα παράδειγμα για το πως μπορεί να βρεθεί το αναγνωριστικό μιας εγγραφής χρησιμοποιώντας ως κλειδί την διεύθυνση email. +Για την διαχείριση των δεδομένων της βάσης δημιουργήθηκαν ειδικές κλάσεις (models) οι οποίες περιέχουν μεθόδους που χρησιμοποιούνται από τους controllers του συστήματος. Το CodeIgniter δίνει στον προγραμματιστή ένα δικό του μέσο επικοινωνίας με την βάση δεδομένων, το οποίο είναι ένα πολύ ισχυρό και ευέλικτο εργαλείο. Η επονομαζόμενη Database Class του CodeIgniter επιτρέπει στον προγραμματιστή να εκτελεί ερωτήματα προς την βάση, να παράγει αποτελέσματα και να τα αναλύει σε ξεχωριστές εγγραφές, να κρατάει στην μνήμη ερωτήματα για γρηγορότερη ανταπόκριση (query caching) και κυριότερο την κλάση Active Record. Η κλάση αυτή έχει έναν δικό της τρόπο για την εκτέλεση των ερωτημάτων προς την βάση. Όλα τα τμήματα ενός τυπικού ερωτήματος είναι μέθοδοι οι οποίες χρησιμοποιούνται από τον προγραμματιστή ως το μέσο επικοινωνίας με την βάση δεδομένων. Το θετικό είναι ότι ανεξαρτήτως τον τύπο της βάσης η κλάση αυτή λειτουργεί με τον ίδιο τρόπο (MySQL, PostgreSQL, MSSQL κτλ). Η τεχνική αυτή λέγεται Active Record Database Pattern και έχει να κάνει με την αλλαγή adapter στην κλάση ανάλογα με τον τύπο της βάσης. Σε κάθε περίπτωση όμως ο τρόπος χρήσης της Active Record Class είναι ο ίδιος. Στο παρακάτω τμήμα κώδικα αναφέρεται ένα παράδειγμα για το πως μπορεί να βρεθεί το αναγνωριστικό μιας εγγραφής χρησιμοποιώντας ως κλειδί την διεύθυνση email. \lstinputlisting{snippets/find_record_id.php} @@ -51,7 +51,7 @@ %% ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΚΩΔΙΚΑ %% ================================================== \section{Αρχιτεκτονική κώδικα} -Η εφαρμογή είναι γραμμένη χρησιμοποιώντας τις εξής τεχνολογίες: PHP, Javascript, HTML, CSS, MySQL. Εκτός αυτών έχουν χρησιμοποιηθεί και κάποια βοηθητικά εργαλεία τα οποία διευκολύνουν τον προγραμματιστή στο να πετύχει καλύτερο αποτέλεσμα σε μικρότερο χρόνο. Αυτά τα εργαλεία (frameworks) όπως έχουν αναφερθεί και σε προηγούμενο κεφάλαιο είναι τα CodeIgniter (PHP), jQuery (Javascript), Bootstrap (CSS + Javascript). +Η εφαρμογή είναι γραμμένη χρησιμοποιώντας τις εξής τεχνολογίες: PHP, Javascript, HTML, CSS, MySQL. Εκτός αυτών έχουν χρησιμοποιηθεί και κάποια βοηθητικά εργαλεία τα οποία διευκολύνουν τον προγραμματιστή στο να πετύχει καλύτερο αποτέλεσμα σε μικρότερο χρόνο. Αυτά τα εργαλεία (frameworks) όπως έχουν αναφερθεί και σε προηγούμενο κεφάλαιο είναι τα CodeIgniter (PHP), jQuery (JavaScript), Bootstrap (CSS + JavaScript). Όσον αφορά την αρχιτεκτονική του κώδικα έχει επιλεχθεί το μοντέλο MVC (Model - View - Controller) το οποίο υλοποιείται με άριστη απόδοση και οργάνωση χάρη στο framework CodeIgniter. Ο κώδικας PHP έχει χωριστεί σε τρία μέρη (models, views, controllers) και με αυτόν τον τρόπο παραμένει σε όλο τον κώδικα της εφαρμογής. Ο διαχωρισμός αυτός βελτιώνει τις συνθήκες συντήρησης γιατί είναι ξεκάθαρο σε ποιο από τα τρία ξεχωριστά σημεία ανήκει μια λειτουργία, όταν αυτή αναζητείται από τον προγραμματιστή. Έχουν συγγραφεί και δοκιμαστεί κλάσεις models για κάθε οντότητα οι οποίες αναλαμβάνουν την διαχείριση των δεδομένων με την βάση και παρέχουν μεθόδους που επαναχρησιμοποιούνται σε διάφορες περιπτώσεις. Επίσης έχουν δημιουργηθεί views για κάθε σελίδα που μπορεί να δει ο χρήστης τα οποία συνδέονται με ένα κομμάτι CSS κώδικα, υπεύθυνο για την μορφοποίησή τους. Τέλος τον συντονισμό αυτών των τμημάτων αναλαμβάνουν οι κλάσεις controllers οι οποίες είτε είναι υπεύθυνες για την σωστή φόρτωση μιας σελίδας της εφαρμογής, είτε απαντούν σε κλήσεις της JavaScript που γίνονται μέσω της τεχνολογίας AJAX. @@ -79,45 +79,45 @@ Η κύρια ροή εργασιών ως προς την υλοποίηση μιας περίπτωσης χρήσης αποτελείται από τα παρακάτω βήματα: \begin{enumerate} \item Συγγραφή της κλάσης model για την συγκεκριμένη οντότητα. Μερικές φορές αυτή η διαδικασία μπορεί να συμπεριλάμβανε και την δημιουργία model και για άλλες οντότητες που εμπλέκονταν στην περίπτωση χρήσης, έτσι ώστε να μπορέσει να λειτουργήσει σωστά ο κώδικας συνολικά. Οι περισσότερες κλάσεις ακολουθούν το ίδιο πρότυπο σχεδίασης και μεθόδων με μικρές διαφοροποιήσεις ανάλογα με την οντότητα που διαχειρίζονται. -\item Έλεγχος των model με δημιουργία unit tests. Μετά την ολοκλήρωση των model αυτά θα έπρεπε να δοκιμαστούν έτσι ώστε να διασφαλιστεί η σωστή λειτουργία τους. Εκτός αυτού όμως η συγγραφή unit test είναι και μια καλή ευκαιρία ως παράδειγμα της χρήσης των model από το υπόλοιπο σύστημα. Αν εντοπιζόταν κάποιο πρόβλημα κατά την εκτέλεση των test αυτό διορθωνόταν και τα test εκτελόντουσαν πάλι έως ότου να ολοκληρωθούν όλα με επιτυχία. +\item Έλεγχος των model με δημιουργία unit tests. Μετά την ολοκλήρωση των model αυτά θα έπρεπε να δοκιμαστούν έτσι ώστε να διασφαλιστεί η σωστή λειτουργία τους. Εκτός αυτού όμως η συγγραφή unit test είναι και μια καλή ευκαιρία ως παράδειγμα της χρήσης των model από το υπόλοιπο σύστημα. Αν εντοπιζόταν κάποιο πρόβλημα κατά την εκτέλεση των test αυτό διορθωνόταν και τα test εκτελούνταν πάλι έως ότου να ολοκληρωθούν όλα με επιτυχία. \item Εφόσον τα model ήταν ολοκληρωμένα στην συνέχεια δημιουργήθηκαν οι controllers και οι αντίστοιχες συναρτήσεις που θα ήταν υπεύθυνες για την λειτουργία του view που αντιστοιχούσε στην εκάστοτε περίπτωση χρήσης. Έτσι εκτός από τις συναρτήσεις που αναλάμβαναν να φορτώσουν μια σελίδα της εφαρμογής συγκεντρώνοντας τα δεδομένα που ήταν απαραίτητα, υλοποιήθηκαν και οι κλήσεις AJAX που ήταν απαραίτητες από την JavaScript. Αυτές οι κλήσεις συνήθως αναλάμβαναν την διεκπεραίωση κάποιας ενέργειας προς την βάση δεδομένων και επέστρεφαν πάντα κάποιο αποτέλεσμα για να μπορέσει να συνεχίσει την λειτουργία της το τμήμα της JavaScript. -\item Στην συνέχεια υλοποιούνταν το αντίστοιχο view που θα έβλεπε ο χρήστης. Σε αυτό τοποθετούνταν ο κώδικας PHP, HTML και η μορφοποίηση της σελίδας (CSS) γραφόταν στο αντίστοιχο αρχείο css έτσι ώστε να παραχθεί ένα καλαίσθητο και φιλικό αποτέλεσμα. +\item Στην συνέχεια υλοποιούνταν το αντίστοιχο view που θα έβλεπε ο χρήστης. Σε αυτό τοποθετούνταν ο κώδικας PHP, HTML και η μορφοποίηση της σελίδας (CSS) γραφόταν στο αντίστοιχο αρχείο έτσι ώστε να παραχθεί ένα καλαίσθητο και φιλικό αποτέλεσμα. \item Όταν το view ήταν έτοιμο θα έπρεπε να του προστεθεί και κάποια λειτουργικότητα έτσι ώστε να μπορεί να ανταποκριθεί στις ενέργειες του χρήστη. Για κάθε σελίδα χρησιμοποιούνται μια πληθώρα από βιβλιοθήκες, namespaces, κλάσεις και πρόσθετα JavaScript. Στα αντίστοιχα αρχεία τοποθετήθηκε ο κώδικας που θα ρύθμιζε την λειτουργία της σελίδας και τις ασύγχρονες κλήσεις προς τον server (AJAX). \item Τέλος εφόσον όλα ήταν έτοιμα και η περίπτωση χρήσης είχε υλοποιηθεί χωρίς προβλήματα, όλος ο κώδικας που είχε γραφεί έπρεπε να εξεταστεί (review) για τυχόν προβλήματα λογικής και για την βελτίωση της απόδοσης του, μικραίνοντας όσο είναι δυνατόν την σύζευξη και αυξάνοντας την συνοχή. \end{enumerate} -Εδώ θα χρειαστεί να αναφερθεί ότι όλες οι κλήσεις AJAX που αφορούν το backend έχουν μεταφερθεί σε μια κλάση controller, ξεχωριστά από τον κύριο controller του backend για να είναι καλύτερα οργανωμένες. Αν μελλοντικά ο αριθμός τους και η πολυπλοκότητα τους αυξηθεί τότε θα χρειαστεί να διαιρεθούν ξανά για να μπορέσουν να συντηρούνται πιο εύκολα. +Εδώ θα χρειαστεί να αναφερθεί ότι όλες οι κλήσεις AJAX που αφορούν το backend έχουν μεταφερθεί σε μια κλάση controller ξεχωριστά από τον κύριο controller του backend για να είναι καλύτερα οργανωμένες. Αν μελλοντικά ο αριθμός τους και η πολυπλοκότητα τους αυξηθεί τότε θα χρειαστεί να διαιρεθούν ξανά για να μπορέσουν να συντηρούνται πιο εύκολα. %% ================================================== %% ΠΕΡΙΓΡΑΦΗ ΒΑΣΙΚΩΝ ΑΛΓΟΡΙΘΜΩΝ %% ================================================== \section{Περιγραφή βασικών αλγορίθμων} -Σε αυτήν την ενότητα θα γίνει ανάλυση κάποιων βασικών αλγορίθμων που αποτελούν κρίσιμα τμήματα για την λειτουργία του συστήματος. Η περιγραφή θα γίνει σχολιάζοντας τα τμήματα κώδικα που απαρτίζουν αυτούς τους αλγορίθμους αναφέροντας και τις συγκεκριμένες γραμμές στον οποίο αναφέρεται. Στην επόμενη ενότητα παρέχονται κάποια σχεδιαγράμματα τα οποία μπορούν να βοηθήσουν στην κατανόηση αυτών των αλγορίθμων. +Σε αυτήν την ενότητα θα γίνει ανάλυση κάποιων βασικών αλγορίθμων που αποτελούν κρίσιμα τμήματα για την λειτουργία του συστήματος. Η περιγραφή θα γίνει σχολιάζοντας τα τμήματα κώδικα που απαρτίζουν αυτούς τους αλγορίθμους αναφέροντας και τις συγκεκριμένες γραμμές στα οποία αναφέρονται. Στην επόμενη ενότητα παρέχονται κάποια σχεδιαγράμματα τα οποία μπορούν να βοηθήσουν στην κατανόηση αυτών των αλγορίθμων. \subsection{Πλήρης συγχρονισμός με το Google Calendar} -Η διαδικασία του πλήρη συγχρονισμού των ραντεβού με το Google Calendar αποτελεί ένας από τους κυριότερους αλγορίθμους του Easy!Appointments. Η πολυπλοκότητα της διαδικασίας συγχρονισμού δεδομένων κατέστησαν την υλοποίηση αυτού του τμήματος κώδικα αρκετά ενδιαφέρον και το αποτέλεσμα κατάφερε να καλύψει τις αρχικές απαιτήσεις. Μπορεί μελλοντικά να υπάρξουν βελτιώσεις στον κώδικα, αλλά την συγκεκριμένη στιγμή ο αλγόριθμος λειτουργεί επιτυχώς και συγχρονίζει τα ραντεβού του συστήματος με τα συμβάντα που έχει περάσει ο χρήστης στο Google Calendar. +Η διαδικασία του πλήρη συγχρονισμού των ραντεβού με το Google Calendar αποτελεί ένας από τους κυριότερους αλγορίθμους του Easy!Appointments. Η πολυπλοκότητα της διαδικασίας συγχρονισμού δεδομένων κατέστησαν την υλοποίηση αυτού του τμήματος κώδικα αρκετά ενδιαφέρον και το αποτέλεσμα κατάφερε να καλύψει τις αρχικές απαιτήσεις. Μπορεί μελλοντικά να υπάρξουν βελτιώσεις στον κώδικα αλλά την συγκεκριμένη στιγμή ο αλγόριθμος λειτουργεί επιτυχώς και συγχρονίζει τα ραντεβού του συστήματος με τα συμβάντα που έχει περάσει ο χρήστης στο Google Calendar. \lstinputlisting{snippets/google_sync_algorithm.php} -Η μέθοδος αυτή καλείται κάθε φορά που πρέπει να τρέξει ο αλγόριθμος συγχρονισμού για έναν πάροχο υπηρεσιών. Στο πρώτο μέρος του κώδικα ελέγχεται αν ο χρήστης έχει τα δικαιώματα να τρέξει αυτήν την μέθοδο και αν έχει δοθεί το αναγνωριστικό της εγγραφής του πάροχου. Έπειτα φορτώνονται τα απαραίτητα models και γίνεται η λήψη των πληροφοριών του πάροχου από την βάση (γραμμές 18 - 31). +Η μέθοδος αυτή καλείται κάθε φορά που πρέπει να τρέξει ο αλγόριθμος συγχρονισμού για έναν πάροχο υπηρεσιών. Στο πρώτο μέρος του κώδικα ελέγχεται αν ο χρήστης έχει τα δικαιώματα να τρέξει αυτήν την μέθοδο και αν έχει δοθεί το αναγνωριστικό της εγγραφής του πάροχου. Έπειτα φορτώνονται τα απαραίτητα models και γίνεται η λήψη των πληροφοριών του πάροχου από την βάση (γραμμές 17 - 30). -Για να συνεχιστεί η διαδικασία θα πρέπει να ελεγχθεί αν ο πάροχος έχει ενεργό τον συγχρονισμό με το Google Calendar. Αν η επιλογή αυτή είναι ενεργή τότε ο αλγόριθμος χρησιμοποιεί το token του πάροχου για να πιστοποιήσει την χρήση των δεδομένων του στο Google Calendar, διαφορετικά η διαδικασία τερματίζεται (γραμμές 34 - 44). +Για να συνεχιστεί η διαδικασία θα πρέπει να ελεγχθεί αν ο πάροχος έχει ενεργό τον συγχρονισμό με το Google Calendar. Αν η επιλογή αυτή είναι ενεργή τότε ο αλγόριθμος χρησιμοποιεί το token του πάροχου για να πιστοποιήσει την χρήση των δεδομένων του στο Google Calendar, διαφορετικά η διαδικασία τερματίζεται (γραμμές 33 - 43). -Για να γίνει εξοικονόμηση κλήσεων προς την υπηρεσία της Google αλλά και να μειωθεί ο χρόνος διεκπεραίωσης του αλγορίθμου συγχρονισμού, το χρονικό διάστημα μέσα στο οποίο θα συγχρονισθούν τα δεδομένα περιορίζεται στο εύρος ημερών που έχει τεθεί ως ρύθμιση για τον κάθε πάροχο (προεπιλεγμένη τιμή 5 ημέρες στο παρελθόν και 5 στο μέλλον). Αυτό είναι το χρονικό διάστημα στο οποίο θα ελεγχθούν όλα τα δεδομένα και από τα δύο συστήματα και θα συντονιστούν έτσι ώστε να είναι τα ίδια (γραμμές 48 - 55). +Για να γίνει εξοικονόμηση κλήσεων προς την υπηρεσία της Google αλλά και να μειωθεί ο χρόνος διεκπεραίωσης του αλγορίθμου συγχρονισμού, το χρονικό διάστημα μέσα στο οποίο θα συγχρονισθούν τα δεδομένα περιορίζεται στο εύρος ημερών που έχει τεθεί ως ρύθμιση για τον κάθε πάροχο (προεπιλεγμένη τιμή 5 ημέρες στο παρελθόν και 5 στο μέλλον). Αυτό είναι το χρονικό διάστημα στο οποίο θα ελεγχθούν όλα τα δεδομένα και από τα δύο συστήματα και θα συντονιστούν έτσι ώστε να είναι τα ίδια (γραμμές 47 - 54). Το επόμενο κομμάτι κώδικα αφού πρώτα λάβει τα ραντεβού από την βάση δεδομένων του Easy!Appointments, εξετάζει τις εγγραφές μια προς μια για το αν έχουν συγχρονιστεί με το Google Calendar. Εδώ υπάρχουν οι εξής περιπτώσεις: \begin{enumerate} -\item Το ραντεβού δεν έχει ακόμα συγχρονιστεί οπότε θα πρέπει να προστεθεί στο Google Calendar (γραμμές 89 - 94). -\item Το ραντεβού είναι συγχρονισμένο και πρέπει να ελεγχθεί αν υπάρχουν διαφορές με το συμβάν που είναι καταχωρημένο στο Google Calendar. Αν ναι τότε αυτό σημαίνει ότι ο χρήστης έχει αλλάξει τα στοιχεία του συμβάντος στο Google Calendar και η εγγραφή του ραντεβού στο Easy!Appointments θα πρέπει να ενημερωθεί (γραμμές 98 - 127). -\item Το ραντεβού είναι συγχρονισμένο αλλά δεν έχει βρεθεί στο Google Calendar. Εφόσον δεν έχει βρεθεί η εγγραφή σημαίνει ότι ο χρήστης την έχει διαγράψει από το Google Calendar και έτσι θα πρέπει να διαγραφεί και από το Easy!Appointments (γραμμές 131 - 132). +\item Το ραντεβού δεν έχει ακόμα συγχρονιστεί οπότε θα πρέπει να προστεθεί στο Google Calendar (γραμμές 88 - 93). +\item Το ραντεβού είναι συγχρονισμένο και πρέπει να ελεγχθεί αν υπάρχουν διαφορές με το συμβάν που είναι καταχωρημένο στο Google Calendar. Αν ναι τότε αυτό σημαίνει ότι ο χρήστης έχει αλλάξει τα στοιχεία του συμβάντος στο Google Calendar και η εγγραφή του ραντεβού στο Easy!Appointments θα πρέπει να ενημερωθεί (γραμμές 97 - 126). +\item Το ραντεβού είναι συγχρονισμένο αλλά δεν έχει βρεθεί στο Google Calendar. Εφόσον δεν έχει βρεθεί η εγγραφή σημαίνει ότι ο χρήστης την έχει διαγράψει από το Google Calendar και έτσι θα πρέπει να διαγραφεί και από το Easy!Appointments (γραμμές 130 - 131). \end{enumerate} Με το πέρας αυτού του τμήματος κώδικα όλα τα ραντεβού του Easy!Appointments θα πρέπει να έχουν συγχρονιστεί με το Google Calendar. -Τα μη διαθέσιμα διαστήματα χρησιμοποιούνται ως ραντεβού στον συγκεκριμένο αλγόριθμο με την διαφορά ότι δεν υπάρχουν σε αυτά πληοροφίες για κάποιο πελάτη ή υπηρεσία (γραμμές 84 - 85). +Τα μη διαθέσιμα διαστήματα χρησιμοποιούνται ως ραντεβού στον συγκεκριμένο αλγόριθμο με την διαφορά ότι δεν υπάρχουν σε αυτά πληοροφίες για κάποιο πελάτη ή υπηρεσία (γραμμές 83 - 84). Υπάρχουν όμως συμβάντα στην υπηρεσία της Google τα οποία μπορεί να έχουν προστεθεί απευθείας στο Google Calendar και να μην υπάρχουν στο Easy!Appointments. Σε αυτήν την περίπτωση θα πρέπει να ανιχνευθούν και να εξεταστούν όλα τα συμβάντα που αντιστοιχούν στην χρονική περίοδο συγχρονισμού (5 ημέρες πριν και 5 ημέρες μετά την τρέχουσα ημερομηνία) και να ελεγχθεί αν υπάρχει κάποιο συμβάν που δεν είναι συγχρονισμένο. -Αυτήν την εργασία αναλαμβάνει το επόμενο κομμάτι κώδικα το οποίο χρησιμοποιώντας την βιβλιοθήκη Google API μπορεί να διαβάσει τα συμβάντα τα οποία βρίσκονται στο Google Calendar. Η διαδικασία ξεκινάει με την λήψη αυτών των συμβάντων τα οποία στην συνέχεια εξετάζονται ένα προς ένα για το αν υπάρχουν στο Easy!Appointments. Αν όχι τότε προστίθενται και συγχρονίζονται και στα δύο συστήματα και έτσι διασφαλίζεται η ακεραιότητα των δεδομένων και στα δύο συστήματα (γραμμές 138 - 160). +Αυτήν την εργασία αναλαμβάνει το επόμενο κομμάτι κώδικα το οποίο χρησιμοποιώντας την βιβλιοθήκη Google API μπορεί να διαβάσει τα συμβάντα τα οποία βρίσκονται στο Google Calendar. Η διαδικασία ξεκινάει με την λήψη αυτών των συμβάντων τα οποία στην συνέχεια εξετάζονται ένα προς ένα για το αν υπάρχουν στο Easy!Appointments. Αν όχι τότε προστίθενται και συγχρονίζονται και στα δύο συστήματα και έτσι διασφαλίζεται η ακεραιότητα των δεδομένων και στα δύο συστήματα (γραμμές 137 - 159). Τέλος η συνάρτηση επιστρέφει την σταθερά AJAX\_SUCCESS την οποία θα διαβάσει η JavaScript και έτσι να γνωρίζει ότι η διαδικασία έχει ολοκληρωθεί με επιτυχία. Διαφορετικά αν προκύψουν σφάλματα αυτά επιστρέφονται σε JSON μορφή και εμφανίζονται με ένα φιλικό μήνυμα προς τον χρήστη. diff --git a/doc/thesis/includes/introduction.tex b/doc/thesis/includes/introduction.tex index cc65dcf8..d51d5f5d 100644 --- a/doc/thesis/includes/introduction.tex +++ b/doc/thesis/includes/introduction.tex @@ -52,13 +52,13 @@ Η ίδια η διαδικασία της κράτησης ενός ραντεβού με τον συγκεκριμένο τρόπο απαιτεί από μόνη της την ύπαρξη ενός υπαλλήλου, ο οποίος θα αφιερώνει αρκετό, αν όχι τον περισσότερο από τον χρόνο του για να κάνει αυτήν την εργασία. Αυτό πρακτικά σημαίνει δέσμευση ανθρώπινων πόρων της επιχείρησης και συνεπάγεται στην αύξηση των εξόδων λειτουργίας. -Επιπλέον, η ίδια η διαδικασία μπορεί να είναι χρονοβόρα και κουραστική για τους πελάτες, ειδικά στις περιπτώσεις όπου υπάρχει λίγο προσωπικό για να καλύψει μεγάλο κοινό (πχ νοσοκομεία). Στις περιπτώσεις αυτές οι πελάτες περιμένουν στην αναμονή για μεγάλο χρονικό διάστημα και μάλιστα πολλές φορές δεν πιάνουν γραμμή για να μπορέσουν να κρατήσουν κάποιο ραντεβού. Επίσης πρέπει να σημειωθεί ότι όταν ο πελάτης καταφέρει να κλείσει το ραντεβού του συνήθως δεν έχει επιλογή για το πότε θα γίνει και απλώς ενημερώνεται για την ημερομηνία την οποία έχει ορίσει το προσωπικό, ανάλογα με τις εκάστοτε συνθήκες. +Επιπλέον η ίδια η διαδικασία μπορεί να είναι χρονοβόρα και κουραστική για τους πελάτες, ειδικά στις περιπτώσεις όπου υπάρχει λίγο προσωπικό για να καλύψει μεγάλο κοινό (πχ νοσοκομεία). Στις περιπτώσεις αυτές οι πελάτες περιμένουν στην αναμονή για μεγάλο χρονικό διάστημα και μάλιστα πολλές φορές δεν πιάνουν γραμμή για να μπορέσουν να κρατήσουν κάποιο ραντεβού. Επίσης πρέπει να σημειωθεί ότι όταν ο πελάτης καταφέρει να κλείσει το ραντεβού του συνήθως δεν έχει επιλογή για το πότε θα γίνει και απλώς ενημερώνεται για την ημερομηνία την οποία έχει ορίσει το προσωπικό, ανάλογα με τις εκάστοτε συνθήκες. Εκτός αυτών η εκτέλεση αυτής της διαδικασίας είναι αρκετά επιρρεπής στο να έχει ασαφές αποτελέσματα με την έννοια του ότι δεν υπάρχει κάποιο κοινό σημείο αναφοράς για την συμφωνία που πραγματοποιείται μεταξύ της επιχείρησης και του πελάτη, έτσι ώστε να μπορεί να γίνει εξακρίβωση και επαλήθευση των ιδιοτήτων μιας κράτησης και από τις δύο πλευρές. Αυτό μπορεί να οδηγήσει σε προβλήματα με τους πελάτες, κάτι το οποίο δεν είναι επιθυμητό σε καμία περίπτωση. -Μικρό είναι το μέρος των πληροφοριών που καταγράφεται με το πέρας της κράτησης, καθώς τα μέσα που χρησιμοποιούνται δεν επιτρέπουν ή κάνουν δύσκολη και χρονοβόρα την αποθήκευση όλων των δεδομένων. Αυτό συντελεί στην επιπλέον μείωση της ποιότητας εξυπηρέτησης και της απόδοσης της επιχείρησης. +Μικρό είναι το μέρος των πληροφοριών που καταγράφεται με το πέρας της κράτησης, καθώς τα μέσα που χρησιμοποιούνται δεν επιτρέπουν ή κάνουν δύσκολη και χρονοβόρα την αποθήκευση όλων των δεδομένων. Αυτό συντελεί στην πρόσθετη μείωση της ποιότητας εξυπηρέτησης και της απόδοσης της επιχείρησης. -Τα δεδομένα αυτά διαχειρίζονται συνήθως δύσκολα. Ακόμα και στην περίπτωση που χρησιμοποιούνται ηλεκτρονικά μέσα για την αποθήκευση των κρατήσεων, η τροποποίηση ή ο έλεγχος μπορούν να είναι δύσκολες και χρονοβόρες διαδικασίες, οι οποίες εξαρτώνται κάθε φορά από το επίπεδο της οργάνωσης της επιχείρησης και τις τεχνολογίες που χρησιμοποιούνται. +Τα δεδομένα αυτά διαχειρίζονται συνήθως δύσκολα. Ακόμα και στην περίπτωση που χρησιμοποιούνται ηλεκτρονικά μέσα για την αποθήκευση των κρατήσεων η τροποποίηση ή ο έλεγχος μπορούν να είναι δύσκολες και χρονοβόρες διαδικασίες, οι οποίες εξαρτώνται κάθε φορά από το επίπεδο της οργάνωσης της επιχείρησης και τις τεχνολογίες που χρησιμοποιούνται. Επίσης τα δεδομένα αυτά δεν είναι προσβάσιμα από οποιονδήποτε ανά πάσα στιγμή, αλλά μόνο στον χώρο της επιχείρησης και μόνο από το άτομο το οποίο διαχειρίζεται τα ραντεβού. @@ -130,17 +130,15 @@ \end{enumerate} \section{Σε τι διαφέρει από τις υπόλοιπες η προτεινόμενη λύση} -Το Easy!Appointments έχει ως σκοπό να αυτοματοποιήσει την διαδικασία της κράτησης και διαχείρισης ραντεβού για οποιαδήποτε επιχείρηση. Χρησιμοποιώντας τις δυνατότητες που μας παρέχει το διαδίκτυο, μπορεί να υλοποιηθεί ένα σύστημα το οποίο να έχει την δυνατότητα να οργανώσει τα επαγγελματικά πλάνα πολλών υπαλλήλων ταυτόχρονα, επιφέροντας έτσι όχι μόνο την μείωση του χρόνου που απαιτούσαν οι παλιές μέθοδοι διαχείρισης ραντεβού, αλλά και την αύξηση της παραγωγικότητας της επιχείρησης. Οι πελάτες δεν θα χρειάζεται πλέον να τηλεφωνούν ή να πηγαίνουν στο κατάστημα, αλλά θα μπορούν να βλέπουν τις διαθέσιμες ώρες της επιχείρησης και να κλείνουν το ραντεβού τους την επιθυμητή ημερομηνία και ώρα, μέσω του υπολογιστή και του internet. Αυτό έχει ως αποτέλεσμα την ποιοτικότερη αλλά και αποδοτικότερη εξυπηρέτηση τους. Επιπρόσθετα βελτιώνεται η επικοινωνία και η οργάνωση των συντελεστών της επιχείρησης, παρέχοντας δυνατότητες αρχειοθέτησης και διαχείρισης των δεδομένων που αποθηκεύονται στο σύστημα ανά πάσα στιγμή και σε οποιοδήποτε μέρος. Σε αντίθεση με τα άλλα συστήματα, προσφέρει επιπλέον τα εξής: +Το Easy!Appointments έχει ως σκοπό να αυτοματοποιήσει την διαδικασία της κράτησης και διαχείρισης ραντεβού για οποιαδήποτε επιχείρηση. Χρησιμοποιώντας τις δυνατότητες που μας παρέχει το διαδίκτυο μπορεί να υλοποιηθεί ένα σύστημα το οποίο να έχει την δυνατότητα να οργανώσει τα επαγγελματικά πλάνα πολλών υπαλλήλων ταυτόχρονα, επιφέροντας έτσι όχι μόνο την μείωση του χρόνου που απαιτούσαν οι παλιές μέθοδοι διαχείρισης ραντεβού, αλλά και την αύξηση της παραγωγικότητας της επιχείρησης. Οι πελάτες δεν θα χρειάζεται πλέον να τηλεφωνούν ή να πηγαίνουν στο κατάστημα, αλλά θα μπορούν να βλέπουν τις διαθέσιμες ώρες της επιχείρησης και να κλείνουν το ραντεβού τους την επιθυμητή ημερομηνία και ώρα, μέσω του υπολογιστή και του internet. Αυτό έχει ως αποτέλεσμα την ποιοτικότερη αλλά και αποδοτικότερη εξυπηρέτηση τους. Επιπρόσθετα βελτιώνεται η επικοινωνία και η οργάνωση των συντελεστών της επιχείρησης, παρέχοντας δυνατότητες αρχειοθέτησης και διαχείρισης των δεδομένων που αποθηκεύονται στο σύστημα ανά πάσα στιγμή και σε οποιοδήποτε μέρος. Σε αντίθεση με τα άλλα συστήματα, προσφέρει επιπλέον τα εξής: \begin{enumerate} -\item {\bf Αυτόνομη Εγκατάσταση :} Η επιχείρηση που θέλει να χρησιμοποιήσει την εφαρμογή θα μπορεί να την εγκαταστήσει στον server της και να την τρέξει μαζί με κάποιο άλλο site, έχοντας έτσι πλήρη πρόσβαση στα δεδομένα και τον κώδικα. Η διαδικασία της εγκατάστασης και παραμετροποίησης θα είναι παρόμοια με άλλα συστήματα (Joomla, WordPress κτλ) και όσο πιο αυτοματοποιημένη γίνεται. +\item {\bf Αυτόνομη Εγκατάσταση:} Η επιχείρηση που θέλει να χρησιμοποιήσει την εφαρμογή θα μπορεί να την εγκαταστήσει στον server της και να την τρέξει μαζί με κάποιο άλλο site, έχοντας έτσι πλήρη πρόσβαση στα δεδομένα και τον κώδικα. Η διαδικασία της εγκατάστασης και παραμετροποίησης είναι παρόμοια με άλλα συστήματα (Joomla, WordPress κτλ) και όσο πιο αυτοματοποιημένη γίνεται. -\item {\bf Διαμόρφωση Πρότυπου Πλάνου :} Το σύστημα θα έχει ενσωματωμένη δυνατότητα δημιουργίας πρότυπου πλάνου για τον κάθε πάροχο υπηρεσιών, το οποίο θα αποτελεί την βάση της κάθε εβδομάδας και από εκεί και πέρα ο διαχειριστής θα μπορεί να κάνει αλλαγές. Η επανάληψη του πλάνου καθώς και το από ποιά προτυπα πλάνα θα αποτελείται ένας μήνας θα συμπεριλαμβάνονται στην ρύθμιση της εφαρμογής. +\item {\bf Διαμόρφωση Πλάνου Πάροχου:} Το σύστημα θα έχει ενσωματωμένη δυνατότητα δημιουργίας ημερολογιακού πλάνου εργασίας για τον κάθε πάροχο υπηρεσιών. Το πλάνο αυτό θα αποτελεί την βάση της κάθε εβδομάδας και από εκεί και πέρα ο διαχειριστής θα μπορεί να πραγματοποιήσει αλλαγές ανάλογα με τις εκάστοτε ανάγκες. -\item {\bf Ρύθμιση Δικαιωμάτων Πάροχων :} Ο διαχειριστής θα έχει την δυνατότητα να ορίζει τα δικαιώματα αλλαγών και ρυθμίσεων που θα έχει στην διάθεσή του ο κάθε πάροχος υπηρεσιών. Έτσι μπορεί να διασφαλιστεί η ασφάλεια των δεδομένων όπου κρίνεται αυτό χρήσιμο, είτε να διευκολυνθεί η διαχείριση των ραντεβού έτσι ώστε να μπορεί ο κάθε πάροχος να διαχειρίζεται τα δικά του. +\item {\bf Υποστήριξη Γραμματείας:} Αν παρόλα αυτά η εταιρεία ορίσει κάποια γραμματέα ως υπεύθυνη των ραντεβού, τότε είναι απαραίτητο να μπορεί να διαχειρίζεται μόνο τις εγγραφές που αντιστοιχούν στους πάροχους που βρίσκονται στην αρμοδιότητα της καθώς και τους πελάτες που είναι καταχωρημένοι στο σύστημα. Το Easy!Appointments υποστηρίζει την δημιουργία χρηστών που αντιπροσωπεύουν αυτόν τον σκοπό. -\item {\bf Υποστήριξη Γραμματείας :} Αν παρόλα αυτά η εταιρεία ορίσει κάποια γραμματέα ως υπεύθυνση των ραντεβού, τότε είναι απαραίτητο να μπορεί να διαχειρίζεται μόνο αυτά και τους πελάτες που είναι καταχωρημένοι στο σύστημα. Το Easy!Appointments υποστηρίζει την δημιουργία χρηστών που αντιπροσωπεύουν αυτόν τον σκοπό. - -\item {\bf Αμφίδρομος Συγχρονισμός με το Google Calendar :} Το σύστημα θα υποστηρίζει τον αμφίδρομο συγχρονισμό ραντεβού με το Google Calendar, κάνοντας χρήση του Google Calendar API. Με αυτόν τον τρόπο η διαχείριση των ραντεβού μπορεί να γίνει ακόμα πιο εύκολη, λαμβάνοντας υπόψιν το πόσο δημοφιλής είναι η συγκεκριμένη υπηρεσία της Google. +\item {\bf Αμφίδρομος Συγχρονισμός με το Google Calendar:} Το σύστημα υποστηρίζει τον αμφίδρομο συγχρονισμό ραντεβού με το Google Calendar, κάνοντας χρήση του Google Calendar API. Με αυτόν τον τρόπο η διαχείριση των ραντεβού μπορεί να γίνει ακόμα πιο εύκολη, λαμβάνοντας υπόψιν το πόσο δημοφιλής είναι η συγκεκριμένη υπηρεσία της Google. \end{enumerate} diff --git a/doc/thesis/includes/usage-scenarios.tex b/doc/thesis/includes/usage-scenarios.tex index fba709c6..103a8141 100644 --- a/doc/thesis/includes/usage-scenarios.tex +++ b/doc/thesis/includes/usage-scenarios.tex @@ -3,19 +3,19 @@ %% για κάθε έναν από τους ρόλους των χρηστών της εφαρμογής. \chapter{Σενάρια Χρήσης} -Το κεφάλαιο αυτό έχει ως στόχο να δώσει μια τυπική περιγραφή της χρήσης της εφαρμογής, για όλους τους διαθέσιμους ρόλους των χρηστών της, έτσι ώστε να γίνει περισσότερο κατανοητός ο τρόπος με τον οποίον θα λειτουργεί το σύστημα κρατήσεων ραντεβού. +Το κεφάλαιο αυτό έχει ως στόχο να δώσει μια τυπική περιγραφή της χρήσης της εφαρμογής για όλους τους διαθέσιμους ρόλους των χρηστών της, έτσι ώστε να γίνει περισσότερο κατανοητός ο τρόπος με τον οποίον λειτουργεί το σύστημα κρατήσεων ραντεβού. %% ΣΕΝΑΡΙΟ ΧΡΗΣΗΣ ΔΙΑΧΕΙΡΙΣΤΗ \section{Σενάριο χρήσης διαχειριστή} -Μετά από αρκετό καιρό χρήσης του Easy!Appointments η εταιρεία προσθέτει μια νέα υπηρεσία στο ενεργητικό της και για τον σκοπό αυτό ανοίγει ένα νέο τμήμα υπαλλήλων. Ο διαχειριστής του συστήματος πρέπει να ενημερώσει την εφαρμογή και να προσθέσει την νέα υπηρεσία, καθώς και τους νέους πάροχους υπηρεσιών, έτσι ώστε να μπορούν οι πελάτες να κλείνουν ραντεβού μαζί τους από εδώ και πέρα. Εφόσον γίνει αυτό, οι πελάτες θα μπορούν να επιλέξουν τις αντίστοιχες εγγραφές από την φόρμα κράτησης ραντεβού. +Μετά από αρκετό καιρό χρήσης του Easy!Appointments η εταιρεία προσθέτει μια νέα υπηρεσία στο ενεργητικό της και για τον σκοπό αυτό ανοίγει ένα νέο τμήμα υπαλλήλων. Ο διαχειριστής του συστήματος πρέπει να ενημερώσει την εφαρμογή και να προσθέσει την νέα υπηρεσία καθώς και τους νέους πάροχους υπηρεσιών, έτσι ώστε να μπορούν οι πελάτες να κλείνουν ραντεβού μαζί τους από εδώ και πέρα. Εφόσον γίνει αυτό οι πελάτες θα μπορούν να επιλέξουν τις αντίστοιχες εγγραφές από την φόρμα κράτησης ραντεβού. %% ΣΕΝΑΡΙΟ ΧΡΗΣΗ ΠΑΡΟΧΟΥ ΥΠΗΡΕΣΙΩΝ \section{Σενάριο χρήσης πάροχου υπηρεσιών} -Ο πάροχος υπηρεσιών της εφαρμογής λαμβάνει μια ειδοποίηση από την εφαρμογή (email) ότι έχει γίνει μια κράτηση για ραντεβού. Βλέποντας τα στοιχεία της κράτησης και την ημερομηνία αποφασίζει ότι δεν θα μπορέσει να είναι εκείνη την στιγμή διαθέσιμος, οπότε συνδέεται στην εφαρμογή και αλλάζει την ημερομηνία του ραντεβού. Αμέσως μετά πηγαίνει στο πρόγραμμά του και ενημερώνει την χρονική στιγμή στην οποία δεν θα είναι διαθέσιμος, έτσι ώστε να μην μπορούν πλέον οι πελάτες να κάνουν κρατήσεις σε εκείνη την χρονική περίοδο. Στην συνέχεια αποστέλλεται ειδοποίηση στον πελάτη και αυτός μπορεί να κρίνει αν τον βολεύει η νέα ημερομηνία. Αν όχι θα πρέπει να ακυρώσει το ραντεβού και να το ξανά-προσθέσει σε κάποια άλλη χρονική στιγμή. +Ο πάροχος υπηρεσιών της εφαρμογής λαμβάνει μια ειδοποίηση από την εφαρμογή (email) ότι έχει γίνει μια κράτηση για ραντεβού. Βλέποντας τα στοιχεία της κράτησης και την ημερομηνία αποφασίζει ότι δεν θα μπορέσει να είναι εκείνη την στιγμή διαθέσιμος, οπότε συνδέεται στην εφαρμογή και αλλάζει την ημερομηνία του ραντεβού. Αμέσως μετά πηγαίνει στο πρόγραμμά του και ενημερώνει την χρονική στιγμή στην οποία δεν θα είναι διαθέσιμος έτσι ώστε να μην μπορούν πλέον οι πελάτες να κάνουν κρατήσεις σε εκείνη την χρονική περίοδο. Στην συνέχεια αποστέλλεται ειδοποίηση στον πελάτη και αυτός μπορεί να κρίνει αν τον βολεύει η νέα ημερομηνία. Αν όχι θα πρέπει να ακυρώσει το ραντεβού και να το ξανά-προσθέσει σε κάποια άλλη χρονική στιγμή. %% ΣΕΝΑΡΙΟ ΧΡΗΣΗΣ ΠΕΛΑΤΗ \section{Σενάριο χρήσης πελάτη} -Ο πελάτης ενδιαφέρεται να κλείσει ραντεβού στην επιχείρηση για μια συγκεκριμένη υπηρεσία. Πηγαίνει στην σελίδα της επιχείρησης και βλέπει το πλάνο, αφού έχει επιλέξει ποια υπηρεσία και ποιόν υπάλληλο προτιμάει. Στην συνέχεια επιλέγει μια χρονική στιγμή που τον βολεύει και την κατοχυρώνει. Η διαδικασία ολοκληρώνεται με την αποστολή ενός email προς τον πελάτη, το οποίο περιέχει όλες τις πληροφορίες του ραντεβού, έτσι ώστε να είναι πάντα προσβάσιμες. Σε αυτό το email περιέχεται και ένας σύνδεσμος ο οποίος επιτρέπει στον πελάτη να πραγματοποιήσει αλλαγές στο ραντεβού. Από την στιγμή αυτήν και μετά το ραντεβού έχει κατοχυρωθεί και ο πελάτης θα ενημερώνεται για οποιαδήποτε αλλαγή μπορεί να γίνει στο ραντεβού του με email. +Ο πελάτης ενδιαφέρεται να κλείσει ραντεβού στην επιχείρηση για μια συγκεκριμένη υπηρεσία. Πηγαίνει στην σελίδα της επιχείρησης και βλέπει το πλάνο, αφού έχει επιλέξει ποια υπηρεσία και ποιόν υπάλληλο προτιμάει. Στην συνέχεια επιλέγει μια χρονική στιγμή που τον βολεύει και την κατοχυρώνει. Η διαδικασία ολοκληρώνεται με την αποστολή ενός email προς τον πελάτη το οποίο περιέχει όλες τις πληροφορίες του ραντεβού, έτσι ώστε να είναι πάντα προσβάσιμες. Σε αυτό το email περιέχεται και ένας σύνδεσμος ο οποίος επιτρέπει στον πελάτη να πραγματοποιήσει αλλαγές στο ραντεβού. Από την στιγμή αυτήν και μετά το ραντεβού έχει κατοχυρωθεί και ο πελάτης θα ενημερώνεται για οποιαδήποτε αλλαγή μπορεί να γίνει στο ραντεβού του με email. %% ΣΕΝΑΡΙΟ ΧΡΗΣΗΣ ΓΡΑΜΜΑΤΕΑ \section{Σενάριο χρήσης γραμματέα} diff --git a/doc/thesis/includes/use-cases.tex b/doc/thesis/includes/use-cases.tex index c8ecd521..bcb0954c 100644 --- a/doc/thesis/includes/use-cases.tex +++ b/doc/thesis/includes/use-cases.tex @@ -16,7 +16,7 @@ \textbf{ΕΝΑΛΛΑΚΤΙΚΕΣ ΡΟΕΣ} \begin{itemize} -\item Αν ο πελάτης αργήσει να επιλέξει ημερομηνία και στο ενδιάμεσο τον προλάβει ένας άλλος, θα πρέπει να επιστραφεί μήνυμα το οποίο θα τον προτρέψει να βρει άλλη ημερομηνία και ώρα για το ραντεβού του. +\item Αν ο πελάτης αργήσει να επιλέξει ημερομηνία και στο ενδιάμεσο τον προλάβει ένας άλλος θα πρέπει να επιστραφεί μήνυμα το οποίο θα τον προτρέψει να βρει άλλη ημερομηνία και ώρα για το ραντεβού του. \item Όταν ο πελάτης συμπληρώσει τα στοιχεία του και αφήσει κενό ένα πεδίο το οποίο είναι υποχρεωτικό για να ολοκληρωθεί η διαδικασία, θα εμφανιστεί μήνυμα το οποίο θα τον προτρέψει να συμπληρώσει όλα τα υποχρεωτικά πεδία. \end{itemize} @@ -25,7 +25,7 @@ \textbf{ΒΑΣΙΚΗ ΡΟΗ} -Ο χρήστης ολοκληρώνει την διαδικασία κράτησης ραντεβού. Σε αυτήν την διαδικασία έχει ήδη δώσει το email του, οπότε του έρχεται ένα email το οποίο περιέχει τις πληροφορίες του ραντεβού στο οποίο έχει κάνει την κράτηση και μαζί έναν σύνδεσμο, ο οποίος επιτρέπει στον χρήστη να πραγματοποιήσει αλλαγές στο συγκεκριμένο ραντεβού ή και να το ακυρώσει. Αφού ο χρήστης ακολουθήσει τον σύνδεσμο θα βρεθεί σε μια σελίδα η οποία θα περιέχει τις πληροφορίες του ραντεβού και θα του επιτρέπει να κάνει διάφορες αλλαγές. Όταν ολοκληρώσει την διαδικασία θα πατάει ένα κουμπί το οποίο θα αποθηκεύει τις αλλαγές και ένα νέο email θα έρχεται πάλι στον χρήστη αλλά και στον συγκεκριμένο πάροχο ότι έχουν πραγματοποιηθεί αλλαγές στο πλάνο του. +Ο χρήστης ολοκληρώνει την διαδικασία κράτησης ραντεβού. Σε αυτήν την διαδικασία έχει ήδη δώσει το email του στο οποίο στέλνεται ένα email με τις πληροφορίες του ραντεβού που έχει κάνει κράτηση και μαζί έναν σύνδεσμο ο οποίος επιτρέπει στον χρήστη να πραγματοποιήσει αλλαγές στο συγκεκριμένο ραντεβού ή και να το ακυρώσει. Αφού ο χρήστης ακολουθήσει τον σύνδεσμο θα βρεθεί σε μια σελίδα η οποία θα περιέχει τις πληροφορίες του ραντεβού και θα του επιτρέπει να πραγματοποιήσει αλλαγές. Όταν ολοκληρώσει την διαδικασία θα πατάει ένα κουμπί το οποίο θα αποθηκεύει τις αλλαγές και ένα νέο email θα έρχεται πάλι στον χρήστη αλλά και στον συγκεκριμένο πάροχο ότι έχουν πραγματοποιηθεί αλλαγές στο πλάνο του. \textbf{ΕΝΑΛΛΑΚΤΙΚΕΣ ΡΟΕΣ} @@ -36,7 +36,7 @@ \section {Πάροχος Υπηρεσιών} \subsection {Συγχρονισμός πλάνου με το Google Calendar} -Βασικό στοιχείο για την χρησιμότητα και την απόδοση του συστήματος είναι η διαχείριση των δεδομένων να γίνεται από πολλά συστήματα. Κάτι τέτοιο μπορεί να επιτεφθχεί με τον συγρονισμό των ραντεβού με το Google Calendar API. Σε αυτό ο χρήστης θα μπορεί να πραγματοποιεί αλλαγές στο πλάνο του μέσω του Google Calendar και αυτές να εφαρμόζονται και στο σύστημα κρατήσεων ραντεβού, κάνοντας έτσι την εργασία του πολύ εύκολη. +Βασικό στοιχείο για την χρησιμότητα και την απόδοση του συστήματος είναι η διαχείριση των δεδομένων να γίνεται από πολλά συστήματα. Κάτι τέτοιο μπορεί να επιτευχθεί με τον συγχρονισμό των ραντεβού με το Google Calendar API. Σε αυτό ο χρήστης θα μπορεί να πραγματοποιεί αλλαγές στο πλάνο του μέσω του Google Calendar και αυτές να εφαρμόζονται και στο σύστημα κρατήσεων ραντεβού κάνοντας έτσι την εργασία του πολύ εύκολη. \textbf{ΒΑΣΙΚΗ ΡΟΗ} @@ -45,12 +45,11 @@ \textbf{ΕΝΑΛΛΑΚΤΙΚΕΣ ΡΟΕΣ} \begin{itemize} -\item Υπάρχει η περίπτωση στην οποία ο πάροχος έχει πραγματοποιήσει αλλαγές στο Google Calendar και στο Easy!Appointments ταυτόχρονα, χωρίς να έχει τρέξει η διαδικασία του συγχρονισμού. Σε αυτήν την περίπτωση υπάρχει μεγάλη πιθανότητα να δημιουργηθεί κάποια σύγκρουση (conflict) και να υπάρχουν δυο συμβάντα τα οποία να ανταποκρίνονται στην ίδια χρονική περίοδο. Σε αυτήν την κατάσταση ο χρήστης είναι υπεύθυνος να λύσει την σύγκρουση μεταξύ των δύο συμβάντων και να φέρει το πλάνο του στην σωστή του μορφή. -\item Πιθανό είναι επίσης να γίνει μια αλλαγή σε ένα συγχρονισμένο συμβάν στο Google Calendar το οποίο όμως να έχει αλλαχθεί και στο Easy!Appointments. Σε αυτήν την περίπτωση θεωρείται ότι υπερισχύει η αλλαγή που έχει γίνει στο Easy!Appointmets διότι δεν υπάρχει η δυνατότητα να ελεγχθεί και στα δύο συστήματα το πότε (χρονική στιγμή) έχει γίνει η τροποποίηση. +\item Πιθανό είναι να γίνει μια αλλαγή σε ένα συγχρονισμένο συμβάν στο Google Calendar το οποίο όμως να έχει αλλαχθεί και στο Easy!Appointments. Σε αυτήν την περίπτωση θεωρείται ότι υπερισχύει η αλλαγή που έχει γίνει στο Easy!Appointments διότι δεν υπάρχει η δυνατότητα να ελεγχθεί και στα δύο συστήματα το ποια χρονική στιγμή έχει γίνει η τροποποίηση. \end{itemize} \subsection {Διαχείριση ραντεβού} -Όπως και ο πελάτης, έτσι και ο πάροχος υπηρεσιών θα πρέπει να έχει την δυνατότητα να διαχειρίζεται τα ραντεβού του (εφόσον του έχει δοθεί το δικαίωμα από τον διαχειριστή). Με αυτόν τον τρόπο θα έχει την δυνατότητα να πραγματοποιεί αλλαγές στο ημερολόγιο του, να αλλάζει την ημερομηνία των ραντεβού του και να καθορίζει το πλάνο του καταπώς τον βολεύει. Το Easy!Appointments εμφανίζει όλα τα ραντεβού σε ημερολόγιο, στο οποίο ο χρήστης μπορεί να περιηγηθεί χρονικά. +Όπως και ο πελάτης, έτσι και ο πάροχος υπηρεσιών θα πρέπει να έχει την δυνατότητα να διαχειρίζεται τα ραντεβού του. Με αυτόν τον τρόπο θα έχει την δυνατότητα να πραγματοποιεί αλλαγές στο ημερολόγιο του, να αλλάζει την ημερομηνία των ραντεβού του και να καθορίζει το πλάνο του καταπώς τον βολεύει. Το Easy!Appointments εμφανίζει όλα τα ραντεβού σε ημερολόγιο, στο οποίο ο χρήστης μπορεί να περιηγηθεί χρονικά. \textbf{ΒΑΣΙΚΗ ΡΟΗ} @@ -59,12 +58,12 @@ \textbf{ΕΝΑΛΛΑΚΤΙΚΕΣ ΡΟΕΣ} \begin{itemize} -\item Καθώς ο πάροχος υπηρεσιών επεξεργάζεται ένα ραντεβού μπορεί να αποφασίσει ότι δεν θέλει να αποθηκεύσει κάποιο ραντεβού και έτσι να πατήσει το κουμπί ακύρωσης και να μην επιρρεάσει το ραντεβού. -\item Σε αντίθεση με τον πελάτη, ένας πάροχος υπηρεσιών μπορεί να αλλάξει την διάρκεια ενός ραντεβού, ανεξάρτητα από το πόση ώρα διαρκεί το ραντεβού του. Οπότε στην φόρμα επεξεργασίας ενός ραντεβού υπάρχει η δυνατότητα επιλογής ημερομηνίας και ώρας έναρξης και τερματισμού του ραντεβού. +\item Καθώς ο πάροχος υπηρεσιών επεξεργάζεται ένα ραντεβού μπορεί να αποφασίσει ότι δεν θέλει να αποθηκεύσει τις αλλαγές που έχει κάνει και έτσι πατάει το κουμπί ακύρωσης αποτρέποντας την ενημέρωση των δεδομένων στην βάση. +\item Σε αντίθεση με τον πελάτη, ένας πάροχος υπηρεσιών μπορεί να αλλάξει την διάρκεια ενός ραντεβού ανεξάρτητα από το πόση ώρα διαρκεί η υπηρεσία που θα παρέχει. Οπότε στην φόρμα επεξεργασίας ενός ραντεβού υπάρχει η δυνατότητα επιλογής ημερομηνίας και ώρας έναρξης και τερματισμού του ραντεβού. \end{itemize} \subsection{Λήψη ειδοποιήσεων από το σύστημα} -Κάθε φορά που πραγματοποιείται μια ενέργεια που αφορά κάποιο ραντεβού στο σύστημα ο πάροχος υπηρεσίας θα ενημερώνεται με email (εκτός και αν απενεργοποιήσει αυτήν την ρύθμιση). Έτσι θα είναι πάντα ενήμερος σχετικά με την κατάσταση των ραντεβού του. Σε αυτά τα μηνύματα θα περιέχεται και ένα μοναδικό link το οποίο θα δίνει την δυνατότητα στον πάροχο να πραγματοποίηση αλλαγές γρήγορα στο ραντεβού που τον ενδιαφέρει. +Κάθε φορά που πραγματοποιείται μια ενέργεια που αφορά κάποιο ραντεβού στο σύστημα ο πάροχος υπηρεσίας θα ενημερώνεται με email (εκτός και αν απενεργοποιήσει αυτήν την ρύθμιση). Έτσι θα είναι πάντα ενήμερος σχετικά με την κατάσταση των ραντεβού του. Σε αυτά τα μηνύματα θα περιέχεται και ένα μοναδικό link το οποίο θα δίνει την δυνατότητα στον πάροχο να πραγματοποιήσει αλλαγές γρήγορα στο ραντεβού που τον ενδιαφέρει. \textbf{ΒΑΣΙΚΗ ΡΟΗ} @@ -90,11 +89,11 @@ Ο χρήστης γραμματέας δέχεται τηλεφώνημα από κάποιον πελάτη ο οποίος επιθυμεί να αλλάξει την ώρα του ραντεβού του αλλά δεν έχει σύνδεση με το διαδίκτυο στο σημείο που βρίσκεται. Έτσι ο γραμματέας πραγματοποιεί την αλλαγή του ραντεβού καταπώς μπορεί να βολεύει τόσο τον πάροχο υπηρεσίας όσο και τον πελάτη. Όταν τελειώσει μπορεί να αποθηκεύσει τις αλλαγές στο σύστημα. \subsection{Διαχείριση πελατών} -Εκτός των ραντεβού, ο χρήστης γραμματέας είναι σε θέση να πραγματοποιήσει αλλαγές και στα στοιχεία των πελατών, οργανώνοντας και κρατώντας πλήρη πελατολόγιο για την επιχείριση. Μελλοντικά θα είναι σε θέση να βρίσκει πολύ εύκολα οποιονδήποτε πελάτη της επιχείρισης και να βλέπει τα στοιχεία του. +Εκτός των ραντεβού, ο χρήστης γραμματέας είναι σε θέση να πραγματοποιήσει αλλαγές και στα στοιχεία των πελατών οργανώνοντας και κρατώντας πλήρη πελατολόγιο για την επιχείριση. Μελλοντικά θα είναι σε θέση να βρίσκει πολύ εύκολα οποιονδήποτε πελάτη της επιχείρισης και να βλέπει τα στοιχεία του. \textbf{ΒΑΣΙΚΗ ΡΟΗ} -Ο γραμματέας πηγαίνει στο backend στην σελίδα τον πελατών και φιλτράρει τον πελάτη που τον ενδιαφέρει και αμέσως βλέπει τα στοιχεία του. Πολύ εύκολα μπορεί να πραγματοποιήσει αλλαγές, αλλά και να τον διαγράψει από το σύστημα. +Ο γραμματέας πηγαίνει στο backend στην σελίδα τον πελατών και φιλτράρει τον πελάτη που τον ενδιαφέρει και αμέσως βλέπει τα στοιχεία του. Πολύ εύκολα μπορεί να πραγματοποιήσει αλλαγές αλλά και να τον διαγράψει από το σύστημα. \textbf{ΕΝΑΛΛΑΚΤΙΚΕΣ ΡΟΕΣ} @@ -111,11 +110,11 @@ Ο διαχειριστής τοποθετεί τα αρχεία της εφαρμογής στον server του και πηγαίνει με τον περιηγητή στην διεύθυνση που δείχνει τον κύριο κατάλογο. Η εφαρμογή καταλαβαίνει ότι δεν έχει ακόμα πραγματοποιηθεί εγκατάσταση και μεταφέρει τον χρήστη στην διαδικασία εγκατάστασης. Σε αυτήν την διαδικασία ο διαχειριστής θα πρέπει να ορίσει σημαντικά στοιχεία που αφορούν την λειτουργία του συστήματος και τα στοιχεία του λογαριασμού του. Όλα αυτά τα στοιχεία βέβαια θα είναι διαθέσιμα προς επεξεργασία από την αντίστοιχη σελίδα στο backend. \subsection{Παραμετροποίηση της εφαρμογής} -Για να μπορέσει να λειτουργήσει η εφαρμογή σύμφωνα με την μορφή της επιχείρησης θα χρειαστεί να παραμετροποίηση από τον διαχειριστή. Η παραμετροποίηση περιλαμβάνει τα ωράρια λειτουργίας της επιχείρησης, την διαχείριση των υπηρεσιών που θα είναι διαθέσιμες προς το κοινό, καθώς και την διαχείριση των πάροχων υπηρεσιών. +Για να μπορέσει να λειτουργήσει η εφαρμογή σύμφωνα με την μορφή της επιχείρησης θα χρειαστεί να παραμετροποιηθεί από τον διαχειριστή. Η παραμετροποίηση περιλαμβάνει τα ωράρια λειτουργίας της επιχείρησης, την διαχείριση των υπηρεσιών που θα είναι διαθέσιμες προς το κοινό καθώς και την διαχείριση των πάροχων υπηρεσιών. \textbf{ΒΑΣΙΚΗ ΡΟΗ} -Ο διαχειριστής εισέρχεται στο backend μέρος της εφαρμογής και επιλέγει την σελίδα των ρυθμίσεων. Εκεί έχει την δυνατότητα να θέσει τις τιμές σε διάφορες παραμέτρους, οι οποίες καθορίζουν τον τρόπο με τον οποίο λειτουργεί το σύστημα. Στόχος είναι αυτός να συμβαδίζει με τον τρόπο λειτουργίας της επιχείρισης έτσι ώστε να μπορεί η εταιρεία να επωφεληθεί από το Easy!Appointments. +Ο διαχειριστής εισέρχεται στο backend μέρος της εφαρμογής και επιλέγει την σελίδα των ρυθμίσεων. Εκεί έχει την δυνατότητα να θέσει τις τιμές σε διάφορες παραμέτρους οι οποίες καθορίζουν τον τρόπο με τον οποίο λειτουργεί το σύστημα. Στόχος είναι αυτός να συμβαδίζει με τον τρόπο λειτουργίας της επιχείρισης έτσι ώστε να μπορεί η εταιρεία να επωφεληθεί από το Easy!Appointments. \subsection{Διαχείριση ραντεβού} Ο διαχειριστής ως χρήστης έχει πρόσβαση σε όλες τις πληροφορίες του συστήματος. Έτσι μπορεί να μεταβάλει και να προσθέσει ραντεβού στο σύστημα σαν να ήταν ένας πάροχος υπηρεσιών ή ένας χρήστης γραμματέας. @@ -125,11 +124,11 @@ Ο διαχειριστής συνδέεται στο backend μέρος της εφαρμογής και πηγαίνει στην σελίδα του ημερολογίου. Εκεί μπορεί να δει τα ραντεβού όλων των πάροχων υπηρεσιών και να πραγματοποιήσει αλλαγές σε αυτά. Με το που αποθηκευτούν οι αλλαγές σε ένα ραντεβού ο πελάτης και ο πάροχος θα ενημερωθούν με email, όπως θα γινόταν δηλαδή αν την επεξεργασία την έκανε ένας πάροχος. \subsection {Διαχείριση χρηστών} -Τις υπηρεσίες που προσφέρει η εταιρεία τις αναλαμβάνουν κάποιοι υπάλληλοι (ή ομάδες υπαλλήλων), οι οποίοι αναφέρονται στο σύστημα ως πάροχοι υπηρεσιών. Τα στοιχεία τους, τις αρμοδιότητές τους και τα δικαιώματα μέσα στο σύστημα τα ορίζει μόνο ο διαχειριστής του συστήματος, από το backend μέρος της εφαρμογής. Επίσης είναι δυνατή η διαχείριση των διαχειριστών, γραμματειών και πελατών του συστήματος. +Τις υπηρεσίες που προσφέρει η εταιρεία τις αναλαμβάνουν κάποιοι υπάλληλοι (ή ομάδες υπαλλήλων), οι οποίοι αναφέρονται στο σύστημα ως πάροχοι υπηρεσιών. Τα στοιχεία τους και τις αρμοδιότητές τους μέσα στο σύστημα τα ορίζει μόνο ο διαχειριστής του συστήματος, από το backend μέρος της εφαρμογής. Επίσης είναι δυνατή η διαχείριση των διαχειριστών, γραμματειών και πελατών του συστήματος. \textbf{ΒΑΣΙΚΗ ΡΟΗ} -Ο διαχειριστής της εφαρμογής συνδέεται στο backend μέρος του συστήματος και πηγαίνει στην σελίδα των πάροχων υπηρεσίας. Εκεί βλέπει μια λίστα με τους ήδη καταχωρημένους πάροχους υπηρεσιών. Αν θέλει μπορεί να προσθέσει έναν καινούργιο πάροχο, ή να επεξεργαστεί και να διαγράψει κάποιον πάροχο που υπάρχει ήδη στην βάση δεδομένων. +Ο διαχειριστής της εφαρμογής συνδέεται στο backend μέρος της εφαρμογής και πηγαίνει στην σελίδα των πάροχων υπηρεσίας. Εκεί βλέπει μια λίστα με τους ήδη καταχωρημένους πάροχους. Αν θέλει μπορεί να προσθέσει έναν καινούργιο χρήστη, ή να επεξεργαστεί και να διαγράψει κάποια εγγραφή που υπάρχει ήδη στην βάση δεδομένων. \subsection {Διαχείριση υπηρεσιών} Οι πελάτες που θα επισκέπτονται τον ιστότοπο του Easy!Appointments της επιχείρησης θα κλείνουν ραντεβού για συγκεκριμένες υπηρεσίες. Το ποιες υπηρεσίες θα είναι διαθέσιμες και ποιοι πάροχοι υπηρεσιών μπορούν να εξυπηρετήσουν τι, το διαχειρίζεται ο διαχειριστής του συστήματος. Αποτελεί υποπερίπτωση χρήσης της παραμετροποίησης της εφαρμογής. \ No newline at end of file diff --git a/doc/thesis/snippets/google_sync_algorithm.php b/doc/thesis/snippets/google_sync_algorithm.php index 71fc6200..1e67e1f1 100644 --- a/doc/thesis/snippets/google_sync_algorithm.php +++ b/doc/thesis/snippets/google_sync_algorithm.php @@ -1,6 +1,6 @@