diff --git a/__manifest__.py b/__manifest__.py index a0e5494910eb5dbcbaa2493771b37135f8a695fa..42561fe364c5a677275bc45cdf7645ee8437f9b9 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -8,6 +8,7 @@ "depends": [ "cgscop_base", "base_location", + "base_geolocalize_gouv_api", "lefilament_naf", "partner_address_street3", "partner_company_type", @@ -20,6 +21,7 @@ "security/security_rules.xml", "security/ir.model.access.csv", # Datas + "datas/cron_geolocalize.xml", "datas/union_regionale_data.xml", "datas/res_country_state.xml", "datas/res_partner_certification_data.xml", diff --git a/datas/cron_geolocalize.xml b/datas/cron_geolocalize.xml new file mode 100644 index 0000000000000000000000000000000000000000..24c90fde221e77ff4df634289df6c24953505c6c --- /dev/null +++ b/datas/cron_geolocalize.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright 2020 Le Filament (<https://www.le-filament.com>) + License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). --> +<odoo> + <data noupdate="1"> + <record id="ir_cron_geol_data_gouv" model="ir.cron"> + <field name="name">CGSCOP - Geoloc Mise à jour Adhérents</field> + <field name="active" eval="True" /> + <field name="interval_type">days</field> + <field name="numbercall">-1</field> + <field name="nextcall" >2020-10-10 02:20:00</field> + <field name="model_id" ref="model_res_partner"/> + <field name="state">code</field> + <field name="code">model._cron_geoloc_data_gouv()</field> + </record> + </data> +</odoo> diff --git a/models/res_partner.py b/models/res_partner.py index 6e5f70c10e0bae46013cca0846c365495d3b3eca..5e294336e74e90b25ed2a88bde2e48bbb8bb5b9b 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -1,11 +1,16 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import time +import logging from datetime import datetime, timedelta from odoo import _, api, fields, models from odoo.exceptions import ValidationError +_logger = logging.getLogger(__name__) + class ScopPartner(models.Model): _inherit = "res.partner" @@ -1127,7 +1132,7 @@ class ScopPartner(models.Model): partner.revision_next_exercice = base_rev + 2 # ------------------------------------------------------ - # Button Action + # Button & Action # ------------------------------------------------------ def scop_send_to_cg(self): self.write( @@ -1259,10 +1264,10 @@ class ScopPartner(models.Model): def write_contact(self): return self - # ------------------------------------------------------ - # Affichage des coop avec filtre par défaut - # ------------------------------------------------------ def show_coop(self): + """ + Affichage des coop avec filtre par défaut + """ ctx = { "default_is_company": True, "default_is_cooperative": True, @@ -1311,10 +1316,10 @@ class ScopPartner(models.Model): "context": ctx, } - # ------------------------------------------------------ - # Affichage des prospect avec filtre par défaut - # ------------------------------------------------------ def show_prospect(self): + """ + Affichage des prospect avec filtre par défaut + """ ctx = { "default_is_company": True, "default_is_cooperative": True, @@ -1368,11 +1373,10 @@ class ScopPartner(models.Model): "context": ctx, } - # ------------------------------------------------------ - # Affichage des organismes avec filtre par défaut - # ------------------------------------------------------ def show_organisme(self): - + """ + Affichage des organismes avec filtre par défaut + """ ctx = { "default_is_company": True, "default_is_cooperative": True, @@ -1407,3 +1411,38 @@ class ScopPartner(models.Model): "domain": [("is_cooperative", "=", True)], "context": ctx, } + + # ------------------------------------------------------ + # CRON function + # ------------------------------------------------------ + def _cron_geoloc_data_gouv(self, days=1): + # Récupération des valeurs de suivi sur zip/city/street de la veille + yesterday = fields.Date.today() - timedelta(days=days) + + mail_tracking_value_ids = self.env['mail.tracking.value'].search([ + '|', '|', ('field', '=', 'zip'), + ('field', '=', 'city'), + ('field', '=', 'street'), + ('create_date', '>=', yesterday)]) + + # Récupération des messages de notif sur + # res.partner en lien avec les valeurs de suivi + mail_mess_ids = self.env['mail.message'].search([ + ('model', '=', 'res.partner'), + ('message_type', '=', 'notification'), + ('tracking_value_ids', 'in', mail_tracking_value_ids.ids)]) + + partner_list = mail_mess_ids.mapped('res_id') + + # Récupération des partners pour calcul des données GPS + partners = self.env['res.partner'].search([ + ('id', 'in', partner_list), + ('membership_status', '=', 'member')]) + + i = 0 + for partner in partners: + partner.geo_localize() + i += 1 + time.sleep(1) + _logger.info( + "Mise à jour de %d coordonnées", i)