Solucionado, aunque no de la mejor manera.
De esta forma, la función nuevo_albaran_cliente() de facturacion_base/controller/nueva_venta.php (se puede hacer lo mismo con nueva_factura_cliente() ) realmente controla si hay suficiente stock de cada artículo añadido y en caso contrario, añade al albarán únicamente la cantidad disponible del artículo/s en cuestión. Además lanza un mensaje indicando el artículo/s sin stock suficiente.
Empezando en la línea 730:
//dilmix->buscamos el stock físico del artículo actual
$select=$this->db->select("SELECT stockfis FROM articulos WHERE referencia='".$linea->referencia."'");
$stockreal=$select[0]['stockfis'];
//dilmix->si es menor que la cantidad seleccionada recalculamos con la cantidad disponible y lanzamos mensaje de error
if($linea->cantidad > $stockreal){
$linea->cantidad=$stockreal;
$linea->pvpsindto = ($linea->pvpunitario * $linea->cantidad);
$linea->pvptotal = $linea->pvpsindto -( $linea->pvpsindto * $linea->dtopor/100);
$this->new_error_msg("¡No hay suficiente stock del artículo: ".$linea->referencia);
}
Lo que no me gusta es que un poco más abajo tengo que comentar éste if para que no controle si hay diferencias entre la vista y el controlador (las va a haber porque estamos cambiando lo pedido en el formulario):
/*if comentado
if( abs(floatval($_POST['atotal']) - $albaran->total) >= .02 )
{
$this->new_error_msg("El total difiere entre la vista y el controlador (".$_POST['atotal'].
" frente a ".$albaran->total."). Debes informar del error.");
$albaran->delete();
//}
/*else*/ if( $albaran->save() )-->a partit de éste if todo continúa igual
La pregunta es la siguiente:
Qué posibles errores se intentan evitar controlando la diferencia entre vista y controlador? Qué puede ocurrirr al dejar de controlarlo?