source: firmaeventos/eventos/views.py @ 5d88f36

Last change on this file since 5d88f36 was 5d88f36, checked in by lhernandez <lhernandez@…>, 7 years ago

Agregada class para comporbar el proceso del evento

  • Property mode set to 100755
File size: 9.6 KB
Line 
1# -*- encoding: utf-8 -*-
2
3import os
4import requests
5from django.conf import settings
6from django.contrib import messages
7from django.contrib.auth.mixins import LoginRequiredMixin
8from django.core.files.base import ContentFile
9from django.core.files.storage import default_storage
10from django.core.urlresolvers import reverse_lazy
11from django.http import JsonResponse
12from django.shortcuts import (
13    redirect
14)
15from django.views import View
16from django.views.generic import (
17    ListView, FormView
18)
19from django.views.generic.detail import DetailView
20
21from multi_form_view import MultiModelFormView
22
23from .forms import *
24from participantes.forms import (
25    FormsetParticipanteEvento
26)
27from .models import Evento
28from participantes.models import (
29    Participante, ParticipanteEvento
30)
31
32
33def handle_uploaded_file(file, name):
34    with open('%s/%s' % (settings.TMP, name), 'wb+') as destination:
35        for chunk in file.chunks():
36            destination.write(chunk)
37
38class RegisterEvent(LoginRequiredMixin, FormView):
39    """!
40    Muestra el formulario de registro de usuarios
41
42    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
43    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
44    @date 20-11-2017
45    @version 1.0.0
46    """
47
48    template_name = "register.event.html"
49    form_class = EventoForm
50    form_participante = FormsetParticipanteEvento
51    success_url = reverse_lazy('base:inicio')
52
53    def get_context_data(self, **kwargs):
54        context = super(RegisterEvent, self).get_context_data(**kwargs)
55        if 'form' not in context:
56            context['form'] = self.form_class()
57        if 'form2' not in context:
58            context['form2'] = self.form_participante(queryset=Participante.objects.none())
59        return context
60
61    def post(self, request, *args, **kwargs):
62        file =  request.FILES['file']
63        handle_uploaded_file(request.FILES['file'], file)
64        ruta = '%s/%s' % (settings.TMP, file)
65        file = open(ruta, 'rb')
66        files = {'file': file}
67        try:
68            #r = requests.post('https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/cargar', verify=False, headers={'Authorization': 'Basic YWRtaW46YWRtaW4='}, files=files)
69            r = requests.post('https://192.168.12.154:8443/Murachi/0.1/archivos/cargar', verify=False, headers={'Authorization': 'Basic YWRtaW46YWRtaW4='}, files=files)
70            nuevo_participante = self.form_participante(request.POST)
71            consulta_api = r.json()['fileId']
72            # elimina el archivo si fue creado en la carpeta tmp
73            file.close()
74            os.unlink(ruta)
75        except Exception as e:
76            print (e)
77            file.close()
78            os.unlink(ruta)
79            messages.error(self.request, "Error al concetar al servidor y subir\
80                                          el archivo a la api Murachi")
81            return redirect(self.success_url)
82        try:
83            if self.form_class(request.POST).is_valid() and nuevo_participante.is_valid():
84                nuevo_evento = self.form_class(request.POST, request.FILES).save(commit=False)
85                nuevo_evento.serial = consulta_api
86                nuevo_evento.save()
87                # Control para guardar y asignar participantes al evento
88                for form in nuevo_participante:
89                    if form.cleaned_data.get('DELETE') and form.instance.pk:
90                        form.instance.delete()
91                    else:
92                        instance = form.save(commit=False)
93                        parametros = {
94                                        'nombres': instance.nombres,
95                                        'apellidos': instance.apellidos,
96                                        'correo': instance.correo
97                                        }
98                        nuevo_participante, create = Participante.objects.update_or_create(pasaporte=instance.pasaporte, defaults=parametros)
99                        asigna_evento = ParticipanteEvento(
100                                        fk_participante=nuevo_participante,
101                                        fk_evento=nuevo_evento)
102                        asigna_evento.save()
103                messages.success(self.request, "El usaurio %s, ha creado con exito,\
104                                            un nuevo envento %s" %
105                                 (str(self.request.user),
106                                  str(nuevo_evento)))
107            else:
108                messages.error(self.request, "Existe un error en el\
109                                              Formualario %s %s" %
110                               (self.form_class(request.POST).errors,
111                                self.form_participante(request.POST).errors))
112        except Exception as e:
113            print (e)
114            messages.error(self.request, "Esta intentado realizar una\
115                                          accion incorrecta")
116
117        return redirect(self.success_url)
118
119
120class ListEvent(ListView):
121    """!
122    Muestra el listado de eventos
123
124    @author Rodrigo Boet (rboet at cenditel.gob.ve)
125    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
126    @date 20-11-2017
127    @version 1.0.0
128    """
129    model = Evento
130    template_name = "evento.list.html"
131    paginate_by = 5
132
133
134class SignEvent(FormView):
135    """!
136    Muestra el formulario para buscar y luego firmar documento
137
138    @author Rodrigo Boet (rboet at cenditel.gob.ve)
139    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
140    @date 20-11-2017
141    @version 1.0.0
142    """
143    form_class = FirmaEventoForm
144    template_name = "evento.firma.html"
145
146    def get_context_data(self, **kwargs):
147        """!
148        Metodo que permite cargar de nuevo valores en los datos de contexto de la vista
149
150        @author Rodrigo Boet (rboet at cenditel.gob.ve)
151        @copyright GNU/GPLv3
152        @date 20-11-2017
153        @param self <b>{object}</b> Objeto que instancia la clase
154        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
155        @return Retorna los datos de contexto
156        """
157        kwargs['nombre_evento'] = Evento.objects.get(pk=int(self.kwargs['pk']))
158        return super(SignEvent, self).get_context_data(**kwargs)
159
160
161class DetailEvent(DetailView):
162    """!
163    Muestra el detalle del evento
164
165    @author Rodrigo Boet (rboet at cenditel.gob.ve)
166    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
167    @date 20-11-2017
168    @version 1.0.0
169    """
170    model = Evento
171    template_name = "evento.detail.html"
172
173    def get_context_data(self, **kwargs):
174        evento = int(self.kwargs['pk'])
175        context = super(DetailEvent, self).get_context_data(**kwargs)
176        try:
177            participante_evento = ParticipanteEvento.objects.select_related().filter(fk_evento=evento)
178            falta_porfirma = participante_evento.filter(firma=False).count()
179        except Exception as e:
180            print(e)
181            participante_evento = None
182            falta_porfirma = None
183        context['participantes'] = participante_evento
184        context['num_firma'] = falta_porfirma
185        return context
186
187
188class EventoProcesado(View):
189    """!
190    Clase que permite consultar si el evento se encuentra disponible para firmar
191
192    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
193    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
194    @date 27-11-2017
195    @version 1.0.0
196    """
197    model = Evento
198
199    def get(self, request):
200        """!
201        Metodo que permite verificar si el documento esta procesado
202
203        @author Leonel P. Hernandez M (lhernandez at cenditel.gob.ve)
204        @copyright GNU/GPLv3
205        @date 27-11-2017
206        @param request <b>{object}</b> Objeto que contiene la petición
207        @return Retorna un Json con la respuesta
208        """
209        evento_id = request.GET.get('event_id', None)
210        mensaje = ''
211        procesando = False
212        if evento_id is not None:
213            try:
214                evento_pro = self.model.objects.get(pk=evento_id)
215            except:
216                print(e)
217                procesando = True
218                mensaje += 'No se encuentra un evento con ese serial'
219        else:
220            evento_pro = None
221            procesando = True
222            mensaje += 'No puedes enviar un evento vacio'
223
224        if evento_pro.procesando:
225            procesando = True
226            mensaje += 'No puedes firmar el documento, en este momento\
227                        se encuentra ocupado por otro Usuario'
228        else:
229            procesando = False
230            mensaje += 'Puedes Firmar el Documento'
231        data = {'validate': procesando, 'mensaje': mensaje}
232        return JsonResponse(data, safe=False)
233
234    def post(self, request):
235        """!
236        Metodo que permite cambiar el valor procesado al  evento
237
238        @author Leonel P. Hernandez M (lhernandez at cenditel.gob.ve)
239        @copyright GNU/GPLv3
240        @date 27-11-2017
241        @param request <b>{object}</b> Objeto que contiene la petición
242        @return Retorna un Json con la respuesta
243        """
244        evento_id = request.POST.get('event_id', None)
245        if evento_id is not None:
246            try:
247                evento = self.model.objects.get(pk=evento_id)
248                evento.procesando = not evento.procesando
249                evento.save()
250                validado = True
251            except:
252                print(e)
253                validado = False
254        return JsonResponse(validado, safe=False)
Note: See TracBrowser for help on using the repository browser.