diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..bfd7ac53df9f103f6dc8853738c63fd364445fde --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +# 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 diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000000000000000000000000000000000000..88f2881b4c128fc4762338a8f420272c44cc29ef --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,180 @@ +env: + browser: true + +# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449 +parserOptions: + ecmaVersion: 2017 + +# Globals available in Odoo that shouldn't produce errorings +globals: + _: readonly + $: readonly + fuzzy: readonly + jQuery: readonly + moment: readonly + odoo: readonly + openerp: readonly + Promise: 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 diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000000000000000000000000000000000000..e397e8ed4e3e7f7fe7785dd391bb80aa6d85575e --- /dev/null +++ b/.flake8 @@ -0,0 +1,12 @@ +[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 diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index 75bb2042901930f807a588241612a29dd75e34d5..818770fb1bdc0a144e924c9a5940f0b035df8a0d --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,75 @@ -.* -*.pyc -!.gitignore +# 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/ diff --git a/.isort.cfg b/.isort.cfg new file mode 100644 index 0000000000000000000000000000000000000000..0ec187efd1bf802844749f508cda0c8f138970f9 --- /dev/null +++ b/.isort.cfg @@ -0,0 +1,13 @@ +[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 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cb8b5ef27a4408c9767c962d0f4e70fb99715061 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,123 @@ +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/| + # 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 + - 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 diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 0000000000000000000000000000000000000000..5b6d4b361ace92f3877993bf2848fac190d8fab6 --- /dev/null +++ b/.prettierrc.yml @@ -0,0 +1,8 @@ +# 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" diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000000000000000000000000000000000000..c3d0a5c839baeee21312961c56158de4936fdc91 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,88 @@ +[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, + # missing-readme, + 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 diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory new file mode 100644 index 0000000000000000000000000000000000000000..43ea23947166ff8080219007cfae43ec54a28f8e --- /dev/null +++ b/.pylintrc-mandatory @@ -0,0 +1,64 @@ +[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 diff --git a/README.rst b/README.rst index c9e73ffe9a1b3b3f77def0adb547d4b875836660..924c591ee795e45f2a0cac5efe4503e20da0d02b 100644 --- a/README.rst +++ b/README.rst @@ -49,4 +49,4 @@ Maintainer :alt: Le Filament :target: https://le-filament.com -This module is maintained by Le Filament \ No newline at end of file +This module is maintained by Le Filament diff --git a/__init__.py b/__init__.py old mode 100755 new mode 100644 index 4b52b9f7c78b1df9cb8f1c9a812dff31198cab08..35d5ce45dc3341050801b85b7330714a0c8e7863 --- a/__init__.py +++ b/__init__.py @@ -1,6 +1,4 @@ # © 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) -from . import controllers -from . import models -from . import wizard +from . import controllers, models, wizard diff --git a/__manifest__.py b/__manifest__.py old mode 100755 new mode 100644 index 39ab2aa48eec5f9df47cf1a587d3510223ac1431..f8470b3df7b1f80b37a22bda3b916bed395e1975 --- a/__manifest__.py +++ b/__manifest__.py @@ -1,17 +1,17 @@ # Copyright 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Export Journal Tool', - 'summary': 'Export des journaux', - 'author': 'LE FILAMENT', - 'version': '12.0.0.0', - 'license': "AGPL-3", - 'depends': ['account'], - 'qweb': [], - 'data': [ - 'security/ir.model.access.csv', - 'datas/export_journal_datas.xml', - 'views/export_journal_type.xml', - 'wizard/export_journal_wizard_view.xml', + "name": "Export Journal Tool", + "summary": "Export des journaux", + "author": "Le Filament", + "version": "14.0.0.0.0", + "license": "AGPL-3", + "depends": ["account"], + "qweb": [], + "data": [ + "security/ir.model.access.csv", + "datas/export_journal_datas.xml", + "views/export_journal_type.xml", + "wizard/export_journal_wizard_view.xml", ], } diff --git a/controllers/__init__.py b/controllers/__init__.py old mode 100755 new mode 100644 diff --git a/controllers/main.py b/controllers/main.py old mode 100755 new mode 100644 index a42831be8b07e8aef6fe7da4577859236e09a610..6259c389eb76a8062c154471afd3ee334f465cbe --- a/controllers/main.py +++ b/controllers/main.py @@ -1,64 +1,66 @@ # Copyright 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3 or later (http://www.gnu.org/licenses/agpl.html). -import re import csv from datetime import date, datetime from io import BytesIO, StringIO from odoo import http from odoo.http import request -from odoo.addons.web.controllers.main import serialize_exception -from odoo.addons.web.controllers.main import content_disposition from odoo.tools.misc import xlwt +from odoo.addons.web.controllers.main import content_disposition, serialize_exception + class JournalDatasExport(http.Controller): # ------------------------------------------------------ # Routes # ------------------------------------------------------ - @http.route('/web/export_journal/', type='http', auth="user") + @http.route("/web/export_journal/", type="http", auth="user") @serialize_exception def export_journal( - self, format, export, type, date_start, date_end, **kwargs): + self, export_format, export, export_type, date_start, date_end, **kwargs + ): """ Sélectionne les account.move.line correspondants aux journaux et à la plage de date définis Crée le lignes de valeurs - :param format: xls/csv + :param export_format: xls/csv :param export: id export.journal.type + :param export_type: empty (not already exported lines) / all :param date_start: date :param date_end: date :return: file """ - export_id = request.env['export.journal.type'].browse(int(export)) + export_id = request.env["export.journal.type"].browse(int(export)) domain = [ - ('date', '>=', date_start), - ('date', '<=', date_end), - ('journal_id', 'in', export_id.journal_ids.ids), - ('company_id', '=', export_id.company_id.id), + ("date", ">=", date_start), + ("date", "<=", date_end), + ("journal_id", "in", export_id.journal_ids.ids), + ("company_id", "=", export_id.company_id.id), ] - if type == 'empty': - domain += [('date_export', '=', False)] - export_line_ids = request.env['account.move.line'].search(domain) + if export_type == "empty": + domain += [("date_export", "=", False)] + export_line_ids = request.env["account.move.line"].search(domain) lines_to_export = [] for line in export_line_ids: row = [] for field in export_id.fields_ids: - value = eval(field.field_name) + value = field["field_name"] row.append(value) lines_to_export.append(row) - line.write({ - 'date_export': datetime.now() - }) + line.write({"date_export": datetime.now()}) - filename_ = (export_id.company_id.name.title().replace(' ', '') - + date_start.replace('-', '') - + '_' + date_end.replace('-', '')) + filename_ = ( + export_id.company_id.name.title().replace(" ", "") + + date_start.replace("-", "") + + "_" + + date_end.replace("-", "") + ) - if format == 'csv': + if export_format == "csv": return self.export_csv(export_id, lines_to_export, filename_) - elif format == 'xls': + elif export_format == "xls": return self.export_xls(export_id, lines_to_export, filename_) # ------------------------------------------------------ @@ -67,43 +69,45 @@ class JournalDatasExport(http.Controller): def export_csv(self, export_id, lines_to_export, filename_): fp = StringIO() export_file = csv.writer( - fp, - delimiter=export_id.delimiter, - quoting=csv.QUOTE_ALL) + fp, delimiter=export_id.delimiter, quoting=csv.QUOTE_ALL + ) # Add header line if export_id.is_header: row = [] - for head in export_id.fields_ids.mapped('name'): + for head in export_id.fields_ids.mapped("name"): row.append(head) export_file.writerow(row) for line in lines_to_export: # Format date value line_values = [ - value if not isinstance(value, date) else value.strftime( - export_id.csv_datestyle) for value in line] + value + if not isinstance(value, date) + else value.strftime(export_id.csv_datestyle) + for value in line + ] export_file.writerow(line_values) fp.seek(0) data = fp.read() fp.close() - filename = filename_ + '.csv' + filename = filename_ + ".csv" csvhttpheaders = [ - ('Content-Type', 'text/csv;charset=utf8'), - ('Content-Disposition', content_disposition(filename)), + ("Content-Type", "text/csv;charset=utf8"), + ("Content-Disposition", content_disposition(filename)), ] return request.make_response(data, headers=csvhttpheaders) def export_xls(self, export_id, lines_to_export, filename_): workbook = xlwt.Workbook() worksheet = workbook.add_sheet(filename_) - base_style = xlwt.easyxf('align: wrap yes') + base_style = xlwt.easyxf("align: wrap yes") date_style = xlwt.XFStyle() date_style.num_format_str = export_id.xls_datestyle if export_id.is_header: - for i, fieldname in enumerate(export_id.fields_ids.mapped('name')): + for i, fieldname in enumerate(export_id.fields_ids.mapped("name")): worksheet.write(0, i, fieldname) worksheet.col(i).width = 4000 # around 220 pixels @@ -118,9 +122,9 @@ class JournalDatasExport(http.Controller): fp.seek(0) data = fp.read() fp.close() - filename = filename_ + '.xls' + filename = filename_ + ".xls" xlshttpheaders = [ - ('Content-Type', 'text/csv;charset=utf8'), - ('Content-Disposition', content_disposition(filename)), + ("Content-Type", "text/csv;charset=utf8"), + ("Content-Disposition", content_disposition(filename)), ] return request.make_response(data, headers=xlshttpheaders) diff --git a/datas/export_journal_datas.xml b/datas/export_journal_datas.xml old mode 100755 new mode 100644 index 8147b7dd66d0df287494648a622648126a310078..92d1f2bf2ff42bbe091cd208f06a33364ce3f9e8 --- a/datas/export_journal_datas.xml +++ b/datas/export_journal_datas.xml @@ -1,4 +1,4 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <odoo> <data noupdate="1"> <!-- Journal Type --> @@ -6,21 +6,21 @@ <!-- IBIZA --> <record id="ibiza_export_ventes" model="export.journal.type"> <field name="name">Ibiza Ventes</field> - <field name="active" eval="True"/> + <field name="active" eval="True" /> <field name="sequence">1</field> - <field name="is_header" eval="False"/> - <field name="journal_ids" eval="[(6, 0, [1])]"></field> - <field name="company_id" eval="1"/> + <field name="is_header" eval="False" /> + <field name="journal_ids" eval="[(6, 0, [1])]" /> + <field name="company_id" eval="1" /> <field name="csv_datestyle">%d/%m/%y</field> <field name="xls_datestyle">dd/mm/yy</field> </record> <record id="ibiza_export_achats" model="export.journal.type"> <field name="name">Ibiza Achats</field> - <field name="active" eval="True"/> + <field name="active" eval="True" /> <field name="sequence">2</field> - <field name="is_header" eval="False"/> - <field name="journal_ids" eval="[(6, 0, [2])]"></field> - <field name="company_id" eval="1"/> + <field name="is_header" eval="False" /> + <field name="journal_ids" eval="[(6, 0, [2])]" /> + <field name="company_id" eval="1" /> <field name="csv_datestyle">%d/%m/%y</field> <field name="xls_datestyle">dd/mm/yy</field> </record> @@ -28,21 +28,21 @@ <!-- CEGID --> <record id="cegid_export_ventes" model="export.journal.type"> <field name="name">Cegid Ventes</field> - <field name="active" eval="True"/> + <field name="active" eval="True" /> <field name="sequence">4</field> - <field name="is_header" eval="True"/> - <field name="journal_ids" eval="[(6, 0, [1])]"></field> - <field name="company_id" eval="1"/> + <field name="is_header" eval="True" /> + <field name="journal_ids" eval="[(6, 0, [1])]" /> + <field name="company_id" eval="1" /> <field name="csv_datestyle">%d/%m/%Y</field> <field name="xls_datestyle">dd/mm/yyyy</field> </record> <record id="cegid_export_achats" model="export.journal.type"> <field name="name">Cegid Achats</field> - <field name="active" eval="True"/> + <field name="active" eval="True" /> <field name="sequence">5</field> - <field name="is_header" eval="True"/> - <field name="journal_ids" eval="[(6, 0, [2])]"></field> - <field name="company_id" eval="1"/> + <field name="is_header" eval="True" /> + <field name="journal_ids" eval="[(6, 0, [2])]" /> + <field name="company_id" eval="1" /> <field name="csv_datestyle">%d/%m/%Y</field> <field name="xls_datestyle">dd/mm/yyyy</field> </record> @@ -54,110 +54,168 @@ <field name="name">date</field> <field name="sequence">1</field> <field name="field_name">line.date</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_ventes" + /> </record> <record id="ibiza_vt_2" model="export.journal.field"> <field name="name">journal</field> <field name="sequence">2</field> <field name="field_name">'VT'</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_ventes" + /> </record> <record id="ibiza_vt_3" model="export.journal.field"> <field name="name">compte</field> <field name="sequence">3</field> <field name="field_name">line.account_id.code</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_ventes" + /> </record> <record id="ibiza_vt_4" model="export.journal.field"> <field name="name">debit</field> <field name="sequence">4</field> <field name="field_name">line.debit</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_ventes" + /> </record> <record id="ibiza_vt_5" model="export.journal.field"> <field name="name">credit</field> <field name="sequence">5</field> <field name="field_name">line.credit</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_ventes" + /> </record> <record id="ibiza_vt_6" model="export.journal.field"> <field name="name">libelle</field> <field name="sequence">6</field> - <field name="field_name">line.partner_id.name if not line.name else 'Facture ' + line.move_id.name + ' - ' + line.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_ventes"/> + <field + name="field_name" + >line.partner_id.name if not line.name else 'Facture ' + line.move_id.name + ' - ' + line.name</field> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_ventes" + /> </record> <record id="ibiza_vt_7" model="export.journal.field"> <field name="name">piece</field> <field name="sequence">7</field> <field name="field_name">line.move_id.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_ventes" + /> </record> <record id="ibiza_vt_8" model="export.journal.field"> <field name="name">echeance</field> <field name="sequence">8</field> <field name="field_name">line.date_maturity</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_ventes" + /> </record> <record id="ibiza_vt_9" model="export.journal.field"> <field name="name">ref_piece</field> <field name="sequence">9</field> <field name="field_name">line.move_id.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_ventes" + /> </record> <!-- IBIZA ACHATS --> <record id="ibiza_ha_1" model="export.journal.field"> <field name="name">date</field> <field name="sequence">1</field> <field name="field_name">line.date</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_achats" + /> </record> <record id="ibiza_ha_2" model="export.journal.field"> <field name="name">journal</field> <field name="sequence">2</field> <field name="field_name">'VT'</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_achats" + /> </record> <record id="ibiza_ha_3" model="export.journal.field"> <field name="name">compte</field> <field name="sequence">3</field> <field name="field_name">line.account_id.code</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_achats" + /> </record> <record id="ibiza_ha_4" model="export.journal.field"> <field name="name">debit</field> <field name="sequence">4</field> <field name="field_name">line.debit</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_achats" + /> </record> <record id="ibiza_ha_5" model="export.journal.field"> <field name="name">credit</field> <field name="sequence">5</field> <field name="field_name">line.credit</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_achats" + /> </record> <record id="ibiza_ha_6" model="export.journal.field"> <field name="name">libelle</field> <field name="sequence">6</field> - <field name="field_name">line.partner_id.name if not line.name else 'Facture ' + line.move_id.name + ' - ' + line.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_achats"/> + <field + name="field_name" + >line.partner_id.name if not line.name else 'Facture ' + line.move_id.name + ' - ' + line.name</field> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_achats" + /> </record> <record id="ibiza_ha_7" model="export.journal.field"> <field name="name">piece</field> <field name="sequence">7</field> <field name="field_name">line.move_id.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_achats" + /> </record> <record id="ibiza_ha_8" model="export.journal.field"> <field name="name">echeance</field> <field name="sequence">8</field> <field name="field_name">line.date_maturity</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_achats" + /> </record> <record id="ibiza_ha_9" model="export.journal.field"> <field name="name">ref_piece</field> <field name="sequence">9</field> <field name="field_name">line.move_id.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.ibiza_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.ibiza_export_achats" + /> </record> <!-- CEGID VENTES--> @@ -165,98 +223,150 @@ <field name="name">Journal</field> <field name="sequence">1</field> <field name="field_name">'VEN'</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_ventes" + /> </record> <record id="cegid_vt_2" model="export.journal.field"> <field name="name">Date</field> <field name="sequence">2</field> <field name="field_name">line.date</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_ventes" + /> </record> <record id="cegid_vt_3" model="export.journal.field"> <field name="name">Général</field> <field name="sequence">3</field> <field name="field_name">line.account_id.code</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_ventes" + /> </record> <record id="cegid_vt_4" model="export.journal.field"> <field name="name">Auxiliaire</field> <field name="sequence">4</field> <field name="field_name">''</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_ventes" + /> </record> <record id="cegid_vt_5" model="export.journal.field"> <field name="name">Référence</field> <field name="sequence">5</field> <field name="field_name">line.move_id.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_ventes" + /> </record> <record id="cegid_vt_6" model="export.journal.field"> <field name="name">Libellé</field> <field name="sequence">6</field> - <field name="field_name">line.partner_id.name if not line.name else 'Facture ' + line.move_id.name + ' - ' + line.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_ventes"/> + <field + name="field_name" + >line.partner_id.name if not line.name else 'Facture ' + line.move_id.name + ' - ' + line.name</field> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_ventes" + /> </record> <record id="cegid_vt_7" model="export.journal.field"> <field name="name">Débit</field> <field name="sequence">7</field> <field name="field_name">line.debit</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_ventes" + /> </record> <record id="cegid_vt_8" model="export.journal.field"> <field name="name">Crédit</field> <field name="sequence">8</field> <field name="field_name">line.credit</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_ventes"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_ventes" + /> </record> <!-- CEGID ACHATS--> <record id="cegid_ha_1" model="export.journal.field"> <field name="name">Journal</field> <field name="sequence">1</field> <field name="field_name">'VEN'</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_achats" + /> </record> <record id="cegid_ha_2" model="export.journal.field"> <field name="name">Date</field> <field name="sequence">2</field> <field name="field_name">line.date</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_achats" + /> </record> <record id="cegid_ha_3" model="export.journal.field"> <field name="name">Général</field> <field name="sequence">3</field> <field name="field_name">line.account_id.code</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_achats" + /> </record> <record id="cegid_ha_4" model="export.journal.field"> <field name="name">Auxiliaire</field> <field name="sequence">4</field> <field name="field_name">''</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_achats" + /> </record> <record id="cegid_ha_5" model="export.journal.field"> <field name="name">Référence</field> <field name="sequence">5</field> <field name="field_name">line.move_id.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_achats" + /> </record> <record id="cegid_ha_6" model="export.journal.field"> <field name="name">Libellé</field> <field name="sequence">6</field> - <field name="field_name">line.partner_id.name if not line.name else 'Facture ' + line.move_id.name + ' - ' + line.name</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_achats"/> + <field + name="field_name" + >line.partner_id.name if not line.name else 'Facture ' + line.move_id.name + ' - ' + line.name</field> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_achats" + /> </record> <record id="cegid_ha_7" model="export.journal.field"> <field name="name">Débit</field> <field name="sequence">7</field> <field name="field_name">line.debit</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_achats" + /> </record> <record id="cegid_ha_8" model="export.journal.field"> <field name="name">Crédit</field> <field name="sequence">8</field> <field name="field_name">line.credit</field> - <field name="export_id" ref="lefilament_export_journal_tool.cegid_export_achats"/> + <field + name="export_id" + ref="lefilament_export_journal_tool.cegid_export_achats" + /> </record> </data> diff --git a/models/__init__.py b/models/__init__.py old mode 100755 new mode 100644 diff --git a/models/account_move_line.py b/models/account_move_line.py index 9ca8983bc2ccf2706b529f0f8ded9da8b6b14009..cd2ec05529aaa59ea55c68fe69cfcd968ad52afd 100644 --- a/models/account_move_line.py +++ b/models/account_move_line.py @@ -1,10 +1,10 @@ # Copyright 2020 Le Filament # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import fields, models, api +from odoo import fields, models class AccountMoveLine(models.Model): - _inherit = 'account.move.line' + _inherit = "account.move.line" - date_export = fields.Datetime('Date export') + date_export = fields.Datetime("Date export") diff --git a/models/export_journal_field.py b/models/export_journal_field.py old mode 100755 new mode 100644 index a112e78aeb4eeef2d2c60437652de244ad266823..5109c5367313b104f59357cf4be603f1b0443627 --- a/models/export_journal_field.py +++ b/models/export_journal_field.py @@ -1,18 +1,15 @@ # Copyright 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, models, api +from odoo import fields, models class ExportJournalField(models.Model): - _name = 'export.journal.field' - _description = 'Export journal - champs à exporter' - _order = 'sequence' - - name = fields.Char('Header') - sequence = fields.Integer('Sequence', default=10) - export_id = fields.Many2one( - comodel_name='export.journal.type', - name='Parent' - ) - field_name = fields.Char('Champ') + _name = "export.journal.field" + _description = "Export journal - champs à exporter" + _order = "sequence" + + name = fields.Char("Header") + sequence = fields.Integer("Sequence", default=10) + export_id = fields.Many2one(comodel_name="export.journal.type", name="Parent") + field_name = fields.Char("Champ") diff --git a/models/export_journal_type.py b/models/export_journal_type.py old mode 100755 new mode 100644 index e03d03b5f7181c58128db5d2c26a7306a3d3d554..5629e355168c28713ca1620f66c04bfbdb9de0a1 --- a/models/export_journal_type.py +++ b/models/export_journal_type.py @@ -5,30 +5,31 @@ from odoo import fields, models class ExportJournalType(models.Model): - _name = 'export.journal.type' - _description = 'Configuration des exports de journaux' - _order = 'sequence' + _name = "export.journal.type" + _description = "Configuration des exports de journaux" + _order = "sequence" - name = fields.Char('Nom', required=True) + name = fields.Char("Nom", required=True) active = fields.Boolean("Actif", default=True) - sequence = fields.Integer('Sequence', default=10) + sequence = fields.Integer("Sequence", default=10) fields_ids = fields.One2many( - comodel_name='export.journal.field', - inverse_name='export_id', + comodel_name="export.journal.field", + inverse_name="export_id", string="Champs", - copy=True + copy=True, ) - is_header = fields.Boolean('Header', default=True) + is_header = fields.Boolean("Header", default=True) company_id = fields.Many2one( - comodel_name='res.company', - string='Company', + comodel_name="res.company", + string="Company", required=True, - default=lambda self: self.env['res.company']._company_default_get('export.journal.type')) + default=lambda self: self.env["res.company"]._company_default_get( + "export.journal.type" + ), + ) journal_ids = fields.Many2many( - comodel_name='account.journal', - string='Journaux', - copy=True + comodel_name="account.journal", string="Journaux", copy=True ) - delimiter = fields.Char('Séparateur', default=';') - csv_datestyle = fields.Char('Format Date CSV', default='%Y-%m-%d') - xls_datestyle = fields.Char('Format Date XLS', default='YYYY-MM-DD') + delimiter = fields.Char("Séparateur", default=";") + csv_datestyle = fields.Char("Format Date CSV", default="%Y-%m-%d") + xls_datestyle = fields.Char("Format Date XLS", default="YYYY-MM-DD") diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv old mode 100755 new mode 100644 diff --git a/views/export_journal_type.xml b/views/export_journal_type.xml old mode 100755 new mode 100644 index 65440c26a5171d4d0ee414e5dbad9e64edfd95e4..ef79b8a88532a619b8325a211cac2cd3d53541e6 --- a/views/export_journal_type.xml +++ b/views/export_journal_type.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <!-- Copyright 2020 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> <odoo> @@ -9,35 +9,48 @@ <field name="arch" type="xml"> <form string="Export Journaux"> <sheet> - <div class="oe_button_box" name="button_box"> - <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive"> - <field name="active" string="Archiver" widget="statinfo"/> - </button> - </div> - <widget name="web_ribbon" title="Archivé" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/> - <h2><field name="name"/></h2> + <field name="active" invisible="1" /> + <widget + name="web_ribbon" + title="Archivé" + bg_color="bg-danger" + attrs="{'invisible': [('active', '=', True)]}" + /> + <h2><field name="name" /></h2> <group> <group> - <field name="journal_ids" widget="many2many_tags" options="{'no_create': 1}" required="1"/> - <field name="is_header"/> - <field name="delimiter" required="1"/> - <field name="csv_datestyle" required="1"/> - <field name="xls_datestyle" required="1"/> + <field + name="journal_ids" + widget="many2many_tags" + options="{'no_create': 1}" + required="1" + /> + <field name="is_header" /> + <field name="delimiter" required="1" /> + <field name="csv_datestyle" required="1" /> + <field name="xls_datestyle" required="1" /> </group> <group> - <field name="sequence"/> - <field name="company_id" options="{'no_create': 1}" required="1"/> + <field name="sequence" /> + <field + name="company_id" + options="{'no_create': 1}" + required="1" + /> </group> </group> <div class="alert alert-info" role="alert"> - La première colonne correspond au nom de l'entête du fichier de sortie.<br/> - La deuxième colonne est la valeur de sortie : code python où l'objet <code>line</code> correspond à un <code>account.move.line</code>.<br/> + La première colonne correspond au nom de l'entête du fichier de sortie.<br + /> + La deuxième colonne est la valeur de sortie : code python où l'objet <code + >line</code> correspond à un <code + >account.move.line</code>.<br /> </div> <field name="fields_ids"> <tree editable="bottom"> - <field name="sequence" widget="handle"/> - <field name="name" required="1"/> - <field name="field_name" required="1"/> + <field name="sequence" widget="handle" /> + <field name="name" required="1" /> + <field name="field_name" required="1" /> </tree> </field> </sheet> @@ -50,11 +63,11 @@ <field name="model">export.journal.type</field> <field name="arch" type="xml"> <tree string="Export Journaux"> - <field name="sequence" widget="handle"/> - <field name="name"/> - <field name="is_header"/> - <field name="journal_ids" widget="many2many_tags"/> - <field name="company_id"/> + <field name="sequence" widget="handle" /> + <field name="name" /> + <field name="is_header" /> + <field name="journal_ids" widget="many2many_tags" /> + <field name="company_id" /> </tree> </field> </record> @@ -64,9 +77,17 @@ <field name="model">export.journal.type</field> <field name="arch" type="xml"> <search string="Export Journaux"> - <field name="name"/> - <filter string="Archivés" name="inactive" domain="[('active','=',False)]"/> - <filter string="Tous" name="inactive" domain="[('active','in',(True,False))]"/> + <field name="name" /> + <filter + string="Archivés" + name="inactive" + domain="[('active','=',False)]" + /> + <filter + string="Tous" + name="all" + domain="[('active','in',(True,False))]" + /> </search> </field> </record> @@ -78,9 +99,18 @@ <field name="view_mode">tree,form</field> </record> - <menuitem name="Comptabilité" id="export_journal_type_root_menu" parent="base.menu_custom" sequence="50"/> - <menuitem name="Configuration Export Journaux" id="export_journal_type_menu" parent="lefilament_export_journal_tool.export_journal_type_root_menu" - action="export_journal_type_act_window"/> + <menuitem + name="Comptabilité" + id="export_journal_type_root_menu" + parent="base.menu_custom" + sequence="50" + /> + <menuitem + name="Configuration Export Journaux" + id="export_journal_type_menu" + parent="lefilament_export_journal_tool.export_journal_type_root_menu" + action="export_journal_type_act_window" + /> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/wizard/__init__.py b/wizard/__init__.py old mode 100755 new mode 100644 diff --git a/wizard/export_journal_wizard.py b/wizard/export_journal_wizard.py old mode 100755 new mode 100644 index 35ce434bcd41deba7c999abdf0850529f47afe0e..d496dd950d7c439558b1d5d309d0f63e48772a02 --- a/wizard/export_journal_wizard.py +++ b/wizard/export_journal_wizard.py @@ -1,8 +1,7 @@ # Copyright 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields, api, http -from odoo.exceptions import UserError +from odoo import api, fields, models class ExportJournalWizard(models.TransientModel): @@ -15,31 +14,32 @@ class ExportJournalWizard(models.TransientModel): @api.model def _get_default_export(self): - export = self.env['export.journal.type'].search([ - ('company_id', '=', self.env.user.company_id.id)], limit=1) + export = self.env["export.journal.type"].search( + [("company_id", "=", self.env.user.company_id.id)], limit=1 + ) return export - date_start = fields.Date('Date de début', required=True) + date_start = fields.Date("Date de début", required=True) date_end = fields.Date( - string='Date de fin', - required=True, - default=fields.Date.today()) + string="Date de fin", required=True, default=fields.Date.today() + ) export_format = fields.Selection( - [('csv', 'CSV'), ('xls', 'Excel')], - string='Format', default="csv") + [("csv", "CSV"), ("xls", "Excel")], string="Format", default="csv" + ) company_id = fields.Many2one( - comodel_name='res.company', - default=_get_default_company + comodel_name="res.company", default=_get_default_company ) export_id = fields.Many2one( - comodel_name='export.journal.type', + comodel_name="export.journal.type", string="Format d'export", domain="[('company_id', '=', company_id)]", - default=_get_default_export + default=_get_default_export, ) export_type = fields.Selection( - [('empty', 'Ecritures non exportées'), ('all', 'Toutes les écritures')], - string='Ecritures à exporter', default="empty") + [("empty", "Ecritures non exportées"), ("all", "Toutes les écritures")], + string="Ecritures à exporter", + default="empty", + ) def get_data_file(self): """ @@ -47,11 +47,9 @@ class ExportJournalWizard(models.TransientModel): :return: ir.actions.act_url """ return { - 'type': 'ir.actions.act_url', - 'url': - '/web/export_journal?format=%s&export=%s&type=%s' - % (self.export_format, self.export_id.id, self.export_type) + - '&date_start=%s&date_end=%s' - % (self.date_start, self.date_end), - 'target': 'new', + "type": "ir.actions.act_url", + "url": "/web/export_journal?export_format=%s&export=%s&export_type=%s" + % (self.export_format, self.export_id.id, self.export_type) + + "&date_start=%s&date_end=%s" % (self.date_start, self.date_end), + "target": "new", } diff --git a/wizard/export_journal_wizard_view.xml b/wizard/export_journal_wizard_view.xml old mode 100755 new mode 100644 index c54434fdbf6d2b1516019d3742ec380a8987660f..8136b04840305234a178e6a872e269d2d0334a62 --- a/wizard/export_journal_wizard_view.xml +++ b/wizard/export_journal_wizard_view.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version="1.0" encoding="UTF-8" ?> <odoo> <record id="data_export_view_form" model="ir.ui.view"> <field name="name">invoice.line.export.form</field> @@ -10,24 +10,39 @@ <field name="export_format" widget="radio" /> </group> <group> - <field name="export_id" required="True" options="{'no_create': 1}"/> - <field name="company_id" invisible="True"/> + <field + name="export_id" + required="True" + options="{'no_create': 1}" + /> + <field name="company_id" invisible="True" /> <field name="export_type" widget="radio" /> </group> </group> - <p class="text-muted">Les dates de début et de fin sont incluses dans l'export des écritures</p> + <p + class="text-muted" + >Les dates de début et de fin sont incluses dans l'export des écritures</p> <group> <group> - <field name="date_start"/> + <field name="date_start" /> </group> <group> - <field name="date_end"/> + <field name="date_end" /> </group> </group> <footer> - <button class="btn btn-sm btn-primary" name="get_data_file" string="Télécharger" type="object"/> - <button class="btn btn-sm btn-default" special="cancel" string="Fermer"/> + <button + class="btn btn-sm btn-primary" + name="get_data_file" + string="Télécharger" + type="object" + /> + <button + class="btn btn-sm btn-default" + special="cancel" + string="Fermer" + /> </footer> </form> </field> @@ -37,13 +52,15 @@ <field name="name">Export Journal</field> <field name="type">ir.actions.act_window</field> <field name="res_model">export.journal.wizard</field> - <field name="view_id" ref="data_export_view_form"/> + <field name="view_id" ref="data_export_view_form" /> <field name="target">new</field> </record> - <menuitem id="menu_data_export" - action="data_export_action" - name="Export Journal" - parent="account.menu_finance_entries_accounting_journals" - sequence="90" /> + <menuitem + id="menu_data_export" + action="data_export_action" + name="Export Journal" + parent="account.menu_finance_entries_accounting_journals" + sequence="90" + /> </odoo>