Skip to content
Extraits de code Groupes Projets

Comparer les révisions

Les modifications sont affichées comme si la révision source était fusionnée avec la révision cible. En savoir plus sur la comparaison des révisions.

Source

Sélectionner le projet cible
No results found
Sélectionner une révision Git
  • 12.0
  • 13.0
  • 14.0
3 résultats

Cible

Sélectionner le projet cible
  • lefilament/cgscop/cgscop_adhesion
  • hsilvant/cgscop_adhesion
2 résultats
Sélectionner une révision Git
  • 12-RV-Ajout-champs
  • 12-RV-Statut-facturation-idf
  • 12.0
  • 12.0-lm-00
  • 14-RV-20250512
  • 14-rv-20250312
6 résultats
Afficher les modifications
Validations sur la source (176)
Affichage de avec 1453 ajouts et 29 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$"
- id: en-po-files
name: en.po files cannot exist
entry: found a en.po file
language: fail
files: '[a-zA-Z0-9_]*/i18n/en\.po$'
- 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: 22.3.0
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.12.0
hooks:
- id: isort
name: isort except __init__.py
args:
- --settings=.
exclude: /__init__\.py$
- repo: https://github.com/PyCQA/flake8
rev: 3.8.3
hooks:
- id: flake8
name: flake8
additional_dependencies: ["flake8-bugbear==20.1.4"]
- repo: https://github.com/OCA/pylint-odoo
rev: 7.0.2
hooks:
- id: pylint_odoo
name: pylint with optional checks
args:
- --rcfile=.pylintrc
- --exit-zero
verbose: true
- id: pylint_odoo
args:
- --rcfile=.pylintrc-mandatory
# 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-manifest-dependency,
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
......@@ -14,6 +14,14 @@ Modifie le module Contact:
Credits
=======
Funders
------------
The development of this module has been financially supported by:
Confédération Générale des SCOP (https://www.les-scop.coop)
Contributors
------------
......
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
# © 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models
\ No newline at end of file
from . import models, wizard
{
"name": "CG SCOP - Processus d'adhésion",
"summary": "CG SCOP - Processus d'adhésion",
"version": "12.0.1.0.1",
"development_status": "Beta",
"version": "14.0.1.0.0",
"development_status": "Production/Stable",
"author": "Le Filament",
"maintainers": ["remi-filament"],
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": [
"account",
"cgscop_partner",
"cgscop_cotisation_cg",
"cgscop_extranet",
"cgscop_liste_ministere",
],
"data": [
"security/ir.model.access.csv",
# datas
"datas/ir_sequence_data.xml",
"datas/mail_data.xml",
"datas/mail_message_subtype.xml",
"datas/scop_adhesion_file_data.xml",
# wizard
"wizard/scop_compulsory_fields_suivi_wizard.xml",
"wizard/scop_membership_liasse_wizard.xml",
"wizard/scop_membership_staff_wizard.xml",
"wizard/scop_membership_submit_wizard.xml",
"wizard/scop_registration_wizard.xml",
# views
"views/assets.xml",
"views/res_partner.xml",
]
"views/scop_adhesion_file.xml",
# report
"report/report_scop_adhesion.xml",
],
}
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data noupdate="1">
<record id="seq_scop_num_adherent" model="ir.sequence">
<field name="name">Numéro Adhérent Séquence</field>
<field name="code">scop.membership.period</field>
<field name="padding">5</field>
<field name="implementation">no_gap</field>
<field name="company_id" ref="base.main_company" />
<field name="number_increment">1</field>
</record>
</data>
</odoo>
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data noupdate="1">
<!-- Template and notification section -->
<record id="email_template_adhesion" model="mail.template">
<field name="name">CG Scop - Mail adhésion CG</field>
<field name="model_id" ref="model_res_partner" />
<field name="email_from">administratif.cg@scop.coop</field>
<field name="partner_to">${object.get_recipients_adhesion()}</field>
<field name="reply_to">administratif.cg@scop.coop</field>
<field name="subject">Adhésion CG Scop</field>
<field name="body_html" type="html">
<div style="margin: 0px; padding: 0px;">
<p style="margin: 0px; padding: 0px; font-size: 13px;">
<p>Chère Coopératrice, Cher Coopérateur,</p>
<p>&#160;</p>
<p
>Merci pour votre adhésion ! Vous trouverez sur votre espace personnel votre courrier d'adhésion.</p>
<p
>Si vous rencontrez des problèmes d'accès ou si vous ne savez pas comment vous connectez, n'hésitez pas à vous rapprocher de votre délégué qui pourra vous aider.</p>
<p>&#160;</p>
<p
>Nous vous prions d'agréer, Chère Coopératrice, Cher Coopérateur, nos sentiments les meilleurs.</p>
<p>&#160;</p>
<p>Pour la CG Scop,</p>
<p>&#160;</p>
<p>
Amélie Rafael <br />
Directrice administrative et financière
</p>
</p>
</div>
</field>
<field name="lang">${object.lang}</field>
<field name="auto_delete" eval="False" />
</record>
</data>
</odoo>
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data noupdate="1">
<record id="mail_message_subtype_adhesion" model="mail.message.subtype">
<field name="name">Mail validation adhésion</field>
<field name="res_model">res.partner</field>
<field
name="description"
>Mail envoyé à la coop pour valider l'adhésion au mouvement</field>
<field name="internal">True</field>
<field name="hidden">True</field>
</record>
</data>
</odoo>
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data noupdate="1">
<!-- Coop 47-->
<record id="coop_47_decla_adhesion" model="scop.adhesion.file">
<field name="name">Coop 47 - Déclaration d'adhésion</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<record id="coop_47_mandat" model="scop.adhesion.file">
<field name="name">Coop 47 - Mandat de prélèvement SEPA</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<record id="coop_47_rib" model="scop.adhesion.file">
<field name="name">Coop 47 - RIB (IBAN)</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<record id="coop_47_bordereau" model="scop.adhesion.file">
<field name="name">Coop 47 - Bordereau de calcul des cotisations</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<record id="coop_47_demande_inscri" model="scop.adhesion.file">
<field name="name">Coop 47 - Lettre de demande d'inscritption</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<record id="coop_47_fiche_renseignements" model="scop.adhesion.file">
<field name="name">Coop 47 - Fiche de renseignements</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<record id="coop_47_paiement" model="scop.adhesion.file">
<field name="name">Coop 47 - Chèque ou récépissé ordre de virement</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<record id="coop_47_statuts" model="scop.adhesion.file">
<field name="name">Coop 47 - Statuts (en 2 exemplaires)</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<record id="coop_47_pub" model="scop.adhesion.file">
<field name="name">Coop 47 - Annonce publicité légale</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<record id="coop_47_kbis" model="scop.adhesion.file">
<field name="name">Coop 47 - Extrait Kbis</field>
<field name="coop_type_id" ref="cgscop_partner.form_coop47" />
<field name="is_compulsory" eval="True" />
</record>
<!-- Lamaneur-->
<record id="lamaneur_decla_adhesion" model="scop.adhesion.file">
<field name="name">Lamaneur - Déclaration d'adhésion</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<record id="lamaneur_mandat" model="scop.adhesion.file">
<field name="name">Lamaneur - Mandat de prélèvement SEPA</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<record id="lamaneur_rib" model="scop.adhesion.file">
<field name="name">Lamaneur - RIB (IBAN)</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<record id="lamaneur_bordereau" model="scop.adhesion.file">
<field name="name">Lamaneur - Bordereau de calcul des cotisations</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<record id="lamaneur_demande_inscri" model="scop.adhesion.file">
<field name="name">Lamaneur - Lettre de demande d'inscritption</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<record id="lamaneur_fiche_renseignements" model="scop.adhesion.file">
<field name="name">Lamaneur - Fiche de renseignements</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<record id="lamaneur_paiement" model="scop.adhesion.file">
<field name="name">Lamaneur - Chèque ou récépissé ordre de virement</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<record id="lamaneur_statuts" model="scop.adhesion.file">
<field name="name">Lamaneur - Statuts (en 2 exemplaires)</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<record id="lamaneur_pub" model="scop.adhesion.file">
<field name="name">Lamaneur - Annonce publicité légale</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<record id="lamaneur_kbis" model="scop.adhesion.file">
<field name="name">Lamaneur - Extrait Kbis</field>
<field name="coop_type_id" ref="cgscop_partner.form_lamaneur" />
<field name="is_compulsory" eval="True" />
</record>
<!-- SCIC-->
<record id="scic_decla_adhesion" model="scop.adhesion.file">
<field name="name">SCIC - Déclaration d'adhésion</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scic_mandat" model="scop.adhesion.file">
<field name="name">SCIC - Mandat de prélèvement SEPA</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scic_rib" model="scop.adhesion.file">
<field name="name">SCIC - RIB (IBAN)</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scic_bordereau" model="scop.adhesion.file">
<field name="name">SCIC - Bordereau de calcul des cotisations</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scic_demande_inscri" model="scop.adhesion.file">
<field name="name">SCIC - Lettre de demande d'inscritption</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scic_fiche_renseignements" model="scop.adhesion.file">
<field name="name">SCIC - Fiche de renseignements</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scic_paiement" model="scop.adhesion.file">
<field name="name">SCIC - Chèque ou récépissé ordre de virement</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scic_statuts" model="scop.adhesion.file">
<field name="name">SCIC - Statuts (en 2 exemplaires)</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scic_pub" model="scop.adhesion.file">
<field name="name">SCIC - Annonce publicité légale</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scic_kbis" model="scop.adhesion.file">
<field name="name">SCIC - Extrait Kbis</field>
<field name="coop_type_id" ref="cgscop_partner.form_scic" />
<field name="is_compulsory" eval="True" />
</record>
<!-- SCOP-->
<record id="scop_decla_adhesion" model="scop.adhesion.file">
<field name="name">SCOP - Déclaration d'adhésion</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scop_mandat" model="scop.adhesion.file">
<field name="name">SCOP - Mandat de prélèvement SEPA</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scop_rib" model="scop.adhesion.file">
<field name="name">SCOP - RIB (IBAN)</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scop_bordereau" model="scop.adhesion.file">
<field name="name">SCOP - Bordereau de calcul des cotisations</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scop_demande_inscri" model="scop.adhesion.file">
<field name="name">SCOP - Lettre de demande d'inscritption</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scop_fiche_renseignements" model="scop.adhesion.file">
<field name="name">SCOP - Fiche de renseignements</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scop_paiement" model="scop.adhesion.file">
<field name="name">SCOP - Chèque ou récépissé ordre de virement</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scop_statuts" model="scop.adhesion.file">
<field name="name">SCOP - Statuts (en 2 exemplaires)</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scop_pub" model="scop.adhesion.file">
<field name="name">SCOP - Annonce publicité légale</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="scop_kbis" model="scop.adhesion.file">
<field name="name">SCOP - Extrait Kbis</field>
<field name="coop_type_id" ref="cgscop_partner.form_scop" />
<field name="is_compulsory" eval="True" />
</record>
<!-- Unionscop -->
<record id="unionscop_decla_adhesion" model="scop.adhesion.file">
<field name="name">Unionscop - Déclaration d'adhésion</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="unionscop_mandat" model="scop.adhesion.file">
<field name="name">Unionscop - Mandat de prélèvement SEPA</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="unionscop_rib" model="scop.adhesion.file">
<field name="name">Unionscop - RIB (IBAN)</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="unionscop_bordereau" model="scop.adhesion.file">
<field name="name">Unionscop - Bordereau de calcul des cotisations</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="unionscop_demande_inscri" model="scop.adhesion.file">
<field name="name">Unionscop - Lettre de demande d'inscritption</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="unionscop_fiche_renseignements" model="scop.adhesion.file">
<field name="name">Unionscop - Fiche de renseignements</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="unionscop_paiement" model="scop.adhesion.file">
<field name="name">Unionscop - Chèque ou récépissé ordre de virement</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="unionscop_statuts" model="scop.adhesion.file">
<field name="name">Unionscop - Statuts (en 2 exemplaires)</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="unionscop_pub" model="scop.adhesion.file">
<field name="name">Unionscop - Annonce publicité légale</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
<record id="unionscop_kbis" model="scop.adhesion.file">
<field name="name">Unionscop - Extrait Kbis</field>
<field name="coop_type_id" ref="cgscop_partner.form_unionscop" />
<field name="is_compulsory" eval="True" />
</record>
</data>
</odoo>
......@@ -2,3 +2,6 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import res_partner
from . import scop_adhesion_file
from . import scop_liasse_fiscale
from . import scop_liste_ministere
# © 2019 Le Filament (<http://www.le-filament.com>)
# © 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models, fields
from odoo import _, api, fields, models
from odoo.exceptions import UserError, ValidationError
class ScopPartner(models.Model):
_inherit = "res.partner"
# Processus d'adhésion
project_number = fields.Char("N° Projet")
percent_realisation = fields.Selection(
[(0, 0),
(20, 20),
(40, 40),
(60, 60),
(80, 80),
(100, 100)],
string='Probabilité de réalisation')
[
("0", "0"),
("20", "20"),
("40", "40"),
("60", "60"),
("80", "80"),
("100", "100"),
],
string="Probabilité de réalisation",
)
date_realisation = fields.Date("Date prévue de réalisation")
prescriber_canal_id = fields.Many2one(
'res.partner.prescriber.canal',
string='Canal de Prescription',
on_delete='restrict')
"res.partner.prescriber.canal",
string="Canal de Prescription",
ondelete="restrict",
)
project_federation = fields.Many2one(
comodel_name="res.partner.federation",
string="Fédération",
ondelete="restrict",
tracking=True,
)
date_first_rdv = fields.Date("Date du 1er rdv")
year_project = fields.Char("Année du projet", compute="_compute_year_project")
is_first_rdv_infocoll = fields.Boolean("Réunion d'info. collective")
date_send_guide = fields.Date("Date d’envoi du guide de faisabilité")
feasibility_study = fields.Boolean("Etude de faisabilité signée")
amount_feasibility_study = fields.Integer(
"Montant de l’étude de faisabilité")
date_abort = fields.Date("Date d'abandon")
abort_comments = fields.Text("Commentaires abandon projet")
staff_existing = fields.Integer("Effectif connu")
staff_planned = fields.Integer("Effectif prévu")
ca_previsionnel = fields.Integer("CA Prévisionnel")
adhesion_comments = fields.Text("Commentaires Adhésion")
feasibility_study = fields.Boolean("Etude de faisabilité signée / validée")
amount_feasibility_study = fields.Integer("Montant de l’étude de faisabilité")
date_prediag = fields.Date("Date de pré-diagnostic")
date_convention = fields.Date("Date de signature de la convention")
amount_convention = fields.Integer("Montant de la convention")
file_full = fields.Boolean("Dossier d’adhésion complet")
date_transmission_cg = fields.Date(
"Date de transmission du dossier à la CG")
date_transmission_cg = fields.Date("Date de transmission du dossier à la CG")
date_bureau_validation = fields.Date("Date du bureau de validation")
# Dossier EU
# Dossier UE
file_fse_open = fields.Boolean("Dossier FSE ouvert Oui/Non")
is_id_card = fields.Boolean("Carte d'identité reçue")
date_return_file = fields.Date("Date de retour du dossier")
fes_full = fields.Boolean("FSE Complet")
fse_full = fields.Boolean("FSE Complet")
recipient_file_fse = fields.Many2one(
'res.partner',
string="Destinataire du dossier FSE")
"res.partner", string="Destinataire du dossier FSE"
)
liasse_membership_id = fields.Many2one(
comodel_name="scop.liasse.fiscale", string="Liasse fiscale adhésion"
)
# Temps estimé/Réalisé
estimated_time = fields.Float("Durée estimée")
invoiced_creation = fields.Float("Durée facturée (création)")
invoiced_followup = fields.Float("Durée facturée (suivi)")
realized_time = fields.Float(
string="Durée réelle",
compute="_compute_real_time",
)
realized_creation = fields.Float(
string="Durée réelle (création)",
compute="_compute_real_time",
)
realized_followup = fields.Float(
string="Durée réelle (suivi)",
compute="_compute_real_time",
)
is_estimated_time_ok = fields.Boolean(
string="Estimation ok",
compute="_compute_real_time",
)
# Changement de statuts
list_logs = fields.Text("Liste des erreurs")
# ------------------------------------------------------
# Compute function
# ------------------------------------------------------
def _compute_year_project(self):
for partner in self:
partner.year_project = None
if partner.date_first_rdv:
partner.year_project = str(partner.date_first_rdv.year)
@api.depends("estimated_time")
def _compute_real_time(self):
"""
Champs calculés temps réels
"""
for rec in self:
# Liste des lignes de temps pour ce partner
ldts = self.env["account.analytic.line"].sudo().search(
[
("partner_id", "=", rec.id),
]
)
rec.realized_time = 0
rec.realized_creation = 0
rec.realized_followup = 0
for ldt in ldts:
# On totalise les heures de développement
if (ldt.project_id.cgscop_timesheet_code_id != False and
ldt.project_id.cgscop_timesheet_code_id.domain == 'D'):
rec.realized_time = rec.realized_time + ldt.unit_amount
# On totalise les heures facturés
if ldt.project_id.creation_invoiced == True:
if (ldt.project_id.cgscop_timesheet_code_id != False and
ldt.project_id.cgscop_timesheet_code_id.domain == 'A'):
rec.realized_followup = rec.realized_followup + ldt.unit_amount
if (ldt.project_id.cgscop_timesheet_code_id != False and
ldt.project_id.cgscop_timesheet_code_id.domain == 'D'):
rec.realized_creation = rec.realized_creation + ldt.unit_amount
# On ajoute les heures de suivi facturées au titre du dev
rec.realized_time = rec.realized_time + rec.realized_followup
rec.is_estimated_time_ok = rec.realized_time <= rec.estimated_time
# ------------------------------------------------------
# Onchange function
# ------------------------------------------------------
@api.onchange("project_status")
def _onchange_project_status(self):
if self.project_status != "5_abandonne":
self.date_abort = None
# ------------------------------------------------------
# Actions / Buttons
# ------------------------------------------------------
def fill_membership_staff(self):
self.ensure_one()
staff_id = self.env["scop.partner.staff"].search(
[
("partner_id", "=", self.id),
("type_entry", "=", "membership"),
(
"effective_date",
">",
fields.Date.subtract(fields.Date.today(), years=1),
),
],
limit=1,
)
wizard = self.env["scop.membership.staff.wizard"].create(
{
"partner_id": self.id,
"staff_id": staff_id.id if staff_id else None,
"effective_date": fields.Date.today()
if not staff_id
else staff_id.effective_date,
}
)
return {
"name": "Effectifs à l'adhésion",
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "scop.membership.staff.wizard",
"res_id": wizard.id,
"target": "new",
}
def fill_membership_liasse(self):
self.ensure_one()
wizard = self.env["scop.membership.liasse.wizard"].create(
{
"partner_id": self.id,
"liasse_id": self.liasse_membership_id.id,
}
)
return {
"name": "Données financières",
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "scop.membership.liasse.wizard",
"res_id": wizard.id,
"target": "new",
}
def set_registration(self):
self.ensure_one()
wizard = self.env["scop.registration.wizard"].create(
{
"partner_id": self.id,
}
)
return {
"name": "Immatriculation",
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "scop.registration.wizard",
"res_id": wizard.id,
"target": "new",
}
def scop_cancel_membership(self):
for partner in self:
partner.update({"membership_status": "not_member"})
# ------------------------------------------------------
# Business methods
# ------------------------------------------------------
def create_num_adherent(self):
"""
Generate new num adherent with sequence
:return:
"""
self.ensure_one()
num = self.env["ir.sequence"].next_by_code("scop.membership.period")
self.write({"member_number_int": num})
return num
def create_period_adhesion_cg(self, num_adherent):
"""
Create new period adhesion for type CG
:param num_adherent:
:return:
"""
self.ensure_one()
type_id = self.env.ref("cgscop_partner.membership_type_1")
self.create_period_adhesion(type_id, num_adherent)
return True
def create_period_adhesion_fede(self, num_adherent):
"""
Create new period adhesion for type fédération if naf is linked to fede
:param num_adherent:
:return:
"""
self.ensure_one()
fede = self.naf_id.federation_id
fede_com = self.env.ref("cgscop_partner.COM")
fede_indus = self.env.ref("cgscop_partner.IND")
fede_btp = self.env.ref("cgscop_partner.BTP")
if fede == fede_com:
type_id = self.env.ref("cgscop_partner.membership_type_2")
elif fede == fede_indus:
type_id = self.env.ref("cgscop_partner.membership_type_3")
elif fede == fede_btp:
type_id = self.env.ref("cgscop_partner.membership_type_4")
else:
type_id = None
if type_id:
self.create_period_adhesion(type_id, num_adherent)
return True
else:
return False
def create_period_adhesion(self, type_id, number):
"""
Generic function to create period adhesion with type and number
:param type_id:
:param number:
:return:
"""
date = self.date_bureau_validation or fields.Date.today()
if self.env["scop.membership.period"].search(
[
("partner_id", "=", self.id),
("end", "=", False),
("type_id", "=", type_id.id),
],
limit=1,
):
raise ValidationError(_("Une période d'adhésion existe déjà pour ce type"))
else:
self.env["scop.membership.period"].create(
{
"partner_id": self.id,
"type_id": type_id.id,
"start": date,
"number": number,
}
)
# ------------------------------------------------------
# Override parent / Change of status
# ------------------------------------------------------
def scop_sumbit_cg(self):
"""
Ouvre le wizard
"""
wizard = self.env["scop.membership.submit.wizard"].create(
{
"partner_id": self.id,
"list_logs": self.list_logs,
}
)
return {
"name": "Confirmation de l'adhésion",
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "scop.membership.submit.wizard",
"res_id": wizard.id,
"target": "new",
}
def scop_send_to_cg(self):
"""
Modifie le statut de la coopérative pour transmission du dossier à la CG
- positionner la date_transmission_cg avec la date du jour
@return : True
"""
# Check Staff
staff_line = self.get_last_membership_staff()
coop47 = self.env.ref("cgscop_partner.form_coop47")
scic = self.env.ref("cgscop_partner.form_scic")
if (
(not staff_line or staff_line.staff_count < 1)
and self.cooperative_form_id not in [coop47, scic]
):
raise UserError(_("Les effectifs à l'adhésion ne sont pas renseignés."))
# Check financial datas
if not self.liasse_membership_id:
raise UserError(
_(
"Il est nécessaire de renseigner les données financières pour valider"
)
)
if self.liasse_membership_id.check_compulsory_fields_lf():
raise UserError(_("Les données financières ne peuvent pas être nulles."))
self.update(
{
"membership_status": "soumis_cg",
"date_transmission_cg": fields.Date.today(),
"list_logs": False,
}
)
def scop_abandonne(self):
"""
Hérite la fonction d'abandon pour déterminer la date
@return : True
"""
super(ScopPartner, self).scop_abandonne()
self.date_abort = fields.Date.today()
return True
def scop_suivi_adhesion(self):
"""
Shows validation wizard
"""
wizard = self.env["scop.compulsory.fields.suivi.wizard"].create(
{
"partner_id": self.id,
"list_logs": self.list_logs,
"with_adhesion": self.env.context.get("default_with_adhesion", False),
}
)
return {
"name": "Confirmation des champs obligatoires",
"type": "ir.actions.act_window",
"view_mode": "form",
"res_model": "scop.compulsory.fields.suivi.wizard",
"res_id": wizard.id,
"target": "new",
}
def scop_valid_cg_button(self):
self.ensure_one()
self.scop_valid_cg()
def scop_valid_cg(self):
"""
Inherit function to :
- create period adhesion CG
- create period adhesion Fédé if needed
- set liasse_fiscale_adhesion as qualified
"""
# Create period adhésions with num adherent
num_adherent = self.member_number_int or self.create_num_adherent()
self.create_period_adhesion_cg(num_adherent)
self.create_period_adhesion_fede(num_adherent)
# TODO : check pour fede CAE si coop is CAE ?
self.update(
{
"membership_status": "member",
"extranet_update_company": True,
"extranet_service_access": True,
}
)
return True
def get_last_membership_staff(self):
self.ensure_one()
staff_line = self.staff_ids.filtered(
lambda s: s.type_entry == "membership"
).sorted(key="effective_date", reverse=True)
return staff_line[0] if staff_line else False
class ResPartnerPrescriberCanal(models.Model):
_name = "res.partner.prescriber.canal"
_description = "Canal de Prescription"
name = fields.Char('Canal de Prescription')
name = fields.Char("Canal de Prescription")
# © 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
class ScopAdhesionFiles(models.Model):
_name = "scop.adhesion.file"
_description = "Documents pour adhésion des coops"
name = fields.Char("Nom du fichier", required=True)
coop_type_id = fields.Many2one(
comodel_name="res.partner.cooperative.form",
string="Type de coopérative",
required=True,
)
is_compulsory = fields.Boolean("Obligatoire")
type_process = fields.Selection(
[("project", "Projet de création"), ("adhesion", "Processus d'adhésion")],
string="Type de process",
)
# © 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models
class ScopAdhesionLiasseFiscale(models.Model):
_inherit = "scop.liasse.fiscale"
# ------------------------------------------------------
# Validation de la saisie LF avant chgt statut
# ------------------------------------------------------
def check_compulsory_fields_lf(self):
"""
Check if LF is correctly filled :
- CA sens CGSCOP
- CA sens CGSCOP-Subv
- VABDF sens CGSCOP
- VABDF sens CGSCOP-Subv
:return: errors if exist
"""
if self.L2052_FL == 0 and self.av_cg == 0 and self.av_cgsubv == 0:
return (
"<li> Les données financières ne sont pas renseignées correctement "
"(CA ou VA obligatoire)</li>"
)
else:
return False