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 %} -
| - - Cliente RFC - | -Nombre | -
-
- Totales Mes
-
-
+ | + + Cliente RFC + | +Nombre | +
+
+ Totales Mes
+
+
-
-
- |
- Estado | -actions | -- 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 - - |