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 :

Filtrer une view tree sur une date


Sujet :

Odoo (ex-OpenERP)

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 50
    Points : 53
    Points
    53
    Par défaut Filtrer une view tree sur une date
    Bonjour à tous,

    Je bloque sur un problème de filtre:

    Depuis un menu, j'exécute une action qui ouvre une view tree. Jusque là aucun problème.

    Dans la table affichée par la vue tree j'ai un fields.datetime('reservation)

    Je voudrais pouvoir filtrer, dans l'action qui ouvre la Tree View, les réservations = à la date du jour.

    Je pense que je devrais avoir dans la vue Action:

    domain=[('reservation','=',... )] et c'est là mon problème!

    Comment mettre la date du jour dans domain?

    Merci pour votre aide!

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Bonjour,

    Tu peux ajouter un domaine à ton action :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <field name="domain">[  ('date', '=',  ( (context_today()).strftime('%Y-%m-%d') ) ]</field>

    Tu peux Aussi créer une seconde classe avec une table qui, quand elle s'initialise, crée une vue dynamique dans laquelle tu passeras en paramètre un WHERE avec la date du jour

    Voici un exemple d'une classe qui affiche des stats de pos.order

    Code python : 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
    class stat_pos_order(osv.osv):
        _name = 'stat.pos.order'
        _description = 'POS orders stats'
        _order = 'date'
        _auto = False
     
        _columns = {
    		'date' : fields.date('Date', readonly=True),
    		'day' : fields.char('Day', size=128, readonly=True),
                    'date_normal' : fields.date('Day',  readonly=True),
                    'week' : fields.char('Week', readonly=True),
    		'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
                ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
                ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
    		'year' : fields.char('Year', readonly=True),
    		'company_id':fields.many2one('res.company', 'Company', readonly=True),
    		'shop_id':fields.many2one('sale.shop', 'Shop', readonly=True),
    		'cashier_name': fields.char('Cashier', size=128),
            'discount': fields.float('Remise', readonly=True),
            'bon_achat': fields.float("Bon d'achat", readonly=True),
            'amount_total': fields.float("Total", readonly=True),
            'special_discount': fields.float('Special discount', readonly=True),
            'loyalty_discount': fields.float('Loyalty discount', readonly=True),
            'flask_discount': fields.float('Flask discount', readonly=True),
            'total': fields.float('Total', readonly=True),
            'average': fields.float('Average', readonly=True, group_operator="avg"),
            'nbr': fields.integer('One', readonly=True)
    	}
     
        def init(self, cr):
            tools.drop_view_if_exists(cr, 'stat_pos_order')
            cr.execute("""
                CREATE OR REPLACE VIEW stat_pos_order AS (
                    SELECT
                        min(po.id) AS id, 
                        to_number('1','999') AS nbr,
                        date_trunc('day',po.date_order) AS date,
                        to_char(date_trunc('week',po.date_order), 'WW') AS week,
                        to_char(date_trunc('day',po.date_order), 'YYYY') AS year,
                        to_char(date_trunc('day',po.date_order), 'MM') AS month,
                        to_char(date_trunc('day',po.date_order), 'YYYY-MM-DD') AS day,
                        po.company_id AS company_id,
                        po.shop_id AS shop_id,      
                        po.cashier_name AS cashier_name,
                        po.discount AS discount,
                        po.bon_achat AS bon_achat,
                        po.special_discount AS special_discount,
                        po.loyalty_discount AS loyalty_discount,
                        po.flask_discount AS flask_discount,
                        po.total AS total,
                        avg(po.total) AS average,
                        to_char(po.date_order, 'YYYY-MM-DD HH24:MI:SS') AS date_normal
                    FROM
                        pos_order po
                    GROUP BY
                        date_trunc('day', po.date_order), po.company_id, po.shop_id, po.cashier_name, po.discount,
                        po.bon_achat, po.special_discount, po.loyalty_discount, po.flask_discount,
                        po.total, year, month, day, week, date_normal, nbr
                   )
            """)

    Ci-dessus dans le init(), tu crées une vue qui sera recalculée a chaque apparition.

    Ici la requête se fait sur pos.order (FROM)

    Il faudra rajouter une clause dans la requête SQL du type:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE champ_date >= %s AND champ_date <= %s

    Puis, il faudra passer la date du jour en paramètre dans le cr.execute()

    Pour avoir la date du jour :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import time
    date_now = time.strftime("%Y-%m-%d 00:00:00")

    Il faudra ensuite créer la vue XML pour ce module, et l'action qui va avec.

    Attention:
    Ne copie/colle pas le code ci-dessus qui correspond à un module que j'ai fait pour notre société, mais tu peux t'en inspirer, tout est dedans.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 22
    Points : 28
    Points
    28
    Par défaut
    SVP moi j'ai un problème de date. En fait je souhaite éviter que l'on sélectionne une date supérieure à la date du jour dans mon champs date. Merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Polynésie

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 28
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Isobary Voir le message
    SVP moi j'ai un problème de date. En fait je souhaite éviter que l'on sélectionne une date supérieure à la date du jour dans mon champs date. Merci
    Bonjour,
    Je ne sais pas trop comment tu peux limiter la saisie depuis la partie interface utilisateur. Par contre tu peux ajouter des contraintes sur tes champs qui interviendront avant l'enregistrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @api.constrains('mon_champ_date')
        def check_date(self):
            if self.mon_champ_date> time.strftime('%Y-%m-%d'):
                raise exceptions.Warning(
                    _('La date doit être avant aujourd'hui.')
                )

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/03/2014, 14h18
  2. [AC-2010] Simuler un clic sur une page web sur une image javascript
    Par alex en droit dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/04/2012, 13h22
  3. Imprimer sur une page web sur une imprimante spécifique
    Par bleuerouge dans le forum Windows Forms
    Réponses: 0
    Dernier message: 07/12/2009, 09h51
  4. Pb sur une requête DELETE sur une chaine
    Par astrolane dans le forum Sybase
    Réponses: 4
    Dernier message: 16/02/2009, 09h11
  5. Réponses: 3
    Dernier message: 25/10/2007, 11h47

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