first of segunda
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user