Skip to content
Extraits de code Groupes Projets
Valider 1a86b5c1 rédigé par Juliana's avatar Juliana
Parcourir les fichiers

[ADD]Pre-commit

parent 455ca2aa
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -15,8 +15,8 @@ Ce module défini le modèle de données ACC: ...@@ -15,8 +15,8 @@ Ce module défini le modèle de données ACC:
* Création du modèle pour les données CDC *acc.enedis.cdc*, vues associées et menu * Création du modèle pour les données CDC *acc.enedis.cdc*, vues associées et menu
* Création du modèle pour les données Energie *acc.enedis.energie*, vues associées et menu * Création du modèle pour les données Energie *acc.enedis.energie*, vues associées et menu
* Création du modèle pour les logs imports *acc.enedis.import.logs*, vues associées et menu * Création du modèle pour les logs imports *acc.enedis.import.logs*, vues associées et menu
* Ajout de la fonctionnalité d'imports sur les opérations. Si des documents attachés existent, * Ajout de la fonctionnalité d'imports sur les opérations
le bouton *Intégration des données ENEDIS* permet d'intégrer les données Enedis dans la table * Intégration des données ENEDIS* permet d'intégrer les données Enedis dans la table
Description Description
...@@ -44,4 +44,3 @@ Maintainer ...@@ -44,4 +44,3 @@ Maintainer
:target: https://le-filament.com :target: https://le-filament.com
This module is maintained by Le Filament This module is maintained by Le Filament
{ {
'name': "ACC - Base", "name": "ACC - Base",
'summary': "Base des contacts et modèles ACC", "summary": "Base des contacts et modèles ACC",
'author': "Le Filament", "author": "Le Filament",
'website': "https://www.le-filament.com", "website": "https://www.le-filament.com",
'version': '14.0.1.0.1', "version": "14.0.1.0.1",
'license': "AGPL-3", "license": "AGPL-3",
'depends': [ "depends": ["contacts"],
'contacts' "data": [
],
'data': [
"security/ir.model.access.csv", "security/ir.model.access.csv",
# datas # datas
# views # views
'views/res_partner_views.xml', "views/res_partner_views.xml",
'views/acc_operation_views.xml', "views/acc_operation_views.xml",
'views/acc_counter_views.xml', "views/acc_counter_views.xml",
'views/acc_enedis_cdc_views.xml', "views/acc_enedis_cdc_views.xml",
'views/acc_enedis_import_logs_views.xml', "views/acc_enedis_import_logs_views.xml",
# views menu # views menu
'views/menu_views.xml', "views/menu_views.xml",
# wizard # wizard
], ],
'qweb': [ "qweb": [
# "static/src/xml/*.xml", # "static/src/xml/*.xml",
], ],
'installable': True, "installable": True,
'auto_install': False, "auto_install": False,
} }
# Copyright 2021 Le Filament (<http://www.le-filament.com>) # Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models, api from odoo import api, fields, models
class AccCounter(models.Model): class AccCounter(models.Model):
...@@ -13,9 +13,7 @@ class AccCounter(models.Model): ...@@ -13,9 +13,7 @@ class AccCounter(models.Model):
# ------------------------------------------------------ # ------------------------------------------------------
# General Info # General Info
name = fields.Char("ID PRM", required=True) name = fields.Char("ID PRM", required=True)
acc_operation_id = fields.Many2one( acc_operation_id = fields.Many2one("acc.operation", string="Opération liée")
"acc.operation",
string="Opération liée")
date_start_contract = fields.Date("Date de début", default=fields.Datetime.now) date_start_contract = fields.Date("Date de début", default=fields.Datetime.now)
date_end_contract = fields.Date("Date de fin", default=fields.Datetime.now) date_end_contract = fields.Date("Date de fin", default=fields.Datetime.now)
street = fields.Char("Rue") street = fields.Char("Rue")
...@@ -25,7 +23,7 @@ class AccCounter(models.Model): ...@@ -25,7 +23,7 @@ class AccCounter(models.Model):
partner_id = fields.Many2one( partner_id = fields.Many2one(
comodel_name="res.partner", comodel_name="res.partner",
string="Personne Physique", string="Personne Physique",
domain="['|', ('is_consumer', '=', True), ('is_producer', '=', True)]" domain="['|', ('is_consumer', '=', True), ('is_producer', '=', True)]",
) )
# Info Soutirage counter # Info Soutirage counter
...@@ -42,9 +40,9 @@ class AccCounter(models.Model): ...@@ -42,9 +40,9 @@ class AccCounter(models.Model):
power_instal = fields.Float("Puissance de l'installation (en kW)") power_instal = fields.Float("Puissance de l'installation (en kW)")
buyer_id = fields.Many2one( buyer_id = fields.Many2one(
comodel_name='res.partner', comodel_name="res.partner",
string="Acheteur de surplus", string="Acheteur de surplus",
domain="[('is_buyer_surplus', '=', True)]" domain="[('is_buyer_surplus', '=', True)]",
) )
# ------------------------------------------------------ # ------------------------------------------------------
# SQL Constraints # SQL Constraints
...@@ -64,7 +62,7 @@ class AccCounter(models.Model): ...@@ -64,7 +62,7 @@ class AccCounter(models.Model):
# ------------------------------------------------------ # ------------------------------------------------------
# Onchange / Constraints # Onchange / Constraints
# ------------------------------------------------------ # ------------------------------------------------------
@api.onchange('is_injection', 'is_delivery') @api.onchange("is_injection", "is_delivery")
def _onchange_prm_type(self): def _onchange_prm_type(self):
domain = [] domain = []
if self.is_injection: if self.is_injection:
......
# Copyright 2021 Le Filament (<http://www.le-filament.com>) # Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models, api from odoo import fields, models
class AccEnedisCDC(models.Model): class AccEnedisCDC(models.Model):
_name = 'acc.enedis.cdc' _name = "acc.enedis.cdc"
_description = 'CDC Enedis' _description = "CDC Enedis"
# ------------------------------------------------------ # ------------------------------------------------------
# Fields declaration # Fields declaration
# ------------------------------------------------------ # ------------------------------------------------------
name = fields.Char("Libellé du fichier") name = fields.Char("Libellé du fichier")
acc_operation_id = fields.Many2one( acc_operation_id = fields.Many2one(
'acc.operation', "acc.operation", "Opération", required=True, ondelete="cascade"
"Opération", )
required=True, acc_counter_id = fields.Many2one("acc.counter", "ID PRM")
ondelete="cascade") comp_data_type = fields.Selection(
acc_counter_id = fields.Many2one('acc.counter', "ID PRM") [
comp_data_type = fields.Selection([ ("autocons", "autocons"),
('autocons', 'autocons'), ("cons", "cons"),
('cons', 'cons'), ("prod", "prod"),
('prod', 'prod'), ("surplus", "surplus"),
('surplus', 'surplus'), ("complement", "complement"),
('complement', 'complement'),
], ],
string="Type de donnée calculée" string="Type de donnée calculée",
) )
power = fields.Float("Puissance en W") power = fields.Float("Puissance en W")
date_slot = fields.Datetime("Date par Demi Heure") date_slot = fields.Datetime("Date par Demi Heure")
......
# Copyright 2021 Le Filament (<http://www.le-filament.com>) # Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models, api from odoo import fields, models
class AccEnedisImportLogs(models.Model): class AccEnedisImportLogs(models.Model):
_name = 'acc.enedis.import.logs' _name = "acc.enedis.import.logs"
_description = 'Table de logs' _description = "Table de logs"
# ------------------------------------------------------ # ------------------------------------------------------
# Fields declaration # Fields declaration
# ------------------------------------------------------ # ------------------------------------------------------
name = fields.Char("Libellé des données chargées") name = fields.Char("Libellé des données chargées")
acc_operation_id = fields.Many2one('acc.operation', "Opération") acc_operation_id = fields.Many2one("acc.operation", "Opération")
date_import = fields.Datetime( date_import = fields.Datetime("Date de l'appel")
"Date de l'appel")
# ------------------------------------------------------ # ------------------------------------------------------
# SQL Constraints # SQL Constraints
# ------------------------------------------------------ # ------------------------------------------------------
......
# Copyright 2021 Le Filament (<http://www.le-filament.com>) # Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import json
import base64 import base64
import pandas as pd from datetime import datetime, timedelta
from io import StringIO from io import StringIO
from odoo import fields, models, api
from datetime import datetime, timedelta, date
from odoo.exceptions import UserError
from odoo.tools import date_utils
from dateutil.relativedelta import relativedelta import pandas as pd
from odoo import _, api, fields, models
from odoo.exceptions import UserError
class AccOperation(models.Model): class AccOperation(models.Model):
_name = 'acc.operation' _name = "acc.operation"
_inherit = ['mail.thread', 'image.mixin'] _inherit = ["mail.thread", "image.mixin"]
_description = 'Opération' _description = "Opération"
# ------------------------------------------------------ # ------------------------------------------------------
# Fields declaration # Fields declaration
...@@ -25,46 +23,52 @@ class AccOperation(models.Model): ...@@ -25,46 +23,52 @@ class AccOperation(models.Model):
name = fields.Char("ID Convention Enedis", required=True) name = fields.Char("ID Convention Enedis", required=True)
description = fields.Char("Description") description = fields.Char("Description")
pmo_id = fields.Many2one( pmo_id = fields.Many2one(
comodel_name='res.partner', comodel_name="res.partner",
string="PMO", string="PMO",
domain="[('is_pmo', '=', True)]", domain="[('is_pmo', '=', True)]",
required=True required=True,
) )
acc_injection_ids = fields.One2many( acc_injection_ids = fields.One2many(
comodel_name='acc.counter', comodel_name="acc.counter",
inverse_name='acc_operation_id', inverse_name="acc_operation_id",
domain=[('is_injection', '=', True)], domain=[("is_injection", "=", True)],
string="Points d'injection", string="Points d'injection",
) )
acc_delivery_ids = fields.One2many( acc_delivery_ids = fields.One2many(
comodel_name='acc.counter', comodel_name="acc.counter",
inverse_name='acc_operation_id', inverse_name="acc_operation_id",
domain=[('is_delivery', '=', True)], domain=[("is_delivery", "=", True)],
string="Points de soutirage", string="Points de soutirage",
) )
acc_enedis_import_logs_ids = fields.One2many( acc_enedis_import_logs_ids = fields.One2many(
comodel_name='acc.enedis.import.logs', comodel_name="acc.enedis.import.logs",
inverse_name='acc_operation_id', inverse_name="acc_operation_id",
string="Table des logs", string="Table des logs",
) )
acc_enedis_cdc_ids = fields.One2many( acc_enedis_cdc_ids = fields.One2many(
comodel_name='acc.enedis.cdc', comodel_name="acc.enedis.cdc",
inverse_name='acc_operation_id', inverse_name="acc_operation_id",
string="Table des courbes", string="Table des courbes",
) )
distribution_key = fields.Selection([ distribution_key = fields.Selection(
('statique', 'Statique'), [
('dynamique', 'Dynamique par défaut'), ("statique", "Statique"),
('dynamique_perso', 'Dynamique personnalisée') ("dynamique", "Dynamique par défaut"),
("dynamique_perso", "Dynamique personnalisée"),
], ],
string="Clés de répartition" string="Clés de répartition",
)
date_start_contract = fields.Date(
string="Date de début", default=fields.Date.context_today
)
date_end_contract = fields.Date(
string="Date de fin", default=fields.Date.context_today
) )
date_start_contract = fields.Date(string="Date de début", default=fields.Date.context_today)
date_end_contract = fields.Date(string="Date de fin", default=fields.Date.context_today)
birthday_date = fields.Integer( birthday_date = fields.Integer(
string="Date d'anniversaire calculée", string="Date d'anniversaire calculée",
compute='_compute_birthday_date', compute="_compute_birthday_date",
store=True) store=True,
)
# ------------------------------------------------------ # ------------------------------------------------------
# SQL Constraints # SQL Constraints
...@@ -77,7 +81,7 @@ class AccOperation(models.Model): ...@@ -77,7 +81,7 @@ class AccOperation(models.Model):
# ------------------------------------------------------ # ------------------------------------------------------
# Computed fields / Search Fields # Computed fields / Search Fields
# ------------------------------------------------------ # ------------------------------------------------------
@api.depends('date_start_contract') @api.depends("date_start_contract")
def _compute_birthday_date(self): def _compute_birthday_date(self):
for operation in self: for operation in self:
if operation.date_start_contract: if operation.date_start_contract:
...@@ -96,27 +100,27 @@ class AccOperation(models.Model): ...@@ -96,27 +100,27 @@ class AccOperation(models.Model):
# ------------------------------------------------------ # ------------------------------------------------------
def import_enedis_data(self): def import_enedis_data(self):
for operation in self: for operation in self:
files = self.env['ir.attachment'].search([ files = self.env["ir.attachment"].search(
('res_model', '=', 'acc.operation'), [("res_model", "=", "acc.operation"), ("res_id", "=", operation.id)]
('res_id', '=', operation.id) )
])
if not files: if not files:
raise UserError( raise UserError(_("Pas de fichiers à intégrer"))
"Pas de fichiers à intégrer")
else: else:
for file in files: for file in files:
data_filename = file.name.split('_') data_filename = file.name.split("_")
id_pdm = data_filename[0] id_pdm = data_filename[0]
counter_id = self.env['acc.counter'] counter_id = self.env["acc.counter"]
if id_pdm != self.name: if id_pdm != self.name:
# Get the counter ID from file name # Get the counter ID from file name
counter_id = self.env['acc.counter'].search([('name', '=', id_pdm)]) counter_id = self.env["acc.counter"].search(
[("name", "=", id_pdm)]
)
computed_data_type = data_filename[3] computed_data_type = data_filename[3]
file_decode = StringIO(base64.b64decode(file.datas).decode('UTF-8')) file_decode = StringIO(base64.b64decode(file.datas).decode("UTF-8"))
file_decode.seek(0) file_decode.seek(0)
# reader = pd.read_csv(file_decode, header=None, delimiter=';') # reader = pd.read_csv(file_decode, header=None, delimiter=';')
reader = pd.read_csv(file_decode, header=None, delimiter=';') reader = pd.read_csv(file_decode, header=None, delimiter=";")
if data_filename[4] == "CDC.csv": if data_filename[4] == "CDC.csv":
# Create Data for the CDC # Create Data for the CDC
...@@ -124,30 +128,36 @@ class AccOperation(models.Model): ...@@ -124,30 +128,36 @@ class AccOperation(models.Model):
# Create 1st slot 0-30min # Create 1st slot 0-30min
date_slot = datetime.strptime(row[0], "%d/%m/%Y %H:%M") date_slot = datetime.strptime(row[0], "%d/%m/%Y %H:%M")
# date_slot = row[0] # date_slot = row[0]
self.env['acc.enedis.cdc'].create({ self.env["acc.enedis.cdc"].create(
'name': file.name, {
'acc_operation_id': self.id, "name": file.name,
'acc_counter_id': counter_id.id or False, "acc_operation_id": self.id,
'comp_data_type': computed_data_type, "acc_counter_id": counter_id.id or False,
'power': row[1], "comp_data_type": computed_data_type,
'date_slot': date_slot, "power": row[1],
}) "date_slot": date_slot,
}
)
# Create 2nd slot 30-60min # Create 2nd slot 30-60min
date_slot_30 = date_slot + timedelta(minutes=30) date_slot_30 = date_slot + timedelta(minutes=30)
self.env['acc.enedis.cdc'].create({ self.env["acc.enedis.cdc"].create(
'name': file.name, {
'acc_operation_id': self.id, "name": file.name,
'acc_counter_id': counter_id.id or False, "acc_operation_id": self.id,
'comp_data_type': computed_data_type, "acc_counter_id": counter_id.id or False,
'power': row[2], "comp_data_type": computed_data_type,
'date_slot': date_slot_30, "power": row[2],
}) "date_slot": date_slot_30,
}
)
# Logs information logs # Logs information logs
self.env['acc.enedis.import.logs'].create({ self.env["acc.enedis.import.logs"].create(
'name': file.name, {
'acc_operation_id': self.id, "name": file.name,
}) "acc_operation_id": self.id,
}
)
# Delete file after creation # Delete file after creation
file.unlink() file.unlink()
# Copyright 2021 Le Filament (<http://www.le-filament.com>) # Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models, api from odoo import fields, models
class ResPartner(models.Model): class ResPartner(models.Model):
_inherit = 'res.partner' _inherit = "res.partner"
# ------------------------------------------------------ # ------------------------------------------------------
# Fields declaration # Fields declaration
# ------------------------------------------------------ # ------------------------------------------------------
is_pmo = fields.Boolean("Est un PMO") is_pmo = fields.Boolean("Est un PMO")
acc_operation_ids = fields.One2many( acc_operation_ids = fields.One2many(
comodel_name='acc.operation', comodel_name="acc.operation",
inverse_name='pmo_id', inverse_name="pmo_id",
string="Liste des opérations", string="Liste des opérations",
) )
is_acc_linked = fields.Boolean("Est un sociétaire/adhérent/actionnaire app") is_acc_linked = fields.Boolean("Est un sociétaire/adhérent/actionnaire app")
...@@ -21,16 +21,16 @@ class ResPartner(models.Model): ...@@ -21,16 +21,16 @@ class ResPartner(models.Model):
is_consumer = fields.Boolean("Est un consommateur") is_consumer = fields.Boolean("Est un consommateur")
is_buyer_surplus = fields.Boolean("Est un acheteur de surplus") is_buyer_surplus = fields.Boolean("Est un acheteur de surplus")
injection_counter_ids = fields.One2many( injection_counter_ids = fields.One2many(
comodel_name='acc.counter', comodel_name="acc.counter",
inverse_name='partner_id', inverse_name="partner_id",
string="Liste des points d'injection", string="Liste des points d'injection",
domain="[('is_injection', '=', True)]" domain="[('is_injection', '=', True)]",
) )
delivery_counter_ids = fields.One2many( delivery_counter_ids = fields.One2many(
comodel_name='acc.counter', comodel_name="acc.counter",
inverse_name='partner_id', inverse_name="partner_id",
string="Liste des points d'injection", string="Liste des points d'injection",
domain="[('is_delivery', '=', True)]" domain="[('is_delivery', '=', True)]",
) )
# ------------------------------------------------------ # ------------------------------------------------------
# SQL Constraints # SQL Constraints
......
...@@ -9,8 +9,16 @@ ...@@ -9,8 +9,16 @@
<search string="Recherche PRMn"> <search string="Recherche PRMn">
<field name="name" string="PRM" /> <field name="name" string="PRM" />
<separator /> <separator />
<filter string="Points d'injection" name="is_injection" domain="[('is_injection', '=', True)]"/> <filter
<filter string="Points de soutirage" name="is_delivery" domain="[('is_delivery', '=', True)]"/> string="Points d'injection"
name="is_injection"
domain="[('is_injection', '=', True)]"
/>
<filter
string="Points de soutirage"
name="is_delivery"
domain="[('is_delivery', '=', True)]"
/>
<separator /> <separator />
</search> </search>
</field> </field>
...@@ -41,7 +49,9 @@ ...@@ -41,7 +49,9 @@
<group> <group>
<field name="is_injection" /> <field name="is_injection" />
</group> </group>
<group attrs="{'invisible': [('is_injection', '!=', True)]}"> <group
attrs="{'invisible': [('is_injection', '!=', True)]}"
>
<field name="power_instal" /> <field name="power_instal" />
<field name="prod_annual" /> <field name="prod_annual" />
</group> </group>
......
...@@ -9,7 +9,11 @@ ...@@ -9,7 +9,11 @@
<search string="Recherche Opération"> <search string="Recherche Opération">
<field name="name" string="Nom de l'opération" /> <field name="name" string="Nom de l'opération" />
<separator /> <separator />
<filter string="Archivé" name="inactive" domain="[('active', '=', False)]"/> <filter
string="Archivé"
name="inactive"
domain="[('active', '=', False)]"
/>
<separator /> <separator />
</search> </search>
</field> </field>
...@@ -24,13 +28,26 @@ ...@@ -24,13 +28,26 @@
<!-- <button string="Intégration des données ENEDIS" type="object" class="btn-primary" name="import_enedis_data"/>--> <!-- <button string="Intégration des données ENEDIS" type="object" class="btn-primary" name="import_enedis_data"/>-->
</header> </header>
<sheet> <sheet>
<widget name="web_ribbon" title="Archivé" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/> <widget
name="web_ribbon"
title="Archivé"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<field name="active" invisible="1" /> <field name="active" invisible="1" />
<field name="image_1920" widget='image' options='{"preview_image": "image_256"}' style="float: right;"/> <field
name="image_1920"
widget='image'
options='{"preview_image": "image_256"}'
style="float: right;"
/>
<div class="oe_title"> <div class="oe_title">
<label for="description" /> <label for="description" />
<h1> <h1>
<field name="description" placeholder="Nom de l'opération"/> <field
name="description"
placeholder="Nom de l'opération"
/>
</h1> </h1>
<label for="name" /> <label for="name" />
<h2> <h2>
...@@ -38,7 +55,12 @@ ...@@ -38,7 +55,12 @@
</h2> </h2>
<label for="pmo_id" /> <label for="pmo_id" />
<h2> <h2>
<field name="pmo_id" placeholder="PMO" domain="[('is_pmo', '=', True)]" context="{'default_is_pmo': True}"/> <field
name="pmo_id"
placeholder="PMO"
domain="[('is_pmo', '=', True)]"
context="{'default_is_pmo': True}"
/>
</h2> </h2>
</div> </div>
<group> <group>
...@@ -55,31 +77,50 @@ ...@@ -55,31 +77,50 @@
name="acc_injection_ids" name="acc_injection_ids"
widget="one2many" widget="one2many"
domain="[('is_injection', '=', True)]" domain="[('is_injection', '=', True)]"
context="{'default_acc_operation_id': active_id, 'default_is_injection': True}"> context="{'default_acc_operation_id': active_id, 'default_is_injection': True}"
>
<tree string="Points d'injection" editable="bottom"> <tree string="Points d'injection" editable="bottom">
<field name="acc_operation_id" invisible="1" /> <field name="acc_operation_id" invisible="1" />
<field name="is_injection" invisible="1" /> <field name="is_injection" invisible="1" />
<field name="name" /> <field name="name" />
<field name="partner_id" context="{'default_is_producer': True}"/> <field
<field name="buyer_id" context="{'default_is_buyer_surplus': True}"/> name="partner_id"
context="{'default_is_producer': True}"
/>
<field
name="buyer_id"
context="{'default_is_buyer_surplus': True}"
/>
</tree> </tree>
</field> </field>
</page> </page>
<page string="Points de soutirage" name="delivery"> <page string="Points de soutirage" name="delivery">
<field name="acc_delivery_ids" <field
name="acc_delivery_ids"
widget="one2many" widget="one2many"
domain="[('is_delivery', '=', True)]" domain="[('is_delivery', '=', True)]"
context="{'default_acc_operation_id': active_id, 'default_is_delivery': True}"> context="{'default_acc_operation_id': active_id, 'default_is_delivery': True}"
<tree string="Points de soutirage" editable="bottom"> >
<tree
string="Points de soutirage"
editable="bottom"
>
<field name="acc_operation_id" invisible="1" /> <field name="acc_operation_id" invisible="1" />
<field name="is_delivery" invisible="1" /> <field name="is_delivery" invisible="1" />
<field name="name" /> <field name="name" />
<field name="partner_id" context="{'default_is_consumer': True}"/> <field
name="partner_id"
context="{'default_is_consumer': True}"
/>
</tree> </tree>
</field> </field>
</page> </page>
<page string="Logs Imports" name="logs"> <page string="Logs Imports" name="logs">
<field name="acc_enedis_import_logs_ids" mode="tree" readonly="1"> <field
name="acc_enedis_import_logs_ids"
mode="tree"
readonly="1"
>
<tree string="Logs"> <tree string="Logs">
<field name="name" /> <field name="name" />
<field name="date_import" /> <field name="date_import" />
...@@ -121,12 +162,23 @@ ...@@ -121,12 +162,23 @@
<field name="image_256" /> <field name="image_256" />
<templates> <templates>
<t t-name="kanban-box"> <t t-name="kanban-box">
<div class="container o_kanban_card_content oe_kanban_global_click"> <div
class="container o_kanban_card_content oe_kanban_global_click"
>
<div class="row"> <div class="row">
<div class="col text-center"> <div class="col text-center">
<img alt="Operation image" t-if="record.image_256.raw_value" t-att-src="kanban_image('acc.operation', 'image_256', record.id.raw_value)"/> <img
alt="Operation image"
t-if="record.image_256.raw_value"
t-att-src="kanban_image('acc.operation', 'image_256', record.id.raw_value)"
/>
<t t-if="!record.image_128.raw_value"> <t t-if="!record.image_128.raw_value">
<img alt="Image Operation" class="img-fluid" style="max-width: 256px;" t-att-src='_s + "/acc_operation/static/img/placeholder.png"'/> <img
alt="Image Operation"
class="img-fluid"
style="max-width: 256px;"
t-att-src='_s + "/acc_operation/static/img/placeholder.png"'
/>
</t> </t>
</div> </div>
</div> </div>
......
...@@ -2,55 +2,68 @@ ...@@ -2,55 +2,68 @@
<odoo> <odoo>
<data> <data>
<menuitem id="menu_acc" <menuitem
id="menu_acc"
name="ACC" name="ACC"
sequence="6" sequence="6"
web_icon="acc_operation,static/img/icon_operation.png" web_icon="acc_operation,static/img/icon_operation.png"
groups="base.group_user,base.group_partner_manager"/> groups="base.group_user,base.group_partner_manager"
/>
<menuitem id="menu_general" <menuitem id="menu_general" parent="menu_acc" name="ACC" sequence="10" />
parent="menu_acc"
name="ACC"
sequence="10"/>
<menuitem id="menu_operations" <menuitem
id="menu_operations"
parent="menu_general" parent="menu_general"
name="Operations" name="Operations"
sequence="10" sequence="10"
action="acc_operation.acc_operation_act_window"/> action="acc_operation.acc_operation_act_window"
/>
<menuitem id="menu_prm" <menuitem
id="menu_prm"
parent="menu_general" parent="menu_general"
name="PRM" name="PRM"
sequence="20" sequence="20"
action="acc_operation.acc_counter_act_window"/> action="acc_operation.acc_counter_act_window"
/>
<menuitem id="acc_operation_menu_contacts" <menuitem
id="acc_operation_menu_contacts"
name="Contacts" name="Contacts"
action="contacts.action_contacts" action="contacts.action_contacts"
parent="menu_acc" parent="menu_acc"
sequence="20"/> sequence="20"
/>
<menuitem id="acc_enedis_menu" <menuitem
id="acc_enedis_menu"
name="Données Enedis" name="Données Enedis"
parent="menu_acc" parent="menu_acc"
sequence="40"/> sequence="40"
/>
<menuitem id="acc_enedis_cdc_menu" <menuitem
id="acc_enedis_cdc_menu"
parent="acc_enedis_menu" parent="acc_enedis_menu"
name="CDC Enedis" name="CDC Enedis"
sequence="10" sequence="10"
action="acc_operation.acc_enedis_cdc_act_window"/> action="acc_operation.acc_enedis_cdc_act_window"
/>
<menuitem id="acc_enedis_import_logs_menu" <menuitem
id="acc_enedis_import_logs_menu"
parent="acc_enedis_menu" parent="acc_enedis_menu"
name="Logs Import des données" name="Logs Import des données"
sequence="30" sequence="30"
action="acc_operation.acc_enedis_import_logs_act_window"/> action="acc_operation.acc_enedis_import_logs_act_window"
/>
<menuitem id="menu_acc_config" <menuitem
id="menu_acc_config"
name="Configuration" name="Configuration"
parent="menu_acc" parent="menu_acc"
sequence="60"/> sequence="60"
/>
</data> </data>
</odoo> </odoo>
...@@ -8,10 +8,26 @@ ...@@ -8,10 +8,26 @@
<field name="inherit_id" ref="base.view_res_partner_filter" /> <field name="inherit_id" ref="base.view_res_partner_filter" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//filter[@name='type_person']" position="before"> <xpath expr="//filter[@name='type_person']" position="before">
<filter string="PMO" name="type_pmo" domain="[('is_pmo', '=', True)]"/> <filter
<filter string="Consommateurs" name="type_consumer" domain="[('is_consumer', '=', True)]"/> string="PMO"
<filter string="Producteurs" name="type_producer" domain="[('is_producer', '=', True)]"/> name="type_pmo"
<filter string="Acheteurs de surplus" name="type_buyer" domain="[('is_buyer_surplus', '=', True)]"/> domain="[('is_pmo', '=', True)]"
/>
<filter
string="Consommateurs"
name="type_consumer"
domain="[('is_consumer', '=', True)]"
/>
<filter
string="Producteurs"
name="type_producer"
domain="[('is_producer', '=', True)]"
/>
<filter
string="Acheteurs de surplus"
name="type_buyer"
domain="[('is_buyer_surplus', '=', True)]"
/>
<separator /> <separator />
</xpath> </xpath>
</field> </field>
...@@ -29,13 +45,25 @@ ...@@ -29,13 +45,25 @@
<field name="is_buyer_surplus" /> <field name="is_buyer_surplus" />
</field> </field>
<xpath expr="//notebook" position="inside"> <xpath expr="//notebook" position="inside">
<page string="Points d'injection" name="injection" attrs="{'invisible': [('is_producer', '!=', True)]}"> <page
string="Points d'injection"
name="injection"
attrs="{'invisible': [('is_producer', '!=', True)]}"
>
<field name="injection_counter_ids" widget="one2many" /> <field name="injection_counter_ids" widget="one2many" />
</page> </page>
<page string="Points de soutirage" name="delivery" attrs="{'invisible': [('is_consumer', '!=', True)]}"> <page
string="Points de soutirage"
name="delivery"
attrs="{'invisible': [('is_consumer', '!=', True)]}"
>
<field name="delivery_counter_ids" widget="one2many" /> <field name="delivery_counter_ids" widget="one2many" />
</page> </page>
<page string="Liste des opérations" name="operation" attrs="{'invisible': [('is_producer', '=', False), ('is_consumer', '=', False), ('is_pmo', '=', False)]}"> <page
string="Liste des opérations"
name="operation"
attrs="{'invisible': [('is_producer', '=', False), ('is_consumer', '=', False), ('is_pmo', '=', False)]}"
>
<field name="acc_operation_ids" widget="one2many"> <field name="acc_operation_ids" widget="one2many">
<tree string="Liste des opérations"> <tree string="Liste des opérations">
<field name="name" /> <field name="name" />
...@@ -48,16 +76,36 @@ ...@@ -48,16 +76,36 @@
<field name="pmo_id" /> <field name="pmo_id" />
</group> </group>
<notebook> <notebook>
<page string="Points d'injection" name="injection"> <page
<field name="acc_injection_ids" widget="one2many" domain="[('is_injection', '=', True)]"> string="Points d'injection"
<tree string="Points d'injection" editable="top"> name="injection"
>
<field
name="acc_injection_ids"
widget="one2many"
domain="[('is_injection', '=', True)]"
>
<tree
string="Points d'injection"
editable="top"
>
<field name="name" /> <field name="name" />
</tree> </tree>
</field> </field>
</page> </page>
<page string="Points de soutirage" name="delivery"> <page
<field name="acc_delivery_ids" widget="one2many" domain="[('is_delivery', '=', True)]"> string="Points de soutirage"
<tree string="Points de soutirage" editable="top"> name="delivery"
>
<field
name="acc_delivery_ids"
widget="one2many"
domain="[('is_delivery', '=', True)]"
>
<tree
string="Points de soutirage"
editable="top"
>
<field name="name" /> <field name="name" />
</tree> </tree>
</field> </field>
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter