Aller au contenu. | Aller à la navigation

Outils personnels

Navigation
Vous êtes ici : Accueil / Aide pour les responsables / Gérer les événements des calendriers / Générer les événements depuis un csv / Browserview pour générer les événements (cas schoolsite avec types DX)

Browserview pour générer les événements (cas schoolsite avec types DX)

# 3) BrowserView class for importing Events
            
# Functions and constants for the import of events
def cleaning(mot):
    # suppression des "
    word = mot
    if word[1]=='"':
        word = word[1:]
    if word[-1]=='"':
        word = word[:-1]
    return word
def multisubject(mot):
    # transforme une liste avec virgule en multiligne
    sujets = mot.split(',')
    word = ''
    for s in sujets:
        if word :
            word += '\n' + s
        else:
            word = s
    return word
def convertCSVEntryToDatetimeObject(entry):
    # get datetime obj from a csv column data (string) of the form: 08/26/2013 07:30
    first_split = entry.split(' ')
    date = first_split[0]
    hour_and_min = first_split[1]
    second_split = date.split('/')
    month = second_split[0]
    day = second_split[1]
    year = second_split[2]
    third_split = hour_and_min.split(':')
    hour = third_split[0]
    min = third_split[1]
    return datetime(int(year), int(month), int(day), int(hour), int(min))
DEFAULT_TIMEZONE = "Europe/Zurich"
CSV_FILE_NAME = 'evenements.csv'
# BrowserView class
class ImportEvents(BrowserView):
    """
"""
    def __call__(self):
        context = self.context
        # recupere chaque ligne du fichier voulu (ici 'evenements')
        events_data_file = context[CSV_FILE_NAME]
        
        #return dir(events_data_file.data)
        
        events = events_data_file.data.split('\n')
        nb_lines=len(events)
        # liste tous les objets du dossier et creation d'une liste avec leur id
        existing_objects = context.getFolderContents()
        list_objects_id =[]
        for existing_object in existing_objects:
            this_object=existing_object.getObject()
            this_object_id=this_object.getId()
            list_objects_id.append(this_object_id)
        # boucle sur tous les evenements du fichier CSV, on ne veut pas de la ligne 1 (labels) ni de la derniere (vide a cause du dernier '''\n''')
        for event in events[1:nb_lines-1]:
            # Parsing de chaque ligne ==> liste des attributs de l'objet evenement
            event_fields= event.split(';')
            # Supprimer element dont id identique a celui du fichier csv (si existe)
            if event_fields[0] in list_objects_id:
               context.manage_delObjects(event_fields[0])
            # creation de l'evenement, on insere les proprietes de l'evenement selon la structure du fichier CSV de depart
            event_id = event_fields[0]
            
            event_start = convertCSVEntryToDatetimeObject(event_fields[4])
            event_end = convertCSVEntryToDatetimeObject(event_fields[5])
            context.invokeFactory(type_name="Event",
                      id=event_id,
                      title=event_fields[1],
                      description=event_fields[2],
                      location=event_fields[3],
                      start=event_start,
                      end=event_end,
                      timezone=DEFAULT_TIMEZONE,
                      text=event_fields[6],
                      subject=multisubject(event_fields[7]),
                     # effectiveDate=event_fields[8],
                     # expirationDate=event_fields[9],
                     # creation_date=event_fields[10],
                     # modification_date=event_fields[11],
                     
                      creators=(event_fields[12],)
                      )
            evt = context[event_id]
            evt.reindexObject()
 
        return "DONE"