Yii Framework Forum: [Risolto[Yii 1]Inserimento Esiti Multipli - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[Risolto[Yii 1]Inserimento Esiti Multipli A ogni esito si sovrascrive il precedente Rate Topic: -----

#1 User is offline   Giannix 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 292
  • Joined: 20-February 14

Posted 18 July 2014 - 08:03 AM

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.
0

#2 User is offline   ettolo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 84
  • Joined: 06-September 12

Posted 22 July 2014 - 09:46 AM

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

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


da cambiare con

$model = new nomeDelTuoModel();

0

#3 User is offline   Giannix 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 292
  • Joined: 20-February 14

Posted 22 July 2014 - 10:59 AM

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 :)

Attached File(s)


0

#4 User is offline   ettolo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 84
  • Joined: 06-September 12

Posted 24 July 2014 - 05:02 AM

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
0

#5 User is offline   Giannix 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 292
  • Joined: 20-February 14

Posted 24 July 2014 - 03:49 PM

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
0

#6 User is offline   ettolo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 84
  • Joined: 06-September 12

Posted 25 July 2014 - 09:15 AM

Se funziona... va bene :rolleyes:
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users