This commit is contained in:
fjrodriguez
2022-12-08 16:01:53 -06:00
parent 356653ed86
commit 3e2374508e
4 changed files with 291 additions and 105 deletions

View File

@@ -2,6 +2,24 @@ from django import forms
from .models import Clientes
from datetime import datetime
class EmailForm(forms.Form):
RFC = forms.CharField(max_length=13, required=True)
mes = forms.CharField( max_length=4, required=True)
email = forms.EmailField(required=False)
subject = forms.CharField(max_length=100, required=False)
adjunto = forms.FileField(widget=forms.ClearableFileInput(
attrs={
'multiple': True,
'accept':'application/pdf,application/vnd.ms-excel',
}
), required=False)
message = forms.CharField(widget=forms.Textarea, required=True)
class Meta:
fields = '__all__'
class ClienteForm(forms.ModelForm):
fecha_baja = forms.DateField(

View File

@@ -4,11 +4,12 @@ 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 .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
@@ -26,17 +27,35 @@ import requests
import os
import re
from io import BytesIO
@login_required
def send_timbres_Email(request):
RFC = request.GET.get('RFC', None)
mes = request.GET.get('mes', None)
import functools
@sync_to_async(thread_sensitive=False)
def send_timbres_Email(request):
req = request.method
if req == "POST":
form = EmailForm(request.POST, request.FILES)
if not form.is_valid():
messages.add_message(request, messages.ERROR, f'{form.errors}')
return redirect('index')
today = datetime.date.today()
year = today.year
if mes is None or mes =='None':
RFC = request.GET.get('RFC', None) if req=='GET' else form.cleaned_data["RFC"]
mes = request.GET.get('mes', None) if req=='GET' else form.cleaned_data["mes"]
if mes is None or mes =='None':
mes = today.month
Cli = Clientes.objects.get(RFC=RFC)
subject = f'Timbres del Mes:{mes} RFC:{RFC}' if req=='GET' else ( form.cleaned_data["subject"] if 'subject' in form.cleaned_data.keys() else '' )
message = 'Envio de timbres por AS_Admin' if req=='GET' else ( form.cleaned_data["message"] if 'message' in form.cleaned_data.keys() else '' )
email = form.cleaned_data["email"] if 'email' in form.cleaned_data.keys() else ''
emails = [Cli.email] if req=='GET' else [ Cli.email, email ]
if len(emails) ==0 :
messages.add_message(request, messages.ERROR, f'La lista de correos esta vacia, favor de agregar un correo.')
return redirect('index')
dat =datetime.datetime(int(year), int(mes),1)
if dat.month in(1,3,5,7,8,10,12):
@@ -82,21 +101,35 @@ def send_timbres_Email(request):
wb.save(response)
files = BytesIO(response.content)
#print('files: ',response.content)
Cli = Clientes.objects.get(RFC=RFC)
subject = f'Timbres del Mes:{mes} RFC:{RFC}'
message = 'Envio de timbres por AS_Admin'
email = Cli.email
try:
mail = EmailMessage(subject,message,settings.EMAIL_HOST_USER,[email])
mail = EmailMessage(subject,message,settings.EMAIL_HOST_USER,emails)
mail.attach(filename='Timbres.xls',content=files.getbuffer(),mimetype='application/vnd.ms-excel')
adjunto = request.FILES.getlist('adjunto')
if req=='POST' and len(adjunto) >0:
total = functools.reduce(lambda a, b: a+b,[adj.size for adj in adjunto])
total += files.getbuffer().nbytes
if total > 2.5e+7:
messages.add_message(request, messages.ERROR, f'Se excedio el limite de 25 MegaBytes para los adjuntos')
return redirect('index')
try:
for adj in adjunto:
mail.attach(filename=adj.name,content=adj.read(),mimetype=adj.content_type)
except Exception as E:
messages.add_message(request, messages.ERROR, f'Error Adjuntos {E}')
return redirect('index')
mail.send()
messages.success(request, 'Email Enviado correctamente.')
except Exception as E:
messages.error(request, f'Email no se envio correctamente.{E}')
return redirect('index')
# def send_timbres_Email(request):
# RFC = request.GET.get('RFC', None)
# mes = request.GET.get('mes', None)
@@ -167,7 +200,8 @@ def index(request):
context = {
'lista':clientes_list,
'mes':mes,
'filters':filters
'filters':filters,
'emailForm':EmailForm(),
}
return render(request,'Clientes/index.html',context)
@@ -249,11 +283,7 @@ def timbres_cliente(request, RFC):
conteo = lista.count()
if conteo !=0 :
perPage = conteo // 2
else:
perPage = 1
lista =pageFunc(page,lista,perPage)
lista =pageFunc(page,lista,50)
context ={
'lista':lista,