Agenda et rendez vous : concept

bonjour

sur une application en cours j’ai ajouté mon propre agenda relativement
simple
15 minutes par rdv sur des plages horaires définies, pas plusieurs rdv Ã
une
même heure …

actuellement je sors une vue dans laquelle :
je recueille tous les rdv du jour
j’incrémente ensuite chaque 15 minutes (et au bout de 3 chaque heure
bien
sur :slight_smile: )
à chaque incrémentation je teste si il existe un rdv corespondant
auquel cas je l’affiche
sinon le rdv est indiqué libre (avec un appel possible vers un
partiel
et variable locale)

ce qui me donne une liste tout comme il faut
néammoins je fais sur un petit serveur ( PPC 2x 450 Mhz) et pour trois
journées cela le met à genou pour 4-5 sec alors en production sur 5-6
postes
…(même si le serveur sera plus costaud)
existe -il un algo plus élégant et donc moins gourmand ?

est-il possible d’afficher un lien pour voir les trois jours suivant et
ainsi de suite ? j’ai pensé utiliser une variable date dans session mais
est-ce correct d’utiliser la session pour cela ?

merci de vos avis.

NG

Le 23 septembre 2008 12:02, Nicolas G a écrit :

auquel cas je l’affiche
sinon le rdv est indiqué libre (avec un appel possible vers un partiel
et variable locale)

ce qui me donne une liste tout comme il faut
néammoins je fais sur un petit serveur ( PPC 2x 450 Mhz) et pour trois
journées cela le met à genou pour 4-5 sec alors en production sur 5-6 postes
…(même si le serveur sera plus costaud)
existe -il un algo plus élégant et donc moins gourmand ?

Pour paraphraser Renaud, “du code vaut mieux qu’un long baratin”,
surtout que je ne suis pas sûr d’avoir bien compris (on affiche les rdvs
du jour ou les rdvs de 3 journées ?)

Pour corriger un algo, ça peut aider que tu exhibes le code qui va avec.

Bon on va supposer que c’est pour les rdvs d’un jour, on a rdvs, les
rdvs
d’un jour. On peut passer par un hash.

On a une méthode d’instance:

class Rendezvous < AR::B
def plage_horaire
# retourne par exemple la plage horaire sous forme de clé :‘09h15’
end
end

hash = rdvs.index_by(&:plage_horaire)

Avec hash[:‘09h15’], j’ai soit un rdv soit nil.
Donc quand je parcours mes plages horaires, il me suffit d’examiner
hash avec la bonne
clé.
" je teste si il existe un rdv corespondant auquel cas je l’affiche"
on sait pas trop comment tu fais ça, puisqu’on n’a pas le code, mais
en supposant que ça équivaut à un rdvs.include? … c’est en O(n)
alors que mon hash lookup est (normalement) en O(1).

Si tu affiches les rdvs de plusieurs jours alors la clé doit contenir
comme information le jour.

est-il possible d’afficher un lien

avec <a href=… ?

pour voir les trois jours suivant et ainsi de suite ? j’ai pensé utiliser

T’affiches les rdvs d’un jour ou les rdvs du jour (aujourd’hui ?)
si pour afficher les rdvs d’un jour, ton appli a une url qui porte
l’information de la date, que ce soit dans le query string ou pas,
t’as la date et tu peux générer facilement des urls pour date +1, date +
2…

une variable date dans session mais est-ce correct d’utiliser la
session pour cela ?

C’est possible. T’en as pas besoin si c’est dans l’url,
par exemple les urls de blog : /posts/2008/09/23

-- Jean-François.


ça dépend
http://twitter.com/underflow_

existe -il un algo plus élégant et donc moins gourmand ?

Pour paraphraser Renaud, “du code vaut mieux qu’un long baratin”,
surtout que je ne suis pas sûr d’avoir bien compris (on affiche les rdvs
du jour ou les rdvs de 3 journées ?)

en fait trois colonnes avec une journée dans chaque, un partiel pour
toutes

voici le code :wink:

<th>Medecin</th>
<td><%=h agenda.patient.nom %></td>

<% until h > 20 %>


%> l
<%= heurerdv %>

<% m = 0 %>
<% h += 1 %>
<% end %> <%# until h %>

Bon on va supposer que c’est pour les rdvs d’un jour, on a rdvs, les
rdvs
d’un jour. On peut passer par un hash.

On a une méthode d’instance:

class Rendezvous < AR::B
def plage_horaire
# retourne par exemple la plage horaire sous forme de clé :‘09h15’
end
end

hash = rdvs.index_by(&:plage_horaire)

Avec hash[:‘09h15’], j’ai soit un rdv soit nil.
Donc quand je parcours mes plages horaires, il me suffit d’examiner
hash avec la bonne clé.

" je teste si il existe un rdv corespondant auquel cas je l’affiche"
on sait pas trop comment tu fais ça, puisqu’on n’a pas le code, mais
en supposant que ça équivaut à un rdvs.include? … c’est en O(n)
alors que mon hash lookup est (normalement) en O(1).

Si tu affiches les rdvs de plusieurs jours alors la clé doit contenir
comme information le jour.

est-il possible d’afficher un lien

avec <a href=… ?

:slight_smile:
pas trop bon mais quand même …

pour voir les trois jours suivant et ainsi de suite ? j’ai pensé utiliser

T’affiches les rdvs d’un jour ou les rdvs du jour (aujourd’hui ?)
si pour afficher les rdvs d’un jour, ton appli a une url qui porte
l’information de la date, que ce soit dans le query string ou pas,
t’as la date et tu peux générer facilement des urls pour date +1, date +
2…

c’est ce que je fais en invoquant trois fois le partiel en implémentant Ã
chaque fois +1.day

une variable date dans session mais est-ce correct d’utiliser la
session pour cela ?

C’est possible. T’en as pas besoin si c’est dans l’url,
par exemple les urls de blog : /posts/2008/09/23

non le but c’est de rafraichir juste la div en ajax,

– Jean-François.

Le 23 septembre 2008 14:48, Nicolas G a écrit :

voici le code :wink:

<%
@agenda = Agenda.find(:all, :conditions =>[“day = ?”,
dateencours.strftime(“%Y-%m-%d”) ], :order => (“hour asc”) )
%>

ça doit aller dans le contrôleur et…

Le <%= dateencours.strftime("%d-%m-%Y") %>

utilise to_s(format) en modifiant Date::DATE_FORMATS

[…]

                else
                    min = nil
                end
            %>

Tout ce qui précède, c’est très laid. Passe plutôt par un itérateur
ou une collection à laquelle tu appelles each.

Par exemple dans le helper tu définis #plages_horaires_each
qui yielde les bonnes valeurs de hour et minute :

plages_horaires_each do |hour, minute|

end

ou un @plages_horaires.each do…end

            <% heurerdv = h.to_s + ":" + m.to_s + min.to_s %>
            <% for agenda in @agenda %>

Donc tu parcours tes plages horaires et chaque fois tu parcours
la collection @agenda. T’es donc en (la complexité des algorithmes,
je fais ça à la louche) O(N x M), alors qu’en passant par mon histoire
de hash tu devrais être en O(N) + O(M).

– Jean-François.


ça dépend
http://twitter.com/underflow_

Le 23 septembre 2008 15:14, Jean-François Trân [email protected] a
écrit :

ça doit aller dans le contrôleur et…

mais cette valeur est invoquée n fois dans la page en partant de
dateencours
(le jour , le lendemain et le surlendemain)

Le <%= dateencours.strftime("%d-%m-%Y") %>

utilise to_s(format) en modifiant Date::DATE_FORMATS

ok je vais voir comment faire .

<% until m > 45 %>
            <%
                if m == 0
                    min = 0
                else
                    min = nil
                end
            %>

Tout ce qui précède, c’est très laid.

je m’en doutais :wink:

Passe plutôt par un itérateur
ou une collection à laquelle tu appelles each.

Par exemple dans le helper tu définis #plages_horaires_each
qui yielde les bonnes valeurs de hour et minute :

plages_horaires_each do |hour, minute|

end

ou un @plages_horaires.each do…end

même si c’est plus élégant d’utiliser une collection ou un itérateur
est-ce
plus efficace ?
J’avais lu qquechose selon laquelle l’utilisation d’helper était assez
gourmand en ressources
C’est vrai que cela serait bcp plus beau :wink:

Pareil entre un hash et un objet as t-on une idée sur les performances ?

            <% heurerdv = h.to_s + ":" + m.to_s + min.to_s %>
            <% for agenda in @agenda %>

Donc tu parcours tes plages horaires et chaque fois tu parcours
la collection @agenda. T’es donc en (la complexité des algorithmes,
je fais ça à la louche) O(N x M), alors qu’en passant par mon histoire
de hash tu devrais être en O(N) + O(M).

ok je vois le bénéfice …

merci de tes conseils
je vais revoir tout ça

NG