From bedf89c28dba15e9cdc85b2fbf784671491e7656 Mon Sep 17 00:00:00 2001 From: Juliana <juliana@le-filament.com> Date: Thu, 16 Feb 2023 16:21:21 +0100 Subject: [PATCH] [ADD]Init module 16.0 --- .editorconfig | 20 ++ .eslintrc.yml | 187 ++++++++++ .flake8 | 12 + .isort.cfg | 13 + .pre-commit-config.yaml | 128 +++++++ .prettierrc.yml | 8 + .pylintrc | 123 +++++++ .pylintrc-mandatory | 98 ++++++ LICENSE | 661 +++++++++++++++++++++++++++++++++++ README.rst | 39 +++ __init__.py | 2 - __manifest__.py | 51 ++- models/__init__.py | 5 +- models/sale.py | 41 +++ models/sale_order.py | 8 - security/ir.model.access.csv | 3 +- static/description/icon.png | Bin 0 -> 9161 bytes views/sale_views.xml | 17 + views/views.xml | 61 ---- 19 files changed, 1374 insertions(+), 103 deletions(-) create mode 100644 .editorconfig create mode 100644 .eslintrc.yml create mode 100644 .flake8 create mode 100644 .isort.cfg create mode 100644 .pre-commit-config.yaml create mode 100644 .prettierrc.yml create mode 100644 .pylintrc create mode 100644 .pylintrc-mandatory create mode 100644 LICENSE create mode 100644 README.rst create mode 100644 models/sale.py delete mode 100644 models/sale_order.py create mode 100755 static/description/icon.png create mode 100644 views/sale_views.xml delete mode 100644 views/views.xml diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..bfd7ac5 --- /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 0000000..9429bc6 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,187 @@ +env: + browser: true + es6: true + +# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449 +parserOptions: + ecmaVersion: 2019 + +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 diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..e397e8e --- /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/.isort.cfg b/.isort.cfg new file mode 100644 index 0000000..0ec187e --- /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 0000000..c575299 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,128 @@ +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: "16.17.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: 4cd2b852214dead80822e93e6749b16f2785b2fe + 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.6.1 + 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.8.0 + hooks: + - id: black + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v2.7.1 + hooks: + - id: prettier + name: prettier (with plugin-xml) + additional_dependencies: + - "prettier@2.7.1" + - "@prettier/plugin-xml@2.2.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: v8.24.0 + hooks: + - id: eslint + verbose: true + args: + - --color + - --fix + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.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.38.2 + hooks: + - id: pyupgrade + args: ["--keep-percent-format"] + - repo: https://github.com/PyCQA/isort + rev: 5.10.1 + hooks: + - id: isort + name: isort except __init__.py + args: + - --settings=. + exclude: /__init__\.py$ + - repo: https://gitlab.com/PyCQA/flake8 + rev: 3.9.2 + hooks: + - id: flake8 + name: flake8 + additional_dependencies: ["flake8-bugbear==21.9.2"] + - 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 diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 0000000..5b6d4b3 --- /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 0000000..71c476d --- /dev/null +++ b/.pylintrc @@ -0,0 +1,123 @@ + + +[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=16.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, + attribute-string-redundant, + character-not-valid-in-resource-link, + consider-merging-classes-inherited, + context-overridden, + create-user-wo-reset-password, + dangerous-filter-wo-user, + dangerous-qweb-replace-wo-priority, + deprecated-data-xml-node, + deprecated-openerp-xml-node, + duplicate-po-message-definition, + except-pass, + file-not-used, + invalid-commit, + manifest-maintainers-list, + missing-newline-extrafiles, + missing-readme, + missing-return, + odoo-addons-relative-import, + old-api7-method-defined, + po-msgstr-variables, + po-syntax-error, + renamed-field-parameter, + resource-not-exist, + str-format-used, + test-folder-imported, + translation-contains-variable, + translation-positional-used, + unnecessary-utf8-coding-comment, + website-manifest-key-not-valid-uri, + xml-attribute-translatable, + xml-deprecated-qweb-directive, + xml-deprecated-tree-attribute, + external-request-timeout, + # 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 0000000..ed2c217 --- /dev/null +++ b/.pylintrc-mandatory @@ -0,0 +1,98 @@ + +[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=16.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, + attribute-string-redundant, + character-not-valid-in-resource-link, + consider-merging-classes-inherited, + context-overridden, + create-user-wo-reset-password, + dangerous-filter-wo-user, + dangerous-qweb-replace-wo-priority, + deprecated-data-xml-node, + deprecated-openerp-xml-node, + duplicate-po-message-definition, + except-pass, + file-not-used, + invalid-commit, + manifest-maintainers-list, + missing-newline-extrafiles, + missing-readme, + missing-return, + odoo-addons-relative-import, + old-api7-method-defined, + po-msgstr-variables, + po-syntax-error, + renamed-field-parameter, + resource-not-exist, + str-format-used, + test-folder-imported, + translation-contains-variable, + translation-positional-used, + unnecessary-utf8-coding-comment, + website-manifest-key-not-valid-uri, + xml-attribute-translatable, + xml-deprecated-qweb-directive, + xml-deprecated-tree-attribute, + external-request-timeout + +[REPORTS] +msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg} +output-format=colorized +reports=no diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3ffc567 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ +GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +<http://www.gnu.org/licenses/>. \ No newline at end of file diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..e7e07f6 --- /dev/null +++ b/README.rst @@ -0,0 +1,39 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl.html + :alt: License: AGPL-3 + + +=================== +AGAP - Sale / Stock +=================== + +Description +=========== + +Ce module hérite les modules *sale* et *stock* et ajoute le champ Quantité disponible de l'article sur les lignes de vente. + +Exemple +======= + + + +Credits +======= + +Le développement de ce module a été financé par / The development of this module has been financially supported by: + - CLIENT (https://website-client) + +Contributors +------------ + +* Juiana Poudou <juliana@le-filament.com> + + +Maintainer +---------- + +.. image:: https://le-filament.com/img/logo-lefilament.png + :alt: Le Filament + :target: https://le-filament.com + +This module is maintained by Le Filament diff --git a/__init__.py b/__init__.py index cde864b..0650744 100644 --- a/__init__.py +++ b/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - from . import models diff --git a/__manifest__.py b/__manifest__.py index 7ecd005..60dce24 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -1,30 +1,25 @@ -# -*- coding: utf-8 -*- { - 'name': "Agap - Sale", - - 'summary': """ - Module d'ajout de champ personnalisé dans les pieces commerciales - """, - - 'description': """ - - """, - - 'author': "Scopea", - 'website': "https://scopea.fr", - - # Categories can be used to filter modules in modules listing - # Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml - # for the full list - 'category': 'Sales', - 'version': '11.0.001', - - # any module necessary for this one to work correctly - 'depends': ['sale_management','stock'], - - # always loaded - 'data': [ - # 'security/ir.model.access.csv', - 'views/views.xml', + "name": "AGAP - Sale / Stock", + "summary": "Vente et stocks", + "author": "Le Filament", + "website": "https://le-filament.com", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "depends": ["sale", "stock"], + "data": [ + # datas + # views + "views/sale_views.xml", + # views menu + # wizard ], - } + "assets": { + "web._assets_primary_variables": [], + "web._assets_frontend_helpers": [], + "web.assets_frontend": [], + "web.assets_tests": [], + "web.assets_qweb": [], + }, + "installable": True, + "auto_install": False, +} diff --git a/models/__init__.py b/models/__init__.py index 6064afe..6002934 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,3 +1,4 @@ -# -*- coding: utf-8 -*- +# Copyright 2023 Le Filament (https://le-filament.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) -from . import sale_order +from . import sale diff --git a/models/sale.py b/models/sale.py new file mode 100644 index 0000000..7d7b986 --- /dev/null +++ b/models/sale.py @@ -0,0 +1,41 @@ +# Copyright 2023 Le Filament (https://le-filament.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +from odoo import models, fields + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + # ------------------------------------------------------ + # Fields declaration + # ------------------------------------------------------ + virtual_available = fields.Float( + string='Qté Dispo', related='product_id.virtual_available', store=False) + # ------------------------------------------------------ + # SQL Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Default methods + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Computed fields / Search Fields + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Onchange / Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # CRUD methods (ORM overrides) + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Actions + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Business methods + # ------------------------------------------------------ diff --git a/models/sale_order.py b/models/sale_order.py deleted file mode 100644 index 8efcea2..0000000 --- a/models/sale_order.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- - -from odoo import models, fields, api - -class AgapSaleOrder(models.Model): - _inherit = "sale.order.line" - - s_qtedispo = fields.Float(string='Qté Dispo', related='product_id.virtual_available', store=False) diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index be1ea3f..301b7da 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,2 +1 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_mymodule_mymodule,mymodule.mymodule,model_mymodule_mymodule,,1,0,0,0 \ No newline at end of file +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink diff --git a/static/description/icon.png b/static/description/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..82ef47760a441cf229b5009f0a18ccf3842fbfa5 GIT binary patch literal 9161 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 literal 0 HcmV?d00001 diff --git a/views/sale_views.xml b/views/sale_views.xml new file mode 100644 index 0000000..14123f0 --- /dev/null +++ b/views/sale_views.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <data> + + <record id="view_order_form" model="ir.ui.view"> + <field name="name">sale.order.form</field> + <field name="model">sale.order</field> + <field name="inherit_id" ref="sale.view_order_form"/> + <field name="arch" type="xml"> + <xpath position="after" expr="//tree/field[@name='product_uom_qty']"> + <field name="virtual_available"/> + </xpath> + </field> + </record> + + </data> +</odoo> diff --git a/views/views.xml b/views/views.xml deleted file mode 100644 index 2cbcf70..0000000 --- a/views/views.xml +++ /dev/null @@ -1,61 +0,0 @@ -<odoo> - <data> - <!-- explicit list view definition --> - - <record model="ir.ui.view" id="agap_sale_order_list"> - <field name="name">agap list</field> - <field name="model">sale.order</field> - <field name="inherit_id" ref="sale.view_order_form"/> - <field name="mode">extension</field> - <field name="priority">90</field> - <field name="arch" type="xml"> - <xpath position="after" expr="//tree/field[@name='product_uom_qty']"> - <field name="s_qtedispo"/> - </xpath> - </field> - </record> - - - <!-- actions opening views on models --> - <!-- - <record model="ir.actions.act_window" id="mymodule.action_window"> - <field name="name">mymodule window</field> - <field name="res_model">mymodule.mymodule</field> - <field name="view_mode">tree,form</field> - </record> - --> - - <!-- server action to the one above --> - <!-- - <record model="ir.actions.server" id="mymodule.action_server"> - <field name="name">mymodule server</field> - <field name="model_id" ref="model_mymodule_mymodule"/> - <field name="state">code</field> - <field name="code"> - action = { - "type": "ir.actions.act_window", - "view_mode": "tree,form", - "res_model": self._name, - } - </field> - </record> - --> - - <!-- Top menu item --> - <!-- - <menuitem name="mymodule" id="mymodule.menu_root"/> - --> - <!-- menu categories --> - <!-- - <menuitem name="Menu 1" id="mymodule.menu_1" parent="mymodule.menu_root"/> - <menuitem name="Menu 2" id="mymodule.menu_2" parent="mymodule.menu_root"/> - --> - <!-- actions --> - <!-- - <menuitem name="List" id="mymodule.menu_1_list" parent="mymodule.menu_1" - action="mymodule.action_window"/> - <menuitem name="Server to list" id="mymodule" parent="mymodule.menu_2" - action="mymodule.action_server"/> - --> - </data> -</odoo> -- GitLab