[PHP] Sistema di gestione presenze

Stato
Chiusa ad ulteriori risposte.
ok, vediamo di sintonizzarci,

1) "lectia" è settato a zero in tutta la colonna (374 record per adesso ….
quindi intendi andare in crescendo ovvero bisogna incrementare di 1 e fare il controllo per > 7 per restituire l'alert ?

in login.php modifica
PHP:
$student_lectia = 1 + $f_student['lectia'];  //il valore viene recuperato dall'anagrafica, ma credo vada incrementato di 1

2) il controllo sopraddetto vale solo per "tipabonament" = "8_sedute" vero ?

in check.php modifica
PHP:
        if ( $f_student['tipabonament'] = "8_sedute" and $f_student['lectia'] > 7 ) {
            echo 'Error3';

3) gli occasionali vengono conteggiati, ma senza influire sul funzionamento, (giusto per avere uniformità nella gestione di "lectia")


4) altro che ti viene in mente ?
 
Ultima modifica:
Gentile Marino 51,
mi viene in mente che non so come sdebitarmi con te ... ti sto sfrucugliando i maroni sino alla nausea ...
adesso sono fuori casa. Appena rientro ti rispondo piu' dettagliatamente.
Il fatto e' che non so come spiegarmi come si deve e col codice zoppico alquanto...
 
Mi scusi, signor Super Moderatore.
Chiaramente questo non è il posto dove un poco di (eldulcorata) sottile ironia è apprezzata;
Senza offesa, ho l'impressione che Lei probabilmente vive in una isola felice dove la gente è tutta di Alta Cultura ed irreprensibilità.
Oppure è talmente immerso nei Bit/Kilobit/Megabit della sua Super Cultura da non vedere che, soprattutto quando si toccano con mano le disgrazie della vita, un sorriso discreto può aiutare a sentirsi un pò meglio?
Se non guarda la TV (dove si vede e si ascolta molto di peggio) fa bene. Neanch'io la guardo più, da anni. Telegiornali compresi.
Ciò non significa, però, che non capisco e non vedo come vive il nostro Paese.
Per questo sono emigrato e non mi piace vivere in Italia.
Stia tranquillo. Non mi permetterò più.
 
Bene, Marino51.
Polemica chiusa col Super Moderatore, spero.
Ritorniamo al progetto che mi sta a cuore.
L'ultima release, prima delle varianti da me introdotte e spiegate nella replica #11, prevedeva il "countdown" a partire dalla cifra 8 (restituisce un 7 alla prima scansione) sino ad arrivare allo zero.
La modalità è piaciuta, perchè nell'alert ho scritto "ancora ... lezioni.
Non sono ancora riuscito ad applicare gli ultimi suggerimenti, ci proverò domattina all'alba (io lavoro bene dalle 5,30 alle 8,30 del mattino, di pomeriggio/sera tra moglie, figlia, telefono, gatti, rumori vari la mia concentrazione va a "farsi benedire"(AIUTO!!! si potrà dire o è off limits? - con buona pace del Vaticano - ...)
La cosa che mi viene in mente forse è banale: e se si potesse lasciare il valore relativo ai bimbi "occasionali" o senza programmazione a zero, quando non partecipano e impostarlo manualmente a 1 quando partecipano (no ciclo di lezioni) senza alcun aggiornamento incrementale o decrementale? Nel report del CRUD rimarrebbe costantemente il numero 1, legato naturalmente alla data, all'ora e all'insieme di tutte le modalità correlate all'anagrafica.
Cioè nel corso di un mese, se la famiglia lo porta con una certa costanza, potrebbe avere più volte la partecipazione con valore 1.
Questo significherebbe dover scrivere una query particolare che vada ad aggiornare il campo "lectie" solo in presenza della condizione 8_sedute di "tipabonament"?
Il file di configurazione delle query del CRUD BOOTSTRAP (student.php) ha una sezione iniziale che fa una SELECT, un array e una query INSERT per una nuova riga (21 campi) - CREATE, una seconda sezione che fa il READ (una SELECT sempli), una terza che fa l'UPDATE (array e query 21 campi) e l'ultima che fa il DELETE (query).
... continua ...
 
Per evitare di pasticciare i dati nell'update, per esempio, ho commentato gli array che volevo intoccati e ho letteralmente "tolto" dalla query il riferimento ai campi da proteggere.
Funziona.
Fare questo in modo dinamico, però, è tutto un altro film, credo...
A ri-grazie.
 
come detto, dobbiamo prima sintonizzarci perché mi sembra che io non lo sia con le tue idee,

hai scritto
"Adesso il campo "lectie" è settato a zero in tutta la colonna (374 record"
poi hai scritto
"L'ultima release, prima delle varianti da me introdotte e spiegate nella replica #11, prevedeva il "countdown" a partire dalla cifra 8 (restituisce un 7 alla prima scansione) sino ad arrivare allo zero."

per poterlo decrementare, per "tipabonament" = "8_sedute",
dal valore 8 iniziale, a scalare per ogni scansione di barcode, fino a zero, "lectia" deve essere valorizzato a 8
con una query che aggiorna lectia = 8 per tutti i "tipabonament" = "8_sedute"

così si può decrementare in login.php
PHP:
if ( $f_student['tipabonament'] = "8_sedute" ) { $student_lectia = $f_student['lectia'] - 1; }
else                                           { $student_lectia = 1 }

ed al contempo check.php produce l'alert con
PHP:
        if ( $f_student['tipabonament'] = "8_sedute" and $f_student['lectia'] < 1 ) {
            echo 'Error3';
cioè se è un bimbo che partecipa a 8 lezioni ed ha completato il ciclo, "lectia" é uguale a zero quindi il controllo "< 1" attiva l'alert

e tutti gli altri bimbi, dovranno continuare ad avere zero nella colonna "lectia" in "student",
che verrà sostituito con 1 ( e rimarrà 1 ) ad ogni partecipazione (scansione di barcode) (vedi modifica login.php ) ?
fino qui siamo d'accordo ?

ti posto comunque
PHP:
<?php
// login.php
require_once 'admin/connect.php';
$student = $_POST['student'];

$time = date("H:i", strtotime("+0 HOURS"));
$date = date("Y-m-d", strtotime("+0 HOURS"));

$q_student = $conn->query("SELECT * FROM student WHERE student_no = '$student'") or die(mysqli_error());
$f_student = $q_student->fetch_array();

$student_name = $f_student['lastname']." ".$f_student['firstname'];
if ( $f_student['tipabonament'] = "8_sedute" ) { $student_lectia = $f_student['lectia'] - 1; }
else                                           { $student_lectia = 1 }

$conn->query("INSERT INTO time VALUES('', '$student', '$student_name', '$time', '$date', '$student_lectia')") or die(mysqli_error());
$conn->query("UPDATE student set lectia = '$student_lectia' WHERE student_no = '$student'") or die(mysqli_error());

echo "<h3 class = 'text-muted'>".$student_name." <label class = 'text-info'> la ".date("H:i", strtotime($time))."</label></h3>";
?>

PHP:
// check.php
require_once 'admin/connect.php';
$student = $_POST['student'];

$q_student = $conn->query("SELECT * FROM `student` WHERE `student_no` = '$student'") or die(mysqli_error());
$v_student = $q_student->num_rows;

if($v_student > 0) {
    while($f_student = $q_student->fetch_array()) {
        if ( $f_student['tipabonament'] = "8_sedute" and $f_student['lectia'] < 1 ) {
            echo 'Error3';
        }
        else {
            echo 'Success';
        }
    }
}
else {
    echo 'Error2';
}
 
Buongiorno, Marino 51.
vedi? non so spiegarmi bene, mea culpa.
Il sw non è ancora utilizzato dall'associazione. Lo sto testando, a casa e con loro.
Bisogna considerare che questo verrà applicato in una realtà che già funziona da tempo, dove i bimbi vengono inseriti in gruppi omogenei per tipologia di trattamento e per data d'inizio. Che non è uguale per tutti i gruppi. Impossibile fare un RESET e uno START a tutti. La lista è parziale, sia di quelli che vengono sia di quelli che non vengono più. Alla fine quella completa dovrebbe arrivare quasi a 800 soggetti.
La Segreteria deve andare a valorizzare manualmente via CRUD la data d'inizio e il numero di sedute di ciascun bambino quindi, rispetto alla data di oggi, per esempio, ci potrà essere un gruppo (5-6 bambini ciascuno, di media) alle 10 del mattino che, prima dell'ingresso, ha a disposizione ancora 6 lezioni, uno alle 11 che ne ha 2, uno alle 12 che ne ha 3, uno alle 14 che ne ha 7 e così via.
Il lavoro di UPDATE sarà certosino, per la segreteria, ma soltanto la prima volta. Poi ci prenderanno l'abitudine e, di volta in volta, andranno a riaggiornare le valorizzazioni per ogni bimbo, anche in funzione delle diverse attività che non sono fisse ma dipendenti dalle decisioni di psicomotricisti, psicologi, logopedisti e fisioterapisti che lavorano nel centro.
Io ho settato il campo a zero per test, andando a valorizzare con numeri diversi soltanto a scopo dimostrativo, mettendo ad esempio il valore 8 al primo record, il valore 3 al secondo e così via per qualche record, leggendo i barcode con il lettore e verificando i report via CRUD.
Adesso (leggo il tuo post dalle 06:00) : Ok per il valore zero. Non ho ancora provato a modificare, lo faccio non appena termino di scrivere qui.
Bene, verificherò più tardi se potrà essere così.

- Riassunto funzionamento -
Condizione 1: quando "lectie" sarà a zero e "tipabonament" sarà a "occasionale", "no_prog" oppure a "8_sedute" il sistema dovrà restituire l'alert.
Condizione 2: quando "lectie" sarà a 8 e "tipabonament" sarà a "8_sedute" partirà il countdown, che deve poter arrivare sino a zero.
Condizione 3: quando "lectie" sarà a 1 e "tipabonament" sarà a "occasionale"/"no_prog", la registrazione del barcode dovrebbe restituire sempre 1, a meno che venga reimpostato a zero manualmente, dalla segreteria.
Spero di essere stato più chiaro, adesso.

Se il tutto fosse estremamente complicato, avrei trovato una soluzione spartana ma funzionante:
- imposto per i cicli come anzidetto.
- lascio a zero chi non viene.
- imposto un valore 10000 a chi viene occasionalmente
- imposto un valore 6000 a chi viene senza programmazione.

A vista e immediatamente si capisce, dal numero restituito nell'alert, che tipo di attività viene svolta.
Fare i conteggi nella reportistica poi, è semplice.
Che ne dici? Ovvio che, andando a provare le modifiche da te suggerite, adesso, se si risolve meglio è ... ottimo!
Ti faccio sapere, grazie.
 
Buongiorno, Marino 51.
Mi spiace, il codice che mi hai dato non funziona, nel senso che il barcode non viene registrato e non viene restituito alcun errore.
Guarda: se dovesse essere un problema, non crucciarti: tu hai già fatto così tanto che la soluzione "empirica" che io ho applicato può funzionare da subito, anche se non è molto elegante.
Magari c'è un altro modo ma, come ho già detto, io non lo conosco e forse non lo saprei facilmente applicare.
Di funzionalità che mi piacerebbe implementare ce ne sono diverse ma, tutto sommato, non posso permettermi di chiedere troppo ... soprattutto a chi ha già fatto molto.
Se ritieni di volerci provare ancora fai pure, ti ringrazio comunque infinitamente, altrimenti ... no problem. A tua discrezione.
Cordiali saluti.
 
Dal regolamento del forum
2.3 Il rispetto degli altri è una regola fondante di questa comunità. Per questo motivo sono vietati i messaggi offensivi, violenti e volgari e verranno allontanati gli utenti il cui unico scopo è creare scompiglio e/o infastidire l'attività della comunità.
In particolar modo sono vietati i messaggi:

  • contenenti espressioni e/o immagini comunque idonei a ledere la sensibilità altrui;
  • contenenti volgarità e/o espressioni offensive indirizzate a iscritti o terze persone;
  • Infine, data la natura di questo forum, è preferibile evitare discussioni di natura politica
Chiudo
 
Stato
Chiusa ad ulteriori risposte.

Discussioni simili