source: firmaeventos/eventos/views.py @ a1de3f1

Last change on this file since a1de3f1 was 61f3a75, checked in by Leonel Hernandez <leonelphm@…>, 7 years ago

Optimizado de registro evento

  • Property mode set to 100644
File size: 6.0 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.shortcuts import (
12    redirect
13)
14from django.views.generic import ListView, FormView
15
16from multi_form_view import MultiModelFormView
17
18from .forms import *
19from participantes.forms import (
20    FormsetParticipanteEvento
21)
22from .models import Evento
23from participantes.models import (
24    Participante, ParticipanteEvento
25)
26
27
28def handle_uploaded_file(file, name):
29    with open('%s/%s' % (settings.TMP, name), 'wb+') as destination:
30        for chunk in file.chunks():
31            destination.write(chunk)
32
33class RegisterEvent(LoginRequiredMixin, FormView):
34    """!
35    Muestra el formulario de registro de usuarios
36
37    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
38    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
39    @date 20-11-2017
40    @version 1.0.0
41    """
42
43    template_name = "register.event.html"
44    form_class = EventoForm
45    form_participante = FormsetParticipanteEvento
46    success_url = reverse_lazy('base:inicio')
47
48    def get_context_data(self, **kwargs):
49        context = super(RegisterEvent, self).get_context_data(**kwargs)
50        if 'form' not in context:
51            context['form'] = self.form_class()
52        if 'form2' not in context:
53            context['form2'] = self.form_participante(queryset=Participante.objects.none())
54        return context
55
56    def post(self, request, *args, **kwargs):
57        nuevo_evento = self.form_class(request.POST, request.FILES).save(commit=False)
58        file =  request.FILES['file']
59        handle_uploaded_file(request.FILES['file'], file)
60        ruta = '%s/%s' % (settings.TMP, file)
61        file = open(ruta, 'rb')
62        files = {'file': file}
63        try:
64            r = requests.post('https://murachi.cenditel.gob.ve/Murachi/0.1/archivos/cargar', verify=False, headers={'Authorization': 'Basic YWRtaW46YWRtaW4='}, files=files)
65            nuevo_participante = self.form_participante(request.POST)
66            consulta_api = r.json()['fileId']
67            # elimina el archivo si fue creado en la carpeta tmp
68            file.close()
69            os.unlink(ruta)
70        except Exception as e:
71            print (e)
72            file.close()
73            os.unlink(ruta)
74            messages.error(self.request, "Error al concetar al servidor y subir\
75                                          el archivo a la api Murachi")
76            return redirect(self.success_url)
77        try:
78            if self.form_class(request.POST).is_valid() and nuevo_participante.is_valid():
79                nuevo_evento.serial = consulta_api
80                nuevo_evento.save()
81                # Control para guardar y asignar participantes al evento
82                for form in nuevo_participante:
83                    if form.cleaned_data.get('DELETE') and form.instance.pk:
84                        form.instance.delete()
85                    else:
86                        instance = form.save(commit=False)
87                        parametros = {
88                                        'nombres': instance.nombres,
89                                        'apellidos': instance.apellidos,
90                                        'correo': instance.correo
91                                        }
92                        nuevo_participante, create = Participante.objects.update_or_create(pasaporte=instance.pasaporte, defaults=parametros)
93                        asigna_evento = ParticipanteEvento(
94                                        fk_participante=nuevo_participante,
95                                        fk_evento=nuevo_evento)
96                        asigna_evento.save()
97                messages.success(self.request, "El usaurio %s, ha creado con exito,\
98                                            un nuevo envento %s" %
99                                 (str(self.request.user),
100                                  str(nuevo_evento)))
101            else:
102                messages.error(self.request, "Existe un error en el\
103                                              Formualario %s %s" %
104                               (self.form_class(request.POST).errors,
105                                self.form_participante(request.POST).errors))
106        except Exception as e:
107            print (e)
108            messages.error(self.request, "Esta intentado realizar una\
109                                          accion incorrecta")
110
111        return redirect(self.success_url)
112
113
114class ListEvent(ListView):
115    """!
116    Muestra el listado de eventos
117
118    @author Rodrigo Boet (rboet at cenditel.gob.ve)
119    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
120    @date 20-11-2017
121    @version 1.0.0
122    """
123    model = Evento
124    template_name = "evento.list.html"
125    paginate_by = 5
126   
127class SignEvent(FormView):
128    """!
129    Muestra el formulario para buscar y luego firmar documento
130
131    @author Rodrigo Boet (rboet at cenditel.gob.ve)
132    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versión 3 (GPLv3)</a>
133    @date 20-11-2017
134    @version 1.0.0
135    """
136    form_class = FirmaEventoForm
137    template_name = "evento.firma.html"
138   
139    def get_context_data(self, **kwargs):
140        """!
141        Metodo que permite cargar de nuevo valores en los datos de contexto de la vista
142   
143        @author Rodrigo Boet (rboet at cenditel.gob.ve)
144        @copyright GNU/GPLv3
145        @date 20-11-2017
146        @param self <b>{object}</b> Objeto que instancia la clase
147        @param kwargs <b>{object}</b> Objeto que contiene los datos de contexto
148        @return Retorna los datos de contexto
149        """
150        kwargs['nombre_evento'] = Evento.objects.get(pk=int(self.kwargs['pk']))
151        return super(SignEvent, self).get_context_data(**kwargs)
Note: See TracBrowser for help on using the repository browser.