[Risolto[Yii 1]Inserimento Esiti Multipli

Salve, avrei bisogno di capire come fare per far si che si possano inserire esiti multipli riguardanti lo stesso id nel database. Mi spiego meglio.

Ho un controller chiamato RS dove ho un action che ho chiamato esito.

Fino ad adesso ho usato per questa action un’ azione uguale a quella dell’ update.

Però ho un problema nel senso che dovrei avere una tracciabilità degli esiti che l’ utente fa sulla piattaforma.

Essendo questa una piattaforma di postalizzazione, l’ utente dopo aver postalizzato, dovrà assegnare un’ esito alla posta che ha in gestione. Quindi nel caso di una raccoamandata al momento della postalizzazione in automatico nel db verrà inserita data e ora con la dicitura “In Consegna”.

Ora se il postino consegna, andrà a esitare la posta e quindi metterà "Consegnato", "assente al 1° passaggio" etc etc.

Il mio problema stà nel fatto che utilizzando l’ action update l’ esito a ogni “esito” (scusate il gioco di parole) sovrascrive l’ esito precedente. A me invece serve avere un’ action che NON vada a sovrascrivere l’ esito precedente ma che aggiunga un’ esito nuovo a quella Raccomandata. In maniera tale che se uno digita il codice tracking a video vedrà tutto il percorso che sta facendo la sua Raccomandata prima di essere consegnata.

Spero di essermi spiegato :( e spero qualcuno possa darmi una mano.

Incollo qui sotto l’ action che sto usando attualmente per inserire gli esiti ma che ricordo e un’ update e quindi mi sovrascrive l’ esito precedente. Potete correggermi questa action?




//*Esita Posta

	public function actionEsito($id)

	{

        $model=$this->loadModel($id);


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Rs']))

		{

			$model->attributes=$_POST['Rs'];

			if($model->save())

				$this->redirect(array('index', 'id'=>$model->id));

		}


		$this->render('esito',array(

			'model'=>$model,

		));

	

	}



Grazie a tutti anticipatamente.

Se non sbaglio ::) il problema è solo qui:


$model=$this->loadModel($id);

da cambiare con


$model = new nomeDelTuoModel();

Ciao ettolo e grazie della tua risposta.

Il tuo metodo mi creerebbe un nuovo “Esito”. A me serve invece aggiornare (o creare) l’ esito del Model “Rs”, però avendo un id a piu numeri univoco che corrisponde al codice tracking non posso creare un nuovo record con lo stesso id perchè il db non me lo accetta per duplicazione di id (appunto).

Praticamente il form fa parte del model "Rs".

Il model "Rs" e relazionato con il model "Esito".

Nel form “Rs” che uso per aggiornare il “prodotto”, in questo caso una Raccomandata Semplice, ho un menu a tendina dal quale viene scelto l’ esito.

A me serve che quando uno aggiorna lo stato della raccomandata assegnandole un nuovo esito questo esito non sovrascriva il vecchio ma vada a creare un nuovo record con i dati della raccomandata stessa e un nuovo esito.

Provo a farti un esempio di come dovrebbe apparire all’ utente quando fa una ricerca con il codice tracking della sua Raccomandata:

Data------------Ora---------Stato------------------------------------ Vettore

21/07/2014----12:00-------In Gestione nel nostro Ufficio

22/07/2014----14:00-------Affidato a distributore-----------------TNT LDV 179586821

22/07/2014----15:10-------Assente al 1° Passaggio---------------TNT LDV 179586821

26/07/2014----16:55-------Consegnato--------------------------------TNT LDV 179586821

Invece questo è come compare adesso perchè ogni esito sovrascrive il precedente.

Data-----------Ora------------Stato----------------Vettore

26/07/2014----16:55----------Consegnato-------TNT LDV 179586821

Che soluzione posso adottare per fare ciò che voglio?

Pensavo di creare una nuova tabella nel db che abbia gli stessi campi della tabella "Rs", il model della nuova tabella lo relaziono Has_Many con "Rs" e cosi posso usare il


$model = new nomeDelMioModel();

Il problema e che però partendo dal model “Rs” e dal suo form per aggiungere un esito (grazie all’ actionEsito che si trova nel Controller “Rs”), come faccio a creare un nuovo record nella tabella nuova (ipotesi) Consegne? Come recuperi tutti i dati della Raccomandata dalla tabella “Rs”? Oddio spero tu possa capire ciò che intendo!!! :(

Ti allego uno screenshot del form nel quale viene cambiato l’ esito.

Spero possa aiutarvi a capire. Se serve incollo anche qualche codice dei model o dei controller.

In attesa di essere illuminato o fulminato :) continuo a provare a risolvere.

Grazie ovviamente :)

Scusa, pensavo che avessi già fatto la nuova tabella esiti e stessimo parlando di quella.

Certamente la tabella esiti, legata a quella della raccomandata tramite l’id della raccomandata (o codice tracking…) ti serve. A quel punto nella tua action esito puoi salvare il nuovo esito creando un nuovo model esito, assegnandogli gli attributi del form, anche manualmente, e poi salvandolo.

Forse però ti conviene fare il contrario: quando devi visualizzare l’elenco di esiti entrare nel model esiti passando come parametro l’id della raccomandata (o codice tracking…), in modo da poterne leggere i dati. alla fine (o in cima) all’elenco metti la form del model esito in modo che l’utente possa aggiungere un nuovo stato

Ciao ettolo ho risolto cosi.

Ho creato una tabella esterna nella quale all’ actionCreate del Controller “Rs” inserisce il record sia nella tabella “rs” che nella tabella esterna"

Poi all’ action update inserisco allo stesso modo gli esiti solo che nella tabella esterna mi memorizza tutti gli esiti mentre nella tabella “rs” solo l’ ultimo esito. Questo era ciò che volevo e l’ ho ottenuto come ti ho detto sopra. Nell’ actionEsito e nell’ actionCreate ho aggiunto alcune righe:




public function actionEsito($id)

	{

        $model=$this->loadModel($id);

		$cons=new Consegne();




		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Rs']))

		{

			$model->attributes=$_POST['Rs'];

			if($model->save())

			{

                                $cons->attributes=$_POST['Rs'];

                                //inserisco tutti i campi che ho bisogno di inserire nella tabella esterna

                                $cons->miocampo=$model->id;

                                $cons->miocampo=$model->miocampo;

									

								


                                if($cons->save())

                                {


				$this->redirect(array('index', 'id'=>$model->id));

		}

			}

		}


		$this->render('esito',array(

			'model'=>$model,

		));

	

	}




Facendo cosi ottengo ciò di cui ho bisogno.

Un Saluto

Se funziona… va bene :rolleyes: