IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Odoo (ex-OpenERP) Discussion :

Exclure les dimanche lors de création d'une demande de congé


Sujet :

Odoo (ex-OpenERP)

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 47
    Points : 38
    Points
    38
    Par défaut Exclure les dimanche lors de création d'une demande de congé
    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?

  2. #2
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    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...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    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++){

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    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
    1
    2
    3
    4
    for (var dow=0; dow <7;dow++){
              var day=(dow+firstDay)%7;
    ........
    }
    Et j'ai ajouté ceci à la variable unselectable:
    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.

  5. #5
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    Super merci pour le retour
    Le nom d'un bomerang qui ne revient pas quand on le lance ?
    Un Baton...

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 100
    Points : 114
    Points
    114
    Par défaut
    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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par AmFaye2 Voir le message
    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
    1
    2
    3
    4
    for (var dow=0; dow <7;dow++){
              var day=(dow+firstDay)%7;
    ........
    }
    Et j'ai ajouté ceci à la variable unselectable:
    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.
    Merci pour votre solution mais juste je veux lorsque je selectionne par exemple un congé de jeudi a lundi par exemple dans la case des jours obtenus ne prend pas le jour dimanche ca veut dire il m'ecrit 4 jours et pas 5 merci

  8. #8
    Candidat au Club
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    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?

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Ziza123 Voir le message
    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?
    cherche le module day_off installe le et génere aprés l'année 2014 et tu peut aussi ajouté manuellement les jours feriés j'ai fait ca et si ta des problémes essaye de me contacter

  10. #10
    Candidat au Club
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    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?

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Ziza123 Voir le message
    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?
    non désolé

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 100
    Points : 114
    Points
    114
    Par défaut
    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>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer les valeurs lors de navigation dans une jsp
    Par aze20moh dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 17/01/2010, 17h08
  2. Réponses: 4
    Dernier message: 02/01/2010, 23h23
  3. Réponses: 7
    Dernier message: 31/07/2009, 11h53
  4. problème lors de création d'une vue
    Par gapse dans le forum Oracle
    Réponses: 7
    Dernier message: 26/07/2006, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo