se agrega mas campos a log de usuarios

francisco/logger
Francisco Sandoval 2024-02-25 14:17:40 -03:00
parent 3ff0eb4898
commit 8644561155
16 changed files with 145 additions and 70 deletions

View File

@ -1,6 +1,6 @@
from rest_framework import viewsets from rest_framework import viewsets
from .. import models, serializers from api import models, serializers
from django.db import models as dj_models from django.db.models import Max
class AplicacionViewSet(viewsets.ModelViewSet): class AplicacionViewSet(viewsets.ModelViewSet):
queryset = models.Aplicacion.objects.all() queryset = models.Aplicacion.objects.all()
@ -10,7 +10,7 @@ class AplicacionViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
# se indica que si no se indico el id, entonces sea el maximo + 1 # se indica que si no se indico el id, entonces sea el maximo + 1
if not request.data.get('id_aplicacion', None): if not request.data.get('id_aplicacion', None):
max_id = models.Aplicacion.objects.aggregate(dj_models.Max('id_aplicacion'))['id_aplicacion__max'] max_id = models.Aplicacion.objects.aggregate(Max('id_aplicacion'))['id_aplicacion__max']
new_id = max_id + 1 if max_id is not None else 1 new_id = max_id + 1 if max_id is not None else 1
request.data['id_aplicacion'] = new_id request.data['id_aplicacion'] = new_id

View File

@ -1,7 +1,7 @@
from rest_framework import viewsets from rest_framework import viewsets
from .. import models, serializers from .. import models, serializers
from django.db import models as dj_models from django.db.models import Max
class ComunaViewSet(viewsets.ModelViewSet): class ComunaViewSet(viewsets.ModelViewSet):
queryset = models.Comuna.objects.all() queryset = models.Comuna.objects.all()
@ -10,7 +10,7 @@ class ComunaViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
# se indica que si no se indico el id, entonces sea el maximo + 1 # se indica que si no se indico el id, entonces sea el maximo + 1
if not request.data.get('id_comuna', None): if not request.data.get('id_comuna', None):
max_id = models.Comuna.objects.aggregate(dj_models.Max('id_comuna'))['id_comuna__max'] max_id = models.Comuna.objects.aggregate(Max('id_comuna'))['id_comuna__max']
new_id = max_id + 1 if max_id is not None else 1 new_id = max_id + 1 if max_id is not None else 1
request.data['id_comuna'] = new_id request.data['id_comuna'] = new_id

View File

@ -1,12 +1,9 @@
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.decorators import action from rest_framework.decorators import action
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from django.core.files.storage import FileSystemStorage from django.core.files.storage import FileSystemStorage
from django.core.files import File
from django.http import FileResponse, HttpResponse from django.http import FileResponse, HttpResponse
from rest_framework import status
from api import models , serializers from api import models , serializers
from decouple import config from decouple import config
import os import os

View File

@ -2,7 +2,7 @@
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.decorators import action from rest_framework.decorators import action
from .. import models, serializers from api import models, serializers
class LetreroLUR_ViewSet(viewsets.ModelViewSet): class LetreroLUR_ViewSet(viewsets.ModelViewSet):
queryset = models.LetreroLUR.objects.all() queryset = models.LetreroLUR.objects.all()

View File

@ -1,13 +1,12 @@
from rest_framework import viewsets from rest_framework import viewsets
# from rest_framework.response import Response # from rest_framework.response import Response
from rest_framework.decorators import action, api_view from rest_framework.decorators import action
from rest_framework.filters import OrderingFilter from rest_framework.filters import OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from django.db import connection from django.db import connection
from api import models, serializers from api import models, serializers
from django.http import JsonResponse, HttpResponse from django.http import JsonResponse
from django.forms.models import model_to_dict
from os import getenv from os import getenv
import redis import redis
import json import json

View File

@ -1,12 +1,10 @@
from django.http import JsonResponse from django.http import JsonResponse
from rest_framework.decorators import action, api_view, schema from rest_framework.decorators import action, api_view
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.db.models import F, Subquery, Value
from django.db.models.functions import Coalesce
from ..models import Paradero, ParaderoImagen from api.models import Paradero
from ..models import Linea, GtfsShape, GtfsTrips from api.models import GtfsShape, GtfsTrips
from logging import error from logging import error
google_api_key = 'AIzaSyDnFO9w_SsodjBuY5tOK8-kQJns_l5klQ4' google_api_key = 'AIzaSyDnFO9w_SsodjBuY5tOK8-kQJns_l5klQ4'

View File

@ -1,10 +1,11 @@
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.decorators import action
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter from rest_framework.filters import OrderingFilter
from rest_framework import status from rest_framework.status import HTTP_400_BAD_REQUEST
from django_filters.rest_framework import DjangoFilterBackend
from django.db.models import Max
from django.db import transaction
from api import models, serializers from api import models, serializers
import logging import logging
@ -31,9 +32,48 @@ class OperadorViewSet(viewsets.ModelViewSet):
if not id_operador: if not id_operador:
# Si 'id_operador' no está presente o está vacío, retorna un error 400 # Si 'id_operador' no está presente o está vacío, retorna un error 400
return Response( return Response(
{"error": "No se puede crear el operador: 'id_operador' no proporcionado."}, "No se puede crear el operador: 'id_operador' no proporcionado.",
status=status.HTTP_400_BAD_REQUEST status=HTTP_400_BAD_REQUEST
) )
# Si 'id_operador' está presente, procede con la creación normal try:
return super().create(request, *args, **kwargs) with transaction.atomic():
operador = models.Operador(
id_operador = id_operador,
nombre_operador = request.data.get('nombre_operador'),
vigente = request.data.get('vigente'),
)
operador.save()
# se crea el rol para el operador
max_id = models.Rol.objects.aggregate(Max('id_rol'))['id_rol__max']
rol = models.Rol(
id_rol = max_id + 1,
nombre_rol = f'Rol {operador.nombre_operador}'
)
rol.save()
rol_operador = models.RolOperador(
id_rol = rol,
id_operador = operador
)
rol_operador.save()
return Response({
'id_operador': operador.id_operador,
'nombre_operador': operador.nombre_operador,
'vigente': operador.vigente,
})
except Exception as ex:
transaction.rollback()
return Response(str(ex), status=HTTP_400_BAD_REQUEST)
def destroy(self, request, pk=None):
try:
with transaction.atomic():
models.RolOperador.objects.filter(id_operador=pk).delete()
return super().destroy(request, pk)
except Exception as ex:
return Response(str(ex), status=HTTP_400_BAD_REQUEST)

View File

@ -12,7 +12,6 @@ class ParaderoViewSet(viewsets.ModelViewSet):
@action(detail=False, methods=['get']) @action(detail=False, methods=['get'])
def count(self, request, pk=None): def count(self, request, pk=None):
queryset = Paradero.objects.all() queryset = Paradero.objects.all()
if 'vigente' in request.GET and request.GET['vigente'] == '1': if 'vigente' in request.GET and request.GET['vigente'] == '1':

View File

@ -1,11 +1,8 @@
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.decorators import action
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import status from django.db.models import Max
from .. import models , serializers from api import models , serializers
from django.db import models as dj_models
class RedTransporteViewSet(viewsets.ModelViewSet): class RedTransporteViewSet(viewsets.ModelViewSet):
queryset = models.RedTransporte.objects.all() queryset = models.RedTransporte.objects.all()
@ -17,7 +14,7 @@ class RedTransporteViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
# se indica que si no se indico el id, entonces sea el maximo + 1 # se indica que si no se indico el id, entonces sea el maximo + 1
if not request.data.get('id_red', None): if not request.data.get('id_red', None):
max_id = models.RedTransporte.objects.aggregate(dj_models.Max('id_red'))['id_red__max'] max_id = models.RedTransporte.objects.aggregate(Max('id_red'))['id_red__max']
new_id = max_id + 1 if max_id is not None else 1 new_id = max_id + 1 if max_id is not None else 1
request.data['id_red'] = new_id request.data['id_red'] = new_id

View File

@ -1,6 +1,6 @@
from rest_framework import viewsets from rest_framework import viewsets
from .. import models, serializers from api import models, serializers
class RegionViewSet(viewsets.ModelViewSet): class RegionViewSet(viewsets.ModelViewSet):
queryset = models.Region.objects.all() queryset = models.Region.objects.all()

View File

@ -1,6 +1,7 @@
from rest_framework import viewsets from rest_framework import viewsets
from .. import models, serializers from rest_framework.response import Response
from django.db import models as dj_models from api import models, serializers
from django.db.models import Max
class RolViewSet(viewsets.ModelViewSet): class RolViewSet(viewsets.ModelViewSet):
queryset = models.Rol.objects.all() queryset = models.Rol.objects.all()
@ -9,8 +10,14 @@ class RolViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
# se indica que si no se indico el id, entonces sea el maximo + 1 # se indica que si no se indico el id, entonces sea el maximo + 1
if not request.data.get('id_rol', None): if not request.data.get('id_rol', None):
max_id = models.Rol.objects.aggregate(dj_models.Max('id_rol'))['id_rol__max'] max_id = models.Rol.objects.aggregate(Max('id_rol'))['id_rol__max']
new_id = max_id + 1 if max_id is not None else 1 new_id = max_id + 1 if max_id is not None else 1
request.data['id_rol'] = new_id request.data['id_rol'] = new_id
return super().create(request, *args, **kwargs) return super().create(request, *args, **kwargs)
def destroy(self, request, pk=None):
try:
return super().destroy(request, pk)
except Exception as ex:
return Response(str(ex), status=400)

View File

@ -1,5 +1,5 @@
from rest_framework import viewsets from rest_framework import viewsets
from .. import models, serializers from api import models, serializers
import logging import logging
class RolAplicacionViewSet(viewsets.ModelViewSet): class RolAplicacionViewSet(viewsets.ModelViewSet):

View File

@ -1,6 +1,6 @@
from rest_framework import viewsets from rest_framework import viewsets
from .. import models, serializers from api import models, serializers
class TipoTratamientoPersonaViewSet(viewsets.ModelViewSet): class TipoTratamientoPersonaViewSet(viewsets.ModelViewSet):
queryset = models.TipoTratamientoPersona.objects.all() queryset = models.TipoTratamientoPersona.objects.all()

View File

@ -24,7 +24,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
def create(self, request): def create(self, request):
try: try:
login = self.request.jwt_info['login'] login = self.request.jwt_info['login']
usuario_session = models.Usuario.objects.filter(login=login) usuario_session = models.Usuario.objects.filter(login=login).first()
with transaction.atomic(): with transaction.atomic():
input = json.loads(request.body) input = json.loads(request.body)
@ -36,7 +36,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
if id_tipo_tratamiento: if id_tipo_tratamiento:
tipo_tratamiento = models.TipoTratamientoPersona.objects.filter(id_tipo_tratamiento = id_tipo_tratamiento).first() tipo_tratamiento = models.TipoTratamientoPersona.objects.filter(id_tipo_tratamiento = id_tipo_tratamiento).first()
if not persona: if persona == None:
persona = models.Persona( persona = models.Persona(
rut = input['rut'], rut = input['rut'],
dv = input['dv'], dv = input['dv'],
@ -55,6 +55,9 @@ class UsuarioViewSet(viewsets.ModelViewSet):
persona.id_tipo_tratamiento = tipo_tratamiento persona.id_tipo_tratamiento = tipo_tratamiento
persona.save() persona.save()
if persona == None:
raise ValueError('Persona no creada')
rol = models.Rol.objects.filter(id_rol=input.get('id_rol',None)).first() rol = models.Rol.objects.filter(id_rol=input.get('id_rol',None)).first()
if rol == None: if rol == None:
raise ValueError('Rol no encontrado') raise ValueError('Rol no encontrado')
@ -67,13 +70,19 @@ class UsuarioViewSet(viewsets.ModelViewSet):
) )
usuario.save() usuario.save()
save_log_usuario(accion_tabla='create', rut_tabla=persona.rut, rut_usuario_ejecutor=usuario_session.rut.rut)
if input['clave']: if input['clave']:
logging.error('Modificar clave de usuario') logging.error('Modificar clave de usuario')
usuario.clave = make_password(input['clave']) usuario.clave = make_password(input['clave'])
usuario.save() usuario.save()
save_log_usuario(
accion_tabla='create',
rut_tabla=persona.rut,
login_tabla=usuario.login,
rut_ejecutor=usuario_session.rut.rut,
login_ejecutor=usuario_session.login
)
return Response({ return Response({
'rut': persona.rut, 'rut': persona.rut,
'dv': persona.dv, 'dv': persona.dv,
@ -85,14 +94,13 @@ class UsuarioViewSet(viewsets.ModelViewSet):
'vigente': usuario.vigente, 'vigente': usuario.vigente,
}) })
except ValueError as e: except ValueError as ex:
transaction.rollback() transaction.rollback()
return HttpResponse(str(e), status = 400) return HttpResponse(str(ex), status = 400)
except Exception as e: except Exception as ex:
transaction.rollback() transaction.rollback()
print(e) return HttpResponse(str(ex), status = 500)
return HttpResponse(str(e), status = 500)
def partial_update(self, request, *args, **kwargs): def partial_update(self, request, *args, **kwargs):
@ -119,7 +127,13 @@ class UsuarioViewSet(viewsets.ModelViewSet):
usuario.clave = make_password(input['clave']) usuario.clave = make_password(input['clave'])
usuario.save() usuario.save()
save_log_usuario(accion_tabla='update', rut_tabla=persona.rut, rut_usuario_ejecutor=usuario_session.rut.rut) save_log_usuario(
accion_tabla='update',
rut_tabla=persona.rut,
login_tabla=usuario.login,
rut_ejecutor=usuario_session.rut.rut,
login_ejecutor=usuario_session.login
)
return Response({ return Response({
'rut': persona.rut, 'rut': persona.rut,
@ -142,6 +156,26 @@ class UsuarioViewSet(viewsets.ModelViewSet):
return HttpResponse(str(e), status = 500) return HttpResponse(str(e), status = 500)
def destroy(self, request, pk=None):
try:
login = self.request.jwt_info['login']
usuario_session = models.Usuario.objects.filter(login=login).first()
usuario = models.Usuario.objects.filter(login=pk).first()
data = super().destroy(request, usuario.rut.rut)
save_log_usuario(
accion_tabla='delete',
rut_tabla=usuario.rut.rut,
login_tabla=usuario.login,
rut_ejecutor=usuario_session.rut.rut,
login_ejecutor=usuario_session.login
)
return data
except Exception as ex:
return Response(str(ex), status=400)
@action(detail=False, methods=['post']) @action(detail=False, methods=['post'])
def permisos(self, request): def permisos(self, request):
input = {} input = {}

View File

@ -12,6 +12,8 @@ class LogConsultaDispositivo(Document):
class LogTablaUsuario(Document): class LogTablaUsuario(Document):
accion_tabla = StringField(required=True) accion_tabla = StringField(required=True)
rut_usuario_tabla = StringField(required=True) rut_tabla = StringField(required=True)
rut_usuario_ejecutor = StringField(required=True) login_tabla = StringField(required=True)
rut_ejecutor = StringField(required=True)
login_ejecutor = StringField(required=True)
fecha_hora = DateTimeField(required=True) fecha_hora = DateTimeField(required=True)

View File

@ -28,16 +28,18 @@ def save_log_dispositivo(id_dispositivo, accion_url):
return False return False
def save_log_usuario(accion_tabla, rut_tabla, rut_usuario_ejecutor): def save_log_usuario(accion_tabla, rut_tabla, login_tabla, rut_ejecutor, login_ejecutor):
try: try:
print(rut_tabla, flush=True) print(rut_tabla, flush=True)
print(rut_usuario_ejecutor, flush=True) print(rut_ejecutor, flush=True)
# connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin') # connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin')
nuevo_registro = LogTablaUsuario( nuevo_registro = LogTablaUsuario(
accion_tabla = accion_tabla, accion_tabla = accion_tabla,
rut_usuario_tabla = str(rut_tabla), rut_tabla = str(rut_tabla),
rut_usuario_ejecutor = str(rut_usuario_ejecutor), login_tabla = str(login_tabla),
rut_ejecutor = str(rut_ejecutor),
login_ejecutor = str(login_ejecutor),
fecha_hora = datetime.datetime.now() fecha_hora = datetime.datetime.now()
) )
nuevo_registro.save() nuevo_registro.save()