Affichage dans le calendrier
#1
Bonjour,

J'aimerais savoir comment afficher des informations spécifiques sur le calendrier. J'ai bien vu, dans le code, la fonction à modifier (def get_title_for_calendar dans models/activity.py).

Je peux effectivement rajouter facilement des champs liés aux activités (type, lieu, etc.) mais je ne sais pas comment ajouter une relation (ou une propriété) liée à ces activités.

Là, c'est mon niveau de programmation qui n'est pas assez élevé... Je vois que la fonction qui définit les relations d'une activité est dans le même fichier, je pense, peut-être à tort, que le problème vient de là.

Concrètement, je souhaite afficher le participant, le sujet et la fiche liée sur le calendrier. Que me conseillez-vous ?
  Répondre
#2
Bonjour,

Modifier le titre de l'activité est en effet possible, même si cela peut aboutir à des choses bizarres ou peu utilisables suivant les cas (titre de 500 caractères de long par exemple).

Pour modifier le titre il faut effectivement modifier la fonction get_title_for_calendar et ajouter des informations dans la chaîne de caractère qui est renvoyée.

Pour les participants, vous pouvez faire quelque chose du genre :

Code :
def get_title_for_calendar(self):
        return '%s %s ' % (self.title,
                            " - ".join(["%s" % rel.object_entity for rel in self.get_participant_relations()]))
  Répondre
#3
Merci beaucoup pour cette réponse rapide qui fonctionne très bien et fait mon bonheur ! J'ai juste rajouté des u devant les '%s' pour des problèmes d'encodage de caractères, mais c'est parfait.
  Répondre
#4
Je cherche à ajouter sur le calendrier un champ de saisie (de type date) pour aller directement à la date saisie par l'utilisateur. J'ai trouvé la fonction gotoDate de fullcalendar mais je ne vois pas trop comment l'utiliser... Je pense qu'il faut l'intégrer dans calendar.html

Si vous avez une idée, je suis preneur ! Je continue à chercher de mon côté.
  Répondre
#5
Citation :" - ".join(["%s" % rel.object_entity for rel in self.get_participant_relations()])

Citation : J'ai juste rajouté des u devant les '%s' pour des problèmes d'encodage de caractères

Petite amélioration de ce code :
Code :
u" - ".join(unicode(rel.object_entity) for rel in self.get_participant_relations())

Citation :Je cherche à ajouter sur le calendrier un champ de saisie (de type date) pour aller directement à la date saisie par l'utilisateur. J'ai trouvé la fonction gotoDate de fullcalendar mais je ne vois pas trop comment l'utiliser... Je pense qu'il faut l'intégrer dans calendar.html

Il va sûrement vous falloir maîtriser un minimum fullcalencar.js qui est une bibliothèque externe et qui a une bonne documentation : http://arshaw.com/fullcalendar/ . Ceci dit, bien qu'il soit très configurable, je ne le connais pas assez bien pour affirmer que vous pourrez faire ce que vous voulez sans toucher au code de fullcalendar lui-même (uniquement le manipuler depuis l'"extérieur", soit calendar.html, serait évidement le mieux).
  Répondre
#6
Après quelques recherches, je suis arrivé à quelque chose de correct pour mon usage personnel et voulais en faire profiter vos lecteurs.

Définition d'un mini-calendrier dans creme/activities/templates/activities/calendar.html

Code :
$(document).ready(function() {
   // .....
    $("#fullcalendar").fullCalendar({
        // .....
    });

    $('#datepicker').datepicker({
        inline: true,
        onSelect: function(dateText, inst) {
            var d = new Date(dateText);
            $('#fullcalendar').fullCalendar('gotoDate', d);
        }
    });
   //.....
}

Et à la fin du fichier, affichage du mini-calendrier :

Code :
<div id="datepicker"></div>
<div id="fullcalendar"></div>

Voici le lien vers une des sources : http://stackoverflow.com/questions/78788...l-calendar

Pour mon cas, cela marche très bien et est très utile car j'ai réglé l'affichage par défaut du calendrier en "semaine".
  Répondre
#7
Merci de partager vos découvertes !
  Répondre
#8
C'est avec plaisir car vous êtes vraiment très disponibles et efficaces dans vos réponses.

Pour information, la méthode du petit calendrier demande à être améliorée : le grand calendrier qui s'affiche par défaut ne charge pas immédiatement les données entrées (activities), il faut naviguer au moins une fois dans le petit calendrier pour les afficher.
  Répondre
#9
J'ai une nouvelle question liée au calendrier : la gestion du passage à l'heure d'été (ou d'hiver).

Dans une view spécifique qui me sert à générer un courrier (via latex) je rapatrie une date + heure d'une activité. Dans le calendrier, celle-ci s'affiche à la bonne heure, mais dans le courrier, il indique 1 heure de moins.

Ex. l'activité est fixée le 03/04/2014 à 15 h 00.
Sur le calendrier, ces renseignements sont corrects.
Sur mon fichier latex, j'obtiens le 03/04/2014 à 14 h 00.


J'ai ajouté manuellement dans le code une heure à toutes les dates supérieures au 30 mars. Mais ce n'est pas satisfaisant, je devrai faire l'opération inverse cet automne et ainsi de suite tous les ans. Avez-vous une idée de l'origine de ce problème ?
  Répondre
#10
Citation :Avez-vous une idée de l'origine de ce problème ?

Oui tout à fait, d'autant que j'ai déjà abordé le sujet avec vous ici :
https://www.cremecrm.com/forum/showthread.php?tid=46

Vous affichez la date UTC comme l'export CSV de Creme1.3 le faisait ; il vous faut donc "localiser" votre date avec la fonction django.utils.timezone.localtime dans votre code python par exemple. Mais normalement le moteur de template de django est intelligent et fait cette localisation tout seul, et quelque chose comme ça donne le résultat attendu chez moi :

Code :
{{my_activity.start|date:"H:i"}}
  Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 4 visiteur(s)