Yii Framework Forum: Facturacion - Yii Framework Forum

Jump to content

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

Facturacion Rate Topic: -----

#1 User is offline   rotceh07 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 13-November 12

Posted 14 November 2012 - 04:53 PM

Hola a todos. Soy nuevo dentro del framework y les agradeceria me puedan iluminar con cierta duda.

Quiero realizar una formulario de una factura, con su encabezado y su detalle, en lo que tengo problemas es en saber que widget utilizar para el detalle o de que manera manejarlo, es decir que el usuario pueda ingresar el codigo y con el framework manejar los demas parametros (ya se nombre, precio subtotales y otros).

Gracias de antemano!
0

#2 User is offline   cesariux23 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 16-August 12

Posted 14 November 2012 - 06:47 PM

Hola, si solo quieres mostrar los detalles de una factura, sin hacer una búsqueda previa, podrías utilizar un pequeño formulario para pedir el numero y buscar, y utilizar un div que contenga un DetailView con los detalles del documento encontrado o un mensaje en caso de no encontrarlo.
El submit del form lo podrías hacer con ajax y llenar el div de manera dinámica.

Pero si lo que quieres es realizar una búsqueda y de acuerdo a los resultados mostrar sus detalles, entonces te sugiero que hagas una vista parecida a la de 'admin' (o utilizar esa vista, solo cambia los permisos en el controlador y modifica la ButtonColumn del gridview) que genera el CRUD para mostrar los detalles.

Espero te sea de utilidad mi comentario.

Saludos!.
0

#3 User is offline   rotceh07 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 13-November 12

Posted 15 November 2012 - 10:07 AM

View Postcesariux23, on 14 November 2012 - 06:47 PM, said:

Hola, si solo quieres mostrar los detalles de una factura, sin hacer una búsqueda previa, podrías utilizar un pequeño formulario para pedir el numero y buscar, y utilizar un div que contenga un DetailView con los detalles del documento encontrado o un mensaje en caso de no encontrarlo.
El submit del form lo podrías hacer con ajax y llenar el div de manera dinámica.

Pero si lo que quieres es realizar una búsqueda y de acuerdo a los resultados mostrar sus detalles, entonces te sugiero que hagas una vista parecida a la de 'admin' (o utilizar esa vista, solo cambia los permisos en el controlador y modifica la ButtonColumn del gridview) que genera el CRUD para mostrar los detalles.

Espero te sea de utilidad mi comentario.

Saludos!.


Gracias por tu respuesta! De casualidad tendras algun ejemplo o algun sitio donde se explique como realizarlo? Es que con lo que es detalles y ajax soy muy nuevo...

Saludos!
0

#4 User is offline   cesariux23 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 16-August 12

Posted 20 November 2012 - 03:40 PM

Busca en yiiplayground.com.. tiene un ejemplo de ajax/jquery te puede dar una idea, si tengo un poco mas de tiempo tratare de hacerte un ejemnplo

Saludos!.
0

#5 User is offline   cesariux23 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 16-August 12

Posted 22 November 2012 - 02:01 PM

Va el ejemplo

Tabla factura:

+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| numero | int(11) | NO | PRI | NULL | auto_increment |
| fecha | date | NO | | NULL | |
| concepto | varchar(45) | NO | | NULL | |
| total | varchar(45) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+

con los siguientes valores:

mysql> select * from factura;
+--------+------------+-----------+---------+
| numero | fecha | concepto | total |
+--------+------------+-----------+---------+
| 1 | 2012-11-22 | GASOLINA | $300.00 |
| 2 | 2012-11-22 | ALIMNETOS | $250.00 |
+--------+------------+-----------+---------+

Genera el modelo y el CRUD para factura con Gii.

Para efectos prácticos la consulta se realizará desde site/index (inicio)

vista site/index

index.php :

<?php $this->pageTitle=Yii::app()->name; 


//se agrega el script que envia la petición y muestra el resultado en el div
Yii::app()->clientScript->registerScript('busqueda', "

//cuando se haga el submit del formilario fbusqueda
$('#fbusqueda').submit(function(){
	//se hace via ajax
	$.ajax({
        type: 'GET',
        url: $(this).attr('action'),    //factura/getdetalles
        data:$(this).serialize(),       //se envia el contenido del formulario
        success: function(html){        //si es correcto
            $('#resultado').html('');   //se limpia el div 'resultado'
            $('#resultado').html(html); //se llena con el resultado devuelto
        },
    });
    return false;   //no se completa el submit, ya que se hizo via ajax
});
");
?>

<h1>Buscar factura</h1>

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'fbusqueda',                                      //id del formulario
	'action'=>Yii::app()->createUrl('factura/getdetalles'), //metodo en el controlador factura para mostrar los detalles
	'method'=>'get',                                        
)); ?>

	<div class="row">
		<?php echo 'Número de factura:'; ?>
		<?php echo $form->textField($model,'numero'); ?>
	</div>

	<div class="row buttons">
		<?php echo CHtml::submitButton('Buscar'); ?>
	</div>

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

</div><!-- form -->

<!-- Div que muestra el resultado de la busqueda -->
<div id="resultado">

<i>Ingrese el número de factura</i>

</div>


En el controlador FacturaController agrega una función llamada 'ActionGetdetalles' y agregala a las reglas de acceso de acuerdo a tus necesidades, en el ejemplo se le permite a cualquier persona.

FacturaController.php :

<?php

class FacturaController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view', 'getdetalles'), //se agrega 'getdetalles' para tener acceso
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Factura;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Factura']))
		{
			$model->attributes=$_POST['Factura'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->numero));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Factura']))
		{
			$model->attributes=$_POST['Factura'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->numero));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Factura');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Factura('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Factura']))
			$model->attributes=$_GET['Factura'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Factura::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='factura-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
	
	//envía una vista con los detalles de la factura
	public function actionGetdetalles(){
		//se valida que se recibe algo
		if(isset($_GET['Factura']))
			$model=Factura::model()->findByPk($_GET['Factura']['numero']);
		//si NO se encuentra la factura
		if($model===null)
		// se manda un mensaje de error
		echo '<div class="flash-notice">No se encontro la factura</div>';
		else
		//se hace un renderpartial con la vista 'view' con el la factura encontrada
		$this->renderPartial('view',array(
			'model'=>$model,
		));
		
	}		
}



Espero sea de tu utilidad.

Saludos!.
0

#6 User is offline   rotceh07 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 13-November 12

Posted 26 November 2012 - 05:53 PM

View Postcesariux23, on 22 November 2012 - 02:01 PM, said:

Va el ejemplo

Tabla factura:

+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| numero | int(11) | NO | PRI | NULL | auto_increment |
| fecha | date | NO | | NULL | |
| concepto | varchar(45) | NO | | NULL | |
| total | varchar(45) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+

con los siguientes valores:

mysql> select * from factura;
+--------+------------+-----------+---------+
| numero | fecha | concepto | total |
+--------+------------+-----------+---------+
| 1 | 2012-11-22 | GASOLINA | $300.00 |
| 2 | 2012-11-22 | ALIMNETOS | $250.00 |
+--------+------------+-----------+---------+

Genera el modelo y el CRUD para factura con Gii.

Para efectos prácticos la consulta se realizará desde site/index (inicio)

vista site/index

index.php :

<?php $this->pageTitle=Yii::app()->name; 


//se agrega el script que envia la petición y muestra el resultado en el div
Yii::app()->clientScript->registerScript('busqueda', "

//cuando se haga el submit del formilario fbusqueda
$('#fbusqueda').submit(function(){
	//se hace via ajax
	$.ajax({
        type: 'GET',
        url: $(this).attr('action'),    //factura/getdetalles
        data:$(this).serialize(),       //se envia el contenido del formulario
        success: function(html){        //si es correcto
            $('#resultado').html('');   //se limpia el div 'resultado'
            $('#resultado').html(html); //se llena con el resultado devuelto
        },
    });
    return false;   //no se completa el submit, ya que se hizo via ajax
});
");
?>

<h1>Buscar factura</h1>

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'fbusqueda',                                      //id del formulario
	'action'=>Yii::app()->createUrl('factura/getdetalles'), //metodo en el controlador factura para mostrar los detalles
	'method'=>'get',                                        
)); ?>

	<div class="row">
		<?php echo 'Número de factura:'; ?>
		<?php echo $form->textField($model,'numero'); ?>
	</div>

	<div class="row buttons">
		<?php echo CHtml::submitButton('Buscar'); ?>
	</div>

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

</div><!-- form -->

<!-- Div que muestra el resultado de la busqueda -->
<div id="resultado">

<i>Ingrese el número de factura</i>

</div>


En el controlador FacturaController agrega una función llamada 'ActionGetdetalles' y agregala a las reglas de acceso de acuerdo a tus necesidades, en el ejemplo se le permite a cualquier persona.

FacturaController.php :

<?php

class FacturaController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view', 'getdetalles'), //se agrega 'getdetalles' para tener acceso
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Factura;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Factura']))
		{
			$model->attributes=$_POST['Factura'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->numero));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Factura']))
		{
			$model->attributes=$_POST['Factura'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->numero));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Factura');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Factura('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Factura']))
			$model->attributes=$_GET['Factura'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Factura::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='factura-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
	
	//envía una vista con los detalles de la factura
	public function actionGetdetalles(){
		//se valida que se recibe algo
		if(isset($_GET['Factura']))
			$model=Factura::model()->findByPk($_GET['Factura']['numero']);
		//si NO se encuentra la factura
		if($model===null)
		// se manda un mensaje de error
		echo '<div class="flash-notice">No se encontro la factura</div>';
		else
		//se hace un renderpartial con la vista 'view' con el la factura encontrada
		$this->renderPartial('view',array(
			'model'=>$model,
		));
		
	}		
}



Espero sea de tu utilidad.

Saludos!.


Gracias por tu ayuda!
0

#7 User is offline   Hipogea 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 8
  • Joined: 13-April 12

Posted 14 December 2012 - 06:53 PM

View Postcesariux23, on 22 November 2012 - 02:01 PM, said:

Va el ejemplo

Tabla factura:

+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| numero | int(11) | NO | PRI | NULL | auto_increment |
| fecha | date | NO | | NULL | |
| concepto | varchar(45) | NO | | NULL | |
| total | varchar(45) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+

con los siguientes valores:

mysql> select * from factura;
+--------+------------+-----------+---------+
| numero | fecha | concepto | total |
+--------+------------+-----------+---------+
| 1 | 2012-11-22 | GASOLINA | $300.00 |
| 2 | 2012-11-22 | ALIMNETOS | $250.00 |
+--------+------------+-----------+---------+

Genera el modelo y el CRUD para factura con Gii.

Para efectos prácticos la consulta se realizará desde site/index (inicio)

vista site/index

index.php :

<?php $this->pageTitle=Yii::app()->name; 


//se agrega el script que envia la petición y muestra el resultado en el div
Yii::app()->clientScript->registerScript('busqueda', "

//cuando se haga el submit del formilario fbusqueda
$('#fbusqueda').submit(function(){
	//se hace via ajax
	$.ajax({
        type: 'GET',
        url: $(this).attr('action'),    //factura/getdetalles
        data:$(this).serialize(),       //se envia el contenido del formulario
        success: function(html){        //si es correcto
            $('#resultado').html('');   //se limpia el div 'resultado'
            $('#resultado').html(html); //se llena con el resultado devuelto
        },
    });
    return false;   //no se completa el submit, ya que se hizo via ajax
});
");
?>

<h1>Buscar factura</h1>

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'fbusqueda',                                      //id del formulario
	'action'=>Yii::app()->createUrl('factura/getdetalles'), //metodo en el controlador factura para mostrar los detalles
	'method'=>'get',                                        
)); ?>

	<div class="row">
		<?php echo 'Número de factura:'; ?>
		<?php echo $form->textField($model,'numero'); ?>
	</div>

	<div class="row buttons">
		<?php echo CHtml::submitButton('Buscar'); ?>
	</div>

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

</div><!-- form -->

<!-- Div que muestra el resultado de la busqueda -->
<div id="resultado">

<i>Ingrese el número de factura</i>

</div>


En el controlador FacturaController agrega una función llamada 'ActionGetdetalles' y agregala a las reglas de acceso de acuerdo a tus necesidades, en el ejemplo se le permite a cualquier persona.

FacturaController.php :

<?php

class FacturaController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view', 'getdetalles'), //se agrega 'getdetalles' para tener acceso
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Factura;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Factura']))
		{
			$model->attributes=$_POST['Factura'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->numero));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Factura']))
		{
			$model->attributes=$_POST['Factura'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->numero));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Factura');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Factura('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Factura']))
			$model->attributes=$_GET['Factura'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Factura::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='factura-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
	
	//envía una vista con los detalles de la factura
	public function actionGetdetalles(){
		//se valida que se recibe algo
		if(isset($_GET['Factura']))
			$model=Factura::model()->findByPk($_GET['Factura']['numero']);
		//si NO se encuentra la factura
		if($model===null)
		// se manda un mensaje de error
		echo '<div class="flash-notice">No se encontro la factura</div>';
		else
		//se hace un renderpartial con la vista 'view' con el la factura encontrada
		$this->renderPartial('view',array(
			'model'=>$model,
		));
		
	}		
}



Espero sea de tu utilidad.

Saludos!.


Eso esta bien, sin embargo , lapregunta va orientada a "simular" , los formularios de las aplicaiones Escritorio, en especial los eventos de los controles, y en esto un detalle que no tengo idea de como hacerlo, pero tengo la seguridad qeu YII, posse herramientas para hacerlo :

Por ejemplo en el detalle, solo con colocar el codigo de un producto y presionar ENTER , inmediatamente me pinta su descripcion y su precio. Perfecto, esto se puede hacer con AJAX, sin embargo colocar al Text Input una ayuda (Matchcode) , al estilo del "CJuiDatePicker " pero en lugar de mostrar las fechas a elegir , mostrar el catalogo de productos x por ejemplo en una ventana modal con sus repectivas opciones para filtrar los datos hasta hallar el codigo buscado, al momento de selccionar el valor la venta desaprece y retora el codigo selccionado, la pinta en el inputtext. ¿Que herreminatas me recomiendan?
0

#8 User is offline   Hipogea 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 8
  • Joined: 13-April 12

Posted 08 October 2013 - 07:35 PM

View PostHipogea, on 14 December 2012 - 06:53 PM, said:

Eso esta bien, sin embargo , lapregunta va orientada a "simular" , los formularios de las aplicaiones Escritorio, en especial los eventos de los controles, y en esto un detalle que no tengo idea de como hacerlo, pero tengo la seguridad qeu YII, posse herramientas para hacerlo :

Por ejemplo en el detalle, solo con colocar el codigo de un producto y presionar ENTER , inmediatamente me pinta su descripcion y su precio. Perfecto, esto se puede hacer con AJAX, sin embargo colocar al Text Input una ayuda (Matchcode) , al estilo del "CJuiDatePicker " pero en lugar de mostrar las fechas a elegir , mostrar el catalogo de productos x por ejemplo en una ventana modal con sus repectivas opciones para filtrar los datos hasta hallar el codigo buscado, al momento de selccionar el valor la venta desaprece y retora el codigo selccionado, la pinta en el inputtext. ¿Que herreminatas me recomiendan?



Estimado, m estuve haciendo esta pregunta por mucho tiempo y encontre la solucion :

Las aplicaciones escritorio, parecian inigualables con eso del MATCHCODE, que es fundamental para
ingresar datos, imagina una lista de materiles representadas por un combo box, eso es algo ridiculo.


Lo que hice fue desarrollar un Widget personalizado que contiene :
Una caja de texto con un evento AJAX, cuando hace el valid, esta caja de texto es parte del campo del modelo en el form
Una imagen simulando un boton con hipervinculo para abrir un cuadro de dialogo
Un Div Para "pintar" el texto buscado

Al momento de hacer click, se abre el CJuidialog, y carga una vista hecha con anterioridad, luego
ña grilla tiene un checkbox para elegir la fila seleccionada, al moneto de acpetar , el CJUIDIALOG, devuelve la clave solicitada y la pinta en el cuadro de texto

Luego de que se ha intado el valor en el cuadro de texto, al hacer valid se pinta el valor de la descripcion

Saludos




Saludos
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