Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Errore 500 inserimento valutazione menu a tendina #774

Open
sempliciniluigi89 opened this issue Oct 31, 2024 · 13 comments
Open

Errore 500 inserimento valutazione menu a tendina #774

sempliciniluigi89 opened this issue Oct 31, 2024 · 13 comments
Labels
Errore Segnalazioni di malfunzionamenti

Comments

@sempliciniluigi89
Copy link

sempliciniluigi89 commented Oct 31, 2024

Buongiorno, finalmente sono riuscito a modificare la tipologia d'inserimento delle valutazioni alle classe mediante il percorso templates/lezioni/voti_classe_edit.html.twig In pratica invece del classico tasto "aggiungi" ,ho inserito un menu a tendina dove si clicca e si scorre scegliendo la valutazione da attribuire alla classe ,vi alle pure il codice :

{% extends 'lezioni/index.html.twig' %}

{% form_theme form _self %}

{% block pagina_contenuto %}
<div class="container-fluid">
  <div class="panel panel-primary gs-mt-4" >
    <div class="panel-heading">
      <div class="panel-title">{{ form_title|trans }}</div>
    </div>
    <div class="panel-body gs-pt-0">
      <div class="row bg-success">
        <div class="col-sm-2 text-right"><strong class="gs-big">Classe:</strong></div>
        <div class="col-sm-4"><span class="gs-big">{{ label.classe }}</span></div>
      </div>
      <div class="row bg-success gs-mb-3">
        <div class="col-sm-2 text-right"><strong class="gs-big">Materia:</strong></div>
        <div class="col-sm-4"><span class="gs-big">{{ label.materia }}</span></div>
        <div class="col-sm-2 text-right"><strong class="gs-big">Valutazione:</strong></div>
        <div class="col-sm-4"><span class="gs-big">{{ label.tipo|trans }}</span></div>
      </div>
  {% if app.session.get('/APP/ROUTE/lezioni_voti_classe/conferma') != 0 %}
      <div class="alert alert-warning" role="alert">
        <div class="text-center">
          <strong class="gs-big">
            {{ 'message.alunni_assenti_in_data'|trans }}<br>
            {% for a in assenti %}{{ a.cognome }} {{ a.nome }} ({{ a.dataNascita|date('d/m/Y') }}){{ not loop.last ? ', ' }}{% endfor %}.<br>
            <em>{{ 'message.modifica_data_o_conferma'|trans }}</em>
          </strong>
        </div>
      </div>
  {% endif %}
      {{ form_start(form) }}
      {{ form_errors(form) }}
      {{ form_row(form.data) }}
      {{ form_row(form.visibile) }}
      {{ form_row(form.argomento) }}
      <ul id="gs-form-collection" class="list-group">
      {% for alu in form.lista %}
        <li class="list-group-item">
          <div class="row">
            <div class="col-sm-3">
              <strong>{{ alu.alunno.vars.value }}</strong>
            </div>
            {{ form_widget(alu) }}
          </div>
        </li>
      {% endfor %}
      </ul>
      {{ form_end(form) }}
    </div>
  </div>
</div>
{% endblock %}

{% block pagina_css %}
{{ parent() }}
<link href="{{ asset('vendor/bootstrap-datepicker/css/bootstrap-datepicker3.min.css') }}" rel="stylesheet">
{% endblock %}

{% block pagina_js_fine %}
{{ parent() }}
<script src="{{ asset('vendor/bootstrap-datepicker/js/bootstrap-datepicker.min.js') }}"></script>
<script src="{{ asset('vendor/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js') }}"></script>
<script>
$(document).ready(function() {
  $('[data-toggle="popover"]').popover();
  $('.input-group.date').datepicker({
    format: "dd/mm/yyyy",
    weekStart: 1,
    maxViewMode: 1,
    daysOfWeekDisabled: "0",
    startDate: "{{ label.inizio }}",
    endDate: "{{ date()|date('d/m/Y') }}",
    datesDisabled: {{ label.festivi|raw }},
    todayBtn: "linked",
    todayHighlight: true,
    autoclose: true,
    language: "it",
    zIndexOffset: 1200
  });

  function updateVotoLabel(select) {
    var value = $(select).val();
    var label = $(select).closest('.row').find('.voto-label');
    if (value) {
      var numericValue = parseFloat(value.replace('+', '.25').replace('½', '.5').replace('-', '.75'));
      var labelClass = numericValue >= 6 ? 'label-success' : (numericValue < 5 ? 'label-danger' : 'label-warning');
      label.removeClass('label-default label-success label-danger label-warning').addClass(labelClass).text(value);
    } else {
      label.removeClass('label-success label-danger label-warning').addClass('label-default').text('--');
    }
  }

  $('input:radio[name="voti_classe[visibile]"]').change(function() {
    if ($(this).val() == 1) {
      $('input[name^="voti_classe[lista]"][name$="[media]"][value=1]').prop('checked', true);
      $('input[name^="voti_classe[lista]"][name$="[media]"]').prop('disabled', false);
    } else {
      $('input[name^="voti_classe[lista]"][name$="[media]"][value=0]').prop('checked', true);
      $('input[name^="voti_classe[lista]"][name$="[media]"]').prop('disabled', true);
    }
  });

  // init
  if ($('input[name="voti_classe[visibile]"]:checked').val() == 0) {
    $('input[name^="voti_classe[lista]"][name$="[media]"][value=0]').prop('checked', true);
    $('input[name^="voti_classe[lista]"][name$="[media]"]').prop('disabled', true);
  }
});
</script>
{% endblock %}

{% block _voti_classe_lista_entry_widget %}
  <div class="col-sm-9">
    <div class="row">
      <label class="control-label col-sm-2" for="{{ form.voto.vars.id }}">Voto</label>
      <div class="col-sm-10">
        <span class="label label-default voto-label gs-mr-1 gs-big" style="display:inline-block;width:3em;padding:0.6em 0.2em;">--</span>
        <select id="{{ form.voto.vars.id }}" name="{{ form.voto.vars.full_name }}" class="form-control" style="width: auto; display: inline-block;">
          <option value="">Seleziona voto</option>
          {% for i in 1..10 %}
            <option value="{{ i }}">{{ i }}</option>
            {% if i < 10 %}
              <option value="{{ i }}+">{{ i }}+</option>
              <option value="{{ i }}½">{{ i }}½</option>
              <option value="{{ i+1 }}-">{{ i+1 }}-</option>
            {% endif %}
          {% endfor %}
        </select>
      </div>
    </div>
    <div class="row ">
      <label class="control-label col-sm-2" for="{{ form.giudizio.vars.id }}">Giudizio</label>
      <div class="col-sm-10">
          {{ form_widget(form.giudizio) }}
      </div>
    </div>
    <div class="row ">
      <label class="control-label col-sm-2" for="{{ form.media.vars.id }}">{{ 'label.voto_in_media'|trans }}</label>
      <div class="col-sm-10">
          {{ form_widget(form.media) }}
      </div>
    </div>
  </div>
  {{ form_widget(form.id) }}
  {{ form_widget(form.alunno) }}
{% endblock %}

Devo dire che delle volte funziona ed altre no ,infatti se si tratta di attribuire la valutazione a 1,3 massimo 5 alunni ,lo fa egregiamente ,ma se si tratta dell'intera classe mi riporta l'errore 500 che ora vi allego .Ora ho provato ad inserire a tutti gli alunni la valutazione pari a 9 e va tutto bene, infatti non mi da nessun problema ,non vorrei il problema fosse nel codice che permette come unico voto attribuibile il 9 .
2024-10-31_12-41.log

@sempliciniluigi89 sempliciniluigi89 added the Errore Segnalazioni di malfunzionamenti label Oct 31, 2024
@luigiadoc
Copy link

luigiadoc commented Oct 31, 2024

potresti fornire il codice così da applicarlo ?
Anche io ci sto lavorando.

@trinko
Copy link
Collaborator

trinko commented Oct 31, 2024

Anzi tutto fai attenzione a non modificare direttamente il file templates/lezioni/voti_classe_edit.html.twig ma la sua copia in PERSONAL/templates/lezioni/voti_classe_edit.html.twig. Altrimenti ogni volta che fai un aggiornamento rischi di perdere le tue modifiche, sovrascritte dai file dell'aggiornamento.

L'errore dice che stai inviando una stringa di testo, mentre il PHP si aspetta un numero decimale (float). Puoi risolvere se crei un menu a tendina dove il testo mostrato è appunto una stringa (tipo "6+") mentre il valore è il numero corrispondente.
Per intenderci, il codice HTML della singola opzione è del tipo:
<option value="6.3"> 6+ </option>

@sempliciniluigi89
Copy link
Author

sempliciniluigi89 commented Oct 31, 2024 via email

@manuelbarberi
Copy link

manuelbarberi commented Nov 1, 2024

Guarda potresti usare questo codice:

{% extends 'lezioni/index.html.twig' %}

{% form_theme form _self %}

{% block pagina_contenuto %}
<div class="container-fluid">
  <div class="panel panel-primary gs-mt-4">
    <div class="panel-heading">
      <div class="panel-title">{{ form_title|trans }}</div>
    </div>
    <div class="panel-body gs-pt-0">
      <div class="row bg-success">
        <div class="col-sm-2 text-right"><strong class="gs-big">Classe:</strong></div>
        <div class="col-sm-4"><span class="gs-big">{{ label.classe }}</span></div>
      </div>
      <div class="row bg-success gs-mb-3">
        <div class="col-sm-2 text-right"><strong class="gs-big">Materia:</strong></div>
        <div class="col-sm-4"><span class="gs-big">{{ label.materia }}</span></div>
        <div class="col-sm-2 text-right"><strong class="gs-big">Valutazione:</strong></div>
        <div class="col-sm-4"><span class="gs-big">{{ label.tipo|trans }}</span></div>
      </div>
  {% if app.session.get('/APP/ROUTE/lezioni_voti_classe/conferma') != 0 %}
      <div class="alert alert-warning" role="alert">
        <div class="text-center">
          <strong class="gs-big">
            {{ 'message.alunni_assenti_in_data'|trans }}<br>
            {% for a in assenti %}{{ a.cognome }} {{ a.nome }} ({{ a.dataNascita|date('d/m/Y') }}){{ not loop.last ? ', ' }}{% endfor %}.<br>
            <em>{{ 'message.modifica_data_o_conferma'|trans }}</em>
          </strong>
        </div>
      </div>
  {% endif %}
      {{ form_start(form) }}
      {{ form_errors(form) }}
      {{ form_row(form.data) }}
      {{ form_row(form.visibile) }}
      {{ form_row(form.argomento) }}
      <ul id="gs-form-collection" class="list-group">
      {% for alu in form.lista %}
        <li class="list-group-item">
          <div class="row">
            <div class="col-sm-3">
              <strong>{{ alu.alunno.vars.value }}</strong>
            </div>
            {{ form_widget(alu) }}
          </div>
        </li>
      {% endfor %}
      </ul>
      {{ form_end(form) }}
    </div>
  </div>
</div>
{% endblock %}

{% block pagina_css %}
{{ parent() }}
<link href="{{ asset('vendor/bootstrap-slider/css/bootstrap-slider.min.css') }}" rel="stylesheet">
<link href="{{ asset('vendor/bootstrap-datepicker/css/bootstrap-datepicker3.min.css') }}" rel="stylesheet">
{% endblock %}

{% block pagina_js_fine %}
{{ parent() }}
<script src="{{ asset('vendor/bootstrap-datepicker/js/bootstrap-datepicker.min.js') }}"></script>
<script src="{{ asset('vendor/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js') }}"></script>
<script>
$(document).ready(function() {
  $('[data-toggle="popover"]').popover();
  $('.input-group.date').datepicker({
    format: "dd/mm/yyyy",
    weekStart: 1,
    maxViewMode: 1,
    daysOfWeekDisabled: "0",
    startDate: "{{ label.inizio }}",
    endDate: "{{ date()|date('d/m/Y') }}",
    datesDisabled: {{ label.festivi|raw }},
    todayBtn: "linked",
    todayHighlight: true,
    autoclose: true,
    language: "it",
    zIndexOffset: 1200
  });
  
  $('input:radio[name="voti_classe[visibile]"]').change(function() {
    if ($(this).val() == 1) {
      $('input[name^="voti_classe[lista]"][name$="[media]"][value=1]').prop('checked', true);
      $('input[name^="voti_classe[lista]"][name$="[media]"]').prop('disabled', false);
    } else {
      $('input[name^="voti_classe[lista]"][name$="[media]"][value=0]').prop('checked', true);
      $('input[name^="voti_classe[lista]"][name$="[media]"]').prop('disabled', true);
    }
  });

  if ($('input[name="voti_classe[visibile]"]:checked').val() == 0) {
    $('input[name^="voti_classe[lista]"][name$="[media]"][value=0]').prop('checked', true);
    $('input[name^="voti_classe[lista]"][name$="[media]"]').prop('disabled', true);
  }
});
</script>
{% endblock %}

{% block _voti_classe_lista_entry_widget %}
  <div class="col-sm-9">
    <div class="row">
      <label class="control-label col-sm-2" for="{{ form.voto.vars.id }}">Voto</label>
      <div class="col-sm-10">
        <input type="number" id="{{ form.voto.vars.id }}" name="{{ form.voto.vars.full_name }}" 
               value="{{ form.voto.vars.value > 0 ? form.voto.vars.value : 0 }}" class="form-control gs-mr-1 gs-big" 
               min="1" max="10" step="0.25">
      </div>
    </div>
    <div class="row ">
      <label class="control-label col-sm-2" for="{{ form.giudizio.vars.id }}">Giudizio</label>
      <div class="col-sm-10">
          {{ form_widget(form.giudizio) }}
      </div>
    </div>
    <div class="row ">
      <label class="control-label col-sm-2" for="{{ form.media.vars.id }}">{{ 'label.voto_in_media'|trans }}</label>
      <div class="col-sm-10">
          {{ form_widget(form.media) }}
      </div>
    </div>
  </div>
  {{ form_widget(form.id) }}
  {{ form_widget(form.alunno) }}
{% endblock %}

Naturalmente il codice in questione ti permette l'inserimento dei voti interi e decimali. L'unica limitazione è che riconosce solo 0,25 - 0,50 - 0,75

@trinko
Copy link
Collaborator

trinko commented Nov 1, 2024

purtroppo non ho capito molto

Nel codice che hai riportato, nella parte seguente ...

          {% for i in 1..10 %}
            <option value="{{ i }}">{{ i }}</option>
            {% if i < 10 %}
              <option value="{{ i }}+">{{ i }}+</option>
              <option value="{{ i }}½">{{ i }}½</option>
              <option value="{{ i+1 }}-">{{ i+1 }}-</option>
            {% endif %}
          {% endfor %}

Bisogna correggere in questo modo...

         {% for i in 1..10 %}
            <option value="{{ i }}">{{ i }}</option>
            {% if i < 10 %}
              <option value="{{ i + 0.25 }}">{{ i }}+</option>
              <option value="{{ i + 0.5 }}½">{{ i }}½</option>
              <option value="{{ i + 0.75 }}-">{{ i+1 }}-</option>
            {% endif %}
          {% endfor %}

Anche la soluzione proposta da @manuelbarberi è valida.

@sempliciniluigi89

This comment was marked as resolved.

@sempliciniluigi89
Copy link
Author

sempliciniluigi89 commented Nov 1, 2024 via email

@sempliciniluigi89
Copy link
Author

sempliciniluigi89 commented Nov 1, 2024 via email

@sempliciniluigi89
Copy link
Author

solo che ci sono 2 cosine che non sono in grado di risolvere:quando inserisce la valutazione ad un alunno e si vuole inserire un'altra valutazione sempre allo stesso alunno risulta il voto di prima ,anche se comunque è una nuova valutazione

il secondo problema è che in fondo risulta ancora la cosa vecchia del voto visibile ai genitori nonostante io abbia dato modificato con il nuovo sistema a colore rosso e verde .

@sempliciniluigi89
Copy link
Author

e poi non so perché ,pur mettendo che il voto non deve far media e non deve risultare visibile alla famiglia ,si vede completamente il contrario

@sempliciniluigi89
Copy link
Author

Guarda potresti usare questo codice:

{% extends 'lezioni/index.html.twig' %}

{% form_theme form _self %}

{% block pagina_contenuto %}
<div class="container-fluid">
  <div class="panel panel-primary gs-mt-4">
    <div class="panel-heading">
      <div class="panel-title">{{ form_title|trans }}</div>
    </div>
    <div class="panel-body gs-pt-0">
      <div class="row bg-success">
        <div class="col-sm-2 text-right"><strong class="gs-big">Classe:</strong></div>
        <div class="col-sm-4"><span class="gs-big">{{ label.classe }}</span></div>
      </div>
      <div class="row bg-success gs-mb-3">
        <div class="col-sm-2 text-right"><strong class="gs-big">Materia:</strong></div>
        <div class="col-sm-4"><span class="gs-big">{{ label.materia }}</span></div>
        <div class="col-sm-2 text-right"><strong class="gs-big">Valutazione:</strong></div>
        <div class="col-sm-4"><span class="gs-big">{{ label.tipo|trans }}</span></div>
      </div>
  {% if app.session.get('/APP/ROUTE/lezioni_voti_classe/conferma') != 0 %}
      <div class="alert alert-warning" role="alert">
        <div class="text-center">
          <strong class="gs-big">
            {{ 'message.alunni_assenti_in_data'|trans }}<br>
            {% for a in assenti %}{{ a.cognome }} {{ a.nome }} ({{ a.dataNascita|date('d/m/Y') }}){{ not loop.last ? ', ' }}{% endfor %}.<br>
            <em>{{ 'message.modifica_data_o_conferma'|trans }}</em>
          </strong>
        </div>
      </div>
  {% endif %}
      {{ form_start(form) }}
      {{ form_errors(form) }}
      {{ form_row(form.data) }}
      {{ form_row(form.visibile) }}
      {{ form_row(form.argomento) }}
      <ul id="gs-form-collection" class="list-group">
      {% for alu in form.lista %}
        <li class="list-group-item">
          <div class="row">
            <div class="col-sm-3">
              <strong>{{ alu.alunno.vars.value }}</strong>
            </div>
            {{ form_widget(alu) }}
          </div>
        </li>
      {% endfor %}
      </ul>
      {{ form_end(form) }}
    </div>
  </div>
</div>
{% endblock %}

{% block pagina_css %}
{{ parent() }}
<link href="{{ asset('vendor/bootstrap-slider/css/bootstrap-slider.min.css') }}" rel="stylesheet">
<link href="{{ asset('vendor/bootstrap-datepicker/css/bootstrap-datepicker3.min.css') }}" rel="stylesheet">
{% endblock %}

{% block pagina_js_fine %}
{{ parent() }}
<script src="{{ asset('vendor/bootstrap-datepicker/js/bootstrap-datepicker.min.js') }}"></script>
<script src="{{ asset('vendor/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js') }}"></script>
<script>
$(document).ready(function() {
  $('[data-toggle="popover"]').popover();
  $('.input-group.date').datepicker({
    format: "dd/mm/yyyy",
    weekStart: 1,
    maxViewMode: 1,
    daysOfWeekDisabled: "0",
    startDate: "{{ label.inizio }}",
    endDate: "{{ date()|date('d/m/Y') }}",
    datesDisabled: {{ label.festivi|raw }},
    todayBtn: "linked",
    todayHighlight: true,
    autoclose: true,
    language: "it",
    zIndexOffset: 1200
  });
  
  $('input:radio[name="voti_classe[visibile]"]').change(function() {
    if ($(this).val() == 1) {
      $('input[name^="voti_classe[lista]"][name$="[media]"][value=1]').prop('checked', true);
      $('input[name^="voti_classe[lista]"][name$="[media]"]').prop('disabled', false);
    } else {
      $('input[name^="voti_classe[lista]"][name$="[media]"][value=0]').prop('checked', true);
      $('input[name^="voti_classe[lista]"][name$="[media]"]').prop('disabled', true);
    }
  });

  if ($('input[name="voti_classe[visibile]"]:checked').val() == 0) {
    $('input[name^="voti_classe[lista]"][name$="[media]"][value=0]').prop('checked', true);
    $('input[name^="voti_classe[lista]"][name$="[media]"]').prop('disabled', true);
  }
});
</script>
{% endblock %}

{% block _voti_classe_lista_entry_widget %}
  <div class="col-sm-9">
    <div class="row">
      <label class="control-label col-sm-2" for="{{ form.voto.vars.id }}">Voto</label>
      <div class="col-sm-10">
        <input type="number" id="{{ form.voto.vars.id }}" name="{{ form.voto.vars.full_name }}" 
               value="{{ form.voto.vars.value > 0 ? form.voto.vars.value : 0 }}" class="form-control gs-mr-1 gs-big" 
               min="1" max="10" step="0.25">
      </div>
    </div>
    <div class="row ">
      <label class="control-label col-sm-2" for="{{ form.giudizio.vars.id }}">Giudizio</label>
      <div class="col-sm-10">
          {{ form_widget(form.giudizio) }}
      </div>
    </div>
    <div class="row ">
      <label class="control-label col-sm-2" for="{{ form.media.vars.id }}">{{ 'label.voto_in_media'|trans }}</label>
      <div class="col-sm-10">
          {{ form_widget(form.media) }}
      </div>
    </div>
  </div>
  {{ form_widget(form.id) }}
  {{ form_widget(form.alunno) }}
{% endblock %}

Naturalmente il codice in questione ti permette l'inserimento dei voti interi e decimali. L'unica limitazione è che riconosce solo 0,25 - 0,50 - 0,75

per favore sarebbe possibile lasciare la cella vuota ,perché ,sempre per questione di tempo, sarebbe meglio cliccare sulla cella e digitare direttamente il voto, senza dove cancellare prima tutti gli zeri su tutti gli alunni presenti di default

@sempliciniluigi89
Copy link
Author

sempliciniluigi89 commented Nov 2, 2024 via email

@trinko
Copy link
Collaborator

trinko commented Nov 3, 2024

Non fare il copia-incolla del codice, è praticamente illeggibile.
Allega i file comprimendoli con ZIP, in questo modo puoi allegare qualsiasi file.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Errore Segnalazioni di malfunzionamenti
Development

No branches or pull requests

4 participants