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'