Hola de nuevo y ante todo agradecido por las ayudas que me han dado en anteriores tópicos que he puesto y de antemano agradeciendo por las que me den ahora.
El problema que tengo es el siguiente, tengo un sistema de facturación hecho en Yii, para el caso que me trae aquí hoy tengo las tablas tablas siguientes:
[color="#FF0000"][color="#000000"]1.[/color] Datossal[/color], aquí se guardan los datos generales de las facturas, por campos:
- id: es la clave o indice Tipo autonómico
- fecha: fecha de facturación
- nfactura: Numero de la factura
- Codsalida: Tipo de salida, relacionada con la tabla [color="#FF0000"]tiposalida [/color]por ese campo.
- Codcliente: Cliente a facturar, relacionada con la tabla [color="#FF0000"]Clientes [/color]por ese campo.
- CodUEB: UEB o Entidad que realiza la operación, relacionada con la tabla [color="#FF0000"]Entidades [/color]por ese campo.
- CodMon: Moneda a utilizar, relacionada con la tabla [color="#FF0000"]Monedas [/color]por ese campo.
2. [color="#FF0000"]Detallesfact[/color]: aquí van los detalles de las facturas, por campos:
- Id: es la clave o indice Tipo autonómico
- Id_sal: relacionada con la tabla [color="#FF0000"]Datossal [/color]por el campo id
- Codprod: Es el producto a facturar, relacionada con la tabla [color="#FF0000"]Productos [/color]por ese campo.
- Cantidad: cantidad a facturar
- [color="#FF0000"]Submayorprod[/color]: Aquí se actualiza el saldo actual campo (Saldoact) al darle salida al producto, o sea se le resta la cantidad al saldo actual y es la existencia de es producto, para eso esta tabla esta relacionada con las tablas [color="#FF0000"]Detallesfact y [/color][color="#FF0000"]Productos [color="#000000"] por el campo Codprod[/color][/color].
Hasta aquí todo marcha bien, o sea al darle salida a un producto por facturacion se actualiza el saldo actual en el [color="#FF0000"]Submayorprod[/color], para eso hice esto en el contralador de [color="#FF0000"]Datossal[color="#000000"] :
public function actionSalvarFactura()
{
$id=$_POST['modelid'];
if($id)
$model=$this->loadModel($id);
else
$model = new Datossal;
if(isset($_POST['detalle']))
{
$model->fecha=$_POST['fecha'];
$model->nfactura=$_POST['nfactura'];
$model->Codsalida=$_POST['codsalida'];
$model->CodCliente=$_POST['cliente'];
$model->CodUEB=$_POST['codueb'];
$model->CodMon=$_POST['codmon'];
if ($model->save()) {
Detallesfact::model()->deleteAll('Id_sal=:id', array(':id'=>$model->id));
foreach($_POST['detalle'] as $item){
$detalle=new Detallesfact;
$detalle->Id_sal=$model->id;
$detalle->Codprod=$item['producto'];
$detalle->cantidad=$item['cantidad'];
if(!$id){
$criteria=new CDbCriteria;
$criteria->addCondition('CodUEB=:coden');
$criteria->addCondition('Codprod=:codigo');
$criteria->params=array(':coden'=>$model->CodUEB , ':codigo'=>$item['producto']);
$objSubmp = Submayorprod::model()->find($criteria);
$objSubmp->SaldoAct = $objSubmp->SaldoAct - $item['cantidad'];
$objSubmp->save();
}
}
}
}
}
Pero ahora quiero hacer lo siguiente, cuando vaya a facturar en el detalle a quiero que me de la opción de que la cantidad a facturar para ese producto en la UEB no puede ser mayor que el saldo actual de ese producto en la tabla [/color][/color][u][b][color="#FF0000"]Submayorprod, o sea:
[/color][/b][/u][color="#000000"]$detalle->cantidad=$item[‘cantidad’] menor o igual que el saldo actual en ese momento.[/color][color="#FF0000"]
[color="#000000"]Ver si es aquí o en la forma. Esta es la forma para captar las facturas:
[/color][/color][/b][/u][color="#FF0000"][color="#000000"]<?php
/* @var $this DatossalController */
/* @var $model Datossal */
/* @var $form CActiveForm */
?>
<script>
$(function(){
//Add, Save, Edit and Delete functions code
$(".btnEdit").on("click", Edit);
$(".btnDelete").on("click", Delete);
$("#btnAdd").on("click", Add);
ActualizarCodigo();
});
function Add(){
if($('#producto option:selected').text()!=''){
var codigo= $('#incodigo').val()==''?'0':$('#incodigo').val();
var cantidad= $('#incantidad').val()==''?'0':$('#incantidad').val();
$("#tblData tbody").append(
"<tr class='even'>"+
"<td>"+ codigo +"</td>"+
"<td>"+ $('#producto option:selected').text()+"</td>"+
"<td>"+ cantidad +"</td>"+
"<td><img src='images/update.png' class='btnEdit' title='Actualizar' style='cursor:pointer'> <img src='images/delete.png' class='btnDelete' title='Eliminar' style='cursor:pointer'/></td>"+
"</tr>");
$(".btnEdit").off("click");
$(".btnDelete").off("click");
$(".btnEdit").on("click", Edit);
$(".btnDelete").on("click", Delete);
document.getElementById('incantidad').value ='';
$('#producto option:selected').remove();
ActualizarCodigo();
}
else{
alert('No quedan productos para adicionar');
}
};
var oldCantidad;
function Edit(){
var par = $(this).parent().parent(); //tr
var tdCantidad = par.children("td:nth-child(3)");
var tdButtons = par.children("td:nth-child(4)");
oldCantidad=tdCantidad.html();
tdCantidad.html("<input type='text' id='txtCantidad' value='"+tdCantidad.html()+"'/>");
tdButtons.html("<img src='images/save.png' class='btnSave' title='Guardar' style='cursor:pointer'/> <img src='images/cancel.gif' class='btnCancel' title='Cancelar' style='cursor:pointer'/>");
$(".btnEdit").off("click");
$(".btnDelete").off("click");
$(".btnSave").on("click", Save);
$(".btnCancel").on("click", Cancel);
$(".btnEdit").on("click", Edit);
$(".btnDelete").on("click", Delete);
};
function Save(){
var par = $(this).parent().parent(); //tr
var tdCantidad = par.children("td:nth-child(3)");
var tdButtons = par.children("td:nth-child(4)");
tdCantidad.html(tdCantidad.children("input[type=text]").val());
tdButtons.html("<img src='images/update.png' class='btnEdit' title='Actualizar' style='cursor:pointer'/> <img src='images/delete.png' class='btnDelete' title='Eliminar' style='cursor:pointer'/>");
$(".btnEdit").off("click");
$(".btnDelete").off("click");
$(".btnEdit").on("click", Edit);
$(".btnDelete").on("click", Delete);
};
function Cancel(){
var par = $(this).parent().parent(); //tr
var tdCantidad = par.children("td:nth-child(3)");
var tdButtons = par.children("td:nth-child(4)");
tdCantidad.html(oldCantidad);
tdButtons.html("<img src='images/update.png' class='btnEdit' title='Actualizar' style='cursor:pointer'/> <img src='images/delete.png' class='btnDelete' title='Eliminar' style='cursor:pointer'/>");
$(".btnEdit").off("click");
$(".btnDelete").off("click");
$(".btnEdit").on("click", Edit);
$(".btnDelete").on("click", Delete);
};
function Delete(){
var par = $(this).parent().parent(); //tr
$('#producto')
.append($("<option></option>")
.attr("value",par.children("td:nth-child(1)").html())
.text(par.children("td:nth-child(2)").html()));
ActualizarCodigo();
par.remove();
};
function ActualizarCodigo(){
$('#incodigo').val($('#producto option:selected').val());
};
$('#datossal-form').live('submit',function(event) {
var tbl = $('#tblData tbody tr').map(function() {
var row = $(this);
return { producto: row.find(':nth-child(1)').text(),
cantidad: row.find(':nth-child(3)').text(),
};
}).get();
$.ajax({
url: 'index.php?r=datossal/salvarFactura',
type: 'POST',
dataType: 'text',
data: {"detalle":tbl,
"fecha": $('#Datossal_fecha').val(),
"nfactura":$('#Datossal_nfactura').val(),
"codsalida":$('#Datossal_Codsalida').val(),
"cliente":$('#Datossal_CodCliente').val(),
"codueb":$('#Datossal_CodUEB').val(),
"codmon":$('#Datossal_CodMon').val(),
"modelid":$('#modelid').val()
},
success: function(data) {
window.location.href='index.php?r=datossal/admin';
}
});
return false;
});
</script>
<style>
.mystyle
{
background: white;
border-collapse: collapse;
width: 100%;
border: 1px #D0E3EF solid;
}
.mystyle th, .mystyle td
{
border: 1px white solid;
padding: 0.3em;
}
.mystyle th
{
color: white;
background: #69A8CD;
text-align: center;
}
.mystyle tr.even
{
background: #F8F8F8;
}
.mystyle tr.odd
{
background: #E5F1F4;
}
.mystyle tr.selected
{
background: #BCE774;
}
.mystyle tbody tr:hover
{
background: #ECFBD4;
}
</style>
<div class="form">
<table width="138" border="1">
<tr>
<td width="28"><?php
echo CHtml::submitButton('Resumen de existencias ', array('submit'=>array('reportes/reporteResumenExistencias')));
?>
<div></div>
<div align="left"></div></td>
<td width="32"><div align="left">
<?php
echo CHtml::submitButton('Existencias por entidades', array('submit'=>array('/reportes/Existencias')));
?>
</div></td>
<td width="17"><div align="left">
<?php
echo CHtml::submitButton('Estado del cliente', array('submit'=>array('/reportes/Clientes')));
?>
</div></td>
<td width="33"> </td>
</tr>
</table>
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'datossal-form',
'enableAjaxValidation'=>false,
)); ?>
<?php echo '<input type="hidden" id="modelid" value="'.$model->id.'"/>'; ?>
<p class="note"><span style="float: left;"><style>
.rojo1 {background-color: red; }
</style>
</span></p>
<p class="note">Los campos con <span class="required">*</span> son necesarios.</p>
<?php echo $form->errorSummary($model); ?>
<table width="375" border="1">
<tr>
<th width="81" scope="row"><div align="left"><span style="float: left;"> <?php echo $form->labelEx($model,'Fecha'); ?>
<?php $feriados="['25/12/2013','01/01/2014','02/01/2014', '01/05/2014','25/07/2014','26/07/2014','27/07/2014','10/10/2014','25/12/2014','01/01/2015','02/01/2015', '01/05/2015','25/07/2015','26/07/2015','27/07/2015','10/10/2015','25/12/2015','01/01/2016','02/01/2016', '01/05/2016','25/07/2016','26/07/2016','27/07/2016','10/10/2016','25/12/2016']";
$this->widget('CJuiDatePickerEvents', array(
'model'=>$model,
'attribute'=>'fecha',
'value'=>$model->fecha,
'htmlOptions' => array('readonly'=>"readonly"),
'language' => 'es',
'events'=> array("beforeShowDay"=>"function(date) {var events = $feriados ;
var current='';
// agrego el cero a izq si corresponde
if (date.getDate()<10)
current='0'+date.getDate()+'/';
else
current=date.getDate()+'/';
if (date.getMonth() + 1<10)
current=current+'0'+(date.getMonth()+1)+'/';
else
current=current+(date.getMonth()+1)+'/';
current=current+date.getFullYear();
//feriados sábados y domingos
return (jQuery.inArray(current, events) == -1 && date.getDay()!=0 && date.getDay()!=7)?[true, '']:[true,'rojo1','Día no laborable'];},"),
'options'=>array(
'defaultDate'=>$model->fecha,
'dateFormat'=>'yy-mm-dd',
'showAnim'=>'slide',
//'minDate'=>'date-30("d-m-Y")', //fecha minima
'maxDate'=> "+20Y", //fecha maxima
),
)); ?>
<?php echo $form->error($model,'fecha'); ?></span></div></th>
<td width="144"><span class="row"><?php echo $form->labelEx($model,'nfactura'); ?> <?php echo $form->textField($model,'nfactura'); ?> <?php echo $form->error($model,'nfactura'); ?> </span></td>
<td width="72"><div align="left"><?php echo $form->labelEx($model,'Tipo Salida'); ?><?php echo $form->dropDownList($model,'Codsalida',
CHtml::listData(Tiposalida::model()->findAll(array('order'=>'Descripcion')), 'Codsalida', 'Descripcion')); ?><?php echo $form->error($model,'Codsalida'); ?></div></td>
<td width="63"><div align="left"><?php echo $form->labelEx($model,'Moneda'); ?><?php echo $form->dropDownList($model,'CodMon',
CHtml::listData(monedas::model()->findAll(array('order'=>'NMoneda')), 'CodMon', 'NMoneda')); ?><?php echo $form->error($model,'CodMon');?> </div></td>
<td width="59"><div align="left"><?php echo $form->labelEx($model,'Cliente'); ?><span class="row"><?php echo $form->dropDownList($model,'CodCliente',
CHtml::listData(Clientes::model()->findAll(array('order'=>'Descripcion')), 'CodCliente', 'Descripcion')); ?> <?php echo $form->error($model,'CodCliente'); ?></span></div></td>
<td width="66"><div align="left"><?php echo $form->labelEx($model,'Entidad o UEB'); ?><?php echo $form->dropDownList($model,'CodUEB',
CHtml::listData(Entidades::model()->findAll(array('order'=>'NEnt')), 'CodUEB', 'NEnt')); ?><?php echo $form->error($model,'CodUEB'); ?></div></td>
</tr>
</table>
<!-- ---------------------------------------- Detalles de la Factura ------------------------------------- -->
<fieldset>
<legend>Lista de Productos</legend>
<table>
<tr>
<td>
<label>Producto</label>
<?php
$conceptos=array();
$todos=Productos::model()->findAll(array('order'=>'NProductos'));
foreach ($todos as $producto) {
$esta=false;
foreach ($model->detalleFacturas as $value) {
if($producto->NProductos==$value->idProducto->NProductos){
$esta=true;
break;
}
}
if(!$esta)
$conceptos[$producto->Codprod]=$producto->NProductos;
}
echo CHtml::dropDownList('producto','', $conceptos,array(
'onChange'=>'javascript:ActualizarCodigo()',
));
?>
</td>
<td>
<label>Codigo</label>
<input type="text" id="incodigo"/>
</td>
<td>
<label>Cantidad</label>
<input type="text" id="incantidad"/>
</td>
</tr>
<tr>
<td>
<input type="button" id="btnAdd" value="Adicionar Producto"/>
</td>
</tr>
</table>
<table id="tblData" class="mystyle">
<thead>
<tr>
<th>Código</th>
<th>Producto</th>
<th>Cantidad</th>
<th style="width:50px"></th>
</tr>
</thead>
<tbody>
<?php
foreach ($model->detalleFacturas as $value) {
echo "<tr>";
echo "<td>".$value->idProducto->Codprod."</td>";
echo "<td>".$value->idProducto->NProductos."</td>";
echo "<td>".$value->cantidad."</td>";
echo "<td><img src='".Yii::app()->request->baseUrl."/images/update.png' class='btnEdit' title='Actualizar' style='cursor:pointer'>
<img src='".Yii::app()->request->baseUrl."/images/delete.png' class='btnDelete' title='Eliminar' style='cursor:pointer'/></td>";
echo "</tr>";
}
?>
</tbody>
</table>
</fieldset>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Crear' : 'Salvar'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->[/color][/color][u][color="#FF0000"] [/color][b][color="#FF0000"][color="#000000"]
[/color][/color][u][b][color="#FF0000"] Espero me ayuden, ya que necesito validar eso
[/color][/b][/u]