reset password

This commit is contained in:
fjrodriguez
2022-12-20 12:51:02 -06:00
parent e1588c797d
commit 79364700d2
8 changed files with 160 additions and 21 deletions

View File

@@ -13,8 +13,10 @@ BASE_DIR = Path(__file__).resolve().parent.parent
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret! # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.getenv("adminAS_KEY") SECRET_KEY = os.getenv("adminAS_KEY")
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False DEBUG = False
ALLOWED_HOSTS = ['*'] ALLOWED_HOSTS = ['*']
# Application definition # Application definition
INSTALLED_APPS = [ INSTALLED_APPS = [
@@ -96,7 +98,7 @@ ACCOUNT_SIGNUP_REDIRECT_URL =LOGIN_REDIRECT_URL
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True
EMAIL_TIMEOUT = 10 EMAIL_TIMEOUT = 10
#EMAIL_USE_TLS = True EMAIL_USE_TLS = False
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'secure.emailsrvr.com' EMAIL_HOST = 'secure.emailsrvr.com'
EMAIL_PORT = 465 EMAIL_PORT = 465

View File

@@ -1,3 +1,56 @@
from django.test import TestCase from django.test import TestCase
from django.urls import reverse
# Create your tests here. from django.contrib.auth.models import User
from .models import Clientes
class ClientesTests(TestCase):
@classmethod
def setUpTestData(cls):
test_user = User.objects.create_user(username='testuser1',password='Soluciones28@')
test_user.save()
cls.cliente = Clientes.objects.create(
RFC="SCT050708EB2",
Nombre="Aduanasoft",
Activo=True,
#fecha_baja="2022-12-20",
email="fjrodriguez28@gmail.com",
conteo_mes=12,
)
def test_redirect_if_not_logged_in(self):
response = self.client.get(reverse('index'))
self.assertRedirects(response, '/accounts/login/?next=/')
def test_cliente_content(self):
self.assertEqual(self.cliente.RFC,"SCT050708EB2")
self.assertEqual(self.cliente.Nombre,"Aduanasoft")
self.assertEqual(self.cliente.Activo,True)
#self.assertEqual(self.cliente.fecha_baja,"2022-12-20")
self.assertEqual(self.cliente.email,"fjrodriguez28@gmail.com")
self.assertEqual(self.cliente.conteo_mes,12)
#test for login user view and contains client with RFC SCT...
def test_cliente_login_cliente_listview(self):
login = self.client.login(username='testuser1',password='Soluciones28@')
response = self.client.get(reverse('index'))
self.assertEqual(str(response.context['user']), 'testuser1')
self.assertEqual(response.status_code,200)
self.assertContains(response, "SCT050708EB2")
self.assertTemplateUsed(response, "Clientes/index.html")
#---------------_APIs Views Tests
from rest_framework import status
from rest_framework.test import APITestCase, APIClient
class APITests(APITestCase):
@classmethod
def setUpTestData(cls):
pass
def test_api_check_RFC(self):
pass

View File

@@ -4,6 +4,7 @@ from .views import (
timbres_cliente, timbres_cliente,
ClientesUpdateView, ClientesUpdateView,
ClientesCreateView, ClientesCreateView,
ErroresTimbresListView,
export_Excel, export_Excel,
send_timbres_Email, send_timbres_Email,
Retrive_Cliente_Email, Retrive_Cliente_Email,
@@ -22,6 +23,7 @@ urlpatterns = [
path('timbres_cliente/<str:RFC>/', timbres_cliente, name='timbres_cliente'), path('timbres_cliente/<str:RFC>/', timbres_cliente, name='timbres_cliente'),
path('cliente/update/<int:pk>/',ClientesUpdateView.as_view(),name='update_cliente'), path('cliente/update/<int:pk>/',ClientesUpdateView.as_view(),name='update_cliente'),
path('cliente/add/', ClientesCreateView.as_view(), name='add_cliente'), path('cliente/add/', ClientesCreateView.as_view(), name='add_cliente'),
path('errores/timbres/list/', ErroresTimbresListView.as_view(), name='ErroresTimbresList'),
path('get_timbres_xls/', export_Excel, name='export_Excel'), path('get_timbres_xls/', export_Excel, name='export_Excel'),
path('send_timbres_cliente/',send_timbres_Email, name='send_timbres_Email'), path('send_timbres_cliente/',send_timbres_Email, name='send_timbres_Email'),
path('getActivoRFC/', check_RFC.as_view(), name='check_active_RFC'), path('getActivoRFC/', check_RFC.as_view(), name='check_active_RFC'),

View File

@@ -13,6 +13,7 @@ from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.db.models import Q from django.db.models import Q
from django.views.generic.edit import CreateView,UpdateView from django.views.generic.edit import CreateView,UpdateView
from django.views.generic.list import ListView
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from .custom_decorators import is_staff_access, http_basic_auth from .custom_decorators import is_staff_access, http_basic_auth
@@ -357,16 +358,22 @@ def PACS_Retrive_RFCS(request):
#-----------------------------------API VIEWS #-----------------------------------API VIEWS
#-------------------------------------------- #--------------------------------------------
from rest_framework import status
class check_RFC(APIView): class check_RFC(APIView):
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
def get(self,request): def get(self,request):
rfc = request.GET.get('RFC', None) rfc = request.GET.get('RFC', None)
cliente, created = Clientes.objects.get_or_create(RFC=rfc) try:
if created: cliente, created = Clientes.objects.get_or_create(RFC=rfc)
cliente.Activo=True serializer = ClienteSerializer(cliente)
cliente.save() if not serializer.is_valid:
serializer = ClienteSerializer(cliente) return Response(serializer.errors,status=400)
return Response(serializer.data) if created:
cliente.Activo=True
cliente.save()
return Response(serializer.data)
except Exception as E:
return Response({'Error':f'check_RFC:{E} RFC:{rfc}','isError':True})
class add_timbre2(APIView): class add_timbre2(APIView):
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
@@ -400,7 +407,7 @@ class add_timbre2(APIView):
folio=folio, folio=folio,
modo=modo modo=modo
) )
return Response({'fok':f'{e}'}) return Response({'Error':f'{e}'})
class saldo_funct2(APIView): class saldo_funct2(APIView):
permission_classes =(IsAuthenticated,) permission_classes =(IsAuthenticated,)
@@ -425,6 +432,12 @@ class check_host(APIView):
#---------------------------CLASS BASED VIEWS #---------------------------CLASS BASED VIEWS
#-------------------------------------------- #--------------------------------------------
class ErroresTimbresListView(LoginRequiredMixin,ListView):
model = ErroresTimbres
paginate_by = 100
template_name = 'Clientes/Errores_Timbres_list.html'
class ClientesUpdateView(UserPassesTestMixin,LoginRequiredMixin,UpdateView): class ClientesUpdateView(UserPassesTestMixin,LoginRequiredMixin,UpdateView):
model= Clientes model= Clientes
form_class=ClienteForm form_class=ClienteForm

View File

@@ -0,0 +1,69 @@
{% extends "base.html" %}
{% block content %}
<div class="table-responsive-sm">
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">UUID</th>
<th scope="col">Error</th>
<th scope="col">RCF</th>
<th scope="col">Folio</th>
</tr>
</thead>
<tbody>
{% for errTimbre in object_list %}
<tr class="{% if errTimbre.modo|lower == 'prueba' %}table-danger{% endif %}">
<th scope="row">{{errTimbre.uuid}}</th>
<td>{{errTimbre.description}}</td>
<td>{{errTimbre.rfcc}}</td>
<td>{{errTimbre.folio}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% if page_obj.has_other_pages %}
<nav>
<ul class="pagination justify-content-center">
{% if page_obj.has_previous %}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.previous_page_number }}{% for i,v in filters.items %}&{{i}}={{v}}{% endfor%}" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
{% else %}
<li class="page-item disabled">
<span class="page-link" aria-hidden="true">&laquo;</span>
</li>
{% endif %}
{% for p in page_obj.paginator.page_range %}
{% if page_obj.number == p %}
<li class="page-item"><a class="page-link" style="color: red;" href="#">{{ p }}</a></li>
{% else %}
<li class="page-item"><a class="page-link" href="?page={{ p }}{% for i,v in filters.items %}&{{i}}={{v}}{% endfor%}">{{ p }}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ page_obj.next_page_number }}{% for i,v in filters.items %}&{{i}}={{v}}{% endfor%}" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
{% else %}
<li class="page-item disabled">
<span class="page-link" aria-hidden="true">&raquo;</span>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
{% endblock content %}

View File

@@ -43,7 +43,9 @@
</div> </div>
</form> </form>
</div> </div>
<div class="row">
<p>No recuerdas tu contrasena? <a href="/accounts/password/reset/">Reset password</a></p>
</div>
{% comment %} {% comment %}
<div class="row"> <div class="row">
<p>Don't have an account? <a href="{{ signup_url }}">Register Here</a></p> <p>Don't have an account? <a href="{{ signup_url }}">Register Here</a></p>

View File

@@ -37,4 +37,3 @@
</ul> </ul>
</nav> </nav>
{% endif %} {% endif %}
</div>

View File

@@ -60,15 +60,14 @@
<button type="submit" class="dropdown-item">Cerrar sesión</button> <button type="submit" class="dropdown-item">Cerrar sesión</button>
</form> </form>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Another action</a> {% if request.user.is_superuser %}
<div class="dropdown-divider"></div> <a class="dropdown-item" href="{% url 'ErroresTimbresList' %}">Lista Errores</a>
<a class="dropdown-item" href="#">Something else here</a> <div class="dropdown-divider"></div>
{% endif %}
<a class="dropdown-item" href="#">Something else here</a>
</div> </div>
</li> </li>
</div> </div>
</nav> </nav>