Esempio n. 1
0
def cartaabsentisme_clean( instance ):
    '''
    
    calcular tipus:
        tipus1 = primera carta tots
        tipus2 = segona carta tots
        tipus3B = tercera carta ESO
        tipus3A = tercera carta post obligatoria
        tipus3C = cursa obligatoria i té més de 16 anys
    
    '''
    errors = []
    instance.__is_update = instance.pk is not None
    
    if not instance.__is_update:
        
        if instance.data_carta is None:
            instance.data_carta = date.today()
            
        if instance.data_carta > date.today():
            errors.append(u'Revisa la data de la carta.' )
        
        #busco darrera carta:
        try:
            darrera_carta = instance.alumne.cartaabsentisme_set.exclude( carta_esborrada_moment__isnull = False ).order_by( '-carta_numero' )[0]
            darrera_carta_n = darrera_carta.carta_numero
        except IndexError:
            darrera_carta = None
            darrera_carta_n = 0
        carta_numero = darrera_carta_n + 1
        
        #data des d'on començar a comptar
        if bool( darrera_carta ):
            faltes_des_de_data = darrera_carta.faltes_fins_a_data + timedelta( days = 1 )
        else:
            try:
                faltes_des_de_data =(instance
                                     .alumne
                                     .controlassistencia_set
                                     .values_list( 'impartir__dia_impartir', flat=True )
                                     .order_by( 'impartir__dia_impartir')[0]
                                     )
            except IndexError:
                faltes_des_de_data =(instance
                                     .alumne
                                     .grup
                                     .curs
                                     .data_inici_curs
                                     )
        
        #data fins on comptar:
        try:
            faltes_fins_a_data = (
                                 instance
                                 .alumne
                                 .controlassistencia_set
                                 .filter( impartir__dia_impartir__lte = instance.data_carta )
                                 .values_list( 'impartir__dia_impartir', flat=True )
                                 .order_by( '-impartir__dia_impartir')
                                 .distinct()[4]
                                 )
        except IndexError:
            faltes_fins_a_data = instance.data_carta - timedelta( days = 3 )
        
        #comprovo que hi ha més de 15 faltes:
        EstatControlAssistencia = get_model('presencia', 'EstatControlAssistencia')
        falta = EstatControlAssistencia.objects.get( codi_estat = 'F'  )
        nfaltes = (
                   instance
                   .alumne
                   .controlassistencia_set
                   .filter( impartir__dia_impartir__range = ( faltes_des_de_data, faltes_fins_a_data )   )
                   .filter( estat = falta )
                   .count()
                   )
        
        if nfaltes < 15:
            errors.append(u'Aquest alumne no ha acumulat 15 faltes des de la darrera carta' )

        
        #calculo tipus de carta    
        tipus_carta=None
        if 1 <= carta_numero <= 2:
            tipus_carta = 'tipus{0}'.format( carta_numero  )
        elif carta_numero == 3 and instance.alumne.cursa_obligatoria():  
            try:
                te_mes_de_16 = (curs_any_fi() - instance.alumne.data_neixement.year) > 16
            except:
                te_mes_de_16 = False
            if te_mes_de_16:
                tipus_carta = 'tipus3C'
            else:
                tipus_carta = 'tipus3A'
        elif carta_numero == 3 and not instance.alumne.cursa_obligatoria(): 
            tipus_carta = 'tipus3B'
        elif 1 <= carta_numero <= 3:
            raise Exception("Error triant la carta a enviar a la familia")        
        else:
            errors.append(u'Aquest alumne ja té tres cartes' )

        instance.carta_numero =carta_numero
        instance.tipus_carta = tipus_carta
        instance.faltes_des_de_data = faltes_des_de_data
        instance.faltes_fins_a_data = faltes_fins_a_data
        instance.nfaltes = nfaltes    
    
    if len( errors ) > 0:
        raise ValidationError(errors)    
Esempio n. 2
0
def cartaabsentisme_clean(instance):
    '''
    
    calcular tipus:
        tipus1 = primera carta tots
        tipus2 = segona carta tots
        tipus3A = tercera carta ESO menors 16 anys
        tipus3B = carta Batxillerat
        tipus3C = cursa obligatoria i té més de 16 anys
        tipus3D = carta Cicles

    '''
    errors = []
    instance.__is_update = instance.pk is not None

    if not instance.__is_update:

        if instance.data_carta is None:
            instance.data_carta = date.today()

        if instance.data_carta > date.today():
            errors.append(u'Revisa la data de la carta.')

        #busco darrera carta:
        try:
            darrera_carta = instance.alumne.cartaabsentisme_set.exclude(
                carta_esborrada_moment__isnull=False).order_by(
                    '-carta_numero')[0]
            darrera_carta_n = darrera_carta.carta_numero
        except IndexError:
            darrera_carta = None
            darrera_carta_n = 0
        carta_numero = darrera_carta_n + 1

        #data des d'on començar a comptar
        if bool(darrera_carta):
            faltes_des_de_data = darrera_carta.faltes_fins_a_data + timedelta(
                days=1)
        else:
            try:
                faltes_des_de_data = (
                    instance.alumne.controlassistencia_set.values_list(
                        'impartir__dia_impartir',
                        flat=True).order_by('impartir__dia_impartir')[0])
            except IndexError:
                faltes_des_de_data = (
                    instance.alumne.grup.curs.data_inici_curs)

        #data fins on comptar:
        try:
            faltes_fins_a_data = (
                instance.alumne.controlassistencia_set.filter(
                    impartir__dia_impartir__lte=instance.data_carta).
                values_list('impartir__dia_impartir', flat=True).order_by(
                    '-impartir__dia_impartir').distinct()[4])
        except IndexError:
            faltes_fins_a_data = instance.data_carta - timedelta(days=3)

        #comprovo que hi ha més de 15 faltes:
        EstatControlAssistencia = apps.get_model('presencia',
                                                 'EstatControlAssistencia')
        falta = EstatControlAssistencia.objects.get(codi_estat='F')
        nfaltes = (instance.alumne.controlassistencia_set.filter(
            impartir__dia_impartir__range=(faltes_des_de_data,
                                           faltes_fins_a_data)).filter(
                                               estat=falta).count())

        # [email protected]
        # Decideix el màxim de cartes i les faltes per carta segons el nivell i el número de la carta.
        # Fa falta CUSTOM_FALTES_ABSENCIA_PER_NIVELL_NUM_CARTA
        # No fa falta definir el tipus de carta en aquest moment, es farà al document odt
        if len(settings.CUSTOM_FALTES_ABSENCIA_PER_NIVELL_NUM_CARTA) > 0:
            faltes = settings.CUSTOM_FALTES_ABSENCIA_PER_NIVELL_NUM_CARTA.get(
                instance.alumne.getNivellCustom())
            if faltes is not None:
                maxCartes = len(faltes)
            else:
                maxCartes = 0
            if carta_numero <= maxCartes:
                llindar = faltes[carta_numero - 1]
            else:
                llindar = 0
            perNivell = True
        else:
            perNivell = False  # si False, no fa servir CUSTOM_FALTES_ABSENCIA_PER_NIVELL_NUM_CARTA

        #calculo tipus de carta
        tipus_carta = None
        try:
            te_mes_de_16 = (curs_any_fi() -
                            instance.alumne.data_neixement.year) > 16
        except:
            te_mes_de_16 = False

        # [email protected]
        if perNivell:
            tipus_carta = ''
            if carta_numero > maxCartes and maxCartes > 0:
                errors.append(u'Aquest alumne ha arribat al màxim de cartes')
            else:
                if llindar == 0:
                    raise Exception(
                        u"Error triant la carta a enviar a la família")
        else:

            if False:
                pass

            elif carta_numero in [
                    1,
                    2,
            ] and instance.alumne.cursa_nivell(u"ESO"):
                tipus_carta = 'tipus{0}'.format(carta_numero)

            elif carta_numero == 3 and instance.alumne.cursa_nivell(
                    u"ESO") and not te_mes_de_16:
                tipus_carta = 'tipus3A'

            elif carta_numero == 3 and instance.alumne.cursa_nivell(
                    u"ESO") and te_mes_de_16:
                tipus_carta = 'tipus3C'

            elif carta_numero in [
                    1,
                    2,
                    3,
            ] and instance.alumne.cursa_nivell(u"BTX"):
                tipus_carta = 'tipus3B'

            elif carta_numero in [
                    1,
                    2,
                    3,
            ] and instance.alumne.cursa_nivell(u"CICLES"):
                tipus_carta = 'tipus3D'

            elif carta_numero in [
                    1,
                    2,
                    3,
            ]:
                raise Exception(u"Error triant la carta a enviar a la família")

            else:
                errors.append(u'Aquest alumne ha arribat al màxim de cartes')

            llindar = settings.CUSTOM_FALTES_ABSENCIA_PER_TIPUS_CARTA.get(
                instance.tipus_carta,
                settings.CUSTOM_FALTES_ABSENCIA_PER_CARTA)

        instance.carta_numero = carta_numero
        instance.tipus_carta = tipus_carta
        instance.faltes_des_de_data = faltes_des_de_data
        instance.faltes_fins_a_data = faltes_fins_a_data
        instance.nfaltes = nfaltes

    if instance.nfaltes < llindar:
        errors.append(
            u'Aquest alumne no ha acumulat {} faltes des de la darrera carta'.
            format(llindar))

    if len(errors) > 0:
        raise ValidationError(errors)
Esempio n. 3
0
def cartaabsentisme_clean(instance):
    '''
    
    calcular tipus:
        tipus1 = primera carta tots
        tipus2 = segona carta tots
        tipus3B = tercera carta ESO
        tipus3A = tercera carta post obligatoria
        tipus3C = cursa obligatoria i té més de 16 anys
    
    '''
    errors = []
    instance.__is_update = instance.pk is not None

    if not instance.__is_update:

        if instance.data_carta is None:
            instance.data_carta = date.today()

        if instance.data_carta > date.today():
            errors.append(u'Revisa la data de la carta.')

        #busco darrera carta:
        try:
            darrera_carta = instance.alumne.cartaabsentisme_set.exclude(
                carta_esborrada_moment__isnull=False).order_by(
                    '-carta_numero')[0]
            darrera_carta_n = darrera_carta.carta_numero
        except IndexError:
            darrera_carta = None
            darrera_carta_n = 0
        carta_numero = darrera_carta_n + 1

        #data des d'on començar a comptar
        if bool(darrera_carta):
            faltes_des_de_data = darrera_carta.faltes_fins_a_data + timedelta(
                days=1)
        else:
            try:
                faltes_des_de_data = (
                    instance.alumne.controlassistencia_set.values_list(
                        'impartir__dia_impartir',
                        flat=True).order_by('impartir__dia_impartir')[0])
            except IndexError:
                faltes_des_de_data = (
                    instance.alumne.grup.curs.data_inici_curs)

        #data fins on comptar:
        try:
            faltes_fins_a_data = (
                instance.alumne.controlassistencia_set.filter(
                    impartir__dia_impartir__lte=instance.data_carta).
                values_list('impartir__dia_impartir', flat=True).order_by(
                    '-impartir__dia_impartir').distinct()[4])
        except IndexError:
            faltes_fins_a_data = instance.data_carta - timedelta(days=3)

        #comprovo que hi ha més de 15 faltes:
        EstatControlAssistencia = get_model('presencia',
                                            'EstatControlAssistencia')
        falta = EstatControlAssistencia.objects.get(codi_estat='F')
        nfaltes = (instance.alumne.controlassistencia_set.filter(
            impartir__dia_impartir__range=(faltes_des_de_data,
                                           faltes_fins_a_data)).filter(
                                               estat=falta).count())

        if nfaltes < 15:
            errors.append(
                u'Aquest alumne no ha acumulat 15 faltes des de la darrera carta'
            )

        #calculo tipus de carta
        tipus_carta = None
        if 1 <= carta_numero <= 2:
            tipus_carta = 'tipus{0}'.format(carta_numero)
        elif carta_numero == 3 and instance.alumne.cursa_obligatoria():
            try:
                te_mes_de_16 = (curs_any_fi() -
                                instance.alumne.data_neixement.year) > 16
            except:
                te_mes_de_16 = False
            if te_mes_de_16:
                tipus_carta = 'tipus3C'
            else:
                tipus_carta = 'tipus3A'
        elif carta_numero == 3 and not instance.alumne.cursa_obligatoria():
            tipus_carta = 'tipus3B'
        elif 1 <= carta_numero <= 3:
            raise Exception("Error triant la carta a enviar a la familia")
        else:
            errors.append(u'Aquest alumne ja té tres cartes')

        instance.carta_numero = carta_numero
        instance.tipus_carta = tipus_carta
        instance.faltes_des_de_data = faltes_des_de_data
        instance.faltes_fins_a_data = faltes_fins_a_data
        instance.nfaltes = nfaltes

    if len(errors) > 0:
        raise ValidationError(errors)
Esempio n. 4
0
def totesLesCartesRpt():

    report = []

    #--- Grups ----------------------------------------------------------------------------

    taula = tools.classebuida()

    taula.titol = tools.classebuida()
    taula.titol.contingut = ''
    taula.titol.enllac = None

    taula.capceleres = []

    capcelera = tools.classebuida()
    capcelera.amplade = 20
    capcelera.contingut = u'Data'
    taula.capceleres.append(capcelera)

    capcelera = tools.classebuida()
    capcelera.amplade = 60
    capcelera.contingut = u'Alumne'
    capcelera.enllac = ""
    taula.capceleres.append(capcelera)

    capcelera = tools.classebuida()
    capcelera.amplade = 20
    capcelera.contingut = u'Cartes nº.'
    taula.capceleres.append(capcelera)

    taula.fileres = []

    for carta in CartaAbsentisme.objects.all().order_by('-data_carta'):

        filera = []

        #-data--------------------------------------------
        camp = tools.classebuida()
        camp.enllac = None
        camp.contingut = date(carta.data_carta, 'j N Y')
        filera.append(camp)

        #-alumne--------------------------------------------
        camp = tools.classebuida()
        camp.enllac = None

        from aula.apps.alumnes.named_instances import curs_any_fi
        te_mes_de_16 = (u", Més de 16 anys (durant el curs)" if (
            carta.alumne.cursa_obligatoria() and
            (curs_any_fi() - carta.alumne.data_neixement.year) > 16) else "")
        camp.contingut = u"{0} - {1} {2}".format(carta.alumne,
                                                 carta.alumne.grup,
                                                 te_mes_de_16)
        filera.append(camp)

        #-carta num--------------------------------------------
        camp = tools.classebuida()
        camp.enllac = r'/tutoria/imprimirCartaNoFlag/{0}'.format(carta.pk)
        camp.contingut = '{0}'.format(carta.carta_numero)
        filera.append(camp)

        #--
        taula.fileres.append(filera)

    report.append(taula)

    return report
def totesLesCartesRpt( ):
    
    report = []

    #--- Grups ----------------------------------------------------------------------------

    taula = tools.classebuida()

    taula.titol = tools.classebuida()
    taula.titol.contingut = ''
    taula.titol.enllac = None

    taula.capceleres = []

    capcelera = tools.classebuida()
    capcelera.amplade = 20
    capcelera.contingut = u'Data'
    taula.capceleres.append(capcelera)
    
    capcelera = tools.classebuida()
    capcelera.amplade = 60
    capcelera.contingut = u'Alumne'
    capcelera.enllac = ""
    taula.capceleres.append(capcelera)

    capcelera = tools.classebuida()
    capcelera.amplade = 20
    capcelera.contingut = u'Cartes nº.'
    taula.capceleres.append(capcelera)
    
    taula.fileres = []    
    
    for carta in CartaAbsentisme.objects.all().order_by( '-data_carta'):
            
        filera = []
        
        #-data--------------------------------------------
        camp = tools.classebuida()
        camp.enllac = None
        camp.contingut = date( carta.data_carta , 'j N Y')
        filera.append(camp)

        #-alumne--------------------------------------------
        camp = tools.classebuida()
        camp.enllac = None
        
        from aula.apps.alumnes.named_instances import curs_any_fi
        te_mes_de_16 = ( u", Més de 16 anys (durant el curs)" 
                         if (carta.alumne.cursa_obligatoria() and
                            (curs_any_fi() - carta.alumne.data_neixement.year) > 16)
                         else ""
                        )
        camp.contingut = u"{0} - {1} {2}".format( carta.alumne, carta.alumne.grup, te_mes_de_16 )
        filera.append(camp)

        #-carta num--------------------------------------------
        camp = tools.classebuida()
        camp.enllac = r'/tutoria/imprimirCartaNoFlag/{0}'.format( carta.pk )
        camp.contingut = '{0}'.format( carta.carta_numero)
        filera.append(camp)
        
        #--
        taula.fileres.append( filera )    
                
    report.append(taula)
        
    return report
    
    
Esempio n. 6
0
def cartaabsentisme_clean( instance ):
    '''
    
    calcular tipus:
        tipus1 = primera carta tots
        tipus2 = segona carta tots
        tipus3A = tercera carta ESO menors 16 anys
        tipus3B = carta Batxillerat
        tipus3C = cursa obligatoria i té més de 16 anys
        tipus3D = carta Cicles

    '''
    errors = []
    instance.__is_update = instance.pk is not None
    
    if not instance.__is_update:
        
        if instance.data_carta is None:
            instance.data_carta = date.today()
            
        if instance.data_carta > date.today():
            errors.append(u'Revisa la data de la carta.' )
        
        #busco darrera carta:
        try:
            darrera_carta = instance.alumne.cartaabsentisme_set.exclude( carta_esborrada_moment__isnull = False ).order_by( '-carta_numero' )[0]
            darrera_carta_n = darrera_carta.carta_numero
        except IndexError:
            darrera_carta = None
            darrera_carta_n = 0
        carta_numero = darrera_carta_n + 1
        
        #data des d'on començar a comptar
        if bool( darrera_carta ):
            faltes_des_de_data = darrera_carta.faltes_fins_a_data + timedelta( days = 1 )
        else:
            try:
                faltes_des_de_data =(instance
                                     .alumne
                                     .controlassistencia_set
                                     .values_list( 'impartir__dia_impartir', flat=True )
                                     .order_by( 'impartir__dia_impartir')[0]
                                     )
            except IndexError:
                faltes_des_de_data =(instance
                                     .alumne
                                     .grup
                                     .curs
                                     .data_inici_curs
                                     )

        #data fins on comptar:
        try:
            faltes_fins_a_data = (
                                 instance
                                 .alumne
                                 .controlassistencia_set
                                 .filter( impartir__dia_impartir__lte = instance.data_carta )
                                 .values_list( 'impartir__dia_impartir', flat=True )
                                 .order_by( '-impartir__dia_impartir')
                                 .distinct()[4]
                                 )
        except IndexError:
            faltes_fins_a_data = instance.data_carta - timedelta( days = 3 )
        
        #comprovo que hi ha més de 15 faltes:
        EstatControlAssistencia = apps.get_model('presencia', 'EstatControlAssistencia')
        falta = EstatControlAssistencia.objects.get( codi_estat = 'F'  )
        nfaltes = (
                   instance
                   .alumne
                   .controlassistencia_set
                   .filter( impartir__dia_impartir__range = ( faltes_des_de_data, faltes_fins_a_data )   )
                   .filter( estat = falta )
                   .count()
                   )

        # [email protected]
        # Decideix el màxim de cartes i les faltes per carta segons el nivell i el número de la carta.
        # Fa falta CUSTOM_FALTES_ABSENCIA_PER_NIVELL_NUM_CARTA
        # No fa falta definir el tipus de carta en aquest moment, es farà al document odt
        if len(settings.CUSTOM_FALTES_ABSENCIA_PER_NIVELL_NUM_CARTA)>0:
            faltes = settings.CUSTOM_FALTES_ABSENCIA_PER_NIVELL_NUM_CARTA.get(instance.alumne.getNivellCustom())
            if faltes is not None:
                maxCartes = len(faltes)
            else:
                maxCartes = 0
            if carta_numero<=maxCartes:
                llindar = faltes[carta_numero-1]
            else:
                llindar=0
            perNivell=True
        else:
            perNivell=False  # si False, no fa servir CUSTOM_FALTES_ABSENCIA_PER_NIVELL_NUM_CARTA 

        #calculo tipus de carta    
        tipus_carta=None
        try:
            te_mes_de_16 = (curs_any_fi() - instance.alumne.data_neixement.year) > 16
        except:
            te_mes_de_16 = False

        # [email protected]
        if perNivell:
            tipus_carta=''
            if carta_numero>maxCartes and maxCartes>0:
                errors.append(u'Aquest alumne ha arribat al màxim de cartes' )
            else:
                if llindar==0:
                    raise Exception(u"Error triant la carta a enviar a la família")
        else:
            
            if False:
                pass

            elif carta_numero in [1,2,] and instance.alumne.cursa_nivell(u"ESO"):
                tipus_carta = 'tipus{0}'.format( carta_numero  )

            elif carta_numero == 3 and instance.alumne.cursa_nivell(u"ESO") and not te_mes_de_16:
                tipus_carta = 'tipus3A'

            elif carta_numero == 3 and instance.alumne.cursa_nivell(u"ESO") and te_mes_de_16:
                tipus_carta = 'tipus3C'

            elif carta_numero in [1,2,3,] and instance.alumne.cursa_nivell(u"BTX"):
                tipus_carta = 'tipus3B'

            elif carta_numero in [1,2,3,] and instance.alumne.cursa_nivell(u"CICLES"):
                tipus_carta = 'tipus3D'

            elif carta_numero in [1,2,3,]:
                raise Exception(u"Error triant la carta a enviar a la família")

            else:
                errors.append(u'Aquest alumne ha arribat al màxim de cartes' )

            llindar = settings.CUSTOM_FALTES_ABSENCIA_PER_TIPUS_CARTA.get(instance.tipus_carta,settings.CUSTOM_FALTES_ABSENCIA_PER_CARTA)

        instance.carta_numero =carta_numero
        instance.tipus_carta = tipus_carta
        instance.faltes_des_de_data = faltes_des_de_data
        instance.faltes_fins_a_data = faltes_fins_a_data
        instance.nfaltes = nfaltes

    if instance.nfaltes < llindar:
        errors.append(u'Aquest alumne no ha acumulat {} faltes des de la darrera carta'.format(llindar))

    if len( errors ) > 0:
        raise ValidationError(errors)