diff --git a/Clientes/models.py b/Clientes/models.py index d54d68b..4fc9b87 100644 --- a/Clientes/models.py +++ b/Clientes/models.py @@ -71,7 +71,7 @@ class Clientes(models.Model): year = today.year return Timbres.objects.filter(rfcc=self.RFC, created_at__year=str(year),created_at__month=str(month)).count() class Meta: - ordering = ('-Activo','-conteo_mes','RFC') + ordering = ('-Activo','-conteo_mes','RFC',) def __str__(self): return self.Nombre diff --git a/Clientes/views.py b/Clientes/views.py index e890937..116d837 100644 --- a/Clientes/views.py +++ b/Clientes/views.py @@ -407,7 +407,7 @@ class check_RFC(APIView): class add_timbre2(APIView): permission_classes = (IsAuthenticated,ItsAdminToken,) - def get(self,request): + def get(self,request): uuid= request.GET.get('uuid', None) rfcc= request.GET.get('rfcc', None) fecha=request.GET.get('fecha', None) @@ -449,10 +449,8 @@ class saldo_funct2(APIView): class check_host(APIView): permission_classes = (IsAuthenticated,ItsAdminToken,) def post(self,request, format=None): - data = request.data - + data = request.data return Response(data) - #---------------------------CLASS BASED VIEWS #-------------------------------------------- class ErroresTimbresListView(LoginRequiredMixin,ListView): diff --git a/Sistemas/models.py b/Sistemas/models.py index b64f610..1cdc696 100644 --- a/Sistemas/models.py +++ b/Sistemas/models.py @@ -7,7 +7,6 @@ from django.contrib.auth.models import BaseUserManager import re - class BitacoraErrores(models.Model): LEVEL_CHOICES = [ (1,'Critical'), @@ -21,6 +20,8 @@ class BitacoraErrores(models.Model): timestamp = models.DateTimeField(auto_now_add=True) traceback = models.TextField(null=True,blank=True) view = models.CharField(max_length=150,null=True,blank=True) + class Meta: + ordering= ('-timestamp',) def __str__(self): return f"{self.get_level_display()}: {self.message}" diff --git a/Sistemas/serializers.py b/Sistemas/serializers.py index 56762a3..3b75ee5 100644 --- a/Sistemas/serializers.py +++ b/Sistemas/serializers.py @@ -47,7 +47,7 @@ class DeviceSerializer(serializers.ModelSerializer): # A device with the same macAddress already exists for the given sistema and client # Get the number of existing devices and add 1 to create a new suffix suffix = existing_devices.count() + 1 - mac_address += f'_{suffix}' + mac_address += f'_{suffix}' validated_data['macAddress']= mac_address return super().create(validated_data) diff --git a/Sistemas/urls.py b/Sistemas/urls.py index bff8bb8..777a246 100644 --- a/Sistemas/urls.py +++ b/Sistemas/urls.py @@ -4,18 +4,21 @@ from .views import ( #CVB SistemasXCliente_ListView, + SistemasBitacora_ListView, SistemasXCliente_DetailView, UsersConnectedList, SistemasxCliente_CreateView, #DRF APIViews RegisterDeviceView, + GetDeviceToken, AuthenticateDeviceView, LogoutView, CheckVersionView, UploadZipVersionView, Sistema_CreateView, + #function download_version_FromServer, uploadZipViewHTML, @@ -23,10 +26,12 @@ from .views import ( ) urlpatterns = [ path('',SistemasXCliente_ListView.as_view(),name='lista_sistmas'), - path('detail//',SistemasXCliente_DetailView.as_view(),name='detail_sistemas'), + path('bitacora/',SistemasBitacora_ListView.as_view(),name='lista_sistmas_bitacora'), + path('detail//',SistemasXCliente_DetailView.as_view(),name='detail_sistemas'), path('create_sistemas_form/',Sistema_CreateView.as_view(), name='create_sistemas_form'), path('crearSistema/',SistemasxCliente_CreateView.as_view(), name='create_sistemas'), path('registerPC/',RegisterDeviceView.as_view(),name='register_PC'), + path('getTokenPC/',GetDeviceToken.as_view(),name='getToken_PC'), path('authenticatePC/',AuthenticateDeviceView.as_view(), name="authenticateDevice"), path('logout/', LogoutView.as_view(), name='logout_sistemas'), path('usuariosConectados/', UsersConnectedList.as_view(), name='lista_usuarios'), diff --git a/Sistemas/views.py b/Sistemas/views.py index 82d9919..ec9beb5 100644 --- a/Sistemas/views.py +++ b/Sistemas/views.py @@ -102,10 +102,15 @@ class UploadZipVersionView(APIView): def download_version_FromServer(request): """""" try: + sys= request.GET.get('sys') + BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - print('BASE_DIR',BASE_DIR) - filename = 'CFDI.zip' + if sys: + filename=f'{sys}.zip' + else: + 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) @@ -159,6 +164,18 @@ class SistemasXCliente_ListView(UserPassesTestMixin,LoginRequiredMixin, ListView messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.') return res +class SistemasBitacora_ListView(UserPassesTestMixin,LoginRequiredMixin, ListView): + + model = BitacoraErrores + paginate_by = 5 + template_name = 'Sistemas/Xclientes/listaBitacora.html' + + def test_func(self): + res = self.request.user.groups.filter(name= 'admin_soft') + if not res: + messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.') + return res + class SistemasXCliente_DetailView(UserPassesTestMixin,LoginRequiredMixin, DetailView): model = sistemas_por_cliente template_name= 'Sistemas/Xclientes/detail.html' @@ -167,7 +184,7 @@ class SistemasXCliente_DetailView(UserPassesTestMixin,LoginRequiredMixin, Detail if not res: messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.') return res - + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) sistemas_por_cliente = self.object @@ -177,7 +194,6 @@ class SistemasXCliente_DetailView(UserPassesTestMixin,LoginRequiredMixin, Detail context['devices'] = Device.objects.filter(sistema=sistema, client=cliente.id) return context - class SistemasxCliente_CreateView(CreateView): model = sistemas_por_cliente fields = ['id_sistema', 'cliente', 'num_licencias'] @@ -199,11 +215,37 @@ class Sistema_CreateView(CreateView): return JsonResponse(data) ''' -========================= API Views + ========================= API Views ''' - - +class GetDeviceToken(APIView): + authentication_classes= [TokenAuthentication] + permissions_classes=[IsAuthenticated, HasAuthorizationHeader] + def post(self,request): + try: + data = request.data + device = Device.objects.filter( + client__RFC=data.get('client'), + device_name=data.get('device_name'), + ip_address=data.get('ip_address'), + sistema=data.get('sistema'), + macAddress=data.get('macAddress') + ).first() + if device is not None: + token = {"token":str(device.token)} + else: + token = {"token":""} + return Response(token) + except Exception as ex: + BitacoraErrores.objects.create( + level=2, + message=str(ex), + traceback=traceback.format_exc(), + view='Sistemas.GetDeviceToken' + ) + return Response( + {'Error':f'{ex}','isError':True} + , status=status.HTTP_200_OK) class RegisterDeviceView(APIView): permissions_classes = (permissions.AllowAny,) @@ -217,13 +259,12 @@ class RegisterDeviceView(APIView): else: return Response({'Error':f'{serializer.errors}','isError':True}, status=status.HTTP_200_OK) except Exception as ex: - BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.RegisterDeviceView') + BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), + view='Sistemas.RegisterDeviceView') return Response( {'Error':f'{ex}','isError':True} , status=status.HTTP_200_OK) - - class AuthenticateDeviceView(APIView): authentication_classes= [TokenAuthentication] permissions_classes=[IsAuthenticated, HasAuthorizationHeader] @@ -248,8 +289,8 @@ class AuthenticateDeviceView(APIView): BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.AuthenticateDeviceView') return Response( {'Error':f'{ex}','isError':True} - , status=status.HTTP_200_OK) - + , status=status.HTTP_200_OK + ) class LogoutView(APIView): authentication_classes = (TokenAuthentication,) diff --git a/Templates/Sistemas/Xclientes/listaBitacora.html b/Templates/Sistemas/Xclientes/listaBitacora.html new file mode 100644 index 0000000..ef8624b --- /dev/null +++ b/Templates/Sistemas/Xclientes/listaBitacora.html @@ -0,0 +1,40 @@ +{% extends "base.html" %} + + +{% block title %} + Sistemas Errores Bitacora Lista +{% endblock title %} + + + +{% block content %} + + + + + + + + + + + + + {% for row in object_list %} + + + + + + + {% comment %} + + + {% endcomment %} + + {% endfor %} + +
ErrorVista------
{{row.message}}{{row.view}}----Detalles
+ +{% endblock content %} + \ No newline at end of file diff --git a/Templates/sidebar.html b/Templates/sidebar.html index 81bf89a..8f80a76 100644 --- a/Templates/sidebar.html +++ b/Templates/sidebar.html @@ -65,7 +65,9 @@ {% if request.user.is_superuser %} - Lista Errores + Lista Errores Timbres + + Lista Errores Bitacora {% endif %}