from django import forms
from django.forms import (
ModelForm, modelform_factory, modelformset_factory, inlineformset_factory,
formset_factory
)
from django.forms.widgets import (
CheckboxInput, RadioSelect
)
from django.utils.safestring import mark_safe
from utils.views import obtenerEstados, listMunicipios
from .models import *
from .constantes import TIPO_PROYECTO
class HorizRadioRenderer(forms.RadioSelect.renderer):
""" this overrides widget method to put radio buttons horizontally
instead of vertically.
"""
def render(self):
"""Outputs radios"""
return mark_safe(u'\n'.join([u'%s\n' % w for w in self]))
class FormularioRegProyecto(ModelForm):
"""!
Clase que crea el formulario para la creacion de proyectos
@author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
@copyright GNU Public License versión 2 (GPLv2)
@date 09-01-2017
@version 1.0.0
"""
estados = obtenerEstados()
municipios = listMunicipios()
estado = forms.ChoiceField(required=True, choices=[("", "Seleccione Estado")] +
[(est["id"], est["nombre"]) for est in estados])
estado.widget.attrs.update({'class':'form-control'})
municipio = forms.ChoiceField(required=True, choices=[("", "Seleccione Municipio")] +
[(mun["id"], mun["nombre"]) for mun in municipios])
municipio.widget.attrs.update({'class':'form-control'})
class Meta:
model = Proyecto
fields = '__all__'
widgets = {
'fk_tipo': forms.RadioSelect(renderer=HorizRadioRenderer),
}
def __init__(self, *args, **kwargs):
super(FormularioRegProyecto, self).__init__(*args, **kwargs)
self.fields['fk_user'].widget = forms.HiddenInput()
self.fields['fk_user'].widget.attrs.update(
{'class': 'form-control',
'readonly':
'readonly'})
self.fields['fk_tipo'].empty_label = None
self.fields['codigo'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Codigo'})
self.fields['codigo'].label = "Codigo del Proyecto"
self.fields['nombre'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Nombre del Proyecto'})
self.fields['nombre'].label = "Nombre de Proyecto"
self.fields['descripcion'].widget.attrs.update(
{'class': 'form-control textarea',
'placeholder':
'Descripción'})
self.fields['descripcion'].label = "Descripción"
self.fields['objetivo_general'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Objetivo general'})
self.fields['objetivo_general'].label = "Objetivo General"
self.fields['justificacion'].widget.attrs.update(
{'class': 'form-control textarea',
'placeholder':
'Justificación'})
self.fields['justificacion'].label = "Justificación"
self.fields['plurianual'].widget.attrs.update({'class': 'form-control',
'data-toggle': 'toggle',
'data-on': 'Si',
'data-off': 'No',
'checked': 'checked'})
self.fields['plurianual'].label = "¿El Proyecto es Plurianual?"
self.fields['poan'].widget.attrs.update({'class': 'form-control',
'data-toggle': 'toggle',
'data-on': 'Si',
'data-off': 'No',
'checked': 'checked'})
self.fields['poan'].label = "¿Es Proyecto POA?"
self.fields['fecha_inicio'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Fecha de Inicio',
'readonly':
'readonly'})
self.fields['fecha_inicio'].label = "Fecha de Inicio"
self.fields['fecha_culminacion'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Fecha de Culminación',
'readonly':
'readonly'})
self.fields['fecha_culminacion'].label = "Fecha de Culminación"
self.fields['monto_anho_anterior'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Monto del Proyecto años anteriores'})
self.fields['monto_anho_anterior'].label = "Monto del Proyecto años anteriores"
self.fields['monto_anho_proximo'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Valor del proyecto para los Proximos años'})
self.fields['monto_anho_proximo'].label = "Valor del proyecto para los Proximos años"
self.fields['monto_total'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Monto total del proyecto'})
self.fields['monto_total'].label = "Monto total del proyecto"
self.fields['localidad'].widget.attrs.update(
{'class': 'form-control'})
self.fields['localidad'].label = "Parroquia"
self.fields['activo'].widget.attrs.update({'class': 'form-control',
'data-toggle': 'toggle',
'data-on': 'Si',
'data-off': 'No',
'checked': 'checked'})
self.fields['activo'].label = "¿El Proyecto esta Activo?"
def clean(self):
cleaned_data = super(FormularioRegProyecto, self).clean()
monto_anterior = cleaned_data.get("monto_anho_anterior")
monto_proximo = cleaned_data.get("monto_anho_proximo")
monto_total = cleaned_data.get("monto_total")
if monto_anterior:
msg = "El monto %s es negativo, el monto debe ser mayor a 0\
" % (monto_anterior)
if not monto_anterior > 0:
self.add_error('monto_anho_anterior', msg)
else:
pass
if monto_proximo:
msg = "El monto %s es negativo, el monto debe ser mayor a 0\
" % (monto_proximo)
if not monto_proximo > 0:
self.add_error('monto_anho_proximo', msg)
else:
pass
if monto_total:
msg = "El monto %s es negativo, el monto debe ser mayor a 0\
" % (monto_total)
if not monto_total > 0:
self.add_error('monto_total', msg)
else:
pass
class FormularioObjEspProy(ModelForm):
"""!
Clase que crea el formulario para los objetivos especificos
@author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
@copyright GNU Public License versión 2 (GPLv2)
@date 09-01-2017
@version 1.0.0
"""
class Meta:
model = ObjetivosEspecificosProy
exclude = ['fk_proyecto']
def __init__(self, *args, **kwargs):
super(FormularioObjEspProy, self).__init__(*args, **kwargs)
self.fields['objetivos_especificos'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Objetivo Especifico'})
FormsetModelObj = modelform_factory(ObjetivosEspecificosProy,
form=FormularioObjEspProy,
fields=('objetivos_especificos',))
FormsetObj = inlineformset_factory(Proyecto, ObjetivosEspecificosProy, form=FormularioObjEspProy,
fields=('objetivos_especificos',), fk_name='fk_proyecto',
min_num=1, extra=0, validate_min=True, can_delete=True)
class FormularioRespTec(ModelForm):
"""!
Clase que crea el formulario para el responsable tecnico del proyecto
@author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
@copyright GNU Public License versión 2 (GPLv2)
@date 09-01-2017
@version 1.0.0
"""
institucion = forms.CharField()
class Meta:
model = ResponsableTecnico
exclude = ['fk_proyecto']
def __init__(self, *args, **kwargs):
super(FormularioRespTec, self).__init__(*args, **kwargs)
self.fields['institucion'].widget.attrs.update(
{'class': 'form-control',
'disabled': 'disabled'})
self.fields['institucion'].required = False
self.fields['institucion'].label = 'institución'
self.fields['fk_documento'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Tipo de Documento'})
self.fields['fk_documento'].label = 'Tipo de Documento'
self.fields['cedula'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Cedula'})
self.fields['nombres'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Nombres'})
self.fields['nombres'].label = 'Nombres'
self.fields['apellidos'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Apellidos'})
self.fields['apellidos'].label = 'Apellidos'
self.fields['correo'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Correo'})
self.fields['correo'].label = 'Correo'
self.fields['numero_telefono'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Numero de Telefono',
'data-inputmask': "'mask': ['0999-999.99.99', '09999999999']",
'data-mask': 'data-mask'})
self.fields['numero_telefono'].label = 'Numero de telefono'
class FormularioRespGere(ModelForm):
"""!
Clase que crea el formulario para el responsable gerente del proyecto
@author Ing. Leonel P. Hernandez M. (lhernandez at cenditel.gob.ve)
@copyright GNU Public License versión 2 (GPLv2)
@date 09-01-2017
@version 1.0.0
"""
class Meta:
model = ResponsableGerente
exclude = ['fk_proyecto']
def __init__(self, *args, **kwargs):
super(FormularioRespGere, self).__init__(*args, **kwargs)
self.fields['fk_documento'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Tipo de Documento'})
self.fields['fk_documento'].label = 'Tipo de Documento'
self.fields['cedula'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Cedula'})
self.fields['nombres'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Nombres'})
self.fields['nombres'].label = 'Nombres'
self.fields['apellidos'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Apellidos'})
self.fields['apellidos'].label = 'Apellidos'
self.fields['correo'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Correo',
'data-inputmask-regex':
"[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])?",
'data-mask': 'data-mask'})
self.fields['correo'].label = 'Correo'
self.fields['numero_telefono'].widget.attrs.update(
{'class': 'form-control',
'placeholder':
'Numero de Telefono',
'data-inputmask': "'mask': ['0999-999.99.99', '09999999999']",
'data-mask': 'data-mask'})
self.fields['numero_telefono'].label = 'Numero de Telefono'