Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • e9ae18b0dd7f6dea3fbb6a42c8ed1e5aa11f7f0b
  • 14.0 par défaut protégée
2 résultats

README.rst

Blame
  • hall_flow_log.py 3,97 Kio
    # Copyright 2023 Le Filament (https://le-filament.com)
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
    
    from dateutil.relativedelta import relativedelta
    
    from odoo import api, fields, models
    
    
    class HallFlowLog(models.Model):
        _name = "hall.flow.log"
        _description = "Hall Flow Logs"
        _rec_name = "date_log"
        _order = "date_log desc"
    
        # ------------------------------------------------------
        # Fields declaration
        # ------------------------------------------------------
        date_log = fields.Datetime("Date log", required=True)
        date_start = fields.Datetime("Date début import", required=True)
        date_end = fields.Datetime("Date fin import", required=True)
        hall_id = fields.Many2one(comodel_name="hall.hall", string="Site", required=True)
        log = fields.Text()
    
        # ------------------------------------------------------
        # SQL Constrains
        # ------------------------------------------------------
    
        # ------------------------------------------------------
        # Business functions
        # ------------------------------------------------------
        @api.model
        def import_wts_data(self, hall_ids=None, start_date=None, end_date=None):
            """
            Import data for specified halls and period
    
            :param object hall_ids: hall object if specified else all
            :param datetime start_date: UTC start period
            :param datetime end_date: UTC end period
            """
            if not hall_ids:
                hall_ids = self.env["hall.hall"].search([])
            if not (start_date and end_date):
                start_date = fields.Datetime.start_of(
                    fields.Datetime.now(), granularity="day"
                )
                end_date = fields.Datetime.end_of(fields.Datetime.now(), granularity="day")
            if not hall_ids.mapped("zone_ids"):
                return
    
            for hall in hall_ids:
                if hall.zone_ids:
                    log_id = self.create(
                        {
                            "date_log": fields.Datetime.now(),
                            "date_start": start_date,
                            "date_end": end_date,
                            "hall_id": hall.id,
                        }
                    )
                    for zone in hall.zone_ids:
                        # Retrieve visitor datas
                        visit_desc = "%s - %s - Visiteurs" % (
                            log_id.hall_id.name,
                            zone.name,
                        )
                        zone.with_delay(description=visit_desc)._wts_create_entry(
                            start_date, end_date, log_id, endpoint="visitor"
                        )
                        pass_desc = "%s - %s - Passants" % (log_id.hall_id.name, zone.name)
                        zone.with_delay(description=pass_desc)._wts_create_entry(
                            start_date, end_date, log_id, endpoint="passerby"
                        )
    
        # ------------------------------------------------------
        # CRON functions
        # ------------------------------------------------------
        def cron_wts(self, days=None, interval=None):
            """
            WTS datas retrieve CRON
    
            :param integer days: days before today if specified
            :param integer interval: number of days to retrieve
            :param bool group_by_day: aggregate result number by day
            """
            yesterday = fields.Datetime.now() - relativedelta(days=1)
            start_date = fields.Datetime.start_of(yesterday, granularity="day")
            end_date = fields.Datetime.end_of(yesterday, granularity="day")
    
            if days:
                start_date = start_date - relativedelta(days=days)
                end_date = end_date - relativedelta(days=days)
    
            if interval and interval > 1:
                start_date = start_date - relativedelta(days=interval)
                end_date = end_date - relativedelta(days=interval)
    
            self.import_wts_data(start_date=start_date, end_date=end_date)
    
        # ------------------------------------------------------
        # Common functions
        # ------------------------------------------------------