Skip to content
Extraits de code Groupes Projets
Valider 49185f92 rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[clean] add pre-commit files and changes

parent 455ca2aa
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Affichage de avec 782 ajouts et 176 suppressions
# Configuration for known file extensions
[*.{css,js,json,less,md,py,rst,sass,scss,xml,yaml,yml}]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.{json,yml,yaml,rst,md}]
indent_size = 2
# Do not configure editor for libs and autogenerated content
[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}]
charset = unset
end_of_line = unset
indent_size = unset
indent_style = unset
insert_final_newline = false
trim_trailing_whitespace = false
env:
browser: true
es6: true
# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449
parserOptions:
ecmaVersion: 2017
overrides:
- files:
- "**/*.esm.js"
parserOptions:
sourceType: module
# Globals available in Odoo that shouldn't produce errorings
globals:
_: readonly
$: readonly
fuzzy: readonly
jQuery: readonly
moment: readonly
odoo: readonly
openerp: readonly
owl: readonly
# Styling is handled by Prettier, so we only need to enable AST rules;
# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890
rules:
accessor-pairs: warn
array-callback-return: warn
callback-return: warn
capitalized-comments:
- warn
- always
- ignoreConsecutiveComments: true
ignoreInlineComments: true
complexity:
- warn
- 15
constructor-super: warn
dot-notation: warn
eqeqeq: warn
global-require: warn
handle-callback-err: warn
id-blacklist: warn
id-match: warn
init-declarations: error
max-depth: warn
max-nested-callbacks: warn
max-statements-per-line: warn
no-alert: warn
no-array-constructor: warn
no-caller: warn
no-case-declarations: warn
no-class-assign: warn
no-cond-assign: error
no-const-assign: error
no-constant-condition: warn
no-control-regex: warn
no-debugger: error
no-delete-var: warn
no-div-regex: warn
no-dupe-args: error
no-dupe-class-members: error
no-dupe-keys: error
no-duplicate-case: error
no-duplicate-imports: error
no-else-return: warn
no-empty-character-class: warn
no-empty-function: error
no-empty-pattern: error
no-empty: warn
no-eq-null: error
no-eval: error
no-ex-assign: error
no-extend-native: warn
no-extra-bind: warn
no-extra-boolean-cast: warn
no-extra-label: warn
no-fallthrough: warn
no-func-assign: error
no-global-assign: error
no-implicit-coercion:
- warn
- allow: ["~"]
no-implicit-globals: warn
no-implied-eval: warn
no-inline-comments: warn
no-inner-declarations: warn
no-invalid-regexp: warn
no-irregular-whitespace: warn
no-iterator: warn
no-label-var: warn
no-labels: warn
no-lone-blocks: warn
no-lonely-if: error
no-mixed-requires: error
no-multi-str: warn
no-native-reassign: error
no-negated-condition: warn
no-negated-in-lhs: error
no-new-func: warn
no-new-object: warn
no-new-require: warn
no-new-symbol: warn
no-new-wrappers: warn
no-new: warn
no-obj-calls: warn
no-octal-escape: warn
no-octal: warn
no-param-reassign: warn
no-path-concat: warn
no-process-env: warn
no-process-exit: warn
no-proto: warn
no-prototype-builtins: warn
no-redeclare: warn
no-regex-spaces: warn
no-restricted-globals: warn
no-restricted-imports: warn
no-restricted-modules: warn
no-restricted-syntax: warn
no-return-assign: error
no-script-url: warn
no-self-assign: warn
no-self-compare: warn
no-sequences: warn
no-shadow-restricted-names: warn
no-shadow: warn
no-sparse-arrays: warn
no-sync: warn
no-this-before-super: warn
no-throw-literal: warn
no-undef-init: warn
no-undef: error
no-unmodified-loop-condition: warn
no-unneeded-ternary: error
no-unreachable: error
no-unsafe-finally: error
no-unused-expressions: error
no-unused-labels: error
no-unused-vars: error
no-use-before-define: error
no-useless-call: warn
no-useless-computed-key: warn
no-useless-concat: warn
no-useless-constructor: warn
no-useless-escape: warn
no-useless-rename: warn
no-void: warn
no-with: warn
operator-assignment: [error, always]
prefer-const: warn
radix: warn
require-yield: warn
sort-imports: warn
spaced-comment: [error, always]
strict: [error, function]
use-isnan: error
valid-jsdoc:
- warn
- prefer:
arg: param
argument: param
augments: extends
constructor: class
exception: throws
func: function
method: function
prop: property
return: returns
virtual: abstract
yield: yields
preferType:
array: Array
bool: Boolean
boolean: Boolean
number: Number
object: Object
str: String
string: String
requireParamDescription: false
requireReturn: false
requireReturnDescription: false
requireReturnType: false
valid-typeof: warn
yoda: warn
[flake8]
max-line-length = 88
max-complexity = 16
# B = bugbear
# B9 = bugbear opinionated (incl line length)
select = C,E,F,W,B,B9
# E203: whitespace before ':' (black behaviour)
# E501: flake8 line length (covered by bugbear B950)
# W503: line break before binary operator (black behaviour)
ignore = E203,E501,W503
per-file-ignores=
__init__.py:F401
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
/.venv
/.pytest_cache
# C extensions
*.so
# Distribution / packaging
.Python
env/
bin/
build/
develop-eggs/
dist/
eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
*.eggs
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.cache
nosetests.xml
coverage.xml
# Translations
*.mo
# Pycharm
.idea
# Eclipse
.settings
# Visual Studio cache/options directory
.vs/
.vscode
# OSX Files
.DS_Store
# Django stuff:
*.log
# Mr Developer
.mr.developer.cfg
.project
.pydevproject
# Rope
.ropeproject
# Sphinx documentation
docs/_build/
# Backup files
*~
*.swp
# OCA rules
!static/lib/
[settings]
; see https://github.com/psf/black
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
combine_as_imports=True
use_parentheses=True
line_length=88
known_odoo=odoo
known_odoo_addons=odoo.addons
sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER
default_section=THIRDPARTY
ensure_newline_before_comments = True
exclude: |
(?x)
# NOT INSTALLABLE ADDONS
# END NOT INSTALLABLE ADDONS
# Files and folders generated by bots, to avoid loops
^setup/|/static/description/index\.html$|
# We don't want to mess with tool-generated files
.svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|
# Maybe reactivate this when all README files include prettier ignore tags?
^README\.md$|
# Library files can have extraneous formatting (even minimized)
/static/(src/)?lib/|
# Repos using Sphinx to generate docs don't need prettying
^docs/_templates/.*\.html$|
# You don't usually want a bot to modify your legal texts
(LICENSE.*|COPYING.*)
default_language_version:
python: python3
node: "14.13.0"
repos:
- repo: local
hooks:
# These files are most likely copier diff rejection junks; if found,
# review them manually, fix the problem (if needed) and remove them
- id: forbidden-files
name: forbidden files
entry: found forbidden files; remove them
language: fail
files: "\\.rej$"
- repo: https://github.com/oca/maintainer-tools
rev: ab1d7f6
hooks:
# update the NOT INSTALLABLE ADDONS section above
- id: oca-update-pre-commit-excluded-addons
- id: oca-fix-manifest-website
args: ["https://le-filament.com"]
- repo: https://github.com/myint/autoflake
rev: v1.4
hooks:
- id: autoflake
args:
- --expand-star-imports
- --ignore-init-module-imports
- --in-place
- --remove-all-unused-imports
- --remove-duplicate-keys
- --remove-unused-variables
- repo: https://github.com/psf/black
rev: 20.8b1
hooks:
- id: black
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v2.1.2
hooks:
- id: prettier
name: prettier (with plugin-xml)
additional_dependencies:
- "prettier@2.1.2"
- "@prettier/plugin-xml@0.12.0"
args:
- --plugin=@prettier/plugin-xml
files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v7.8.1
hooks:
- id: eslint
verbose: true
args:
- --color
- --fix
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
# exclude autogenerated files
exclude: /README\.rst$|\.pot?$
- id: end-of-file-fixer
# exclude autogenerated files
exclude: /README\.rst$|\.pot?$
- id: debug-statements
- id: fix-encoding-pragma
args: ["--remove"]
- id: check-case-conflict
- id: check-docstring-first
- id: check-executables-have-shebangs
- id: check-merge-conflict
# exclude files where underlines are not distinguishable from merge conflicts
exclude: /README\.rst$|^docs/.*\.rst$
- id: check-symlinks
- id: check-xml
- id: mixed-line-ending
args: ["--fix=lf"]
- repo: https://github.com/asottile/pyupgrade
rev: v2.7.2
hooks:
- id: pyupgrade
args: ["--keep-percent-format"]
- repo: https://github.com/PyCQA/isort
rev: 5.5.1
hooks:
- id: isort
name: isort except __init__.py
args:
- --settings=.
exclude: /__init__\.py$
- repo: https://gitlab.com/PyCQA/flake8
rev: 3.8.3
hooks:
- id: flake8
name: flake8
additional_dependencies: ["flake8-bugbear==20.1.4"]
- repo: https://github.com/PyCQA/pylint
rev: pylint-2.5.3
hooks:
- id: pylint
name: pylint with optional checks
args:
- --rcfile=.pylintrc
- --exit-zero
verbose: true
additional_dependencies: &pylint_deps
- pylint-odoo==3.5.0
- id: pylint
name: pylint with mandatory checks
args:
- --rcfile=.pylintrc-mandatory
additional_dependencies: *pylint_deps
# Defaults for all prettier-supported languages.
# Prettier will complete this with settings from .editorconfig file.
bracketSpacing: false
printWidth: 88
proseWrap: always
semi: true
trailingComma: "es5"
xmlWhitespaceSensitivity: "strict"
[MASTER]
load-plugins=pylint_odoo
score=n
[ODOOLINT]
readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
manifest_required_authors=Le Filament
manifest_required_keys=license
manifest_deprecated_keys=description,active
license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
valid_odoo_versions=14.0
[MESSAGES CONTROL]
disable=all
# This .pylintrc contains optional AND mandatory checks and is meant to be
# loaded in an IDE to have it check everything, in the hope this will make
# optional checks more visible to contributors who otherwise never look at a
# green travis to see optional checks that failed.
# .pylintrc-mandatory containing only mandatory checks is used the pre-commit
# config as a blocking check.
enable=anomalous-backslash-in-string,
api-one-deprecated,
api-one-multi-together,
assignment-from-none,
attribute-deprecated,
class-camelcase,
dangerous-default-value,
dangerous-view-replace-wo-priority,
development-status-allowed,
duplicate-id-csv,
duplicate-key,
duplicate-xml-fields,
duplicate-xml-record-id,
eval-referenced,
eval-used,
incoherent-interpreter-exec-perm,
license-allowed,
manifest-author-string,
manifest-deprecated-key,
manifest-required-author,
manifest-required-key,
manifest-version-format,
method-compute,
method-inverse,
method-required-super,
method-search,
openerp-exception-warning,
pointless-statement,
pointless-string-statement,
print-used,
redundant-keyword-arg,
redundant-modulename-xml,
reimported,
relative-import,
return-in-init,
rst-syntax-error,
sql-injection,
too-few-format-args,
translation-field,
translation-required,
unreachable,
use-vim-comment,
wrong-tabs-instead-of-spaces,
xml-syntax-error,
# messages that do not cause the lint step to fail
consider-merging-classes-inherited,
create-user-wo-reset-password,
dangerous-filter-wo-user,
deprecated-module,
file-not-used,
invalid-commit,
missing-newline-extrafiles,
no-utf8-coding-comment,
odoo-addons-relative-import,
old-api7-method-defined,
redefined-builtin,
too-complex,
unnecessary-utf8-coding-comment
[REPORTS]
msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
output-format=colorized
reports=no
[MASTER]
load-plugins=pylint_odoo
score=n
[ODOOLINT]
readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
manifest_required_authors=Le Filament
manifest_required_keys=license
manifest_deprecated_keys=description,active
license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
valid_odoo_versions=14.0
[MESSAGES CONTROL]
disable=all
enable=anomalous-backslash-in-string,
api-one-deprecated,
api-one-multi-together,
assignment-from-none,
attribute-deprecated,
class-camelcase,
dangerous-default-value,
dangerous-view-replace-wo-priority,
development-status-allowed,
duplicate-id-csv,
duplicate-key,
duplicate-xml-fields,
duplicate-xml-record-id,
eval-referenced,
eval-used,
incoherent-interpreter-exec-perm,
license-allowed,
manifest-author-string,
manifest-deprecated-key,
manifest-required-author,
manifest-required-key,
manifest-version-format,
method-compute,
method-inverse,
method-required-super,
method-search,
openerp-exception-warning,
pointless-statement,
pointless-string-statement,
print-used,
redundant-keyword-arg,
redundant-modulename-xml,
reimported,
relative-import,
return-in-init,
rst-syntax-error,
sql-injection,
too-few-format-args,
translation-field,
translation-required,
unreachable,
use-vim-comment,
wrong-tabs-instead-of-spaces,
xml-syntax-error
[REPORTS]
msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
output-format=colorized
reports=no
......@@ -15,8 +15,9 @@ 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 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
* Ajout de la fonctionnalité d'imports sur les opérations. Si des documents attachés existent,
le bouton *Intégration des données ENEDIS* permet d'intégrer les données Enedis dans la table
* Ajout de la fonctionnalité d'imports sur les opérations. Si des documents attachés existent
Le bouton *Intégration des données ENEDIS* permet d'intégrer les données Enedis dans la table
Description
......@@ -44,4 +45,3 @@ Maintainer
:target: https://le-filament.com
This module is maintained by Le Filament
{
'name': "ACC - Base",
'summary': "Base des contacts et modèles ACC",
'author': "Le Filament",
'website': "https://www.le-filament.com",
'version': '14.0.1.0.1',
'license': "AGPL-3",
'depends': [
'contacts'
],
'data': [
"name": "ACC - Base",
"summary": "Base des contacts et modèles ACC",
"author": "Le Filament",
"website": "https://www.le-filament.com",
"version": "14.0.1.0.1",
"license": "AGPL-3",
"depends": ["contacts"],
"data": [
"security/ir.model.access.csv",
# datas
# views
'views/res_partner_views.xml',
'views/acc_operation_views.xml',
'views/acc_counter_views.xml',
'views/acc_enedis_cdc_views.xml',
'views/acc_enedis_import_logs_views.xml',
"views/res_partner_views.xml",
"views/acc_operation_views.xml",
"views/acc_counter_views.xml",
"views/acc_enedis_cdc_views.xml",
"views/acc_enedis_import_logs_views.xml",
# views menu
'views/menu_views.xml',
"views/menu_views.xml",
# wizard
],
'qweb': [
"qweb": [
# "static/src/xml/*.xml",
],
'installable': True,
'auto_install': False,
"installable": True,
"auto_install": False,
}
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# 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):
......@@ -13,9 +13,7 @@ class AccCounter(models.Model):
# ------------------------------------------------------
# General Info
name = fields.Char("ID PRM", required=True)
acc_operation_id = fields.Many2one(
"acc.operation",
string="Opération liée")
acc_operation_id = fields.Many2one("acc.operation", string="Opération liée")
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)
street = fields.Char("Rue")
......@@ -25,7 +23,7 @@ class AccCounter(models.Model):
partner_id = fields.Many2one(
comodel_name="res.partner",
string="Personne Physique",
domain="['|', ('is_consumer', '=', True), ('is_producer', '=', True)]"
domain="['|', ('is_consumer', '=', True), ('is_producer', '=', True)]",
)
# Info Soutirage counter
......@@ -42,9 +40,9 @@ class AccCounter(models.Model):
power_instal = fields.Float("Puissance de l'installation (en kW)")
buyer_id = fields.Many2one(
comodel_name='res.partner',
comodel_name="res.partner",
string="Acheteur de surplus",
domain="[('is_buyer_surplus', '=', True)]"
domain="[('is_buyer_surplus', '=', True)]",
)
# ------------------------------------------------------
# SQL Constraints
......@@ -64,7 +62,7 @@ class AccCounter(models.Model):
# ------------------------------------------------------
# Onchange / Constraints
# ------------------------------------------------------
@api.onchange('is_injection', 'is_delivery')
@api.onchange("is_injection", "is_delivery")
def _onchange_prm_type(self):
domain = []
if self.is_injection:
......
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# 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):
_name = 'acc.enedis.cdc'
_description = 'CDC Enedis'
_name = "acc.enedis.cdc"
_description = "CDC Enedis"
# ------------------------------------------------------
# Fields declaration
# ------------------------------------------------------
name = fields.Char("Libellé du fichier")
acc_operation_id = fields.Many2one(
'acc.operation',
"Opération",
required=True,
ondelete="cascade")
acc_counter_id = fields.Many2one('acc.counter', "ID PRM")
comp_data_type = fields.Selection([
('autocons', 'autocons'),
('cons', 'cons'),
('prod', 'prod'),
('surplus', 'surplus'),
('complement', 'complement'),
"acc.operation", "Opération", required=True, ondelete="cascade"
)
acc_counter_id = fields.Many2one("acc.counter", "ID PRM")
comp_data_type = fields.Selection(
[
("autocons", "autocons"),
("cons", "cons"),
("prod", "prod"),
("surplus", "surplus"),
("complement", "complement"),
],
string="Type de donnée calculée"
string="Type de donnée calculée",
)
power = fields.Float("Puissance en W")
date_slot = fields.Datetime("Date par Demi Heure")
......
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# 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):
_name = 'acc.enedis.import.logs'
_description = 'Table de logs'
_name = "acc.enedis.import.logs"
_description = "Table de logs"
# ------------------------------------------------------
# Fields declaration
# ------------------------------------------------------
name = fields.Char("Libellé des données chargées")
acc_operation_id = fields.Many2one('acc.operation', "Opération")
date_import = fields.Datetime(
"Date de l'appel")
acc_operation_id = fields.Many2one("acc.operation", "Opération")
date_import = fields.Datetime("Date de l'appel")
# ------------------------------------------------------
# SQL Constraints
# ------------------------------------------------------
......
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import json
import base64
import pandas as pd
from datetime import datetime, timedelta
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):
_name = 'acc.operation'
_inherit = ['mail.thread', 'image.mixin']
_description = 'Opération'
_name = "acc.operation"
_inherit = ["mail.thread", "image.mixin"]
_description = "Opération"
# ------------------------------------------------------
# Fields declaration
......@@ -25,46 +23,52 @@ class AccOperation(models.Model):
name = fields.Char("ID Convention Enedis", required=True)
description = fields.Char("Description")
pmo_id = fields.Many2one(
comodel_name='res.partner',
comodel_name="res.partner",
string="PMO",
domain="[('is_pmo', '=', True)]",
required=True
required=True,
)
acc_injection_ids = fields.One2many(
comodel_name='acc.counter',
inverse_name='acc_operation_id',
domain=[('is_injection', '=', True)],
comodel_name="acc.counter",
inverse_name="acc_operation_id",
domain=[("is_injection", "=", True)],
string="Points d'injection",
)
acc_delivery_ids = fields.One2many(
comodel_name='acc.counter',
inverse_name='acc_operation_id',
domain=[('is_delivery', '=', True)],
comodel_name="acc.counter",
inverse_name="acc_operation_id",
domain=[("is_delivery", "=", True)],
string="Points de soutirage",
)
acc_enedis_import_logs_ids = fields.One2many(
comodel_name='acc.enedis.import.logs',
inverse_name='acc_operation_id',
comodel_name="acc.enedis.import.logs",
inverse_name="acc_operation_id",
string="Table des logs",
)
acc_enedis_cdc_ids = fields.One2many(
comodel_name='acc.enedis.cdc',
inverse_name='acc_operation_id',
comodel_name="acc.enedis.cdc",
inverse_name="acc_operation_id",
string="Table des courbes",
)
distribution_key = fields.Selection([
('statique', 'Statique'),
('dynamique', 'Dynamique par défaut'),
('dynamique_perso', 'Dynamique personnalisée')
distribution_key = fields.Selection(
[
("statique", "Statique"),
("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(
string="Date d'anniversaire calculée",
compute='_compute_birthday_date',
store=True)
compute="_compute_birthday_date",
store=True,
)
# ------------------------------------------------------
# SQL Constraints
......@@ -77,7 +81,7 @@ class AccOperation(models.Model):
# ------------------------------------------------------
# Computed fields / Search Fields
# ------------------------------------------------------
@api.depends('date_start_contract')
@api.depends("date_start_contract")
def _compute_birthday_date(self):
for operation in self:
if operation.date_start_contract:
......@@ -96,27 +100,27 @@ class AccOperation(models.Model):
# ------------------------------------------------------
def import_enedis_data(self):
for operation in self:
files = self.env['ir.attachment'].search([
('res_model', '=', 'acc.operation'),
('res_id', '=', operation.id)
])
files = self.env["ir.attachment"].search(
[("res_model", "=", "acc.operation"), ("res_id", "=", operation.id)]
)
if not files:
raise UserError(
"Pas de fichiers à intégrer")
raise UserError(_("Pas de fichiers à intégrer"))
else:
for file in files:
data_filename = file.name.split('_')
data_filename = file.name.split("_")
id_pdm = data_filename[0]
counter_id = self.env['acc.counter']
counter_id = self.env["acc.counter"]
if id_pdm != self.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]
file_decode = StringIO(base64.b64decode(file.datas).decode('UTF-8'))
file_decode = StringIO(base64.b64decode(file.datas).decode("UTF-8"))
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=";")
if data_filename[4] == "CDC.csv":
# Create Data for the CDC
......@@ -124,30 +128,36 @@ class AccOperation(models.Model):
# Create 1st slot 0-30min
date_slot = datetime.strptime(row[0], "%d/%m/%Y %H:%M")
# date_slot = row[0]
self.env['acc.enedis.cdc'].create({
'name': file.name,
'acc_operation_id': self.id,
'acc_counter_id': counter_id.id or False,
'comp_data_type': computed_data_type,
'power': row[1],
'date_slot': date_slot,
})
self.env["acc.enedis.cdc"].create(
{
"name": file.name,
"acc_operation_id": self.id,
"acc_counter_id": counter_id.id or False,
"comp_data_type": computed_data_type,
"power": row[1],
"date_slot": date_slot,
}
)
# Create 2nd slot 30-60min
date_slot_30 = date_slot + timedelta(minutes=30)
self.env['acc.enedis.cdc'].create({
'name': file.name,
'acc_operation_id': self.id,
'acc_counter_id': counter_id.id or False,
'comp_data_type': computed_data_type,
'power': row[2],
'date_slot': date_slot_30,
})
self.env["acc.enedis.cdc"].create(
{
"name": file.name,
"acc_operation_id": self.id,
"acc_counter_id": counter_id.id or False,
"comp_data_type": computed_data_type,
"power": row[2],
"date_slot": date_slot_30,
}
)
# Logs information logs
self.env['acc.enedis.import.logs'].create({
'name': file.name,
'acc_operation_id': self.id,
})
self.env["acc.enedis.import.logs"].create(
{
"name": file.name,
"acc_operation_id": self.id,
}
)
# Delete file after creation
file.unlink()
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# 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):
_inherit = 'res.partner'
_inherit = "res.partner"
# ------------------------------------------------------
# Fields declaration
# ------------------------------------------------------
is_pmo = fields.Boolean("Est un PMO")
acc_operation_ids = fields.One2many(
comodel_name='acc.operation',
inverse_name='pmo_id',
comodel_name="acc.operation",
inverse_name="pmo_id",
string="Liste des opérations",
)
is_acc_linked = fields.Boolean("Est un sociétaire/adhérent/actionnaire app")
......@@ -21,16 +21,16 @@ class ResPartner(models.Model):
is_consumer = fields.Boolean("Est un consommateur")
is_buyer_surplus = fields.Boolean("Est un acheteur de surplus")
injection_counter_ids = fields.One2many(
comodel_name='acc.counter',
inverse_name='partner_id',
comodel_name="acc.counter",
inverse_name="partner_id",
string="Liste des points d'injection",
domain="[('is_injection', '=', True)]"
domain="[('is_injection', '=', True)]",
)
delivery_counter_ids = fields.One2many(
comodel_name='acc.counter',
inverse_name='partner_id',
comodel_name="acc.counter",
inverse_name="partner_id",
string="Liste des points d'injection",
domain="[('is_delivery', '=', True)]"
domain="[('is_delivery', '=', True)]",
)
# ------------------------------------------------------
# SQL Constraints
......
......@@ -9,8 +9,16 @@
<search string="Recherche PRMn">
<field name="name" string="PRM" />
<separator />
<filter string="Points d'injection" name="is_injection" domain="[('is_injection', '=', True)]"/>
<filter string="Points de soutirage" name="is_delivery" domain="[('is_delivery', '=', True)]"/>
<filter
string="Points d'injection"
name="is_injection"
domain="[('is_injection', '=', True)]"
/>
<filter
string="Points de soutirage"
name="is_delivery"
domain="[('is_delivery', '=', True)]"
/>
<separator />
</search>
</field>
......@@ -41,7 +49,9 @@
<group>
<field name="is_injection" />
</group>
<group attrs="{'invisible': [('is_injection', '!=', True)]}">
<group
attrs="{'invisible': [('is_injection', '!=', True)]}"
>
<field name="power_instal" />
<field name="prod_annual" />
</group>
......
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