from django.shortcuts import render from django.http import HttpResponse from django.http import JsonResponse from django.contrib.auth.decorators import login_required from .models import Clientes,Timbres,saldoModel,ErroresTimbres from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.db.models import Q import datetime from django.views.generic.edit import UpdateView from .forms import ClienteForm from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import UserPassesTestMixin from asgiref.sync import sync_to_async #EXCEL from openpyxl import Workbook from openpyxl.styles import Alignment, Border, Font, PatternFill, Side @login_required def index(request): clientes_list = Clientes.objects.all() page = request.GET.get('page', 1) search = request.GET.get('search',None) rfcc = request.GET.get('rfcc', None) if rfcc: clientes_list = Clientes.objects.filter(Q(RFC__icontains=search)) paginator = Paginator(clientes_list, 5) try: lista = paginator.page(page) except PageNotAnInteger: lista = paginator.page(1) except EmptyPage: lista = paginator.page(paginator.num_pages) context = { 'lista':lista, } return render(request,'Clientes/index.html',context) def add_timbre(request): uuid= request.GET.get('uuid', None) rfcc= request.GET.get('rfcc', None) fecha=request.GET.get('fecha', None) folio=request.GET.get('folio', None) serie=request.GET.get('serie', None) tipo=request.GET.get('tipo', None) rfcp=request.GET.get('rfcp', None) modo=request.GET.get('modo', None) obj={ 'uuid':uuid, 'rfcc':rfcc, 'fecha':fecha, 'folio':folio, 'serie':serie, 'tipo':tipo, 'rfcp':rfcp, 'modo':modo } try: obj = Timbres.objects.create(**obj) return HttpResponse('ok') except Exception as e: obj = ErroresTimbres.objects.create( uuid=uuid, description=e, rfcc=rfcc, folio=folio ) return HttpResponse(e) def pageFunc(page,qs,per_page): paginator = Paginator(qs,per_page) try: qs = paginator.page(page) except PageNotAnInteger: qs = Paginator.page(1) except EmptyPage: qs = paginator.page(paginator.num_pages) return qs @login_required def timbres_cliente(request, RFC): lista = Timbres.objects.filter(rfcc=RFC) 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', '') 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) #inicio.sort(reverse=True) #fin.sort(reverse=True) 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.timedelta(days=1) #datetime.date.today() #print('FECHA',datetime.datetime.today(), 'HORA') #print('start',start, 'end',end) lista = lista.filter(created_at__range=[start, end]) conteo = lista.count() perPage = conteo // 2 if perPage == 0 : perPage = conteo lista =pageFunc(page,lista,perPage) context ={ 'lista':lista, 'conteo':conteo, 'RFC':RFC, 'filters':filters } return render(request, 'Clientes/timbres_cliente.html', context) def saldo_funct(request): timbres=request.GET.get('num',None) try: Saldo = saldoModel.objects.first() Saldo.saldo=timbres Saldo.save() except: Saldo = saldoModel.objects.create(saldo=int(timbres)) return JsonResponse({'data':Saldo.saldo}) class ClientesUpdateView(UserPassesTestMixin,LoginRequiredMixin,UpdateView): model= Clientes form_class=ClienteForm success_url='/' template_name='Clientes/edit_cliente.html' def test_func(self): #self.request.user.groups.all() return self.request.user.groups.filter(name= 'admin_soft') #@login_required @sync_to_async(thread_sensitive=False) def export_Excel(request): RFC = request.GET.get('RFC', '') today = datetime.date.today() month = today.month year = today.year objeto_a_trabajar = Timbres.objects.filter(rfcc=RFC, created_at__year=str(year),created_at__month=str(month)) wb = Workbook() ws = wb.active #contador = 1 ws['A1']='UUID' ws['B1']='RFC_Cliente' ws['C1']='Fecha' contador =2 for q in range(0,100000):#objeto_a_trabajar: column = str(contador) ws['A' + column] = q#.uuid ws['B'+ column] = q#.rfcc ws['C'+ column] = q#.fecha contador += 1 nombre_archivo = f"Timbres_{RFC}_{str(year)}_{str(month)}.xlsx" response = HttpResponse(content_type="application/ms-excel") contenido = "attachment; filename = {0}".format(nombre_archivo) response["Content-Disposition"] = contenido wb.save( response) return response