[Yii1][RISOLTO]Problema con un' array

Stasera provo a realizzare il tutto perchè adesso voglio dare un paio d’ ore di pausa alla mia poca materia grigia ;D . Ti ringrazio nuovamente per la pazienza. Se funziona … aggiorno il Post.

Un saluto…per ora ;D

Ciao Fabrizio … funzionaaaaaaaaaaaaaaaaaaa!!! :)

Ora mi manca da inserire la validazione e sono apposto :)

MILLE GRAZIE ancora per avermi aperto il cranio ;D :)

Speriamo di non avere problemi con la validazione adesso!!!

Un Saluto :)

Perfetto! Se hai problemi con la validazione, scrivi.

L’errore è in questa riga:




$model->save() && $fattura->validate(); 



perchè dovresti controllare il risultati di save() per andare avanti o meno

Azz. stavo aprendo un altro topic…reinserisco il post cancellato.

Ciao Fabrizio e nuovamente grazie della disponibilità

Ho problemi a validare la parte di form che appartiene e "RiepilogoFattura".

Qui ho esteso la classe CFormModel perchè ovviamente RiepilogoFattura NON ha una tabella nel db.

La regola di validazione e che i campi NON possono essere vuoti.




<?php


class RiepilogoFattura extends CFormModel{


public $prodotto;	

public $peso;

public $iva;

public $totale;





public function rules(){

	return array(

	array(

'prodotto, peso, iva, totale', 'required'

        ),	

        );

  }

  


}



Questo è il form:




<?php

/* @var $this FattureFilialiController */

/* @var $model FattureFiliali */

/* @var $form CActiveForm */

?>


<div class="table_box">


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'fatture-filiali-form',

	'action'=>Yii::app()->createUrl('FattureFiliali/StampaFattura'),

	//'method'=>'GET',

	// Please note: When you enable ajax validation, make sure the corresponding

	// controller action is handling ajax validation correctly.

	// There is a call to performAjaxValidation() commented in generated controller code.

	// See class documentation of CActiveForm for details on this.

	'enableClientValidation'=>true,

    'clientOptions'=>array(

        'validateOnSubmit'=>true,

		),

)); ?>


<?php echo $form->errorSummary($model); ?>

<?php echo $form->errorSummary($fattura); ?>

<table class="tabella_login" style="width: 100%; margin: auto;">

  <tbody>

    <tr>

	  <td colspan="2" class="tabella_info_header tabella_first_form">Intestazione Fattura</td>

	</tr>

	

	<tr>

	    <td class="tabella_info_campo_descrizione">

		Cognome

        </td>

    

		<td class="tabella_info_campo_data" style="text-align:left;">

		<?php echo $form->textField($model,'cl_cognome',array('class'=>'span6','maxlength'=>50, 'placeholder'=>'INSERISCI COGNOME O DENIMINAZIONE DITTA')); ?>

		<?php echo $form->error($model,'cl_cognome'); ?>

        </td>

        </tr>

		

		<tr>

	    <td class="tabella_info_campo_descrizione">

		Nome

        </td>

    

		<td class="tabella_info_campo_data" style="text-align:left;">

		<?php echo $form->textField($model,'cl_nome',array('class'=>'span6','maxlength'=>50, 'placeholder'=>'INSERISCI NOME O DENIMINAZIONE DITTA')); ?>

		<?php echo $form->error($model,'cl_nome'); ?>

        </td>

        </tr>

		

		<tr>

        <td class="tabella_info_campo_data" style="border-right:1px solid #b11a01;" rowspan="2">

		<?php echo $form->labelEx($model,'Indirizzo'); ?>

        </td>

        <td class="table_info_data" style="padding-top:20px;">

        

		<?php echo $form->dropDownList($model,'cl_tipo_via', CHtml::listData(Ubicazioni::model()->findAll(), "nomeub","nomeub"), array('class'=>'span2', 'id'=>'cl_stato'));?>

		<?php echo $form->error($model,'cl_tipovia'); ?>

        

         <?php /* echo $form->labelEx($model,''); */?>

		<?php echo $form->textField($model,'cl_indirizzo',array('class'=>'span6','maxlength'=>60, 'id'=>'cl_indirizzo')); ?>

         N.

        <?php echo $form->textField($model,'cl_civico',array('class'=>'span2','maxlength'=>30, 'id'=>'cl_civico')); ?>

        <?php echo $form->error($model,'cl_indirizzo'); ?>

		<?php echo $form->error($model,'cl_civico'); ?>

        </td>

        </tr>

       

        

        <tr>

        <td class="table_info_data" style="border-left:1px solid #b11a01; border-right:3px solid #b11a01; padding-top:20px;">

        <center> Nazione

        <?php echo $form->dropDownList($model, 'cl_stato', 	

		CHtml::listData(Stati::model()->findAll(), "nome","nome"),

	    array(/*'prompt'=>'Seleziona / Digita uno Stato',*/	'class'=>'span5'));?>

        <?php echo $form->error($model,'cliente_stato'); ?>

        </center>

        <br />

        

         Cap

		 <?php echo $form->textField($model,'cl_cap',array('class'=>'span2','maxlength'=>15, 'id'=>'cl_cap')); ?>

		 Comune

		 <?php echo $form->textField($model,'cl_comune',array('class'=>'span5','maxlength'=>60, 'id'=>'cl_comune')); ?>


        Provincia 

        <?php

		echo $form->textField($model,'cl_provincia',array('class'=>'span2','maxlength'=>50, 'id'=>'cl_provincia'));

		/*echo $form->dropDownList($model,'cl_provincia', CHtml::listData(Cap::model()->findAll(), 'provincia', 'provincia'), array('id'=>'cl_provincia', 'prompt'=>'Seleziona - Digita', 'class'=>'span2'));*/

		?>

        </td>

        </tr>

		

		<tr>

	    <td class="tabella_info_campo_descrizione">

		P.Iva - Cod. Fiscale

        </td>

    

		<td class="tabella_info_campo_data" style="text-align:left;">

		<?php echo $form->textField($model,'cl_piva',array('class'=>'span3','maxlength'=>20, 'placeholder'=>'P.Iva CLIENTE')); ?>

		<?php echo $form->error($model,'cl_piva'); ?>

		<?php echo $form->textField($model,'cl_codfisc',array('class'=>'span3','maxlength'=>16, 'placeholder'=>'CODICE FISCALE CLIENTE')); ?>

		<?php echo $form->error($model,'cl_codfisc'); ?>

        </td>

		<tr class="tabella_info_footer">

	   <td colspan="2" class="tabella_chiusura_form">

        </td>

        </tr>

        </tbody>

        </table>

        </tr>


		<br />

		 


<table style="width: 100%; margin: auto;">

  <tbody>

    <tr>

	  <td colspan="6" class="tabella_info_header tabella_first_form">Riepilogo Postalizzazioni</td>

        </tr>

        <tr class="table_data_header">

        

			<td class="table_data_l" width="auto" style="font-weight:bold;">Prodotto</td>

			<td class="table_data" width="auto" style="font-weight:bold;">Peso</td>

			<td class="table_data" width="auto" style="font-weight:bold;">Tot. Iva Compresa.</td>

			<td class="table_data" width="auto" style="font-weight:bold;">Iva</td>

			<td class="table_data_r" width="auto" style="font-weight:bold;">Imponibile</td>

					</tr>

			<?php

		////////RECUPERO TUTTI GLI ID PASSATI TRAMITE GET E LI PROCESSO PER IL FORM

		$ricerca = Missiva::model()->findAllByAttributes(array('missiva_id'=>$_GET['id_miss']));

        $conta = count($ricerca);

        if($conta > 0){

        $prodotto = array();

        foreach($ricerca as $risultati)

        array_push($prodotto,$risultati->missiva_id);

        }

////RECUPERO I DATI DALLA TABELLA PER STAMPARE LA FATTURA		 

$ricerca2 =Missiva::model()->findAllByAttributes(array("missiva_id"=>$prodotto));

foreach($ricerca2 as $dati){

	$imponibile = $dati->totale/1.22;

	?>		

					<tr>

    

		<td class="tabella_info_campo_descrizione" style="text-align:left; font-size:12px;">

		<?php 

		if($dati->filiale_destinazioneid <1){

		echo $form->textField($fattura,'prodotto',array('class'=>'span3', 'name'=>'prodotto[]','value'=>($dati->tracking.' - '.$dati->prodotto), 'readonly'=>true, 'style'=>'font-size:12px'))

		.'<br /> <b>Verso</b> '.$dati->cliente_cap.', '.$dati->cliente_comune.' ('.$dati->cliente_provincia.')'.' - <b>Consegna</b>: '.$dati->vettore;

		}else{

			echo $form->textField($fattura,'prodotto',array('class'=>'span3', 'name'=>'prodotto[]','value'=>($dati->tracking.' - '.$dati->prodotto), 'readonly'=>true, 'style'=>'font-size:12px'))

		.'<br /> <b>Verso</b> '.$dati->cliente_cap.', '.$dati->cliente_comune.' ('.$dati->cliente_provincia.')'.' - <b>Consegna</b>: '.$dati->filiale_destinazione;

		}?>

		<?php echo $form->error($fattura,'prodotto'); ?>

		</td>

		

		<td class="tabella_info_campo_descrizione" style="text-align:left;">

		<?php echo $form->textField($fattura,'peso',array('class'=>'span1','name'=>'peso[]','maxlength'=>50, 'value'=>$dati->peso, 'readonly'=>true, 'style'=>'font-size:12px')); ?>

		<?php echo $form->error($fattura,'peso'); ?>

        </td>

		

		<td class="tabella_info_campo_descrizione" style="text-align:left;">

		<?php echo '<br /><u>Prezzo pagato dal cliente</u>: <b>&euro; ' .number_format($dati->totale,2,'.',''); ?>

        </td>

		

		<td class="tabella_info_campo_descrizione" style="text-align:left;">

		<?php

		$menu_data = array('Seleziona'=>'Seleziona', '22%'=>'22%', 'ART.E15'=>'ART.E15');

		if($dati->vettore == 'POSTE ITALIANE'){

		echo $form->dropDownList($fattura, 'iva', $menu_data, array('name'=>'iva[]','style'=>'width: auto; font-size:12px'));

		}

		elseif($dati->filiale_destinazione == 'SEDE'){

		echo $form->dropDownList($fattura, 'iva', $menu_data, array('name'=>'iva[]','style'=>'width: auto; font-size:12px'));

		}

		else{

		echo $form->textField($fattura,'iva',array('class'=>'span1', 'name'=>'iva[]','maxlength'=>50, 'value'=>'22%', 'readonly'=>true, 'style'=>'font-size:12px'));

		}

        ?>

		<?php echo $form->error($fattura,'iva'); ?>

		</td>

		

		<td class="table_info_data">

		<?php 

		if($dati->vettore == 'POSTE ITALIANE'){

		echo $form->textField($fattura,'totale',array('class'=>'span1','name'=>'totale[]','maxlength'=>50,  'style'=>'width:auto', 'style'=>'font-size:12px')); 

		}

		elseif($dati->filiale_destinazione == 'SEDE'){

		echo $form->textField($fattura,'totale',array('class'=>'span1','name'=>'totale[]','maxlength'=>50,  'style'=>'width:auto', 'style'=>'font-size:12px')); 

		}

		else{

		echo $form->textField($fattura,'totale',array('class'=>'span1','name'=>'totale[]','maxlength'=>50,  'value'=>number_format($imponibile,2,'.',''), 'readonly'=>true, 'style'=>'width:auto', 'style'=>'font-size:12px')); 	

		}

		?>

		<?php echo $form->error($fattura,'totale'); ?>

        </td>

        </tr>

		<?php }?>		


       <tr class="tabella_info_footer">

	   <td colspan="6" class="tabella_chiusura_form">

       <?php echo CHtml::submitButton('Stampa' ,array('class'=>'btn btn-primary btn-small')); ?>       

       <?php $this->endWidget(); ?>

        </td>

        </tr>

        </tbody>

        </table>

       </div>



Come vedi tutti gli inputTexField $fattura dovrebbero validati dal model RiepilogoFattura.

Ma ho notato che se lascio qualche $totale in bianco…passa comunque alla stampa del pdf.

Questa è l’ action che gestisce la stampa del file




		////////////////////AZIONE STAMPA FATTURA/////////////

	public function actionStampaFattura()

   {

			$model=new FattureFiliali();

			$fattura=new RiepilogoFattura();

			$id_filiale = Yii::app()->user->filiale_id;

			$ricerca = Filiale::model()->findAllByAttributes(array('filiale_id' => array($id_filiale)));

			foreach ($ricerca as $dati)

			/////QUERY DI RICERCA PER ULTIMO NUMERO FATTURA DELLA FILIALE

			////////RICERCO L' ULTIMO FILIALE_ID INSERITO

            $criteria = new CDbCriteria();

            $criteria->addCondition("id_filiale=:id_filiale");

            $criteria->params = array(':id_filiale' => $id_filiale);

			$criteria->order = "num_fatt DESC";

            $criteria->limit = '1';

            $ricerca_num_fatt = FattureFiliali::model()->findAll($criteria);

			foreach($ricerca_num_fatt as $ultimo_id)    

			

			$ultimo_id_inserito = str_replace($ultimo_id->num_fatt);

			/////SE NON HA ANCORA INSERITO FATTURE ALLORA PARTO DAL NUMERO 1

			if($ultimo_id->num_fatt == null){

				$nuovo_id = 1;

			}else{

			////AGGIUNGO ALL' ULTIMO NUM_FATT UN +1 IN MANIERA TALE CHE SIANO CONSECUTIVI.

            $nuovo_id = ($ultimo_id->num_fatt + 1);

			}

			

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

		{

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

			$fattura->attributes=$_POST['RiepilogoFattura'];

			/////SALVO I DATI DELLA DITTA CHE STA FATTURANDO

			$model->num_fatt = $nuovo_id;			

			$model->id_filiale = $dati->filiale_id;

			$model->nome_filiale = $dati->nome_completo;

			$model->ditta = $dati->ragione_sociale;

			$model->indirizzo = $dati->indirizzo;

			$model->p_iva = $dati->p_iva;

			$model->cod_fisc = $dati->codice_fiscale;

			$model->save() && $fattura->validate();			

			/////SE NON ESISTE INSERISCO IL CLIENTE NELLA TABELLA CLIENTIFATTURE

			FattureFiliali::ClienteFattura();

		}

			//var_dump($nuovo_id);

			//exit;

			

			///PASSO TUTTI I DATI DELLA DITTA CHE STA FATTURANDO

			$num_fattura = $nuovo_id;

		    $nome_ditta = $dati->ragione_sociale;

		    $ind_ditta = $dati->indirizzo;

		    $piva_ditta = $dati->p_iva;

		    $cf_ditta = $dati->codice_fiscale;

		    $tel_ditta = $dati->telefono;

		    $email_ditta = $dati->email;

			

			

			//////PASSO TUTTI I DATI DELL' INTESTATARIO PER LA FATTURA

			$intestatario = $_POST['FattureFiliali']['cl_cognome'].' ' .$_POST['FattureFiliali']['cl_nome'];

			$indirizzo = $_POST['FattureFiliali']['cl_tipo_via'].' ' .$_POST['FattureFiliali']['cl_indirizzo'].' n. '.$_POST['FattureFiliali']['cl_civico'];

			$indirizzo2 = $_POST['FattureFiliali']['cl_cap'].' - ' .$_POST['FattureFiliali']['cl_comune'].' ('.$_POST['FattureFiliali']['cl_provincia'].')';

			$cf_pi = 'P.Iva: '.$_POST['FattureFiliali']['cl_piva'].' - Cod.Fisc: ' .$_POST['FattureFiliali']['cl_codfisc'];

		    

		    $mPDF1 = Yii::app()->ePdf->mpdf();

			$this->layout="//layout/pdf-fattura";

	        $mPDF1->WriteHTML($this->render('frontend/stampa_fattura',array(

            'intestatario'=>$intestatario, 'indirizzo'=>$indirizzo, 'indirizzo2'=>$indirizzo2, 

		    'cf_pi'=>$cf_pi, 'nuovo_id'=>$nuovo_id, 'num_fattura'=>$num_fattura,	'nome_ditta'=>$nome_ditta, 

		    'ind_ditta'=>$ind_ditta, 'piva_ditta'=>$piva_ditta, 'cf_ditta'=>$cf_ditta, 'tel_ditta'=>$tel_ditta, 

		    'email_ditta'=>$email_ditta),true));

		    //////ASSEGNO IL NOME ALLA DIRECTORY DI SALVATAGGIO DELLE FATTURE PER OGNI FILIALE

		    $path = Yii::getPathOfAlias('webroot').'/fatture-filiali/'.$id_filiale.'/';

		    /////SE NON ESISTE LA CREO

		    if(!is_dir($path))

		    {

		    mkdir($path, 0, true);	

		    chmod($path, 0775);

		    }

		    ///////DATA E NOME FATTURA

		    $data_fatt = date('Y-m-d');

		    $nome_fatt = 'Fattura-'.$num_fattura.'-'.$data_fatt.'.pdf';

		    ///////CREO IL LINK IN MANIERA TALE CHE SI POSSA SEMPRE RISTAMPARE E O CONTROLLARE LA FATTURA

		    $create_link = Yii::app()->createAbsoluteUrl('').'/fatture-filiali/'.$id_filiale.'/'.$nome_fatt;

		    //////FACCIO L' UPDATE DELLA TABELLA FATTURE FILIALI E AGGIUNGO IL LINK AL FILE PER LA VISTA

		    $aggiungi_link = "UPDATE  fatture_filiali SET link = '$create_link' WHERE id_filiale = '$id_filiale' AND num_fatt = '$num_fattura'";

            $update_della_tabella = Yii::app()->db->createCommand($aggiungi_link);

		    $update_della_tabella->execute();	

		    /////////SALVO IL FILE NELLA DIRECTORY DELLA SUA FILIALE

		    $salva_file = $path.'/'.$nome_fatt;

            $mPDF1->Output($salva_file,  'F'); 

		    ////GENERO IL PDF DA STAMPARE

		    //$mPDF1->Output($nome_fatt, EYiiPdf::OUTPUT_TO_DOWNLOAD);

			Yii::app()->user->setFlash('stampa_fattura', 

	          '<div class="alert alert-success" role="alert" style="width:70%; vertical-align:middle;">

			  <b><a href="/fatture-filiali/'.$id_filiale.'/'.$nome_fatt.'" target="_blank"><h3>STAMPA FATTURA</h3></a>.</b>

			  <br /><u>La Fattura &egrave; stata salvata con successo. Puoi stamparla anche dal menu <b>

			  <a href="/FattureFiliali/Fatture" target="_blank">"FATTURE"</a></b></u></div>' );

			  $this->redirect(array('Missiva/Cassa'));

			}



Se invece di




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



inserisco




if(isset($_POST['FattureFiliali'] && $_POST['RiepilogoFattura']))



non mi fa neppure il render della vista dove ho il form.

Quindi riesco a validare $model ma non $fattura.

Ovviamente questo non va bene perchè se durante la compilazione dei campi della fattura non vengono compilati tutti i campi si rischia di stampare una fattura con alcuni campi vuoti.

Intanto continuo a provare.

ma $model->save non dovrebbe gestire solo il salvataggio dei dati appartenenti al model FattureFiliali?

Quindi quel model mi controlla quei campi.

Ho provato anche a fare




$valida_model = $model->validate();

$valida_fatt = $fattura->validate();

if ($valida_model && $valida_fatt){

...............

prosegue l azione

....................

}else{


$this->redirect(CONTROLLER/ACTION);

}



Pero ho notato che come detto prima se lascio campi liberi di $model mi blocca e mi stampa gli errori.

Se invece lascio campi liberi di $fattura procede comunque alla generazione della fattura.

Posta tutto il codice modificato perchè magari ci potrebbe essere qualche blocco di condizione che si chiude prima del previto

Ok ho provato a fare come detto prima con




if(validazione etc)

{

......se valida vado avanti}

else{

se non valida

print_r($fattura->getErrors());

}



e mi stampa




Array ( [prodotto] => Array ( [0] => Prodotto non può essere nullo. ) [peso] => Array ( [0] => Peso non può essere nullo. ) [iva] => Array ( [0] => Iva non può essere nullo. ) [totale] => Array ( [0] => Totale non può essere nullo. ) )



Però non capisco come sia possibile perchè anche se riempio i campi continua a stamparmi questo maledetto errore!!!!!

Ok questo è il codice modificato




		////////////////////AZIONE STAMPA FATTURA/////////////

	public function actionStampaFattura()

   {

			$model=new FattureFiliali();

			$fattura=new RiepilogoFattura();

			$id_filiale = Yii::app()->user->filiale_id;

			$ricerca = Filiale::model()->findAllByAttributes(array('filiale_id' => array($id_filiale)));

			foreach ($ricerca as $dati)

			/////QUERY DI RICERCA PER ULTIMO NUMERO FATTURA DELLA FILIALE

			////////RICERCO L' ULTIMO FILIALE_ID INSERITO

            $criteria = new CDbCriteria();

            $criteria->addCondition("id_filiale=:id_filiale");

            $criteria->params = array(':id_filiale' => $id_filiale);

			$criteria->order = "num_fatt DESC";

            $criteria->limit = '1';

            $ricerca_num_fatt = FattureFiliali::model()->findAll($criteria);

			foreach($ricerca_num_fatt as $ultimo_id)    

			

			//$ultimo_id_inserito = str_replace($ultimo_id->num_fatt);

			/////SE NON HA ANCORA INSERITO FATTURE ALLORA PARTO DAL NUMERO 1

			if($ultimo_id->num_fatt == null){

				$nuovo_id = 1;

			}else{

			////AGGIUNGO ALL' ULTIMO NUM_FATT UN +1 IN MANIERA TALE CHE SIANO CONSECUTIVI.

            $nuovo_id = ($ultimo_id->num_fatt + 1);

			}

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

		{

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

			$fattura->attributes=$_POST['RiepilogoFattura'];

			/////SALVO I DATI DELLA DITTA CHE STA FATTURANDO

			$model->num_fatt = $nuovo_id;			

			$model->id_filiale = $dati->filiale_id;

			$model->nome_filiale = $dati->nome_completo;

			$model->ditta = $dati->ragione_sociale;

			$model->indirizzo = $dati->indirizzo;

			$model->p_iva = $dati->p_iva;

			$model->cod_fisc = $dati->codice_fiscale;		

			/////SE NON ESISTE INSERISCO IL CLIENTE NELLA TABELLA CLIENTIFATTURE

			FattureFiliali::ClienteFattura();

		}

		if($model->validate() && $model->save() && $fattura->validate()){

			//PASSO TUTTI I DATI DELLA DITTA CHE STA FATTURANDO

			$num_fattura = $nuovo_id;

		    $nome_ditta = $dati->ragione_sociale;

		    $ind_ditta = $dati->indirizzo;

		    $piva_ditta = $dati->p_iva;

		    $cf_ditta = $dati->codice_fiscale;

		    $tel_ditta = $dati->telefono;

		    $email_ditta = $dati->email;

			

			

			//////PASSO TUTTI I DATI DELL' INTESTATARIO PER LA FATTURA

			$intestatario = $_POST['FattureFiliali']['cl_cognome'].' ' .$_POST['FattureFiliali']['cl_nome'];

			$indirizzo = $_POST['FattureFiliali']['cl_tipo_via'].' ' .$_POST['FattureFiliali']['cl_indirizzo'].' n. '.$_POST['FattureFiliali']['cl_civico'];

			$indirizzo2 = $_POST['FattureFiliali']['cl_cap'].' - ' .$_POST['FattureFiliali']['cl_comune'].' ('.$_POST['FattureFiliali']['cl_provincia'].')';

			$cf_pi = 'P.Iva: '.$_POST['FattureFiliali']['cl_piva'].' - Cod.Fisc: ' .$_POST['FattureFiliali']['cl_codfisc'];

		    

		    $mPDF1 = Yii::app()->ePdf->mpdf();

			$this->layout="//layout/pdf-fattura";

	        $mPDF1->WriteHTML($this->render('frontend/stampa_fattura',array(

            'intestatario'=>$intestatario, 'indirizzo'=>$indirizzo, 'indirizzo2'=>$indirizzo2, 

		    'cf_pi'=>$cf_pi, 'nuovo_id'=>$nuovo_id, 'num_fattura'=>$num_fattura,	'nome_ditta'=>$nome_ditta, 

		    'ind_ditta'=>$ind_ditta, 'piva_ditta'=>$piva_ditta, 'cf_ditta'=>$cf_ditta, 'tel_ditta'=>$tel_ditta, 

		    'email_ditta'=>$email_ditta),true));

		    //////ASSEGNO IL NOME ALLA DIRECTORY DI SALVATAGGIO DELLE FATTURE PER OGNI FILIALE

		    $path = Yii::getPathOfAlias('webroot').'/fatture-filiali/'.$id_filiale.'/';

		    /////SE NON ESISTE LA CREO

		    if(!is_dir($path))

		    {

		    mkdir($path, 0, true);	

		    chmod($path, 0775);

		    }

		    ///////DATA E NOME FATTURA

		    $data_fatt = date('Y-m-d');

		    $nome_fatt = 'Fattura-'.$num_fattura.'-'.$data_fatt.'.pdf';

		    ///////CREO IL LINK IN MANIERA TALE CHE SI POSSA SEMPRE RISTAMPARE E O CONTROLLARE LA FATTURA

		    $create_link = Yii::app()->createAbsoluteUrl('').'/fatture-filiali/'.$id_filiale.'/'.$nome_fatt;

		    //////FACCIO L' UPDATE DELLA TABELLA FATTURE FILIALI E AGGIUNGO IL LINK AL FILE PER LA VISTA

		    $aggiungi_link = "UPDATE  fatture_filiali SET link = '$create_link' WHERE id_filiale = '$id_filiale' AND num_fatt = '$num_fattura'";

            $update_della_tabella = Yii::app()->db->createCommand($aggiungi_link);

		    $update_della_tabella->execute();	

		    /////////SALVO IL FILE NELLA DIRECTORY DELLA SUA FILIALE

		    $salva_file = $path.'/'.$nome_fatt;

            $mPDF1->Output($salva_file,  'F'); 

		    ////GENERO IL PDF DA STAMPARE

		    //$mPDF1->Output($nome_fatt, EYiiPdf::OUTPUT_TO_DOWNLOAD);

			Yii::app()->user->setFlash('stampa_fattura', 

	          '<div class="alert alert-success" role="alert" style="width:70%; vertical-align:middle;">

			  <b><a href="/fatture-filiali/'.$id_filiale.'/'.$nome_fatt.'" target="_blank"><h3>STAMPA FATTURA</h3></a>.</b>

			  <br /><u>La Fattura &egrave; stata salvata con successo. Puoi stamparla anche dal menu <b>

			  <a href="/FattureFiliali/Fatture" target="_blank">"FATTURE"</a></b></u></div>' );

			  $this->redirect(array('Missiva/Cassa'));

			

           }else{

	   print_r($fattura->getErrors());

   }

}



Prova a fare un




var_dump($fattura->attributes); 



per vedere come sono popolati i valori.

Inoltre verifica se le proprietà che popoli dal $_POST sono presenti nel metodo rules() del model; se non ci sono, aggiungi una nuova regola con tipologia ‘safe’ in modo da considerarli campi sicuri per il popolamento di massa.

Questo è il var_dump di $fatture




array(4) { ["prodotto"]=> NULL ["peso"]=> NULL ["iva"]=> NULL ["totale"]=> NULL }



Li legge NULL ed ecco perchè non gli va giù.

Le prioprietà che popolo da $_POST… sono definite nelle rules del primo modello ossia FattureFiliali.

Sono gli input $model, $cl_cognome etc etc.

Non sono controllati da RiepilogoFattura.

Infatti se lascio liberi quei campi il model FattureFiliali mi blocca e non manda in stampa rimanendo fermo nella pagina di compilazione del form.

Questi sono gli attributes controllati da fattureFiliali e funzionano:




array('id_filiale, nome_filiale, num_fatt, ditta, indirizzo, p_iva, cod_fisc, cl_cognome, cl_nome, cl_tipo_via, cl_indirizzo, cl_civico, cl_cap, cl_comune, cl_provincia, cl_stato, cl_piva, cl_codfisc', 'required'),

			array('imponibile, totale', 'length'),

			array('id_filiale, nome_filiale, num_fatt', 'length', 'max'=>100),

			array('ditta', 'length', 'max'=>155),

			array('link', 'length', 'max'=>255),

			array('indirizzo, cl_indirizzo, cl_comune, cl_stato', 'length', 'max'=>60),

			array('p_iva, cl_piva', 'length', 'max'=>20),

			array('cod_fisc, cl_codfisc', 'length', 'max'=>16),

			array('cl_cognome, cl_nome, cl_tipo_via, cl_provincia', 'length', 'max'=>50),

			array('cl_civico', 'length', 'max'=>30),

			array('cl_cap', 'length', 'max'=>15),

			array('iva', 'length', 'max'=>3),

			// The following rule is used by search().

			// @todo Please remove those attributes that should not be searched.

			array('id, id_filiale, nome_filiale, num_fatt, ditta, indirizzo, p_iva, cod_fisc, cl_cognome, cl_nome, cl_tipo_via, cl_indirizzo, cl_civico, cl_cap, cl_comune, cl_provincia, cl_stato, cl_piva, cl_codfisc, imponibile, iva, totale', 'safe', 'on'=>'search'),



Questi sono quelli controllati da RiepilogoFattura e danno problemi:




<?php


class RiepilogoFattura extends CFormModel{


public $prodotto;	

public $peso;

public $iva;

public $totale;





public function rules(){

	return array(

	array(

'prodotto, peso, iva, totale', 'required'

        ),	

        );

  }

  


}



però se controlli ad esempio il textfield peso ha già un suo value:




<?php echo $form->textField($fattura,'peso',array('class'=>'span1','name'=>'peso[]','maxlength'=>50, 'value'=>$dati->peso, 'readonly'=>true, 'style'=>'font-size:12px')); ?>



e cosi per gli altri input.

Ovviamente iva e totale sono gli input che a seconda del caso rimangono vuoti e deve riempirli il cliente ad esempio se vuole fatturare con iva ART.E15, quindi esente iva.

Ecco uno screenshot del form compilato in tutti i campi.

Nonostante ciò continua a stampare gli errori che ho scritto prima!!!

Il problema è chiarissimo, la soluzione ripeto è da trovare nell’assegnazione di massa delle variabili.

Potrsti anche impostare le variabili manualmente, del tipo:




$fattura->variabile = $_POST['fattura']['variabile'];



Ma se le imposto manualmente…poi anche se lascia i campi in bianco…non li vede perchè ormai riconosce la variabile impostata manualmente no?

Provo a spararne una…che ne pensi se metto la validazioni dei campi RiepilogoFattura nel model FattureFiliali?

Cosi quel model gestisce la validazione di tutti i campi del form…e se valida quelli validerà anche questi altri (per assurdo parlando).

Nella tabella del database, non inserisco prodotto, peso, iva, totale…li uso solo come attributi per crearmi l’ array di valori che passo dal form.

Praticamente elimino sto benedetto RiepilogoForm…e pace!!!

Ora provo a modificare il tutto e vedo che succede.

Grattatina propiziatora ;D … si parte!!! Grazie ancora Fabrizio :)

Non cambia niente.

Secondo me (da ignorante) ciò che mi rovina potrebbe dipendere dal "name" che hanno i textfield [].

Es:




'name'=>'prodotto[]'........ 



Ho notato che se tolgo [] dai name…riconosce la validazione … pero ovviamente non mi cicla niente per la fase di stampa!!!

Pero ho anche notato che i textField di FattureFiliali, quindi di $model, come name hanno il normale:




name="FattureFiliali[cl_cognome]"



assegnato da Yii in automatico.

Chissààà…

Ok, accendino … ce l’ ho, benzina…ce l’ ho, damojeeeeeee focoooooo!!! ;D

Vabbè questa sera farò altri tentativi…sennò lascio cosi e se il cliente sbaglia a fare la fattura … sti caxxi ;D