Dar de alta sistmeas en ajax popup
This commit is contained in:
@@ -480,3 +480,16 @@ class ClientesCreateView(UserPassesTestMixin,LoginRequiredMixin,CreateView):
|
|||||||
def test_func(self):
|
def test_func(self):
|
||||||
#self.request.user.groups.all()
|
#self.request.user.groups.all()
|
||||||
return self.request.user.groups.filter(name= 'admin_soft')
|
return self.request.user.groups.filter(name= 'admin_soft')
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
response = super().form_valid(form)
|
||||||
|
if self.request.headers.get('X-Requested-With') == 'XMLHttpRequest':
|
||||||
|
data={
|
||||||
|
'id':self.object.id,
|
||||||
|
'RFC':self.object.RFC,
|
||||||
|
'Nombre':self.object.Nombre,
|
||||||
|
'Activo':self.object.Activo,
|
||||||
|
}
|
||||||
|
return JsonResponse(data)
|
||||||
|
else:
|
||||||
|
return response
|
||||||
@@ -1,6 +1,30 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from .models import Sistema
|
from .models import Sistema,sistemas_por_cliente
|
||||||
class SistemaForm(forms.ModelForm):
|
class SistemaForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Sistema
|
model = Sistema
|
||||||
fields = ['nombre_sistema','version']
|
fields = ['nombre_sistema','version']
|
||||||
|
|
||||||
|
|
||||||
|
class sistemas_por_clienteForm(forms.ModelForm):
|
||||||
|
nombre_sistema = forms.CharField(max_length=100)
|
||||||
|
version = forms.CharField(max_length=25)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = sistemas_por_cliente
|
||||||
|
fields = ['cliente', 'num_licencias']
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.fields['cliente'].empty_label = None
|
||||||
|
|
||||||
|
def save(self, commit=True):
|
||||||
|
sistema = Sistema.objects.create(
|
||||||
|
nombre_sistema=self.cleaned_data['nombre_sistema'],
|
||||||
|
version=self.cleaned_data['version'],
|
||||||
|
)
|
||||||
|
sistema_por_cliente = super().save(commit=False)
|
||||||
|
sistema_por_cliente.id_sistema = sistema
|
||||||
|
if commit:
|
||||||
|
sistema_por_cliente.save()
|
||||||
|
return sistema_por_cliente
|
||||||
@@ -43,7 +43,7 @@ class DeviceSerializer(serializers.ModelSerializer):
|
|||||||
try:
|
try:
|
||||||
sistemaxCli = sistemas_por_cliente.objects.get(id_sistema=sistema,cliente=client)
|
sistemaxCli = sistemas_por_cliente.objects.get(id_sistema=sistema,cliente=client)
|
||||||
except sistemas_por_cliente.DoesNotExist:
|
except sistemas_por_cliente.DoesNotExist:
|
||||||
raise serializers.ValidationError('No existe licencia para este sistmea y/o cliente')
|
raise serializers.ValidationError('No existe licencia para este sistema y/o cliente')
|
||||||
if sistemaxCli.num_licencias <= Device.objects.filter(sistema=sistemaxCli.id_sistema).count():
|
if sistemaxCli.num_licencias <= Device.objects.filter(sistema=sistemaxCli.id_sistema).count():
|
||||||
raise serializers.ValidationError(f"No hay licencias disponibles para este sistema:{sistema} y cliente:{client}")
|
raise serializers.ValidationError(f"No hay licencias disponibles para este sistema:{sistema} y cliente:{client}")
|
||||||
return data
|
return data
|
||||||
@@ -6,8 +6,7 @@ from .views import (
|
|||||||
SistemasXCliente_ListView,
|
SistemasXCliente_ListView,
|
||||||
SistemasXCliente_DetailView,
|
SistemasXCliente_DetailView,
|
||||||
UsersConnectedList,
|
UsersConnectedList,
|
||||||
|
SistemasxCliente_CreateView,
|
||||||
|
|
||||||
|
|
||||||
#DRF APIViews
|
#DRF APIViews
|
||||||
RegisterDeviceView,
|
RegisterDeviceView,
|
||||||
@@ -15,14 +14,18 @@ from .views import (
|
|||||||
LogoutView,
|
LogoutView,
|
||||||
CheckVersionView,
|
CheckVersionView,
|
||||||
UploadZipVersionView,
|
UploadZipVersionView,
|
||||||
|
Sistema_CreateView,
|
||||||
|
|
||||||
#function
|
#function
|
||||||
download_version_FromServer,
|
download_version_FromServer,
|
||||||
uploadZipViewHTML
|
uploadZipViewHTML,
|
||||||
|
|
||||||
)
|
)
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('',SistemasXCliente_ListView.as_view(),name='lista_sistmas'),
|
path('',SistemasXCliente_ListView.as_view(),name='lista_sistmas'),
|
||||||
path('detail/<str:pk>/',SistemasXCliente_DetailView.as_view(),name='detail_sistemas'),
|
path('detail/<str:pk>/',SistemasXCliente_DetailView.as_view(),name='detail_sistemas'),
|
||||||
|
path('create_sistemas_form/',Sistema_CreateView.as_view(), name='create_sistemas_form'),
|
||||||
|
path('crearSistema/',SistemasxCliente_CreateView.as_view(), name='create_sistemas'),
|
||||||
path('registerPC/',RegisterDeviceView.as_view(),name='register_PC'),
|
path('registerPC/',RegisterDeviceView.as_view(),name='register_PC'),
|
||||||
path('authenticatePC/',AuthenticateDeviceView.as_view(), name="authenticateDevice"),
|
path('authenticatePC/',AuthenticateDeviceView.as_view(), name="authenticateDevice"),
|
||||||
path('logout/', LogoutView.as_view(), name='logout_sistemas'),
|
path('logout/', LogoutView.as_view(), name='logout_sistemas'),
|
||||||
|
|||||||
@@ -1,19 +1,28 @@
|
|||||||
from django.shortcuts import render,redirect
|
from django.shortcuts import render,redirect
|
||||||
|
from django.http import JsonResponse
|
||||||
|
from django.urls import reverse_lazy
|
||||||
from django.contrib.auth import logout
|
from django.contrib.auth import logout
|
||||||
from django.views.generic.list import ListView
|
from django.views.generic.list import ListView
|
||||||
from django.views.generic.detail import DetailView
|
from django.views.generic.detail import DetailView
|
||||||
|
from django.views.generic.edit import CreateView
|
||||||
from rest_framework.authentication import TokenAuthentication
|
from rest_framework.authentication import TokenAuthentication
|
||||||
|
from rest_framework.decorators import authentication_classes,api_view,permission_classes
|
||||||
|
from rest_framework.exceptions import AuthenticationFailed
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
|
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework import status, permissions
|
from rest_framework import status, permissions
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
||||||
from .models import sistemas_por_cliente, DeviceHistory,Device
|
from .models import sistemas_por_cliente, DeviceHistory,Device
|
||||||
from .serializers import DeviceSerializer
|
from .serializers import DeviceSerializer
|
||||||
from .permissions import HasAuthorizationHeader
|
from .permissions import HasAuthorizationHeader
|
||||||
from .models import Sistema, BitacoraErrores
|
from .models import Sistema, BitacoraErrores
|
||||||
|
from .forms import SistemaForm,sistemas_por_clienteForm
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
import re
|
import re
|
||||||
|
|
||||||
@@ -28,10 +37,9 @@ import os
|
|||||||
import mimetypes
|
import mimetypes
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from django.core.files.storage import default_storage
|
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from .customStorage import CustomStorage
|
from .customStorage import CustomStorage
|
||||||
from .forms import SistemaForm
|
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -54,20 +62,25 @@ def uploadZipViewHTML(request):
|
|||||||
|
|
||||||
class UploadZipVersionView(APIView):
|
class UploadZipVersionView(APIView):
|
||||||
"""API CLASS for upload the CFDI Version into the server"""
|
"""API CLASS for upload the CFDI Version into the server"""
|
||||||
|
authentication_classes = (TokenAuthentication,) #this is by default in settings.py
|
||||||
permissions_classes=[IsAuthenticated,]
|
permissions_classes=[IsAuthenticated,]
|
||||||
#authentication_classes = (TokenAuthentication,) #this is by default in settings.py
|
|
||||||
|
|
||||||
def post(self,request,format=None):
|
def post(self,request,format=None):
|
||||||
try:
|
try:
|
||||||
zip_file=request.FILES['zip_file']
|
zip_file=request.FILES['zip_file']
|
||||||
|
if zip_file:
|
||||||
|
fileN, file_ext = os.path.splitext(zip_file.name)
|
||||||
|
if file_ext !=".zip":
|
||||||
|
messages.error(self.request, f'El archivo {fileN} no es .zip')
|
||||||
|
return redirect('uploadZipViewHTML')
|
||||||
version = request.POST.get('version')
|
version = request.POST.get('version')
|
||||||
sistema = request.POST.get('sistema')
|
sistema = request.POST.get('sistema')
|
||||||
#print(request.POST)
|
print('version',version, ' sistema',sistema)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
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)
|
||||||
versionSistema.version=version
|
versionSistema.version=version
|
||||||
|
print('versionSistema: ',versionSistema.version)
|
||||||
versionSistema.save()
|
versionSistema.save()
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
@@ -75,13 +88,19 @@ class UploadZipVersionView(APIView):
|
|||||||
custom_storage = CustomStorage(location=download_system_dir)
|
custom_storage = CustomStorage(location=download_system_dir)
|
||||||
#print('path exist? ',os.path.exists(download_system_dir))
|
#print('path exist? ',os.path.exists(download_system_dir))
|
||||||
fileName = custom_storage.save(zip_file.name, ContentFile(zip_file.read()))
|
fileName = custom_storage.save(zip_file.name, ContentFile(zip_file.read()))
|
||||||
|
messages.success(request, 'The files has been upload successfully')
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.UploadZipVersionView')
|
BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.UploadZipVersionView')
|
||||||
|
messages.error(request, f'was an error trying upload the zip file: {ex}')
|
||||||
return Response({'error':str(ex)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
return Response({'error':str(ex)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||||
return Response({'message':'File uploaded successfully'}, status=status.HTTP_201_CREATED)
|
return Response({'message':'File uploaded successfully'}, status=status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
#need to add it to C# header request or webclient in CFDI and Actualizador
|
||||||
|
@api_view(['GET'])
|
||||||
|
@authentication_classes([TokenAuthentication])
|
||||||
|
@permission_classes([IsAuthenticated])
|
||||||
def download_version_FromServer(request):
|
def download_version_FromServer(request):
|
||||||
|
""""""
|
||||||
try:
|
try:
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
print('BASE_DIR',BASE_DIR)
|
print('BASE_DIR',BASE_DIR)
|
||||||
@@ -94,11 +113,24 @@ def download_version_FromServer(request):
|
|||||||
response['Content-Disposition']= f'attachment; filename={filename}'
|
response['Content-Disposition']= f'attachment; filename={filename}'
|
||||||
return response
|
return response
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
|
||||||
BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.download_version_FromServer')
|
BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.download_version_FromServer')
|
||||||
return HttpResponse(status=204)
|
return HttpResponse(status=204)
|
||||||
|
|
||||||
def get_logged_in_users():
|
class UsersConnectedList(UserPassesTestMixin,LoginRequiredMixin,ListView):
|
||||||
|
model = User
|
||||||
|
template_name= 'Sistemas/Usuarios/lista.html'
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return self.get_logged_in_users()
|
||||||
|
|
||||||
|
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_logged_in_users(self):
|
||||||
|
""""""
|
||||||
sessions = Session.objects.filter(expire_date__gte=timezone.now())
|
sessions = Session.objects.filter(expire_date__gte=timezone.now())
|
||||||
|
|
||||||
# Get all non-expired tokens
|
# Get all non-expired tokens
|
||||||
@@ -115,19 +147,6 @@ def get_logged_in_users():
|
|||||||
user.session_expire = session.expire_date
|
user.session_expire = session.expire_date
|
||||||
return users
|
return users
|
||||||
|
|
||||||
class UsersConnectedList(UserPassesTestMixin,LoginRequiredMixin,ListView):
|
|
||||||
model = User
|
|
||||||
template_name= 'Sistemas/Usuarios/lista.html'
|
|
||||||
|
|
||||||
def get_queryset(self):
|
|
||||||
return get_logged_in_users()
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
class SistemasXCliente_ListView(UserPassesTestMixin,LoginRequiredMixin, ListView):
|
class SistemasXCliente_ListView(UserPassesTestMixin,LoginRequiredMixin, ListView):
|
||||||
model = sistemas_por_cliente
|
model = sistemas_por_cliente
|
||||||
paginate_by = 5
|
paginate_by = 5
|
||||||
@@ -148,7 +167,25 @@ class SistemasXCliente_DetailView(UserPassesTestMixin,LoginRequiredMixin, Detail
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
class SistemasxCliente_CreateView(CreateView):
|
||||||
|
model = sistemas_por_cliente
|
||||||
|
fields = ['id_sistema', 'cliente', 'num_licencias']
|
||||||
|
template_name = 'Sistemas/Xclientes/sistema_create.html'
|
||||||
|
success_url = reverse_lazy('lista_sistmas')
|
||||||
|
|
||||||
|
class Sistema_CreateView(CreateView):
|
||||||
|
model = Sistema
|
||||||
|
fields = ['nombre_sistema', 'version', 'id']
|
||||||
|
template_name = 'Sistemas/Xclientes/sistema_create_form.html'
|
||||||
|
success_url = '/sistemas/'
|
||||||
|
def form_valid(self, form):
|
||||||
|
response = super().form_valid(form)
|
||||||
|
data = {
|
||||||
|
'id': self.object.id,
|
||||||
|
'nombre_sistema': self.object.nombre_sistema,
|
||||||
|
'version': self.object.version,
|
||||||
|
}
|
||||||
|
return JsonResponse(data)
|
||||||
|
|
||||||
'''
|
'''
|
||||||
========================= API Views
|
========================= API Views
|
||||||
@@ -217,7 +254,7 @@ class CheckVersionView(APIView):
|
|||||||
version = request.data.get('version')
|
version = request.data.get('version')
|
||||||
|
|
||||||
client_version = [int(x) for x in version.split(".")]
|
client_version = [int(x) for x in version.split(".")]
|
||||||
#print('client_version: ',client_version)
|
|
||||||
try:
|
try:
|
||||||
ver = Sistema.objects.get(nombre_sistema="CFDI")
|
ver = Sistema.objects.get(nombre_sistema="CFDI")
|
||||||
server_version = [int(x) for x in ver.version.split(".")]
|
server_version = [int(x) for x in ver.version.split(".")]
|
||||||
@@ -225,18 +262,17 @@ class CheckVersionView(APIView):
|
|||||||
BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.CheckVersionView')
|
BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.CheckVersionView')
|
||||||
return Response({'Error':f'{ex}','isError':True})
|
return Response({'Error':f'{ex}','isError':True})
|
||||||
|
|
||||||
|
print('client_version: ',client_version)
|
||||||
print('server_version', server_version)
|
print('server_version', server_version)
|
||||||
result=False
|
result=False
|
||||||
#for i in range(len(client_version)):
|
|
||||||
for cont, ele in enumerate(client_version):
|
for cont, ele in enumerate(client_version):
|
||||||
if client_version[cont] < server_version[cont]:
|
if client_version[cont] != server_version[cont]:
|
||||||
print('server verion is grater')
|
print('client version does not match server version')
|
||||||
result = True
|
result = True
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
result = False
|
result = False
|
||||||
print('equal')
|
print('client version matches server version')
|
||||||
return Response({'success':True, 'actualizar':result})
|
return Response({'success':True, 'actualizar':result})
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.CheckVersionView')
|
BitacoraErrores.objects.create(level=2, message=str(ex), traceback=traceback.format_exc(), view='Sistemas.CheckVersionView')
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<form method="POST" action=".">
|
<form method="POST" action="." id="cliente-form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="{{form.RFC.name}}"><strong> {{form.RFC.label|capfirst}} </strong></label>
|
<label for="{{form.RFC.name}}"><strong> {{form.RFC.label|capfirst}} </strong></label>
|
||||||
@@ -35,6 +35,50 @@
|
|||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
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();
|
||||||
|
}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')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
window.addEventListener("load", (event)=>{
|
window.addEventListener("load", (event)=>{
|
||||||
if(!id_Activo.checked){
|
if(!id_Activo.checked){
|
||||||
id_fecha_baja.setAttribute('required','')
|
id_fecha_baja.setAttribute('required','')
|
||||||
|
|||||||
110
Templates/Sistemas/Xclientes/sistema_create.html
Normal file
110
Templates/Sistemas/Xclientes/sistema_create.html
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<!-- sistema_create.html -->
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>Create a new sistemas por cliente</h1>
|
||||||
|
<form method="post">
|
||||||
|
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="form">
|
||||||
|
{{ form.id_sistema.label }}
|
||||||
|
{{ form.id_sistema }}
|
||||||
|
<button id="add-sistema-btn" type="button" class="btn btn-info">Add Sistema</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
{{ form.cliente.label}}
|
||||||
|
{{ form.cliente }}
|
||||||
|
<button id="add-cliente-btn" type="button" class="btn btn-info">Add Cliente</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
{{ form.num_licencias.label }}
|
||||||
|
{{ form.num_licencias }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button class="btn btn-success" type="submit">Create</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block scripts %}
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
/*add Sistema*/
|
||||||
|
document.querySelector('#add-sistema-btn').addEventListener('click', function() {
|
||||||
|
let parentWidth = window.innerWidth;
|
||||||
|
let parentHeight = window.innerHeight;
|
||||||
|
|
||||||
|
let childWidth = 800;
|
||||||
|
let childHeight = 600;
|
||||||
|
let left =(parentWidth - childWidth);
|
||||||
|
let top = (parentHeight - childHeight);
|
||||||
|
|
||||||
|
//let popupWin = window.open("{% url 'create_sistemas_form' %}", "popupWin", "width=800,height=600");
|
||||||
|
let popupWin = window.open("{% url 'create_sistemas_form' %}", "popupWin", "width=" + childWidth + ",height=" + childHeight + ",left=" + left + ",top=" + top);
|
||||||
|
popupWin.focus();
|
||||||
|
});
|
||||||
|
|
||||||
|
/*Add cliente*/
|
||||||
|
document.querySelector("#add-cliente-btn").addEventListener('click',()=>{
|
||||||
|
let parentWidth = window.innerWidth;
|
||||||
|
let parentHeight = window.innerHeight;
|
||||||
|
|
||||||
|
let childWidth = 800;
|
||||||
|
let childHeight = 600;
|
||||||
|
let left =(parentWidth - childWidth);
|
||||||
|
let top = (parentHeight - childHeight);
|
||||||
|
|
||||||
|
|
||||||
|
let popupWin = window.open("{% url 'add_cliente' %}", "popupWin", "width=" + childWidth + ",height=" + childHeight + ",left=" + left + ",top=" + top);
|
||||||
|
popupWin.focus();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
window.addEventListener('message', function(event) {
|
||||||
|
let response = event.data.data;
|
||||||
|
|
||||||
|
let windowName = event.data.windowName;
|
||||||
|
if(windowName==='clientWindow'){
|
||||||
|
let id_cliente = response.id;
|
||||||
|
let Nombre = response.Nombre;
|
||||||
|
let option= `<option value="${id_cliente}" selected> ${Nombre}</option>`;
|
||||||
|
document.querySelector("#id_cliente").insertAdjacentHTML('beforeend',option);
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (windowName==='sistemaWindow'){
|
||||||
|
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>';
|
||||||
|
document.querySelector('#id_id_sistema').insertAdjacentHTML('beforeend', option);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
$(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>
|
||||||
|
{% endblock scripts %}
|
||||||
60
Templates/Sistemas/Xclientes/sistema_create_form.html
Normal file
60
Templates/Sistemas/Xclientes/sistema_create_form.html
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<!-- sistema_create_form.html -->
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>Create a new Sistema</h1>
|
||||||
|
<form id="sistema-form" method="post" action="{% url 'create_sistemas_form' %}">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.as_p }}
|
||||||
|
<button type="submit">Create</button>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block scripts %}
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
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();
|
||||||
|
var form = $(this);
|
||||||
|
var url = form.attr('action');
|
||||||
|
var data = form.serialize();
|
||||||
|
$.ajax({
|
||||||
|
url: url,
|
||||||
|
data: data,
|
||||||
|
type: 'post',
|
||||||
|
dataType: 'json',
|
||||||
|
success: function(response) {
|
||||||
|
window.opener.postMessage(response, '*');
|
||||||
|
window.close();
|
||||||
|
},
|
||||||
|
error: function(xhr, status, error) {
|
||||||
|
console.log(xhr.responseText);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});*/
|
||||||
|
</script>
|
||||||
|
{% endblock scripts %}
|
||||||
@@ -7,37 +7,57 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<form id="upload-form">
|
<form id="upload-form">
|
||||||
<input type="file" name="zip_file" required>
|
<div class="form-group">
|
||||||
|
<input type="file" name="zip_file" required accept=".zip">
|
||||||
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
|
<div class="form-group">
|
||||||
<label for="id_sistema">Sistema </label>
|
<label for="id_sistema">Sistema </label>
|
||||||
<select id="id_sistema" name="sistema" required>
|
<select id="id_sistema" name="sistema" required class="form-control">
|
||||||
{% for sistema in sistemas %}
|
{% for sistema in sistemas %}
|
||||||
<option value="{{ sistema.id }}">{{ sistema.nombre_sistema }} ({{ sistema.version }})</option>
|
<option value="{{ sistema.id }}">{{ sistema.nombre_sistema }} ({{ sistema.version }})</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select><br><br>
|
</select>
|
||||||
<label for="id_version">version </label>
|
</div>
|
||||||
<input id="id_version" type="text" name="version"><br><br>
|
|
||||||
<label for="anio">Año:</label>
|
|
||||||
<input type="number" id="anio" name="anio" required min="23" max="30" required>
|
|
||||||
<label for="mes">Mes:</label>
|
|
||||||
<input type="number" id="mes" name="mes" required min="1" max="12" required>
|
|
||||||
<label for="mayor">Mayor:</label>
|
|
||||||
<input type="number" id="mayor" name="mayor" required min="0" max="99" value="0" required>
|
|
||||||
<label for="menor">Menor:</label>
|
|
||||||
<input type="number" id="menor" name="menor" required min="0" max="99" value="0" required>
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
<button type="submit">Upload</button>
|
<div class="form-group row">
|
||||||
|
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<label for="anio" >Año:</label>
|
||||||
|
<input type="number" id="anio" name="anio" class="form-control" required min="23" max="30">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<label for="mes" >Mes:</label>
|
||||||
|
<input type="number" id="mes" name="mes" class="form-control" required min="1" max="12">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<label for="mayor" >Mayor:</label>
|
||||||
|
<input type="number" id="mayor" name="mayor" class="form-control" required min="0" max="99" value="0">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-2">
|
||||||
|
<label for="menor">Menor:</label>
|
||||||
|
<input type="number" id="menor" name="menor" class="form-control" required min="0" max="99" value="0">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="id_version">version </label>
|
||||||
|
<input id="id_version" type="text" name="version" class="form-control" required>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-primary" type="submit">Upload</button>
|
||||||
</form>
|
</form>
|
||||||
<input type="hidden" id="id_token" name="token" value="{{ token }}">
|
<input type="hidden" id="id_token" name="token" value="{{ token }}">
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script>
|
<script>
|
||||||
|
var actualVersionSystem = document.querySelector('#id_sistema')
|
||||||
|
|
||||||
var currentYear = (new Date()).getFullYear();
|
var currentYear = (new Date()).getFullYear();
|
||||||
var currentMonthNUm = (new Date()).getMonth() +1;
|
var currentMonthNUm = (new Date()).getMonth() +1;
|
||||||
console.log('currentMonth',currentMonthNUm)
|
|
||||||
|
|
||||||
var anio = document.getElementById("anio");
|
var anio = document.getElementById("anio");
|
||||||
anio.value = currentYear.toString().slice(-2);
|
anio.value = currentYear.toString().slice(-2);
|
||||||
@@ -55,8 +75,31 @@
|
|||||||
mayor.addEventListener("change", updateVersion);
|
mayor.addEventListener("change", updateVersion);
|
||||||
menor.addEventListener("change", updateVersion);
|
menor.addEventListener("change", updateVersion);
|
||||||
|
|
||||||
|
actualVersionSystem.addEventListener('change',()=>{
|
||||||
|
getActualVersion()
|
||||||
|
})
|
||||||
|
|
||||||
|
actualVersionSystem.addEventListener('load', getActualVersion())
|
||||||
|
|
||||||
|
function getActualVersion(){
|
||||||
|
let options = actualVersionSystem.options;
|
||||||
|
let selectedIndex = actualVersionSystem.selectedIndex;
|
||||||
|
let selectedOption = options[selectedIndex];
|
||||||
|
|
||||||
|
let sistemaId = selectedOption.value;
|
||||||
|
let sistemaVersion = selectedOption.text.match(/\((.*)\)/)[1];
|
||||||
|
let sistemaVersionArray = sistemaVersion.split(".");
|
||||||
|
anio.value =sistemaVersionArray[0]
|
||||||
|
mes.value =sistemaVersionArray[1]
|
||||||
|
mayor.value=sistemaVersionArray[2]
|
||||||
|
menor.value=sistemaVersionArray[3]
|
||||||
|
|
||||||
|
version.value = sistemaVersion
|
||||||
|
//console.log(sistemaVersion, sistemaVersionArray)
|
||||||
|
}
|
||||||
|
|
||||||
function updateVersion() {
|
function updateVersion() {
|
||||||
console.log('sss',anio.value.toString() )
|
|
||||||
version.value = anio.value.toString()+"."+mes.value.toString() +"."+mayor.value.toString()+"."+menor.value.toString();
|
version.value = anio.value.toString()+"."+mes.value.toString() +"."+mayor.value.toString()+"."+menor.value.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user