Sélectionner une révision Git
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
# ------------------------------------------------------