fase 3.2: compras y proveedores (modulo skeen_compras: proveedores, ordenes de compra con recepcion total/parcial, costo promedio ponderado con lote y caducidad, pagos a proveedor, cuentas por pagar con antiguedad, reportes de compras y margen por articulo); apagado por defecto
This commit is contained in:
@@ -21,6 +21,7 @@ from odoo.addons.skeen_citas.clinic_settings import (
|
||||
set_settings as set_clinic_settings,
|
||||
get_impuestos,
|
||||
get_recursos,
|
||||
get_compras,
|
||||
)
|
||||
from odoo.addons.skeen_citas.glosario import (
|
||||
GLOSARIO_KEYS as GLOSARIO_KEY_SET,
|
||||
@@ -660,9 +661,16 @@ class SkeenFrontendController(http.Controller):
|
||||
# Permisos por acción (catálogo + por rol)
|
||||
# ============================================================
|
||||
def _perm_catalogo(self):
|
||||
# Con `compras.activo=false` el grupo de permisos de Compras no se
|
||||
# muestra en el editor de roles: apagar el módulo no debe cambiar
|
||||
# ninguna pantalla existente.
|
||||
try:
|
||||
ocultar = set() if get_compras(request.env).get('activo') else {'compras'}
|
||||
except Exception:
|
||||
ocultar = set()
|
||||
return [{'grupo': g, 'label': label,
|
||||
'permisos': [{'key': k, 'label': l} for k, l in perms]}
|
||||
for g, label, perms in PERMISSION_GROUPS]
|
||||
for g, label, perms in PERMISSION_GROUPS if g not in ocultar]
|
||||
|
||||
@http.route('/skeen/frontend/v1/permisos', type='http', auth='none',
|
||||
methods=['GET', 'OPTIONS'], csrf=False)
|
||||
@@ -8014,6 +8022,10 @@ class SkeenFrontendController(http.Controller):
|
||||
'qty_min': it.qty_min,
|
||||
'cost': it.cost,
|
||||
'price': it.price,
|
||||
'costo_promedio': getattr(it, 'costo_promedio', 0.0),
|
||||
'ultimo_costo': getattr(it, 'ultimo_costo', 0.0),
|
||||
'margen': getattr(it, 'margen', 0.0),
|
||||
'margen_pct': getattr(it, 'margen_pct', 0.0),
|
||||
'inventory_value': it.inventory_value,
|
||||
'expiry_date': it.expiry_date.strftime('%Y-%m-%d') if it.expiry_date else None,
|
||||
'last_count_date': it.last_count_date.strftime('%Y-%m-%d') if it.last_count_date else None,
|
||||
@@ -8036,6 +8048,9 @@ class SkeenFrontendController(http.Controller):
|
||||
'date': m.date.strftime('%Y-%m-%d %H:%M') if m.date else None,
|
||||
'reference': m.reference or '',
|
||||
'notes': m.notes or '',
|
||||
'lote': getattr(m, 'lote', '') or '',
|
||||
'fecha_caducidad': m.fecha_caducidad.strftime('%Y-%m-%d')
|
||||
if getattr(m, 'fecha_caducidad', None) else None,
|
||||
}
|
||||
|
||||
@http.route('/skeen/frontend/v1/inventory/items', type='http', auth='none', methods=['GET', 'OPTIONS'], csrf=False)
|
||||
@@ -8114,12 +8129,13 @@ class SkeenFrontendController(http.Controller):
|
||||
data = _parse_json_body()
|
||||
allowed = ['name', 'kind', 'sku', 'category', 'unit', 'qty_optimal', 'qty_min',
|
||||
'cost', 'price', 'expiry_date', 'notes', 'active', 'genera_monedero',
|
||||
'tax_rate', 'tax_use_default']
|
||||
'tax_rate', 'tax_use_default', 'costo_promedio', 'ultimo_costo']
|
||||
vals = {}
|
||||
for k in allowed:
|
||||
if k in data:
|
||||
vals[k] = data[k]
|
||||
for f in ('qty_optimal', 'qty_min', 'cost', 'price', 'tax_rate'):
|
||||
for f in ('qty_optimal', 'qty_min', 'cost', 'price', 'tax_rate',
|
||||
'costo_promedio', 'ultimo_costo'):
|
||||
if f in vals:
|
||||
vals[f] = float(vals[f] or 0)
|
||||
if 'tax_use_default' in vals:
|
||||
|
||||
Reference in New Issue
Block a user