POS vista lista, modulo Tickets para gerencia con cancelacion auditada, y saldo a favor (recargas de anticipo desde expediente y agenda, canje en POS)

This commit is contained in:
2026-09-18 04:25:33 +00:00
parent cebf8d663d
commit d75411f0d9
19 changed files with 1278 additions and 30 deletions

View File

@@ -54,6 +54,28 @@ class SkeenMonedero(models.Model):
'history': history,
}
def add_deposit(self, amount, description='', reference='', operator=''):
"""Recarga de saldo a favor (dinero a cuenta, p. ej. un anticipo).
A diferencia de add_points (puntos ganados por compra), el depósito es
dinero que el paciente paga por adelantado: suma al mismo saldo y se
puede canjear en el POS. El saldo se lleva en pesos enteros (1 pt = $1).
"""
self.ensure_one()
amount = int(round(float(amount or 0)))
if amount <= 0:
raise ValidationError(_('El monto de la recarga debe ser mayor a 0'))
self.write({'points': self.points + amount})
tx = self.env['skeen.monedero.transaction'].create({
'monedero_id': self.id,
'type': 'deposito',
'points': amount,
'description': description or 'Recarga de saldo a favor',
'reference': reference,
'operator': operator,
})
return tx
def add_points(self, points, description='', reference='', operator=''):
"""Agregar puntos al monedero"""
self.ensure_one()
@@ -120,9 +142,11 @@ class SkeenMonederoTransaction(models.Model):
# Transacción
type = fields.Selection([
('deposito', 'Depósito (saldo a favor)'),
('accrual', 'Acumulación'),
('redemption', 'Redención'),
('adjustment', 'Ajuste'),
('reversion', 'Reversión'),
('expiration', 'Vencimiento'),
], string='Tipo', required=True)