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 .. import models, serializers
from django.db import models as dj_models
from api import models, serializers
from django.db.models import Max
class AplicacionViewSet(viewsets.ModelViewSet):
queryset = models.Aplicacion.objects.all()
@ -10,7 +10,7 @@ class AplicacionViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs):
# se indica que si no se indico el id, entonces sea el maximo + 1
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
request.data['id_aplicacion'] = new_id

View File

@ -1,7 +1,7 @@
from rest_framework import viewsets
from .. import models, serializers
from django.db import models as dj_models
from django.db.models import Max
class ComunaViewSet(viewsets.ModelViewSet):
queryset = models.Comuna.objects.all()
@ -10,7 +10,7 @@ class ComunaViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs):
# se indica que si no se indico el id, entonces sea el maximo + 1
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
request.data['id_comuna'] = new_id

View File

@ -1,12 +1,9 @@
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.core.files.storage import FileSystemStorage
from django.core.files import File
from django.http import FileResponse, HttpResponse
from rest_framework import status
from api import models , serializers
from decouple import config
import os

View File

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

View File

@ -1,13 +1,12 @@
from rest_framework import viewsets
# 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 django_filters.rest_framework import DjangoFilterBackend
from django.db import connection
from api import models, serializers
from django.http import JsonResponse, HttpResponse
from django.forms.models import model_to_dict
from django.http import JsonResponse
from os import getenv
import redis
import json

View File

@ -1,12 +1,10 @@
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.db.models import F, Subquery, Value
from django.db.models.functions import Coalesce
from ..models import Paradero, ParaderoImagen
from ..models import Linea, GtfsShape, GtfsTrips
from api.models import Paradero
from api.models import GtfsShape, GtfsTrips
from logging import error
google_api_key = 'AIzaSyDnFO9w_SsodjBuY5tOK8-kQJns_l5klQ4'

View File

@ -1,10 +1,11 @@
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 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
import logging
@ -26,14 +27,53 @@ class OperadorViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs):
# Comprueba si 'id_operador' está presente en la petición y no está vacío
id_operador = request.data.get('id_operador')
if not id_operador:
# Si 'id_operador' no está presente o está vacío, retorna un error 400
return Response(
{"error": "No se puede crear el operador: 'id_operador' no proporcionado."},
status=status.HTTP_400_BAD_REQUEST
# Comprueba si 'id_operador' está presente en la petición y no está vacío
id_operador = request.data.get('id_operador')
if not id_operador:
# Si 'id_operador' no está presente o está vacío, retorna un error 400
return Response(
"No se puede crear el operador: 'id_operador' no proporcionado.",
status=HTTP_400_BAD_REQUEST
)
try:
with transaction.atomic():
operador = models.Operador(
id_operador = id_operador,
nombre_operador = request.data.get('nombre_operador'),
vigente = request.data.get('vigente'),
)
# Si 'id_operador' está presente, procede con la creación normal
return super().create(request, *args, **kwargs)
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'])
def count(self, request, pk=None):
queryset = Paradero.objects.all()
if 'vigente' in request.GET and request.GET['vigente'] == '1':

View File

@ -1,11 +1,8 @@
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 rest_framework import status
from .. import models , serializers
from django.db import models as dj_models
from django.db.models import Max
from api import models , serializers
class RedTransporteViewSet(viewsets.ModelViewSet):
queryset = models.RedTransporte.objects.all()
@ -17,7 +14,7 @@ class RedTransporteViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs):
# se indica que si no se indico el id, entonces sea el maximo + 1
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
request.data['id_red'] = new_id

View File

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

View File

@ -1,6 +1,7 @@
from rest_framework import viewsets
from .. import models, serializers
from django.db import models as dj_models
from rest_framework.response import Response
from api import models, serializers
from django.db.models import Max
class RolViewSet(viewsets.ModelViewSet):
queryset = models.Rol.objects.all()
@ -9,8 +10,14 @@ class RolViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs):
# se indica que si no se indico el id, entonces sea el maximo + 1
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
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 .. import models, serializers
from api import models, serializers
import logging
class RolAplicacionViewSet(viewsets.ModelViewSet):

View File

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

View File

@ -24,7 +24,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
def create(self, request):
try:
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():
input = json.loads(request.body)
@ -36,7 +36,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
if id_tipo_tratamiento:
tipo_tratamiento = models.TipoTratamientoPersona.objects.filter(id_tipo_tratamiento = id_tipo_tratamiento).first()
if not persona:
if persona == None:
persona = models.Persona(
rut = input['rut'],
dv = input['dv'],
@ -55,6 +55,9 @@ class UsuarioViewSet(viewsets.ModelViewSet):
persona.id_tipo_tratamiento = tipo_tratamiento
persona.save()
if persona == None:
raise ValueError('Persona no creada')
rol = models.Rol.objects.filter(id_rol=input.get('id_rol',None)).first()
if rol == None:
raise ValueError('Rol no encontrado')
@ -67,32 +70,37 @@ class UsuarioViewSet(viewsets.ModelViewSet):
)
usuario.save()
save_log_usuario(accion_tabla='create', rut_tabla=persona.rut, rut_usuario_ejecutor=usuario_session.rut.rut)
if input['clave']:
logging.error('Modificar clave de usuario')
usuario.clave = make_password(input['clave'])
usuario.save()
return Response({
'rut': persona.rut,
'dv': persona.dv,
'nombres': persona.nombres,
'apellido_a': persona.apellido_a,
'apellido_b': persona.apellido_b,
'email': persona.email,
'login': usuario.login,
'vigente': usuario.vigente,
})
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({
'rut': persona.rut,
'dv': persona.dv,
'nombres': persona.nombres,
'apellido_a': persona.apellido_a,
'apellido_b': persona.apellido_b,
'email': persona.email,
'login': usuario.login,
'vigente': usuario.vigente,
})
except ValueError as e:
except ValueError as ex:
transaction.rollback()
return HttpResponse(str(e), status = 400)
return HttpResponse(str(ex), status = 400)
except Exception as e:
except Exception as ex:
transaction.rollback()
print(e)
return HttpResponse(str(e), status = 500)
return HttpResponse(str(ex), status = 500)
def partial_update(self, request, *args, **kwargs):
@ -119,7 +127,13 @@ class UsuarioViewSet(viewsets.ModelViewSet):
usuario.clave = make_password(input['clave'])
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({
'rut': persona.rut,
@ -142,6 +156,26 @@ class UsuarioViewSet(viewsets.ModelViewSet):
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'])
def permisos(self, request):
input = {}

View File

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

View File

@ -28,16 +28,18 @@ def save_log_dispositivo(id_dispositivo, accion_url):
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:
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')
nuevo_registro = LogTablaUsuario(
accion_tabla = accion_tabla,
rut_usuario_tabla = str(rut_tabla),
rut_usuario_ejecutor = str(rut_usuario_ejecutor),
rut_tabla = str(rut_tabla),
login_tabla = str(login_tabla),
rut_ejecutor = str(rut_ejecutor),
login_ejecutor = str(login_ejecutor),
fecha_hora = datetime.datetime.now()
)
nuevo_registro.save()