Inventario: campo de precio de venta editable (faltaba en la UI)

El modelo tenia el campo price y el POS lo usa para cobrar, pero ni el
formulario de alta lo capturaba ni existia modal de edicion: los 170
articulos tenian precio en 0 y recepcion tecleaba el precio a mano en
cada venta.

- Backend: inventory_create acepta price; inventory_update lo permite
  entre los campos editables (con conversion float).
- Frontend: columna 'Precio venta' en la tabla, campo en el alta y
  modal nuevo 'Editar articulo' (nombre, precio, costo, SKU, categoria,
  unidad, niveles y notas). La existencia sigue cambiando solo via
  Ajustar para dejar registro del movimiento.
This commit is contained in:
2026-09-29 23:33:12 +00:00
parent 7b54e40104
commit 5a16f694de
2 changed files with 69 additions and 6 deletions

View File

@@ -6426,6 +6426,7 @@ class SkeenFrontendController(http.Controller):
'qty_optimal': float(data.get('qty_optimal', 0) or 0),
'qty_min': float(data.get('qty_min', 0) or 0),
'cost': float(data.get('cost', 0) or 0),
'price': float(data.get('price', 0) or 0),
'expiry_date': data.get('expiry_date') or False,
'notes': data.get('notes', ''),
}
@@ -6444,12 +6445,12 @@ class SkeenFrontendController(http.Controller):
return json_response({'status': 'error', 'message': 'Item no encontrado'}, 404)
data = _parse_json_body()
allowed = ['name', 'kind', 'sku', 'category', 'unit', 'qty_optimal', 'qty_min',
'cost', 'expiry_date', 'notes', 'active', 'genera_monedero']
'cost', 'price', 'expiry_date', 'notes', 'active', 'genera_monedero']
vals = {}
for k in allowed:
if k in data:
vals[k] = data[k]
for f in ('qty_optimal', 'qty_min', 'cost'):
for f in ('qty_optimal', 'qty_min', 'cost', 'price'):
if f in vals:
vals[f] = float(vals[f] or 0)
item.write(vals)