source: seguimiento_proyectos/sepai/proyectos/forms.py @ a7d9305

desarrollo
Last change on this file since a7d9305 was a7d9305, checked in by lhernandez <lhernandez@…>, 7 años ago

Modificado templates para implementar la funcionalidad del registro de sub-proyectos asociados a un poryecto, preparando modelo de datos para el sub-proyecto.

  • Propiedad mode establecida a 100644
File size: 14.8 KB
Línea 
1from django import forms
2from django.forms import (
3    ModelForm, modelform_factory, modelformset_factory, inlineformset_factory,
4    formset_factory
5)
6from django.forms.widgets import (
7    CheckboxInput, RadioSelect
8)
9from django.utils.safestring import mark_safe
10
11from utils.views import obtenerEstados, listMunicipios
12from .models import *
13from .constantes import TIPO_PROYECTO
14
15
16
17
18class HorizRadioRenderer(forms.RadioSelect.renderer):
19    """ this overrides widget method to put radio buttons horizontally
20        instead of vertically.
21    """
22    def render(self):
23        """Outputs radios"""
24        return mark_safe(u'\n'.join([u'%s\n' % w for w in self]))
25
26
27class FormularioRegProyecto(ModelForm):
28    """!
29    Clase que crea el formulario para la creacion de proyectos
30
31    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
32    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
33    @date 09-01-2017
34    @version 1.0.0
35    """
36    estados = obtenerEstados()
37    municipios = listMunicipios()
38    estado = forms.ChoiceField(required=True, choices=[("", "Seleccione Estado")] +
39    [(est["id"], est["nombre"]) for est in estados])
40    estado.widget.attrs.update({'class':'form-control'})
41    municipio = forms.ChoiceField(required=True, choices=[("", "Seleccione Municipio")] +
42    [(mun["id"], mun["nombre"]) for mun in municipios])
43    municipio.widget.attrs.update({'class':'form-control'})
44
45    class Meta:
46        model = Proyecto
47        fields = '__all__'
48        widgets = {
49            'fk_tipo': forms.RadioSelect(renderer=HorizRadioRenderer),
50        }
51
52    def __init__(self, *args, **kwargs):
53        super(FormularioRegProyecto, self).__init__(*args, **kwargs)
54        self.fields['fk_user'].widget = forms.HiddenInput()
55        self.fields['fk_user'].widget.attrs.update(
56                                            {'class': 'form-control',
57                                             'readonly':
58                                             'readonly'})
59        self.fields['fk_tipo'].empty_label = None
60        self.fields['codigo'].widget.attrs.update(
61                                            {'class': 'form-control',
62                                             'placeholder':
63                                             'Codigo'})
64        self.fields['codigo'].label = "Codigo del Proyecto"
65        self.fields['nombre'].widget.attrs.update(
66                                            {'class': 'form-control',
67                                             'placeholder':
68                                             'Nombre del Proyecto'})
69        self.fields['nombre'].label = "Nombre de Proyecto"
70        self.fields['descripcion'].widget.attrs.update(
71                                            {'class': 'form-control textarea',
72                                            'placeholder':
73                                             'Descripción'})
74        self.fields['descripcion'].label = "Descripción"
75        self.fields['objetivo_general'].widget.attrs.update(
76                                            {'class': 'form-control',
77                                             'placeholder':
78                                             'Objetivo general'})
79        self.fields['objetivo_general'].label = "Objetivo General"
80        self.fields['justificacion'].widget.attrs.update(
81                                            {'class': 'form-control textarea',
82                                             'placeholder':
83                                             'Justificación'})
84        self.fields['justificacion'].label = "Justificación"
85        self.fields['plurianual'].widget.attrs.update({'class': 'form-control',
86                                                       'data-toggle': 'toggle',
87                                                       'data-on': 'Si',
88                                                       'data-off': 'No',
89                                                       'checked': 'checked'})
90        self.fields['plurianual'].label = "¿El Proyecto es Plurianual?"
91        self.fields['poan'].widget.attrs.update({'class': 'form-control',
92                                                 'data-toggle': 'toggle',
93                                                 'data-on': 'Si',
94                                                 'data-off': 'No',
95                                                 'checked': 'checked'})
96        self.fields['poan'].label = "¿Es Proyecto POA?"
97        self.fields['fecha_inicio'].widget.attrs.update(
98                                            {'class': 'form-control',
99                                             'placeholder':
100                                             'Fecha de Inicio',
101                                             'readonly':
102                                             'readonly'})
103        self.fields['fecha_inicio'].label = "Fecha de Inicio"
104        self.fields['fecha_culminacion'].widget.attrs.update(
105                                            {'class': 'form-control',
106                                             'placeholder':
107                                             'Fecha de Culminación',
108                                             'readonly':
109                                             'readonly'})
110        self.fields['fecha_culminacion'].label = "Fecha de Culminación"
111        self.fields['monto_anho_anterior'].widget.attrs.update(
112                                            {'class': 'form-control',
113                                             'placeholder':
114                                             'Monto del Proyecto años anteriores'})
115        self.fields['monto_anho_anterior'].label = "Monto del Proyecto años anteriores"
116        self.fields['monto_anho_proximo'].widget.attrs.update(
117                                            {'class': 'form-control',
118                                             'placeholder':
119                                             'Valor del proyecto para los Proximos años'})
120        self.fields['monto_anho_proximo'].label = "Valor del proyecto para los Proximos años"
121        self.fields['monto_total'].widget.attrs.update(
122                                            {'class': 'form-control',
123                                             'placeholder':
124                                             'Monto total del proyecto'})
125        self.fields['monto_total'].label = "Monto total del proyecto"
126        self.fields['localidad'].widget.attrs.update(
127                                            {'class': 'form-control'})
128        self.fields['localidad'].label = "Parroquia"
129        self.fields['activo'].widget.attrs.update({'class': 'form-control',
130                                                   'data-toggle': 'toggle',
131                                                   'data-on': 'Si',
132                                                   'data-off': 'No',
133                                                   'checked': 'checked'})
134        self.fields['activo'].label = "¿El Proyecto estara Activo?"
135
136    def clean(self):
137        cleaned_data = super(FormularioRegProyecto, self).clean()
138        monto_anterior = cleaned_data.get("monto_anho_anterior")
139        monto_proximo = cleaned_data.get("monto_anho_proximo")
140        monto_total = cleaned_data.get("monto_total")
141
142        if monto_anterior:
143            msg = "El monto %s es negativo, el monto debe ser mayor a 0\
144                  " % (monto_anterior)
145            if not monto_anterior > 0:
146                self.add_error('monto_anho_anterior', msg)
147            else:
148                pass
149        if monto_proximo:
150            msg = "El monto %s es negativo, el monto debe ser mayor a 0\
151                  " % (monto_proximo)
152            if not monto_proximo > 0:
153                self.add_error('monto_anho_proximo', msg)
154            else:
155                pass
156        if monto_total:
157            msg = "El monto %s es negativo, el monto debe ser mayor a 0\
158                  " % (monto_total)
159            if not monto_total > 0:
160                self.add_error('monto_total', msg)
161            else:
162                pass
163
164
165class FormularioObjEspProy(ModelForm):
166    """!
167    Clase que crea el formulario para los objetivos especificos
168
169    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
170    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
171    @date 09-01-2017
172    @version 1.0.0
173    """
174
175    class Meta:
176        model = ObjetivosEspecificosProy
177        exclude = ['fk_proyecto']
178
179    def __init__(self, *args, **kwargs):
180        super(FormularioObjEspProy, self).__init__(*args, **kwargs)
181        self.fields['objetivos_especificos'].widget.attrs.update(
182                                            {'class': 'form-control',
183                                             'placeholder':
184                                             'Objetivo Especifico'})
185
186FormsetModelObj = modelform_factory(ObjetivosEspecificosProy,
187                               form=FormularioObjEspProy,
188                               fields=('objetivos_especificos',))
189
190FormsetObj = inlineformset_factory(Proyecto, ObjetivosEspecificosProy, form=FormularioObjEspProy,
191                                                fields=('objetivos_especificos',), fk_name='fk_proyecto',
192                                                min_num=1, extra=0, validate_min=True, can_delete=True)
193
194
195class FormularioRespTec(ModelForm):
196    """!
197    Clase que crea el formulario para el responsable tecnico del proyecto
198
199    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
200    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
201    @date 09-01-2017
202    @version 1.0.0
203    """
204    institucion = forms.CharField()
205
206    class Meta:
207        model = ResponsableTecnico
208        exclude = ['fk_proyecto']
209
210    def __init__(self, *args, **kwargs):
211        super(FormularioRespTec, self).__init__(*args, **kwargs)
212        self.fields['institucion'].widget.attrs.update(
213                                            {'class': 'form-control',
214                                             'disabled': 'disabled'})
215        self.fields['institucion'].required = False
216        self.fields['institucion'].label = 'institución'
217        self.fields['fk_documento'].widget.attrs.update(
218                                            {'class': 'form-control',
219                                             'placeholder':
220                                             'Tipo de Documento'})
221        self.fields['fk_documento'].label = 'Tipo de Documento'
222        self.fields['cedula'].widget.attrs.update(
223                                            {'class': 'form-control',
224                                             'placeholder':
225                                             'Cedula'})
226        self.fields['nombres'].widget.attrs.update(
227                                            {'class': 'form-control',
228                                             'placeholder':
229                                             'Nombres'})
230        self.fields['nombres'].label = 'Nombres'
231        self.fields['apellidos'].widget.attrs.update(
232                                            {'class': 'form-control',
233                                             'placeholder':
234                                             'Apellidos'})
235        self.fields['apellidos'].label = 'Apellidos'
236        self.fields['correo'].widget.attrs.update(
237                                            {'class': 'form-control',
238                                             'placeholder':
239                                             'Correo'})
240        self.fields['correo'].label = 'Correo'
241        self.fields['numero_telefono'].widget.attrs.update(
242                                            {'class': 'form-control',
243                                             'placeholder':
244                                             'Numero de Telefono',
245                                             'data-inputmask': "'mask': ['0999-999.99.99', '09999999999']",
246                                             'data-mask': 'data-mask'})
247        self.fields['numero_telefono'].label = 'Numero de telefono'
248
249
250
251class FormularioRespGere(ModelForm):
252    """!
253    Clase que crea el formulario para el responsable gerente del proyecto
254
255    @author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
256    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
257    @date 09-01-2017
258    @version 1.0.0
259    """
260    class Meta:
261        model = ResponsableGerente
262        exclude = ['fk_proyecto']
263
264    def __init__(self, *args, **kwargs):
265        super(FormularioRespGere, self).__init__(*args, **kwargs)
266        self.fields['fk_documento'].widget.attrs.update(
267                                            {'class': 'form-control',
268                                             'placeholder':
269                                             'Tipo de Documento'})
270        self.fields['fk_documento'].label = 'Tipo de Documento'
271        self.fields['cedula'].widget.attrs.update(
272                                            {'class': 'form-control',
273                                             'placeholder':
274                                             'Cedula'})
275        self.fields['nombres'].widget.attrs.update(
276                                            {'class': 'form-control',
277                                             'placeholder':
278                                             'Nombres'})
279        self.fields['nombres'].label = 'Nombres'
280        self.fields['apellidos'].widget.attrs.update(
281                                            {'class': 'form-control',
282                                             'placeholder':
283                                             'Apellidos'})
284        self.fields['apellidos'].label = 'Apellidos'
285        self.fields['correo'].widget.attrs.update(
286                                            {'class': 'form-control',
287                                             'placeholder':
288                                             'Correo',
289                                             'data-inputmask-regex':
290                                             "[a-za-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?",
291                                             'data-mask': 'data-mask'})
292        self.fields['correo'].label = 'Correo'
293        self.fields['numero_telefono'].widget.attrs.update(
294                                            {'class': 'form-control',
295                                             'placeholder':
296                                             'Numero de Telefono',
297                                             'data-inputmask': "'mask': ['0999-999.99.99', '09999999999']",
298                                             'data-mask': 'data-mask'})
299        self.fields['numero_telefono'].label = 'Numero de Telefono'
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.