Beispiel #1
0
class RifForm(forms.Form):
    """!
    Clase que contiene el campo del RIF a incorporar en un formulario

    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    @date 06-05-2016
    @version 2.0.0
    """

    ## R.I.F. de la Unidad Económica que identifica al usuario en el sistema
    rif = RifField()

    def clean_rif(self):
        """!
        Método que permite validar el campo de rif

        @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
        @date 27-04-2016
        @param self <b>{object}</b> Objeto que instancia la clase
        @return Devuelve un mensaje de error en caso de que el rif no sea válido o no se encuentre registrado en el
                sistema, en caso contrario devuelve el valor actual del campo
        """
        rif = self.cleaned_data['rif']

        if not verificar_rif(rif):
            raise forms.ValidationError(_("El RIF es inválido"))
        elif not User.objects.filter(username=rif):
            raise forms.ValidationError(_("El RIF no esta registrado"))

        return rif
Beispiel #2
0
class UnidadEconomicaForm(DirectorioForm):
    """!
    Formulario para el registro de la unidad económica

    @author Eveli Ramírez (eramirez at cenditel.gob.ve)
    @copyright <a href='​http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    @date 04-05-2016
    @version 2.0
    """

    ## R.I.F. de la Unidad Económica que identifica al usuario en el sistema
    rif = RifField()
    rif.widget = RifWidgetReadOnly()

    ## Nombre Comercial de la Unidad Económica
    nombre_ue = CharField(
        label=_("Nombre Comercial: "),
        max_length=30,
        widget=TextInput(
            attrs={
                'class': 'form-control',
                'data-toggle': 'tooltip',
                'size': '50',
                'title': _(
                    "Nombre Comercial de la Unidad Económica a registrar"),
                'readonly': 'readonly'
            }))

    ## Razón Social
    razon_social = CharField(label=_("Razón Social: "),
                             widget=TextInput(
                                 attrs={
                                     'class': 'form-control input-sm',
                                     'readonly': 'readonly',
                                     'title': _("Razón Social"),
                                     'size': '50',
                                 }))

    ## Actividad económica principal
    actividad = ChoiceField(
        label=_("Actividad Económica Principal"),
        widget=Select(
            attrs={
                'class':
                'form-control',
                'data-rule-required':
                'true',
                'data-toggle':
                'tooltip',
                'title':
                _("Seleccione la Actividad Económica Principal que realiza"),
                'onchange':
                'deshabilitar_opcion(this.value)'
            }))

    ## Actividad económica secundaria
    actividad2 = ChoiceField(
        label=_("Actividad Económica Secundaria"),
        widget=Select(
            attrs={
                'class':
                'form-control',
                'data-toggle':
                'tooltip',
                'title':
                _("Seleccione la(s) Actividad(es) Economica(s) Secundaria(s) que realiza"
                  )
            }),
        required=False)

    ## Actividad económica secundaria (datatable)
    actividad2_tb = forms.CharField(
        label=_("Actividad Económica Secundaria"),
        widget=Select(
            attrs={
                'class':
                'form-control',
                'data-toggle':
                'tooltip',
                'title':
                _("Seleccione la(s) Actividad(es) Economica(s) Secundaria(s) que realiza"
                  )
            }),
        required=False)

    ## Organización comunal
    orga_comunal = ChoiceField(
        label=_("¿Es una organización comunal?"),
        choices=((True, ''), (False, '')),
        widget=CheckboxInput(
            attrs={
                'class':
                'seleccion_si_no',
                'data-rule-required':
                'true',
                'data-toggle':
                'tooltip',
                'title':
                _("¿Es una organización comunal?"),
                'value':
                'S',
                'onchange':
                "habilitar($(this).is(':checked'), tipo_comunal.id), habilitar($(this).is(':checked'), situr.id)",
            }))

    ## Tipo de organización comunal
    tipo_comunal = ChoiceField(
        label=_("Tipo de Organizacón Comunal: "),
        widget=Select(
            attrs={
                'class': 'form-control select2',
                'data-toggle': 'tooltip',
                'title': _("Seleccione el tipo de Organizacón Comunal"),
                'disabled': 'disabled'
            }),
        required=False)

    ## Código SITUR
    situr = CharField(
        label=_("Código SITUR:"),
        widget=TextInput(
            attrs={
                'class': 'form-control',
                'data-toggle': 'tooltip',
                'title': _("Código SITUR de la organización comunal"),
                'size': '40',
                'disabled': 'disabled'
            }),
        required=False)

    ## Casa Matriz de alguna Franquicia
    casa_matriz_franquicia = ChoiceField(
        label=_("¿Es la casa matríz de una Franquicia?"),
        choices=((True, ''), (False, '')),
        widget=CheckboxInput(
            attrs={
                'class': 'seleccion_si_no',
                'data-rule-required': 'true',
                'data-toggle': 'tooltip',
                'title': _("¿Es la casa matríz de una Franquicia?"),
                'onchange':
                "habilitar($(this).is(':checked'), nro_franquicia.id)",
            }))

    ## Número de Franquicias asociadas a la Unidad Económica
    nro_franquicia = CharField(
        label=_("Número de Franquicias:"),
        initial=0,
        widget=NumberInput(
            attrs={
                'class': 'form-control input-sm',
                'data-rule-required': 'true',
                'data-toggle': 'tooltip',
                'title': _("Número de Franquicias de la Unidad Económica"),
                'size': '3',
                'data-mask': '000',
                'readonly': 'readonly'
            }),
        required=False)

    ## Franquiciado
    franquiciado = ChoiceField(
        label=_("¿Forma parte de una Franquicia?"),
        choices=((True, ''), (False, '')),
        widget=CheckboxInput(
            attrs={
                'class':
                'seleccion_si_no',
                'data-rule-required':
                'true',
                'data-toggle':
                'tooltip',
                'title':
                _("¿Forma parte de una Franquicia?"),
                'onchange':
                "habilitar($(this).is(':checked'), pais_franquicia.id), habilitar($(this).is(':checked'), nombre_franquicia.id)",
            }))

    ## País de la Franquicia
    pais_franquicia = ChoiceField(
        label=_("País de Origen de la Franquicia"),
        widget=Select(
            attrs={
                'class':
                'form-control',
                'data-toggle':
                'tooltip',
                'title':
                _("Seleccione el país de origen de la franquicia"),
                'disabled':
                'disabled',
                'onchange':
                """habilitar(this.value, rif_casa_matriz_0.id),
                habilitar(this.value, rif_casa_matriz_1.id), habilitar(this.value, rif_casa_matriz_2.id), deshabilitar(this.value, nombre_franquicia.id)"""
            }),
        required=False)

    ## Nombre de la Franquicia
    nombre_franquicia = CharField(
        label=_("Nombre de la Franquicia"),
        widget=TextInput(
            attrs={
                'class': 'form-control',
                'data-toggle': 'tooltip',
                'title': _("Nombre de la franquicia"),
                'size': '40',
                'readonly': 'readonly'
            }),
        required=False)

    ## RIF Franquicia
    rif_casa_matriz = RifField(disabled=True, required=False)

    def __init__(self, *args, **kwargs):
        super(UnidadEconomicaForm, self).__init__(*args, **kwargs)

        self.fields['actividad'].choices = cargar_actividad()
        self.fields['actividad2'].choices = cargar_actividad()

        # Si se ha indicado que es una organizacion comunal, se habilitan los atributos tipo_comunal y situr
        if 'orga_comunal' in self.data:
            self.fields['tipo_comunal'].widget.attrs.pop('disabled')
            self.fields['situr'].widget.attrs.pop('disabled')

        self.fields['tipo_comunal'].choices = cargar_tipo_comunal()

        if 'franquiciado' in self.data:
            self.fields['pais_franquicia'].widget.attrs.pop('disabled')
            if 'pais_franquicia' in self.data and self.data['pais_franquicia']:
                self.fields['rif_casa_matriz'].disabled = False
            else:
                self.fields['nombre_franquicia'].widget.attrs.pop('readonly')

        if 'casa_matriz_franquicia' in self.data:
            self.fields['nro_franquicia'].widget.attrs.pop('readonly')

        self.fields['pais_franquicia'].choices = cargar_pais()

    def clean_nro_franquicia(self):
        casa_matriz_franquicia = self.cleaned_data.get(
            'casa_matriz_franquicia')
        nro_franquicia = self.cleaned_data.get('nro_franquicia')

        if casa_matriz_franquicia and nro_franquicia == '' or nro_franquicia == '0':
            raise forms.ValidationError(_("Indique el número de franquicias"))
        return nro_franquicia

    def clean_tipo_comunal(self):
        tipo_comunal = self.cleaned_data['tipo_comunal']

        if 'orga_comunal' in self.data:
            orga_comunal = self.data['orga_comunal']

            if orga_comunal == 'S' and not tipo_comunal:
                raise forms.ValidationError(
                    _("Seleccione un tipo de organización comunal"))
            return orga_comunal

        return tipo_comunal

    def clean_situr(self):
        situr = self.cleaned_data['situr']

        if 'orga_comunal' in self.data:
            orga_comunal = self.data['orga_comunal']

            if orga_comunal == 'S' and not situr:
                raise forms.ValidationError(
                    _("Indique el código SITUR de la organización comunal"))

        return situr

    def clean_pais_franquicia(self):
        franquiciado = self.cleaned_data['franquiciado']
        pais_franquicia = self.cleaned_data.get('pais_franquicia', False)

        if 'franquiciado' in self.data:
            franquiciado = self.data['franquiciado']

            if franquiciado == 'S' and not pais_franquicia:
                raise forms.ValidationError(
                    _("Indique el país de origen de la franquicia"))
        return pais_franquicia

    def clean_rif_casa_matriz(self):
        rif_casa_matriz = self.cleaned_data['rif_casa_matriz']
        pais_franquicia = self.cleaned_data.get('pais_franquicia')

        if pais_franquicia == '1' and not rif_casa_matriz:
            raise forms.ValidationError(_("Indique el RIF de la franquicia"))
        return rif_casa_matriz

    def clean_nombre_franquicia(self):
        franquiciado = self.cleaned_data['franquiciado']
        pais_franquicia = self.cleaned_data.get('pais_franquicia')
        nombre_franquicia = self.cleaned_data['nombre_franquicia']

        if franquiciado == 'S' and pais_franquicia != '1' and not nombre_franquicia:
            raise forms.ValidationError(_("Indique nombre de la franquicia"))
        return nombre_franquicia

    class Meta(object):
        model = UnidadEconomica
        fields = ['rif', 'razon_social', 'nombre_ue']
Beispiel #3
0
class InformacionMercantilForm(ModelForm):
    """!
    Formulario para la gestión de la información mercantil: capital, accionistas y representante legal.

    @author Lully Troconis (ltroconis at cenditel.gob.ve)
    @copyright <a href='​http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    @date 04-05-2016
    @version 2.0
    """

    ## Naturaleza Jurídica
    naturaleza_juridica = ChoiceField(
        label=_("Naturaleza Jurídica: "),
        choices=[('', 'Seleccione...')]+NATURALEZA_JURIDICA,
        widget=Select(
            attrs={
                'class': 'form-control input-sm', 'size': '28',
            }
        )
    )

    ## Establece el tipo de capital solicitado: capital suscrito
    capital_suscrito = CharField(
        label=_("Capital Social Suscrito: "),max_length=30,
        widget=TextInput(attrs={
            'class': 'form-control input-sm porcentaje', 'data-toggle': 'tooltip', 'size': '28'
        })
    )

    ## Tipo de capital solicitado: capital pagado
    capital_pagado = CharField(
        label=_("Capital Social Pagado: "), max_length=30,
        widget=TextInput(attrs={
            'class': 'form-control input-sm porcentaje', 'data-toggle': 'tooltip', 'size': '28',
        })
    )

    ## Tipo de capital solicitado: capital publico nacional
    publico_nacional = CharField(
        label=_("Público Nacional: "), max_length=6,
        widget=TextInput(attrs={
            'class': 'form-control input-sm porcentaje', 'data-toggle': 'tooltip', 'size': '4', 'placeholder': '0'
        })
    )

    ## Tipo de capital solicitado: capital público extranjero
    publico_extranjero = CharField(
        label=_("Público Extranjero: "), max_length=6,
        widget=TextInput(
            attrs={
                'class': 'form-control input-sm porcentaje', 'data-toggle': 'tooltip', 'size': '4', 'placeholder': '0'
            }
        )
    )

    ## Tipo de capital solicitado: capital privado nacional
    privado_nacional = CharField(
        label=_("Privado Nacional: "), max_length=6,
        widget=TextInput(
            attrs={
                'class': 'form-control input-sm porcentaje', 'data-toggle': 'tooltip', 'size': '4', 'placeholder': '0'
            }
        )
    )

    ## Tipo de capital solicitado: capital privado
    privado_extranjero = CharField(
        label=_("Privado Extranjero: "), max_length=6,
        widget=TextInput(
            attrs={
                'class': 'form-control input-sm porcentaje', 'data-toggle': 'tooltip', 'size': '4', 'placeholder': '0'
            }
        )
    )

    ## Rif del accionista
    rif_accionista_orig = RifField(required=False)

    ## Nombre del accionista
    nombre = CharField(
        label=_("Nombre: "), max_length=30,
        widget=TextInput(attrs={
            'class': 'form-control input-sm', 'placeholder': _("Nombre"), 'data-toggle': 'tooltip',
            'title': _("Nombre "), 'size': '28', 'readonly': 'readonly'
        }), required=False
    )

    # País de origen del accionista
    pais_origen = ChoiceField(
        label=_("País de origen: "),
        required=False
    )


    ## Porcentaje de acciones que posee el accionista
    porcentaje = CharField(
        label=_("Porcentaje de acciones: "), max_length=3,
        widget=NumberInput(
            attrs={
                'class': 'form-control input-sm', 'data-toggle': 'tooltip', 'step': '0.01',
                'title': _("Porcentaje"), 'size': '5', 'placeholder': '0'
            }
        ), required=False
    )

    ## Campo oculto para el RIF del accionista
    rif_accionista_tb = CharField(
        label=_("Ingrese el R.I.F del accionista"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'style': 'min-width: 0; width: auto; display: inline;', 'value': 'rif',
            'size': '30',
        }),
    )

    ## Campo oculto para el nombre del accionista
    nombre_tb = CharField(
        widget=TextInput(attrs={
            'class': 'form-control input-md', 'style': 'min-width: 0; width: auto; display: inline;', 'size': '30',
        }),
    )

    ## Campo oculto para el país de origen del accionista
    pais_origen_tb = CharField(
        label=_("Seleccione el país del accionista"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'style': 'min-width: 0; width: auto; display: inline;', 'size': '30',
        }),required=False,
    )

    ## Campo oculto para el porcentaje de acciones que posee el accionista
    porcentaje_tb = CharField(
        label=_("Seleccione el país del accionista"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'style': 'min-width: 0; width: auto; display: inline;', 'size': '30',
        }),
    )

    ## Cédula de identidad del representante legal
    cedula_representante = CedulaField()

    ## Nombre del Representante Legal
    nombre_representante = CharField(
        label=_("Nombre: "),
        max_length=30,
        widget=TextInput(
            attrs={
                'class': 'form-control input-sm', 'placeholder': _("Nombres del usuario"), 'data-rule-required': 'true',
                'data-toggle': 'tooltip', 'title': _("Indique el Nombre"), 'size': '50'
            }
        )
    )

    ## Apellido del representante legal
    apellido_representante = CharField(
        label=_("Apellido: "),
        max_length=30,
        widget=TextInput(
            attrs={
                'class': 'form-control input-sm', 'placeholder': _("Apellidos del usuario"), 'data-rule-required': 'true',
                'data-toggle': 'tooltip', 'title': _("Indique el Apellido"), 'size': '50'
            }
        )
    )

    ## Correo electrónico del representante legal
    correo_electronico = EmailField(
        label=_("Correo Electrónico: "),
        max_length=75,
        widget=EmailInput(
            attrs={
                'class': 'form-control input-sm email-mask', 'placeholder': _("Correo de contacto"),
                'data-toggle': 'tooltip', 'size': '50', 'data-rule-required': 'true',
                'title': _("Indique el correo electrónico de contacto con el usuario. "
                           "No se permiten correos de hotmail")
            }
        )
    )

    ## Número telefónico del representante legal
    telefono = CharField(
        label=_("Teléfono: "),
        max_length=20,
        widget=TextInput(
            attrs={
                'class': 'form-control input-sm', 'placeholder': '(058)-000-0000000',
                'data-rule-required': 'true', 'data-toggle': 'tooltip', 'size': '15',
                'title': _("Indique el número telefónico de contacto con el usuario"), 'data-mask': '(000)-000-0000000'
            }
        ),
        help_text=_("(país)-área-número")
    )


    ## Cargo que ejerce el representante legal dentro de la unidad económica
    cargo = ChoiceField(
        label=_("Cargo: "),
        choices=[('', 'Seleccione...')]+CARGO_REP,
        widget=Select(
            attrs={
                'class': 'form-control input-sm', 'size': '28',
                'onchange': "habilitar(this.value, 'id_cargo_otros')"
            }
        )
    )

    ## Campo para agregar el cargo que ejerce el representante legal en la unidad económica
    cargo_otros = CharField(
        label=_("Otros: "),
        widget=TextInput(
            attrs={
                'class': 'form-control input-sm', 'size': '28', 'disabled': 'disabled'
            }
        ), required=False
    )

    rif_ue = RifField(required=False)

    def __init__(self, *args, **kwargs):
        super(InformacionMercantilForm, self).__init__(*args, **kwargs)

        self.fields['pais_origen'].choices = cargar_pais()

    class Meta:
        model = RepresentanteLegal
        fields = ['cargo_otros']
Beispiel #4
0
class RegistroForm(ModelForm):
    """!
    Clase que muestra el formulario de registro de usuarios

    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    @date 21-04-2016
    @version 2.0.0
    """

    ## R.I.F. de la Unidad Económica que identifica al usuario en el sistema
    rif = RifField()

    ## Nombre de la Unidad Economica
    nombre_ue = CharField(
        label=_("Nombre de la Unidad Económica: "),
        widget=TextInput(
            attrs={
                'class': 'form-control input-sm',
                'data-rule-required': 'true',
                'data-toggle': 'tooltip',
                'title': _("Nombre de la Unidad Económica a registrar"),
                'readonly': 'readonly',
                'size': '50'
            }),
        required=False)

    ## Cédula de Identidad del usuario
    cedula = CedulaField()

    ## Cargo del usuario dentro de la Unidad Económica
    cargo = CharField(
        label=_("Cargo que ocupa en la U.E.:"),
        max_length=175,
        widget=TextInput(
            attrs={
                'class': 'form-control input-sm',
                'placeholder': _("Cargo en la Empresa"),
                'data-rule-required': 'true',
                'data-toggle': 'tooltip',
                'title': _("Indique el cargo del usuario en la empresa"),
                'size': '50'
            }))

    ## Nombre del usuario
    nombre = CharField(label=_("Nombre"),
                       max_length=30,
                       widget=TextInput(
                           attrs={
                               'class': 'form-control input-sm',
                               'placeholder': _("Nombres del usuario"),
                               'data-rule-required': 'true',
                               'data-toggle': 'tooltip',
                               'title': _("Indique el Nombre"),
                               'size': '50'
                           }))

    ## Apellido del usuario
    apellido = CharField(label=_("Apellido"),
                         max_length=30,
                         widget=TextInput(
                             attrs={
                                 'class': 'form-control input-sm',
                                 'placeholder': _("Apellidos del usuario"),
                                 'data-rule-required': 'true',
                                 'data-toggle': 'tooltip',
                                 'title': _("Indique el Apellido"),
                                 'size': '50'
                             }))

    ## Número telefónico de contacto con el usuario
    telefono = CharField(
        label=_("Teléfono"),
        max_length=20,
        widget=TextInput(
            attrs={
                'class':
                'form-control input-sm',
                'placeholder':
                '(058)-000-0000000',
                'data-rule-required':
                'true',
                'data-toggle':
                'tooltip',
                'size':
                '15',
                'title':
                _("Indique el número telefónico de contacto con el usuario"),
                'data-mask':
                '(000)-000-0000000'
            }),
        help_text=_("(país)-área-número"))

    ## Correo electrónico de contacto con el usuario
    correo = EmailField(
        label=_("Correo Electrónico"),
        max_length=75,
        widget=EmailInput(
            attrs={
                'class':
                'form-control input-sm email-mask',
                'placeholder':
                _("Correo de contacto"),
                'data-toggle':
                'tooltip',
                'size':
                '50',
                'data-rule-required':
                'true',
                'title':
                _("Indique el correo electrónico de contacto con el usuario. "
                  "No se permiten correos de hotmail")
            }))

    ## Contraseña del usuario
    password = CharField(
        label=_("Contraseña"),
        max_length=128,
        widget=PasswordInput(
            attrs={
                'class': 'form-control input-sm',
                'placeholder': _("Contraseña de acceso"),
                'data-rule-required': 'true',
                'data-toggle': 'tooltip',
                'size': '50',
                'title': _("Indique una contraseña de aceso al sistema"),
                'onkeyup': 'passwordStrength(this.value)'
            }))

    ## Confirmación de contraseña de acceso
    verificar_contrasenha = CharField(
        label=_("Verificar Contraseña"),
        max_length=128,
        widget=PasswordInput(
            attrs={
                'class': 'form-control input-sm',
                'placeholder': _("Contraseña de acceso"),
                'data-rule-required': 'true',
                'data-toggle': 'tooltip',
                'size': '50',
                'title': _(
                    "Indique nuevamente la contraseña de aceso al sistema")
            }))

    ## Campo para la validación del captcha
    captcha = CaptchaField(
        label=_(u"Captcha"),
        widget=CaptchaTextInput(
            attrs={
                'class': 'form-control input-sm',
                'placeholder': _("Texto de la imagen"),
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _(u"Indique el texto de la imagen")
            }))

    class Meta:
        model = User
        exclude = [
            'fecha_modpass', 'username', 'first_name', 'last_name', 'email',
            'date_joined'
        ]

    def clean_rif(self):
        """!
        Método que permite validar el campo de rif

        @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
        @date 27-04-2016
        @param self <b>{object}</b> Objeto que instancia la clase
        @return Devuelve un mensaje de error en caso de que el rif no sea válido o no se encuentre registrado en el
                SENIAT, en caso contrario devuelve el valor actual del campo
        """
        rif = self.cleaned_data['rif']

        if rif[0] not in TIPO_PERSONA_LIST:
            raise forms.ValidationError(_("Tipo de RIF incorrecto"))
        elif User.objects.filter(username=rif):
            raise forms.ValidationError(_("El RIF ya se encuentra registrado"))
        elif not rif[1:].isdigit():
            raise forms.ValidationError(_("El RIF no es correcto"))

        return rif

    def clean_cedula(self):
        """!
        Método que permite validar la cedula de identidad del usuario a registrar

        @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
        @date 02-05-2016
        @param self <b>{object}</b> Objeto que instancia la clase
        @return Devuelve un mensaje de error en caso de la cedula de identidad sea incorrecta
        """
        cedula = self.cleaned_data['cedula']

        if cedula[0] not in NACIONALIDAD_LIST:
            raise forms.ValidationError(_("La nacionalidad no es correcta"))
        elif not cedula[1:].isdigit():
            raise forms.ValidationError(
                _("El número de cédula no es correcto"))

        return cedula

    def clean_correo(self):
        """!
        Método que permite validar el campo de correo electronico

        @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
        @date 02-05-2016
        @param self <b>{object}</b> Objeto que instancia la clase
        @return Devuelve un mensaje de error en caso de que el correo electronico ya se encuentre registrado
        """
        correo = self.cleaned_data['correo']

        if User.objects.filter(email=correo):
            raise forms.ValidationError(_("El correo ya esta registrado"))

        return correo

    def clean_password(self):
        """!
        Método que permite validar el campo de password

        @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
        @date 02-05-2016
        @param self <b>{object}</b> Objeto que instancia la clase
        @return Devuelve un mensaje de error en caso de que la fortaleza de la contraseña sea inferior al minimo
                establecido
        """
        password_meter = self.data['passwordMeterId']
        if int(password_meter) < FORTALEZA_CONTRASENHA:
            raise forms.ValidationError(_("La contraseña es débil"))
        return self.cleaned_data['password']

    def clean_verificar_contrasenha(self):
        """!
        Método que permite validar el campo de verificar_contrasenha

        @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
        @date 02-05-2016
        @param self <b>{object}</b> Objeto que instancia la clase
        @return Devuelve un mensaje de error en caso de que la contrasenha no pueda ser verificada
        """
        verificar_contrasenha = self.cleaned_data['verificar_contrasenha']
        contrasenha = self.data['password']
        if contrasenha != verificar_contrasenha:
            raise forms.ValidationError(_("La contraseña no es la misma"))

        return verificar_contrasenha
Beispiel #5
0
class ServiciosGeneralForm(forms.ModelForm):
    """!
    Clase que muestra el formulario de registro de servicios

    @author Rodrigo Boet (rboet at cenditel.gob.ve)
    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    @date 05-08-2016
    @version 2.0.0
    """
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super(ServiciosGeneralForm, self).__init__(*args, **kwargs)
        self.fields['caev'].choices = cargar_actividad()
        self.fields['ubicacion_cliente'].choices = cargar_pais()
        #Se carga una lista con todas las subunidades relacionadas al usuario
        lista = [('', 'Selecione...')]
        for l in SubUnidadEconomica.objects.filter(
                rif=user.username,
                sede_servicio=True).values_list('id', 'nombre_sub'):
            lista.append(l)
        self.fields['subunidad'].choices = lista
        #Se carga una lista con todos los productos relacionados a una subunidad
        """prod = [('','Selecione...')]
        for p in Producto.objects.filter(subunidad_id__rif=user.username).values_list('id','nombre_producto'):
            prod.append(p)
        self.fields['cliente_producto'].choices = prod"""

    ## Listado de las subunidades disponibles
    subunidad = forms.ChoiceField(
        label=_("Tipo de Sub-Unidad"),
        widget=Select(
            attrs={
                'class': 'form-control input-md',
                'required': 'required',
                'data-toggle': 'tooltip',
                'title': _("Seleccione el Tipo de Sub-Unidad"),
            }),
        required=False,
    )

    ## Nombre del servicio
    nombre_servicio = forms.CharField(
        label=_("Nombre del Servicio"),
        widget=TextInput(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Indique el nombre del servicio"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    ## Lista con los tipos de servicio
    tipo_servicio = forms.ChoiceField(
        label=_("Tipos de Servicios"),
        widget=Select(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Seleccione el tipo de servicio"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
        choices=[('', 'Seleccione...'), (1, 'algo')
                 ],  #TipoServicio.objects.values_list('id','nombre'),
    )

    ## Cantidad de clientes
    cantidad_clientes = forms.CharField(
        label=_("Número de Clientes"),
        widget=TextInput(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Indique el número de clientes"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    ## Listado del código caev
    caev = forms.ChoiceField(
        label=_("Código CAEV"),
        widget=Select(
            attrs={
                'class': 'form-control',
                'data-rule-required': 'true',
                'data-toggle': 'tooltip',
                'title': _("Seleccione el código Caev"),
            }),
        choices=CaevClase.objects.values_list('clase', 'descripcion'),
        required=False,
    )

    ## Lista con los servicios
    cliente_servicio = forms.ChoiceField(
        label=_("Servicio"),
        widget=Select(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Seleccione el servicio"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    ## Lista con los clientes del servicio
    cliente_list = forms.ChoiceField(
        label=_("Cliente"),
        widget=Select(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Seleccione el cliente"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
        choices=[('', 'Seleccione...'), ("1", "algo")],
    )

    ## Ubicación del cliente
    ubicacion_cliente = forms.ChoiceField(
        label=_("Ubicación del Cliente"),
        widget=Select(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Seleccione la ubicación del cliente"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    ## R.I.F. del cliente
    rif = RifField(required=False)
    rif.widget = RifWidgetReadOnly()

    ## Nombre del cliente
    nombre_cliente = forms.CharField(
        label=_("Nombre del Cliente"),
        widget=TextInput(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Indique el nombre del cliente"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    ## Precio de venta
    precio = forms.CharField(
        label=_("Precio"),
        widget=TextInput(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Indique el precio"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    ## Lista con los clientes del servicio
    tipo_moneda = forms.ChoiceField(
        widget=Select(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Seleccione la moneda"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
        choices=MONEDAS,
    )

    ## Monto Facturado
    monto_facturado = forms.CharField(
        label=_("Monto Facturado"),
        widget=TextInput(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Indique el monto facturado"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    ## Servicios prestados
    servicio_prestado = forms.CharField(
        label=_("Número de Servicios Prestados"),
        widget=TextInput(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Indique el número de servicios prestados"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    class Meta:
        model = Servicio
        fields = '__all__'
Beispiel #6
0
class ProveedorForm(forms.ModelForm):
    """!
    Clase para el formulario insumos proveedores

    @author Hugo Ramirez (hramirez at cenditel.gob.ve)
    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    @date 14-09-2016
    @version 2.0.0
    """

    ## Origen del insumo
    pais_origen = ChoiceField(
        label=_("País de origen: "),
        widget=Select(
            attrs={
                'class': 'form-control input-md',
                'required': 'required',
                'data-toggle': 'tooltip',
                'title': _("Seleccione Sub-Unidad Economica"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False)

    ## Listado de insumos
    insumo = forms.ChoiceField(
        label=_("Insumo"),
        widget=Select(
            attrs={
                'class': 'form-control input-md',
                'required': 'required',
                'data-toggle': 'tooltip',
                'title': _(
                    "Seleccione el insumo correspondiente al proveedor"),
                'size': '50',
                'style': 'width: 250px;',
            }),
    )

    ## R.I.F. del proveedor
    rif = RifField(required=False)
    rif.widget = RifWidgetReadOnly()

    ## Tipo de cambio
    tipo_cambio = forms.CharField(
        label=_("Tipo de cambio"),
        widget=TextInput(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Indique el tipo de cambio"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    ## Cantidad comprada
    cantidad_comprada = forms.CharField(
        label=_("Cantidades Comprada"),
        widget=TextInput(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Indique la cantidad de Compra"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=False,
    )

    ## Unidad de medida
    unidad_de_medida = forms.ChoiceField(
        label=_("Unidad de Medida"),
        widget=Select(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Seleccione la unidad de medida"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        choices=(('', 'Seleccione...'), ) + UNIDAD_MEDIDA,
        required=False,
    )

    ## Nombre del insumo
    nombre_proveedor = forms.CharField(
        label=_("Nombre del proveedor"),
        widget=TextInput(
            attrs={
                'class': 'form-control input-md',
                'style': 'min-width: 0; width: auto; display: inline;',
                'data-toggle': 'tooltip',
                'title': _("Indique el nombre del proveedor"),
                'size': '50',
                'style': 'width: 250px;',
            }),
        required=True,
    )

    def __init__(self, *args, **kwargs):
        super(ProveedorForm, self).__init__(*args, **kwargs)

        self.fields['pais_origen'].choices = cargar_pais()

    class Meta:
        model = ProveedorModel
        fields = '__all__'
Beispiel #7
0
class ClientesForm(forms.ModelForm):
    """!
    Clase que muestra el formulario de ingreso de la sub-unidad económica

    @author Rodrigo Boet (rboet at cenditel.gob.ve)
    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    @date 13-07-2016
    @version 2.0.0
    """

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        # now kwargs doesn't contain 'place_user', so we can safely pass it to the base class method
        super(ClientesForm, self).__init__(*args, **kwargs)
        self.fields['caev'].choices = cargar_actividad()
        self.fields['ubicacion_cliente'].choices = cargar_pais()
        #Se carga una lista con todas las subunidades relacionadas al usuario
        lista = [('','Selecione...')]
        for l in SubUnidadEconomica.objects.filter(rif=user.username).values_list('id','nombre_sub'):
            lista.append(l)
        self.fields['subunidad'].choices = lista
        #Se carga una lista con todos los productos relacionados a una subunidad
        prod = [('','Selecione...')]
        for p in Producto.objects.filter(subunidad_id__rif=user.username).values_list('id','nombre_producto'):
            prod.append(p)
        self.fields['cliente_producto'].choices = prod

     ## Listado de las subunidades disponibles
    subunidad =  forms.ChoiceField(
        label=_("Tipo de Sub-Unidad"), widget=Select(attrs={
            'class': 'form-control input-md', 'required':'required',
            'data-toggle': 'tooltip','title': _("Seleccione el Tipo de Sub-Unidad"),
        }), required = False,
    )

    ## Nombre del producto
    nombre_producto = forms.CharField(
        label=_("Nombre del Producto"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique el nombre del producto"), 'size': '50',
            'style': 'width: 250px;',
        }), required = False,
    )
    
    ## Especificación técnica del producto
    especificacion_tecnica = forms.CharField(
        label=_("Especificación Técnica"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique la especificación técnica"), 'size': '50',
            'style': 'width: 250px;',
        }),required = False,
    )
    
    ## Marca del producto
    marca = forms.CharField(
        label=_("Marca"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique la marca"), 'size': '50',
            'style': 'width: 250px;',
        }), required = False,
    )
    
    ## Cantidad de clientes
    cantidad_clientes =  forms.CharField(
        label=_("Número de Clientes"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique el número de clientes"), 'size': '50',
            'style': 'width: 250px;',
        }), required = False,
    )

    ## Cantidad de insumos
    cantidad_insumos = forms.CharField(
        label=_("Número de Insumos"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique el número de insumos"), 'size': '50',
            'style': 'width: 250px;',
        }), required = False,
    )
    
    ## Cantidad producida
    cantidad_produccion = forms.CharField(
        label=_("Producción"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique la cantidad de producción"), 'size': '50',
            'style': 'width: 250px;',
        }), required = False,
    )
    
    ## Unidad de medida de la cantidad producida
    unidad_de_medida = forms.ChoiceField(
        label=_("Unidad de Medida"), widget=Select(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Seleccione la unidad de medida"), 'size': '50',
            'style': 'width: 250px;',
        }), choices = (('','Seleccione...'),)+UNIDAD_MEDIDA, required = False,
    )
    
    ## Listado del código caev
    caev = forms.ChoiceField(
        label=_("Código CAEV"),
        widget=Select(
            attrs={
                'class': 'form-control', 'data-rule-required': 'true', 'data-toggle': 'tooltip',
                'title': _("Seleccione el código Caev"),
            }
        ), choices = CaevClase.objects.values_list('clase','descripcion'), required = False,
    )
    
    ## Lista con los productos
    cliente_producto = forms.ChoiceField(
        label=_("Producto"), widget=Select(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Seleccione el producto"), 'size': '50',
            'style': 'width: 250px;',
        }), 
    )
    
    ## Lista con los clientes del producto
    cliente_list = forms.ChoiceField(
        label=_("Cliente"), widget=Select(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Seleccione el cliente"), 'size': '50',
            'style': 'width: 250px;',
        }), choices = [('','Seleccione...'), ("1","algo")],
    )
    
    ## Ubicación del cliente
    ubicacion_cliente = forms.ChoiceField(
        label=_("Ubicación del Cliente"), widget=Select(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Seleccione la ubicación del cliente"), 'size': '50',
            'style': 'width: 250px;',
        }),
    )
    
    ## R.I.F. del cliente
    rif = RifField(required = False)
    rif.widget = RifWidgetReadOnly()
    
    ## Nombre del cliente
    nombre_cliente = forms.CharField(
        label=_("Nombre del Cliente"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique el nombre del cliente"), 'size': '50',
            'style': 'width: 250px;',
        }),
    )
    
    ## Precio de venta
    precio_venta = forms.CharField(
        label=_("Precio de venta por unidad"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique el precio de venta por unidad"), 'size': '50',
            'style': 'width: 250px;',
        }),
    )
    
    ## Tipo de cambio
    tipo_cambio = forms.CharField(
        label=_("Tipo de cambio"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique el tipo de cambio"), 'size': '50',
            'style': 'width: 250px;',
        }),
    )
    
    ## Cantidad producida
    cantidad_vendida = forms.CharField(
        label=_("Cantidades Vendidas"), widget=TextInput(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Indique la cantidad de producción"), 'size': '50',
            'style': 'width: 250px;',
        }),
    )
    
    ## Unidad de medida de la cantidad producida
    unidad_de_medida_cliente = forms.ChoiceField(
        label=_("Unidad de Medida"), widget=Select(attrs={
            'class': 'form-control input-md','style': 'min-width: 0; width: auto; display: inline;',
            'data-toggle': 'tooltip','title': _("Seleccione la unidad de medida"), 'size': '50',
            'style': 'width: 250px;',
        }), choices = (('','Seleccione...'),)+UNIDAD_MEDIDA,
    )
    
    """def clean_rif(self):
        rif = self.cleaned_data['rif']
        ubicacion = self.cleaned_data['ubicacion_cliente']
        if((ubicacion == 'Venezuela') and (rif=='')):
            raise forms.ValidationError(_("Este campo es obligatorio"))
            rif.widget = RifWidget
        return rif"""
    
    class Meta:
        model = Cliente
        exclude = ['produccion','pais','nombre','cliente_list']
        
Beispiel #8
0
class SubUnidadEconomicaForm(DirectorioForm, TelefonoForm):
    """!
    Clase que muestra el formulario de ingreso de la sub-unidad económica

    @author Rodrigo Boet (rboet at cenditel.gob.ve)
    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    @date 04-05-2016
    @version 2.0.0
    """
    ## R.I.F. de la Unidad Económica que identifica al usuario en el sistema
    rif = RifField()
    rif.widget = RifWidgetReadOnly()

    ## Nombre de la sub unidad
    nombre_sub = forms.CharField(
        label=_("Nombre"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'data-toggle': 'tooltip','title': _("Indique el nombre"),
            'size': '50', 'required':'required'
        })
    )

    ## Tipo de tenencia de la sub unidad
    tipo_tenencia = forms.ChoiceField(
        label=_("Tipo de Tenencia"), widget=Select(attrs={'class': 'form-control select2'}), choices = TIPO_TENENCIA
    )

    ## Metros cuadrados de la construcción
    m2_contruccion = forms.DecimalField(
        label=_("Metros Cuadrados de la Construcción"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'data-rule-required': 'true', 'required':'required',
            'data-toggle': 'tooltip', 'title': _("Indique lo metros cuadrados de la construcción"), 'size': '25',
            'type':'number', 'step':'0.01',
        }), max_digits=20, decimal_places=5
    )

    ## Metros cuadrados del terreno
    m2_terreno = forms.DecimalField(
        label=_("Metros Cuadrados de Terreno"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'data-rule-required': 'true', 'required':'required',
            'data-toggle': 'tooltip', 'title': _("Indique lo metros cuadrados del terreno"), 'size': '25',
            'type':'number', 'step':'0.01'
        }), max_digits=20, decimal_places=5
    )

    ## Autonomía Eléctrica en porcentaje
    autonomia_electrica = forms.DecimalField(
        label=_("Porcentaje de Autonomía Eléctrica"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'data-rule-required': 'true', 'required':'required',
            'data-toggle': 'tooltip', 'title': _("Indique la autonomía eléctrica en porcentaje"), 'size': '25',
            'type':'number', 'step':'0.01'
        }), max_digits=20, decimal_places=5
    )

    ## Consumo eléctrico promedio en el mes
    consumo_electrico = forms.DecimalField(
        label=_("Consumo Eléctrico"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'data-rule-required': 'true', 'required':'required',
            'data-toggle': 'tooltip', 'title': _("Indique el consumo promedio mensual en Kw/h"), 'size': '25',
            'type':'number', 'step':'0.01'
        }), max_digits=20, decimal_places=5
    )

    cantidad_empleados = forms.IntegerField(
        label=_("Cantidad de empleados"), widget=TextInput(attrs={
            'class': 'form-control input-md','data-rule-required': 'true', 'required':'required',
            'data-toggle': 'tooltip', 'title': _("Indique la cantidad de empleados"), 'size': '25',
            'type':'number', 'min':'1', 'step': '1'
        })
    )

    ## Pregunta si la unidad económica presta un servicio
    sede_servicio =  forms.ChoiceField(
        label=_("Presta Servicio: "),
        widget=CheckboxInput(attrs={'class': 'seleccion_si_no', 'required':'required'}),
        choices = ((True,''), (False,'')),
    )

    ## Tipo de Sub Unidad Económica
    tipo_sub_unidad = forms.ChoiceField(
        label=_("Tipo"),
        widget=Select(attrs={'class': 'form-control input-md', 'required':'required'}),
        choices = (('','Seleccione...'),) + (TIPO_SUB_UNIDAD)
    )

    ## tipo de proceso productivo que se lleva a cabo en la sub unidad economica
    tipo_proceso = forms.ChoiceField(
        label=_("Tipo de Proceso Productivo"), widget=Select(attrs={
            'class': 'form-control input-md',
            'data-toggle': 'tooltip','title': _("Indique el Tipo de Proceso Productivo")
        }), choices = TIPO_PROCESO, required=False
    )

    ## nombre del proceso productivo
    nombre_proceso = forms.CharField(
        label=_("Nombre del Proceso Productivo"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'data-toggle': 'tooltip','title': _("Indique el nombre"), 'size': '50'
        }), required=False
    )

    ## descripcion del proceso productivo
    descripcion_proceso = forms.CharField(
        label=_("Descripción del Proceso Productivo"), widget=Textarea(attrs={
            'class': 'form-control input-md', 'data-toggle': 'tooltip',
            'title': _("Indique la descripción del proceso productivo")
        }), required=False
    )

    ## estado del proceso productivo
    estado_proceso = forms.ChoiceField(
        label=_("Estado del Proceso Productivo"), widget=Select(attrs={
            'class': 'form-control input-md', 'data-toggle': 'tooltip',
            'title': _("Indique el estado del proceso productivo")
        }), choices = ESTADO_PROCESO, required=False
    )

    ## Código CAEV primaria
    actividad_caev_primaria =  forms.ChoiceField(
        label=_("Actividad Económica Primaria de la Sub-Unidad"), widget=Select(attrs={
            'class': 'form-control input-md',
            'data-toggle': 'tooltip','title': _("Indique la Actividad Económica Primaria de la Sub-Unidad en Ramas")
        }), choices = (('','Seleccione...'),(1,"Primera Opcion"),(2,"Segunda Opcion")),  required=False
    )

    ## Código CAEV
    actividad_caev =  forms.ChoiceField(
        label=_("Actividad Económica Secundaria de la Sub-Unidad"), widget=Select(attrs={
            'class': 'form-control input-md', 'data-toggle': 'tooltip',
            'title': _("Indique la Actividad Económica Secundaria de la Sub-Unidad en Ramas")
        }), choices = (('','Seleccione...'),(1,"Primera Opcion"),(2,"Segunda Opcion")),  required=False
    )

    ## Código CAEV
    actividad_caev_tb =  forms.ChoiceField(
        label=_("Actividad Económica de la Sub-Unidad"), widget=Select(attrs={
            'class': 'form-control input-md', 'data-toggle': 'tooltip',
            'title': _("Indique la Actividad Económica de la Sub-Unidad en Ramas")
        }), choices = (('','Seleccione...'),(1,"Primera Opcion"),(2,"Segunda Opcion")), required=False
    )

    ## Capacidad instalada mensual (campo de texto)
    capacidad_instalada_texto = forms.DecimalField(
        label=_("Capacidad Instalada Mensual"), widget=TextInput(attrs={
            'class': 'form-control input-md','data-rule-required': 'true',
            'data-toggle': 'tooltip', 'title': _("Indique la capacidad instalada"), 'size': '25', 'type':'number',
            'step':'0.01',
        }), max_digits=20, decimal_places=5, required=False
    )
    
    ## Capacidad instalada mensual (Unidad de Medida)
    capacidad_instalada_medida = forms.ChoiceField(
        widget=Select(attrs={'class': 'form-control input-md', 'required':'required'}),
        choices = CAPACIDAD_INSTALADA_MEDIDA,  required=False
    )

    ## Capacidad instalada mensual (campo de texto)
    capacidad_utilizada = forms.DecimalField(
        label=_("Capacidad Utilizada Mensual"), widget=TextInput(attrs={
            'class': 'form-control input-md','data-rule-required': 'true',
            'data-toggle': 'tooltip', 'title': _("Indique la capacidad utilizada en porcentaje"), 'size': '25',
            'type':'number', 'step':'0.01',
        }), max_digits=20, decimal_places=5, required=False
    )

    ## tipo de proceso productivo que se lleva a cabo en la sub unidad economica (datatable)
    tipo_proceso_tb = forms.CharField(
        label=_("Tipo de Proceso Productivo"), widget=TextInput(attrs={'class': 'form-control input-md', 'size': '30'}),
        required=False
    )

    ## nombre del proceso productivo (datatable)
    nombre_proceso_tb = forms.CharField(
        label=_("Nombre del Proceso Productivo"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'size': '30'
        }), required=False
    )

    ## descripcion del proceso productivo (datatable)
    descripcion_proceso_tb = forms.CharField(
        label=_("Descripción del Proceso Productivo"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'size': '30'
        }), required=False
    )

    ## estado del proceso productivo (datatable)
    estado_proceso_tb = forms.CharField(
        label=_("Estado del Proceso Productivo"), widget=TextInput(attrs={
            'class': 'form-control input-md', 'size': '30'
        }), required=False
    )

    def clean_codigo_ciiu(self):
        tipo = self.cleaned_data['tipo_sub_unidad']
        codigo_ciiu = self.cleaned_data['codigo_ciiu']

        if (tipo == 'Pl' or tipo == "Su") and codigo_ciiu=='':
            raise forms.ValidationError(_("Este campo es obligatorio"))

        return codigo_ciiu
        
    def clean_capacidad_instalada_texto(self):
        tipo = self.cleaned_data['tipo_sub_unidad']
        capacidad_instalada_texto = self.cleaned_data['capacidad_instalada_texto']

        if (tipo == 'Pl' or tipo == "Su") and capacidad_instalada_texto=='':
            raise forms.ValidationError(_("Este campo es obligatorio"))

        return capacidad_instalada_texto
        
    def clean_capacidad_instalada_medida(self):
        tipo = self.cleaned_data['tipo_sub_unidad']
        capacidad_instalada_medida = self.cleaned_data['capacidad_instalada_medida']

        if (tipo == 'Pl' or tipo == "Su") and capacidad_instalada_medida=='':
            raise forms.ValidationError(_("Este campo es obligatorio"))

        return capacidad_instalada_medida
        
    def clean_capacidad_utilizada(self):
        tipo = self.cleaned_data['tipo_sub_unidad']
        capacidad_utilizada = self.cleaned_data['capacidad_utilizada']

        if (tipo == 'Pl' or tipo == "Su") and capacidad_utilizada=='':
            raise forms.ValidationError(_("Este campo es obligatorio"))

        return capacidad_utilizada
    
    def clean_tipo_proceso_tb(self):
        tipo = self.cleaned_data['tipo_sub_unidad']
        tipo_proceso_tb = self.cleaned_data['tipo_proceso_tb']

        if tipo == 'Pl' and tipo_proceso_tb=='':
            raise forms.ValidationError(_("Este campo es obligatorio"))

        return tipo_proceso_tb
    
    def clean_nombre_proceso_tb(self):
        tipo = self.cleaned_data['tipo_sub_unidad']
        nombre_proceso_tb = self.cleaned_data['nombre_proceso_tb']

        if tipo == 'Pl' and nombre_proceso_tb=='':
            raise forms.ValidationError(_("Este campo es obligatorio"))

        return nombre_proceso_tb
    
    def clean_descripcion_proceso_tb(self):
        tipo = self.cleaned_data['tipo_sub_unidad']
        descripcion_proceso_tb = self.cleaned_data['descripcion_proceso_tb']

        if tipo == 'Pl' and descripcion_proceso_tb=='':
            raise forms.ValidationError(_("Este campo es obligatorio"))

        return descripcion_proceso_tb
    
    def clean_estado_proceso_tb(self):
        tipo = self.cleaned_data['tipo_sub_unidad']
        estado_proceso_tb = self.cleaned_data['estado_proceso_tb']

        if tipo == 'Pl' and estado_proceso_tb=='':
            raise forms.ValidationError(_("Este campo es obligatorio"))

        return estado_proceso_tb
    
    def clean_actividad_caev_primaria(self):
        tipo = self.cleaned_data['tipo_sub_unidad']
        actividad_caev_primaria = self.cleaned_data['actividad_caev_primaria']

        if (tipo == 'Pl' or tipo == "Su") and actividad_caev_primaria=='':
            raise forms.ValidationError(_("Este campo es obligatorio"))

        return actividad_caev_primaria
    
    class Meta:
        model = SubUnidadEconomica
        fields = '__all__'