newfunctions server version CFDI checks and model Bitacora
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -135,3 +135,7 @@ GitHub.sublime-settings
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
.history
|
||||
|
||||
|
||||
# systems ignore
|
||||
downloadSystems/
|
||||
0
.vscode/settings.json
vendored
Normal file
0
.vscode/settings.json
vendored
Normal file
@@ -391,7 +391,7 @@ def PACS_Retrive_RFCS(request):
|
||||
#--------------------------------------------
|
||||
|
||||
class check_RFC(APIView):
|
||||
permission_classes = (ItsAdminToken,IsAuthenticated,)
|
||||
permission_classes = (IsAuthenticated,ItsAdminToken,)
|
||||
def get(self,request):
|
||||
rfc = request.GET.get('RFC', None)
|
||||
try:
|
||||
@@ -411,7 +411,7 @@ class check_RFC(APIView):
|
||||
return Response({'Error':f'check_RFC:{E} RFC:{rfc}','isError':True})
|
||||
|
||||
class add_timbre2(APIView):
|
||||
permission_classes = (IsAuthenticated,)
|
||||
permission_classes = (IsAuthenticated,ItsAdminToken,)
|
||||
def get(self,request):
|
||||
uuid= request.GET.get('uuid', None)
|
||||
rfcc= request.GET.get('rfcc', None)
|
||||
@@ -438,7 +438,7 @@ class add_timbre2(APIView):
|
||||
return Response({'Error':f'{e}'})
|
||||
|
||||
class saldo_funct2(APIView):
|
||||
permission_classes =(IsAuthenticated,)
|
||||
permission_classes =(IsAuthenticated,ItsAdminToken,)
|
||||
def get(self, request):
|
||||
timbres = request.GET.get('num',None)
|
||||
try:
|
||||
@@ -452,7 +452,7 @@ class saldo_funct2(APIView):
|
||||
return Response(content)
|
||||
|
||||
class check_host(APIView):
|
||||
permission_classes = (IsAuthenticated,)
|
||||
permission_classes = (IsAuthenticated,ItsAdminToken,)
|
||||
def post(self,request, format=None):
|
||||
data = request.data
|
||||
|
||||
|
||||
19
Sistemas/migrations/0009_sistema_version.py
Normal file
19
Sistemas/migrations/0009_sistema_version.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 4.1.3 on 2023-02-08 21:44
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('Sistemas', '0008_device_macaddress'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='sistema',
|
||||
name='version',
|
||||
field=models.CharField(default='23.13.0.0', max_length=10),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
18
Sistemas/migrations/0010_alter_sistema_version.py
Normal file
18
Sistemas/migrations/0010_alter_sistema_version.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.1.3 on 2023-02-08 21:45
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('Sistemas', '0009_sistema_version'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='sistema',
|
||||
name='version',
|
||||
field=models.CharField(max_length=25),
|
||||
),
|
||||
]
|
||||
23
Sistemas/migrations/0011_bitacoraerrores.py
Normal file
23
Sistemas/migrations/0011_bitacoraerrores.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 4.1.3 on 2023-02-09 15:07
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('Sistemas', '0010_alter_sistema_version'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='BitacoraErrores',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('level', models.PositiveBigIntegerField(choices=[(1, 'Critical'), (2, 'Error'), (3, 'Warning'), (4, 'Info'), (5, 'Debug')])),
|
||||
('message', models.TextField()),
|
||||
('timestamp', models.DateTimeField(auto_now_add=True)),
|
||||
('traceback', models.TextField(blank=True, null=True)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -7,12 +7,30 @@ from django.contrib.auth.models import BaseUserManager
|
||||
|
||||
import re
|
||||
|
||||
|
||||
class BitacoraErrores(models.Model):
|
||||
LEVEL_CHOICES = [
|
||||
(1,'Critical'),
|
||||
(2,'Error'),
|
||||
(3,'Warning'),
|
||||
(4,'Info'),
|
||||
(5,'Debug'),
|
||||
]
|
||||
level = models.PositiveBigIntegerField(choices=LEVEL_CHOICES)
|
||||
message = models.TextField()
|
||||
timestamp = models.DateTimeField(auto_now_add=True)
|
||||
traceback = models.TextField(null=True,blank=True)
|
||||
def __str__(self):
|
||||
return f"{self.get_level_display()}: {self.message}"
|
||||
|
||||
class Sistema(models.Model):
|
||||
nombre_sistema= models.CharField(max_length=100, blank=False,null=False,unique=True)
|
||||
version = models.CharField(max_length=25)
|
||||
# class Meta:
|
||||
# abstract=True
|
||||
def __str__(self):
|
||||
return self.nombre_sistema
|
||||
return f'{self.nombre_sistema}, Version{self.version}'
|
||||
|
||||
|
||||
class sistemas_por_cliente(models.Model):
|
||||
id_sistema= models.ForeignKey(Sistema, related_name='sistema_spc', on_delete=models.CASCADE)
|
||||
|
||||
@@ -7,10 +7,17 @@ from .views import (
|
||||
SistemasXCliente_DetailView,
|
||||
UsersConnectedList,
|
||||
|
||||
|
||||
|
||||
#DRF APIViews
|
||||
RegisterDeviceView,
|
||||
AuthenticateDeviceView,
|
||||
LogoutView,
|
||||
CheckVersionView,
|
||||
|
||||
#function
|
||||
download_version_FromServer,
|
||||
|
||||
)
|
||||
urlpatterns = [
|
||||
path('',SistemasXCliente_ListView.as_view(),name='lista_sistmas'),
|
||||
@@ -19,4 +26,6 @@ urlpatterns = [
|
||||
path('authenticatePC/',AuthenticateDeviceView.as_view(), name="authenticateDevice"),
|
||||
path('logout/', LogoutView.as_view(), name='logout_sistemas'),
|
||||
path('usuariosConectados/', UsersConnectedList.as_view(), name='lista_usuarios'),
|
||||
path('checkVersion/', CheckVersionView.as_view(), name='checkVersion'),
|
||||
path('download_version_FromServer/',download_version_FromServer, name='downloadVersionFromServer'),
|
||||
]
|
||||
@@ -1,4 +1,4 @@
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import render,redirect
|
||||
from django.contrib.auth import logout
|
||||
from django.views.generic.list import ListView
|
||||
from django.views.generic.detail import DetailView
|
||||
@@ -13,6 +13,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
||||
from .models import sistemas_por_cliente, DeviceHistory,Device
|
||||
from .serializers import DeviceSerializer
|
||||
from .permissions import HasAuthorizationHeader
|
||||
from .models import Sistema
|
||||
from django.utils import timezone
|
||||
import re
|
||||
|
||||
@@ -22,6 +23,26 @@ from datetime import timedelta
|
||||
|
||||
from django.contrib.sessions.models import Session
|
||||
|
||||
from django.http.response import HttpResponse
|
||||
import os
|
||||
import mimetypes
|
||||
|
||||
|
||||
def download_version_FromServer(request):
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
print('BASE_DIR',BASE_DIR)
|
||||
filename = 'CFDI.zip'
|
||||
filepath = f'{BASE_DIR }/downloadSystems/{filename}'
|
||||
#path = open(filepath, 'r')
|
||||
with open(filepath, 'rb') as path:
|
||||
|
||||
mime_type, _ = mimetypes.guess_type(filepath)
|
||||
print(mime_type)
|
||||
response = HttpResponse(path.read(),content_type=mime_type)
|
||||
response['Content-Disposition']= f'attachment; filename={filename}'
|
||||
|
||||
return response#redirect('index')
|
||||
|
||||
def get_logged_in_users():
|
||||
sessions = Session.objects.filter(expire_date__gte=timezone.now())
|
||||
|
||||
@@ -89,9 +110,9 @@ class RegisterDeviceView(APIView):
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
else:
|
||||
return Response({'Error':f'{serializer.errors}','isError':True}, status=status.HTTP_200_OK)
|
||||
except Exception as e:
|
||||
except Exception as ex:
|
||||
return Response(
|
||||
{'Error':f'{e}','isError':True}
|
||||
{'Error':f'{ex}','isError':True}
|
||||
, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
@@ -115,9 +136,9 @@ class AuthenticateDeviceView(APIView):
|
||||
return Response(
|
||||
{'Error':f'{device_data.serializer.errors}','isError':True}
|
||||
, status=status.HTTP_200_OK)
|
||||
except Exception as e:
|
||||
except Exception as ex:
|
||||
return Response(
|
||||
{'Error':f'{e}','isError':True}
|
||||
{'Error':f'{ex}','isError':True}
|
||||
, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
@@ -128,3 +149,36 @@ class LogoutView(APIView):
|
||||
def post(self, request):
|
||||
logout(request)
|
||||
return Response({'OK':'Dispositivo desautenticado'},status=200)
|
||||
|
||||
|
||||
class CheckVersionView(APIView):
|
||||
authentication_classes = (TokenAuthentication,)
|
||||
permission_classes = (IsAuthenticated,HasAuthorizationHeader,)
|
||||
def post(self, request,*args, **kwargs):
|
||||
try:
|
||||
version = request.data.get('version')
|
||||
|
||||
client_version = [int(x) for x in version.split(".")]
|
||||
print('client_version: ',client_version)
|
||||
try:
|
||||
ver = Sistema.objects.get(nombre_sistema="CFDI")
|
||||
server_version = [int(x) for x in ver.version.split(".")]
|
||||
except Exception as e:
|
||||
|
||||
return Response({'success':True, 'actualizar':False})
|
||||
|
||||
|
||||
print('server_version', server_version)
|
||||
result=False
|
||||
#for i in range(len(client_version)):
|
||||
for cont, ele in enumerate(client_version):
|
||||
if client_version[cont] < server_version[cont]:
|
||||
print('server verion is grater')
|
||||
result = True
|
||||
break
|
||||
else:
|
||||
result= False
|
||||
print('equal')
|
||||
return Response({'success':True, 'actualizar':result})
|
||||
except Exception as ex:
|
||||
return Response({'Error':f'{ex}','isError':True})
|
||||
|
||||
Reference in New Issue
Block a user