enviar Cancelacion Timbre

This commit is contained in:
fjrodriguez
2023-04-04 12:43:50 -06:00
parent 763d4a48d5
commit 0fba7e8358
4 changed files with 65 additions and 28 deletions

View File

@@ -3,7 +3,7 @@ import re
import datetime import datetime
import functools import functools
import urllib.parse import urllib.parse
import traceback
from asgiref.sync import sync_to_async from asgiref.sync import sync_to_async
from django.conf import settings from django.conf import settings
from django.core.files.storage import FileSystemStorage 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 .custom_decorators import is_staff_access, http_basic_auth
from .models import Clientes,Timbres,saldoModel,ErroresTimbres from .models import Clientes,Timbres,saldoModel,ErroresTimbres
from Sistemas.models import BitacoraErrores
from .serailizers import ClienteSerializer from .serailizers import ClienteSerializer
from .forms import ClienteForm,EmailForm from .forms import ClienteForm,EmailForm
@@ -28,6 +29,7 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework import status from rest_framework import status
from Sistemas.permissions import ItsAdminToken from Sistemas.permissions import ItsAdminToken
#EXCEL #EXCEL
@@ -39,6 +41,8 @@ from django.core.mail import EmailMessage
from django.conf import settings from django.conf import settings
from io import BytesIO from io import BytesIO
def read_env_file(): def read_env_file():
try: try:
#env_file = os.listdir(settings.BASE_DIR) #env_file = os.listdir(settings.BASE_DIR)
@@ -226,7 +230,7 @@ def timbres_cliente(request, RFC):
else: else:
lista = Timbres.objects.filter(rfcc=RFC,modo='Normal') 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) year = request.GET.get('year',None)
if year is None or year=='': if year is None or year=='':
@@ -259,23 +263,21 @@ def timbres_cliente(request, RFC):
# fin = [int(i) for i in datepickerFin.split("/")] # fin = [int(i) for i in datepickerFin.split("/")]
inicio = [int(i) for i in datepicker.split("-")] inicio = [int(i) for i in datepicker.split("-")]
fin = [int(i) for i in datepickerFin.split("-")] fin = [int(i) for i in datepickerFin.split("-")]
#start = datetime.datetime(inicio[2],inicio[0],inicio[1]) #start = datetime.datetime(inicio[2],inicio[0],inicio[1])
start = datetime.datetime(inicio[0],inicio[1],inicio[2]) start = datetime.datetime(inicio[0],inicio[1],inicio[2])
start += datetime.timedelta(days=0) start += datetime.timedelta(days=0)
# end = datetime.datetime(fin[2],fin[0],fin[1]) # end = datetime.datetime(fin[2],fin[0],fin[1])
end = datetime.datetime(fin[0],fin[1],fin[2]) 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 mes='00' #Todos
if mes != '00': if mes != '00':
dat = datetime.datetime(int(year), int(mes),1) dat = datetime.datetime(int(year), int(mes),1)
if dat.month in(1,3,5,7,8,10,12): if dat.month in(1,3,5,7,8,10,12):
findate = dat+datetime.timedelta(days=30) findate = dat+datetime.timedelta(days=30)
@@ -285,13 +287,11 @@ def timbres_cliente(request, RFC):
findate = dat+datetime.timedelta(days=28) findate = dat+datetime.timedelta(days=28)
findate +=datetime.timedelta(days=1) findate +=datetime.timedelta(days=1)
lista = lista.filter(created_at__range=[dat,findate]) lista = lista.filter(created_at__range=[dat,findate])
else: else:
lista = lista.filter(created_at__year=int(year)) lista = lista.filter(created_at__year=int(year))
conteo = lista.count() conteo = lista.count()
lista =pageFunc(page,lista,50) lista =pageFunc(page,lista,50)
context ={ context ={
'lista':lista, 'lista':lista,
'conteo':conteo, 'conteo':conteo,
@@ -368,7 +368,7 @@ def Retrive_Cliente_Email(request):
@login_required @login_required
#@is_staff_access() #@is_staff_access()
def PACS_Retrive_RFCS(request): def PACS_Retrive_RFCS(request):
timbres = {} timbres = {}
status = 200 status = 200
if request.method == 'GET': if request.method == 'GET':
@@ -405,8 +405,34 @@ class check_RFC(APIView):
except Exception as E: except Exception as E:
return Response({'Error':f'check_RFC:{E} RFC:{rfc}','isError':True}) 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): class add_timbre2(APIView):
permission_classes = (IsAuthenticated,ItsAdminToken,) """Agrega los timbres que realiza CFDI """
permission_classes = [ IsAuthenticated,ItsAdminToken]
def get(self,request): def get(self,request):
uuid= request.GET.get('uuid', None) uuid= request.GET.get('uuid', None)
rfcc_encoded = request.GET.get('rfcc', None) rfcc_encoded = request.GET.get('rfcc', None)
@@ -416,10 +442,9 @@ class add_timbre2(APIView):
tipo=request.GET.get('tipo', None) tipo=request.GET.get('tipo', None)
rfcp_encoded=request.GET.get('rfcp', None) rfcp_encoded=request.GET.get('rfcp', None)
modo=request.GET.get('modo', None) modo=request.GET.get('modo', None)
rfcc = urllib.parse.unquote(rfcc_encoded) rfcc = urllib.parse.unquote(rfcc_encoded)
rfcp = urllib.parse.unquote(rfcp_encoded) rfcp = urllib.parse.unquote(rfcp_encoded)
obj={'uuid':uuid,'rfcc':rfcc,'fecha':fecha,'folio':folio, obj={'uuid':uuid,'rfcc':rfcc,'fecha':fecha,'folio':folio,
'serie':serie,'tipo':tipo,'rfcp':rfcp,'modo':modo 'serie':serie,'tipo':tipo,'rfcp':rfcp,'modo':modo
} }
@@ -433,42 +458,51 @@ class add_timbre2(APIView):
rfcc=rfcc, rfcc=rfcc,
folio=folio, folio=folio,
modo=modo modo=modo
) )
return Response({'Error':f'{e}'}) return Response({'Error':f'{e}'})
class saldo_funct2(APIView): class saldo_funct2(APIView):
permission_classes =(IsAuthenticated,ItsAdminToken,) """Agrega los timbres disponibles"""
permission_classes = [ IsAuthenticated,ItsAdminToken]
def get(self, request): def get(self, request):
timbres = request.GET.get('num',None) timbres = request.GET.get('num',None)
try: try:
Saldo = saldoModel.objects.first() Saldo = saldoModel.objects.first()
Saldo.saldo=timbres Saldo.saldo=timbres
Saldo.save() Saldo.save()
except: except Exception as e:
Saldo = saldoModel.objects.create(saldo=int(timbres)) Saldo = saldoModel.objects.create(saldo=int(timbres))
Saldo.save() Saldo.save()
content = {'data':Saldo.saldo} content = {'data':Saldo.saldo}
return Response(content) return Response(content)
class check_host(APIView): class check_host(APIView):
"""Check Host"""
permission_classes = (IsAuthenticated,ItsAdminToken,) permission_classes = (IsAuthenticated,ItsAdminToken,)
def post(self,request, format=None): def post(self,request, format=None):
data = request.data data = request.data
return Response(data) return Response(data)
#---------------------------CLASS BASED VIEWS #---------------------------CLASS BASED VIEWS
#-------------------------------------------- #--------------------------------------------
class ErroresTimbresListView(LoginRequiredMixin,ListView): class ErroresTimbresListView(UserPassesTestMixin, LoginRequiredMixin,ListView):
"""Muestra los error de la tabla errores de timbres"""
model = ErroresTimbres model = ErroresTimbres
paginate_by = 100 paginate_by = 100
template_name = 'Clientes/Errores_Timbres_list.html' 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): class ClientesUpdateView(UserPassesTestMixin,LoginRequiredMixin,UpdateView):
model= Clientes model= Clientes
form_class=ClienteForm form_class=ClienteForm
success_url='/' success_url='/'
template_name='Clientes/edit_cliente.html' 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') res = self.request.user.groups.filter(name= 'admin_soft')
if not res: if not res:
messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.') messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.')

View File

@@ -6,7 +6,7 @@ class HasAuthorizationHeader(BasePermission):
return 'Authorization' in request.headers return 'Authorization' in request.headers
class ItsAdminToken(BasePermission): class ItsAdminToken(BasePermission):
def has_permission(self,request,view): def has_permission(self,request,view):
return request.user.is_superuser return request.user.is_superuser
class ItsAdminGroup(BasePermission): class ItsAdminGroup(BasePermission):

View File

@@ -8,7 +8,7 @@ from django.views.generic.edit import CreateView
from rest_framework.authentication import TokenAuthentication from rest_framework.authentication import TokenAuthentication
from rest_framework.decorators import authentication_classes,api_view,permission_classes from rest_framework.decorators import authentication_classes,api_view,permission_classes
from rest_framework.exceptions import AuthenticationFailed from rest_framework.exceptions import AuthenticationFailed
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.response import Response from rest_framework.response import Response

View File

@@ -55,14 +55,17 @@
<li class="page-item disabled"> <li class="page-item disabled">
<span class="page-link" aria-hidden="true">&laquo;</span> <span class="page-link" aria-hidden="true">&laquo;</span>
</li> </li>
{% endif %} {% endif %}
{% for p in lista.paginator.page_range %} {% for p in lista.paginator.page_range %}
{% if lista.number == p %} {% if lista.number == p %}
<li class="page-item"><a class="page-link" style="color: red;" href="#">{{ p }}</a></li> <li class="page-item"><a class="page-link" style="color: red;" href="#">{{ p }}</a></li>
{% else %} {% else %}
<li class="page-item"><a class="page-link" href="?page={{ p }}{% for i,v in filters.items %}&{{i}}={{v}}{% endfor%}">{{ p }}</a></li> {% comment%}
{% endif %} <li class="page-item"><a class="page-link" href="?page={{ p }}{% for i,v in filters.items %}&{{i}}={{v}}{% endfor%}">{{ p }}</a></li>
{% endcomment%}
{% endif %}
{% endfor %} {% endfor %}
{% if lista.has_next %} {% if lista.has_next %}