first of segunda

This commit is contained in:
fjrodriguez
2022-12-19 10:23:52 -06:00
parent 09d7edddd6
commit de06b3ab8b
10 changed files with 408 additions and 131 deletions

View File

@@ -1,26 +1,29 @@
import os
import re
import datetime
import functools
from asgiref.sync import sync_to_async
from django.conf import settings
from django.core.files.storage import FileSystemStorage
from django.shortcuts import render,redirect
from django.contrib import messages
from django.http import HttpResponse
from django.http import JsonResponse
from django.http import HttpResponse,JsonResponse
from django.contrib.auth.decorators import login_required
from .custom_decorators import is_staff_access
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db.models import Q
from django.views.generic.edit import CreateView,UpdateView
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 .serailizers import ClienteSerializer
from .forms import ClienteForm,EmailForm
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db.models import Q
import datetime
from django.views.generic.edit import CreateView,UpdateView
from .forms import ClienteForm,EmailForm
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.mixins import UserPassesTestMixin
from asgiref.sync import sync_to_async
from django.shortcuts import get_object_or_404
from .serailizers import ClienteSerializer
#EXCEL
from openpyxl import Workbook
from openpyxl.styles import Alignment, Border, Font, PatternFill, Side
@@ -29,12 +32,6 @@ from openpyxl.styles import Alignment, Border, Font, PatternFill, Side
from django.core.mail import EmailMessage
from django.conf import settings
from io import BytesIO
import functools
from django.core.files.storage import FileSystemStorage
import os
from django.conf import settings
import re
def read_env_file():
try:
@@ -62,6 +59,7 @@ def read_env_file():
@sync_to_async(thread_sensitive=False)
@login_required
@is_staff_access()
def send_timbres_Email(request):
req = request.method
@@ -71,6 +69,7 @@ def send_timbres_Email(request):
messages.add_message(request, messages.ERROR, f'{form.errors}')
return redirect('index')
today = datetime.date.today()
year = today.year
RFC = request.GET.get('RFC', None) if req=='GET' else form.cleaned_data["RFC"]
@@ -98,9 +97,9 @@ def send_timbres_Email(request):
else:
findate = dat+datetime.timedelta(days=28)
findate +=datetime.timedelta(days=1)
print(f'dat{dat} findate:{findate}')
#print(f'dat{dat} findate:{findate}')
if mes is not None and RFC is not None:
objeto_a_trabajar = Timbres.objects.filter(rfcc=RFC, created_at__range=[dat,findate])
objeto_a_trabajar = Timbres.objects.filter(rfcc=RFC, created_at__range=[dat,findate])
else:
objeto_a_trabajar = Clientes.objects.all()
for i,ii in enumerate(objeto_a_trabajar):
@@ -163,6 +162,9 @@ def index(request):
#read_env_file()
clientes_list = Clientes.objects.all()
mes = request.GET.get('mes', None)
today = datetime.date.today()
if mes is None or mes =='None':
mes = today.month
page = request.GET.get('page', 1)
search = request.GET.get('search',None)
rfcc = request.GET.get('rfcc', None)
@@ -170,20 +172,19 @@ def index(request):
filters.pop('page', '')
filters.pop('datepicker','')
filters.pop('datepickerFin','')
filters.pop('mes','')
print('filters------',filters)
if rfcc:
clientes_list = Clientes.objects.filter(Q(RFC__icontains=search))
for i,ii in enumerate(clientes_list):
ii.timbres_X_MES(mes=mes)
clientes_list =pageFunc(page,clientes_list,20)
filters.pop('mes','')
context = {
'lista':clientes_list,
'mes':mes,
'filters':filters,
'emailForm':EmailForm(),
}
return render(request,'Clientes/index.html',context)
@@ -202,47 +203,83 @@ def pageFunc(page,qs,per_page):
@login_required
@is_staff_access()
def timbres_cliente(request, RFC):
if request.user.is_staff:
lista = Timbres.objects.filter(rfcc=RFC)
else:
lista = Timbres.objects.filter(rfcc=RFC,modo='Normal')
mes = request.GET.get('mes', None)
today= datetime.date.today()
year =today.year
if mes is None or mes =='None':
mes='00' #Todos
PAC= request.GET.get('PAC',None)
if PAC=='01':
lista = lista.filter(rfcp='EME000602QR9')
if PAC=='02':
lista = lista.exclude(rfcp='EME000602QR9')
# if PAC !="00" or PAC !="None":
# lista = lista.filter(rfcp=str(PAC))
# else:
# lista = Timbres.objects.filter(rfcc=str(RFC))
#print(f'{PAC} filter pro pac',lista.count(), lista)
if PAC is not None and PAC !='00':
lista = lista.filter(rfcp=PAC)
search = request.GET.get('search',None)
page = request.GET.get('page', 1)
datepicker = request.GET.get('datepicker', None)
datepickerFin = request.GET.get('datepickerFin', None)
tipo = request.GET.get('tipo',None)
filters = {key:value[0] for (key,value) in dict(request.GET).items() if value !=[""]}
filters.pop('page', '')
filters.pop('PAC', '')
if tipo:
lista = lista.filter(Q(tipo__icontains=search))
if datepicker and datepickerFin:
inicio = [int(i) for i in datepicker.split("/")]
fin = [int(i) for i in datepickerFin.split("/")]
#print('inicio',inicio,' fin',fin)
if 'PAC' not in filters:
filters['PAC']='00'
if 'mes' not in filters:
filters['mes']='00'
if tipo and search is not None:
lista = lista.filter(Q(tipo__icontains=search))
if datepicker and datepickerFin:
# inicio = [int(i) for i in datepicker.split("/")]
# fin = [int(i) for i in datepickerFin.split("/")]
inicio = [int(i) for i in datepicker.split("-")]
fin = [int(i) for i in datepickerFin.split("-")]
#print('inicio',inicio,' fin',fin)
#start = datetime.datetime(inicio[2],inicio[0],inicio[1])
start = datetime.datetime(inicio[0],inicio[1],inicio[2])
start = datetime.datetime(inicio[2],inicio[0],inicio[1])
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.timedelta(days=1)
#datetime.date.today()
#print('FECHA',datetime.datetime.today(), 'HORA')
print('start',start, 'end',end)
#print('start',start, 'end',end)
lista = lista.filter(created_at__range=[start, end])
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)
elif dat.month in (4,6,9,11):
findate = dat+datetime.timedelta(days=29)
else:
findate = dat+datetime.timedelta(days=28)
findate +=datetime.timedelta(days=1)
lista = lista.filter(created_at__range=[dat,findate])
conteo = lista.count()
print('conteo',conteo)
lista =pageFunc(page,lista,50)
context ={
@@ -256,6 +293,7 @@ def timbres_cliente(request, RFC):
@sync_to_async(thread_sensitive=False)
@login_required
@is_staff_access()
def export_Excel(request):
RFC = request.GET.get('RFC', None)
@@ -284,8 +322,6 @@ def export_Excel(request):
objeto_a_trabajar = Clientes.objects.all()
for i,ii in enumerate(objeto_a_trabajar):
ii.timbres_X_MES(mes=mes )
wb = Workbook()
ws = wb.active
@@ -311,11 +347,23 @@ def export_Excel(request):
response = HttpResponse(content_type="application/ms-excel")
contenido = "attachment; filename = {0}".format(nombre_archivo)
response["Content-Disposition"] = contenido
wb.save( response)
wb.save( response)
return response
@http_basic_auth()
def Retrive_Cliente_Email(request):
if request.method == 'GET':
clientes = list(Clientes.objects.values('email').filter(RFC=request.GET.get('RFC',None)))
return JsonResponse({'data':clientes})
def PACS_Retrive_RFCS(request):
status = 302
timbres = {}
if request.method == 'GET':
timbres =list(Timbres.objects.values('rfcp').filter(rfcp__isnull=False))
return JsonResponse({'PACS':timbres},status=status)
#-----------------------------------API VIEWS
#--------------------------------------------
class check_RFC(APIView):
@@ -325,8 +373,7 @@ class check_RFC(APIView):
cliente, created = Clientes.objects.get_or_create(RFC=rfc)
if created:
cliente.Activo=True
cliente.save()
#cliente = get_object_or_404(Clientes, RFC=rfc)
cliente.save()
serializer = ClienteSerializer(cliente)
return Response(serializer.data)
@@ -341,8 +388,7 @@ class add_timbre2(APIView):
serie=request.GET.get('serie', None)
tipo=request.GET.get('tipo', None)
rfcp=request.GET.get('rfcp', None)
modo=request.GET.get('modo', None)
modo=request.GET.get('modo', None)
obj={
'uuid':uuid,
'rfcc':rfcc,
@@ -381,8 +427,7 @@ class saldo_funct2(APIView):
return Response(content)
class check_host(APIView):
permission_classes = (IsAuthenticated,)
permission_classes = (IsAuthenticated,)
def post(self,request, format=None):
data = request.data
print(data)
@@ -396,13 +441,11 @@ class ClientesUpdateView(UserPassesTestMixin,LoginRequiredMixin,UpdateView):
success_url='/'
template_name='Clientes/edit_cliente.html'
def test_func(self):
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 ClientesCreateView(UserPassesTestMixin,LoginRequiredMixin,CreateView):
model = Clientes