def controlAssistencia_post_save(sender, instance, created, **kwargs):

    #si els retards provoquen incidència la posem:
    if settings.CUSTOM_RETARD_PROVOCA_INCIDENCIA:

        frase = settings.CUSTOM_RETARD_FRASE

        TipusIncidencia = get_model('incidencies', 'TipusIncidencia')
        tipus, _ = TipusIncidencia.objects.get_or_create(
            **settings.CUSTOM_RETARD_TIPUS_INCIDENCIA)

        Incidencia = get_model('incidencies', 'Incidencia')
        abans_no_era_retard = created or (
            hasattr(instance, 'instanceDB') and instance.instanceDB
            and instance.instanceDB.estat
            and instance.instanceDB.estat.codi_estat != 'R')

        #posem incidència si arriba tard ( només si passem de res a retard )
        if instance.estat and instance.estat.codi_estat == 'R' and abans_no_era_retard:
            ja_hi_es = Incidencia.objects.filter(
                alumne=instance.alumne,
                control_assistencia=instance,
                descripcio_incidencia=frase,
                tipus=tipus,
            ).exists()

            if not ja_hi_es:
                i = Incidencia.objects.create(
                    professional=User2Professional(instance.professor),
                    alumne=instance.alumne,
                    control_assistencia=instance,
                    descripcio_incidencia=frase,
                    tipus=tipus,
                )
                incidencia_despres_de_posar(
                    i)  #TODO: Passar-ho a post-save!!!!

        #treiem incidència retard si arriba a l'hora
        elif instance.estat and instance.estat.codi_estat != 'R':
            try:
                Incidencia.objects.filter(
                    alumne=instance.alumne,
                    control_assistencia=instance,
                    descripcio_incidencia=frase,
                    tipus=tipus,
                ).delete()
            except:
                pass
Beispiel #2
0
def controlAssistencia_post_save(sender, instance, created, **kwargs):
  
    #si els retards provoquen incidència la posem:
    if settings.CUSTOM_RETARD_PROVOCA_INCIDENCIA:
         
         
        frase = settings.CUSTOM_RETARD_FRASE
         
        TipusIncidencia = get_model('incidencies','TipusIncidencia')
        tipus, _ = TipusIncidencia.objects.get_or_create(  **settings.CUSTOM_RETARD_TIPUS_INCIDENCIA )
     
        Incidencia = get_model('incidencies','Incidencia')
        abans_no_era_retard = created or ( hasattr(instance, 'instanceDB') and  instance.instanceDB and instance.instanceDB.estat and instance.instanceDB.estat.codi_estat != 'R' )
         
        #posem incidència si arriba tard ( només si passem de res a retard )
        if instance.estat and instance.estat.codi_estat == 'R' and abans_no_era_retard:
            ja_hi_es = Incidencia.objects.filter( 
                                                              alumne = instance.alumne,
                                                              control_assistencia = instance,
                                                              descripcio_incidencia = frase,
                                                              tipus= tipus ,).exists()
     
            if not ja_hi_es:
                i = Incidencia.objects.create(    
                                          professional = User2Professional( instance.professor ),
                                          alumne = instance.alumne,
                                          control_assistencia = instance,
                                          descripcio_incidencia = frase,
                                          tipus = tipus ,)
                incidencia_despres_de_posar( i )                                       #TODO: Passar-ho a post-save!!!!
 
         
        #treiem incidència retard si arriba a l'hora
        elif instance.estat and instance.estat.codi_estat != 'R':
            try:
                Incidencia.objects.filter( 
                                                              alumne = instance.alumne,
                                                              control_assistencia = instance,
                                                              descripcio_incidencia = frase,
                                                              tipus = tipus,).delete()
            except:
                pass
             

    #
    #
    # --  casos en que no s'ha de passar llista
    #
    #

    NoHaDeSerALAula = get_model('presencia','NoHaDeSerALAula')
  
    #-- si està expulsat del centre aquell dia ho anotem:
    Sancio = get_model('incidencies','Sancio')
    sancio = Sancio.alumne_sancionat_en_data( instance.alumne,              #alumne
                                        instance.impartir.dia_impartir,     #dia
                                        instance.impartir.horari.hora       #franja
                                       )
      
    instance.nohadeseralaula_set.filter( motiu = NoHaDeSerALAula.EXPULSAT_DEL_CENTRE ).delete()
    for x in sancio:
        NoHaDeSerALAula.objects.create( control = instance, 
                                               motiu = NoHaDeSerALAula.EXPULSAT_DEL_CENTRE,
                                               sancio=x )
        
         
    #-- si té una sortida aquell dia ho anotem:
    Sortida = get_model('sortides','Sortida')
    sortida = Sortida.alumne_te_sortida_en_data( instance.alumne,                   #alumne
                                                instance.impartir.dia_impartir,     #dia
                                                instance.impartir.horari.hora       #franja
                                               )
      
    instance.nohadeseralaula_set.filter( motiu = NoHaDeSerALAula.SORTIDA ).delete()
    for x in [ s for s in sortida if not s.alumnes_a_l_aula_amb_professor_titular ]:
        NoHaDeSerALAula.objects.create( control = instance, 
                                               motiu = NoHaDeSerALAula.SORTIDA,
                                               sortida=x )
Beispiel #3
0
def calcula_menu(user, path):

    if not user.is_authenticated():
        return

    #mire a quins grups està aquest usuari:
    al = Group.objects.get_or_create(name='alumne')[0] in user.groups.all()
    di = not al and Group.objects.get_or_create(
        name='direcció')[0] in user.groups.all()
    pr = not al and Group.objects.get_or_create(
        name='professors')[0] in user.groups.all()
    pl = not al and Group.objects.get_or_create(
        name='professional')[0] in user.groups.all()
    co = not al and Group.objects.get_or_create(
        name='consergeria')[0] in user.groups.all()
    pg = not al and Group.objects.get_or_create(
        name='psicopedagog')[0] in user.groups.all()
    so = not al and Group.objects.get_or_create(
        name='sortides')[0] in user.groups.all()
    tu = not al and pr and (
        User2Professor(user).tutor_set.exists()
        or User2Professor(user).tutorindividualitzat_set.exists())
    tots = di or pr or pl or co or al or pg

    #Comprovar si té missatges sense llegir
    nMissatges = user.destinatari_set.filter(
        moment_lectura__isnull=True).count()
    fa2segons = datetime.now() - timedelta(seconds=2)
    nMissatgesDelta = user.destinatari_set.filter(
        moment_lectura__gte=fa2segons).count()

    #Comprovar si té expulsions sense tramitar o cal fer expulsions per acumulació
    teExpulsionsSenseTramitar = False
    if pr:
        professor = User2Professor(user)
        teExpulsionsSenseTramitar = professor.expulsio_set.exclude(
            tramitacio_finalitzada=True).exists()

        #Acumulació Incidències
        if settings.CUSTOM_INCIDENCIES_PROVOQUEN_EXPULSIO and not teExpulsionsSenseTramitar:
            professional = User2Professional(user)
            teExpulsionsSenseTramitar = (Alumne.objects.order_by().filter(
                incidencia__professional=professional,
                incidencia__tipus__es_informativa=False,
                incidencia__gestionada_pel_tutor=False,
                incidencia__es_vigent=True).annotate(
                    n=Count('incidencia')).filter(n__gte=3).exists())

    #Comprovar si hi ha una qualitativa oberta
    hiHaUnaQualitativaOberta = False
    if pr:
        from aula.apps.avaluacioQualitativa.models import AvaluacioQualitativa
        hiHaUnaQualitativaOberta = AvaluacioQualitativa.objects.filter(
            data_obrir_avaluacio__lte=date.today(),
            data_tancar_avaluacio__gte=date.today()).exists()

    menu = {
        'items': [],
        'subitems': [],
        'subsubitems': [],
    }

    try:
        nom_path = resolve(path).url_name
    except:
        return menu

    menu["esalumne"] = al
    if al:
        alumneuser = AlumneUser.objects.get(id=user.id)
        alumne = alumneuser.getAlumne()
        menu["nomusuari"] = u"Família de {alumne}".format(alumne=alumne.nom)
    else:
        menu["nomusuari"] = user.first_name or user.username

    try:
        menu_id, submenu_id, subsubmenu_id = nom_path.split('__')[:3]
    except:
        return menu

    arbre_tutoria = (
        ("Actuacions", 'tutoria__actuacions__list', tu, None, None),
        ("Incidències de Tutor", 'tutoria__incidencies__list', tu, None, None),
        ("Justificar", 'tutoria__justificar__pre_justificar', tu, None, None),
        ("Cartes", 'tutoria__cartes_assistencia__gestio_cartes', tu, None,
         None),
        ("Alumnes", 'tutoria__alumnes__list', tu, None, None),
        ("Assistència", 'tutoria__assistencia__list_entre_dates', tu, None,
         None),
        ("Informe", 'tutoria__alumne__informe_setmanal', tu, None, None),
        ("Portal", 'tutoria__relacio_families__dades_relacio_families', tu,
         None, None),
        ("Seguiment", 'tutoria__seguiment_tutorial__formulari', tu, None,
         None),
    )
    if settings.CUSTOM_TUTORS_INFORME:
        arbre_tutoria += (("Impressió Faltes i Incid.",
                           'tutoria__informe__informe_faltes_incidencies', tu,
                           None, None), )

    if hasattr(settings, 'CUSTOM_MODUL_SORTIDES_ACTIU'
               ) and settings.CUSTOM_MODUL_SORTIDES_ACTIU and (di or pr):
        professor = User2Professor(user)
        filtre = [
            'P',
            'R',
        ]
        te_sortides_actives = (Sortida.objects.exclude(estat='E').filter(
            estat__in=filtre).filter(data_inici__gte=datetime.now()).filter(
                tutors_alumnes_convocats=professor).exists())
        arbre_tutoria += (("Sortides", 'tutoria__justificarSortida__list', tu,
                           (u'!',
                            'info') if te_sortides_actives else None, None), )

    arbre1 = (

        #--Consergeria--------------------------------------------------------------------------
        ('consergeria', 'Consergeria', 'consergeria__missatges__envia_tutors',
         co, None, (
             ("Missatge a tutors", 'consergeria__missatges__envia_tutors', co,
              None, None),
             ("Incidència per retard", 'consergeria__incidencia__onbehalf', co,
              None, None),
         )),

        #--Aula--------------------------------------------------------------------------
        #  id,    nom     vista                 seg      label
        (
            'aula',
            'Aula',
            'blanc__blanc__blanc',
            pr,
            teExpulsionsSenseTramitar or hiHaUnaQualitativaOberta,
            (
                ("Presencia", 'aula__horari__horari', pr, None, None),
                #("Alumnes", 'aula__alumnes__alumnes_i_assignatures', pr, None, None ),
                (
                    "Alumnes",
                    'aula__alumnes__blanc',
                    pr,
                    None,
                    (("Els meus alumnes",
                      'aula__alumnes__alumnes_i_assignatures', pr, None), ),
                ),
                (
                    "Incidències",
                    'aula__incidencies__blanc',
                    pr,
                    (u'!', 'info') if teExpulsionsSenseTramitar else None,
                    (
                        ("Incidències",
                         'aula__incidencies__les_meves_incidencies', pr,
                         (u'!',
                          'info') if teExpulsionsSenseTramitar else None),
                        ("Nova Incidència (fora d'aula)",
                         'aula__incidencies__posa_incidencia', pr, None),
                        ("Recull Expulsió", 'aula__incidencies__posa_expulsio',
                         pr, None),
                    ),
                ),
                ("Matèries", 'aula__materies__blanc', pr, None,
                 (("Llistat entre dates",
                   'aula__materies__assistencia_llistat_entre_dates', pr,
                   None), ("Calculadora UF", 'aula__materies__calculadora_uf',
                           pr, None))),
                ("Qualitativa",
                 'aula__qualitativa__les_meves_avaulacions_qualitatives', pr,
                 (u'!', 'info') if hiHaUnaQualitativaOberta else None, None),
            )),

        #--Tutoria--------------------------------------------------------------------------
        ('tutoria', 'Tutoria', 'tutoria__actuacions__list', tu, None,
         arbre_tutoria),

        #--Gestió--------------------------------------------------------------------------
        ('gestio', 'Gestió', 'gestio__reserva_aula__list', co or pl, None, (
            ("Reserva Aula", 'gestio__reserva_aula__list', co
             or pl, None, None),
            ("Cerca Alumne", 'gestio__usuari__cerca', co or pl, None, None),
            ("Cerca Professor", 'gestio__professor__cerca', co
             or pl, None, None),
        )),

        #--psicopedagog--------------------------------------------------------------------------
        ('psico', 'Psicopedagog', 'psico__informes_alumne__list', pg
         or di, None, (
             ("Alumne", 'psico__informes_alumne__list', pg or di, None, None),
             ("Actuacions", 'psico__actuacions__list', pg or di, None, None),
         )),

        #--Coord.Pedag--------------------------------------------------------------------------
        (
            'coordinacio_pedagogica',
            'Coord.Pedag',
            'coordinacio_pedagogica__qualitativa__blanc',
            di,
            None,
            (
                (
                    "Qualitativa",
                    'coordinacio_pedagogica__qualitativa__blanc',
                    di,
                    None,
                    (
                        ("Avaluacions",
                         'coordinacio_pedagogica__qualitativa__avaluacions',
                         di, None),
                        ("Items", 'coordinacio_pedagogica__qualitativa__items',
                         di, None),
                        ("Resultats",
                         'coordinacio_pedagogica__qualitativa__resultats_qualitatives',
                         di, None),
                    ),
                ),
                ("Seguiment Tutorial",
                 "coordinacio_pedagogica__seguiment_tutorial__preguntes", di,
                 None, None),
            ),
        ),

        #--Coord.Alumnes--------------------------------------------------------------------------
        ('coordinacio_alumnes', 'Coord.Alumnes',
         'coordinacio_alumnes__ranking__list', di, None, (
             ("Alertes Incid.", 'coordinacio_alumnes__ranking__list', di, None,
              None),
             ("Alertes Assist.",
              'coordinacio_alumnes__assistencia_alertes__llistat', di, None,
              None),
             ("Cartes", 'coordinacio_alumnes__assistencia__cartes', di, None,
              None),
             ("Sancions", 'coordinacio_alumnes__sancions__sancions', di, None,
              None),
             ("Passa llista grup",
              'coordinacio_alumnes__presencia__passa_llista_a_un_grup_tria',
              di, None, None),
             ("Impressió Faltes i Incid.",
              'coordinacio_alumnes__alumne__informe_faltes_incidencies', di,
              None, None),
         )),

        #--Coord.Profess.--------------------------------------------------------------------------
        (
            'professorat',
            'Coord.Prof',
            'professorat__baixes__blanc',
            di,
            None,
            (
                (
                    "Feina Absència",
                    'professorat__baixes__blanc',
                    di,
                    None,
                    (
                        ('Posar feina',
                         'professorat__baixes__complement_formulari_tria', di,
                         None),
                        ('Imprimir feina',
                         'professorat__baixes__complement_formulari_impressio_tria',
                         di, None),
                    ),
                ),
                (
                    "Tutors",
                    'professorat__tutors__blanc',
                    di,
                    None,
                    (
                        ('Tutors Grups', 'professorat__tutors__tutors_grups',
                         di, None),
                        ('Tutors individualitzat',
                         'professorat__tutors__tutors_individualitzats', di,
                         None),
                    ),
                ),
                ("Professors", 'professorat__professors__list', di, None,
                 None),
                ("Estat Tramitació Exp.",
                 'professorat__expulsions__control_tramitacio', di, None,
                 None),
            ),
        ),

        #--Administració--------------------------------------------------------------------------
        (
            'administracio',
            'Admin',
            'administracio__sincronitza__blanc',
            di,
            None,
            (
                (
                    "Sincronitza",
                    'administracio__sincronitza__blanc',
                    di,
                    None,
                    (
                        ("Alumnes ESO/BAT",
                         'administracio__sincronitza__esfera', di, None),
                        ("Alumnes Cicles", 'administracio__sincronitza__saga',
                         di, None),
                        ("Horaris", 'administracio__sincronitza__kronowin', di,
                         None),
                        ("Aules", 'gestio__aula__assignacomentari', di, None),
                        ("Reprograma",
                         'administracio__sincronitza__regenerar_horaris', di,
                         None),
                    ),
                ),
                ("Reset Passwd", 'administracio__professorat__reset_passwd',
                 di, None, None),
                ("Càrrega Inicial",
                 'administracio__configuracio__carrega_inicial', di, None,
                 None),
                ("Promocions", 'administracio__promocions__llista', di, None,
                 None),
                #                      ("Nou Alumne", 'administracio__alumnes__noualumne', di, None, None),
                # Aquesta pantalla encara no té implementada la seva funcionalitat.
                # Queda pendent acabar-la, o eliminar-la de l'aplicació.
            )),

        #--relacio_families--------------------------------------------------------------------------
        ('relacio_families', u'Famílies',
         'relacio_families__informe__el_meu_informe', al, None, (
             ("Informe", 'relacio_families__informe__el_meu_informe', al, None,
              None),
             ("Paràmetres", 'relacio_families__configuracio__canvi_parametres',
              al, None, None),
         )),
    )

    arbre2 = (

        #--Varis--------------------------------------------------------------------------
        ('varis', 'Ajuda i Avisos',
         'varis__about__about' if al else 'varis__elmur__veure', tots,
         nMissatges > 0, (
             ("Notificacions", 'varis__elmur__veure', di or pr or pl or co
              or pg, (nMissatgesDelta,
                      'info' if nMissatgesDelta < 10 else 'danger')
              if nMissatgesDelta > 0 else None, None),
             ("Missatge a professorat o PAS",
              'varis__prof_i_pas__envia_professors_i_pas', pr or pl
              or co, None, None),
             ("Avisos de Seguretat",
              'varis__avisos__envia_avis_administradors', tots, None, None),
             ("About", 'varis__about__about', tots, None, None),
         )), )

    arbreSortides = ()
    if hasattr(settings, 'CUSTOM_MODUL_SORTIDES_ACTIU'
               ) and settings.CUSTOM_MODUL_SORTIDES_ACTIU and (di or pr):

        filtre = []
        socEquipDirectiu = User.objects.filter(
            pk=user.pk, groups__name='direcció').exists()
        socCoordinador = User.objects.filter(pk=user.pk,
                                             groups__name__in=['sortides'
                                                               ]).exists()

        #si sóc equip directiu només les que tinguin estat 'R' (Revisada pel coordinador)
        if socEquipDirectiu:
            filtre.append('R')
        #si sóc coordinador de sortides només les que tinguin estat 'P' (Proposada)
        if socCoordinador:
            filtre.append('P')

        n_avis_sortides = (Sortida.objects.exclude(estat='E').filter(
            estat__in=filtre).distinct().count())

        n_avis_sortides_meves = (Sortida.objects.filter(estat='E').filter(
            professor_que_proposa__pk=user.pk).distinct().count())

        arbreSortides = (
            #--Varis--------------------------------------------------------------------------
            ('sortides', 'Activitats', 'sortides__meves__list', di
             or pr, n_avis_sortides + n_avis_sortides_meves > 0, (
                 (u"Històric", 'sortides__all__list', di or so, None, None),
                 (u"Gestió d'activitats", 'sortides__gestio__list', di or so, (
                     n_avis_sortides,
                     'info',
                 ) if n_avis_sortides > 0 else None, None),
                 (u"Les meves propostes d'activitats", 'sortides__meves__list',
                  pr, (
                      n_avis_sortides_meves,
                      'info',
                  ) if n_avis_sortides_meves > 0 else None, None),
             )), )

    arbre = arbre1 + arbreSortides + arbre2

    for item_id, item_label, item_url, item_condicio, alerta, subitems in arbre:

        if not item_condicio:
            continue
        actiu = (menu_id == item_id)
        item = classebuida()
        item.label = item_label
        item.url = reverse(item_url)
        item.active = 'active' if actiu else ''
        item.alerta = alerta
        menu['items'].append(item)

        if actiu:
            for subitem_label, subitem_url, subitem__condicio, medalla, subsubitems in subitems:
                if not subitem__condicio:
                    continue
                actiu = (submenu_id == subitem_url.split('__')[1])
                subitem = classebuida()
                subitem.label = safe(subitem_label)
                subitem.url = reverse(subitem_url)
                subitem.active = 'active' if actiu else ''
                if medalla:
                    omedalla = classebuida()
                    omedalla.valor = medalla[0]
                    omedalla.tipus = medalla[1]
                    subitem.medalla = omedalla
                menu['subitems'].append(subitem)
                subitem.subsubitems = []
                if subsubitems:
                    for subitem_label, subitem_url, subitem_condicio, subitem_medalla in subsubitems:
                        subsubitem = classebuida()
                        subsubitem.label = safe(subitem_label)
                        subsubitem.url = reverse(subitem_url)
                        if subitem_medalla:
                            omedalla = classebuida()
                            omedalla.valor = subitem_medalla[0]
                            omedalla.tipus = subitem_medalla[1]
                            subsubitem.medalla = omedalla
                        subitem.subsubitems.append(subsubitem)
                    if actiu and subsubmenu_id == 'blanc':
                        menu['subsubitems'] = subitem.subsubitems

    return menu
def controlAssistencia_post_save(sender, instance, created, **kwargs):

    #si els retards provoquen incidència la posem:
    if settings.CUSTOM_RETARD_PROVOCA_INCIDENCIA:

        frase = settings.CUSTOM_RETARD_FRASE

        TipusIncidencia = apps.get_model('incidencies', 'TipusIncidencia')
        tipus, _ = TipusIncidencia.objects.get_or_create(
            **settings.CUSTOM_RETARD_TIPUS_INCIDENCIA)

        Incidencia = apps.get_model('incidencies', 'Incidencia')

        abans_en_blanc = (hasattr(instance, 'instanceDB')
                          and instance.instanceDB is not None
                          and instance.instanceDB.estat is None)

        abans_era_retard = (not abans_en_blanc
                            and hasattr(instance, 'instanceDB')
                            and instance.instanceDB is not None
                            and instance.instanceDB.estat is not None
                            and instance.instanceDB.estat.codi_estat == 'R')
        ara_es_retard = (instance.estat is not None
                         and instance.estat.codi_estat == 'R')

        #posem incidència si arriba tard ( només si passem de res a retard )
        if ara_es_retard and not abans_era_retard:

            ja_hi_es = Incidencia.objects.filter(
                alumne=instance.alumne,
                control_assistencia=instance,
                descripcio_incidencia=frase,
                tipus=tipus,
            ).exists()

            if not ja_hi_es:
                es_primera_hora = (
                    settings.CUSTOM_RETARD_PRIMERA_HORA_GESTIONAT_PEL_TUTOR
                    and instance.esPrimeraHora())
                es_primera_hora_txt = (
                    Incidencia.GESTIONADA_PEL_TUTOR_RETARD_PRIMERA_HORA
                    if es_primera_hora else '')
                i = Incidencia.objects.create(
                    professional=User2Professional(instance.professor),
                    alumne=instance.alumne,
                    control_assistencia=instance,
                    descripcio_incidencia=frase,
                    tipus=tipus,
                    gestionada_pel_tutor=es_primera_hora,
                    gestionada_pel_tutor_motiu=es_primera_hora_txt,
                )
                incidencia_despres_de_posar(i)

        #treiem incidència retard si arriba a l'hora
        if not ara_es_retard:
            try:
                Incidencia.objects.filter(
                    alumne=instance.alumne,
                    control_assistencia=instance,
                    descripcio_incidencia=frase,
                    tipus=tipus,
                ).delete()
            except:
                pass

    #
    #
    # --  casos en que no s'ha de passar llista
    #
    #

    NoHaDeSerALAula = apps.get_model('presencia', 'NoHaDeSerALAula')

    #-- si està expulsat del centre aquell dia ho anotem:
    Sancio = apps.get_model('incidencies', 'Sancio')
    sancio = Sancio.alumne_sancionat_en_data(
        instance.alumne,  #alumne
        instance.impartir.dia_impartir,  #dia
        instance.impartir.horari.hora  #franja
    )

    instance.nohadeseralaula_set.filter(
        motiu=NoHaDeSerALAula.EXPULSAT_DEL_CENTRE).delete()
    for x in sancio:
        NoHaDeSerALAula.objects.create(
            control=instance,
            motiu=NoHaDeSerALAula.EXPULSAT_DEL_CENTRE,
            sancio=x)

    #-- si té una sortida aquell dia ho anotem:
    Sortida = apps.get_model('sortides', 'Sortida')
    sortida = Sortida.alumne_te_sortida_en_data(
        instance.alumne,  #alumne
        instance.impartir.dia_impartir,  #dia
        instance.impartir.horari.hora  #franja
    )

    instance.nohadeseralaula_set.filter(motiu=NoHaDeSerALAula.SORTIDA).delete()
    for x in [
            s for s in sortida if not s.alumnes_a_l_aula_amb_professor_titular
    ]:
        NoHaDeSerALAula.objects.create(control=instance,
                                       motiu=NoHaDeSerALAula.SORTIDA,
                                       sortida=x)