form.twig 11.8 KB
Newer Older
1 2
{% extends "layout.twig" %}

3
{% macro itemSelect(name, label, options, selected, index) %}
4 5 6 7 8 9 10 11 12 13
    <div class="form-group">
        <select class="form-control input-sm" name="items[{{ index | default('<%= index %>') | raw }}][{{ name }}]">
        <option value="" disabled selected>{{ label|striptags }}</option>
        {% for option in options %}
            <option value="{{ option.value|e }}"{% if selected == option.value %} selected{% endif %}>
                {{ option.label }}
            </option>
        {% endfor %}
        </select>
    </div>
14 15
{% endmacro %}

16
{% macro itemCount(name, label, value, index, minvalue) %}
17 18
    <div class="form-group">
        <div class="col-xs-12 col-sm-12 col-md-9">
19
            <input placeholder="{{ label|striptags }}" class="form-control input-sm" min="{{ minvalue|default(1)}}"
20
                type="number" name="items[{{ index | default('<%= index %>') | raw }}][{{ name }}]" value="{{ value|default('')|raw }}">
21 22 23 24
        </div>
    </div>
{% endmacro %}

25 26 27 28 29 30 31 32
{% macro itemReasons(name, label, value, index) %}
    <div class="form-group">
        <textarea class="form-control input-sm" name="items[{{ index | default('<%= index %>') | raw }}][{{ name }}]"
                  placeholder="{{ label|striptags }}"
                  rows="1" cols="20">{{ value|default('') }}</textarea>
    </div>
{% endmacro %}

33 34 35 36 37 38 39 40 41 42 43 44 45 46
{% macro select(name, label, options, selected) %}
    <div class="form-group">
        <label class="control-label hidden-xs hidden-sm" for="el-{{ name }}">{{ label|raw }}</label>
        <select class="form-control" name="{{ name }}" id="el-{{ name }}">
            <option value="" disabled selected>{{ label|striptags }}</option>
            {% for option in options %}
            <option value="{{ option.value|e }}"{% if selected == option.value %} selected{% endif %}>
                {{ option.label }}
            </option>
            {% endfor %}
        </select>
    </div>
{% endmacro %}

47
{% macro yesno(name, label, selected) %}
48 49 50 51
    <div class="form-group">
        <label class="control-label hidden-xs hidden-sm" for="el-{{ name }}">{{ label|raw }}</label>
        <select class="form-control" name="{{ name }}" id="el-{{ name }}">
            <option value="" disabled selected>{{ label|striptags }}</option>
52 53
            <option value="ΝΑΙ"{% if selected == 'ΝΑΙ' %} selected{% endif %}>Ναι</option>
            <option value="ΟΧΙ"{% if selected == 'ΟΧΙ' %} selected{% endif %}>Όχι</option>
54 55 56 57 58 59 60
        </select>
    </div>
{% endmacro %}

{% macro text(name, label, value) %}
    <div class="form-group">
        <label class="control-label hidden-xs hidden-sm" for="el-{{ name }}">{{ label|raw }}</label>
61 62
        <textarea class="form-control" name="{{ name }}"
                  id="el-{{ name }}"
63
                  placeholder="{{ label|striptags }}">{{ value|default('') }}</textarea>
64 65 66
    </div>
{% endmacro %}

67 68 69 70 71 72 73
{% macro infoBox(boxtype, msg) %}
    <div class="alert alert-{{ boxtype }} alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert" aria-label="Κλείσιμο"><span aria-hidden="true">&times;</span></button>
        <p class="text-{{ boxtype }}">{{ msg | raw }}</p>
    </div>
{% endmacro %}

74
{% block content %}
Vassilis Kanellopoulos's avatar
Vassilis Kanellopoulos committed
75
    {% import _self as macros %}
76

77 78 79 80 81 82
<div id="app-form">
    <h1>
    {% block title %}
        Αίτηση <small>για νέο εξοπλισμό</small>
    {% endblock %}
    </h1>
83 84
    <form method="post" action="" data-is-valid="{{ form.is_valid | default(true) ? '1' : '0' }}"
          data-messages="{{ form.messages|default({})|json_encode }}">
85
        <div class="form-group">
kanellov's avatar
kanellov committed
86
            <p>
87
                Σε αυτή την καρτέλα θα καταχωρήσετε πληροφορίες που αφορούν στον εξοπλισμό που ήδη υπάρχει στο σχολείο και είναι λειτουργικός ή/και στον νέο εξοπλισμό που θέλετε να αποκτήσετε, υποβάλλοντας και τη σχετική αίτηση. Αν ένα σχολείο είχε ήδη συμπληρώσει τη σχετική αίτηση μπορεί α) να διατηρήσει την αρχική αίτησή του, β) να επικαιροποιήσει την αρχική αίτησή του γ) να υποβάλει νέα αίτηση.
Vassilis Kanellopoulos's avatar
Vassilis Kanellopoulos committed
88 89
            </p>
            <p>
90 91
                Ελέγχετε προσεκτικά τα πεδία της αίτησης
                του σχολείου σας πριν την υποβάλετε και στη συνέχεια την εκτυπώνετε
92 93
                σε PDF αρχείο για να έχετε ένα πλήρες αντιγραφο για τα αρχεία
                σας.
Vassilis Kanellopoulos's avatar
Vassilis Kanellopoulos committed
94
            </p>
95
         </div>
96

Vassilis Kanellopoulos's avatar
Vassilis Kanellopoulos committed
97 98 99
        <div class="table-responsive">
            <fieldset>
                <legend>Νέος εξοπλισμός</legend>
100
                <div id="items-list">
101
                    <table class="table table-hover table-striped table-condensed">
102 103
                        <thead>
                            <tr>
104 105 106 107 108
                                <th>Πλήθος αιτούμενων</th>
                                <th>Πλήθος υπαρχόντων που λειτουργούν</th>
                                <th class="col-xs-3">Τύπος</th>
                                <th class="col-xs-3">Χώρος</th>
                                <th class="col-xs-3">Αιτιολογία χρήσης</th>
109 110 111
                                <th></th>
                            </tr>
                        </thead>
112
                        <tbody>
113
                            {% for itemIndex,item in form.values.items %}
114 115
                                <tr>
                                    <td>{{ macros.itemCount('qty', 'Πλήθος', item.qty, loop.index0) }}</td>
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
                                    <td>{{ macros.itemCount('qtyacquired', 'Πλήθος', item.qtyacquired, loop.index0, 0) }}</td>
                                    <td class="col-xs-3">
                                        {{ macros.itemSelect('itemcategory_id', 'Τύπος', type_choices, item.itemcategory_id, loop.index0) }}
                                        {% if item.prev_form_load == true %}
                                            {% if item.itemcategory_id_prev == -2 %}
                                                {{ macros.infoBox('warning', "<small>Τα είδη έχουν τροποποιηθεί. Παρακαλούμε επιλέξτε εκ νέου από τη λίστα το είδος #{ item.itemcategory } εφόσον είναι διαθέσιμο.</small>") }}
                                            {% elseif item.itemcategory_id_prev == -1 %}
                                                {{ macros.infoBox('danger', "Δεν είναι διαθέσιμο το είδος #{ item.itemcategory } στη νέα αίτηση. Θα πρέπει να το καταργήσετε ή να επιλέξετε νέο είδος εξοπλισμού.") }}
                                            {% else %}
                                                {{ macros.infoBox('info', "<small>Το είδος #{ item.itemcategory } έχει αντικατασταθεί στη νέα αίτηση.</small>") }}
                                            {% endif %}
                                            </div>
                                        {% endif %}
                                    </td>
                                    <td class="col-xs-3">{{ macros.itemSelect('lab_id', 'Χώρος', lab_choices, item.lab_id, loop.index0 ) }}</td>
                                    <td class="col-xs-3">{{ macros.itemReasons('reasons', 'Αιτιολογία χρήσης', item.reasons, loop.index0) }}</td>
132
                                    <td>
133 134
                                        {% if loop.index0 > 0 %}
                                        <button type="button" class="btn btn-xs text-danger remove-row">
135
                                        <i class="fa fa-remove"></i>
136
                                        {% endif %}
137 138
                                    </button</td>
                                </tr>
139 140 141
                            {% else %}
                                <tr>
                                    <td>{{ macros.itemCount('qty', 'Πλήθος', '', 0) }}</td>
142 143 144 145
                                    <td>{{ macros.itemCount('qtyacquired', 'Πλήθος', '', 0, 0) }}</td>
                                    <td class="col-xs-3">{{ macros.itemSelect('itemcategory_id', 'Τύπος', type_choices, '', 0) }}</td>
                                    <td class="col-xs-3">{{ macros.itemSelect('lab_id', 'Χώρος', lab_choices, '', 0 ) }}</td>
                                    <td class="col-xs-3">{{ macros.itemReasons('reasons', 'Αιτιολογία χρήσης', '', 0) }}</td>
146 147
                                    <td></td>
                                </tr>
148 149
                            {% endfor %}
                        </tbody>
150 151
                        <tfoot>
                            <tr>
152
                                <td colspan="5" class="text-right col-xs-12">
153 154 155 156 157 158 159 160 161
                                    <button type="button" class="btn btn-sm btn-primary add-row">
                                        <i class="fa fa-plus"></i>
                                        Προσθήκη εξοπλισμού
                                    </button>
                                </td>
                            </tr>
                        </tfoot>
                    </table>
                </div>
162
                {{ macros.text('comments', 'Σχόλια/Παρατηρήσεις', form.values.comments) }}
Vassilis Kanellopoulos's avatar
Vassilis Kanellopoulos committed
163 164
            </fieldset>
        </div>
165 166 167 168
        <hr>
        <div class="form-group text-center">
            <button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary">Υποβολή</button>
        </div>
Vassilis Kanellopoulos's avatar
Vassilis Kanellopoulos committed
169 170
        <input type="hidden" name="{{ csrf.name_key }}" value="{{ csrf.name }}">
        <input type="hidden" name="{{ csrf.value_key }}" value="{{ csrf.value }}">
171
    </form>
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
    {% if choose %}
    <div class="modal fade" id="app-form-load-modal" role="dialog">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-body">
                    <p>Επιθυμείτε η νέα αίτηση να βασιστεί στη τελευταία αίτησή σας;</p>
                    <div class="text-right">
                        <button type="button" class="btn btn-default" data-dismiss="modal" aria-label="Close">
                            Όχι
                        </button>
                        <a class="btn btn-primary" href="{{ path_for('application_form', {}, { load: 1 }) }}">Ναι</a>
                    </div>
                </div>
            </div>
        </div>
    </div>
    {% endif %}
189
    <script type="text/template" id="app-form-item-row-template">
Vassilis Kanellopoulos's avatar
Vassilis Kanellopoulos committed
190
        <td>{{ macros.itemCount('qty', 'Πλήθος') }}</td>
191
        <td>{{ macros.itemCount('qtyacquired', 'Πλήθος', '', '', 0) }}</td>
192 193 194
        <td>{{ macros.itemSelect('itemcategory_id', 'Τύπος', type_choices) }}</td>
        <td>{{ macros.itemSelect('lab_id', 'Χώρος', lab_choices) }}</td>
        <td>{{ macros.itemReasons('reasons', 'Αιτιολογία χρήσης') }}</td>
195 196 197 198 199 200 201 202 203 204 205
        <td><button type="button" class="btn btn-xs text-danger remove-row">
            <i class="fa fa-remove"></i>
        </button</td>
    </script>
</div>
{% endblock %}

{% block inlinejs %}
    {{ parent() }}
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.3/backbone-min.js"></script>
206 207
    <script src="{{ base_url() }}/js/application_form/index.js"></script>
{% endblock %}