diff --git a/Clientes/views.py b/Clientes/views.py index 306604f..ca3258e 100644 --- a/Clientes/views.py +++ b/Clientes/views.py @@ -3,7 +3,7 @@ import re import datetime import functools import urllib.parse - +import traceback from asgiref.sync import sync_to_async from django.conf import settings from django.core.files.storage import FileSystemStorage @@ -19,6 +19,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from .custom_decorators import is_staff_access, http_basic_auth from .models import Clientes,Timbres,saldoModel,ErroresTimbres +from Sistemas.models import BitacoraErrores from .serailizers import ClienteSerializer from .forms import ClienteForm,EmailForm @@ -28,6 +29,7 @@ from rest_framework.permissions import IsAuthenticated from rest_framework import status + from Sistemas.permissions import ItsAdminToken #EXCEL @@ -39,6 +41,8 @@ from django.core.mail import EmailMessage from django.conf import settings from io import BytesIO + + def read_env_file(): try: #env_file = os.listdir(settings.BASE_DIR) @@ -226,7 +230,7 @@ def timbres_cliente(request, RFC): else: lista = Timbres.objects.filter(rfcc=RFC,modo='Normal') - mes = request.GET.get('mes', None) + mes = request.GET.get('mes', None) year = request.GET.get('year',None) if year is None or year=='': @@ -259,23 +263,21 @@ def timbres_cliente(request, RFC): # fin = [int(i) for i in datepickerFin.split("/")] inicio = [int(i) for i in datepicker.split("-")] fin = [int(i) for i in datepickerFin.split("-")] - + #start = datetime.datetime(inicio[2],inicio[0],inicio[1]) start = datetime.datetime(inicio[0],inicio[1],inicio[2]) - + start += datetime.timedelta(days=0) # end = datetime.datetime(fin[2],fin[0],fin[1]) end = datetime.datetime(fin[0],fin[1],fin[2]) - - end += datetime.timedelta(days=1) - - lista = lista.filter(created_at__range=[start, end]) - if mes is None or mes =='None' or mes=='': + end += datetime.timedelta(days=1) + + lista = lista.filter(created_at__range=[start, end]) + if mes is None or mes =='None' or mes=='': mes='00' #Todos if mes != '00': - dat = datetime.datetime(int(year), int(mes),1) if dat.month in(1,3,5,7,8,10,12): findate = dat+datetime.timedelta(days=30) @@ -285,13 +287,11 @@ def timbres_cliente(request, RFC): findate = dat+datetime.timedelta(days=28) findate +=datetime.timedelta(days=1) lista = lista.filter(created_at__range=[dat,findate]) - else: + else: lista = lista.filter(created_at__year=int(year)) conteo = lista.count() - lista =pageFunc(page,lista,50) - context ={ 'lista':lista, 'conteo':conteo, @@ -368,7 +368,7 @@ def Retrive_Cliente_Email(request): @login_required #@is_staff_access() -def PACS_Retrive_RFCS(request): +def PACS_Retrive_RFCS(request): timbres = {} status = 200 if request.method == 'GET': @@ -405,8 +405,34 @@ class check_RFC(APIView): except Exception as E: return Response({'Error':f'check_RFC:{E} RFC:{rfc}','isError':True}) + +class CancelaTimbre(APIView): + """API CLASS for upload the CFDI Version into the server""" + permissions_classes=[IsAuthenticated,] + + def post(self,request,*args, **kwargs): + UUID = request.data.get('UUID') + try: + + timbre = Timbres.objects.get(uuid=UUID) + obj={'uuid':timbre.uuid,'rfcc':timbre.rfcc,'fecha':timbre.fecha,'folio':timbre.folio, + 'serie':timbre.serie,'tipo':'Cancela','rfcp':timbre.rfcp,'modo':'Normal' + } + cancelaTimbre = Timbres.objects.create(**obj) + + return Response({'success':True}) + except Exception as ex: + BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.CancelaTimbre') + return Response({'Error':f'{ex}','isError':True}) + + + +class add_timbre(APIView): + pass + class add_timbre2(APIView): - permission_classes = (IsAuthenticated,ItsAdminToken,) + """Agrega los timbres que realiza CFDI """ + permission_classes = [ IsAuthenticated,ItsAdminToken] def get(self,request): uuid= request.GET.get('uuid', None) rfcc_encoded = request.GET.get('rfcc', None) @@ -416,10 +442,9 @@ class add_timbre2(APIView): tipo=request.GET.get('tipo', None) rfcp_encoded=request.GET.get('rfcp', None) modo=request.GET.get('modo', None) - + rfcc = urllib.parse.unquote(rfcc_encoded) rfcp = urllib.parse.unquote(rfcp_encoded) - obj={'uuid':uuid,'rfcc':rfcc,'fecha':fecha,'folio':folio, 'serie':serie,'tipo':tipo,'rfcp':rfcp,'modo':modo } @@ -433,42 +458,51 @@ class add_timbre2(APIView): rfcc=rfcc, folio=folio, modo=modo - ) + ) return Response({'Error':f'{e}'}) class saldo_funct2(APIView): - permission_classes =(IsAuthenticated,ItsAdminToken,) + """Agrega los timbres disponibles""" + permission_classes = [ IsAuthenticated,ItsAdminToken] def get(self, request): timbres = request.GET.get('num',None) try: Saldo = saldoModel.objects.first() Saldo.saldo=timbres Saldo.save() - except: + except Exception as e: Saldo = saldoModel.objects.create(saldo=int(timbres)) Saldo.save() content = {'data':Saldo.saldo} return Response(content) class check_host(APIView): + """Check Host""" permission_classes = (IsAuthenticated,ItsAdminToken,) def post(self,request, format=None): data = request.data return Response(data) #---------------------------CLASS BASED VIEWS #-------------------------------------------- -class ErroresTimbresListView(LoginRequiredMixin,ListView): +class ErroresTimbresListView(UserPassesTestMixin, LoginRequiredMixin,ListView): + """Muestra los error de la tabla errores de timbres""" model = ErroresTimbres paginate_by = 100 template_name = 'Clientes/Errores_Timbres_list.html' - + def test_func(self): + """Verifica que el usuario logeado este dentro del grupo permitido""" + 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 ClientesUpdateView(UserPassesTestMixin,LoginRequiredMixin,UpdateView): model= Clientes form_class=ClienteForm success_url='/' template_name='Clientes/edit_cliente.html' - def test_func(self): + def test_func(self): + """Verifica que el usuario logeado este dentro del grupo permitido""" 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.') diff --git a/Sistemas/permissions.py b/Sistemas/permissions.py index 303d579..f50af26 100644 --- a/Sistemas/permissions.py +++ b/Sistemas/permissions.py @@ -6,7 +6,7 @@ class HasAuthorizationHeader(BasePermission): return 'Authorization' in request.headers class ItsAdminToken(BasePermission): - def has_permission(self,request,view): + def has_permission(self,request,view): return request.user.is_superuser class ItsAdminGroup(BasePermission): diff --git a/Sistemas/views.py b/Sistemas/views.py index b3e69a6..1a3d4ac 100644 --- a/Sistemas/views.py +++ b/Sistemas/views.py @@ -8,7 +8,7 @@ from django.views.generic.edit import CreateView from rest_framework.authentication import TokenAuthentication from rest_framework.decorators import authentication_classes,api_view,permission_classes from rest_framework.exceptions import AuthenticationFailed -from rest_framework.permissions import IsAuthenticated + from rest_framework.views import APIView from rest_framework.response import Response diff --git a/Templates/paginator.html b/Templates/paginator.html index a166073..8bb1347 100644 --- a/Templates/paginator.html +++ b/Templates/paginator.html @@ -55,14 +55,17 @@