Configuracion: seccion Comisiones con % global default y % editable por doctor

This commit is contained in:
2026-08-31 04:45:45 +00:00
parent 57efc3d9d3
commit 339ba235b1
3 changed files with 216 additions and 2 deletions

View File

@@ -1944,6 +1944,30 @@ class SkeenFrontendController(http.Controller):
except Exception as e:
return json_response({'status': 'error', 'message': str(e)}, 500)
@http.route('/skeen/frontend/v1/doctors/<int:doctor_id>/commission', type='http', auth='none', methods=['POST', 'OPTIONS'], csrf=False)
@require_role('admin')
def set_doctor_commission(self, doctor_id, **kw):
"""Designa el % de comisión de un doctor (0-100). 0 = usa el % global."""
try:
doctor = request.env['hr.employee'].sudo().browse(doctor_id)
if not doctor.exists():
return json_response({'status': 'error', 'message': 'Médico no encontrado'}, 404)
data = _parse_json_body()
try:
pct = float(data.get('commission_pct'))
except (TypeError, ValueError):
return json_response({'status': 'error', 'message': 'commission_pct debe ser numérico'}, 400)
if not 0 <= pct <= 100:
return json_response({'status': 'error', 'message': 'El porcentaje debe estar entre 0 y 100'}, 400)
doctor.write({'commission_pct': pct})
return json_response({
'status': 'success',
'doctor': {'id': doctor.id, 'name': doctor.name, 'commission_pct': doctor.commission_pct},
})
except Exception as e:
request.env.cr.rollback()
return json_response({'status': 'error', 'message': str(e)}, 500)
@http.route('/skeen/frontend/v1/doctors/<int:doctor_id>/history', type='http', auth='none', methods=['GET', 'OPTIONS'], csrf=False)
@require_role('lectura')
def doctor_history(self, doctor_id, **kw):
@@ -3693,6 +3717,33 @@ class SkeenFrontendController(http.Controller):
except Exception as e:
return json_response({'status': 'error', 'message': str(e)}, 500)
@http.route('/skeen/frontend/v1/config/commission_default', type='http', auth='none', methods=['GET', 'OPTIONS'], csrf=False)
@require_role('admin')
def get_commission_default(self, **kw):
"""% de comisión global por defecto (se aplica a médicos sin % propio)."""
try:
ICP = request.env['ir.config_parameter'].sudo()
pct = float(ICP.get_param('skeen.commission_pct', 0) or 0)
return json_response({'status': 'success', 'commission_pct': pct})
except Exception as e:
return json_response({'status': 'error', 'message': str(e)}, 500)
@http.route('/skeen/frontend/v1/config/commission_default', type='http', auth='none', methods=['POST', 'OPTIONS'], csrf=False)
@require_role('admin')
def set_commission_default(self, **kw):
try:
data = _parse_json_body()
try:
pct = float(data.get('commission_pct'))
except (TypeError, ValueError):
return json_response({'status': 'error', 'message': 'commission_pct debe ser numérico'}, 400)
if not 0 <= pct <= 100:
return json_response({'status': 'error', 'message': 'El porcentaje debe estar entre 0 y 100'}, 400)
request.env['ir.config_parameter'].sudo().set_param('skeen.commission_pct', pct)
return json_response({'status': 'success', 'commission_pct': pct})
except Exception as e:
return json_response({'status': 'error', 'message': str(e)}, 500)
# ============================================================
# Reporte de cumpleañeros
# ============================================================