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.
hace 2 meses   dilmix2_103

He puesto el ejemplo de ventas/pedidos, pero pasa lo mismo en albaranes y facturas.

hace 2 meses   NeoRazorX   admin

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.

hace 2 meses   dilmix2_103

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]

hace 2 meses   dilmix2_103

Se me olvidó cerrar el [/code] del final :(

hace 2 meses   dilmix2_103

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?

hace 2 meses   NeoRazorX   admin

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.

hace 2 meses   dilmix2_103

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é.

hace 2 meses   NeoRazorX   admin

Puedes enviar plugins que hagas y quieras compartir: https://www.facturascripts.com/comm3/index.php?page=community_enviar_plugin
Saludos.

hace 2 meses   dilmix2_103

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).


Si lo deseas, puedes modificar las prioridades de tus peticiones en el plan de desarrollo.

  Plan de desarrollo