Bonsoir
Je veux exclure la séléction des dimanches, au niveau des champs dates, lors de la création d'une demande de congé. Comment vais je faire?
Bonsoir
Je veux exclure la séléction des dimanches, au niveau des champs dates, lors de la création d'une demande de congé. Comment vais je faire?
Salut,
J'ai eu le meme probleme pour faire le CRM( dont le rappel devait etre effectué hors heures ouvrables). J'ai du modifier a la dure dans le brol.
Aujourd'hui je trouverai sympa de faire un calendrier des jours de travail + jours feriés (Un peu comme löe temps de travail dans les taches), mais je ne suis malheureuement jamais tombé sur ce type de solution.
SI tu trouves, je suis fortement interessé...
a+
Arnaud
Le nom d'un bomerang qui ne revient pas quand on le lance ?
Un Baton...
Bonjour Gandalf24
J'ai réussi à gérer les jour fériés et à exclure les dimanches.
Voici ce que j'ai fait:
1°) J'ai grisé au niveau du clendrier les dimanches. Donc impossible de sélectionner un dimanche lors de création de la demande de congé. Pour cela j'ai agit sur le fichier jquery-ui-1.9.1.custom.js. Dans la boucle for de la ligne 7980 permettant d'afficher les dates, j'ai ajouter ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part for (var dow=0; dow <7;dow++){
Bonjour Gandalf24
J'ai réussi à gérer les jour fériés et à exclure les dimanches.
Voici ce que j'ai fait:
1°) J'ai grisé au niveau du clendrier les dimanches. Donc impossible de sélectionner un dimanche lors de création de la demande de congé. Pour cela j'ai agit sur le fichier jquery-ui-1.9.1.custom.js. Dans la boucle for de la ligne 7980 permettant d'afficher les dates, j'ai ajouter ceci:
Et j'ai ajouté ceci à la variable unselectable:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for (var dow=0; dow <7;dow++){ var day=(dow+firstDay)%7; ........ }
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part var unselectable = ....|| (dayNamesMin[day] == 'Su') || (dayNamesMin[day] == 'su') || (dayNamesMin[day] == 'di') || (dayNamesMin[day] == 'Di')
2°)Pour la gestion des jours fériés, j'ai créé un model à partir de l'interface, menu Structure de la base de données avec deux champs date et nom_du_jour_ferie. Ensuite dans le fichier hr_holidays.py j'ai écrit une méthode me permettant de compter le nombre e jour fériés figurant dans l'intervalle de dates pris par l'employé lors de la création de la demande de congé. J'ai appelé cette méthode dans la celle _get_number_of_days(...), puis j'ai soustrait le nombre de jours fériés du nombre de jours pris. Idem j'ai aussi une méthode me permettant de soustraire le nombre de dimanches figurant dans l'intervalle.
Super merci pour le retour
Le nom d'un bomerang qui ne revient pas quand on le lance ?
Un Baton...
Bonjour,
Je tiens à vous remercier pour les informations trouvé sur ce topic qui m'ont bien aidé.
Je cherche à griser les samedi et dimanche présent dans le calendrier du milieu et non dans le petit calendrier qui se trouve en haut a droite. Je me demandais si vous aviez des idées
je suis en train de creuser exactement dans ce problème, je cherche un moyen pour que les jours ferriers, les samedis et dimanches ne soient pas comptabilisés dans le nombre de jours du congés, est ce que tu as deja trouvé la solution?
Merci zizou_90,
le probléme c'est que je travaille sur la version 8.0 et il n'y a pas de module days_off dans cette version. le hr_days_off de la version 7.0 es non compatible avec la version 8.0 je l'a installé mais ça a généré des erreurs.
avez vous des idées?
Bonjour, pour ma part j'ai créé mon propre module en m'inspirant de days_off. Il n'ai pas parfait mais il tourne (les weekend sont enlevé directement, les jours fériés sont à rentré manuellement):
Code python :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189 # -*- coding: utf-8 -*- from openerp.osv import fields, osv import datetime import math from openerp.tools.translate import _ from openerp import tools def numjoursem(date): """numjoursem(D): donne le numero du jour de la semaine d'une date D 'a/m/j' (lundi=1, ...)""" L=date.split('/') an=int(L[0])-1 j=(an+(an//4)-(an//100)+(an//400)+numjouran(L)) % 7 # utilise L'année gregorienne (365 jours + 1/4 -1/100 +1/400) if j==0: j=7 return j def numjouran(date): """Donne le numéro du jour dans l'année de la date d=[a,m,j] (1er janvier = 1, ...)""" a= int(date[0]) m= int(date[1]) j= int(date[2]) if ((a%4==0 and a%100!=0) or a%400==0): # bissextile? return (0,31,60,91,121,152,182,213,244,274,305,335,366)[m-1] + j else: return (0,31,59,90,120,151,181,212,243,273,304,334,365)[m-1] + j def count_Sun_and_Sat(index_day, number_days): """ Supprime les weekend dans la somme des jours de congés""" number_Sun_and_Sat = 0 for i in range(1,int(number_days) +2): if index_day == 6: number_Sun_and_Sat += 1 if index_day == 7: number_Sun_and_Sat += 1 index_day = 0 index_day += 1 return number_Sun_and_Sat def lengthmonth(year, month): """Renvoie le nombre de jour dans un mois""" if month == 2 and ((year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0))): return 29 return [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month] class Surcharge_hr_holidays(osv.osv): _name= "hr.holidays" _inherit= "hr.holidays" def count_Bank_Holidays(self, cr, uid, first_Day, last_day): """fonction permettant de compter le nombre de jour fériés dans un intervalle""" number_of_bank_holidays = 0 Start = first_Day.split("/") Start ={ 'day' : int(Start[2]), 'month' : int(Start[1]), 'year' : int(Start[0]) } lenght = lengthmonth(Start['year'], Start['month']) End = last_day.split("/") End ={ 'day' : int(End[2]), 'month' : int(End[1]), 'year' : int(End[0]) } days_off = self.pool.get('days.off') #On vas dans le module days off while (Start['day'] <= End['day']) or (Start['month']< End['month']) or (Start['year']< End['year']): # parcours de la fourchette de congés demandé if Start['day'] == lenght+1: if Start['month'] == 12: Start['day']= 1 Start['month'] = 1 Start['year'] += 1 lenght = lengthmonth(Start['year'], Start['month']) else: Start['day']= 1 Start['month'] += 1 lenght = lengthmonth(Start['year'], Start['month']) day = str(Start['year'])+"-"+str(Start['month']).zfill(2)+"-"+str(Start['day']).zfill(2) banks_ids= days_off.search(cr, uid, [('date', '=', day), ('active', '=', True)]) ###Test si le jour en cours est un jours fériés print banks_ids if banks_ids: #Si oui on ajoute 1 à la variable number_of_bank_holidays print "yes" number_of_bank_holidays +=1 Start['day'] += 1 return number_of_bank_holidays def onchange_date_from(self, cr, uid, ids, date_to, date_from): """ If there are no date set for date_to, automatically set one 8 hours later than the date_from. Also update the number_of_days. """ # date_to has to be greater than date_from if (date_from and date_to) and (date_from > date_to): raise osv.except_osv(_('Warning!'),_('The start date must be anterior to the end date.')) result = {'value': {}} # No date_to set so far: automatically compute one 8 hours later if date_from and not date_to: date_to_with_delta = datetime.datetime.strptime(date_from, tools.DEFAULT_SERVER_DATETIME_FORMAT) + datetime.timedelta(hours=8) result['value']['date_to'] = str(date_to_with_delta) # Compute and update the number of days if (date_to and date_from) and (date_from <= date_to): diff_day = self._get_number_of_days(cr, uid, date_from, date_to) result['value']['number_of_days_temp'] = round(math.floor(diff_day))+1 else: result['value']['number_of_days_temp'] = 0 return result def onchange_date_to(self, cr, uid, ids, date_to, date_from): """ Update the number_of_days. """ # date_to has to be greater than date_from if (date_from and date_to) and (date_from > date_to): raise osv.except_osv(_('Warning!'),_('The start date must be anterior to the end date.')) result = {'value': {}} # Compute and update the number of days if (date_to and date_from) and (date_from <= date_to): diff_day = self._get_number_of_days(cr, uid, date_from, date_to) result['value']['number_of_days_temp'] = round(math.floor(diff_day))+1 else: result['value']['number_of_days_temp'] = 0 return result def _get_number_of_days(self, cr, uid,date_from, date_to): """Returns a float equals to the timedelta between two dates given as string.""" DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" a= date_from.split("-") date_debut = a[0]+"/"+a[1]+"/"+a[2][:2] j = numjoursem(date_debut) print date_debut, "date_debut" a = date_to.split("-") date_fin = a[0]+"/"+a[1]+"/"+a[2][:2] print date_fin, "date_fin" from_dt = datetime.datetime.strptime(date_from, DATETIME_FORMAT) to_dt = datetime.datetime.strptime(date_to, DATETIME_FORMAT) timedelta = to_dt - from_dt diff_day = timedelta.days + float(timedelta.seconds) / 86400 diff_day = diff_day - count_Sun_and_Sat(j, diff_day) - self.count_Bank_Holidays(cr, uid, date_debut, date_fin) ## supprime weekend et jours de congés sélectionné return diff_day class days_off(osv.osv): _name="days.off" _columns = { 'name' : fields.char("Name", required=True), # required=True permet de rendre le champ obligatoire 'years': fields.char("Year"), 'date': fields.date('Date', required=True), 'active': fields.boolean('Active'), }
Code Xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 <openerp> <data> <record id="view_days_off_form" model="ir.ui.view"> <field name="name">days.off.form</field> <field name="model">days.off</field> <field name="arch" type="xml"> <form string="Jours Fériés" version="8.0"> <sheet> <group> <field name="name"/> <field name="date"/> <field name="years"/> <field name="active"/> </group> </sheet> </form> </field> </record> <record id="view_days_off_tree" model="ir.ui.view"> <field name="name">days.off.tree</field> <field name="model">days.off</field> <field name="arch" type="xml"> <tree string="Jours Fériés" version="8.0"> <field name="name"/> <field name="date"/> <field name="years"/> <field name="active"/> </tree> </field> </record> <record id="view_days_off_search" model="ir.ui.view"> <field name="name">days.off.search</field> <field name="model">days.off</field> <field name="arch" type="xml"> <search string="Jours Fériés" version="8.0"> <filter name="Année" context="{'group_by':'years'}"/> <field name="name"/> <field name="date"/> <field name="years"/> <field name="active"/> </search> </field> </record> <record id="action_days_off" model="ir.actions.act_window"> <field name="name">Jours Fériés</field> <field name="res_model">days.off</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> </record> <menuitem action="action_days_off" id="menu_day_off" sequence="15" parent="hr.menu_hr_configuration" /> </data> </openerp>
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager