Ejemplo n.º 1
0
def consultar_usuario_koha(request, cedula):
    """
    Método que permite retornar información académica del estudiante, relacionada
    a la carrera como: mallas, matriculas de la malla y oferta academica del SGA
    :param request:
    :param cedula:
    :return: Devuelve un dict con la información del propietario de la cedula.
    """
    try:
        datos_personales = {
            'estudiante_activo': False,
            'docente_activo': False
        }
        sga_service = WebServiceSga()
        datos_sga = sga_service.get_sgaws_datos_usuario_koha(cedula)
        datos_personales.update(datos_sga)
        persona = Persona.objects.filter(numero_documento=cedula).first()
        if datos_sga.get('numero_documento', False):
            # priorizo datos del siaaf a los del sga:
            datos_personales[
                'sexo'] = persona and persona.sexo and persona.sexo.nombre or str(
                    CatalogoItem.get_catalogo_item('TIPO_SEXO',
                                                   datos_sga.get('sexo')))
            datos_personales[
                'nacionalidad'] = persona and persona.nacionalidad and persona.nacionalidad.nombre or str(
                    CatalogoItem.get_catalogo_item(
                        'NACIONALIDAD', datos_sga.get('nacionalidad')))
            datos_personales[
                'tipo_documento'] = persona and persona.tipo_documento and persona.tipo_documento.nombre or str(
                    CatalogoItem.get_catalogo_item(
                        'TIPO_DOCUMENTO', datos_sga.get('tipo_documento')))
            datos_personales['estado_civil'] = str(
                CatalogoItem.get_catalogo_item('ESTADO_CIVIL',
                                               datos_sga.get('estado_civil')))
            if persona:
                datos_personales['nombres'] = persona.get_nombres()
                datos_personales['apellidos'] = persona.get_apellidos()
        elif persona:
            datos_personales.update(PersonaKohaSerializer(persona).data)
            direccion = persona.direccion_set.filter(
                tipo_direccion__catalogo__codigo='TIPO_DIRECCION',
                tipo_direccion__nombre='Domicilio').first(
                ) or persona.direccion_set.first()
            datos_personales['nombres'] = persona.get_nombres()
            datos_personales['apellidos'] = persona.get_apellidos()
            if direccion:
                datos_personales['direccion'] = '%s, %s' % (
                    direccion.calle_principal, direccion.calle_secundaria)
                datos_personales['direccion_referencia'] = direccion.referencia
                datos_personales['telefono'] = direccion.telefono or ''
                datos_personales['celular'] = direccion.celular
        else:
            datos_personales[
                'mensaje'] = 'No se encontro una persona asociada al numero de identificacion'
        if hasattr(persona, 'usuario'):
            datos_personales[
                'correo_institucional'] = persona.usuario.correo_electronico_institucional
        return JsonResponse(datos_personales, safe=False)
    except Exception as e:
        return HttpResponseBadRequest(content=str(e))
Ejemplo n.º 2
0
def periodo_academico_lista(request):
    """
    Lista todos los periodos academicos
    :param request:
    :return:
    """
    navegacion = ('Módulo académico', [('Períodos académicos', None)])
    periodos_academicos = PeriodoAcademico.objects.all()
    periodos_lectivos = CatalogoItem.get_catalogos_items(
        'PERIODO_ACADEMICO_PERIODO_LECTIVO')
    return render(request, 'academico/periodo_academico/lista.html', locals())
Ejemplo n.º 3
0
 def get_uaa_hijas(self, nombre_tipo_uaa=None, tipo_uaa=None):
     """
     Devuelve todas las UAA hijas que cumple una caracteristica de tipo de UAA
     :param nombre_tipo_uaa:
     :param tipo_uaa:
     :return: Arreglo de uaa
     """
     if tipo_uaa is None:
         if nombre_tipo_uaa is None:
             return None
         tipo_uaa = CatalogoItem.get_catalogo_item_nombre(
             'TIPO_UAA', nombre_tipo_uaa)
     uass = []
     for uaa_hija in self.serie.all():
         if uaa_hija.tipo_uaa == tipo_uaa:
             uass.append(uaa_hija)
         uass = uass + uaa_hija.get_uaa_hijas(tipo_uaa=tipo_uaa)
     return uass
Ejemplo n.º 4
0
class ReporteGeneral(forms.Form):
    choice_tipo_relacion_laboral = [
        (trl.id, trl.nombre)
        for trl in CatalogoItem.get_catalogos_items('TIPO_RELACION_LABORAL')
    ]
    choice_tipo_relacion_laboral.append(('', 'Todo'))
    choice_regimen_laboral = [(rl.id, rl.nombre)
                              for rl in RegimenLaboral.objects.all()]
    choice_regimen_laboral.append(('', 'Todo'))
    regimen_laboral = forms.ChoiceField(choices=choice_regimen_laboral,
                                        initial='',
                                        required=False)
    tipo_relacion_laboral = forms.ChoiceField(
        choices=choice_tipo_relacion_laboral, initial='', required=False)
    edad = forms.IntegerField(required=False,
                              widget=forms.NumberInput(attrs={'value': 0}),
                              label=u'Edad',
                              min_value=0,
                              max_value=100)
Ejemplo n.º 5
0
def periodo_academico_detalle(request, id):
    """
    Muestra el detalle de un periódo académico
    :param request:
    :param id:
    :return:
    """
    periodo_academico = get_object_or_404(PeriodoAcademico, id=id)

    periodos_lectivos = CatalogoItem.get_catalogos_items(
        'PERIODO_ACADEMICO_PERIODO_LECTIVO')

    # CHOICE para oferta académica
    CHOICE_ESTADO = OfertaAcademica.CHOICE_ESTADO

    navegacion = ('Módulo académico', [
        ('Períodos académicos', reverse('academico:periodo_academico_lista')),
        (periodo_academico.nombre, None)
    ])

    return render(request, 'academico/periodo_academico/detalle.html',
                  locals())
Ejemplo n.º 6
0
def get_init_factura(orden_pago, fecha_emision, variable_secuencial):
    """
    Crea un objeto Comprobante para la orden de pago
    :return:
    """
    hora_actual = time(datetime.now().hour,
                       datetime.now().minute,
                       datetime.now().second)

    documento = Comprobante()
    documento.numero_documento = orden_pago.punto_emision_uaa.punto_emision.new_codigo_factura(
        variable_secuencial)
    documento.persona = orden_pago.persona
    documento.direccion = orden_pago.direccion
    documento.tipo_documento = CatalogoItem.get_catalogo_item(
        'TIPO_DOCUMENTO_CONTABLE', 'FACTURA')
    documento.fecha_emision = datetime.combine(fecha_emision, hora_actual)
    documento.orden_pago = orden_pago

    documento_serializer = ComprobanteDatosPrincipalesSerializer(
        documento).data
    documento_serializer['documento_detalles'] = []
    return documento_serializer
Ejemplo n.º 7
0
def consultar_persona(request, numero_documento):
    """
    Retorna los datos principales de una persona, con su dirección de domicilio y si es estudiante o docente actual en
    el SGA con los id de las carreras a las que pertenece
    :param request:
    :param numero_documento:
    :return:
    200 Exito {'persona': {...}, 'direccion': {...}, 'estudiante': [], 'docente': []}
    400 Error solicitud, con su descripción
    """
    try:
        datos = {}
        # Existe la persona en el Siaaf
        persona = Persona.objects.filter(
            numero_documento=numero_documento).first()
        if persona is not None:
            datos['persona'] = {
                'numero_documento': persona.numero_documento,
                'primer_nombre': persona.primer_nombre,
                'segundo_nombre': persona.segundo_nombre,
                'primer_apellido': persona.primer_apellido,
                'segundo_apellido': persona.segundo_apellido,
                'correo_electronico': persona.correo_electronico,
                'tipo_documento': {
                    'nombre': persona.tipo_documento.nombre,
                    'codigo_th': persona.tipo_documento.codigo_th
                },
                'sexo': {
                    'nombre': persona.sexo.nombre,
                    'codigo_th': persona.sexo.codigo_th
                }
            }
            direccion = persona.get_direccion_domicilio()
            if direccion:
                datos['direccion'] = {
                    'celular': direccion.celular,
                    'telefono': direccion.telefono,
                    'calle_principal': direccion.calle_principal,
                    'calle_secundaria': direccion.calle_secundaria,
                    'numero': direccion.numero
                }
            else:
                datos['direccion'] = {
                    'celular': None,
                    'telefono': None,
                    'calle_principal': None,
                    'calle_secundaria': None,
                    'numero': None
                }

        # No existe la persona, lo busca en el registro civil
        else:
            headers = {
                'content-type': "application/x-www-form-urlencoded",
                'cache-control': "no-cache",
                'charset': "utf-8"
            }
            url_siaaf = DetalleParametrizacion.get_detalle_parametrizacion(
                'SIAAF', 'SIAAF_URL_PRODUCCION')
            url_bsg = '%s/api/v1/bsg/consultar-cedulasss/%s' % (
                url_siaaf.valor, numero_documento)
            response = requests.request("GET", url_bsg, headers=headers)

            if response.status_code == 200:
                data = response.json()['data']
                if data and data.get('CodigoError') == '000':
                    sexo_ref = {'HOMBRE': 1, 'MUJER': 0}
                    sexo = CatalogoItem.get_catalogo_item(
                        'TIPO_SEXO', sexo_ref.get(data.Sexo, 1))
                    tipo_documento = CatalogoItem.get_catalogo_item(
                        'TIPO_DOCUMENTO', 1)
                    primer_apellido, segundo_apellido, primer_nombre, segundo_nombre = dividir_nombres_completos(
                        data.get('Nombre'))

                    datos['persona'] = {
                        'numero_documento': data.get('NUI'),
                        'primer_nombre': primer_nombre,
                        'segundo_nombre': segundo_nombre,
                        'primer_apellido': primer_apellido,
                        'segundo_apellido': segundo_apellido,
                        'correo_electronico': None,
                        'tipo_documento': {
                            'nombre': tipo_documento.nombre,
                            'codigo_th': tipo_documento.codigo_th
                        },
                        'sexo': {
                            'nombre': sexo.nombre,
                            'codigo_th': sexo.codigo_th
                        },
                    }
                    datos['direccion'] = {
                        'celular': None,
                        'telefono': None,
                        'calle_principal': data.get('Calle', None),
                        'calle_secundaria': None,
                        'numero': data.get('NumeroCasa', None)
                    }

        # Obtengo las carreras actuales si es estudiante o docente (SGA)
        if 'persona' in datos:
            data = WebServiceSga.get_sgaws_datos_usuario_koha(numero_documento)
            datos['estudiante'] = [{
                'id': dato['id'],
                'carrera': dato['nombre']
            } for dato in data['carreras_estudiante']] if data else []
            datos['docente'] = [{
                'id': dato['id'],
                'carrera': dato['nombre']
            } for dato in data['carreras_docente']] if data else []

        return Response(data=datos)

    except Exception as e:
        datos = str(e)

    return Response(data={'detail': datos}, status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 8
0
def orden_pago_guardar(request):
    """
    Guarda la orden de pago en estado de PENDIENTE y sin registro de Pago
    "persona" : {
        "numero_documento": "1105039059(*)", "primer_nombre": "Lissette(*)",
        "segundo_nombre": "Geoconda", "primer_apellido": "Lopez (*)",
        "segundo_apellido": "Faican", "correo_electronico": "[email protected] (*)",
        "tipo_documento": {"nombre": "Cédula(*)","codigo_th": "1(*)"},
        "sexo": { "nombre": "Mujer(*)","codigo_th": "0(*)"}
    },
    "direccion" : {
        "calle_principal": "Av. Chuquiribamba(*)",  "numero": "sn",
        "calle_secundaria": "Lago Michigan","celular": "0989170671(*)", "telefono": ""
    },
    "orden_pago" : {
        "descripcion": "Nombre del evento (*)", "referencia": "Sistema de eventos",
        "referencia_externa": "id del evento (*)", "total": 25 (*)
    }
    :param request:
    :return:
    200 Exito {'orden_pago_id': 10, 'estado': 'PENDIENTE'}
    400 Error solicitud, con su descripción
    """
    try:
        persona = request.data.get('persona')
        direccion = request.data.get('direccion')
        orden_pago = request.data.get('orden_pago')
        # Obtengo los registros que son necesarios, catalogos items y el producto para la orden de pago
        tipo_documento = CatalogoItem.get_catalogo_item(
            'TIPO_DOCUMENTO', persona['tipo_documento']['codigo_th'])
        sexo = CatalogoItem.get_catalogo_item('TIPO_SEXO',
                                              persona['sexo']['codigo_th'])
        tipo_direccion = CatalogoItem.get_catalogo_item('TIPO_DIRECCION', 2)

        # Obtengo el codigo del producto por parametrización. Posterior, se puede asociar un codigo del producto
        # por id del evento (referencia_externa)
        detalle = DetalleParametrizacion.get_detalle_parametrizacion(
            'RECAUDACION', 'EVENTOS_CODIGO_PRODUCTO')
        codigo = detalle.valor
        producto = Producto.objects.filter(codigo=codigo).first()

        if tipo_documento and sexo and tipo_direccion and producto:

            # Guardo la persona y direccion
            persona.update({'sexo': sexo, 'tipo_documento': tipo_documento})
            persona_obj, create = Persona.objects.update_or_create(
                numero_documento=persona['numero_documento'], defaults=persona)

            direccion_obj, create = Direccion.objects.update_or_create(
                tipo_direccion=tipo_direccion,
                persona=persona_obj,
                defaults=direccion)

            if persona_obj and direccion_obj:
                # Genero la orden pago
                orden_pago_obj = OrdenPago()
                orden_pago_obj.fecha_emision = datetime.now()
                orden_pago_obj.persona = persona_obj
                orden_pago_obj.direccion = direccion_obj
                orden_pago_obj.descripcion = orden_pago['descripcion']
                orden_pago_obj.referencia = orden_pago.get('referencia', None)
                orden_pago_obj.referencia_externa = orden_pago[
                    'referencia_externa']
                orden_pago_obj.total = orden_pago['total']

                # Genero la orden pago detalle
                cantidad = 1
                precio = round(
                    orden_pago_obj.total /
                    (float(producto.tipo_impuesto.valor) + 1), 2)
                impuesto = round(orden_pago_obj.total - precio, 2)
                total = round(precio + impuesto, 2)

                detalle_obj = OrdenPagoDetalle()
                detalle_obj.cantidad = cantidad
                detalle_obj.impuesto = impuesto
                detalle_obj.precio = precio
                detalle_obj.total = total
                detalle_obj.producto = producto
                detalle_obj.producto_codigo = producto.codigo
                detalle_obj.producto_descripcion = producto.descripcion
                detalle_obj.tipo_impuesto = producto.tipo_impuesto
                detalle_obj.impuesto_tarifa = producto.tipo_impuesto.valor
                detalle_obj.impuesto_codigo = producto.tipo_impuesto.codigo

                # Guardo los registros
                orden_pago_obj.save()
                detalle_obj.orden_pago = orden_pago_obj
                detalle_obj.save()

                return Response(
                    data={
                        'orden_pago_id': orden_pago_obj.id,
                        'estado': orden_pago_obj.estado
                    })

            else:
                datos = 'Error al guardar la persona y dirección'
        else:
            datos = 'No existen los catalogs items (codigo_th) o el producto (descripción) para la orden de pago'

    except Exception as e:
        datos = str(e)

    return Response(data={'detail': datos}, status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 9
0
class ReporteForm(forms.Form):
    choice_tipo_relacion_laboral = [
        (trl.id, trl.nombre)
        for trl in CatalogoItem.get_catalogos_items('TIPO_RELACION_LABORAL')
    ]
    choice_tipo_relacion_laboral.append(('', 'Todo'))

    choice_tipo_terminacion = [
        (trl.id, trl.nombre)
        for trl in CatalogoItem.get_catalogos_items('TIPO_TERMINACION')
    ]

    choice_tipo_terminacion.append(('', 'Todo'))

    choice_grupo_ocupacional = [
        (go.id, go.__str__())
        for go in GrupoOcupacional.objects.all().order_by('nombre')
    ]
    choice_grupo_ocupacional.append(('', 'Todo'))

    choice_regimen_laboral = [(rl.id, rl.nombre)
                              for rl in RegimenLaboral.objects.all()]
    choice_regimen_laboral.append(('', 'Todo'))

    choice_puesto = [(rl.id, rl.denominacion) for rl in Puesto.objects.all()]
    choice_puesto.append(('', 'Todo'))

    choice_uaa = [(rl.id, rl.__str__()) for rl in UAA.objects.all()]
    choice_uaa.append(('', 'Todo'))

    criterio = forms.CharField(required=False, max_length=255)
    activo = forms.NullBooleanField(required=False, )
    encargado = forms.NullBooleanField(required=False)
    fecha_inicio_desde = forms.DateField(required=False,
                                         widget=forms.DateInput(
                                             format='%Y-%m-%d',
                                             attrs={'class': 'datepicker'}))
    fecha_inicio_hasta = forms.DateField(required=False,
                                         widget=forms.DateInput(
                                             format='%Y-%m-%d',
                                             attrs={'class': 'datepicker'}))
    fecha_fin_desde = forms.DateField(required=False,
                                      widget=forms.DateInput(
                                          format='%Y-%m-%d',
                                          attrs={'class': 'datepicker'}))
    fecha_fin_hasta = forms.DateField(required=False,
                                      widget=forms.DateInput(
                                          format='%Y-%m-%d',
                                          attrs={'class': 'datepicker'}))
    fecha_termino_desde = forms.DateField(required=False,
                                          widget=forms.DateInput(
                                              format='%Y-%m-%d',
                                              attrs={'class': 'datepicker'}))
    fecha_termino_hasta = forms.DateField(required=False,
                                          widget=forms.DateInput(
                                              format='%Y-%m-%d',
                                              attrs={'class': 'datepicker'}))
    grupo_ocupacional = forms.ChoiceField(
        choices=choice_grupo_ocupacional,
        initial='',
        required=False,
        widget=forms.Select(attrs={'class': 'select2'}))
    ingreso_concurso = forms.NullBooleanField(required=False)
    puesto = forms.ChoiceField(
        choices=choice_puesto,
        initial='',
        required=False,
    )
    regimen_laboral = forms.ChoiceField(
        choices=choice_regimen_laboral,
        initial='',
        required=False,
    )
    responsable_uaa = forms.NullBooleanField(required=False)
    termino = forms.NullBooleanField(required=False)
    tipo_terminacion = forms.ChoiceField(
        choices=choice_tipo_terminacion,
        initial='',
        required=False,
        widget=forms.Select(attrs={'class': 'select2'}))
    tipo_relacion_laboral = forms.ChoiceField(
        choices=choice_tipo_relacion_laboral,
        initial='',
        required=False,
    )
    uaa = forms.ChoiceField(choices=choice_uaa,
                            initial='',
                            required=False,
                            widget=forms.Select(attrs={'class': 'select2'}))
    uaa_hijas = forms.NullBooleanField(required=False)
    vigente = forms.NullBooleanField(required=False)

    choice_sexo = [(trl.id, trl.nombre)
                   for trl in CatalogoItem.get_catalogos_items('TIPO_SEXO')]
    choice_sexo.append(('', 'Todo'))
    sexo = forms.ChoiceField(choices=choice_sexo, initial='', required=False)

    choice_tipo_etnia = [
        (trl.id, trl.nombre)
        for trl in CatalogoItem.get_catalogos_items('TIPO_ETNIA')
    ]
    choice_tipo_etnia.append(('', 'Todo'))
    tipo_etnia = forms.ChoiceField(choices=choice_tipo_etnia,
                                   initial='',
                                   required=False)

    choice_tipo_discapacidad = [
        (trl.id, trl.nombre)
        for trl in CatalogoItem.get_catalogos_items('TIPO_DISCAPACIDAD')
    ]
    choice_tipo_discapacidad.append(('ninguna', 'Ninguna'))
    choice_tipo_discapacidad.append(('', 'Todas'))
    tipo_discapacidad = forms.ChoiceField(choices=choice_tipo_discapacidad,
                                          initial='',
                                          required=False)

    choice_estado_civil = [
        (trl.id, trl.nombre)
        for trl in CatalogoItem.get_catalogos_items('ESTADO_CIVIL')
    ]
    choice_estado_civil.append(('', 'Todas'))
    estado_civil = forms.ChoiceField(choices=choice_estado_civil,
                                     initial='',
                                     required=False)