Esta consulta es de hace 8 años. No tome esta información como actualizada. Si tiene problemas con FacturaScripts, consulte la sección ayuda o la sección contacto
dilmix2_f74d39

Plugin: facturacion_base

dilmix2_f74d39   España   04-10-2016 21:08:15   10-10-2016 20:02:02   278  
Plugin: facturacion_base
Igual estoy haciendo algo mal....casi seguro, vaya...pero si tengo 3 unidades en stock de un artículo y en ventas/pedidos intento hacer un pedido de 4 unidades...no debería decirme que no puede ser o algo así?
Tengo la opción "Permitir ventas sin stock" puesta en NO, pero parece que solo funciona si el stock es igual a cero.

Plugins relacionados

Plugin facturacion_base
He puesto el ejemplo de ventas/pedidos, pero pasa lo mismo en albaranes y facturas.
Todavía no hay una comprobación "estricta" del stock. Mientras haya una unidad te permite vender las que quieras.
Se avanzará en ese área cuando se revise toda la gestión de stock.
Saludos.
Bueno, de momento he conseguido evitar que se incluya en un albarán cualquier cantidad de un artículo mayor que la del stock disponible.
Peeeeero...el precio total no se guarda correctamente en la bdd y salta el error de que "el total difiere entre la vista y el controlador", posterior eliminación del albarán.
Hasta aquí he llegado con mis conocimientos/tiempo disponible.
Pongo el código por si alguien quiere echarme un cable. Aviso, es una chapuza y lo sé.

plugins/facturacion_base/controller/nueva_venta.php empezando en la línea 732
[code]

//buscamos el stock real del artículo
$select=$this->db->select("SELECT stockfis FROM articulos WHERE referencia='".$linea->referencia."'");
$stockreal=$select[0]['stockfis'];

//si es menor que la cantidad seleccionada lanzamos mensaje con el/los artículos que no tienen suficiente stock y marcamos la variable $lineastock=FALSE
if($linea->cantidad > $stockreal){
$this->new_error_msg("¡No hay suficiente stock del artículo: ".$linea->referencia);
$lineastock = FALSE;
}


//ponemos un if que evita actualizar el albarán con los artículos sin stock suficiente
if($lineastock)
{
//a partir de aquí todo queda igual y cerramos el if
if($linea->save() )
{
if( $articulo AND isset($_POST['stock']) )
{
/// descontamos del stock
$articulo->sum_stock($albaran->codalmacen, 0 - $linea->cantidad);
}

$albaran->neto += $linea->pvptotal;
$albaran->totaliva += ($linea->pvptotal * $linea->iva/100);
$albaran->totalirpf += ($linea->pvptotal * $linea->irpf/100);
$albaran->totalrecargo += ($linea->pvptotal * $linea->recargo/100);

if($linea->irpf > $albaran->irpf)
{
$albaran->irpf = $linea->irpf;
}
}
else
{
$this->new_error_msg("¡Imposible guardar la linea con referencia: ".$linea->referencia);
$continuar = FALSE;
}
}

[code]
Se me olvidó cerrar el [/code] del final :(
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?
Con esa comprobación se intentar detectar casos en los que el cálculo de la vista sea distinto al del controlador. De vez en cuando avisan de que falla, pero nunca dan más datos. Eso está ahí para detectar errores de programación, más que nada.
Ok, entonces lo doy por bueno de momento. Por lo menos hasta que se revise la gestión del stock en próximas actualizaciones.
Gracias y felicidades por el trabajo. Si puedo ayudar en algo (dentro de mis limitaciones) por aquí estaré.
Puedes enviar plugins que hagas y quieras compartir: https://www.facturascripts.com/comm3/index.php?page=community_enviar_plugin
Saludos.
No se si vale la pena hacer un plugin basado en esta modificación, ya que es una cambio bastante pequeño.
Si creeis que la vale, me pongo a ello en cuanto tenga un momento (o dos).
[[Cerrado por inactividad]]
¿Problemas con FacturaScripts?
Si tiene problemas con FacturaScripts consulte la sección ayuda o la sección contacto



Cookies
Usamos cookies en nuestro sitio web para brindarte la experiencia más relevante recordando tus preferencias y visitas repetidas. Al hacer clic en "Aceptar", aceptas el uso de TODAS las cookies necesarias.
Copyright (c) 2013-2024 FacturaScripts
0.16682s

Soporte