Ho un form appartenente al model "Cassa" con omonimo Controller.
Tramite questo form scelgo l’ utente al quale assegnare la “cassa” attraverso un dropDown Menu che riceve la lista utenti dal model “User”.
Nel model "User" (e relativa tabella) ho un campo chiamato cassa_id.
Attraverso il form sopracitato (appartenente al model “Cassa”) vorrei che dopo aver selezionato l’ utente (dal dropDown Menu) e cliccato “Ok”, all’ esecuzione della actionAssegnaCassa (che si trova nel CassaController) mi andasse a fare un’ update dell’ utente scelto, nel model “User” (tabella user) al campo “cassa_id”, inserendo l’ id della cassa assegnata a quell’ utente.
Ovviamente deve essere un update e non un insert in secondo modello.
perchè cosi avrei la creazione di un nuovo record nella tabella User e non voglio avere records differenti da quelli effetivamente inseriti al momento della creazione degli utenti (in questa applicazione “dipendenti”) anche perchè ogni utente dell’ applicazione assegnerà (al momento dell’ apertura della sua attività) una cassa a un suo dipendente per poter lavorare.
Quindi avrei una marea di record nella tabella user che nella fase Amministrativa dell’ applicazione potrebbero creare problemi.
Pensavo di creare un’ altra tabella che mi relazioni “Cassa” e “User” però poi non ho ancora capito come controllare se effetivamente l’ utente ha una cassa assegnata o meno. Mentre se riuscissi a riempire il campo “cassa_id” della tabella user (tramite il form del model “Cassa”) allora mi basterebbe utilizzare
.........................
if(Yii::app()->user->cassa_id==0){
//messaggio o redirect in caso di verifica negativa;
}else{
//messaggio o render in caso di verifica positiva;
));
..........................
Potrei usare Yii::app()->user->cassa_id perchè ovviamente ho modificato la classe UserIdentity creandomi quella variabile.
Potete aiutarmi perfavore…questo problema mi sta massacrando i neuroni. Grazie in anticipo
Ciao Federico e grazie della risposta. Ho provato 1000 modi e se non ricordo male c’ era anche il findByAttributes però mi crea sempre un nuovo record nella tabella user e non mi fa l’ update del id (user) che recupero dal select del menu dropDown.
Mi puoi postare ciò che mi dici cosi provo a implementarlo? Magari ho sbagliato qualcosa io e per questo non sono riuscito a farlo funzionare.
Ciao st4nny, se aggiungo il dropdown nel form utente e faccio l’ update li, poi dovrei comunque mandare più parametri (sempre in update) al model “Cassa” perchè quando si apre una cassa va inserito un orario di apertura, un orario di chiusura e in modo automatico viene inserita anche la data di apertura e chiusura cassa. Quindi facendolo in questo modo mi ritroverei a dover fare un update di 4 campi nel model User. E quindi il concetto è lo stesso solo che nel modo che voglio fare io faccio un update di un singolo attributo. Questa cosa mi sta veramente facendo dannare uff!!! Ora ho aggiunto un campo “operatore_id” nella tabella “cassa” e quindi dal form di assegnazione cassa riesco a inserire anche l’ id dell’ utente.
Pero ora non riesco a fare la verifica con
public function actionControlloCassa()
...............
Cassa::model()->operatore_id = 0 //valore di default
Yii::app()->user->id = Yii::app()->user->id //l' id e l' id reale dell' utente connesso
if(Cassa::model()->operatore_id==Yii::app()->user->id){ //se operatore_id e l' id reale dell' utente connesso coincidono allora:
//messaggio o redirect in caso la regola non si esegua
}else{ //se invece non coincidono allora:
//messaggio o redirect in caso la regola sia stata corretamente eseguita
........
}
Mentre in quel modo sopra citato (praticamente lo stesso ma metto a confronto con User::model) la verifica viene fatta correttamente. Se avete soluzioni alternative mi farebbe piacere provare a implementarle.
Azz…st4nny forse hai ragione a pensarci bene. Che stupido che sono!!! mi stavo perdendo in un bicchiere d’ acqua. Alla fine il model cassa mi serve solo per far si che all’ utente venga assegnata una cassa. Mentre poi dovrei avere un’ altro model nel quale all’ assegnazione della cassa, venga creato un nuovo record della cassa giornaliera. In maniera tale che se oggi volessi controllare la cassa di una settimana fa avrei accesso facendo un find (di quella cassa) in base alla data giornaliera. Quando mi perdo in certe caxxate del genere mi frusterei da solo. Ora provo a implementarlo cosi e vediamo che succede. Se non andasse bene mi faccio risentire ok?