changes for sistemas

This commit is contained in:
fjrodriguez
2023-03-09 09:40:17 -06:00
parent c84ef13d33
commit 5b5e79f430
7 changed files with 108 additions and 89 deletions

View File

@@ -491,3 +491,11 @@ class ClientesCreateView(UserPassesTestMixin,LoginRequiredMixin,CreateView):
return JsonResponse(data) return JsonResponse(data)
else: else:
return response return response
def form_invalid(self,form):
response = super().form_invalid(form)
if self.request.headers.get('X-Requested-With') == 'XMLHttpRequest':
errors = form.errors.as_text()
return JsonResponse({'errors':f'{errors}'},status=200,content_type='application/json')
else:
return response

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.1.3 on 2023-03-07 16:28
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('Clientes', '0015_alter_timbres_rfcc'),
('Sistemas', '0013_alter_bitacoraerrores_options'),
]
operations = [
migrations.AlterUniqueTogether(
name='sistemas_por_cliente',
unique_together={('id_sistema', 'cliente')},
),
]

View File

@@ -38,13 +38,11 @@ class sistemas_por_cliente(models.Model):
id_sistema= models.ForeignKey(Sistema, related_name='sistema_spc', on_delete=models.CASCADE) id_sistema= models.ForeignKey(Sistema, related_name='sistema_spc', on_delete=models.CASCADE)
cliente = models.ForeignKey(Clientes, related_name='cliente_spc', on_delete=models.CASCADE) cliente = models.ForeignKey(Clientes, related_name='cliente_spc', on_delete=models.CASCADE)
num_licencias= models.IntegerField(default=1) num_licencias= models.IntegerField(default=1)
def __str__(self): def __str__(self):
return f'{self.cliente.Nombre}' return f'{self.cliente.Nombre}'
class Meta: class Meta:
ordering= ('-cliente','id_sistema') ordering= ('-cliente','id_sistema')
unique_together = ('id_sistema', 'cliente')
class DeviceManager(BaseUserManager): class DeviceManager(BaseUserManager):
def generate_unique_username(self,client, device_name, ip_address): def generate_unique_username(self,client, device_name, ip_address):

View File

@@ -74,8 +74,8 @@ class UploadZipVersionView(APIView):
return redirect('uploadZipViewHTML') return redirect('uploadZipViewHTML')
version = request.POST.get('version') version = request.POST.get('version')
sistema = request.POST.get('sistema') sistema = request.POST.get('sistema')
print('version',version, ' sistema',sistema) except KeyError as ker:
except KeyError: BitacoraErrores.objects.create(level=2, message=f'keyError Try: {str(ker)}', traceback=traceback.format_exc(), view='Sistemas.UploadZipVersionView')
return Response({'error':'Zip file is required'},status=status.HTTP_400_BAD_REQUEST) return Response({'error':'Zip file is required'},status=status.HTTP_400_BAD_REQUEST)
try: try:
versionSistema = Sistema.objects.get(id=sistema) versionSistema = Sistema.objects.get(id=sistema)
@@ -100,18 +100,15 @@ class UploadZipVersionView(APIView):
@authentication_classes([TokenAuthentication]) @authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated]) @permission_classes([IsAuthenticated])
def download_version_FromServer(request): def download_version_FromServer(request):
"""""" """dw"""
try: try:
sys= request.GET.get('sys') sys= request.GET.get('sys')
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if sys: if sys:
filename=f'{sys}.zip' filename=f'{sys}.zip'
else: else:
filename = 'CFDI.zip' filename = 'CFDI.zip'
filepath = f'{BASE_DIR }/downloadSystems/{filename}' filepath = f'{BASE_DIR }/downloadSystems/{filename}'
#path = open(filepath, 'r')
with open(filepath, 'rb') as path: with open(filepath, 'rb') as path:
mime_type, _ = mimetypes.guess_type(filepath) mime_type, _ = mimetypes.guess_type(filepath)
response = HttpResponse(path.read(),content_type=mime_type) response = HttpResponse(path.read(),content_type=mime_type)
@@ -122,6 +119,7 @@ def download_version_FromServer(request):
return HttpResponse(status=204) return HttpResponse(status=204)
class UsersConnectedList(UserPassesTestMixin,LoginRequiredMixin,ListView): class UsersConnectedList(UserPassesTestMixin,LoginRequiredMixin,ListView):
"""CV"""
model = User model = User
template_name= 'Sistemas/Usuarios/lista.html' template_name= 'Sistemas/Usuarios/lista.html'
@@ -153,7 +151,6 @@ class UsersConnectedList(UserPassesTestMixin,LoginRequiredMixin,ListView):
return users return users
class SistemasXCliente_ListView(UserPassesTestMixin,LoginRequiredMixin, ListView): class SistemasXCliente_ListView(UserPassesTestMixin,LoginRequiredMixin, ListView):
model = sistemas_por_cliente model = sistemas_por_cliente
paginate_by = 20 paginate_by = 20
template_name = 'Sistemas/Xclientes/lista.html' template_name = 'Sistemas/Xclientes/lista.html'
@@ -184,7 +181,6 @@ class SistemasXCliente_DetailView(UserPassesTestMixin,LoginRequiredMixin, Detail
if not res: if not res:
messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.') messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.')
return res return res
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
sistemas_por_cliente = self.object sistemas_por_cliente = self.object
@@ -213,7 +209,9 @@ class Sistema_CreateView(CreateView):
'version': self.object.version, 'version': self.object.version,
} }
return JsonResponse(data) return JsonResponse(data)
def form_invalid(self, form):
errors =form.errors.as_text()
return JsonResponse({'errors': f'{errors}'}, status=200)
''' '''
========================= API Views ========================= API Views
''' '''

View File

@@ -38,41 +38,32 @@
document.addEventListener("DOMContentLoaded", ()=>{ document.addEventListener("DOMContentLoaded", ()=>{
if(window.name ==='popupWin') if(window.name ==='popupWin')
{ {
console.log('popupWin')
document.querySelector("#cliente-form").addEventListener('submit',(event)=>{ document.querySelector("#cliente-form").addEventListener('submit',(event)=>{
event.preventDefault(); event.preventDefault();
let form= event.target; let form= event.target;
let url = `{% url 'add_cliente' %}`; let url = `{% url 'add_cliente' %}`;
let data = new FormData(form); let data = new FormData(form);
let xhr = new XMLHttpRequest(); let xhr = new XMLHttpRequest();
xhr.open('POST',url); xhr.open('POST',url);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.onreadystatechange = ()=>{ xhr.onreadystatechange = ()=>{
if(xhr.readyState===XMLHttpRequest.DONE){ if(xhr.readyState===XMLHttpRequest.DONE){
if(xhr.status===200){ if(xhr.status===200){
let response = JSON.parse(xhr.responseText); let response = JSON.parse(xhr.responseText);
window.opener.postMessage({data:response, windowName:'clientWindow'},window.location.origin); if(response.errors){
window.close(); alert(response.errors)
}else{
window.opener.postMessage({data:response, windowName:'clientWindow'},window.location.origin);
window.close();
}
}else{ }else{
console.error('Request error ',xhr.statusText); console.error('Request error ',xhr.statusText);
} }
} }
}; };
xhr.send(data); xhr.send(data);
/*
fetch(url,{
method:'POST',
body:data
})
.then(response=>response.json())
.then(response=>{
window.opener.postMessage({data:response, windowName:'clientWindow'},window.location.origin);
window.close();
})
.catch(error => console.log(error));
*/
}); });
}else{ }else{
console.log('not popupWin') console.log('not popupWin')

View File

@@ -6,12 +6,26 @@
<form method="post"> <form method="post">
{% csrf_token %} {% csrf_token %}
{% if form.non_field_errors %}
<div class="alert alert-danger" role="alert">
{% for error in form.non_field_errors %}
<p>{{ error }}</p>
{% endfor %}
</div>
{% endif %}
<div class=""> <div class="">
<div class="form-group"> <div class="form-group">
<div class="form"> <div class="form">
{{ form.id_sistema.label }} {{ form.id_sistema.label }}
{{ form.id_sistema }} {{ form.id_sistema }}
<button id="add-sistema-btn" type="button" class="btn btn-info">Add Sistema</button> <button id="add-sistema-btn" type="button" class="btn btn-info">Add Sistema</button>
{% if form.id_sistema.errors %}
<ul class="errorlist">
{% for error in form.id_sistema.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div> </div>
</div> </div>
@@ -19,11 +33,25 @@
{{ form.cliente.label}} {{ form.cliente.label}}
{{ form.cliente }} {{ form.cliente }}
<button id="add-cliente-btn" type="button" class="btn btn-info">Add Cliente</button> <button id="add-cliente-btn" type="button" class="btn btn-info">Add Cliente</button>
{% if form.cliente.errors %}
<ul class="errorlist">
{% for error in form.cliente.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div> </div>
<div class="form-group"> <div class="form-group">
{{ form.num_licencias.label }} {{ form.num_licencias.label }}
{{ form.num_licencias }} {{ form.num_licencias }}
{% if form.num_licencias.errors %}
<ul class="errorlist">
{% for error in form.num_licencias.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div> </div>
<button class="btn btn-success" type="submit">Create</button> <button class="btn btn-success" type="submit">Create</button>
@@ -89,22 +117,5 @@
}); });
}); });
/*
$(function() {
$('#add-sistema-btn').click(function() {
let popupWin = window.open("{% url 'create_sistemas_form' %}", "popupWin", "width=800,height=600");
popupWin.focus();
});
window.addEventListener('message', function(event) {
let response = event.data;
let id_sistema = response.id;
let nombre_sistema = response.nombre_sistema;
let version = response.version;
let option = '<option value="' + id_sistema + '" selected>' + nombre_sistema + ', version ' + version + '</option>';
$('#id_id_sistema').append(option);
$('#sistema-modal').modal('hide');
});
});
*/
</script> </script>
{% endblock scripts %} {% endblock scripts %}

View File

@@ -15,46 +15,41 @@
<script> <script>
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
document.querySelector('#sistema-form').addEventListener('submit', function(event) { document.querySelector('#sistema-form').addEventListener('submit', function(event) {
event.preventDefault();
var form = event.target;
var url = form.getAttribute('action');
var data = new FormData(form);
fetch(url, {
method: 'POST',
body: data
})
.then(response => response.json())
.then(response => {
window.opener.postMessage({data:response, windowName:'sistemaWindow'}, window.location.origin);
window.close();
})
.catch(error => console.log(error));
});
});
/*
<!--script src="https://code.jquery.com/jquery-3.6.0.min.js">
$(function() {
$('#sistema-form').submit(function(event) {
event.preventDefault(); event.preventDefault();
var form = $(this); var form = event.target;
var url = form.attr('action'); var url = form.getAttribute('action');
var data = form.serialize(); var data = new FormData(form);
$.ajax({ fetch(url, {
url: url, method: 'POST',
data: data, body: data
type: 'post', })
dataType: 'json', .then(response => {
success: function(response) { if(response.ok){
window.opener.postMessage(response, '*'); return response.json();
}else{
throw new Error('Network response was not ok');
}
})
.then(response => {
if(response.errors) {
alert(response.errors)
id_nombre_sistema.value=''
}else{
window.opener.postMessage({data: response, windowName: 'sistemaWindow'}, window.location.origin);
window.close(); window.close();
}, }
error: function(xhr, status, error) { })
console.log(xhr.responseText); .catch(error => {
if(error.response){
alert('Error System AS_000')
}else{
alert('Error System AS_001')
} }
}); });
}); });
});*/ });
</script> </script>
{% endblock scripts %} {% endblock scripts %}