From d15c956ede753c833a0f1162ad3355b6dbbcbbd7 Mon Sep 17 00:00:00 2001 From: Stavros Papadakis Date: Thu, 13 Oct 2016 15:11:13 +0300 Subject: [PATCH] Approved school applications handling --- config/settings/acl.global.php | 1 + config/settings/nav.global.php | 24 ++++---- data/db/schema.mysql.sql | 2 + module/application/templates/about.twig | 7 +++ module/application_form/bootstrap.php | 13 ++++ module/application_form/data/schema.mysql.sql | 2 + .../application_form/src/Action/Approved.php | 59 +++++++++++++++++++ .../src/Service/ApplicationFormService.php | 39 +++++++++++- .../templates/application_form/approved.twig | 38 ++++++++++++ module/csv_export/bootstrap.php | 31 ++++++++++ .../open_data/templates/open_data/index.twig | 9 +++ 11 files changed, 212 insertions(+), 13 deletions(-) create mode 100644 module/application_form/src/Action/Approved.php create mode 100644 module/application_form/templates/application_form/approved.twig diff --git a/config/settings/acl.global.php b/config/settings/acl.global.php index 59dc833..8a9f291 100644 --- a/config/settings/acl.global.php +++ b/config/settings/acl.global.php @@ -31,6 +31,7 @@ return [ ['/application-form', ['school'], ['get', 'post']], ['/application-form/submit-success', ['school'], ['get']], ['/application-form/report', ['school'], ['get']], + ['/application-form/approved', ['guest'], ['get']], ['/receive-equip', ['school'], ['get', 'post'], GrEduLabs\ReceiveEquip\Acl\Assertion\CanSubmit::class], ['/receive-equip/submit-success', ['school'], ['get']], ['/receive-equip/report', ['school'], ['get']], diff --git a/config/settings/nav.global.php b/config/settings/nav.global.php index a74aad5..b32cb21 100644 --- a/config/settings/nav.global.php +++ b/config/settings/nav.global.php @@ -7,7 +7,6 @@ * @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/) * @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html */ - return [ 'navigation' => [ 'main' => [ @@ -23,27 +22,27 @@ return [ 'info' => [ 'label' => 'Πληροφορίες', 'route' => 'school', - 'icon' => 'info', + 'icon' => 'info', ], 'staff' => [ 'label' => 'Εκπαιδευτικοί', 'route' => 'school.staff', - 'icon' => 'users', + 'icon' => 'users', ], 'labs' => [ 'label' => 'Χώροι', 'route' => 'school.labs', - 'icon' => 'building-o', + 'icon' => 'building-o', ], 'assets' => [ 'label' => 'Εξοπλισμός', 'route' => 'school.assets', - 'icon' => 'tv', + 'icon' => 'tv', ], 'software' => [ 'label' => 'Λογισμικό', 'route' => 'school.software', - 'icon' => 'th', + 'icon' => 'th', ], ], ], @@ -59,7 +58,7 @@ return [ 'label' => 'Ανοικτά δεδομένα', 'route' => 'open_data', ], - 'university_form' => [ + 'university_form' => [ 'label' => 'Ιδρύματα', 'route' => 'university_form', ], @@ -67,17 +66,20 @@ return [ 'label' => 'Εκπαιδευτικοί', 'route' => 'teacher_form', ], + 'approved-applications' => [ + 'label' => 'Αιτήσεις που εγκρίθηκαν', + 'route' => 'application_form.approved', + ], 'about' => [ 'label' => 'Σχετικά με τη δράση', 'route' => 'about', ], 'forum' => [ - 'label' => 'Φόρουμ βοήθειας', - 'href' => '/#forum', + 'label' => 'Φόρουμ βοήθειας', + 'href' => '/#forum', 'external' => true, - 'target' => '_blank', + 'target' => '_blank', ], - ], 'admin' => [ 'adminhome' => [ diff --git a/data/db/schema.mysql.sql b/data/db/schema.mysql.sql index ac9ae77..5caeb3a 100644 --- a/data/db/schema.mysql.sql +++ b/data/db/schema.mysql.sql @@ -25,6 +25,8 @@ CREATE TABLE `applicationform` ( `received_ts` timestamp NULL, `received_by` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `received_document` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '', + `approved` int(11) unsigned NOT NULL DEFAULT 0, + `approved_date` int(11) unsigned NULL, PRIMARY KEY (`id`), KEY `index_foreignkey_applicationform_school` (`school_id`), CONSTRAINT `c_fk_applicationform_school_id` FOREIGN KEY (`school_id`) REFERENCES `school` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE diff --git a/module/application/templates/about.twig b/module/application/templates/about.twig index 509ed1f..d82a349 100644 --- a/module/application/templates/about.twig +++ b/module/application/templates/about.twig @@ -83,6 +83,13 @@ ΑΝΑΛΥΤΙΚΕΣ ΠΡΟΔΙΑΓΡΑΦΕΣ ΕΞΟΠΛΙΣΜΟΥ ΔΙΑΔΙΚΑΣΙΕΣ ΕΞΟΠΛΙΣΜΟΥ ΣΧΟΛΕΙΩΝ

+ +

Tεύχος του διαγωνισμού προμήθειας (Α' φάση)

+

Στο παρακάτω αρχείο μπορείτε να βρείτε τη διακήρυξη του διαγωνισμού για την "Προμήθεια, εγκατάσταση εξοπλισμού + για την αναβάθμιση ψηφιακών υποδομών Τεχνολογίας Πληροφορικής και Επικοινωνιών σε επιλεγμένες σχολικές μονάδες Πρωτοβάθμιας και Δευτεροβάθμιας Εκπαίδευσης"

+

+ ΑΡΧΕΙΟ ΔΙΑΚΗΡΥΞΗΣ +

diff --git a/module/application_form/bootstrap.php b/module/application_form/bootstrap.php index c8b9cb8..46f8ebf 100644 --- a/module/application_form/bootstrap.php +++ b/module/application_form/bootstrap.php @@ -87,6 +87,16 @@ return function (Slim\App $app) { $c ); }; + + $container[GrEduLabs\ApplicationForm\Action\Approved::class] = function ($c) { + return new GrEduLabs\ApplicationForm\Action\Approved( + $c->get('view'), + $c->get(GrEduLabs\Schools\Service\AssetServiceInterface::class), + $c->get(GrEduLabs\Schools\Service\LabServiceInterface::class), + $c->get(GrEduLabs\ApplicationForm\Service\ApplicationFormServiceInterface::class) + ); + }; + }); $events('on', 'app.bootstrap', function ($app, $container) { @@ -104,5 +114,8 @@ return function (Slim\App $app) { $this->get('/report', GrEduLabs\ApplicationForm\Action\ApplicationFormPdf::class) ->setName('application_form.report'); })->add(GrEduLabs\Schools\Middleware\FetchSchoolFromIdentity::class); + + $app->get('/application-form/approved', GrEduLabs\ApplicationForm\Action\Approved::class) + ->setName('application_form.approved'); }); }; diff --git a/module/application_form/data/schema.mysql.sql b/module/application_form/data/schema.mysql.sql index 5c9aeee..4b307aa 100644 --- a/module/application_form/data/schema.mysql.sql +++ b/module/application_form/data/schema.mysql.sql @@ -25,6 +25,8 @@ CREATE TABLE `applicationform` ( `received_ts` timestamp NULL, `received_by` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `received_document` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '', + `approved` int(11) unsigned NOT NULL DEFAULT 0, + `approved_date` int(11) unsigned NULL, PRIMARY KEY (`id`), KEY `index_foreignkey_applicationform_school` (`school_id`), CONSTRAINT `c_fk_applicationform_school_id` FOREIGN KEY (`school_id`) REFERENCES `school` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE diff --git a/module/application_form/src/Action/Approved.php b/module/application_form/src/Action/Approved.php new file mode 100644 index 0000000..e9f2aa9 --- /dev/null +++ b/module/application_form/src/Action/Approved.php @@ -0,0 +1,59 @@ +view = $view; + $this->assetsService = $assetsService; + $this->labService = $labService; + $this->appFormService = $appFormService; + } + + public function __invoke(Request $req, Response $res) { + $appForms = $this->appFormService->findApprovedSchoolApplicationForms(); + return $this->view->render($res, 'application_form/approved.twig', [ + 'approved_forms' => $appForms + ]); + } + +} diff --git a/module/application_form/src/Service/ApplicationFormService.php b/module/application_form/src/Service/ApplicationFormService.php index 31866cb..43771b3 100644 --- a/module/application_form/src/Service/ApplicationFormService.php +++ b/module/application_form/src/Service/ApplicationFormService.php @@ -51,10 +51,21 @@ class ApplicationFormService implements ApplicationFormServiceInterface return $this->exportApplicationForm($appForm); } - private function exportApplicationForm(OODBBean $bean) + /** + * + * @param OODBBean $bean the application form bean + * @param boolean $with_school_info if true, the name, eduadmin and regionadmin properties of the school are provided with the exported bean info + * @return array + */ + private function exportApplicationForm(OODBBean $bean, $with_school_info = false) { $appForm = $bean->export(); - $appForm['items'] = array_map(function ($itemBean) { + if ($with_school_info === true) { + $appForm['school'] = $bean->school->name; + $appForm['eduadmin'] = $bean->school->eduadmin->name; + $appForm['regioneduadmin'] = $bean->school->eduadmin->regioneduadmin->name; + } + $appForm['items'] = array_map(function ($itemBean) use ($with_school_info) { return array_merge($itemBean->export(), [ 'lab' => $itemBean->lab->name, 'itemcategory' => $itemBean->itemcategory->name, @@ -64,4 +75,28 @@ class ApplicationFormService implements ApplicationFormServiceInterface return $appForm; } + + /** + * Get all the approved applications + * + * @return array The exported bean info from retrieved data + */ + public function findApprovedSchoolApplicationForms() + { + $selectedAppForms = R::getAll('SELECT applicationform.* ' + . 'FROM applicationform ' + . 'JOIN school ON applicationform.school_id=school.id ' + . 'JOIN eduadmin ON school.eduadmin_id=eduadmin.id ' + . 'JOIN regioneduadmin ON eduadmin.regioneduadmin_id=regioneduadmin.id ' + . 'WHERE applicationform.approved=1 ' + . 'ORDER BY regioneduadmin.name, eduadmin.name, school.name'); + $appForms = R::convertToBeans('applicationform', $selectedAppForms); + + return array_map(function ($c) { + return $this->exportApplicationForm($c, true); + }, + $appForms + ); + } + } diff --git a/module/application_form/templates/application_form/approved.twig b/module/application_form/templates/application_form/approved.twig new file mode 100644 index 0000000..8c16446 --- /dev/null +++ b/module/application_form/templates/application_form/approved.twig @@ -0,0 +1,38 @@ +{% extends "layout.twig" %} +{% block content %} +
+

Αιτήσεις που εγκρίθηκαν

+

Στο παρακάτω αρχείο μπορείτε να βρείτε τη διακήρυξη του διαγωνισμού για την "Προμήθεια, εγκατάσταση εξοπλισμού +για την αναβάθμιση ψηφιακών υποδομών Τεχνολογίας Πληροφορικής και Επικοινωνιών σε επιλεγμένες σχολικές μονάδες Πρωτοβάθμιας και Δευτεροβάθμιας Εκπαίδευσης"

+

+ ΑΡΧΕΙΟ ΔΙΑΚΗΡΥΞΗΣ +

+

Ακολουθεί κατάλογος των αιτήσεων οι οποίες εγκρίθηκαν στην πρώτη φάση διεξαγωγής του προγράμματος.

+ {% if approved_forms %} +
+ + + + + + + + + + + {% for form in approved_forms %} + + + + + + {% endfor %} + +
Συνολικά {{ approved_forms | length }} εγκεκριμένες αιτήσεις.
#ΣχολείοΔιεύθυνση όπου ανήκει
{{ loop.index }}{{ form.school }} {{ form.eduadmin }}
{{ form.regioneduadmin }}
+
+ {% else %} + + {% endif %} +
+{% endblock %} + diff --git a/module/csv_export/bootstrap.php b/module/csv_export/bootstrap.php index c003b8c..abaa1b0 100644 --- a/module/csv_export/bootstrap.php +++ b/module/csv_export/bootstrap.php @@ -130,6 +130,7 @@ return function (App $app) { 'Αιτιολογία χρήσης', ], ], + 'newapplication' => [ 'data_callback' => 'csv_export_newapplication', 'headers' => [ @@ -147,6 +148,7 @@ return function (App $app) { 'Αιτιολογία χρήσης', ], ], + 'volunteer_teachers' => [ 'data_callback' => 'csv_export_volunteer_teachers', 'headers' => [ @@ -204,6 +206,15 @@ return function (App $app) { 'Έργο 10', ], ], + + 'sch_approved' => [ + 'data_callback' => 'csv_export_sch_approved', + 'headers' => [ + 'ID', + 'Κωδικός σχολείου', + 'Ονομασία σχολείου', + ], + ] ]; }; @@ -620,6 +631,26 @@ return function (App $app) { return $appForms; }; }; + + + $c['csv_export_sch_approved'] = function ($c) { + + return function () { + $sql = 'SELECT applicationform.id AS id, ' + . ' school.registry_no AS school_registry_no, ' + . ' school.name AS school_name ' + . ' FROM applicationform' + . ' LEFT JOIN school ON applicationform.school_id = school.id ' + . ' WHERE applicationform.approved = 1'; + + $sch_appr = R::getAll($sql); + + return $sch_appr; + }; + }; + + + }); $events('on', 'app.bootstrap', function (App $app, Container $c) { diff --git a/module/open_data/templates/open_data/index.twig b/module/open_data/templates/open_data/index.twig index 29b7a39..feef483 100644 --- a/module/open_data/templates/open_data/index.twig +++ b/module/open_data/templates/open_data/index.twig @@ -85,6 +85,15 @@ + + Σχολεία των οποίων οι αιτήσεις εγκρίθηκαν + + + + Αρχείο .csv + + + -- GitLab