forked from TDTP/admin_transporte_backend
se registra cambios de usuarios y consultas dispositivos en base mongodb
parent
0032c1af1e
commit
3ff0eb4898
|
@ -10,6 +10,12 @@ DBPASS=password
|
|||
DB_REDIS_HOST=dbproto
|
||||
DB_REDIS_PORT=6379
|
||||
|
||||
# Conexion con base datos mongo
|
||||
DB_MONGO_HOST=dbmongo
|
||||
DB_MONGO_PORT=27017
|
||||
DB_MONGO_USER=root
|
||||
DB_MONGO_PASS=password
|
||||
|
||||
# Datos de emisor de correos
|
||||
SMTP_HOST=smtp-mail.outlook.com
|
||||
SMTP_PORT=587
|
||||
|
|
|
@ -9,7 +9,7 @@ POST {{server}}/auth/
|
|||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"username": "usuario1",
|
||||
"rut": "11111111-1",
|
||||
"password": "usuario1"
|
||||
}
|
||||
|
||||
|
|
|
@ -5,12 +5,15 @@ from django.db.models import F
|
|||
from django.db import connection
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from rest_framework.decorators import action
|
||||
from .. import models, serializers
|
||||
from api import models, serializers
|
||||
from os import getenv
|
||||
import redis
|
||||
import json
|
||||
import logging
|
||||
|
||||
# funcion para registrar en mongo
|
||||
from logger.views import save_log_dispositivo
|
||||
|
||||
class DispositivoViewSet(viewsets.ModelViewSet):
|
||||
queryset = models.Dispositivo.objects.all()
|
||||
serializer_class = serializers.DispositivoSerializer
|
||||
|
@ -29,6 +32,8 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
|||
.first()
|
||||
|
||||
if (record):
|
||||
save_log_dispositivo(id_dispositivo=whoami['idDispositivo'], accion_url='whoami')
|
||||
|
||||
return JsonResponse({
|
||||
"WhoamiResponse": {
|
||||
"NroParadero": record.nro_paradero,
|
||||
|
@ -51,7 +56,6 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
|||
input = json.loads(request.body)
|
||||
getInfoDevice = input['GetInfoDevice']
|
||||
|
||||
|
||||
record = models.Paradero.objects \
|
||||
.filter(dispositivo__id_dispositivo=getInfoDevice['idDispositivo']) \
|
||||
.annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \
|
||||
|
@ -106,10 +110,13 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
|||
for pk_linea in lineas_agrupadas:
|
||||
detalle_lineas.append(lineas_agrupadas[pk_linea])
|
||||
|
||||
save_log_dispositivo(id_dispositivo=getInfoDevice['idDispositivo'], accion_url='getInfoDevice')
|
||||
|
||||
return JsonResponse({
|
||||
"GetInfoDeviceResponse": {
|
||||
"DetalleLineas": detalle_lineas,
|
||||
"MensajeParadero": "No considerar, uso futuro"
|
||||
"MensajeParadero": "No considerar, uso futuro",
|
||||
"NroParadero": record.nro_paradero,
|
||||
"NombreParadero": record.nombre_paradero
|
||||
}
|
||||
})
|
|
@ -18,8 +18,9 @@ class PersonaViewSet(viewsets.ModelViewSet):
|
|||
|
||||
def create(self, request):
|
||||
try:
|
||||
fs = FileSystemStorage(location = config('PHOTOS_UPLOADS','/tmp'))
|
||||
fs.save(request.data['photo'], request.data['photo'])
|
||||
if 'photo' in request.data:
|
||||
fs = FileSystemStorage(location = config('PHOTOS_UPLOADS','/tmp'))
|
||||
fs.save(request.data['photo'], request.data['photo'])
|
||||
|
||||
return super().create(request)
|
||||
except Exception as e:
|
||||
|
@ -27,21 +28,23 @@ class PersonaViewSet(viewsets.ModelViewSet):
|
|||
return HttpResponse(e.detail['rut'][0], status=400)
|
||||
return HttpResponse(e, status=400)
|
||||
|
||||
|
||||
def partial_update(self, request, pk=None):
|
||||
try:
|
||||
# indicar el nombre con que se guardara el archivo
|
||||
archivo = request.data['photo']
|
||||
extension = Path(archivo.name).suffix
|
||||
nombre_archivo = f'{pk}{extension}'
|
||||
if 'photo' in request.data:
|
||||
# indicar el nombre con que se guardara el archivo
|
||||
archivo = request.data['photo']
|
||||
extension = Path(archivo.name).suffix
|
||||
nombre_archivo = f'{pk}{extension}'
|
||||
|
||||
# guardar el archivo en la carpeta
|
||||
fs = FileSystemStorage(location = config('PHOTOS_UPLOADS','/tmp'))
|
||||
# guardar el archivo en la carpeta
|
||||
fs = FileSystemStorage(location = config('PHOTOS_UPLOADS','/tmp'))
|
||||
|
||||
# Sobrescribir el archivo si ya existe
|
||||
if fs.exists(nombre_archivo):
|
||||
fs.delete(nombre_archivo)
|
||||
# Sobrescribir el archivo si ya existe
|
||||
if fs.exists(nombre_archivo):
|
||||
fs.delete(nombre_archivo)
|
||||
|
||||
fs.save(nombre_archivo, archivo)
|
||||
fs.save(nombre_archivo, archivo)
|
||||
|
||||
# proceder con guardar registro
|
||||
return super().partial_update(request, pk)
|
||||
|
|
|
@ -6,9 +6,10 @@ from rest_framework import viewsets
|
|||
from rest_framework.response import Response
|
||||
from rest_framework.decorators import action
|
||||
|
||||
from .. import models, schemas, serializers
|
||||
from api import models, schemas, serializers
|
||||
from logger.views import save_log_usuario
|
||||
|
||||
import json
|
||||
import datetime
|
||||
import logging
|
||||
|
||||
class UsuarioViewSet(viewsets.ModelViewSet):
|
||||
|
@ -22,13 +23,18 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
|||
|
||||
def create(self, request):
|
||||
try:
|
||||
login = self.request.jwt_info['login']
|
||||
usuario_session = models.Usuario.objects.filter(login=login)
|
||||
|
||||
with transaction.atomic():
|
||||
input = json.loads(request.body)
|
||||
|
||||
persona = models.Persona.objects.filter(rut = input['rut']).first()
|
||||
id_tipo_tratamiento = input.get('id_tipo_tratamiento',None)
|
||||
if not id_tipo_tratamiento:
|
||||
id_tipo_tratamiento = None
|
||||
|
||||
tipo_tratamiento = None
|
||||
if id_tipo_tratamiento:
|
||||
tipo_tratamiento = models.TipoTratamientoPersona.objects.filter(id_tipo_tratamiento = id_tipo_tratamiento).first()
|
||||
|
||||
if not persona:
|
||||
persona = models.Persona(
|
||||
|
@ -38,7 +44,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
|||
apellido_a = input.get('apellido_a',None),
|
||||
apellido_b = input.get('apellido_b',None),
|
||||
email = input.get('email',None),
|
||||
id_tipo_tratamiento = id_tipo_tratamiento
|
||||
id_tipo_tratamiento = tipo_tratamiento
|
||||
)
|
||||
persona.save()
|
||||
else:
|
||||
|
@ -46,7 +52,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
|||
persona.apellido_a = input.get('apellido_a',None)
|
||||
persona.apellido_b = input.get('apellido_b',None)
|
||||
persona.email = input.get('email',None)
|
||||
persona.id_tipo_tratamiento = id_tipo_tratamiento
|
||||
persona.id_tipo_tratamiento = tipo_tratamiento
|
||||
persona.save()
|
||||
|
||||
rol = models.Rol.objects.filter(id_rol=input.get('id_rol',None)).first()
|
||||
|
@ -61,6 +67,8 @@ 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'])
|
||||
|
@ -86,10 +94,14 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
|||
print(e)
|
||||
return HttpResponse(str(e), status = 500)
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
|
||||
def partial_update(self, request, *args, **kwargs):
|
||||
input = json.loads(request.body)
|
||||
try:
|
||||
pk = input['rut']
|
||||
login = self.request.jwt_info['login']
|
||||
usuario_session = models.Usuario.objects.filter(login=login).first()
|
||||
|
||||
with transaction.atomic():
|
||||
|
||||
# validaciones se realiza a nivel del model
|
||||
|
@ -107,6 +119,8 @@ 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)
|
||||
|
||||
return Response({
|
||||
'rut': persona.rut,
|
||||
'dv': persona.dv,
|
||||
|
@ -127,6 +141,7 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
|||
logging.error(e)
|
||||
return HttpResponse(str(e), status = 500)
|
||||
|
||||
|
||||
@action(detail=False, methods=['post'])
|
||||
def permisos(self, request):
|
||||
input = {}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class LoggerConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'logger'
|
|
@ -0,0 +1,17 @@
|
|||
# from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
# ref: https://docs.mongoengine.org/tutorial.html
|
||||
|
||||
from mongoengine import Document, StringField, DateTimeField
|
||||
|
||||
class LogConsultaDispositivo(Document):
|
||||
id_dispositivo = StringField(required=True)
|
||||
accion_url = StringField(required=True)
|
||||
fecha_hora = DateTimeField(required=True)
|
||||
|
||||
class LogTablaUsuario(Document):
|
||||
accion_tabla = StringField(required=True)
|
||||
rut_usuario_tabla = StringField(required=True)
|
||||
rut_usuario_ejecutor = StringField(required=True)
|
||||
fecha_hora = DateTimeField(required=True)
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
|
@ -0,0 +1,48 @@
|
|||
# from django.shortcuts import render
|
||||
from mongoengine import connect
|
||||
from decouple import config
|
||||
from logger.models import LogConsultaDispositivo, LogTablaUsuario
|
||||
import datetime
|
||||
|
||||
dbname = config('DB_MONGO_NAME', 'nombre_basedatos')
|
||||
dbhost = config('DB_MONGO_HOST', 'localhost')
|
||||
dbport = int(config('DB_MONGO_PORT', '27017'))
|
||||
dbuser = config('DB_MONGO_USER', 'usuario')
|
||||
dbpass = config('DB_MONGO_PASS', 'contrasena')
|
||||
|
||||
connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin')
|
||||
|
||||
# Create your views here.
|
||||
def save_log_dispositivo(id_dispositivo, accion_url):
|
||||
try:
|
||||
# connect(db=dbname, host=dbhost, port=dbport, username=dbuser, password=dbpass, authentication_source='admin')
|
||||
nuevo_registro = LogConsultaDispositivo(
|
||||
id_dispositivo = id_dispositivo,
|
||||
accion_url = accion_url,
|
||||
fecha_hora = datetime.datetime.now()
|
||||
)
|
||||
nuevo_registro.save()
|
||||
return True
|
||||
except Exception as err:
|
||||
print(err, flush=True)
|
||||
return False
|
||||
|
||||
|
||||
def save_log_usuario(accion_tabla, rut_tabla, rut_usuario_ejecutor):
|
||||
try:
|
||||
print(rut_tabla, flush=True)
|
||||
print(rut_usuario_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),
|
||||
fecha_hora = datetime.datetime.now()
|
||||
)
|
||||
nuevo_registro.save()
|
||||
return True
|
||||
except Exception as err:
|
||||
print(err, flush=True)
|
||||
return False
|
||||
|
|
@ -46,6 +46,7 @@ INSTALLED_APPS = [
|
|||
'corsheaders',
|
||||
'django_filters',
|
||||
'api',
|
||||
'logger',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
|
|
@ -8,6 +8,7 @@ python-dotenv
|
|||
python-decouple
|
||||
PyJWT
|
||||
pymongo
|
||||
mongoengine
|
||||
Pillow
|
||||
openpyxl
|
||||
google
|
||||
|
|
Loading…
Reference in New Issue