year added to index view

This commit is contained in:
fjrodriguez
2023-01-05 16:09:22 -06:00
parent 64555bc92a
commit f437232861
8 changed files with 106 additions and 57 deletions

View File

@@ -102,7 +102,7 @@ ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE = True
EMAIL_TIMEOUT = 10 EMAIL_TIMEOUT = 10
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_SUBJECT_PREFIX = 'AS Timbres' EMAIL_SUBJECT_PREFIX = 'AS Timbres'
if DEBUG: if DEBUG :
EMAIL_USE_TLS = True EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587 EMAIL_PORT = 587
@@ -121,6 +121,8 @@ else:
# Database # Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases # https://docs.djangoproject.com/en/4.1/ref/settings/#databases
if DEBUG: if DEBUG:
DATABASES = { DATABASES = {
'default': { 'default': {

View File

@@ -9,21 +9,36 @@ from django.http import HttpResponse
from django.test import SimpleTestCase, override_settings from django.test import SimpleTestCase, override_settings
from rest_framework.authtoken.views import obtain_auth_token from rest_framework.authtoken.views import obtain_auth_token
def response_error_handler(request, exception=None): def response_error_handler(request, exception=None):
context={} context={}
return render(request, '403.html',context,status=403) return render(request, '403.html',context,status=403)
def response_error_handler_404(request,exception=None):
return render(request,'404.html',status=404)
def permission_denied_view(request): def permission_denied_view(request):
raise PermissionDenied raise PermissionDenied
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('accounts/', include('allauth.urls')), path('accounts/', include('allauth.urls')),
path('DRF_Token/', obtain_auth_token, name='DRF_Token'), path('DRF_Token/', obtain_auth_token, name='DRF_Token'),
path('', include('Clientes.urls')), path('', include('Clientes.urls')),
path('403/', permission_denied_view), path('403/', permission_denied_view),
] ]
handler403 = response_error_handler handler403 = response_error_handler
handler404 = response_error_handler_404
if settings.DEBUG: #DEV only if settings.DEBUG: #DEV only
urlpatterns += static(settings.STATIC_URL, document_root= settings.STATIC_ROOT) urlpatterns += static(settings.STATIC_URL, document_root= settings.STATIC_ROOT)
@@ -32,8 +47,9 @@ if settings.DEBUG: #DEV only
# ROOT_URLCONF must specify the module that contains handler403 = ... # ROOT_URLCONF must specify the module that contains handler403 = ...
@override_settings(ROOT_URLCONF=__name__) @override_settings(ROOT_URLCONF=__name__)
class CustomErrorHandlerTests(SimpleTestCase): class CustomErrorHandlerTests(SimpleTestCase):
def test_handler_renders_template_response(self): def test_handler_renders_template_response(self):
response = self.client.get('/403/') response = self.client.get('/403/')
# Make assertions on the response here. For example: # Make assertions on the response here. For example:
self.assertContains(response, 'Error handler content', status_code=403) self.assertContains(response, 'Error handler content', status_code=403)

View File

@@ -40,11 +40,13 @@ class Clientes(models.Model):
fecha_baja = models.DateField(blank=True,null=True) fecha_baja = models.DateField(blank=True,null=True)
email = models.EmailField(max_length=254, blank=True) email = models.EmailField(max_length=254, blank=True)
conteo_mes = models.IntegerField(blank=True,null=True,default=0) conteo_mes = models.IntegerField(blank=True,null=True,default=0)
def timbres_X_MES(self, mes=None): def timbres_X_MES(self, mes=None, year=None):
today = datetime.date.today() today = datetime.date.today()
year = today.year if year is None:
year = today.year
if mes==None: if mes==None:
mes = today.month mes = today.month
dat = datetime.datetime(int(year),int(mes),1) dat = datetime.datetime(int(year),int(mes),1)
if dat.month in (1,3,5,7,8,10,12):#31 if dat.month in (1,3,5,7,8,10,12):#31
findate = dat + datetime.timedelta(days=30) findate = dat + datetime.timedelta(days=30)

View File

@@ -10,6 +10,7 @@ from .views import (
Retrive_Cliente_Email, Retrive_Cliente_Email,
PACS_Retrive_RFCS, PACS_Retrive_RFCS,
#API DRF #API DRF
saldo_funct2, saldo_funct2,
add_timbre2, add_timbre2,
@@ -31,4 +32,6 @@ urlpatterns = [
path('check_host/',check_host.as_view(),name='check_host'), path('check_host/',check_host.as_view(),name='check_host'),
path('emails_cliente/',Retrive_Cliente_Email, name='Retrive_Cliente_Email'), path('emails_cliente/',Retrive_Cliente_Email, name='Retrive_Cliente_Email'),
path('pacs/list/',PACS_Retrive_RFCS,name='PACS_Retrive_RFCS'), path('pacs/list/',PACS_Retrive_RFCS,name='PACS_Retrive_RFCS'),
] ]

View File

@@ -164,6 +164,10 @@ def index(request):
clientes_list = Clientes.objects.all() clientes_list = Clientes.objects.all()
mes = request.GET.get('mes', None) mes = request.GET.get('mes', None)
today = datetime.date.today() today = datetime.date.today()
year = request.GET.get('year',None)
if year is None or year =='None':
year= today.year
if mes is None or mes =='None': if mes is None or mes =='None':
mes = today.month mes = today.month
page = request.GET.get('page', 1) page = request.GET.get('page', 1)
@@ -174,6 +178,7 @@ def index(request):
filters.pop('datepicker','') filters.pop('datepicker','')
filters.pop('datepickerFin','') filters.pop('datepickerFin','')
filters.pop('mes','') filters.pop('mes','')
filters.pop('year','')
print('filters------',filters) print('filters------',filters)
if rfcc and search: if rfcc and search:
clientes_list = Clientes.objects.filter(Q(RFC__icontains=search)) clientes_list = Clientes.objects.filter(Q(RFC__icontains=search))
@@ -184,7 +189,7 @@ def index(request):
while met: while met:
try: try:
c = next(met) c = next(met)
c.timbres_X_MES(mes=mes) c.timbres_X_MES(mes=mes,year=year)
except StopIteration: except StopIteration:
break break
@@ -193,6 +198,7 @@ def index(request):
context = { context = {
'lista':clientes_list, 'lista':clientes_list,
'mes':mes, 'mes':mes,
'year':year,
'filters':filters, 'filters':filters,
'emailForm':EmailForm(), 'emailForm':EmailForm(),
} }
@@ -231,8 +237,6 @@ def timbres_cliente(request, RFC):
if PAC is not None and PAC !='00': if PAC is not None and PAC !='00':
lista = lista.filter(rfcp=PAC) lista = lista.filter(rfcp=PAC)
filters = {key:value[0] for (key,value) in dict(request.GET).items() if value !=[""]} filters = {key:value[0] for (key,value) in dict(request.GET).items() if value !=[""]}
filters.pop('page', '') filters.pop('page', '')
@@ -258,7 +262,6 @@ def timbres_cliente(request, RFC):
end = datetime.datetime(fin[0],fin[1],fin[2]) end = datetime.datetime(fin[0],fin[1],fin[2])
end += datetime.timedelta(days=1) end += datetime.timedelta(days=1)
#print('start',start, 'end',end) #print('start',start, 'end',end)
lista = lista.filter(created_at__range=[start, end]) lista = lista.filter(created_at__range=[start, end])
@@ -358,9 +361,10 @@ def Retrive_Cliente_Email(request):
#@is_staff_access() #@is_staff_access()
def PACS_Retrive_RFCS(request): def PACS_Retrive_RFCS(request):
timbres = {} timbres = {}
status = 200
if request.method == 'GET': if request.method == 'GET':
RFC= request.GET.get('RFC','') RFC= request.GET.get('RFC','')
status = 200
if RFC !='': if RFC !='':
timbres =list(Timbres.objects.values('rfcp').filter(rfcc__in=[RFC])) timbres =list(Timbres.objects.values('rfcp').filter(rfcc__in=[RFC]))
else: else:
@@ -369,6 +373,8 @@ def PACS_Retrive_RFCS(request):
status=403 status=403
return JsonResponse({'PACS':timbres},status=status) return JsonResponse({'PACS':timbres},status=status)
#-----------------------------------API VIEWS #-----------------------------------API VIEWS
#-------------------------------------------- #--------------------------------------------
from rest_framework import status from rest_framework import status
@@ -450,7 +456,6 @@ class ErroresTimbresListView(LoginRequiredMixin,ListView):
paginate_by = 100 paginate_by = 100
template_name = 'Clientes/Errores_Timbres_list.html' 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

1
Templates/404.html Normal file
View File

@@ -0,0 +1 @@
no hay

View File

@@ -19,10 +19,12 @@ Timbres disponibles Comercio Digital: {{saldo}}
<th>Nombre</th> <th>Nombre</th>
<th> <th>
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
Totales Mes Total x mes
<div style="display:none" id="spinner_id" class="spinner-border ml-auto spinner-border-sm" role="status" aria-hidden="true"></div> <div style="display:none;" id="spinner_id" class="spinner-border ml-auto spinner-border-sm" role="status" aria-hidden="true"></div>
</div> </div>
<select style="display:inline" id="table_select_anio" class="form-control form-control-sm">
<!--option value="0"></option-->
</select>
<select id="table_select" class="form-control form-control-sm"> <select id="table_select" class="form-control form-control-sm">
<option value="01">Enero</option> <option value="01">Enero</option>
<option value="02">Febrero</option> <option value="02">Febrero</option>
@@ -137,7 +139,7 @@ Timbres disponibles Comercio Digital: {{saldo}}
</table> </table>
</div> </div>
<div id='id_filters' style="display: none;">{% for i,v in filters.items %}&{{i}}={{v}}{% endfor%}</div> <div id='id_filters' style="display: inline;">{% for i,v in filters.items %}&{{i}}={{v}}{% endfor%}</div>
<!-- Modal EMAIL--> <!-- Modal EMAIL-->
@@ -167,7 +169,6 @@ Timbres disponibles Comercio Digital: {{saldo}}
</button> </button>
</div> </div>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="subject"><strong> Subject </strong></label> <label for="subject"><strong> Subject </strong></label>
@@ -262,7 +263,7 @@ Timbres disponibles Comercio Digital: {{saldo}}
} }
const re = Object.values(data['data']) const re = Object.values(data['data'])
re.forEach((val,index)=>{ re.forEach((val,index)=>{
console.log('val',val.email, index)
const row = document.createElement("tr") const row = document.createElement("tr")
row.setAttribute("class","table_row") row.setAttribute("class","table_row")
const cell = document.createElement("td") const cell = document.createElement("td")
@@ -281,15 +282,15 @@ Timbres disponibles Comercio Digital: {{saldo}}
email_add.value=event.target.textContent email_add.value=event.target.textContent
close_emails_list.click() close_emails_list.click()
}) })
}) })
})//.then(data) })//.then(data)
} }
let filters = document.getElementById('id_filters').textContent let filters = document.getElementById('id_filters').textContent
let mes ='{{mes}}'
let year = parseInt('{{year}}')
function aclick(event,RFC ,cuantos){ function aclick(event,RFC ,cuantos){
@@ -303,30 +304,64 @@ Timbres disponibles Comercio Digital: {{saldo}}
table_rfcc.addEventListener('click',(event)=>{ table_rfcc.addEventListener('click',(event)=>{
document.getElementById('rfcc').checked= table_rfcc.checked? true:false; document.getElementById('rfcc').checked= table_rfcc.checked? true:false;
}) })
window.addEventListener("load", (event)=>{ window.addEventListener("load", (event)=>{
let mes ='{{mes}}' // let mes ='{{mes}}'
mes.length == 1 ? mes="0"+mes: mes
if(mes !="None"){ if(mes !="None"){
document.getElementById('table_select').value='{{mes}}' document.getElementById('table_select').value=mes
mes_id.value='{{mes}}' mes_id.value=mes
}else{ }else{
document.getElementById('table_select').value='{{fecha|date:"m"}}' document.getElementById('table_select').value='{{fecha|date:"m"}}'
mes_id.value='{{fecha|date:"m"}}' mes_id.value='{{fecha|date:"m"}}'
} }
/*Add years to select anio tag*/
let anio = parseInt('{{fecha|date:"Y"}}')
let fin = anio-5
for(var i = anio; i >= fin ;i--){
let option = document.createElement('option')
option.value=i
option.text=i
table_select_anio.add(option)
}
/*despues de agregar los anios al control agrega el value del contexto*/
table_select_anio.value=year
}) })
document.getElementById('table_select').addEventListener('change',(event)=>{ document.getElementById('table_select').addEventListener('change',(event)=>{
spinner_id.setAttribute('style','display:inline;') spinner_id.setAttribute('style','display:inline;')
let anc = document.getElementById('home_id') let anc = document.getElementById('home_id')
anc.href='' anc.href=''
let url = `?mes=${event.target.value}${filters}`
anc.href=url let url = `?mes=${event.target.value}&year=${year}${filters}`
anc.click()
setTimeout(()=>{
anc.href=url
anc.click()
},1000)
})
table_select_anio.addEventListener('change',(event)=>{
spinner_id.setAttribute('style','display:inline;')
let anc = document.getElementById('home_id')
anc.href=''
let url = `?mes=${mes}&year=${event.target.value}${filters}`
setTimeout(()=>{
anc.href=url
anc.click()
},1000)
}) })
enviar_btn.addEventListener('click',(e)=>{ enviar_btn.addEventListener('click',(e)=>{
@@ -334,12 +369,7 @@ Timbres disponibles Comercio Digital: {{saldo}}
if(id_form.checkValidity()){ if(id_form.checkValidity()){
// //
spinner_enviar.removeAttribute('style'); spinner_enviar.removeAttribute('style');
/*
id_form.getElementsByTagName('*');
for (var node of childNodes) {
node.disabled = true;
}
*/
} }
}) })

View File

@@ -18,16 +18,6 @@
<div id="dates" style="display:none;" class="group-form mr-2" > <div id="dates" style="display:none;" class="group-form mr-2" >
<input type="date" class="form-control sm-2 my_event_cls" name ="datepicker" id="datepicker" placeholder="Initial Date" /> <input type="date" class="form-control sm-2 my_event_cls" name ="datepicker" id="datepicker" placeholder="Initial Date" />
<input type="date" class="form-control sm-2 my_event_cls" name ="datepickerFin" id="datepickerFin" placeholder="End Date" /> <input type="date" class="form-control sm-2 my_event_cls" name ="datepickerFin" id="datepickerFin" placeholder="End Date" />
<script>
/*
$('#datepicker').datepicker({
uiLibrary: 'bootstrap4'
});
$('#datepickerFin').datepicker({
uiLibrary: 'bootstrap4'
});*/
</script>
</div> </div>
<button id="id_searchbtn" class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> <button id="id_searchbtn" class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form> </form>