From 5b5e79f4300a7b8e6c003d46d602f821c107c46f Mon Sep 17 00:00:00 2001 From: fjrodriguez Date: Thu, 9 Mar 2023 09:40:17 -0600 Subject: [PATCH] changes for sistemas --- Clientes/views.py | 8 +++ ...er_sistemas_por_cliente_unique_together.py | 18 +++++ Sistemas/models.py | 4 +- Sistemas/views.py | 26 ++++--- Templates/Clientes/edit_cliente.html | 27 +++----- .../Sistemas/Xclientes/sistema_create.html | 45 +++++++----- .../Xclientes/sistema_create_form.html | 69 +++++++++---------- 7 files changed, 108 insertions(+), 89 deletions(-) create mode 100644 Sistemas/migrations/0014_alter_sistemas_por_cliente_unique_together.py diff --git a/Clientes/views.py b/Clientes/views.py index 83f49b4..b941c63 100644 --- a/Clientes/views.py +++ b/Clientes/views.py @@ -489,5 +489,13 @@ class ClientesCreateView(UserPassesTestMixin,LoginRequiredMixin,CreateView): 'Activo':self.object.Activo, } return JsonResponse(data) + else: + 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 \ No newline at end of file diff --git a/Sistemas/migrations/0014_alter_sistemas_por_cliente_unique_together.py b/Sistemas/migrations/0014_alter_sistemas_por_cliente_unique_together.py new file mode 100644 index 0000000..0cac66f --- /dev/null +++ b/Sistemas/migrations/0014_alter_sistemas_por_cliente_unique_together.py @@ -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')}, + ), + ] diff --git a/Sistemas/models.py b/Sistemas/models.py index 1cdc696..8eb9e1e 100644 --- a/Sistemas/models.py +++ b/Sistemas/models.py @@ -38,13 +38,11 @@ class sistemas_por_cliente(models.Model): 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) num_licencias= models.IntegerField(default=1) - def __str__(self): - return f'{self.cliente.Nombre}' class Meta: ordering= ('-cliente','id_sistema') - + unique_together = ('id_sistema', 'cliente') class DeviceManager(BaseUserManager): def generate_unique_username(self,client, device_name, ip_address): diff --git a/Sistemas/views.py b/Sistemas/views.py index ec9beb5..e092927 100644 --- a/Sistemas/views.py +++ b/Sistemas/views.py @@ -73,9 +73,9 @@ class UploadZipVersionView(APIView): messages.error(self.request, f'El archivo {fileN} no es .zip') return redirect('uploadZipViewHTML') version = request.POST.get('version') - sistema = request.POST.get('sistema') - print('version',version, ' sistema',sistema) - except KeyError: + sistema = request.POST.get('sistema') + except KeyError as ker: + 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) try: versionSistema = Sistema.objects.get(id=sistema) @@ -100,18 +100,15 @@ class UploadZipVersionView(APIView): @authentication_classes([TokenAuthentication]) @permission_classes([IsAuthenticated]) def download_version_FromServer(request): - """""" + """dw""" try: - sys= request.GET.get('sys') - + sys= request.GET.get('sys') BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if sys: filename=f'{sys}.zip' else: filename = 'CFDI.zip' filepath = f'{BASE_DIR }/downloadSystems/{filename}' - - #path = open(filepath, 'r') with open(filepath, 'rb') as path: mime_type, _ = mimetypes.guess_type(filepath) response = HttpResponse(path.read(),content_type=mime_type) @@ -122,6 +119,7 @@ def download_version_FromServer(request): return HttpResponse(status=204) class UsersConnectedList(UserPassesTestMixin,LoginRequiredMixin,ListView): + """CV""" model = User template_name= 'Sistemas/Usuarios/lista.html' @@ -139,7 +137,7 @@ class UsersConnectedList(UserPassesTestMixin,LoginRequiredMixin,ListView): sessions = Session.objects.filter(expire_date__gte=timezone.now()) # Get all non-expired tokens - #tokens = Token.objects.filter(created__gte=timezone.now() - timedelta(hours=1)) + #tokens = Token.objects.filter(created__gte=timezone.now() - timedelta(hours=1)) tokens = Token.objects.all() # Get a list of logged-in user ids @@ -147,13 +145,12 @@ class UsersConnectedList(UserPassesTestMixin,LoginRequiredMixin,ListView): # Get the logged-in users users = User.objects.filter(id__in=uid_list) - for user,session in zip(users,sessions): + for user,session in zip(users,sessions): user.session_data = session.get_decoded() user.session_expire = session.expire_date return users class SistemasXCliente_ListView(UserPassesTestMixin,LoginRequiredMixin, ListView): - model = sistemas_por_cliente paginate_by = 20 template_name = 'Sistemas/Xclientes/lista.html' @@ -179,12 +176,11 @@ class SistemasBitacora_ListView(UserPassesTestMixin,LoginRequiredMixin, ListView class SistemasXCliente_DetailView(UserPassesTestMixin,LoginRequiredMixin, DetailView): model = sistemas_por_cliente template_name= 'Sistemas/Xclientes/detail.html' - def test_func(self): + def test_func(self): res = self.request.user.groups.filter(name= 'admin_soft') if not res: messages.error(self.request, f'Lo sentimos. La página que buscas no está disponible, no cuentas con los permisos.') return res - def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) sistemas_por_cliente = self.object @@ -213,7 +209,9 @@ class Sistema_CreateView(CreateView): 'version': self.object.version, } return JsonResponse(data) - + def form_invalid(self, form): + errors =form.errors.as_text() + return JsonResponse({'errors': f'{errors}'}, status=200) ''' ========================= API Views ''' diff --git a/Templates/Clientes/edit_cliente.html b/Templates/Clientes/edit_cliente.html index c9087a9..81ad4ec 100644 --- a/Templates/Clientes/edit_cliente.html +++ b/Templates/Clientes/edit_cliente.html @@ -37,42 +37,33 @@ document.addEventListener("DOMContentLoaded", ()=>{ if(window.name ==='popupWin') - { - console.log('popupWin') + { document.querySelector("#cliente-form").addEventListener('submit',(event)=>{ event.preventDefault(); let form= event.target; let url = `{% url 'add_cliente' %}`; let data = new FormData(form); - let xhr = new XMLHttpRequest(); - xhr.open('POST',url); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.onreadystatechange = ()=>{ if(xhr.readyState===XMLHttpRequest.DONE){ if(xhr.status===200){ + let response = JSON.parse(xhr.responseText); - window.opener.postMessage({data:response, windowName:'clientWindow'},window.location.origin); - window.close(); + if(response.errors){ + alert(response.errors) + }else{ + window.opener.postMessage({data:response, windowName:'clientWindow'},window.location.origin); + window.close(); + } }else{ console.error('Request error ',xhr.statusText); } } }; 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{ console.log('not popupWin') diff --git a/Templates/Sistemas/Xclientes/sistema_create.html b/Templates/Sistemas/Xclientes/sistema_create.html index 3e34504..a36cb70 100644 --- a/Templates/Sistemas/Xclientes/sistema_create.html +++ b/Templates/Sistemas/Xclientes/sistema_create.html @@ -6,12 +6,26 @@
{% csrf_token %} + {% if form.non_field_errors %} + + {% endif %}
{{ form.id_sistema.label }} {{ form.id_sistema }} + {% if form.id_sistema.errors %} +
    + {% for error in form.id_sistema.errors %} +
  • {{ error }}
  • + {% endfor %} +
+ {% endif %}
@@ -19,11 +33,25 @@ {{ form.cliente.label}} {{ form.cliente }} + {% if form.cliente.errors %} +
    + {% for error in form.cliente.errors %} +
  • {{ error }}
  • + {% endfor %} +
+ {% endif %}
{{ form.num_licencias.label }} {{ form.num_licencias }} + {% if form.num_licencias.errors %} +
    + {% for error in form.num_licencias.errors %} +
  • {{ error }}
  • + {% endfor %} +
+ {% endif %}
@@ -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 = ''; - $('#id_id_sistema').append(option); - $('#sistema-modal').modal('hide'); - }); - }); - */ {% endblock scripts %} \ No newline at end of file diff --git a/Templates/Sistemas/Xclientes/sistema_create_form.html b/Templates/Sistemas/Xclientes/sistema_create_form.html index 5f5645a..b1b0d51 100644 --- a/Templates/Sistemas/Xclientes/sistema_create_form.html +++ b/Templates/Sistemas/Xclientes/sistema_create_form.html @@ -15,46 +15,41 @@ {% endblock scripts %}