From 3e2374508efc91aae4ab9407057b7c340aac1de2 Mon Sep 17 00:00:00 2001 From: fjrodriguez Date: Thu, 8 Dec 2022 16:01:53 -0600 Subject: [PATCH] email 2 --- Admin/settings.py | 2 +- Clientes/forms.py | 18 ++ Clientes/views.py | 72 +++++--- Templates/Clientes/index.html | 304 ++++++++++++++++++++++++---------- 4 files changed, 291 insertions(+), 105 deletions(-) diff --git a/Admin/settings.py b/Admin/settings.py index efd90c3..c7c8e99 100644 --- a/Admin/settings.py +++ b/Admin/settings.py @@ -99,7 +99,7 @@ ACCOUNT_LOGOUT_REDIRECT_URL = '/accounts/login/' ACCOUNT_SIGNUP_REDIRECT_URL =LOGIN_REDIRECT_URL ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True -EMAIL_TIMEOUT = 5 +EMAIL_TIMEOUT = 10 #EMAIL_USE_TLS = True EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'secure.emailsrvr.com' diff --git a/Clientes/forms.py b/Clientes/forms.py index 5c61f53..22714ab 100644 --- a/Clientes/forms.py +++ b/Clientes/forms.py @@ -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( diff --git a/Clientes/views.py b/Clientes/views.py index 97ea71a..5e767b3 100644 --- a/Clientes/views.py +++ b/Clientes/views.py @@ -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, diff --git a/Templates/Clientes/index.html b/Templates/Clientes/index.html index 19d0d7d..8d90d69 100644 --- a/Templates/Clientes/index.html +++ b/Templates/Clientes/index.html @@ -1,6 +1,5 @@ - - {% extends "base.html" %} +{% load widget_tweaks %} {% block title %}Timbres{% endblock title %} @@ -10,93 +9,189 @@ Timbres disponibles Comercio Digital: {{saldo.saldo}} {% block content %} - - - + +
+ + - - - + + - - - - - - - {% for obj in lista %} - - - - + - + + + - - - {% endfor %} - -
- - Cliente RFC - Nombre -
- Totales Mes - -
+
+ + Cliente RFC + Nombre +
+ Totales Mes + +
- - -
Estadoactions - Excel Todos los clientes X Mes -
- {{obj.RFC}} - {{obj.Nombre}} - {{obj.conteo_mes}} - - {% if obj.Activo %} - Activo - {% else %} - Inactivo - {% endif %} - Estado + Excel Todos los clientes X Mes + - {% if request.user.is_staff %} - Ver Timbres - {% endif %} - - - - - Email Timbres - -
- + + + {% for obj in lista %} + + + {{obj.RFC}} + + {{obj.Nombre}} + + {{obj.conteo_mes}} + + + + {% if obj.Activo %} + Activo + {% else %} + Inactivo + {% endif %} + + + + {% if request.user.is_staff %} +
+ + +
+ {% endif %} + + + {% endfor %} + + + + + + {% endblock content %} {% block scripts %} @@ -137,6 +232,49 @@ Timbres disponibles Comercio Digital: {{saldo.saldo}} anc.href=url anc.click() }) + + enviar_btn.addEventListener('click',(e)=>{ + + if(id_form.checkValidity()){ + // + spinner_enviar.removeAttribute('style'); + /* + id_form.getElementsByTagName('*'); + for (var node of childNodes) { + node.disabled = true; + } + */ + } + }) + + id_adjunto.addEventListener('change',(e)=>{ + if(id_adjunto.files.length){ + let fsize; + + for (var i =0; i<= id_adjunto.files.length-1; i++){ + fsize = id_adjunto.files.item(i).size + + fsize +=fsize; + console.log(((fsize/1024)/1024)) + if( 25 <= ((fsize/1024)/1024) ){ + alert('Limite excedido de 25 MegaBytes adjuntos'); + id_adjunto.value='' + return false; + } + } + } + }) + cerrar1.addEventListener('click', (event)=>{ + id_form.reset() + }) + cerrar2.addEventListener('click', (event)=>{ + id_form.reset() + }) + + function addValues(RFC){ + RFC_add.value = RFC + console.log('RFC', RFC) + }