Compare commits
merge into: OCA:12.0
OCA:10.0
OCA:11.0
OCA:12.0
OCA:13.0
OCA:13.0-mig-contract
OCA:6.1
OCA:7.0
OCA:8.0
OCA:9.0
pull from: OCA:7.0
OCA:10.0
OCA:11.0
OCA:12.0
OCA:13.0
OCA:13.0-mig-contract
OCA:6.1
OCA:7.0
OCA:8.0
OCA:9.0
No commits in common. '12.0' and '7.0' have entirely different histories.
811 changed files with 3916 additions and 170975 deletions
-
20.editorconfig
-
60.gitignore
-
32.travis.yml
-
7CONTRIBUTING.md
-
661LICENSE
-
19README.md
-
22account_analytic_analysis_recurring/__init__.py
-
51account_analytic_analysis_recurring/__openerp__.py
-
129account_analytic_analysis_recurring/account_analytic_analysis_recurring.pot
-
259account_analytic_analysis_recurring/account_analytic_analysis_recurring.py
-
16account_analytic_analysis_recurring/account_analytic_analysis_recurring_cron.xml
-
44account_analytic_analysis_recurring/account_analytic_analysis_recurring_view.xml
-
145account_analytic_analysis_recurring/i18n/account_analytic_analysis_recurring.pot
-
156account_analytic_analysis_recurring/i18n/nl.po
-
100agreement/README.rst
-
1agreement/__init__.py
-
28agreement/__manifest__.py
-
63agreement/demo/demo.xml
-
214agreement/i18n/agreement.pot
-
232agreement/i18n/fr.po
-
218agreement/i18n/hr.po
-
218agreement/i18n/pt_BR.po
-
227agreement/i18n/pt_PT.po
-
219agreement/i18n/zh_CN.po
-
2agreement/models/__init__.py
-
50agreement/models/agreement.py
-
12agreement/models/agreement_type.py
-
3agreement/readme/CONTRIBUTORS.rst
-
14agreement/readme/DESCRIPTION.rst
-
26agreement/security/agreement_security.xml
-
3agreement/security/ir.model.access.csv
-
BINagreement/static/description/icon.png
-
436agreement/static/description/index.html
-
90agreement/views/agreement.xml
-
54agreement/views/agreement_type.xml
-
142agreement_legal/README.rst
-
12agreement_legal/__init__.py
-
51agreement_legal/__manifest__.py
-
58agreement_legal/data/agreement_stage.xml
-
16agreement_legal/data/agreement_type.xml
-
13agreement_legal/data/ir_sequence.xml
-
9agreement_legal/data/module_category.xml
-
40agreement_legal/demo/demo.xml
-
1697agreement_legal/i18n/agreement_legal.pot
-
1983agreement_legal/i18n/fr.po
-
1710agreement_legal/i18n/pt_BR.po
-
1730agreement_legal/i18n/pt_PT.po
-
1740agreement_legal/i18n/zh_CN.po
-
18agreement_legal/models/__init__.py
-
371agreement_legal/models/agreement.py
-
73agreement_legal/models/agreement_appendix.py
-
71agreement_legal/models/agreement_clause.py
-
27agreement_legal/models/agreement_increasetype.py
-
30agreement_legal/models/agreement_line.py
-
63agreement_legal/models/agreement_recital.py
-
23agreement_legal/models/agreement_renewaltype.py
-
63agreement_legal/models/agreement_section.py
-
31agreement_legal/models/agreement_stage.py
-
12agreement_legal/models/agreement_status.py
-
14agreement_legal/models/agreement_subtype.py
-
15agreement_legal/models/agreement_type.py
-
12agreement_legal/models/product_template.py
-
38agreement_legal/models/res_config_settings.py
-
13agreement_legal/models/res_partner.py
-
6agreement_legal/readme/CONFIGURE.rst
-
6agreement_legal/readme/CONTRIBUTORS.rst
-
5agreement_legal/readme/CREDITS.rst
-
9agreement_legal/readme/DESCRIPTION.rst
-
3agreement_legal/readme/ROADMAP.rst
-
13agreement_legal/readme/USAGE.rst
-
151agreement_legal/report/agreement.xml
-
29agreement_legal/security/ir.model.access.csv
-
30agreement_legal/security/res_groups.xml
-
BINagreement_legal/static/description/icon.png
-
481agreement_legal/static/description/index.html
-
80agreement_legal/static/src/js/domain_widget_ext.js
-
179agreement_legal/static/src/xml/domain_widget_view.xml
-
372agreement_legal/views/agreement.xml
-
86agreement_legal/views/agreement_appendix.xml
-
88agreement_legal/views/agreement_clause.xml
-
45agreement_legal/views/agreement_increasetype.xml
-
87agreement_legal/views/agreement_recital.xml
-
41agreement_legal/views/agreement_renewaltype.xml
-
100agreement_legal/views/agreement_section.xml
-
45agreement_legal/views/agreement_stages.xml
-
45agreement_legal/views/agreement_subtype.xml
-
40agreement_legal/views/agreement_type.xml
-
147agreement_legal/views/menu.xml
-
161agreement_legal/views/res_config_settings.xml
-
17agreement_legal/views/res_partner.xml
-
131agreement_legal_sale/README.rst
-
3agreement_legal_sale/__init__.py
-
26agreement_legal_sale/__manifest__.py
-
55agreement_legal_sale/i18n/agreement_legal_sale.pot
-
64agreement_legal_sale/i18n/agreement_sale.pot
-
76agreement_legal_sale/i18n/de.po
-
70agreement_legal_sale/i18n/fr.po
-
68agreement_legal_sale/i18n/zh_CN.po
-
6agreement_legal_sale/models/__init__.py
-
21agreement_legal_sale/models/agreement.py
@ -1,20 +0,0 @@ |
|||||
# 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 |
|
||||
|
|
||||
[.eslintrc,*.{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 |
|
@ -1,60 +0,0 @@ |
|||||
# Byte-compiled / optimized / DLL files |
|
||||
__pycache__/ |
|
||||
*.py[cod] |
|
||||
|
|
||||
# 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 |
|
||||
|
|
||||
# Mr Developer |
|
||||
.mr.developer.cfg |
|
||||
.project |
|
||||
.pydevproject |
|
||||
|
|
||||
# Rope |
|
||||
.ropeproject |
|
||||
|
|
||||
# Sphinx documentation |
|
||||
docs/_build/ |
|
||||
|
|
||||
# Backup files |
|
||||
*~ |
|
||||
*.swp |
|
||||
|
|
||||
# OSX Files |
|
||||
*.DS_Store |
|
@ -1,32 +0,0 @@ |
|||||
language: python |
|
||||
sudo: false |
|
||||
cache: pip |
|
||||
|
|
||||
python: |
|
||||
- "3.5" |
|
||||
|
|
||||
addons: |
|
||||
postgresql: "9.6" |
|
||||
apt: |
|
||||
packages: |
|
||||
- expect-dev # provides unbuffer utility |
|
||||
|
|
||||
env: |
|
||||
global: |
|
||||
- VERSION="12.0" TESTS="0" LINT_CHECK="0" MAKEPOT="0" |
|
||||
|
|
||||
matrix: |
|
||||
- LINT_CHECK="1" |
|
||||
- TESTS="1" ODOO_REPO="OCA/OCB" |
|
||||
- TESTS="1" ODOO_REPO="odoo/odoo" MAKEPOT="1" |
|
||||
|
|
||||
install: |
|
||||
- git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git ${HOME}/maintainer-quality-tools |
|
||||
- export PATH=${HOME}/maintainer-quality-tools/travis:${PATH} |
|
||||
- travis_install_nightly |
|
||||
|
|
||||
script: |
|
||||
- travis_run_tests |
|
||||
|
|
||||
after_success: |
|
||||
- travis_after_tests_success |
|
@ -1,7 +0,0 @@ |
|||||
# OCA Guidelines |
|
||||
|
|
||||
Please follow the official guide from the [OCA Guidelines page](https://github.com/OCA/maintainer-tools/blob/master/CONTRIBUTING.md). |
|
||||
|
|
||||
## Project Specific Guidelines |
|
||||
|
|
||||
This project does not have specific coding guidelines. |
|
@ -1,661 +0,0 @@ |
|||||
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/>. |
|
@ -1,18 +1,3 @@ |
|||||
[![Runbot Status](https://runbot.odoo-community.org/runbot/badge/flat/110/12.0.svg)](https://runbot.odoo-community.org/runbot/repo/github-com-oca-contract-110) |
|
||||
[![Build Status](https://travis-ci.org/OCA/contract.svg?branch=12.0)](https://travis-ci.org/OCA/contract) |
|
||||
[![Coverage Status](https://coveralls.io/repos/OCA/contract/badge.svg?branch=12.0)](https://coveralls.io/r/OCA/contract?branch=12.0) |
|
||||
|
|
||||
# Contracts |
|
||||
|
|
||||
Odoo Contracts are special types of Analytic Accounts. |
|
||||
This repository provides features extending Contracts. |
|
||||
|
|
||||
Dependencies on Project features should not be required. |
|
||||
For Project related extensions please see the |
|
||||
[OCA/Project](https://github.com/OCA/project) repository. |
|
||||
|
|
||||
|
|
||||
## Translation Status |
|
||||
[![Translation Status](https://translation.odoo-community.org/widgets/contract-12-0/-/multi-auto.svg)](https://translation.odoo-community.org/engage/contract-12-0/?utm_source=widget) |
|
||||
|
|
||||
|
**IMPORTANT** |
||||
|
|
||||
|
These modules are now available from the [Project & Service Management](https://github.com/OCA/project-service) repository. |
@ -0,0 +1,22 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>) |
||||
|
# |
||||
|
# 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/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import account_analytic_analysis_recurring |
@ -0,0 +1,51 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). |
||||
|
# |
||||
|
# 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/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
|
||||
|
{ |
||||
|
'name': 'Contracts Management recurring', |
||||
|
'version': '0.1', |
||||
|
'category': 'Other', |
||||
|
'description': """ |
||||
|
This module add a new feature in contracts to manage recurring invoice |
||||
|
====================================================================== |
||||
|
|
||||
|
This is a backport of the new V8 feature available in trunk and saas. With |
||||
|
the V8 release this module will be deprecated. |
||||
|
|
||||
|
It also add a little feature, you can use #START# and #END# in the contract |
||||
|
line to automatically insert the dates of the invoiced period. |
||||
|
|
||||
|
Backport done By Yannick Buron. |
||||
|
""", |
||||
|
'author': "OpenERP SA,Odoo Community Association (OCA)", |
||||
|
'website': 'http://openerp.com', |
||||
|
'depends': ['base', 'account_analytic_analysis'], |
||||
|
'data': [ |
||||
|
'account_analytic_analysis_recurring_cron.xml', |
||||
|
'account_analytic_analysis_recurring_view.xml', |
||||
|
], |
||||
|
'demo': [''], |
||||
|
'test': [], |
||||
|
'installable': True, |
||||
|
'images': [], |
||||
|
} |
||||
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
@ -0,0 +1,129 @@ |
|||||
|
# Translation of OpenERP Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * account_analytic_analysis_recurring |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: OpenERP Server 7.0\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2014-02-21 11:41+0000\n" |
||||
|
"PO-Revision-Date: 2014-02-21 11:41+0000\n" |
||||
|
"Last-Translator: <>\n" |
||||
|
"Language-Team: \n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: \n" |
||||
|
"Plural-Forms: \n" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,price_subtotal:0 |
||||
|
msgid "Sub Total" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Recurrency" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,price_unit:0 |
||||
|
msgid "Unit Price" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: view:account.analytic.account:0 |
||||
|
msgid ". create invoices" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: view:account.analytic.account:0 |
||||
|
msgid "Account Analytic Lines" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_invoice_line_ids:0 |
||||
|
msgid "Invoice Lines" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,uom_id:0 |
||||
|
msgid "Unit of Measure" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Day(s)" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: help:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Invoice automatically repeat at specified interval" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,product_id:0 |
||||
|
msgid "Product" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,name:0 |
||||
|
msgid "Description" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_interval:0 |
||||
|
msgid "Repeat Every" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: view:account.analytic.account:0 |
||||
|
msgid "Recurring Invoices" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_invoices:0 |
||||
|
msgid "Generate recurring invoices automatically" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Year(s)" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Week(s)" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,quantity:0 |
||||
|
msgid "Quantity" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_invoice_line |
||||
|
msgid "account.analytic.invoice.line" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_next_date:0 |
||||
|
msgid "Date of Next Invoice" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,analytic_account_id:0 |
||||
|
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_account |
||||
|
msgid "Analytic Account" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Month(s)" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: help:account.analytic.account,recurring_interval:0 |
||||
|
msgid "Repeat every (Days/Week/Month/Year)" |
||||
|
msgstr "" |
||||
|
|
||||
|
|
@ -0,0 +1,259 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# OpenERP, Open Source Management Solution |
||||
|
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). |
||||
|
# |
||||
|
# 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/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
from dateutil.relativedelta import relativedelta |
||||
|
import datetime |
||||
|
import logging |
||||
|
import time |
||||
|
|
||||
|
from openerp.osv import osv, fields |
||||
|
from openerp.tools.translate import _ |
||||
|
|
||||
|
from openerp.addons.decimal_precision import decimal_precision as dp |
||||
|
|
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
|
class account_analytic_invoice_line(osv.osv): |
||||
|
_name = "account.analytic.invoice.line" |
||||
|
|
||||
|
def _amount_line( |
||||
|
self, cr, uid, ids, prop, unknow_none, unknow_dict, context=None): |
||||
|
res = {} |
||||
|
for line in self.browse(cr, uid, ids, context=context): |
||||
|
res[line.id] = line.quantity * line.price_unit |
||||
|
if line.analytic_account_id.pricelist_id: |
||||
|
cur = line.analytic_account_id.pricelist_id.currency_id |
||||
|
res[line.id] = self.pool.get('res.currency').round( |
||||
|
cr, uid, cur, res[line.id]) |
||||
|
return res |
||||
|
|
||||
|
_columns = { |
||||
|
'product_id': fields.many2one( |
||||
|
'product.product', 'Product', required=True), |
||||
|
'analytic_account_id': fields.many2one( |
||||
|
'account.analytic.account', 'Analytic Account'), |
||||
|
'name': fields.text('Description', required=True), |
||||
|
'quantity': fields.float('Quantity', required=True), |
||||
|
'uom_id': fields.many2one( |
||||
|
'product.uom', 'Unit of Measure', required=True), |
||||
|
'price_unit': fields.float('Unit Price', required=True), |
||||
|
'price_subtotal': fields.function( |
||||
|
_amount_line, string='Sub Total', |
||||
|
type="float", digits_compute=dp.get_precision('Account')), |
||||
|
} |
||||
|
_defaults = { |
||||
|
'quantity': 1, |
||||
|
} |
||||
|
|
||||
|
def product_id_change( |
||||
|
self, cr, uid, ids, product, uom_id, qty=0, name='', |
||||
|
partner_id=False, price_unit=False, pricelist_id=False, |
||||
|
company_id=None, context=None): |
||||
|
context = context or {} |
||||
|
uom_obj = self.pool.get('product.uom') |
||||
|
company_id = company_id or False |
||||
|
context.update( |
||||
|
{'company_id': company_id, |
||||
|
'force_company': company_id, |
||||
|
'pricelist_id': pricelist_id}) |
||||
|
|
||||
|
if not product: |
||||
|
return { |
||||
|
'value': {'price_unit': 0.0}, |
||||
|
'domain': {'product_uom': []}} |
||||
|
if partner_id: |
||||
|
part = self.pool.get('res.partner').browse( |
||||
|
cr, uid, partner_id, context=context) |
||||
|
if part.lang: |
||||
|
context.update({'lang': part.lang}) |
||||
|
|
||||
|
result = {} |
||||
|
res = self.pool.get('product.product').browse( |
||||
|
cr, uid, product, context=context) |
||||
|
result.update( |
||||
|
{'name': res.partner_ref or False, |
||||
|
'uom_id': uom_id or res.uom_id.id or False, |
||||
|
'price_unit': res.list_price or 0.0}) |
||||
|
if res.description: |
||||
|
result['name'] += '\n'+res.description |
||||
|
|
||||
|
res_final = {'value': result} |
||||
|
if result['uom_id'] != res.uom_id.id: |
||||
|
new_price = uom_obj._compute_price( |
||||
|
cr, uid, res.uom_id.id, |
||||
|
res_final['value']['price_unit'], result['uom_id']) |
||||
|
res_final['value']['price_unit'] = new_price |
||||
|
return res_final |
||||
|
|
||||
|
|
||||
|
class account_analytic_account(osv.osv): |
||||
|
_name = "account.analytic.account" |
||||
|
_inherit = "account.analytic.account" |
||||
|
|
||||
|
_columns = { |
||||
|
'recurring_invoice_line_ids': fields.one2many( |
||||
|
'account.analytic.invoice.line', 'analytic_account_id', |
||||
|
'Invoice Lines'), |
||||
|
'recurring_invoices': fields.boolean( |
||||
|
'Generate recurring invoices automatically'), |
||||
|
'recurring_rule_type': fields.selection( |
||||
|
[('daily', 'Day(s)'), |
||||
|
('weekly', 'Week(s)'), |
||||
|
('monthly', 'Month(s)'), |
||||
|
('yearly', 'Year(s)'), |
||||
|
], 'Recurrency', |
||||
|
help="Invoice automatically repeat at specified interval"), |
||||
|
'recurring_interval': fields.integer( |
||||
|
'Repeat Every', help="Repeat every (Days/Week/Month/Year)"), |
||||
|
'recurring_next_date': fields.date('Date of Next Invoice'), |
||||
|
} |
||||
|
|
||||
|
_defaults = { |
||||
|
'recurring_interval': 1, |
||||
|
'recurring_next_date': lambda *a: time.strftime('%Y-%m-%d'), |
||||
|
'recurring_rule_type': 'monthly' |
||||
|
} |
||||
|
|
||||
|
def onchange_recurring_invoices( |
||||
|
self, cr, uid, ids, recurring_invoices, |
||||
|
date_start=False, context=None): |
||||
|
value = {} |
||||
|
if date_start and recurring_invoices: |
||||
|
value = {'value': {'recurring_next_date': date_start}} |
||||
|
return value |
||||
|
|
||||
|
def _prepare_invoice(self, cr, uid, contract, context=None): |
||||
|
context = context or {} |
||||
|
|
||||
|
inv_obj = self.pool.get('account.invoice') |
||||
|
journal_obj = self.pool.get('account.journal') |
||||
|
fpos_obj = self.pool.get('account.fiscal.position') |
||||
|
lang_obj = self.pool.get('res.lang') |
||||
|
|
||||
|
if not contract.partner_id: |
||||
|
raise osv.except_osv( |
||||
|
_('No Customer Defined!'), |
||||
|
_("You must first select a Customer for Contract %s!") % |
||||
|
contract.name) |
||||
|
|
||||
|
fpos = contract.partner_id.property_account_position or False |
||||
|
journal_ids = journal_obj.search( |
||||
|
cr, uid, |
||||
|
[('type', '=', 'sale'), |
||||
|
('company_id', '=', contract.company_id.id or False)], |
||||
|
limit=1) |
||||
|
if not journal_ids: |
||||
|
raise osv.except_osv( |
||||
|
_('Error!'), |
||||
|
_('Please define a sale journal for the company "%s".') % |
||||
|
(contract.company_id.name or '', )) |
||||
|
|
||||
|
partner_payment_term = contract.partner_id.property_payment_term.id |
||||
|
|
||||
|
inv_data = { |
||||
|
'reference': contract.code or False, |
||||
|
'account_id': contract.partner_id.property_account_receivable.id, |
||||
|
'type': 'out_invoice', |
||||
|
'partner_id': contract.partner_id.id, |
||||
|
'currency_id': contract.partner_id.property_product_pricelist.id, |
||||
|
'journal_id': len(journal_ids) and journal_ids[0] or False, |
||||
|
'date_invoice': contract.recurring_next_date, |
||||
|
'origin': contract.name, |
||||
|
'fiscal_position': fpos and fpos.id, |
||||
|
'payment_term': partner_payment_term, |
||||
|
'company_id': contract.company_id.id or False, |
||||
|
} |
||||
|
invoice_id = inv_obj.create(cr, uid, inv_data, context=context) |
||||
|
|
||||
|
for line in contract.recurring_invoice_line_ids: |
||||
|
|
||||
|
res = line.product_id |
||||
|
account_id = res.property_account_income.id |
||||
|
if not account_id: |
||||
|
account_id = res.categ_id.property_account_income_categ.id |
||||
|
account_id = fpos_obj.map_account(cr, uid, fpos, account_id) |
||||
|
|
||||
|
taxes = res.taxes_id or False |
||||
|
tax_id = fpos_obj.map_tax(cr, uid, fpos, taxes) |
||||
|
|
||||
|
if 'old_date' in context: |
||||
|
lang_ids = lang_obj.search( |
||||
|
cr, uid, [('code', '=', contract.partner_id.lang)], |
||||
|
context=context) |
||||
|
format = lang_obj.browse( |
||||
|
cr, uid, lang_ids, context=context)[0].date_format |
||||
|
line.name = line.name.replace( |
||||
|
'#START#', context['old_date'].strftime(format)) |
||||
|
line.name = line.name.replace( |
||||
|
'#END#', context['next_date'].strftime(format)) |
||||
|
|
||||
|
invoice_line_vals = { |
||||
|
'name': line.name, |
||||
|
'account_id': account_id, |
||||
|
'account_analytic_id': contract.id, |
||||
|
'price_unit': line.price_unit or 0.0, |
||||
|
'quantity': line.quantity, |
||||
|
'uos_id': line.uom_id.id or False, |
||||
|
'product_id': line.product_id.id or False, |
||||
|
'invoice_id': invoice_id, |
||||
|
'invoice_line_tax_id': [(6, 0, tax_id)], |
||||
|
} |
||||
|
self.pool.get('account.invoice.line').create( |
||||
|
cr, uid, invoice_line_vals, context=context) |
||||
|
|
||||
|
inv_obj.button_compute(cr, uid, [invoice_id], context=context) |
||||
|
return invoice_id |
||||
|
|
||||
|
def recurring_create_invoice(self, cr, uid, automatic=False, context=None): |
||||
|
context = context or {} |
||||
|
current_date = time.strftime('%Y-%m-%d') |
||||
|
|
||||
|
contract_ids = self.search( |
||||
|
cr, uid, |
||||
|
[('recurring_next_date', '<=', current_date), |
||||
|
('state', '=', 'open'), |
||||
|
('recurring_invoices', '=', True)]) |
||||
|
for contract in self.browse(cr, uid, contract_ids, context=context): |
||||
|
|
||||
|
next_date = datetime.datetime.strptime( |
||||
|
contract.recurring_next_date or current_date, "%Y-%m-%d") |
||||
|
interval = contract.recurring_interval |
||||
|
if contract.recurring_rule_type == 'daily': |
||||
|
old_date = next_date-relativedelta(days=+interval) |
||||
|
new_date = next_date+relativedelta(days=+interval) |
||||
|
elif contract.recurring_rule_type == 'weekly': |
||||
|
old_date = next_date-relativedelta(weeks=+interval) |
||||
|
new_date = next_date+relativedelta(weeks=+interval) |
||||
|
else: |
||||
|
old_date = next_date+relativedelta(months=+interval) |
||||
|
new_date = next_date+relativedelta(months=+interval) |
||||
|
|
||||
|
context['old_date'] = old_date |
||||
|
context['next_date'] = datetime.datetime.strptime( |
||||
|
contract.recurring_next_date or current_date, "%Y-%m-%d") |
||||
|
self._prepare_invoice( |
||||
|
cr, uid, contract, context=context) |
||||
|
|
||||
|
self.write( |
||||
|
cr, uid, [contract.id], |
||||
|
{'recurring_next_date': new_date.strftime('%Y-%m-%d')}, |
||||
|
context=context) |
||||
|
return True |
@ -0,0 +1,16 @@ |
|||||
|
<?xml version="1.0" encoding='UTF-8'?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
|
||||
|
<record model="ir.cron" id="account_analytic_cron_for_invoice"> |
||||
|
<field name="name">Generate Recurring Invoices from Contracts</field> |
||||
|
<field name="interval_number">1</field> |
||||
|
<field name="interval_type">days</field> |
||||
|
<field name="numbercall">-1</field> |
||||
|
<field name="model" eval="'account.analytic.account'"/> |
||||
|
<field name="function" eval="'recurring_create_invoice'"/> |
||||
|
<field name="args" eval="'()'"/> |
||||
|
</record> |
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,44 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
|
||||
|
<record id="account_analytic_account_recurring_form_form" model="ir.ui.view"> |
||||
|
<field name="name">account.analytic.account.invoice.recurring.form.inherit</field> |
||||
|
<field name="model">account.analytic.account</field> |
||||
|
<field name="inherit_id" ref="account_analytic_analysis.account_analytic_account_form_form"/> |
||||
|
<field eval="40" name="priority"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<group name='invoice_on_timesheets' position='after'> |
||||
|
<separator string="Recurring Invoices" attrs="{'invisible': [('recurring_invoices','!=',True)]}"/> |
||||
|
<div> |
||||
|
<field name="recurring_invoices" on_change="onchange_recurring_invoices(recurring_invoices, date_start)" class="oe_inline"/> |
||||
|
<label for="recurring_invoices" /> |
||||
|
<button class="oe_link" name="recurring_create_invoice" attrs="{'invisible': [('recurring_invoices','!=',True)]}" string=". create invoices" type="object" groups="base.group_no_one"/> |
||||
|
</div> |
||||
|
<group attrs="{'invisible': [('recurring_invoices','!=',True)]}"> |
||||
|
<label for="recurring_interval"/> |
||||
|
<div> |
||||
|
<field name="recurring_interval" class="oe_inline" attrs="{'required': [('recurring_invoices', '=', True)]}"/> |
||||
|
<field name="recurring_rule_type" class="oe_inline" attrs="{'required': [('recurring_invoices', '=', True)]}"/> |
||||
|
</div> |
||||
|
<field name="recurring_next_date"/> |
||||
|
</group> |
||||
|
<label for="recurring_invoice_line_ids" attrs="{'invisible': [('recurring_invoices','=',False)]}"/> |
||||
|
<div attrs="{'invisible': [('recurring_invoices','=',False)]}"> |
||||
|
<field name="recurring_invoice_line_ids"> |
||||
|
<tree string="Account Analytic Lines" editable="bottom"> |
||||
|
<field name="product_id" on_change="product_id_change(product_id, uom_id, quantity, name, parent.partner_id, price_unit, parent.pricelist_id, parent.company_id)"/> |
||||
|
<field name="name"/> |
||||
|
<field name="quantity"/> |
||||
|
<field name="uom_id"/> |
||||
|
<field name="price_unit"/> |
||||
|
<field name="price_subtotal"/> |
||||
|
</tree> |
||||
|
</field> |
||||
|
</div> |
||||
|
</group> |
||||
|
</field> |
||||
|
</record> |
||||
|
|
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,145 @@ |
|||||
|
# Translation of OpenERP Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * account_analytic_analysis_recurring |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: view:account.analytic.account:0 |
||||
|
msgid ". create invoices" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: view:account.analytic.account:0 |
||||
|
msgid "Account Analytic Lines" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:_description:0 |
||||
|
#: field:account.analytic.invoice.line,analytic_account_id:0 |
||||
|
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_account |
||||
|
#, python-format |
||||
|
msgid "Analytic Account" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_next_date:0 |
||||
|
msgid "Date of Next Invoice" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Day(s)" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,name:0 |
||||
|
msgid "Description" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:130 |
||||
|
#, python-format |
||||
|
msgid "Error!" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_invoices:0 |
||||
|
msgid "Generate recurring invoices automatically" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_invoice_line_ids:0 |
||||
|
msgid "Invoice Lines" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: help:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Invoice automatically repeat at specified interval" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Month(s)" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:125 |
||||
|
#, python-format |
||||
|
msgid "No Customer Defined!" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:131 |
||||
|
#, python-format |
||||
|
msgid "Please define a sale journal for the company \"%s\"." |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,product_id:0 |
||||
|
msgid "Product" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,quantity:0 |
||||
|
msgid "Quantity" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Recurrency" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: view:account.analytic.account:0 |
||||
|
msgid "Recurring Invoices" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_interval:0 |
||||
|
msgid "Repeat Every" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: help:account.analytic.account,recurring_interval:0 |
||||
|
msgid "Repeat every (Days/Week/Month/Year)" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,price_subtotal:0 |
||||
|
msgid "Sub Total" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,price_unit:0 |
||||
|
msgid "Unit Price" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,uom_id:0 |
||||
|
msgid "Unit of Measure" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Week(s)" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Year(s)" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:125 |
||||
|
#, python-format |
||||
|
msgid "You must first select a Customer for Contract %s!" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:_description:0 |
||||
|
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_invoice_line |
||||
|
#, python-format |
||||
|
msgid "account.analytic.invoice.line" |
||||
|
msgstr "" |
@ -0,0 +1,156 @@ |
|||||
|
# Translation of OpenERP Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * account_analytic_analysis_recurring |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: OpenERP Server 7.0\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2014-07-11 13:24+0000\n" |
||||
|
"PO-Revision-Date: 2014-07-11 13:24+0000\n" |
||||
|
"Last-Translator: <>\n" |
||||
|
"Language-Team: \n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: \n" |
||||
|
"Plural-Forms: \n" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: view:account.analytic.account:0 |
||||
|
msgid ". create invoices" |
||||
|
msgstr ". create invoices" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: view:account.analytic.account:0 |
||||
|
msgid "Account Analytic Lines" |
||||
|
msgstr "Kostenplaatsenboekingen" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:_description:0 |
||||
|
#: field:account.analytic.invoice.line,analytic_account_id:0 |
||||
|
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_account |
||||
|
#, python-format |
||||
|
msgid "Analytic Account" |
||||
|
msgstr "Kostenplaats" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_next_date:0 |
||||
|
msgid "Date of Next Invoice" |
||||
|
msgstr "Datum volgende factuur" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Day(s)" |
||||
|
msgstr "Dag(en)" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,name:0 |
||||
|
msgid "Description" |
||||
|
msgstr "Omschrijving" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:130 |
||||
|
#, python-format |
||||
|
msgid "Error!" |
||||
|
msgstr "Fout" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_invoices:0 |
||||
|
msgid "Generate recurring invoices automatically" |
||||
|
msgstr "Periodieke facturering" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_invoice_line_ids:0 |
||||
|
msgid "Invoice Lines" |
||||
|
msgstr "Sjablonen factuurregels" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: help:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Invoice automatically repeat at specified interval" |
||||
|
msgstr "Factureer automatisch met dit interval" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Month(s)" |
||||
|
msgstr "Maand(en)" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:125 |
||||
|
#, python-format |
||||
|
msgid "No Customer Defined!" |
||||
|
msgstr "Er is geen klant ingesteld." |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:131 |
||||
|
#, python-format |
||||
|
msgid "Please define a sale journal for the company \"%s\"." |
||||
|
msgstr "Er moet een inkoopdagboek worden ingesteld voor bedrijf \"%s\"." |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,product_id:0 |
||||
|
msgid "Product" |
||||
|
msgstr "Product" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,quantity:0 |
||||
|
msgid "Quantity" |
||||
|
msgstr "Hoeveelheid" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Recurrency" |
||||
|
msgstr "Herhaling" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: view:account.analytic.account:0 |
||||
|
msgid "Recurring Invoices" |
||||
|
msgstr "Periodieke facturen" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.account,recurring_interval:0 |
||||
|
msgid "Repeat Every" |
||||
|
msgstr "Herhaal elke:" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: help:account.analytic.account,recurring_interval:0 |
||||
|
msgid "Repeat every (Days/Week/Month/Year)" |
||||
|
msgstr "Herhaal elke (dag/week/maand/jaar)" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,price_subtotal:0 |
||||
|
msgid "Sub Total" |
||||
|
msgstr "Subtotaal" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,price_unit:0 |
||||
|
msgid "Unit Price" |
||||
|
msgstr "Prijs per eenheid" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: field:account.analytic.invoice.line,uom_id:0 |
||||
|
msgid "Unit of Measure" |
||||
|
msgstr "Maateenheid" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Week(s)" |
||||
|
msgstr "Week/weken" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: selection:account.analytic.account,recurring_rule_type:0 |
||||
|
msgid "Year(s)" |
||||
|
msgstr "Jaar" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:addons/account_analytic_analysis_recurring/account_analytic_analysis_recurring.py:125 |
||||
|
#, python-format |
||||
|
msgid "You must first select a Customer for Contract %s!" |
||||
|
msgstr " Er moet eerst een klant worden ingesteld op contract %s!" |
||||
|
|
||||
|
#. module: account_analytic_analysis_recurring |
||||
|
#: code:_description:0 |
||||
|
#: model:ir.model,name:account_analytic_analysis_recurring.model_account_analytic_invoice_line |
||||
|
#, python-format |
||||
|
msgid "account.analytic.invoice.line" |
||||
|
msgstr "account.analytic.invoice.line" |
||||
|
|
@ -1,100 +0,0 @@ |
|||||
========= |
|
||||
Agreement |
|
||||
========= |
|
||||
|
|
||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
||||
!! This file is generated by oca-gen-addon-readme !! |
|
||||
!! changes will be overwritten. !! |
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
||||
|
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png |
|
||||
:target: https://odoo-community.org/page/development-status |
|
||||
:alt: Beta |
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png |
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|
||||
:alt: License: AGPL-3 |
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github |
|
||||
:target: https://github.com/OCA/contract/tree/12.0/agreement |
|
||||
:alt: OCA/contract |
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png |
|
||||
:target: https://translation.odoo-community.org/projects/contract-12-0/contract-12-0-agreement |
|
||||
:alt: Translate me on Weblate |
|
||||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png |
|
||||
:target: https://runbot.odoo-community.org/runbot/110/12.0 |
|
||||
:alt: Try me on Runbot |
|
||||
|
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5| |
|
||||
|
|
||||
This module adds an *Agreement* object with the following properties: |
|
||||
|
|
||||
* code, |
|
||||
* name, |
|
||||
* link to a partner, |
|
||||
* signature date. |
|
||||
* start date. |
|
||||
* end date. |
|
||||
|
|
||||
Optionally, you can also enable using: |
|
||||
* agreement types |
|
||||
* a flag to set an agreement as a template agreement |
|
||||
|
|
||||
(Install agreement_sale to get the configuration settings for these). |
|
||||
|
|
||||
**Table of contents** |
|
||||
|
|
||||
.. contents:: |
|
||||
:local: |
|
||||
|
|
||||
Bug Tracker |
|
||||
=========== |
|
||||
|
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/contract/issues>`_. |
|
||||
In case of trouble, please check there if your issue has already been reported. |
|
||||
If you spotted it first, help us smashing it by providing a detailed and welcomed |
|
||||
`feedback <https://github.com/OCA/contract/issues/new?body=module:%20agreement%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. |
|
||||
|
|
||||
Do not contact contributors directly about support or help with technical issues. |
|
||||
|
|
||||
Credits |
|
||||
======= |
|
||||
|
|
||||
Authors |
|
||||
~~~~~~~ |
|
||||
|
|
||||
* Akretion |
|
||||
* Yves Goldberg (Ygol Internetwork) |
|
||||
|
|
||||
Contributors |
|
||||
~~~~~~~~~~~~ |
|
||||
|
|
||||
* Alexis de Lattre <alexis.delattre@akretion.com> |
|
||||
* Yves Goldberg <yves@ygol.com> |
|
||||
* Alexandre Fayolle <alexandre.fayolle@camptocamp.com> |
|
||||
|
|
||||
Maintainers |
|
||||
~~~~~~~~~~~ |
|
||||
|
|
||||
This module is maintained by the OCA. |
|
||||
|
|
||||
.. image:: https://odoo-community.org/logo.png |
|
||||
:alt: Odoo Community Association |
|
||||
:target: https://odoo-community.org |
|
||||
|
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|
||||
mission is to support the collaborative development of Odoo features and |
|
||||
promote its widespread use. |
|
||||
|
|
||||
.. |maintainer-ygol| image:: https://github.com/ygol.png?size=40px |
|
||||
:target: https://github.com/ygol |
|
||||
:alt: ygol |
|
||||
.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px |
|
||||
:target: https://github.com/alexis-via |
|
||||
:alt: alexis-via |
|
||||
|
|
||||
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__: |
|
||||
|
|
||||
|maintainer-ygol| |maintainer-alexis-via| |
|
||||
|
|
||||
This module is part of the `OCA/contract <https://github.com/OCA/contract/tree/12.0/agreement>`_ project on GitHub. |
|
||||
|
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
|
@ -1 +0,0 @@ |
|||||
from . import models |
|
@ -1,28 +0,0 @@ |
|||||
# © 2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
{ |
|
||||
'name': 'Agreement', |
|
||||
'summary': "Adds an agreement object", |
|
||||
'version': '12.0.1.0.0', |
|
||||
'category': 'Contract', |
|
||||
'author': 'Akretion, ' |
|
||||
'Yves Goldberg (Ygol Internetwork), ' |
|
||||
'Odoo Community Association (OCA)', |
|
||||
'website': 'https://github.com/oca/contract', |
|
||||
'license': 'AGPL-3', |
|
||||
'depends': ['base'], |
|
||||
'data': [ |
|
||||
'security/ir.model.access.csv', |
|
||||
'security/agreement_security.xml', |
|
||||
'views/agreement.xml', |
|
||||
'views/agreement_type.xml', |
|
||||
], |
|
||||
'demo': ['demo/demo.xml'], |
|
||||
'development_status': 'Beta', |
|
||||
'maintainers': [ |
|
||||
'ygol', |
|
||||
'alexis-via', |
|
||||
], |
|
||||
'installable': True, |
|
||||
} |
|
@ -1,63 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<!-- |
|
||||
© 2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
--> |
|
||||
|
|
||||
<odoo noupdate="1"> |
|
||||
|
|
||||
|
|
||||
<record id="market1" model="agreement"> |
|
||||
<field name="code">C2C-IT0042</field> |
|
||||
<field name="name">Hardware IT</field> |
|
||||
<field name="partner_id" ref="base.res_partner_12"/> |
|
||||
<field name="signature_date">2017-09-10</field> |
|
||||
<field name="start_date">2017-09-10</field> |
|
||||
<field name="end_date">2018-09-10</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="market2" model="agreement"> |
|
||||
<field name="code">C2C-IT0043</field> |
|
||||
<field name="name">Fiber access office Lausanne</field> |
|
||||
<field name="partner_id" ref="base.res_partner_12"/> |
|
||||
<field name="signature_date" eval="time.strftime('%Y-01-01')"/> |
|
||||
<field name="start_date" eval="time.strftime('%Y-01-01')"/> |
|
||||
<field name="end_date" eval="time.strftime('%Y-01-01')"/> |
|
||||
</record> |
|
||||
|
|
||||
<record id="market3" model="agreement"> |
|
||||
<field name="code">AGR-VETO001</field> |
|
||||
<field name="name">Vétérinaire</field> |
|
||||
<field name="partner_id" ref="base.res_partner_2"/> |
|
||||
<field name="signature_date">2017-08-01</field> |
|
||||
<field name="start_date">2017-08-01</field> |
|
||||
<field name="end_date">2018-08-01</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="market4" model="agreement"> |
|
||||
<field name="code">AGR-TEL001</field> |
|
||||
<field name="name">Wazo IPBX deployment and maintenance</field> |
|
||||
<field name="partner_id" ref="base.res_partner_2"/> |
|
||||
<field name="signature_date">2017-05-05</field> |
|
||||
<field name="start_date">2017-05-05</field> |
|
||||
<field name="end_date">2018-09-10</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="market5" model="agreement"> |
|
||||
<field name="code">BUY-VOIP012</field> |
|
||||
<field name="name">SIP Phones supply</field> |
|
||||
<field name="partner_id" ref="base.res_partner_1"/> |
|
||||
<field name="signature_date" eval="time.strftime('%Y-01-01')"/> |
|
||||
<field name="start_date" eval="time.strftime('%Y-01-01')"/> |
|
||||
<field name="end_date" eval="time.strftime('%Y-01-01')"/> |
|
||||
</record> |
|
||||
|
|
||||
<record id="market6" model="agreement"> |
|
||||
<field name="code">BUY-VOIP013</field> |
|
||||
<field name="name">SIP-ISDN gateways</field> |
|
||||
<field name="partner_id" ref="base.res_partner_3"/> |
|
||||
<field name="signature_date">2017-09-02</field> |
|
||||
</record> |
|
||||
|
|
||||
|
|
||||
</odoo> |
|
@ -1,214 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 12.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"Last-Translator: <>\n" |
|
||||
"Language-Team: \n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: \n" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__active |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__active |
|
||||
msgid "Active" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model,name:agreement.model_agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Agreement" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__agreement_type_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_form_view |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Agreement Type" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_type_action |
|
||||
#: model:ir.model,name:agreement.model_agreement_type |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_type_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
msgid "Agreement Types" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_action |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_tree |
|
||||
msgid "Agreements" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Archived" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__company_id |
|
||||
msgid "Company" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Configuration" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_uid |
|
||||
msgid "Created by" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_date |
|
||||
msgid "Created on" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__display_name |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__display_name |
|
||||
msgid "Display Name" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__end_date |
|
||||
msgid "End Date" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__id |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__id |
|
||||
msgid "ID" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__code |
|
||||
msgid "ID used for internal contract tracking." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__active |
|
||||
msgid "If unchecked, it will allow you to hide the agreement without removing it." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__is_template |
|
||||
msgid "Is a Template?" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement____last_update |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type____last_update |
|
||||
msgid "Last Modified on" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_uid |
|
||||
msgid "Last Updated by" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_date |
|
||||
msgid "Last Updated on" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__name |
|
||||
msgid "Name" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Name or Number" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__partner_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Partner" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__code |
|
||||
msgid "Reference" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Search Agreements" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__agreement_type_id |
|
||||
msgid "Select the type of agreement" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__is_template |
|
||||
msgid "Set if the agreement is a template. Template agreements don't require a partner." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__signature_date |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Signature Date" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__start_date |
|
||||
msgid "Start Date" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__partner_id |
|
||||
msgid "The customer or vendor this agreement is related to." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: sql_constraint:agreement:0 |
|
||||
msgid "This agreement code already exists for this partner!" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__name |
|
||||
msgid "Title" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
msgid "Type Name" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_template |
|
||||
msgid "Use agreement template" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_type |
|
||||
msgid "Use agreement type" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__end_date |
|
||||
msgid "When the agreement ends." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__start_date |
|
||||
msgid "When the agreement starts." |
|
||||
msgstr "" |
|
||||
|
|
@ -1,232 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 12.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"PO-Revision-Date: 2019-07-28 11:47+0000\n" |
|
||||
"Last-Translator: jcleonard2018 <jcl@solutionsmakers.fr>\n" |
|
||||
"Language-Team: none\n" |
|
||||
"Language: fr\n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n" |
|
||||
"X-Generator: Weblate 3.7.1\n" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__active |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__active |
|
||||
msgid "Active" |
|
||||
msgstr "Actif" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model,name:agreement.model_agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Agreement" |
|
||||
msgstr "Accord" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__agreement_type_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_form_view |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
#, fuzzy |
|
||||
#| msgid "Agreement" |
|
||||
msgid "Agreement Type" |
|
||||
msgstr "Accord" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_type_action |
|
||||
#: model:ir.model,name:agreement.model_agreement_type |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_type_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
#, fuzzy |
|
||||
#| msgid "Agreements" |
|
||||
msgid "Agreement Types" |
|
||||
msgstr "Accords" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_action |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_tree |
|
||||
msgid "Agreements" |
|
||||
msgstr "Accords" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Archived" |
|
||||
msgstr "Archivé" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__company_id |
|
||||
msgid "Company" |
|
||||
msgstr "Entreprise" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Configuration" |
|
||||
msgstr "Configuration" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_uid |
|
||||
msgid "Created by" |
|
||||
msgstr "Créé par" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_date |
|
||||
msgid "Created on" |
|
||||
msgstr "Créé le" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__display_name |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__display_name |
|
||||
msgid "Display Name" |
|
||||
msgstr "Nom d'affichage" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__end_date |
|
||||
msgid "End Date" |
|
||||
msgstr "Date de fin" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__id |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__id |
|
||||
msgid "ID" |
|
||||
msgstr "ID" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__code |
|
||||
msgid "ID used for internal contract tracking." |
|
||||
msgstr "Numéro utilisé pour le suivi interne du contrat." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__active |
|
||||
msgid "" |
|
||||
"If unchecked, it will allow you to hide the agreement without removing it." |
|
||||
msgstr "Si coché, Cela vous permettra de cacher le contrat sans l'enlever." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__is_template |
|
||||
msgid "Is a Template?" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement____last_update |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type____last_update |
|
||||
msgid "Last Modified on" |
|
||||
msgstr "Dernière modification le" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_uid |
|
||||
msgid "Last Updated by" |
|
||||
msgstr "Dernière mise à jour par" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_date |
|
||||
msgid "Last Updated on" |
|
||||
msgstr "Dernière mise à jour le" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__name |
|
||||
msgid "Name" |
|
||||
msgstr "Nom" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Name or Number" |
|
||||
msgstr "Nom ou Numéro" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__partner_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Partner" |
|
||||
msgstr "Partenaire" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__code |
|
||||
msgid "Reference" |
|
||||
msgstr "Référence" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Search Agreements" |
|
||||
msgstr "Recherche Accords" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__agreement_type_id |
|
||||
msgid "Select the type of agreement" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__is_template |
|
||||
msgid "" |
|
||||
"Set if the agreement is a template. Template agreements don't require a " |
|
||||
"partner." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__signature_date |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Signature Date" |
|
||||
msgstr "Date Signature" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__start_date |
|
||||
msgid "Start Date" |
|
||||
msgstr "Date Début" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__partner_id |
|
||||
msgid "The customer or vendor this agreement is related to." |
|
||||
msgstr "Client ou fournisseur avec lequel le contrat est lié." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: sql_constraint:agreement:0 |
|
||||
msgid "This agreement code already exists for this partner!" |
|
||||
msgstr "Code accord existant pour ce partenaire !" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__name |
|
||||
msgid "Title" |
|
||||
msgstr "Titre" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
#, fuzzy |
|
||||
#| msgid "Name" |
|
||||
msgid "Type Name" |
|
||||
msgstr "Nom" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_template |
|
||||
#, fuzzy |
|
||||
#| msgid "When the agreement starts." |
|
||||
msgid "Use agreement template" |
|
||||
msgstr "Quand le contrat débute." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_type |
|
||||
#, fuzzy |
|
||||
#| msgid "When the agreement ends." |
|
||||
msgid "Use agreement type" |
|
||||
msgstr "Quand le contrat finit." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__end_date |
|
||||
msgid "When the agreement ends." |
|
||||
msgstr "Quand le contrat finit." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__start_date |
|
||||
msgid "When the agreement starts." |
|
||||
msgstr "Quand le contrat débute." |
|
||||
|
|
||||
#~ msgid "Code" |
|
||||
#~ msgstr "Code" |
|
@ -1,218 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 12.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"PO-Revision-Date: 2019-11-12 16:34+0000\n" |
|
||||
"Last-Translator: Bole <bole@dajmi5.com>\n" |
|
||||
"Language-Team: none\n" |
|
||||
"Language: hr\n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" |
|
||||
"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" |
|
||||
"X-Generator: Weblate 3.8\n" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__active |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__active |
|
||||
msgid "Active" |
|
||||
msgstr "Aktivan" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model,name:agreement.model_agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Agreement" |
|
||||
msgstr "Sporazum" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__agreement_type_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_form_view |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Agreement Type" |
|
||||
msgstr "Tip sporazuma" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_type_action |
|
||||
#: model:ir.model,name:agreement.model_agreement_type |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_type_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
msgid "Agreement Types" |
|
||||
msgstr "Tipovi sporazuma" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_action |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_tree |
|
||||
msgid "Agreements" |
|
||||
msgstr "Sporazumi" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Archived" |
|
||||
msgstr "Arhivirano" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__company_id |
|
||||
msgid "Company" |
|
||||
msgstr "Tvrtka" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Configuration" |
|
||||
msgstr "Postavke" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_uid |
|
||||
msgid "Created by" |
|
||||
msgstr "Kreirao" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_date |
|
||||
msgid "Created on" |
|
||||
msgstr "Kreirano" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__display_name |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__display_name |
|
||||
msgid "Display Name" |
|
||||
msgstr "Naziv" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__end_date |
|
||||
msgid "End Date" |
|
||||
msgstr "Završni datum" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__id |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__id |
|
||||
msgid "ID" |
|
||||
msgstr "ID" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__code |
|
||||
msgid "ID used for internal contract tracking." |
|
||||
msgstr "ID za interno praćenje sporazuma" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__active |
|
||||
msgid "If unchecked, it will allow you to hide the agreement without removing it." |
|
||||
msgstr "Ako nije označeno, omogućuje vam skrivanje porazuma bez brisanja." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__is_template |
|
||||
msgid "Is a Template?" |
|
||||
msgstr "Je predložak?" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement____last_update |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type____last_update |
|
||||
msgid "Last Modified on" |
|
||||
msgstr "Zadnje uređivano" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_uid |
|
||||
msgid "Last Updated by" |
|
||||
msgstr "Zadnje ažurirano" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_date |
|
||||
msgid "Last Updated on" |
|
||||
msgstr "Zadnje ažuriranje" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__name |
|
||||
msgid "Name" |
|
||||
msgstr "Naziv" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Name or Number" |
|
||||
msgstr "Naziv ili broj" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__partner_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
#, fuzzy |
|
||||
msgid "Partner" |
|
||||
msgstr "Partner" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__code |
|
||||
msgid "Reference" |
|
||||
msgstr "Referenca" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Search Agreements" |
|
||||
msgstr "Pretraži sporazume" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__agreement_type_id |
|
||||
msgid "Select the type of agreement" |
|
||||
msgstr "Odaberi tip sporazuma" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__is_template |
|
||||
msgid "Set if the agreement is a template. Template agreements don't require a partner." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__signature_date |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Signature Date" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__start_date |
|
||||
msgid "Start Date" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__partner_id |
|
||||
msgid "The customer or vendor this agreement is related to." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: sql_constraint:agreement:0 |
|
||||
msgid "This agreement code already exists for this partner!" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__name |
|
||||
msgid "Title" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
msgid "Type Name" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_template |
|
||||
msgid "Use agreement template" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_type |
|
||||
msgid "Use agreement type" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__end_date |
|
||||
msgid "When the agreement ends." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__start_date |
|
||||
msgid "When the agreement starts." |
|
||||
msgstr "" |
|
@ -1,218 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 12.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"PO-Revision-Date: 2019-12-16 15:05+0000\n" |
|
||||
"Last-Translator: Augusto D. Lisbôa <augusto.diniz.l@gmail.com>\n" |
|
||||
"Language-Team: none\n" |
|
||||
"Language: pt_BR\n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n" |
|
||||
"X-Generator: Weblate 3.9.1\n" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__active |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__active |
|
||||
msgid "Active" |
|
||||
msgstr "Ativo" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model,name:agreement.model_agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Agreement" |
|
||||
msgstr "Acordo" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__agreement_type_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_form_view |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Agreement Type" |
|
||||
msgstr "Tipo de acordo" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_type_action |
|
||||
#: model:ir.model,name:agreement.model_agreement_type |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_type_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
msgid "Agreement Types" |
|
||||
msgstr "Tipos de acordos" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_action |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_tree |
|
||||
msgid "Agreements" |
|
||||
msgstr "Acordo" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Archived" |
|
||||
msgstr "Arquivado" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__company_id |
|
||||
msgid "Company" |
|
||||
msgstr "Compania" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Configuration" |
|
||||
msgstr "Configuração" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_uid |
|
||||
msgid "Created by" |
|
||||
msgstr "Criado por" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_date |
|
||||
msgid "Created on" |
|
||||
msgstr "Criado em" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__display_name |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__display_name |
|
||||
msgid "Display Name" |
|
||||
msgstr "Nome exibido" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__end_date |
|
||||
msgid "End Date" |
|
||||
msgstr "Data final" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__id |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__id |
|
||||
msgid "ID" |
|
||||
msgstr "ID" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__code |
|
||||
msgid "ID used for internal contract tracking." |
|
||||
msgstr "ID interno para rastreamento de contrato." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__active |
|
||||
msgid "If unchecked, it will allow you to hide the agreement without removing it." |
|
||||
msgstr "Se desmarcada, permitirá ocultar o contrato sem removê-lo." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__is_template |
|
||||
msgid "Is a Template?" |
|
||||
msgstr "É um modelo?" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement____last_update |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type____last_update |
|
||||
msgid "Last Modified on" |
|
||||
msgstr "Última modificação" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_uid |
|
||||
msgid "Last Updated by" |
|
||||
msgstr "Atualizado recentemente por" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_date |
|
||||
msgid "Last Updated on" |
|
||||
msgstr "Última atualização em" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__name |
|
||||
msgid "Name" |
|
||||
msgstr "Nome" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Name or Number" |
|
||||
msgstr "Nome ou número" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__partner_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Partner" |
|
||||
msgstr "Parceiro" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__code |
|
||||
msgid "Reference" |
|
||||
msgstr "Referência" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Search Agreements" |
|
||||
msgstr "Buscar acordos" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__agreement_type_id |
|
||||
msgid "Select the type of agreement" |
|
||||
msgstr "Selecione o tipo do contrato" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__is_template |
|
||||
msgid "Set if the agreement is a template. Template agreements don't require a partner." |
|
||||
msgstr "" |
|
||||
"Defina se o contrato é um modelo. Os contratos de modelo não exigem um " |
|
||||
"parceiro." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__signature_date |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Signature Date" |
|
||||
msgstr "Data de assinatura" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__start_date |
|
||||
msgid "Start Date" |
|
||||
msgstr "Data de início" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__partner_id |
|
||||
msgid "The customer or vendor this agreement is related to." |
|
||||
msgstr "O cliente ou parceiro ao qual este acordo se refere." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: sql_constraint:agreement:0 |
|
||||
msgid "This agreement code already exists for this partner!" |
|
||||
msgstr "Este código de acordo já existe para este parceiro!" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__name |
|
||||
msgid "Title" |
|
||||
msgstr "Título" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
msgid "Type Name" |
|
||||
msgstr "Nome do tipo" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_template |
|
||||
msgid "Use agreement template" |
|
||||
msgstr "Usar modelo de acordo" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_type |
|
||||
msgid "Use agreement type" |
|
||||
msgstr "Usar tipo de acordo" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__end_date |
|
||||
msgid "When the agreement ends." |
|
||||
msgstr "Final do acordo." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__start_date |
|
||||
msgid "When the agreement starts." |
|
||||
msgstr "Início do acordo." |
|
@ -1,227 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 12.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"PO-Revision-Date: 2019-05-04 21:02+0000\n" |
|
||||
"Last-Translator: JC <rdc02271@yahoo.com>\n" |
|
||||
"Language-Team: none\n" |
|
||||
"Language: pt_PT\n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n" |
|
||||
"X-Generator: Weblate 3.5.1\n" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__active |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__active |
|
||||
msgid "Active" |
|
||||
msgstr "Activo" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model,name:agreement.model_agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Agreement" |
|
||||
msgstr "Contrato" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__agreement_type_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_form_view |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
#, fuzzy |
|
||||
#| msgid "Agreement" |
|
||||
msgid "Agreement Type" |
|
||||
msgstr "Contrato" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_type_action |
|
||||
#: model:ir.model,name:agreement.model_agreement_type |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_type_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
#, fuzzy |
|
||||
#| msgid "Agreements" |
|
||||
msgid "Agreement Types" |
|
||||
msgstr "Contratos" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_action |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_tree |
|
||||
msgid "Agreements" |
|
||||
msgstr "Contratos" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Archived" |
|
||||
msgstr "Arquivado" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__company_id |
|
||||
msgid "Company" |
|
||||
msgstr "Empresa" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Configuration" |
|
||||
msgstr "Configuração" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_uid |
|
||||
msgid "Created by" |
|
||||
msgstr "Criado por" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_date |
|
||||
msgid "Created on" |
|
||||
msgstr "Criado em" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__display_name |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__display_name |
|
||||
msgid "Display Name" |
|
||||
msgstr "Nome" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__end_date |
|
||||
msgid "End Date" |
|
||||
msgstr "Fim de Contrato" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__id |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__id |
|
||||
msgid "ID" |
|
||||
msgstr "Código" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__code |
|
||||
msgid "ID used for internal contract tracking." |
|
||||
msgstr "Código usado internamente para acompanhamento do contrato." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__active |
|
||||
msgid "" |
|
||||
"If unchecked, it will allow you to hide the agreement without removing it." |
|
||||
msgstr "Desmarcar se quiser esconder o contrato mas sem o apagar." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__is_template |
|
||||
msgid "Is a Template?" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement____last_update |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type____last_update |
|
||||
msgid "Last Modified on" |
|
||||
msgstr "Modificado em" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_uid |
|
||||
msgid "Last Updated by" |
|
||||
msgstr "Actualizado por" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_date |
|
||||
msgid "Last Updated on" |
|
||||
msgstr "Actualizado em" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__name |
|
||||
msgid "Name" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Name or Number" |
|
||||
msgstr "Nome ou número" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__partner_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Partner" |
|
||||
msgstr "Parceiro" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__code |
|
||||
msgid "Reference" |
|
||||
msgstr "Referência" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Search Agreements" |
|
||||
msgstr "Pesquisar Contratos" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__agreement_type_id |
|
||||
msgid "Select the type of agreement" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__is_template |
|
||||
msgid "" |
|
||||
"Set if the agreement is a template. Template agreements don't require a " |
|
||||
"partner." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__signature_date |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Signature Date" |
|
||||
msgstr "Data da assinatura" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__start_date |
|
||||
msgid "Start Date" |
|
||||
msgstr "Data Inicial" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__partner_id |
|
||||
msgid "The customer or vendor this agreement is related to." |
|
||||
msgstr "O cliente ou fornecedor com o qual este contrato está relacionado." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: sql_constraint:agreement:0 |
|
||||
msgid "This agreement code already exists for this partner!" |
|
||||
msgstr "Este código de contrato já existe para este parceiro!" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__name |
|
||||
msgid "Title" |
|
||||
msgstr "Título" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
msgid "Type Name" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_template |
|
||||
#, fuzzy |
|
||||
#| msgid "When the agreement starts." |
|
||||
msgid "Use agreement template" |
|
||||
msgstr "A data em que se inicia o contrato." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_type |
|
||||
#, fuzzy |
|
||||
#| msgid "When the agreement ends." |
|
||||
msgid "Use agreement type" |
|
||||
msgstr "A data em que termina o contrato." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__end_date |
|
||||
msgid "When the agreement ends." |
|
||||
msgstr "A data em que termina o contrato." |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__start_date |
|
||||
msgid "When the agreement starts." |
|
||||
msgstr "A data em que se inicia o contrato." |
|
@ -1,219 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 12.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"PO-Revision-Date: 2019-10-16 18:31+0000\n" |
|
||||
"Last-Translator: 黎伟杰 <674416404@qq.com>\n" |
|
||||
"Language-Team: none\n" |
|
||||
"Language: zh_CN\n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: nplurals=1; plural=0;\n" |
|
||||
"X-Generator: Weblate 3.8\n" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__active |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__active |
|
||||
msgid "Active" |
|
||||
msgstr "有效" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model,name:agreement.model_agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Agreement" |
|
||||
msgstr "协议" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__agreement_type_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_form_view |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Agreement Type" |
|
||||
msgstr "协议类型" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_type_action |
|
||||
#: model:ir.model,name:agreement.model_agreement_type |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_type_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
msgid "Agreement Types" |
|
||||
msgstr "协议类型" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.actions.act_window,name:agreement.agreement_action |
|
||||
#: model:ir.ui.menu,name:agreement.agreement_menu |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_tree |
|
||||
msgid "Agreements" |
|
||||
msgstr "协议" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_search |
|
||||
msgid "Archived" |
|
||||
msgstr "已归档" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__company_id |
|
||||
msgid "Company" |
|
||||
msgstr "公司" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_form |
|
||||
msgid "Configuration" |
|
||||
msgstr "配置" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_uid |
|
||||
msgid "Created by" |
|
||||
msgstr "创建者" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__create_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__create_date |
|
||||
msgid "Created on" |
|
||||
msgstr "创建时间" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__display_name |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__display_name |
|
||||
msgid "Display Name" |
|
||||
msgstr "显示名称" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__end_date |
|
||||
msgid "End Date" |
|
||||
msgstr "结束日期" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__id |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__id |
|
||||
msgid "ID" |
|
||||
msgstr "ID" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__code |
|
||||
msgid "ID used for internal contract tracking." |
|
||||
msgstr "用于内部合同跟踪的ID。" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__active |
|
||||
msgid "" |
|
||||
"If unchecked, it will allow you to hide the agreement without removing it." |
|
||||
msgstr "如果不选中,它将允许您隐藏协议而不删除它。" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__is_template |
|
||||
msgid "Is a Template?" |
|
||||
msgstr "是模板吗?" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement____last_update |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type____last_update |
|
||||
msgid "Last Modified on" |
|
||||
msgstr "最后修改时间" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_uid |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_uid |
|
||||
msgid "Last Updated by" |
|
||||
msgstr "最后更新者" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__write_date |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__write_date |
|
||||
msgid "Last Updated on" |
|
||||
msgstr "最后更新时间" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement_type__name |
|
||||
msgid "Name" |
|
||||
msgstr "名称" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Name or Number" |
|
||||
msgstr "姓名或号码" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__partner_id |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Partner" |
|
||||
msgstr "业务伙伴" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__code |
|
||||
msgid "Reference" |
|
||||
msgstr "参考" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Search Agreements" |
|
||||
msgstr "搜索协议" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__agreement_type_id |
|
||||
msgid "Select the type of agreement" |
|
||||
msgstr "选择协议类型" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__is_template |
|
||||
msgid "" |
|
||||
"Set if the agreement is a template. Template agreements don't require a " |
|
||||
"partner." |
|
||||
msgstr "如果协议是模板,则设置。模板协议不需要合作伙伴。" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__signature_date |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_search |
|
||||
msgid "Signature Date" |
|
||||
msgstr "签名日期" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__start_date |
|
||||
msgid "Start Date" |
|
||||
msgstr "开始日期" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__partner_id |
|
||||
msgid "The customer or vendor this agreement is related to." |
|
||||
msgstr "与本协议相关的客户或供应商。" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: sql_constraint:agreement:0 |
|
||||
msgid "This agreement code already exists for this partner!" |
|
||||
msgstr "此合作伙伴的协议代码已存在!" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,field_description:agreement.field_agreement__name |
|
||||
msgid "Title" |
|
||||
msgstr "标题" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement.agreement_type_list_view |
|
||||
msgid "Type Name" |
|
||||
msgstr "类型名称" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_template |
|
||||
msgid "Use agreement template" |
|
||||
msgstr "使用协议模板" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:res.groups,name:agreement.group_use_agreement_type |
|
||||
msgid "Use agreement type" |
|
||||
msgstr "使用协议类型" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__end_date |
|
||||
msgid "When the agreement ends." |
|
||||
msgstr "协议结束时。" |
|
||||
|
|
||||
#. module: agreement |
|
||||
#: model:ir.model.fields,help:agreement.field_agreement__start_date |
|
||||
msgid "When the agreement starts." |
|
||||
msgstr "协议开始时。" |
|
@ -1,2 +0,0 @@ |
|||||
from . import agreement |
|
||||
from . import agreement_type |
|
@ -1,50 +0,0 @@ |
|||||
# © 2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
|
|
||||
from odoo import models, fields |
|
||||
|
|
||||
|
|
||||
class Agreement(models.Model): |
|
||||
_name = 'agreement' |
|
||||
_description = 'Agreement' |
|
||||
|
|
||||
code = fields.Char(required=True, copy=False) |
|
||||
name = fields.Char(required=True) |
|
||||
partner_id = fields.Many2one( |
|
||||
'res.partner', string='Partner', ondelete='restrict', |
|
||||
domain=[('parent_id', '=', False)]) |
|
||||
company_id = fields.Many2one( |
|
||||
'res.company', string='Company', |
|
||||
default=lambda self: self.env['res.company']._company_default_get()) |
|
||||
is_template = fields.Boolean( |
|
||||
string="Is a Template?", |
|
||||
default=False, |
|
||||
copy=False, |
|
||||
help="Set if the agreement is a template. " |
|
||||
"Template agreements don't require a partner." |
|
||||
) |
|
||||
agreement_type_id = fields.Many2one( |
|
||||
'agreement.type', |
|
||||
string="Agreement Type", |
|
||||
help="Select the type of agreement", |
|
||||
) |
|
||||
active = fields.Boolean(default=True) |
|
||||
signature_date = fields.Date() |
|
||||
start_date = fields.Date() |
|
||||
end_date = fields.Date() |
|
||||
|
|
||||
def name_get(self): |
|
||||
res = [] |
|
||||
for agr in self: |
|
||||
name = agr.name |
|
||||
if agr.code: |
|
||||
name = '[%s] %s' % (agr.code, agr.name) |
|
||||
res.append((agr.id, name)) |
|
||||
return res |
|
||||
|
|
||||
_sql_constraints = [( |
|
||||
'code_partner_company_unique', |
|
||||
'unique(code, partner_id, company_id)', |
|
||||
'This agreement code already exists for this partner!' |
|
||||
)] |
|
@ -1,12 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
class AgreementType(models.Model): |
|
||||
_name = "agreement.type" |
|
||||
_description = "Agreement Types" |
|
||||
|
|
||||
name = fields.Char(string="Name", required=True) |
|
||||
active = fields.Boolean(default=True) |
|
@ -1,3 +0,0 @@ |
|||||
* Alexis de Lattre <alexis.delattre@akretion.com> |
|
||||
* Yves Goldberg <yves@ygol.com> |
|
||||
* Alexandre Fayolle <alexandre.fayolle@camptocamp.com> |
|
@ -1,14 +0,0 @@ |
|||||
This module adds an *Agreement* object with the following properties: |
|
||||
|
|
||||
* code, |
|
||||
* name, |
|
||||
* link to a partner, |
|
||||
* signature date. |
|
||||
* start date. |
|
||||
* end date. |
|
||||
|
|
||||
Optionally, you can also enable using: |
|
||||
* agreement types |
|
||||
* a flag to set an agreement as a template agreement |
|
||||
|
|
||||
(Install agreement_sale to get the configuration settings for these). |
|
@ -1,26 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<!-- |
|
||||
© 2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
--> |
|
||||
|
|
||||
<odoo noupdate="1"> |
|
||||
|
|
||||
|
|
||||
<record id="agreement_rule" model="ir.rule"> |
|
||||
<field name="name">Agreement multi-company</field> |
|
||||
<field name="model_id" ref="model_agreement"/> |
|
||||
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="group_use_agreement_type" model="res.groups"> |
|
||||
<field name="name">Use agreement type</field> |
|
||||
<field name="category_id" ref="base.module_category_hidden"/> |
|
||||
</record> |
|
||||
|
|
||||
<record id="group_use_agreement_template" model="res.groups"> |
|
||||
<field name="name">Use agreement template</field> |
|
||||
<field name="category_id" ref="base.module_category_hidden"/> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,3 +0,0 @@ |
|||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
|
||||
access_agreement_read,Read access on agreement to Employees,model_agreement,base.group_user,1,0,0,0 |
|
||||
access_agreement_full,Full access on agreement grp,model_agreement,base.group_no_one,1,1,1,1 |
|
Before Width: 128 | Height: 128 | Size: 9.2 KiB |
@ -1,436 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
|
||||
<head> |
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
|
||||
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" /> |
|
||||
<title>Agreement</title> |
|
||||
<style type="text/css"> |
|
||||
|
|
||||
/* |
|
||||
:Author: David Goodger (goodger@python.org) |
|
||||
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $ |
|
||||
:Copyright: This stylesheet has been placed in the public domain. |
|
||||
|
|
||||
Default cascading style sheet for the HTML output of Docutils. |
|
||||
|
|
||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to |
|
||||
customize this style sheet. |
|
||||
*/ |
|
||||
|
|
||||
/* used to remove borders from tables and images */ |
|
||||
.borderless, table.borderless td, table.borderless th { |
|
||||
border: 0 } |
|
||||
|
|
||||
table.borderless td, table.borderless th { |
|
||||
/* Override padding for "table.docutils td" with "! important". |
|
||||
The right padding separates the table cells. */ |
|
||||
padding: 0 0.5em 0 0 ! important } |
|
||||
|
|
||||
.first { |
|
||||
/* Override more specific margin styles with "! important". */ |
|
||||
margin-top: 0 ! important } |
|
||||
|
|
||||
.last, .with-subtitle { |
|
||||
margin-bottom: 0 ! important } |
|
||||
|
|
||||
.hidden { |
|
||||
display: none } |
|
||||
|
|
||||
.subscript { |
|
||||
vertical-align: sub; |
|
||||
font-size: smaller } |
|
||||
|
|
||||
.superscript { |
|
||||
vertical-align: super; |
|
||||
font-size: smaller } |
|
||||
|
|
||||
a.toc-backref { |
|
||||
text-decoration: none ; |
|
||||
color: black } |
|
||||
|
|
||||
blockquote.epigraph { |
|
||||
margin: 2em 5em ; } |
|
||||
|
|
||||
dl.docutils dd { |
|
||||
margin-bottom: 0.5em } |
|
||||
|
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] { |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms |
|
||||
dl.docutils dt { |
|
||||
font-weight: bold } |
|
||||
*/ |
|
||||
|
|
||||
div.abstract { |
|
||||
margin: 2em 5em } |
|
||||
|
|
||||
div.abstract p.topic-title { |
|
||||
font-weight: bold ; |
|
||||
text-align: center } |
|
||||
|
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error, |
|
||||
div.hint, div.important, div.note, div.tip, div.warning { |
|
||||
margin: 2em ; |
|
||||
border: medium outset ; |
|
||||
padding: 1em } |
|
||||
|
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title, |
|
||||
div.important p.admonition-title, div.note p.admonition-title, |
|
||||
div.tip p.admonition-title { |
|
||||
font-weight: bold ; |
|
||||
font-family: sans-serif } |
|
||||
|
|
||||
div.attention p.admonition-title, div.caution p.admonition-title, |
|
||||
div.danger p.admonition-title, div.error p.admonition-title, |
|
||||
div.warning p.admonition-title, .code .error { |
|
||||
color: red ; |
|
||||
font-weight: bold ; |
|
||||
font-family: sans-serif } |
|
||||
|
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in |
|
||||
compound paragraphs. |
|
||||
div.compound .compound-first, div.compound .compound-middle { |
|
||||
margin-bottom: 0.5em } |
|
||||
|
|
||||
div.compound .compound-last, div.compound .compound-middle { |
|
||||
margin-top: 0.5em } |
|
||||
*/ |
|
||||
|
|
||||
div.dedication { |
|
||||
margin: 2em 5em ; |
|
||||
text-align: center ; |
|
||||
font-style: italic } |
|
||||
|
|
||||
div.dedication p.topic-title { |
|
||||
font-weight: bold ; |
|
||||
font-style: normal } |
|
||||
|
|
||||
div.figure { |
|
||||
margin-left: 2em ; |
|
||||
margin-right: 2em } |
|
||||
|
|
||||
div.footer, div.header { |
|
||||
clear: both; |
|
||||
font-size: smaller } |
|
||||
|
|
||||
div.line-block { |
|
||||
display: block ; |
|
||||
margin-top: 1em ; |
|
||||
margin-bottom: 1em } |
|
||||
|
|
||||
div.line-block div.line-block { |
|
||||
margin-top: 0 ; |
|
||||
margin-bottom: 0 ; |
|
||||
margin-left: 1.5em } |
|
||||
|
|
||||
div.sidebar { |
|
||||
margin: 0 0 0.5em 1em ; |
|
||||
border: medium outset ; |
|
||||
padding: 1em ; |
|
||||
background-color: #ffffee ; |
|
||||
width: 40% ; |
|
||||
float: right ; |
|
||||
clear: right } |
|
||||
|
|
||||
div.sidebar p.rubric { |
|
||||
font-family: sans-serif ; |
|
||||
font-size: medium } |
|
||||
|
|
||||
div.system-messages { |
|
||||
margin: 5em } |
|
||||
|
|
||||
div.system-messages h1 { |
|
||||
color: red } |
|
||||
|
|
||||
div.system-message { |
|
||||
border: medium outset ; |
|
||||
padding: 1em } |
|
||||
|
|
||||
div.system-message p.system-message-title { |
|
||||
color: red ; |
|
||||
font-weight: bold } |
|
||||
|
|
||||
div.topic { |
|
||||
margin: 2em } |
|
||||
|
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, |
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { |
|
||||
margin-top: 0.4em } |
|
||||
|
|
||||
h1.title { |
|
||||
text-align: center } |
|
||||
|
|
||||
h2.subtitle { |
|
||||
text-align: center } |
|
||||
|
|
||||
hr.docutils { |
|
||||
width: 75% } |
|
||||
|
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left { |
|
||||
clear: left ; |
|
||||
float: left ; |
|
||||
margin-right: 1em } |
|
||||
|
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right { |
|
||||
clear: right ; |
|
||||
float: right ; |
|
||||
margin-left: 1em } |
|
||||
|
|
||||
img.align-center, .figure.align-center, object.align-center { |
|
||||
display: block; |
|
||||
margin-left: auto; |
|
||||
margin-right: auto; |
|
||||
} |
|
||||
|
|
||||
table.align-center { |
|
||||
margin-left: auto; |
|
||||
margin-right: auto; |
|
||||
} |
|
||||
|
|
||||
.align-left { |
|
||||
text-align: left } |
|
||||
|
|
||||
.align-center { |
|
||||
clear: both ; |
|
||||
text-align: center } |
|
||||
|
|
||||
.align-right { |
|
||||
text-align: right } |
|
||||
|
|
||||
/* reset inner alignment in figures */ |
|
||||
div.align-right { |
|
||||
text-align: inherit } |
|
||||
|
|
||||
/* div.align-center * { */ |
|
||||
/* text-align: left } */ |
|
||||
|
|
||||
.align-top { |
|
||||
vertical-align: top } |
|
||||
|
|
||||
.align-middle { |
|
||||
vertical-align: middle } |
|
||||
|
|
||||
.align-bottom { |
|
||||
vertical-align: bottom } |
|
||||
|
|
||||
ol.simple, ul.simple { |
|
||||
margin-bottom: 1em } |
|
||||
|
|
||||
ol.arabic { |
|
||||
list-style: decimal } |
|
||||
|
|
||||
ol.loweralpha { |
|
||||
list-style: lower-alpha } |
|
||||
|
|
||||
ol.upperalpha { |
|
||||
list-style: upper-alpha } |
|
||||
|
|
||||
ol.lowerroman { |
|
||||
list-style: lower-roman } |
|
||||
|
|
||||
ol.upperroman { |
|
||||
list-style: upper-roman } |
|
||||
|
|
||||
p.attribution { |
|
||||
text-align: right ; |
|
||||
margin-left: 50% } |
|
||||
|
|
||||
p.caption { |
|
||||
font-style: italic } |
|
||||
|
|
||||
p.credits { |
|
||||
font-style: italic ; |
|
||||
font-size: smaller } |
|
||||
|
|
||||
p.label { |
|
||||
white-space: nowrap } |
|
||||
|
|
||||
p.rubric { |
|
||||
font-weight: bold ; |
|
||||
font-size: larger ; |
|
||||
color: maroon ; |
|
||||
text-align: center } |
|
||||
|
|
||||
p.sidebar-title { |
|
||||
font-family: sans-serif ; |
|
||||
font-weight: bold ; |
|
||||
font-size: larger } |
|
||||
|
|
||||
p.sidebar-subtitle { |
|
||||
font-family: sans-serif ; |
|
||||
font-weight: bold } |
|
||||
|
|
||||
p.topic-title { |
|
||||
font-weight: bold } |
|
||||
|
|
||||
pre.address { |
|
||||
margin-bottom: 0 ; |
|
||||
margin-top: 0 ; |
|
||||
font: inherit } |
|
||||
|
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code { |
|
||||
margin-left: 2em ; |
|
||||
margin-right: 2em } |
|
||||
|
|
||||
pre.code .ln { color: grey; } /* line numbers */ |
|
||||
pre.code, code { background-color: #eeeeee } |
|
||||
pre.code .comment, code .comment { color: #5C6576 } |
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } |
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 } |
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 } |
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1} |
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289} |
|
||||
|
|
||||
span.classifier { |
|
||||
font-family: sans-serif ; |
|
||||
font-style: oblique } |
|
||||
|
|
||||
span.classifier-delimiter { |
|
||||
font-family: sans-serif ; |
|
||||
font-weight: bold } |
|
||||
|
|
||||
span.interpreted { |
|
||||
font-family: sans-serif } |
|
||||
|
|
||||
span.option { |
|
||||
white-space: nowrap } |
|
||||
|
|
||||
span.pre { |
|
||||
white-space: pre } |
|
||||
|
|
||||
span.problematic { |
|
||||
color: red } |
|
||||
|
|
||||
span.section-subtitle { |
|
||||
/* font-size relative to parent (h1..h6 element) */ |
|
||||
font-size: 80% } |
|
||||
|
|
||||
table.citation { |
|
||||
border-left: solid 1px gray; |
|
||||
margin-left: 1px } |
|
||||
|
|
||||
table.docinfo { |
|
||||
margin: 2em 4em } |
|
||||
|
|
||||
table.docutils { |
|
||||
margin-top: 0.5em ; |
|
||||
margin-bottom: 0.5em } |
|
||||
|
|
||||
table.footnote { |
|
||||
border-left: solid 1px black; |
|
||||
margin-left: 1px } |
|
||||
|
|
||||
table.docutils td, table.docutils th, |
|
||||
table.docinfo td, table.docinfo th { |
|
||||
padding-left: 0.5em ; |
|
||||
padding-right: 0.5em ; |
|
||||
vertical-align: top } |
|
||||
|
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name { |
|
||||
font-weight: bold ; |
|
||||
text-align: left ; |
|
||||
white-space: nowrap ; |
|
||||
padding-left: 0 } |
|
||||
|
|
||||
/* "booktabs" style (no vertical lines) */ |
|
||||
table.docutils.booktabs { |
|
||||
border: 0px; |
|
||||
border-top: 2px solid; |
|
||||
border-bottom: 2px solid; |
|
||||
border-collapse: collapse; |
|
||||
} |
|
||||
table.docutils.booktabs * { |
|
||||
border: 0px; |
|
||||
} |
|
||||
table.docutils.booktabs th { |
|
||||
border-bottom: thin solid; |
|
||||
text-align: left; |
|
||||
} |
|
||||
|
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, |
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { |
|
||||
font-size: 100% } |
|
||||
|
|
||||
ul.auto-toc { |
|
||||
list-style-type: none } |
|
||||
|
|
||||
</style> |
|
||||
</head> |
|
||||
<body> |
|
||||
<div class="document" id="agreement"> |
|
||||
<h1 class="title">Agreement</h1> |
|
||||
|
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
||||
!! This file is generated by oca-gen-addon-readme !! |
|
||||
!! changes will be overwritten. !! |
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> |
|
||||
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/contract/tree/12.0/agreement"><img alt="OCA/contract" src="https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/contract-12-0/contract-12-0-agreement"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/110/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p> |
|
||||
<p>This module adds an <em>Agreement</em> object with the following properties:</p> |
|
||||
<ul class="simple"> |
|
||||
<li>code,</li> |
|
||||
<li>name,</li> |
|
||||
<li>link to a partner,</li> |
|
||||
<li>signature date.</li> |
|
||||
<li>start date.</li> |
|
||||
<li>end date.</li> |
|
||||
</ul> |
|
||||
<p>Optionally, you can also enable using: |
|
||||
* agreement types |
|
||||
* a flag to set an agreement as a template agreement</p> |
|
||||
<p>(Install agreement_sale to get the configuration settings for these).</p> |
|
||||
<p><strong>Table of contents</strong></p> |
|
||||
<div class="contents local topic" id="contents"> |
|
||||
<ul class="simple"> |
|
||||
<li><a class="reference internal" href="#bug-tracker" id="id1">Bug Tracker</a></li> |
|
||||
<li><a class="reference internal" href="#credits" id="id2">Credits</a><ul> |
|
||||
<li><a class="reference internal" href="#authors" id="id3">Authors</a></li> |
|
||||
<li><a class="reference internal" href="#contributors" id="id4">Contributors</a></li> |
|
||||
<li><a class="reference internal" href="#maintainers" id="id5">Maintainers</a></li> |
|
||||
</ul> |
|
||||
</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="bug-tracker"> |
|
||||
<h1><a class="toc-backref" href="#id1">Bug Tracker</a></h1> |
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/contract/issues">GitHub Issues</a>. |
|
||||
In case of trouble, please check there if your issue has already been reported. |
|
||||
If you spotted it first, help us smashing it by providing a detailed and welcomed |
|
||||
<a class="reference external" href="https://github.com/OCA/contract/issues/new?body=module:%20agreement%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p> |
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p> |
|
||||
</div> |
|
||||
<div class="section" id="credits"> |
|
||||
<h1><a class="toc-backref" href="#id2">Credits</a></h1> |
|
||||
<div class="section" id="authors"> |
|
||||
<h2><a class="toc-backref" href="#id3">Authors</a></h2> |
|
||||
<ul class="simple"> |
|
||||
<li>Akretion</li> |
|
||||
<li>Yves Goldberg (Ygol Internetwork)</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="contributors"> |
|
||||
<h2><a class="toc-backref" href="#id4">Contributors</a></h2> |
|
||||
<ul class="simple"> |
|
||||
<li>Alexis de Lattre <<a class="reference external" href="mailto:alexis.delattre@akretion.com">alexis.delattre@akretion.com</a>></li> |
|
||||
<li>Yves Goldberg <<a class="reference external" href="mailto:yves@ygol.com">yves@ygol.com</a>></li> |
|
||||
<li>Alexandre Fayolle <<a class="reference external" href="mailto:alexandre.fayolle@camptocamp.com">alexandre.fayolle@camptocamp.com</a>></li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="maintainers"> |
|
||||
<h2><a class="toc-backref" href="#id5">Maintainers</a></h2> |
|
||||
<p>This module is maintained by the OCA.</p> |
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a> |
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose |
|
||||
mission is to support the collaborative development of Odoo features and |
|
||||
promote its widespread use.</p> |
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p> |
|
||||
<p><a class="reference external" href="https://github.com/ygol"><img alt="ygol" src="https://github.com/ygol.png?size=40px" /></a> <a class="reference external" href="https://github.com/alexis-via"><img alt="alexis-via" src="https://github.com/alexis-via.png?size=40px" /></a></p> |
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/contract/tree/12.0/agreement">OCA/contract</a> project on GitHub.</p> |
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</body> |
|
||||
</html> |
|
@ -1,90 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<!-- |
|
||||
© 2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>) |
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
--> |
|
||||
|
|
||||
<odoo> |
|
||||
|
|
||||
|
|
||||
<record id="agreement_form" model="ir.ui.view"> |
|
||||
<field name="name">agreement.form</field> |
|
||||
<field name="model">agreement</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Agreement"> |
|
||||
<div class="oe_button_box" name="button_box"> |
|
||||
<button name="toggle_active" type="object" |
|
||||
class="oe_stat_button" icon="fa-archive"> |
|
||||
<field name="active" widget="boolean_button" |
|
||||
options='{"terminology": "archive"}'/> |
|
||||
</button> |
|
||||
</div> |
|
||||
<group name="main"> |
|
||||
<group name="left"> |
|
||||
<field name="agreement_type_id" |
|
||||
groups="agreement.group_use_agreement_type"/> |
|
||||
<field name="is_template" groups="agreement.group_use_agreement_template"/> |
|
||||
<field name="partner_id" |
|
||||
attrs="{'required': [('is_template', '=', False)]}"/> |
|
||||
<field name="name"/> |
|
||||
<field name="signature_date"/> |
|
||||
</group> |
|
||||
<group name="right"> |
|
||||
<field name="start_date"/> |
|
||||
<field name="end_date"/> |
|
||||
<field name="code"/> |
|
||||
<field name="company_id" groups="base.group_multi_company"/> |
|
||||
</group> |
|
||||
</group> |
|
||||
<notebook> |
|
||||
<page name="config" string="Configuration" attrs="{'invisible': True}"/> |
|
||||
</notebook> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_tree" model="ir.ui.view"> |
|
||||
<field name="name">agreement.tree</field> |
|
||||
<field name="model">agreement</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree string="Agreements"> |
|
||||
<field name="partner_id"/> |
|
||||
<field name="code"/> |
|
||||
<field name="name"/> |
|
||||
<field name="signature_date"/> |
|
||||
<field name="start_date"/> |
|
||||
<field name="end_date"/> |
|
||||
<field name="company_id" groups="base.group_multi_company"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_search" model="ir.ui.view"> |
|
||||
<field name="name">agreement.search</field> |
|
||||
<field name="model">agreement</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<search string="Search Agreements"> |
|
||||
<field name="name" filter_domain="['|', ('name', 'ilike', self), ('code', 'ilike', self)]" string="Name or Number"/> |
|
||||
<field name="partner_id"/> |
|
||||
<separator/> |
|
||||
<filter name="inactive" string="Archived" domain="[('active', '=', False)]"/> |
|
||||
<group name="groupby"> |
|
||||
<filter name="partner_groupby" string="Partner" |
|
||||
context="{'group_by': 'partner_id'}"/> |
|
||||
<filter name="signature_date_groupby" string="Signature Date" |
|
||||
context="{'group_by': 'signature_date'}"/> |
|
||||
</group> |
|
||||
</search> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_action" model="ir.actions.act_window"> |
|
||||
<field name="name">Agreements</field> |
|
||||
<field name="res_model">agreement</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
<menuitem id="agreement_menu" action="agreement_action" |
|
||||
sequence="100"/> |
|
||||
|
|
||||
</odoo> |
|
@ -1,54 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
<!-- Agreement Type List View--> |
|
||||
<record model="ir.ui.view" id="agreement_type_list_view"> |
|
||||
<field name="name">Agreement Type List</field> |
|
||||
<field name="model">agreement.type</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree string="Agreement Types" default_order="name"> |
|
||||
<field name="name" string="Type Name"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Type Form View --> |
|
||||
<record model="ir.ui.view" id="agreement_type_form_view"> |
|
||||
<field name="name">Agreement Type Form</field> |
|
||||
<field name="model">agreement.type</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Agreement Type"> |
|
||||
<div class="oe_button_box" name="button_box"> |
|
||||
<button name="toggle_active" type="object" |
|
||||
class="oe_stat_button" icon="fa-archive"> |
|
||||
<field name="active" widget="boolean_button" |
|
||||
options='{"terminology": "archive"}'/> |
|
||||
</button> |
|
||||
</div> |
|
||||
<sheet> |
|
||||
<div class="oe_title"> |
|
||||
<label for="name" class="oe_edit_only"/> |
|
||||
<h1><field name="name"/></h1> |
|
||||
</div> |
|
||||
</sheet> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_type_search" model="ir.ui.view"> |
|
||||
<field name="name">agreement.type.search</field> |
|
||||
<field name="model">agreement.type</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<search string="Agreement Type"> |
|
||||
<field name="name"/> |
|
||||
<filter name="archived" string="Archived" domain="[('active', '=', False)]"/> |
|
||||
</search> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="agreement_type_action"> |
|
||||
<field name="name">Agreement Types</field> |
|
||||
<field name="res_model">agreement.type</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
</odoo> |
|
@ -1,142 +0,0 @@ |
|||||
================ |
|
||||
Agreements Legal |
|
||||
================ |
|
||||
|
|
||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
||||
!! This file is generated by oca-gen-addon-readme !! |
|
||||
!! changes will be overwritten. !! |
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
||||
|
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png |
|
||||
:target: https://odoo-community.org/page/development-status |
|
||||
:alt: Beta |
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png |
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|
||||
:alt: License: AGPL-3 |
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github |
|
||||
:target: https://github.com/OCA/contract/tree/12.0/agreement_legal |
|
||||
:alt: OCA/contract |
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png |
|
||||
:target: https://translation.odoo-community.org/projects/contract-12-0/contract-12-0-agreement_legal |
|
||||
:alt: Translate me on Weblate |
|
||||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png |
|
||||
:target: https://runbot.odoo-community.org/runbot/110/12.0 |
|
||||
:alt: Try me on Runbot |
|
||||
|
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5| |
|
||||
|
|
||||
This module allows you to manage agreements, letter of intent and contract content. |
|
||||
The module is meant to be used by the legal team of a company and to allow them |
|
||||
to define sections, clauses and templates with their respective content that can |
|
||||
be dynamic. |
|
||||
|
|
||||
Based on the template, an agreement can be created and the pdf document generated. |
|
||||
|
|
||||
The agreement would go through a workflow to finally become a contract with the |
|
||||
customer signature. |
|
||||
|
|
||||
**Table of contents** |
|
||||
|
|
||||
.. contents:: |
|
||||
:local: |
|
||||
|
|
||||
Configuration |
|
||||
============= |
|
||||
|
|
||||
To configure this module: |
|
||||
|
|
||||
* Go to Agreement > Configuration > Templates |
|
||||
* Create a new template with sections and clauses and their respective content |
|
||||
* Go to Agreement > Configuration > Stages |
|
||||
* Create and reorder stages to match your process |
|
||||
|
|
||||
Usage |
|
||||
===== |
|
||||
|
|
||||
To use this module: |
|
||||
|
|
||||
* Go to Agreement > Agreements |
|
||||
* Create a new agreement |
|
||||
* Select a template |
|
||||
* Follow the process to get the required approval |
|
||||
* Send the invitation to the customer to review and sign the agreement |
|
||||
|
|
||||
* Define Field using widget domain but having partial_use option true: |
|
||||
* For Ex: |
|
||||
* <field name="field_domain" widget="domain" nolabel="1" |
|
||||
* options="{'model': 'agreement.recital', |
|
||||
* 'partial_use': True}"/> |
|
||||
|
|
||||
Known issues / Roadmap |
|
||||
====================== |
|
||||
|
|
||||
* Split the module to remove the dependencies on sale and account and provide |
|
||||
the same feature in extra modules (agreement_sale, agreement_account, |
|
||||
agreement_purchase) |
|
||||
|
|
||||
Bug Tracker |
|
||||
=========== |
|
||||
|
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/contract/issues>`_. |
|
||||
In case of trouble, please check there if your issue has already been reported. |
|
||||
If you spotted it first, help us smashing it by providing a detailed and welcomed |
|
||||
`feedback <https://github.com/OCA/contract/issues/new?body=module:%20agreement_legal%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. |
|
||||
|
|
||||
Do not contact contributors directly about support or help with technical issues. |
|
||||
|
|
||||
Credits |
|
||||
======= |
|
||||
|
|
||||
Authors |
|
||||
~~~~~~~ |
|
||||
|
|
||||
* Pavlov Media |
|
||||
* Open Source Integrators |
|
||||
* Yves Goldberg (Ygol Internetwork) |
|
||||
|
|
||||
Contributors |
|
||||
~~~~~~~~~~~~ |
|
||||
|
|
||||
* Patrick Wilson <pwilson@pavlovmedia.com> |
|
||||
* Bhavesh Odedra <bodedra@opensourceintegrators.com> |
|
||||
* Wolfgang Hall <whall@opensourceintegrators.com> |
|
||||
* Maxime Chambreuil <mchambreuil@opensourceintegrators.com> |
|
||||
* Sandip Mangukiya <smangukiya@opensourceintegrators.com> |
|
||||
* Yves Goldberg <yves@ygol.com> |
|
||||
|
|
||||
Other credits |
|
||||
~~~~~~~~~~~~~ |
|
||||
|
|
||||
The development of this module has been financially supported by: |
|
||||
|
|
||||
* Pavlov Media |
|
||||
* Open Source Integrators |
|
||||
* Yves Goldberg |
|
||||
|
|
||||
Maintainers |
|
||||
~~~~~~~~~~~ |
|
||||
|
|
||||
This module is maintained by the OCA. |
|
||||
|
|
||||
.. image:: https://odoo-community.org/logo.png |
|
||||
:alt: Odoo Community Association |
|
||||
:target: https://odoo-community.org |
|
||||
|
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|
||||
mission is to support the collaborative development of Odoo features and |
|
||||
promote its widespread use. |
|
||||
|
|
||||
.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px |
|
||||
:target: https://github.com/max3903 |
|
||||
:alt: max3903 |
|
||||
.. |maintainer-ygol| image:: https://github.com/ygol.png?size=40px |
|
||||
:target: https://github.com/ygol |
|
||||
:alt: ygol |
|
||||
|
|
||||
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__: |
|
||||
|
|
||||
|maintainer-max3903| |maintainer-ygol| |
|
||||
|
|
||||
This module is part of the `OCA/contract <https://github.com/OCA/contract/tree/12.0/agreement_legal>`_ project on GitHub. |
|
||||
|
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
|
@ -1,12 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import api, SUPERUSER_ID |
|
||||
from . import models |
|
||||
|
|
||||
|
|
||||
def post_init_agreement_legal(cr, registry): |
|
||||
env = api.Environment(cr, SUPERUSER_ID, dict()) |
|
||||
cr.execute('UPDATE agreement SET stage_id = %s WHERE stage_id IS NULL;', |
|
||||
(env.ref('agreement_legal.agreement_stage_new').id,)) |
|
||||
return True |
|
@ -1,51 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
{ |
|
||||
"name": "Agreements Legal", |
|
||||
"summary": "Manage Agreements, LOI and Contracts", |
|
||||
"author": "Pavlov Media, " |
|
||||
"Open Source Integrators, " |
|
||||
"Yves Goldberg (Ygol Internetwork), " |
|
||||
"Odoo Community Association (OCA)", |
|
||||
"website": "https://github.com/OCA/contract", |
|
||||
"category": "Partner", |
|
||||
"license": "AGPL-3", |
|
||||
"version": "12.0.1.1.1", |
|
||||
"depends": ["contacts", "agreement", "product"], |
|
||||
"data": [ |
|
||||
"data/ir_sequence.xml", |
|
||||
"data/module_category.xml", |
|
||||
"data/agreement_stage.xml", |
|
||||
"data/agreement_type.xml", |
|
||||
"security/res_groups.xml", |
|
||||
"security/ir.model.access.csv", |
|
||||
"report/agreement.xml", |
|
||||
"views/res_config_settings.xml", |
|
||||
"views/agreement_appendix.xml", |
|
||||
"views/agreement_clause.xml", |
|
||||
"views/agreement_recital.xml", |
|
||||
"views/agreement_section.xml", |
|
||||
"views/agreement_stages.xml", |
|
||||
"views/agreement_type.xml", |
|
||||
"views/agreement_subtype.xml", |
|
||||
"views/agreement_renewaltype.xml", |
|
||||
"views/agreement_increasetype.xml", |
|
||||
"views/res_partner.xml", |
|
||||
"views/agreement.xml", |
|
||||
"views/menu.xml", |
|
||||
], |
|
||||
"demo": [ |
|
||||
"demo/demo.xml" |
|
||||
], |
|
||||
'qweb': [ |
|
||||
"static/src/xml/domain_widget_view.xml" |
|
||||
], |
|
||||
"post_init_hook": "post_init_agreement_legal", |
|
||||
"application": True, |
|
||||
"development_status": "Beta", |
|
||||
"maintainers": [ |
|
||||
"max3903", |
|
||||
"ygol" |
|
||||
], |
|
||||
} |
|
@ -1,58 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<record id="agreement_stage_new" model="agreement.stage"> |
|
||||
<field name="name">New</field> |
|
||||
<field name="sequence">10</field> |
|
||||
<field name="stage_type">agreement</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_stage_draft" model="agreement.stage"> |
|
||||
<field name="name">Draft</field> |
|
||||
<field name="sequence">20</field> |
|
||||
<field name="stage_type">agreement</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_stage_reviewed" model="agreement.stage"> |
|
||||
<field name="name">Reviewed</field> |
|
||||
<field name="sequence">30</field> |
|
||||
<field name="stage_type">agreement</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_stage_negotiation" model="agreement.stage"> |
|
||||
<field name="name">Negotiation</field> |
|
||||
<field name="sequence">40</field> |
|
||||
<field name="stage_type">agreement</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_stage_out" model="agreement.stage"> |
|
||||
<field name="name">Out for Customer Signature</field> |
|
||||
<field name="sequence">50</field> |
|
||||
<field name="stage_type">agreement</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_stage_internal" model="agreement.stage"> |
|
||||
<field name="name">Waiting Internal Signature</field> |
|
||||
<field name="sequence">60</field> |
|
||||
<field name="stage_type">agreement</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_stage_active" model="agreement.stage"> |
|
||||
<field name="name">Active</field> |
|
||||
<field name="sequence">70</field> |
|
||||
<field name="stage_type">agreement</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_stage_expired" model="agreement.stage"> |
|
||||
<field name="name">Expired</field> |
|
||||
<field name="sequence">80</field> |
|
||||
<field name="stage_type">agreement</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_stage_cancelled" model="agreement.stage"> |
|
||||
<field name="name">Cancelled</field> |
|
||||
<field name="sequence">100</field> |
|
||||
<field name="fold">True</field> |
|
||||
<field name="stage_type">agreement</field> |
|
||||
</record> |
|
||||
</odoo> |
|
@ -1,16 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<record id="agreement_type_agreement" model="agreement.type"> |
|
||||
<field name="name">Agreement</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_type_contract" model="agreement.type"> |
|
||||
<field name="name">Contract</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_type_loi" model="agreement.type"> |
|
||||
<field name="name">Letter of Intent</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,13 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo noupdate="1"> |
|
||||
|
|
||||
<!-- Sequence for agreement --> |
|
||||
<record id="seq_agreement" model="ir.sequence"> |
|
||||
<field name="name">Agreements</field> |
|
||||
<field name="code">agreement</field> |
|
||||
<field name="prefix">AG</field> |
|
||||
<field name="padding">3</field> |
|
||||
<field name="company_id" eval="False"/> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,9 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<record id="agreement" model="ir.module.category"> |
|
||||
<field name="name">Agreement</field> |
|
||||
<field name="sequence">80</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,40 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<!-- |
|
||||
© 2019 Ygol Internetwork (yves@ygol.com) |
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
--> |
|
||||
|
|
||||
<odoo noupdate="1"> |
|
||||
|
|
||||
<record id="agreement.market1" model="agreement"> |
|
||||
<field name="description">Hardware IT (C2C-IT0042)</field> |
|
||||
<field name="agreement_type_id" ref="agreement_type_agreement"/> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement.market2" model="agreement"> |
|
||||
<field name="description">Fiber access office Lausanne (C2C-IT0043)</field> |
|
||||
<field name="agreement_type_id" ref="agreement_type_contract"/> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement.market3" model="agreement"> |
|
||||
<field name="description">Vétérinaire (AGR-VETO001)</field> |
|
||||
<field name="agreement_type_id" ref="agreement_type_loi"/> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement.market4" model="agreement"> |
|
||||
<field name="description">Wazo IPBX deployment and maintenance (AGR-TEL001)</field> |
|
||||
<field name="agreement_type_id" ref="agreement_type_loi"/> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement.market5" model="agreement"> |
|
||||
<field name="description">SIP Phones supply (BUY-VOIP012)</field> |
|
||||
<field name="agreement_type_id" ref="agreement_type_agreement"/> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement.market6" model="agreement"> |
|
||||
<field name="is_template">True</field> |
|
||||
<field name="description">SIP-ISDN gateways (BUY-VOIP013)</field> |
|
||||
<field name="agreement_type_id" ref="agreement_legal.agreement_type_contract"/> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
1697
agreement_legal/i18n/agreement_legal.pot
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1983
agreement_legal/i18n/fr.po
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1710
agreement_legal/i18n/pt_BR.po
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1730
agreement_legal/i18n/pt_PT.po
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1740
agreement_legal/i18n/zh_CN.po
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -1,18 +0,0 @@ |
|||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from . import ( |
|
||||
res_config_settings, |
|
||||
agreement_stage, |
|
||||
agreement, |
|
||||
agreement_appendix, |
|
||||
agreement_clause, |
|
||||
agreement_line, |
|
||||
agreement_recital, |
|
||||
agreement_section, |
|
||||
agreement_type, |
|
||||
agreement_subtype, |
|
||||
res_partner, |
|
||||
product_template, |
|
||||
agreement_renewaltype, |
|
||||
agreement_increasetype, |
|
||||
) |
|
@ -1,371 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import _, api, fields, models |
|
||||
|
|
||||
|
|
||||
class Agreement(models.Model): |
|
||||
_name = "agreement" |
|
||||
_inherit = ["agreement", "mail.thread"] |
|
||||
|
|
||||
# General |
|
||||
name = fields.Char(string="Title", required=True) |
|
||||
version = fields.Integer( |
|
||||
string="Version", |
|
||||
default=1, |
|
||||
copy=False, |
|
||||
help="The versions are used to keep track of document history and " |
|
||||
"previous versions can be referenced.") |
|
||||
revision = fields.Integer( |
|
||||
string="Revision", |
|
||||
default=0, |
|
||||
copy=False, |
|
||||
help="The revision will increase with every save event.") |
|
||||
description = fields.Text( |
|
||||
string="Description", |
|
||||
track_visibility="onchange", |
|
||||
help="Description of the agreement") |
|
||||
dynamic_description = fields.Text( |
|
||||
compute="_compute_dynamic_description", |
|
||||
string="Dynamic Description", |
|
||||
help="Compute dynamic description") |
|
||||
start_date = fields.Date( |
|
||||
string="Start Date", |
|
||||
track_visibility="onchange", |
|
||||
help="When the agreement starts.") |
|
||||
end_date = fields.Date( |
|
||||
string="End Date", |
|
||||
track_visibility="onchange", |
|
||||
help="When the agreement ends.") |
|
||||
color = fields.Integer(string="Color") |
|
||||
active = fields.Boolean( |
|
||||
string="Active", |
|
||||
default=True, |
|
||||
help="If unchecked, it will allow you to hide the agreement without " |
|
||||
"removing it.") |
|
||||
company_signed_date = fields.Date( |
|
||||
string="Signed on", |
|
||||
track_visibility="onchange", |
|
||||
help="Date the contract was signed by Company.") |
|
||||
partner_signed_date = fields.Date( |
|
||||
string="Signed on (Partner)", |
|
||||
track_visibility="onchange", |
|
||||
help="Date the contract was signed by the Partner.") |
|
||||
term = fields.Integer( |
|
||||
string="Term (Months)", |
|
||||
track_visibility="onchange", |
|
||||
help="Number of months this agreement/contract is in effect with the " |
|
||||
"partner.") |
|
||||
expiration_notice = fields.Integer( |
|
||||
string="Exp. Notice (Days)", |
|
||||
track_visibility="onchange", |
|
||||
help="Number of Days before expiration to be notified.") |
|
||||
change_notice = fields.Integer( |
|
||||
string="Change Notice (Days)", |
|
||||
track_visibility="onchange", |
|
||||
help="Number of Days to be notified before changes.") |
|
||||
special_terms = fields.Text( |
|
||||
string="Special Terms", |
|
||||
track_visibility="onchange", |
|
||||
help="Any terms that you have agreed to and want to track on the " |
|
||||
"agreement/contract.") |
|
||||
dynamic_special_terms = fields.Text( |
|
||||
compute="_compute_dynamic_special_terms", |
|
||||
string="Dynamic Special Terms", |
|
||||
help="Compute dynamic special terms") |
|
||||
code = fields.Char( |
|
||||
string="Reference", |
|
||||
required=True, |
|
||||
default=lambda self: _("New"), |
|
||||
track_visibility="onchange", |
|
||||
copy=False, |
|
||||
help="ID used for internal contract tracking.") |
|
||||
increase_type_id = fields.Many2one( |
|
||||
"agreement.increasetype", |
|
||||
string="Increase Type", |
|
||||
track_visibility="onchange", |
|
||||
help="The amount that certain rates may increase.") |
|
||||
termination_requested = fields.Date( |
|
||||
string="Termination Requested Date", |
|
||||
track_visibility="onchange", |
|
||||
help="Date that a request for termination was received.") |
|
||||
termination_date = fields.Date( |
|
||||
string="Termination Date", |
|
||||
track_visibility="onchange", |
|
||||
help="Date that the contract was terminated.") |
|
||||
reviewed_date = fields.Date( |
|
||||
string="Reviewed Date", track_visibility="onchange") |
|
||||
reviewed_user_id = fields.Many2one( |
|
||||
"res.users", string="Reviewed By", track_visibility="onchange") |
|
||||
approved_date = fields.Date( |
|
||||
string="Approved Date", track_visibility="onchange") |
|
||||
approved_user_id = fields.Many2one( |
|
||||
"res.users", string="Approved By", track_visibility="onchange") |
|
||||
currency_id = fields.Many2one("res.currency", string="Currency") |
|
||||
partner_id = fields.Many2one( |
|
||||
"res.partner", |
|
||||
string="Partner", |
|
||||
required=False, |
|
||||
copy=True, |
|
||||
help="The customer or vendor this agreement is related to.") |
|
||||
partner_contact_id = fields.Many2one( |
|
||||
"res.partner", |
|
||||
string="Partner Contact", |
|
||||
copy=True, |
|
||||
help="The primary partner contact (If Applicable).") |
|
||||
partner_contact_phone = fields.Char( |
|
||||
related="partner_contact_id.phone", string="Partner Phone") |
|
||||
partner_contact_email = fields.Char( |
|
||||
related="partner_contact_id.email", string="Partner Email") |
|
||||
company_contact_id = fields.Many2one( |
|
||||
"res.partner", |
|
||||
string="Company Contact", |
|
||||
copy=True, |
|
||||
help="The primary contact in the company.") |
|
||||
company_contact_phone = fields.Char( |
|
||||
related="company_contact_id.phone", string="Phone") |
|
||||
company_contact_email = fields.Char( |
|
||||
related="company_contact_id.email", string="Email") |
|
||||
use_parties_content = fields.Boolean( |
|
||||
string="Use parties content", |
|
||||
help="Use custom content for parties") |
|
||||
|
|
||||
def _get_default_parties(self): |
|
||||
deftext = """ |
|
||||
<h3>Company Information</h3> |
|
||||
<p> |
|
||||
${object.company_id.partner_id.name or ''}.<br> |
|
||||
${object.company_id.partner_id.street or ''} <br> |
|
||||
${object.company_id.partner_id.state_id.code or ''} |
|
||||
${object.company_id.partner_id.zip or ''} |
|
||||
${object.company_id.partner_id.city or ''}<br> |
|
||||
${object.company_id.partner_id.country_id.name or ''}.<br><br> |
|
||||
Represented by <b>${object.company_contact_id.name or ''}.</b> |
|
||||
</p> |
|
||||
<p></p> |
|
||||
<h3>Partner Information</h3> |
|
||||
<p> |
|
||||
${object.partner_id.name or ''}.<br> |
|
||||
${object.partner_id.street or ''} <br> |
|
||||
${object.partner_id.state_id.code or ''} |
|
||||
${object.partner_id.zip or ''} ${object.partner_id.city or ''}<br> |
|
||||
${object.partner_id.country_id.name or ''}.<br><br> |
|
||||
Represented by <b>${object.partner_contact_id.name or ''}.</b> |
|
||||
</p> |
|
||||
""" |
|
||||
return deftext |
|
||||
|
|
||||
parties = fields.Html( |
|
||||
string="Parties", |
|
||||
track_visibility="onchange", |
|
||||
default=_get_default_parties, |
|
||||
help="Parties of the agreement") |
|
||||
dynamic_parties = fields.Html( |
|
||||
compute="_compute_dynamic_parties", |
|
||||
string="Dynamic Parties", |
|
||||
help="Compute dynamic parties") |
|
||||
agreement_type_id = fields.Many2one( |
|
||||
track_visibility="onchange", |
|
||||
) |
|
||||
agreement_subtype_id = fields.Many2one( |
|
||||
"agreement.subtype", |
|
||||
string="Agreement Sub-type", |
|
||||
track_visibility="onchange", |
|
||||
help="Select the sub-type of this agreement. Sub-Types are related to " |
|
||||
"agreement types.") |
|
||||
product_ids = fields.Many2many( |
|
||||
"product.template", string="Products & Services") |
|
||||
assigned_user_id = fields.Many2one( |
|
||||
"res.users", |
|
||||
string="Assigned To", |
|
||||
track_visibility="onchange", |
|
||||
help="Select the user who manages this agreement.") |
|
||||
company_signed_user_id = fields.Many2one( |
|
||||
"res.users", |
|
||||
string="Signed By", |
|
||||
track_visibility="onchange", |
|
||||
help="The user at our company who authorized/signed the agreement or " |
|
||||
"contract.") |
|
||||
partner_signed_user_id = fields.Many2one( |
|
||||
"res.partner", |
|
||||
string="Signed By (Partner)", |
|
||||
track_visibility="onchange", |
|
||||
help="Contact on the account that signed the agreement/contract.") |
|
||||
parent_agreement_id = fields.Many2one( |
|
||||
"agreement", |
|
||||
string="Parent Agreement", |
|
||||
help="Link this agreement to a parent agreement. For example if this " |
|
||||
"agreement is an amendment to another agreement. This list will " |
|
||||
"only show other agreements related to the same account.") |
|
||||
renewal_type_id = fields.Many2one( |
|
||||
"agreement.renewaltype", |
|
||||
string="Renewal Type", |
|
||||
track_visibility="onchange", |
|
||||
help="Describes what happens after the contract expires.") |
|
||||
recital_ids = fields.One2many( |
|
||||
"agreement.recital", "agreement_id", string="Recitals", copy=True) |
|
||||
sections_ids = fields.One2many( |
|
||||
"agreement.section", "agreement_id", string="Sections", copy=True) |
|
||||
clauses_ids = fields.One2many( |
|
||||
"agreement.clause", "agreement_id", string="Clauses") |
|
||||
appendix_ids = fields.One2many( |
|
||||
"agreement.appendix", "agreement_id", string="Appendices", copy=True) |
|
||||
previous_version_agreements_ids = fields.One2many( |
|
||||
"agreement", |
|
||||
"parent_agreement_id", |
|
||||
string="Previous Versions", |
|
||||
copy=False, |
|
||||
domain=[("active", "=", False)]) |
|
||||
child_agreements_ids = fields.One2many( |
|
||||
"agreement", |
|
||||
"parent_agreement_id", |
|
||||
string="Child Agreements", |
|
||||
copy=False, |
|
||||
domain=[("active", "=", True)]) |
|
||||
line_ids = fields.One2many( |
|
||||
"agreement.line", |
|
||||
"agreement_id", |
|
||||
string="Products/Services", |
|
||||
copy=False) |
|
||||
state = fields.Selection( |
|
||||
[("draft", "Draft"), ("active", "Active"), ("inactive", "Inactive")], |
|
||||
default="draft", |
|
||||
track_visibility="always") |
|
||||
notification_address_id = fields.Many2one( |
|
||||
"res.partner", |
|
||||
string="Notification Address", |
|
||||
help="The address to send notificaitons to, if different from " |
|
||||
"customer address.(Address Type = Other)") |
|
||||
signed_contract_filename = fields.Char(string="Filename") |
|
||||
signed_contract = fields.Binary( |
|
||||
string="Signed Document", track_visibility="always") |
|
||||
|
|
||||
# Dynamic field editor |
|
||||
field_domain = fields.Char(string='Field Expression', |
|
||||
default='[["active", "=", True]]') |
|
||||
default_value = fields.Char( |
|
||||
string="Default Value", |
|
||||
help="Optional value to use if the target field is empty.") |
|
||||
copyvalue = fields.Char( |
|
||||
string="Placeholder Expression", |
|
||||
help="""Final placeholder expression, to be copy-pasted in the desired |
|
||||
template field.""") |
|
||||
|
|
||||
@api.onchange("field_domain", "default_value") |
|
||||
def onchange_copyvalue(self): |
|
||||
self.copyvalue = False |
|
||||
if self.field_domain: |
|
||||
string_list = self.field_domain.split(",") |
|
||||
if string_list: |
|
||||
field_domain = string_list[0][3:-1] |
|
||||
self.copyvalue = "${{object.{} or {}}}".format( |
|
||||
field_domain, |
|
||||
self.default_value or "''") |
|
||||
|
|
||||
# compute the dynamic content for mako expression |
|
||||
@api.multi |
|
||||
def _compute_dynamic_description(self): |
|
||||
MailTemplates = self.env["mail.template"] |
|
||||
for agreement in self: |
|
||||
lang = agreement.partner_id.lang or "en_US" |
|
||||
description = MailTemplates.with_context( |
|
||||
lang=lang |
|
||||
)._render_template( |
|
||||
agreement.description, "agreement", agreement.id |
|
||||
) |
|
||||
agreement.dynamic_description = description |
|
||||
|
|
||||
@api.multi |
|
||||
def _compute_dynamic_parties(self): |
|
||||
MailTemplates = self.env["mail.template"] |
|
||||
for agreement in self: |
|
||||
lang = agreement.partner_id.lang or "en_US" |
|
||||
parties = MailTemplates.with_context( |
|
||||
lang=lang |
|
||||
)._render_template( |
|
||||
agreement.parties, "agreement", agreement.id |
|
||||
) |
|
||||
agreement.dynamic_parties = parties |
|
||||
|
|
||||
@api.multi |
|
||||
def _compute_dynamic_special_terms(self): |
|
||||
MailTemplates = self.env["mail.template"] |
|
||||
for agreement in self: |
|
||||
lang = agreement.partner_id.lang or "en_US" |
|
||||
special_terms = MailTemplates.with_context( |
|
||||
lang=lang |
|
||||
)._render_template( |
|
||||
agreement.special_terms, "agreement", agreement.id |
|
||||
) |
|
||||
agreement.dynamic_special_terms = special_terms |
|
||||
|
|
||||
# Used for Kanban grouped_by view |
|
||||
@api.model |
|
||||
def _read_group_stage_ids(self, stages, domain, order): |
|
||||
stage_ids = self.env["agreement.stage"].search( |
|
||||
[('stage_type', '=', 'agreement')]) |
|
||||
return stage_ids |
|
||||
|
|
||||
stage_id = fields.Many2one( |
|
||||
"agreement.stage", |
|
||||
string="Stage", |
|
||||
group_expand="_read_group_stage_ids", |
|
||||
help="Select the current stage of the agreement.", |
|
||||
track_visibility="onchange", |
|
||||
index=True) |
|
||||
|
|
||||
# Create New Version Button |
|
||||
@api.multi |
|
||||
def create_new_version(self, vals): |
|
||||
for rec in self: |
|
||||
if not rec.state == "draft": |
|
||||
# Make sure status is draft |
|
||||
rec.state = "draft" |
|
||||
default_vals = { |
|
||||
"name": "{} - OLD VERSION".format(rec.name), |
|
||||
"active": False, |
|
||||
"parent_agreement_id": rec.id, |
|
||||
} |
|
||||
# Make a current copy and mark it as old |
|
||||
rec.copy(default=default_vals) |
|
||||
# Increment the Version |
|
||||
rec.version = rec.version + 1 |
|
||||
# Reset revision to 0 since it's a new version |
|
||||
vals["revision"] = 0 |
|
||||
return super(Agreement, self).write(vals) |
|
||||
|
|
||||
def create_new_agreement(self): |
|
||||
default_vals = { |
|
||||
"name": "NEW", |
|
||||
"active": True, |
|
||||
"version": 1, |
|
||||
"revision": 0, |
|
||||
"state": "draft", |
|
||||
"stage_id": self.env.ref("agreement_legal.agreement_stage_new").id, |
|
||||
} |
|
||||
res = self.copy(default=default_vals) |
|
||||
res.sections_ids.clauses_ids.write({'agreement_id': res.id}) |
|
||||
return { |
|
||||
"res_model": "agreement", |
|
||||
"type": "ir.actions.act_window", |
|
||||
"view_mode": "form", |
|
||||
"view_type": "form", |
|
||||
"res_id": res.id, |
|
||||
} |
|
||||
|
|
||||
@api.model |
|
||||
def create(self, vals): |
|
||||
if vals.get("code", _("New")) == _("New"): |
|
||||
vals["code"] = self.env["ir.sequence"].next_by_code( |
|
||||
"agreement" |
|
||||
) or _("New") |
|
||||
if not vals.get('stage_id'): |
|
||||
vals["stage_id"] = \ |
|
||||
self.env.ref("agreement_legal.agreement_stage_new").id |
|
||||
return super(Agreement, self).create(vals) |
|
||||
|
|
||||
# Increments the revision on each save action |
|
||||
@api.multi |
|
||||
def write(self, vals): |
|
||||
vals["revision"] = self.revision + 1 |
|
||||
return super(Agreement, self).write(vals) |
|
@ -1,73 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import api, fields, models |
|
||||
|
|
||||
|
|
||||
class AgreementAppendix(models.Model): |
|
||||
_name = "agreement.appendix" |
|
||||
_description = "Agreement Appendices" |
|
||||
_order = "sequence" |
|
||||
|
|
||||
name = fields.Char(string="Name", required=True) |
|
||||
title = fields.Char( |
|
||||
string="Title", |
|
||||
required=True, |
|
||||
help="The title is displayed on the PDF." "The name is not.", |
|
||||
) |
|
||||
sequence = fields.Integer( |
|
||||
string="Sequence", |
|
||||
default=10) |
|
||||
content = fields.Html(string="Content") |
|
||||
dynamic_content = fields.Html( |
|
||||
compute="_compute_dynamic_content", |
|
||||
string="Dynamic Content", |
|
||||
help="compute dynamic Content", |
|
||||
) |
|
||||
agreement_id = fields.Many2one( |
|
||||
"agreement", |
|
||||
string="Agreement", |
|
||||
ondelete="cascade") |
|
||||
active = fields.Boolean( |
|
||||
string="Active", |
|
||||
default=True, |
|
||||
help="If unchecked, it will allow you to hide this appendix without " |
|
||||
"removing it.", |
|
||||
) |
|
||||
|
|
||||
# Dynamic field editor |
|
||||
field_domain = fields.Char(string='Field Expression', |
|
||||
default='[["active", "=", True]]') |
|
||||
default_value = fields.Char( |
|
||||
string="Default Value", |
|
||||
help="Optional value to use if the target field is empty.") |
|
||||
copyvalue = fields.Char( |
|
||||
string="Placeholder Expression", |
|
||||
help="""Final placeholder expression, to be copy-pasted in the desired |
|
||||
template field.""") |
|
||||
|
|
||||
@api.onchange("field_domain", "default_value") |
|
||||
def onchange_copyvalue(self): |
|
||||
self.copyvalue = False |
|
||||
if self.field_domain: |
|
||||
string_list = self.field_domain.split(",") |
|
||||
if string_list: |
|
||||
field_domain = string_list[0][3:-1] |
|
||||
self.copyvalue = "${{object.{} or {}}}".format( |
|
||||
field_domain, |
|
||||
self.default_value or "''") |
|
||||
|
|
||||
# compute the dynamic content for mako expression |
|
||||
@api.multi |
|
||||
def _compute_dynamic_content(self): |
|
||||
MailTemplates = self.env["mail.template"] |
|
||||
for appendix in self: |
|
||||
lang = ( |
|
||||
appendix.agreement_id |
|
||||
and appendix.agreement_id.partner_id.lang |
|
||||
or "en_US" |
|
||||
) |
|
||||
content = MailTemplates.with_context(lang=lang)._render_template( |
|
||||
appendix.content, "agreement.appendix", appendix.id |
|
||||
) |
|
||||
appendix.dynamic_content = content |
|
@ -1,71 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import api, fields, models |
|
||||
|
|
||||
|
|
||||
class AgreementClause(models.Model): |
|
||||
_name = "agreement.clause" |
|
||||
_description = "Agreement Clauses" |
|
||||
_order = "sequence" |
|
||||
|
|
||||
name = fields.Char(string="Name", required=True) |
|
||||
title = fields.Char( |
|
||||
string="Title", |
|
||||
help="The title is displayed on the PDF." "The name is not.") |
|
||||
sequence = fields.Integer(string="Sequence") |
|
||||
agreement_id = fields.Many2one( |
|
||||
"agreement", |
|
||||
string="Agreement", |
|
||||
ondelete="cascade") |
|
||||
section_id = fields.Many2one( |
|
||||
"agreement.section", |
|
||||
string="Section", |
|
||||
ondelete="cascade") |
|
||||
content = fields.Html(string="Clause Content") |
|
||||
dynamic_content = fields.Html( |
|
||||
compute="_compute_dynamic_content", |
|
||||
string="Dynamic Content", |
|
||||
help="compute dynamic Content") |
|
||||
active = fields.Boolean( |
|
||||
string="Active", |
|
||||
default=True, |
|
||||
help="If unchecked, it will allow you to hide the agreement without " |
|
||||
"removing it.") |
|
||||
|
|
||||
# Dynamic field editor |
|
||||
field_domain = fields.Char(string='Field Expression', |
|
||||
default='[["active", "=", True]]') |
|
||||
default_value = fields.Char( |
|
||||
string="Default Value", |
|
||||
help="Optional value to use if the target field is empty.") |
|
||||
copyvalue = fields.Char( |
|
||||
string="Placeholder Expression", |
|
||||
help="""Final placeholder expression, to be copy-pasted in the desired |
|
||||
template field.""") |
|
||||
|
|
||||
@api.onchange("field_domain", "default_value") |
|
||||
def onchange_copyvalue(self): |
|
||||
self.copyvalue = False |
|
||||
if self.field_domain: |
|
||||
string_list = self.field_domain.split(",") |
|
||||
if string_list: |
|
||||
field_domain = string_list[0][3:-1] |
|
||||
self.copyvalue = "${{object.{} or {}}}".format( |
|
||||
field_domain, |
|
||||
self.default_value or "''") |
|
||||
|
|
||||
# compute the dynamic content for mako expression |
|
||||
@api.multi |
|
||||
def _compute_dynamic_content(self): |
|
||||
MailTemplates = self.env["mail.template"] |
|
||||
for clause in self: |
|
||||
lang = ( |
|
||||
clause.agreement_id |
|
||||
and clause.agreement_id.partner_id.lang |
|
||||
or "en_US" |
|
||||
) |
|
||||
content = MailTemplates.with_context(lang=lang)._render_template( |
|
||||
clause.content, "agreement.clause", clause.id |
|
||||
) |
|
||||
clause.dynamic_content = content |
|
@ -1,27 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
# Main Agreement Increase Type Records Model |
|
||||
class AgreementIncreaseType(models.Model): |
|
||||
_name = "agreement.increasetype" |
|
||||
_description = "Agreement Increase Type" |
|
||||
|
|
||||
# General |
|
||||
name = fields.Char( |
|
||||
string="Title", |
|
||||
required=True, |
|
||||
help="Increase types describe any increases that may happen during " |
|
||||
"the contract.", |
|
||||
) |
|
||||
description = fields.Text( |
|
||||
string="Description", |
|
||||
required=True, |
|
||||
help="Description of the renewal type." |
|
||||
) |
|
||||
increase_percent = fields.Integer( |
|
||||
string="Increase Percentage", |
|
||||
help="Percentage that the amount will increase." |
|
||||
) |
|
@ -1,30 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import api, fields, models |
|
||||
|
|
||||
|
|
||||
class AgreementLine(models.Model): |
|
||||
_name = "agreement.line" |
|
||||
_description = "Agreement Lines" |
|
||||
|
|
||||
product_id = fields.Many2one( |
|
||||
"product.product", |
|
||||
string="Product") |
|
||||
name = fields.Char( |
|
||||
string="Description", |
|
||||
required=True) |
|
||||
agreement_id = fields.Many2one( |
|
||||
"agreement", |
|
||||
string="Agreement", |
|
||||
ondelete="cascade") |
|
||||
qty = fields.Float(string="Quantity") |
|
||||
uom_id = fields.Many2one( |
|
||||
"uom.uom", |
|
||||
string="Unit of Measure", |
|
||||
required=True) |
|
||||
|
|
||||
@api.onchange("product_id") |
|
||||
def _onchange_product_id(self): |
|
||||
self.name = self.product_id.name |
|
||||
self.uom_id = self.product_id.uom_id.id |
|
@ -1,63 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import api, fields, models |
|
||||
|
|
||||
|
|
||||
class AgreementRecital(models.Model): |
|
||||
_name = "agreement.recital" |
|
||||
_description = "Agreement Recitals" |
|
||||
_order = "sequence" |
|
||||
|
|
||||
name = fields.Char(string="Name", required=True) |
|
||||
title = fields.Char( |
|
||||
string="Title", |
|
||||
help="The title is displayed on the PDF." "The name is not.") |
|
||||
sequence = fields.Integer(string="Sequence", default=10) |
|
||||
content = fields.Html(string="Content") |
|
||||
dynamic_content = fields.Html( |
|
||||
compute="_compute_dynamic_content", |
|
||||
string="Dynamic Content", |
|
||||
help="compute dynamic Content") |
|
||||
agreement_id = fields.Many2one( |
|
||||
"agreement", string="Agreement", ondelete="cascade") |
|
||||
active = fields.Boolean( |
|
||||
string="Active", |
|
||||
default=True, |
|
||||
help="If unchecked, it will allow you to hide this recital without " |
|
||||
"removing it.") |
|
||||
|
|
||||
# Dynamic field editor |
|
||||
field_domain = fields.Char(string='Field Expression', |
|
||||
default='[["active", "=", True]]') |
|
||||
default_value = fields.Char( |
|
||||
string="Default Value", |
|
||||
help="Optional value to use if the target field is empty.") |
|
||||
copyvalue = fields.Char( |
|
||||
string="Placeholder Expression", |
|
||||
help="""Final placeholder expression, to be copy-pasted in the desired |
|
||||
template field.""") |
|
||||
|
|
||||
@api.onchange("field_domain", "default_value") |
|
||||
def onchange_copyvalue(self): |
|
||||
self.copyvalue = False |
|
||||
if self.field_domain: |
|
||||
string_list = self.field_domain.split(",") |
|
||||
if string_list: |
|
||||
field_domain = string_list[0][3:-1] |
|
||||
self.copyvalue = "${{object.{} or {}}}".format( |
|
||||
field_domain, |
|
||||
self.default_value or "''") |
|
||||
|
|
||||
# compute the dynamic content for mako expression |
|
||||
@api.multi |
|
||||
def _compute_dynamic_content(self): |
|
||||
MailTemplates = self.env["mail.template"] |
|
||||
for recital in self: |
|
||||
lang = ( |
|
||||
recital.agreement_id |
|
||||
and recital.agreement_id.partner_id.lang |
|
||||
or "en_US") |
|
||||
content = MailTemplates.with_context(lang=lang)._render_template( |
|
||||
recital.content, "agreement.recital", recital.id) |
|
||||
recital.dynamic_content = content |
|
@ -1,23 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
# Main Agreement Section Records Model |
|
||||
class AgreementRenewalType(models.Model): |
|
||||
_name = "agreement.renewaltype" |
|
||||
_description = "Agreement Renewal Type" |
|
||||
|
|
||||
# General |
|
||||
name = fields.Char( |
|
||||
string="Title", |
|
||||
required=True, |
|
||||
help="Renewal types describe what happens after the " |
|
||||
"agreement/contract expires.", |
|
||||
) |
|
||||
description = fields.Text( |
|
||||
string="Description", |
|
||||
required=True, |
|
||||
help="Description of the renewal type." |
|
||||
) |
|
@ -1,63 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import api, fields, models |
|
||||
|
|
||||
|
|
||||
class AgreementSection(models.Model): |
|
||||
_name = "agreement.section" |
|
||||
_description = "Agreement Sections" |
|
||||
_order = "sequence" |
|
||||
|
|
||||
name = fields.Char(string="Name", required=True) |
|
||||
title = fields.Char( |
|
||||
string="Title", |
|
||||
help="The title is displayed on the PDF. The name is not.") |
|
||||
sequence = fields.Integer(string="Sequence") |
|
||||
agreement_id = fields.Many2one( |
|
||||
"agreement", string="Agreement", ondelete="cascade") |
|
||||
clauses_ids = fields.One2many( |
|
||||
"agreement.clause", "section_id", string="Clauses", copy=True) |
|
||||
content = fields.Html(string="Section Content") |
|
||||
dynamic_content = fields.Html( |
|
||||
compute="_compute_dynamic_content", |
|
||||
string="Dynamic Content", |
|
||||
help="compute dynamic Content") |
|
||||
active = fields.Boolean( |
|
||||
string="Active", |
|
||||
default=True, |
|
||||
help="If unchecked, it will allow you to hide the agreement without " |
|
||||
"removing it.") |
|
||||
|
|
||||
# Dynamic field editor |
|
||||
field_domain = fields.Char(string='Field Expression', |
|
||||
default='[["active", "=", True]]') |
|
||||
default_value = fields.Char( |
|
||||
string="Default Value", |
|
||||
help="Optional value to use if the target field is empty.") |
|
||||
copyvalue = fields.Char( |
|
||||
string="Placeholder Expression", |
|
||||
help="""Final placeholder expression, to be copy-pasted in the desired |
|
||||
template field.""") |
|
||||
|
|
||||
@api.onchange("field_domain", "default_value") |
|
||||
def onchange_copyvalue(self): |
|
||||
self.copyvalue = False |
|
||||
if self.field_domain: |
|
||||
string_list = self.field_domain.split(",") |
|
||||
if string_list: |
|
||||
field_domain = string_list[0][3:-1] |
|
||||
self.copyvalue = "${{object.{} or {}}}".format( |
|
||||
field_domain, |
|
||||
self.default_value or "''") |
|
||||
|
|
||||
# compute the dynamic content for mako expression |
|
||||
@api.multi |
|
||||
def _compute_dynamic_content(self): |
|
||||
MailTemplates = self.env["mail.template"] |
|
||||
for section in self: |
|
||||
lang = (section.agreement_id and |
|
||||
section.agreement_id.partner_id.lang or "en_US") |
|
||||
content = MailTemplates.with_context(lang=lang)._render_template( |
|
||||
section.content, "agreement.section", section.id) |
|
||||
section.dynamic_content = content |
|
@ -1,31 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
# Main Agreement Section Records Model |
|
||||
class AgreementStage(models.Model): |
|
||||
_name = "agreement.stage" |
|
||||
_description = "Agreement Stages" |
|
||||
_order = "sequence" |
|
||||
|
|
||||
# General |
|
||||
name = fields.Char( |
|
||||
string="Stage Name", |
|
||||
required=True) |
|
||||
description = fields.Text( |
|
||||
string="Description", |
|
||||
required=False) |
|
||||
sequence = fields.Integer( |
|
||||
string="Sequence", |
|
||||
default="1", |
|
||||
required=False) |
|
||||
fold = fields.Boolean( |
|
||||
string="Is Folded", |
|
||||
required=False, |
|
||||
help="This stage is folded in the kanban view by default.", |
|
||||
) |
|
||||
stage_type = fields.Selection( |
|
||||
[('agreement', 'Agreement')], |
|
||||
string='Type', required=True) |
|
@ -1,12 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
# Main Agreement Status Records Model |
|
||||
class AgreementStatus(models.Model): |
|
||||
_name = "agreement.type" |
|
||||
|
|
||||
# General |
|
||||
name = fields.Char(string="Title", required=True) |
|
@ -1,14 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
class AgreementSubtype(models.Model): |
|
||||
_name = "agreement.subtype" |
|
||||
_description = "Agreement Subtypes" |
|
||||
|
|
||||
name = fields.Char(string="Name", required=True) |
|
||||
agreement_type_id = fields.Many2one( |
|
||||
"agreement.type", |
|
||||
string="Agreement Type") |
|
@ -1,15 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
class AgreementType(models.Model): |
|
||||
_inherit = "agreement.type" |
|
||||
_description = "Agreement Types" |
|
||||
|
|
||||
agreement_subtypes_ids = fields.One2many( |
|
||||
"agreement.subtype", |
|
||||
"agreement_type_id", |
|
||||
string="Subtypes" |
|
||||
) |
|
@ -1,12 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
class Product(models.Model): |
|
||||
_inherit = "product.template" |
|
||||
|
|
||||
agreements_ids = fields.Many2many( |
|
||||
"agreement", |
|
||||
string="Agreements") |
|
@ -1,38 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Open Source Integrators |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
class ResConfigSettings(models.TransientModel): |
|
||||
_inherit = "res.config.settings" |
|
||||
|
|
||||
module_agreement_maintenance = fields.Boolean( |
|
||||
string="Manage maintenance agreements and contracts." |
|
||||
) |
|
||||
module_agreement_mrp = fields.Boolean( |
|
||||
string="Link your manufacturing orders to an agreement." |
|
||||
) |
|
||||
module_agreement_project = fields.Boolean( |
|
||||
string="Link your projects and tasks to an agreement." |
|
||||
) |
|
||||
module_agreement_repair = fields.Boolean( |
|
||||
string="Link your repair orders to an agreement." |
|
||||
) |
|
||||
module_agreement_rma = fields.Boolean( |
|
||||
string="Link your RMAs to an agreement.") |
|
||||
module_agreement_sale = fields.Boolean( |
|
||||
string="Create an agreement when the sale order is confirmed." |
|
||||
) |
|
||||
module_agreement_sale_subscription = fields.Boolean( |
|
||||
string="Link your subscriptions to an agreement." |
|
||||
) |
|
||||
module_agreement_stock = fields.Boolean( |
|
||||
string="Link your pickings to an agreement." |
|
||||
) |
|
||||
module_fieldservice_agreement = fields.Boolean( |
|
||||
string="Link your Field Service orders and equipments to an agreement." |
|
||||
) |
|
||||
module_agreement_helpdesk = fields.Boolean( |
|
||||
string="Link your Helpdesk tickets to an agreement." |
|
||||
) |
|
@ -1,13 +0,0 @@ |
|||||
# Copyright (C) 2018 - TODAY, Pavlov Media |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
class Partner(models.Model): |
|
||||
_inherit = "res.partner" |
|
||||
|
|
||||
agreement_ids = fields.One2many( |
|
||||
"agreement", |
|
||||
"partner_id", |
|
||||
string="Agreements") |
|
@ -1,6 +0,0 @@ |
|||||
To configure this module: |
|
||||
|
|
||||
* Go to Agreement > Configuration > Templates |
|
||||
* Create a new template with sections and clauses and their respective content |
|
||||
* Go to Agreement > Configuration > Stages |
|
||||
* Create and reorder stages to match your process |
|
@ -1,6 +0,0 @@ |
|||||
* Patrick Wilson <pwilson@pavlovmedia.com> |
|
||||
* Bhavesh Odedra <bodedra@opensourceintegrators.com> |
|
||||
* Wolfgang Hall <whall@opensourceintegrators.com> |
|
||||
* Maxime Chambreuil <mchambreuil@opensourceintegrators.com> |
|
||||
* Sandip Mangukiya <smangukiya@opensourceintegrators.com> |
|
||||
* Yves Goldberg <yves@ygol.com> |
|
@ -1,5 +0,0 @@ |
|||||
The development of this module has been financially supported by: |
|
||||
|
|
||||
* Pavlov Media |
|
||||
* Open Source Integrators |
|
||||
* Yves Goldberg |
|
@ -1,9 +0,0 @@ |
|||||
This module allows you to manage agreements, letter of intent and contract content. |
|
||||
The module is meant to be used by the legal team of a company and to allow them |
|
||||
to define sections, clauses and templates with their respective content that can |
|
||||
be dynamic. |
|
||||
|
|
||||
Based on the template, an agreement can be created and the pdf document generated. |
|
||||
|
|
||||
The agreement would go through a workflow to finally become a contract with the |
|
||||
customer signature. |
|
@ -1,3 +0,0 @@ |
|||||
* Split the module to remove the dependencies on sale and account and provide |
|
||||
the same feature in extra modules (agreement_sale, agreement_account, |
|
||||
agreement_purchase) |
|
@ -1,13 +0,0 @@ |
|||||
To use this module: |
|
||||
|
|
||||
* Go to Agreement > Agreements |
|
||||
* Create a new agreement |
|
||||
* Select a template |
|
||||
* Follow the process to get the required approval |
|
||||
* Send the invitation to the customer to review and sign the agreement |
|
||||
|
|
||||
* Define Field using widget domain but having partial_use option true: |
|
||||
* For Ex: |
|
||||
* <field name="field_domain" widget="domain" nolabel="1" |
|
||||
* options="{'model': 'agreement.recital', |
|
||||
* 'partial_use': True}"/> |
|
@ -1,151 +0,0 @@ |
|||||
<?xml version="1.0"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<report |
|
||||
id="partner_agreement_contract_document" |
|
||||
model="agreement" |
|
||||
string="Contract Document" |
|
||||
name="agreement_legal.report_agreement_document" |
|
||||
file="agreement_legal.report_agreement_document" |
|
||||
report_type="qweb-pdf"/> |
|
||||
|
|
||||
<report |
|
||||
id="partner_agreement_contract_document_preview" |
|
||||
model="agreement" |
|
||||
string="Contract Document Preview" |
|
||||
name="agreement_legal.report_agreement_document" |
|
||||
file="agreement_legal.report_agreement_document" |
|
||||
report_type="qweb-html"/> |
|
||||
|
|
||||
<template id="report_agreement_document"> |
|
||||
<t t-name="agreement.report_agreement_document"> |
|
||||
<t t-call="web.html_container"> |
|
||||
<t t-foreach="docs" t-as="doc"> |
|
||||
<t t-call="web.external_layout"> |
|
||||
<div class="page"> |
|
||||
<h1 t-field="doc.name"/> |
|
||||
<div name="description"> |
|
||||
<span t-field="doc.dynamic_description"/> |
|
||||
</div> |
|
||||
<h2>Parties</h2> |
|
||||
<div name="parties"> |
|
||||
<t t-if="doc.use_parties_content"> |
|
||||
<p t-field="doc.dynamic_parties"/> |
|
||||
</t> |
|
||||
</div> |
|
||||
<t t-if="not doc.use_parties_content"> |
|
||||
<h3>Company Information</h3> |
|
||||
<div name="company_address"> |
|
||||
<address t-field="doc.company_id.partner_id" |
|
||||
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' /> |
|
||||
</div> |
|
||||
<div name="company_contact"> |
|
||||
Represented by <span t-field="doc.company_contact_id.name"/>. |
|
||||
</div> |
|
||||
<h3>Partner Information</h3> |
|
||||
<div name="partner_address"> |
|
||||
<address t-field="doc.partner_id" |
|
||||
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' /> |
|
||||
</div> |
|
||||
<div name="partner_contact"> |
|
||||
Represented by <span t-field="doc.partner_contact_id.name"/>. |
|
||||
</div> |
|
||||
</t> |
|
||||
<h2>Agreement</h2> |
|
||||
<h3>Recitals</h3> |
|
||||
<table class="table table-condensed"> |
|
||||
<tbody> |
|
||||
<tr> |
|
||||
<td> |
|
||||
<ol> |
|
||||
<li t-foreach="doc.recital_ids" t-as="r"> |
|
||||
<t t-if="r.title"> |
|
||||
<h3 t-field="r.title"/> |
|
||||
</t> |
|
||||
<p t-field="r.dynamic_content"/> |
|
||||
</li> |
|
||||
</ol> |
|
||||
</td> |
|
||||
</tr> |
|
||||
</tbody> |
|
||||
</table> |
|
||||
<table class="table table-condensed"> |
|
||||
<tbody class="section_tbody"> |
|
||||
<tr> |
|
||||
<td> |
|
||||
<ol> |
|
||||
<li t-foreach="doc.sections_ids" t-as="s"> |
|
||||
<t t-if="s.title"> |
|
||||
<h3 t-field="s.title"/> |
|
||||
</t> |
|
||||
<p t-field="s.dynamic_content"/> |
|
||||
<ol> |
|
||||
<li t-foreach="s.clauses_ids" t-as="c"> |
|
||||
<t t-if="c.title"> |
|
||||
<h4 t-field="c.title"/> |
|
||||
</t> |
|
||||
<p t-field="c.dynamic_content"/> |
|
||||
</li> |
|
||||
</ol> |
|
||||
</li> |
|
||||
</ol> |
|
||||
</td> |
|
||||
</tr> |
|
||||
</tbody> |
|
||||
</table> |
|
||||
<t t-if="doc.special_terms"> |
|
||||
<h2>Special Terms</h2> |
|
||||
<div name="special_term"> |
|
||||
<p t-field="doc.dynamic_special_terms"/> |
|
||||
</div> |
|
||||
</t> |
|
||||
<h2>Signatures</h2> |
|
||||
<table class="table table-condensed"> |
|
||||
<theader> |
|
||||
<tr> |
|
||||
<th>Partner</th> |
|
||||
<th>Company</th> |
|
||||
</tr> |
|
||||
</theader> |
|
||||
<tbody class="section_tbody"> |
|
||||
<tr> |
|
||||
<td> |
|
||||
<p t-field="doc.partner_id"/> |
|
||||
<p>By: </p> |
|
||||
<p> |
|
||||
Name: <span t-field="doc.partner_contact_id.name"/> |
|
||||
</p> |
|
||||
<p> |
|
||||
Title: <span t-field="doc.partner_contact_id.function"/> |
|
||||
</p> |
|
||||
<p>Date: </p> |
|
||||
</td> |
|
||||
<td> |
|
||||
<p t-field="doc.company_id.partner_id"/> |
|
||||
<p>By: </p> |
|
||||
<p> |
|
||||
Name: <span t-field="doc.company_contact_id.name"/> |
|
||||
</p> |
|
||||
<p> |
|
||||
Title: <span t-field="doc.company_contact_id.function"/> |
|
||||
</p> |
|
||||
<p>Date: </p> |
|
||||
</td> |
|
||||
</tr> |
|
||||
</tbody> |
|
||||
</table> |
|
||||
</div> |
|
||||
<div t-foreach="doc.appendix_ids" t-as="a"> |
|
||||
<div class="page"> |
|
||||
<h1 t-field="a.title" |
|
||||
style="page-break-before: always;"/> |
|
||||
<p t-field="a.dynamic_content"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
</t> |
|
||||
</t> |
|
||||
</t> |
|
||||
</t> |
|
||||
</template> |
|
||||
|
|
||||
</odoo> |
|
@ -1,29 +0,0 @@ |
|||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
|
||||
access_agreement_readonly,agreement readonly,model_agreement,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_allusers,agreement all users,model_agreement,group_agreement_user,1,1,1,0 |
|
||||
access_agreement_manager,agreement manager,model_agreement,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_recital_readonly,recital readonly,model_agreement_recital,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_recital_allusers,recital all users,model_agreement_recital,group_agreement_user,1,1,1,0 |
|
||||
access_agreement_recital_manager,recital manager,model_agreement_recital,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_section_readonly,section readonly,model_agreement_section,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_section_allusers,section all users,model_agreement_section,group_agreement_user,1,1,1,0 |
|
||||
access_agreement_section_manager,section manager,model_agreement_section,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_clause_readonly,clause readonly,model_agreement_clause,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_clause_allusers,clause all users,model_agreement_clause,group_agreement_user,1,1,1,0 |
|
||||
access_agreement_clause_manager,clause manager,model_agreement_clause,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_appendix_readonly,appendix readonly,model_agreement_appendix,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_appendix_allusers,appendix all users,model_agreement_appendix,group_agreement_user,1,1,1,0 |
|
||||
access_agreement_appendix_manager,appendix manager,model_agreement_appendix,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_line_readonly,agreement line readonly,model_agreement_line,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_line_allusers,agreement line all users,model_agreement_line,group_agreement_user,1,1,1,0 |
|
||||
access_agreement_line_manager,agreement line manager,model_agreement_line,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_stage_readonly,stage readonly,model_agreement_stage,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_stage_manager,stage manager,model_agreement_stage,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_type_readonly,type readonly,model_agreement_type,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_type_manager,type manager,model_agreement_type,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_subtype_readonly,subtype readonly,model_agreement_subtype,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_subtype_manager,subtype manager,model_agreement_subtype,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_renewaltype_readonly,renewaltype readonly,model_agreement_renewaltype,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_renewaltype_manager,renewaltype manager,model_agreement_renewaltype,group_agreement_manager,1,1,1,1 |
|
||||
access_agreement_increasetype_readonly,increasetype readonly,model_agreement_increasetype,group_agreement_readonly,1,0,0,0 |
|
||||
access_agreement_increasetype_manager,increasetype manager,model_agreement_increasetype,group_agreement_manager,1,1,1,1 |
|
@ -1,30 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
<record id="module_agreement_legal_category" model="ir.module.category"> |
|
||||
<field name ="name">Agreement</field> |
|
||||
<field name ="sequence">17</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Readonly group --> |
|
||||
<record id="group_agreement_readonly" model="res.groups"> |
|
||||
<field name="name">Read-Only Users</field> |
|
||||
<field name="category_id" ref="module_agreement_legal_category"/> |
|
||||
<field name="implied_ids" eval="[(4, ref('base.group_user')), (4, ref('agreement.group_use_agreement_type')), (4, ref('agreement.group_use_agreement_template'))]"/> |
|
||||
</record> |
|
||||
|
|
||||
<!-- User group --> |
|
||||
<record id="group_agreement_user" model="res.groups"> |
|
||||
<field name="name">User</field> |
|
||||
<field name="category_id" ref="module_agreement_legal_category"/> |
|
||||
<field name="implied_ids" eval="[(4, ref('group_agreement_readonly'))]"/> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Manager group --> |
|
||||
<record id="group_agreement_manager" model="res.groups"> |
|
||||
<field name="name">Manager</field> |
|
||||
<field name="category_id" ref="module_agreement_legal_category"/> |
|
||||
<field name="implied_ids" eval="[(4, ref('group_agreement_user'))]"/> |
|
||||
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
Before Width: 64 | Height: 64 | Size: 6.6 KiB |
@ -1,481 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8" ?> |
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
|
||||
<head> |
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
|
||||
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" /> |
|
||||
<title>Agreements Legal</title> |
|
||||
<style type="text/css"> |
|
||||
|
|
||||
/* |
|
||||
:Author: David Goodger (goodger@python.org) |
|
||||
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $ |
|
||||
:Copyright: This stylesheet has been placed in the public domain. |
|
||||
|
|
||||
Default cascading style sheet for the HTML output of Docutils. |
|
||||
|
|
||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to |
|
||||
customize this style sheet. |
|
||||
*/ |
|
||||
|
|
||||
/* used to remove borders from tables and images */ |
|
||||
.borderless, table.borderless td, table.borderless th { |
|
||||
border: 0 } |
|
||||
|
|
||||
table.borderless td, table.borderless th { |
|
||||
/* Override padding for "table.docutils td" with "! important". |
|
||||
The right padding separates the table cells. */ |
|
||||
padding: 0 0.5em 0 0 ! important } |
|
||||
|
|
||||
.first { |
|
||||
/* Override more specific margin styles with "! important". */ |
|
||||
margin-top: 0 ! important } |
|
||||
|
|
||||
.last, .with-subtitle { |
|
||||
margin-bottom: 0 ! important } |
|
||||
|
|
||||
.hidden { |
|
||||
display: none } |
|
||||
|
|
||||
.subscript { |
|
||||
vertical-align: sub; |
|
||||
font-size: smaller } |
|
||||
|
|
||||
.superscript { |
|
||||
vertical-align: super; |
|
||||
font-size: smaller } |
|
||||
|
|
||||
a.toc-backref { |
|
||||
text-decoration: none ; |
|
||||
color: black } |
|
||||
|
|
||||
blockquote.epigraph { |
|
||||
margin: 2em 5em ; } |
|
||||
|
|
||||
dl.docutils dd { |
|
||||
margin-bottom: 0.5em } |
|
||||
|
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] { |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms |
|
||||
dl.docutils dt { |
|
||||
font-weight: bold } |
|
||||
*/ |
|
||||
|
|
||||
div.abstract { |
|
||||
margin: 2em 5em } |
|
||||
|
|
||||
div.abstract p.topic-title { |
|
||||
font-weight: bold ; |
|
||||
text-align: center } |
|
||||
|
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error, |
|
||||
div.hint, div.important, div.note, div.tip, div.warning { |
|
||||
margin: 2em ; |
|
||||
border: medium outset ; |
|
||||
padding: 1em } |
|
||||
|
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title, |
|
||||
div.important p.admonition-title, div.note p.admonition-title, |
|
||||
div.tip p.admonition-title { |
|
||||
font-weight: bold ; |
|
||||
font-family: sans-serif } |
|
||||
|
|
||||
div.attention p.admonition-title, div.caution p.admonition-title, |
|
||||
div.danger p.admonition-title, div.error p.admonition-title, |
|
||||
div.warning p.admonition-title, .code .error { |
|
||||
color: red ; |
|
||||
font-weight: bold ; |
|
||||
font-family: sans-serif } |
|
||||
|
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in |
|
||||
compound paragraphs. |
|
||||
div.compound .compound-first, div.compound .compound-middle { |
|
||||
margin-bottom: 0.5em } |
|
||||
|
|
||||
div.compound .compound-last, div.compound .compound-middle { |
|
||||
margin-top: 0.5em } |
|
||||
*/ |
|
||||
|
|
||||
div.dedication { |
|
||||
margin: 2em 5em ; |
|
||||
text-align: center ; |
|
||||
font-style: italic } |
|
||||
|
|
||||
div.dedication p.topic-title { |
|
||||
font-weight: bold ; |
|
||||
font-style: normal } |
|
||||
|
|
||||
div.figure { |
|
||||
margin-left: 2em ; |
|
||||
margin-right: 2em } |
|
||||
|
|
||||
div.footer, div.header { |
|
||||
clear: both; |
|
||||
font-size: smaller } |
|
||||
|
|
||||
div.line-block { |
|
||||
display: block ; |
|
||||
margin-top: 1em ; |
|
||||
margin-bottom: 1em } |
|
||||
|
|
||||
div.line-block div.line-block { |
|
||||
margin-top: 0 ; |
|
||||
margin-bottom: 0 ; |
|
||||
margin-left: 1.5em } |
|
||||
|
|
||||
div.sidebar { |
|
||||
margin: 0 0 0.5em 1em ; |
|
||||
border: medium outset ; |
|
||||
padding: 1em ; |
|
||||
background-color: #ffffee ; |
|
||||
width: 40% ; |
|
||||
float: right ; |
|
||||
clear: right } |
|
||||
|
|
||||
div.sidebar p.rubric { |
|
||||
font-family: sans-serif ; |
|
||||
font-size: medium } |
|
||||
|
|
||||
div.system-messages { |
|
||||
margin: 5em } |
|
||||
|
|
||||
div.system-messages h1 { |
|
||||
color: red } |
|
||||
|
|
||||
div.system-message { |
|
||||
border: medium outset ; |
|
||||
padding: 1em } |
|
||||
|
|
||||
div.system-message p.system-message-title { |
|
||||
color: red ; |
|
||||
font-weight: bold } |
|
||||
|
|
||||
div.topic { |
|
||||
margin: 2em } |
|
||||
|
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle, |
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle { |
|
||||
margin-top: 0.4em } |
|
||||
|
|
||||
h1.title { |
|
||||
text-align: center } |
|
||||
|
|
||||
h2.subtitle { |
|
||||
text-align: center } |
|
||||
|
|
||||
hr.docutils { |
|
||||
width: 75% } |
|
||||
|
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left { |
|
||||
clear: left ; |
|
||||
float: left ; |
|
||||
margin-right: 1em } |
|
||||
|
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right { |
|
||||
clear: right ; |
|
||||
float: right ; |
|
||||
margin-left: 1em } |
|
||||
|
|
||||
img.align-center, .figure.align-center, object.align-center { |
|
||||
display: block; |
|
||||
margin-left: auto; |
|
||||
margin-right: auto; |
|
||||
} |
|
||||
|
|
||||
table.align-center { |
|
||||
margin-left: auto; |
|
||||
margin-right: auto; |
|
||||
} |
|
||||
|
|
||||
.align-left { |
|
||||
text-align: left } |
|
||||
|
|
||||
.align-center { |
|
||||
clear: both ; |
|
||||
text-align: center } |
|
||||
|
|
||||
.align-right { |
|
||||
text-align: right } |
|
||||
|
|
||||
/* reset inner alignment in figures */ |
|
||||
div.align-right { |
|
||||
text-align: inherit } |
|
||||
|
|
||||
/* div.align-center * { */ |
|
||||
/* text-align: left } */ |
|
||||
|
|
||||
.align-top { |
|
||||
vertical-align: top } |
|
||||
|
|
||||
.align-middle { |
|
||||
vertical-align: middle } |
|
||||
|
|
||||
.align-bottom { |
|
||||
vertical-align: bottom } |
|
||||
|
|
||||
ol.simple, ul.simple { |
|
||||
margin-bottom: 1em } |
|
||||
|
|
||||
ol.arabic { |
|
||||
list-style: decimal } |
|
||||
|
|
||||
ol.loweralpha { |
|
||||
list-style: lower-alpha } |
|
||||
|
|
||||
ol.upperalpha { |
|
||||
list-style: upper-alpha } |
|
||||
|
|
||||
ol.lowerroman { |
|
||||
list-style: lower-roman } |
|
||||
|
|
||||
ol.upperroman { |
|
||||
list-style: upper-roman } |
|
||||
|
|
||||
p.attribution { |
|
||||
text-align: right ; |
|
||||
margin-left: 50% } |
|
||||
|
|
||||
p.caption { |
|
||||
font-style: italic } |
|
||||
|
|
||||
p.credits { |
|
||||
font-style: italic ; |
|
||||
font-size: smaller } |
|
||||
|
|
||||
p.label { |
|
||||
white-space: nowrap } |
|
||||
|
|
||||
p.rubric { |
|
||||
font-weight: bold ; |
|
||||
font-size: larger ; |
|
||||
color: maroon ; |
|
||||
text-align: center } |
|
||||
|
|
||||
p.sidebar-title { |
|
||||
font-family: sans-serif ; |
|
||||
font-weight: bold ; |
|
||||
font-size: larger } |
|
||||
|
|
||||
p.sidebar-subtitle { |
|
||||
font-family: sans-serif ; |
|
||||
font-weight: bold } |
|
||||
|
|
||||
p.topic-title { |
|
||||
font-weight: bold } |
|
||||
|
|
||||
pre.address { |
|
||||
margin-bottom: 0 ; |
|
||||
margin-top: 0 ; |
|
||||
font: inherit } |
|
||||
|
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code { |
|
||||
margin-left: 2em ; |
|
||||
margin-right: 2em } |
|
||||
|
|
||||
pre.code .ln { color: grey; } /* line numbers */ |
|
||||
pre.code, code { background-color: #eeeeee } |
|
||||
pre.code .comment, code .comment { color: #5C6576 } |
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } |
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 } |
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 } |
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1} |
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289} |
|
||||
|
|
||||
span.classifier { |
|
||||
font-family: sans-serif ; |
|
||||
font-style: oblique } |
|
||||
|
|
||||
span.classifier-delimiter { |
|
||||
font-family: sans-serif ; |
|
||||
font-weight: bold } |
|
||||
|
|
||||
span.interpreted { |
|
||||
font-family: sans-serif } |
|
||||
|
|
||||
span.option { |
|
||||
white-space: nowrap } |
|
||||
|
|
||||
span.pre { |
|
||||
white-space: pre } |
|
||||
|
|
||||
span.problematic { |
|
||||
color: red } |
|
||||
|
|
||||
span.section-subtitle { |
|
||||
/* font-size relative to parent (h1..h6 element) */ |
|
||||
font-size: 80% } |
|
||||
|
|
||||
table.citation { |
|
||||
border-left: solid 1px gray; |
|
||||
margin-left: 1px } |
|
||||
|
|
||||
table.docinfo { |
|
||||
margin: 2em 4em } |
|
||||
|
|
||||
table.docutils { |
|
||||
margin-top: 0.5em ; |
|
||||
margin-bottom: 0.5em } |
|
||||
|
|
||||
table.footnote { |
|
||||
border-left: solid 1px black; |
|
||||
margin-left: 1px } |
|
||||
|
|
||||
table.docutils td, table.docutils th, |
|
||||
table.docinfo td, table.docinfo th { |
|
||||
padding-left: 0.5em ; |
|
||||
padding-right: 0.5em ; |
|
||||
vertical-align: top } |
|
||||
|
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name { |
|
||||
font-weight: bold ; |
|
||||
text-align: left ; |
|
||||
white-space: nowrap ; |
|
||||
padding-left: 0 } |
|
||||
|
|
||||
/* "booktabs" style (no vertical lines) */ |
|
||||
table.docutils.booktabs { |
|
||||
border: 0px; |
|
||||
border-top: 2px solid; |
|
||||
border-bottom: 2px solid; |
|
||||
border-collapse: collapse; |
|
||||
} |
|
||||
table.docutils.booktabs * { |
|
||||
border: 0px; |
|
||||
} |
|
||||
table.docutils.booktabs th { |
|
||||
border-bottom: thin solid; |
|
||||
text-align: left; |
|
||||
} |
|
||||
|
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils, |
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils { |
|
||||
font-size: 100% } |
|
||||
|
|
||||
ul.auto-toc { |
|
||||
list-style-type: none } |
|
||||
|
|
||||
</style> |
|
||||
</head> |
|
||||
<body> |
|
||||
<div class="document" id="agreements-legal"> |
|
||||
<h1 class="title">Agreements Legal</h1> |
|
||||
|
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
||||
!! This file is generated by oca-gen-addon-readme !! |
|
||||
!! changes will be overwritten. !! |
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> |
|
||||
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/contract/tree/12.0/agreement_legal"><img alt="OCA/contract" src="https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/contract-12-0/contract-12-0-agreement_legal"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/110/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p> |
|
||||
<p>This module allows you to manage agreements, letter of intent and contract content. |
|
||||
The module is meant to be used by the legal team of a company and to allow them |
|
||||
to define sections, clauses and templates with their respective content that can |
|
||||
be dynamic.</p> |
|
||||
<p>Based on the template, an agreement can be created and the pdf document generated.</p> |
|
||||
<p>The agreement would go through a workflow to finally become a contract with the |
|
||||
customer signature.</p> |
|
||||
<p><strong>Table of contents</strong></p> |
|
||||
<div class="contents local topic" id="contents"> |
|
||||
<ul class="simple"> |
|
||||
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li> |
|
||||
<li><a class="reference internal" href="#usage" id="id2">Usage</a></li> |
|
||||
<li><a class="reference internal" href="#known-issues-roadmap" id="id3">Known issues / Roadmap</a></li> |
|
||||
<li><a class="reference internal" href="#bug-tracker" id="id4">Bug Tracker</a></li> |
|
||||
<li><a class="reference internal" href="#credits" id="id5">Credits</a><ul> |
|
||||
<li><a class="reference internal" href="#authors" id="id6">Authors</a></li> |
|
||||
<li><a class="reference internal" href="#contributors" id="id7">Contributors</a></li> |
|
||||
<li><a class="reference internal" href="#other-credits" id="id8">Other credits</a></li> |
|
||||
<li><a class="reference internal" href="#maintainers" id="id9">Maintainers</a></li> |
|
||||
</ul> |
|
||||
</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="configuration"> |
|
||||
<h1><a class="toc-backref" href="#id1">Configuration</a></h1> |
|
||||
<p>To configure this module:</p> |
|
||||
<ul class="simple"> |
|
||||
<li>Go to Agreement > Configuration > Templates</li> |
|
||||
<li>Create a new template with sections and clauses and their respective content</li> |
|
||||
<li>Go to Agreement > Configuration > Stages</li> |
|
||||
<li>Create and reorder stages to match your process</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="usage"> |
|
||||
<h1><a class="toc-backref" href="#id2">Usage</a></h1> |
|
||||
<p>To use this module:</p> |
|
||||
<ul class="simple"> |
|
||||
<li>Go to Agreement > Agreements</li> |
|
||||
<li>Create a new agreement</li> |
|
||||
<li>Select a template</li> |
|
||||
<li>Follow the process to get the required approval</li> |
|
||||
<li>Send the invitation to the customer to review and sign the agreement</li> |
|
||||
<li>Define Field using widget domain but having partial_use option true:</li> |
|
||||
<li>For Ex:</li> |
|
||||
<li><field name=”field_domain” widget=”domain” nolabel=”1”</li> |
|
||||
<li>options=”{‘model’: ‘agreement.recital’,</li> |
|
||||
<li>‘partial_use’: True}”/></li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="known-issues-roadmap"> |
|
||||
<h1><a class="toc-backref" href="#id3">Known issues / Roadmap</a></h1> |
|
||||
<ul class="simple"> |
|
||||
<li>Split the module to remove the dependencies on sale and account and provide |
|
||||
the same feature in extra modules (agreement_sale, agreement_account, |
|
||||
agreement_purchase)</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="bug-tracker"> |
|
||||
<h1><a class="toc-backref" href="#id4">Bug Tracker</a></h1> |
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/contract/issues">GitHub Issues</a>. |
|
||||
In case of trouble, please check there if your issue has already been reported. |
|
||||
If you spotted it first, help us smashing it by providing a detailed and welcomed |
|
||||
<a class="reference external" href="https://github.com/OCA/contract/issues/new?body=module:%20agreement_legal%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p> |
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p> |
|
||||
</div> |
|
||||
<div class="section" id="credits"> |
|
||||
<h1><a class="toc-backref" href="#id5">Credits</a></h1> |
|
||||
<div class="section" id="authors"> |
|
||||
<h2><a class="toc-backref" href="#id6">Authors</a></h2> |
|
||||
<ul class="simple"> |
|
||||
<li>Pavlov Media</li> |
|
||||
<li>Open Source Integrators</li> |
|
||||
<li>Yves Goldberg (Ygol Internetwork)</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="contributors"> |
|
||||
<h2><a class="toc-backref" href="#id7">Contributors</a></h2> |
|
||||
<ul class="simple"> |
|
||||
<li>Patrick Wilson <<a class="reference external" href="mailto:pwilson@pavlovmedia.com">pwilson@pavlovmedia.com</a>></li> |
|
||||
<li>Bhavesh Odedra <<a class="reference external" href="mailto:bodedra@opensourceintegrators.com">bodedra@opensourceintegrators.com</a>></li> |
|
||||
<li>Wolfgang Hall <<a class="reference external" href="mailto:whall@opensourceintegrators.com">whall@opensourceintegrators.com</a>></li> |
|
||||
<li>Maxime Chambreuil <<a class="reference external" href="mailto:mchambreuil@opensourceintegrators.com">mchambreuil@opensourceintegrators.com</a>></li> |
|
||||
<li>Sandip Mangukiya <<a class="reference external" href="mailto:smangukiya@opensourceintegrators.com">smangukiya@opensourceintegrators.com</a>></li> |
|
||||
<li>Yves Goldberg <<a class="reference external" href="mailto:yves@ygol.com">yves@ygol.com</a>></li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="other-credits"> |
|
||||
<h2><a class="toc-backref" href="#id8">Other credits</a></h2> |
|
||||
<p>The development of this module has been financially supported by:</p> |
|
||||
<ul class="simple"> |
|
||||
<li>Pavlov Media</li> |
|
||||
<li>Open Source Integrators</li> |
|
||||
<li>Yves Goldberg</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
<div class="section" id="maintainers"> |
|
||||
<h2><a class="toc-backref" href="#id9">Maintainers</a></h2> |
|
||||
<p>This module is maintained by the OCA.</p> |
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a> |
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose |
|
||||
mission is to support the collaborative development of Odoo features and |
|
||||
promote its widespread use.</p> |
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p> |
|
||||
<p><a class="reference external" href="https://github.com/max3903"><img alt="max3903" src="https://github.com/max3903.png?size=40px" /></a> <a class="reference external" href="https://github.com/ygol"><img alt="ygol" src="https://github.com/ygol.png?size=40px" /></a></p> |
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/contract/tree/12.0/agreement_legal">OCA/contract</a> project on GitHub.</p> |
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</body> |
|
||||
</html> |
|
@ -1,80 +0,0 @@ |
|||||
odoo.define('agreement_legal.domain_widget_ext', function (require) { |
|
||||
'use strict'; |
|
||||
|
|
||||
var basic_fields = require('web.basic_fields'); |
|
||||
var DomainSelector = require('web.DomainSelector'); |
|
||||
var session = require('web.session'); |
|
||||
var core = require('web.core'); |
|
||||
var qweb = core.qweb; |
|
||||
var _t = core._t; |
|
||||
|
|
||||
basic_fields.FieldDomain.include({ |
|
||||
/** |
|
||||
* Init |
|
||||
*/ |
|
||||
init : function () { |
|
||||
this._super.apply(this, arguments); |
|
||||
// Add Additional options
|
|
||||
this.partialUse = this.nodeOptions.partial_use || false; |
|
||||
}, |
|
||||
|
|
||||
//----------------------------------------------------------------------
|
|
||||
// Private
|
|
||||
//----------------------------------------------------------------------
|
|
||||
|
|
||||
/** |
|
||||
* @private |
|
||||
* @override _render from AbstractField |
|
||||
* @returns {Deferred} |
|
||||
*/ |
|
||||
_render: function () { |
|
||||
// If there is no model, only change the non-domain-selector content
|
|
||||
if (!this._domainModel) { |
|
||||
this._replaceContent(); |
|
||||
return $.when(); |
|
||||
} |
|
||||
|
|
||||
// Convert char value to array value
|
|
||||
var value = this.value || "[]"; |
|
||||
|
|
||||
// Create the domain selector or change the value of the current
|
|
||||
// one...
|
|
||||
var def; |
|
||||
if (!this.domainSelector) { |
|
||||
this.domainSelector = new DomainSelector( |
|
||||
this, this._domainModel, value, { |
|
||||
readonly: this.mode === "readonly" || this.inDialog, |
|
||||
filters: this.fsFilters, |
|
||||
debugMode: session.debug, |
|
||||
partialUse: this.partialUse || false, |
|
||||
}); |
|
||||
def = this.domainSelector.prependTo(this.$el); |
|
||||
} else { |
|
||||
def = this.domainSelector.setDomain(value); |
|
||||
} |
|
||||
// ... then replace the other content (matched records, etc)
|
|
||||
return def.then(this._replaceContent.bind(this)); |
|
||||
}, |
|
||||
/** |
|
||||
* Render the field DOM except for the domain selector part. The full |
|
||||
* field DOM is composed of a DIV which contains the domain selector |
|
||||
* widget, followed by other content. This other content is handled by |
|
||||
* this method. |
|
||||
* |
|
||||
* @private |
|
||||
*/ |
|
||||
_replaceContent: function () { |
|
||||
if (this._$content) { |
|
||||
this._$content.remove(); |
|
||||
} |
|
||||
this._$content = $(qweb.render("FieldDomain.content", { |
|
||||
hasModel: !!this._domainModel, |
|
||||
isValid: !!this._isValidForModel, |
|
||||
nbRecords: this.record.specialData[this.name].nbRecords || 0, |
|
||||
inDialogEdit: this.inDialog && this.mode === "edit", |
|
||||
partialUse: this.partialUse || false, |
|
||||
})); |
|
||||
this._$content.appendTo(this.$el); |
|
||||
}, |
|
||||
}); |
|
||||
}); |
|
@ -1,179 +0,0 @@ |
|||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||
<templates id="template" xml:space="preserve"> |
|
||||
<t t-name="FieldDomain.content"> |
|
||||
<t t-if="partialUse"> |
|
||||
<div t-if="hasModel" class="o_field_domain_panel"> |
|
||||
<!--<div t-if="hasModel" class="o_field_domain_panel"> |
|
||||
<i class="fa fa-arrow-right" role="img" aria-label="Domain" title="Domain"/> |
|
||||
|
|
||||
<button t-if="isValid" class="btn btn-sm btn-secondary o_domain_show_selection_button" type="button"> |
|
||||
<t t-esc="nbRecords"/> record(s) |
|
||||
</button> |
|
||||
<span t-else="" class="text-warning" role="alert"><i class="fa fa-exclamation-triangle" role="img" aria-label="Warning" title="Warning"/> Invalid domain</span> |
|
||||
|
|
||||
<button t-if="inDialogEdit" class="btn btn-sm btn-primary o_field_domain_dialog_button">Edit Domain</button> |
|
||||
</div> |
|
||||
<div t-else="">Select a model to add a filter.</div>--> |
|
||||
</div> |
|
||||
</t> |
|
||||
<t t-if="!partialUse"> |
|
||||
<div t-if="hasModel" class="o_field_domain_panel"> |
|
||||
<i class="fa fa-arrow-right" role="img" aria-label="Domain" title="Domain"/> |
|
||||
|
|
||||
<button t-if="isValid" class="btn btn-sm btn-secondary o_domain_show_selection_button" type="button"> |
|
||||
<t t-esc="nbRecords"/> record(s) |
|
||||
</button> |
|
||||
<span t-else="" class="text-warning" role="alert"><i class="fa fa-exclamation-triangle" role="img" aria-label="Warning" title="Warning"/> Invalid domain</span> |
|
||||
|
|
||||
<button t-if="inDialogEdit" class="btn btn-sm btn-primary o_field_domain_dialog_button">Edit Domain</button> |
|
||||
</div> |
|
||||
<div t-else="">Select a model to add a filter.</div> |
|
||||
</t> |
|
||||
</t> |
|
||||
|
|
||||
<div aria-atomic="true" t-name="DomainSelector" t-attf-class="o_domain_node o_domain_tree o_domain_selector #{widget.readonly ? 'o_read_mode' : 'o_edit_mode'}"> |
|
||||
<t t-if="widget.options.partialUse"> |
|
||||
<t t-if="widget.children.length === 0"> |
|
||||
<span>SMatch <strong>all records</strong></span> |
|
||||
<button t-if="!widget.readonly" class="btn btn-sm btn-primary o_domain_add_first_node_button"><i class="fa fa-plus"/> Add filter</button> |
|
||||
</t> |
|
||||
<t t-else=""> |
|
||||
<div class="o_domain_tree_header"> |
|
||||
<t t-if="widget.children.length === 1">Please navigate below and select field:</t> |
|
||||
<t t-else=""> |
|
||||
<span>SSMatch records with</span> |
|
||||
<t t-call="DomainTree.OperatorSelector"/> |
|
||||
<span>of the following rules:</span> |
|
||||
</t> |
|
||||
</div> |
|
||||
|
|
||||
<div class="o_domain_node_children_container"/> |
|
||||
</t> |
|
||||
</t> |
|
||||
<t t-if="!widget.options.partialUse"> |
|
||||
<t t-if="widget.children.length === 0"> |
|
||||
<span>Match <strong>all records</strong></span> |
|
||||
<button t-if="!widget.readonly" class="btn btn-sm btn-primary o_domain_add_first_node_button"><i class="fa fa-plus"/> Add filter</button> |
|
||||
</t> |
|
||||
<t t-else=""> |
|
||||
<div class="o_domain_tree_header"> |
|
||||
<t t-if="widget.children.length === 1">Match records with the following rule:</t> |
|
||||
<t t-else=""> |
|
||||
<span>Match records with</span> |
|
||||
<t t-call="DomainTree.OperatorSelector"/> |
|
||||
<span>of the following rules:</span> |
|
||||
</t> |
|
||||
</div> |
|
||||
|
|
||||
<div class="o_domain_node_children_container"/> |
|
||||
</t> |
|
||||
|
|
||||
<label t-if="widget.debug && !widget.readonly" class="o_domain_debug_container"> |
|
||||
<span class="small"># Code editor</span> |
|
||||
<input type="text" class="o_domain_debug_input"/> |
|
||||
</label> |
|
||||
</t> |
|
||||
</div> |
|
||||
<t t-name="DomainNode.ControlPanel"> |
|
||||
<t t-if="widget.options.partialUse"> |
|
||||
<div t-if="!widget.readonly && !widget.noControlPanel" class="o_domain_node_control_panel" role="toolbar" aria-label="Domain node"> |
|
||||
</div> |
|
||||
</t> |
|
||||
<t t-if="!widget.options.partialUse"> |
|
||||
<div t-if="!widget.readonly && !widget.noControlPanel" class="o_domain_node_control_panel" role="toolbar" aria-label="Domain node"> |
|
||||
<button class="btn o_domain_delete_node_button" title="Delete node" aria-label="Delete node"><i class="fa fa-times"/></button> |
|
||||
<button class="btn o_domain_add_node_button" title="Add node" aria-label="Add node"><i class="fa fa-plus-circle"/></button> |
|
||||
<button class="btn o_domain_add_node_button" title="Add branch" aria-label="Add branch" data-branch="1"><i class="fa fa-ellipsis-h"/></button> |
|
||||
</div> |
|
||||
</t> |
|
||||
</t> |
|
||||
<div t-name="DomainLeaf" t-attf-class="o_domain_node o_domain_leaf o_domain_selector_row #{widget.readonly ? 'o_read_mode' : 'o_edit_mode'}"> |
|
||||
<t t-call="DomainNode.ControlPanel"/> |
|
||||
|
|
||||
<div t-if="!widget.readonly" class="o_domain_leaf_edition"> |
|
||||
<!-- field selector will be instantiated here --> |
|
||||
<t t-if="!widget.options.partialUse"> |
|
||||
<div> <!-- used for flex stretching --> |
|
||||
<select class="o_domain_leaf_operator_select o_input"> |
|
||||
<option t-foreach="widget.operators" t-as="key" |
|
||||
t-att-value="key" |
|
||||
t-att-selected="widget.displayOperator === key ? 'selected' : None"> |
|
||||
<t t-esc="key_value"/> |
|
||||
</option> |
|
||||
</select> |
|
||||
</div> |
|
||||
<div t-attf-class="o_ds_value_cell#{_.contains(['set', 'not set'], widget.displayOperator) ? ' d-none' : ''}"> |
|
||||
<t t-if="widget.selectionChoices !== null"> |
|
||||
<select class="o_domain_leaf_value_input o_input"> |
|
||||
<option t-foreach="widget.selectionChoices" t-as="val" |
|
||||
t-att-value="val[0]" |
|
||||
t-att-selected="_.contains(val, widget.displayValue) ? 'selected' : None"> |
|
||||
<t t-esc="val[1]"/> |
|
||||
</option> |
|
||||
</select> |
|
||||
</t> |
|
||||
<t t-else=""> |
|
||||
<t t-if="_.contains(['in', 'not in'], widget.operator)"> |
|
||||
<div class="o_domain_leaf_value_input"> |
|
||||
<span class="badge badge-pill" t-foreach="widget.displayValue" t-as="val"> |
|
||||
<t t-esc="val"/> <i class="o_domain_leaf_value_remove_tag_button fa fa-times" t-att-data-value="val" role="img" aria-label="Remove tag" title="Remove tag"/> |
|
||||
</span> |
|
||||
</div> |
|
||||
<div class="o_domain_leaf_value_tags"> |
|
||||
<input placeholder="Add new value" type="text" class="o_input"/> |
|
||||
<button class="btn btn-sm btn-primary fa fa-plus o_domain_leaf_value_add_tag_button" aria-label="Add tag" title="Add tag"/> |
|
||||
</div> |
|
||||
</t> |
|
||||
<t t-else=""> |
|
||||
<input class="o_domain_leaf_value_input o_input" type="text" t-att-value="widget.displayValue"/> |
|
||||
</t> |
|
||||
</t> |
|
||||
</div> |
|
||||
</t> |
|
||||
</div> |
|
||||
<div t-else="" class="o_domain_leaf_info"> |
|
||||
<!-- field selector will be instantiated here --> |
|
||||
<t t-if="_.isString(widget.value)"> |
|
||||
<span class="o_domain_leaf_operator"><t t-esc="widget.operator_mapping[widget.operator]"/></span> |
|
||||
<span class="o_domain_leaf_value text-primary">"<t t-esc="widget.value"/>"</span> |
|
||||
</t> |
|
||||
<t t-if="_.isArray(widget.value)"> |
|
||||
<span class="o_domain_leaf_operator"><t t-esc="widget.operator_mapping[widget.operator]"/></span> |
|
||||
<t t-foreach="widget.value" t-as="v"> |
|
||||
<span class="o_domain_leaf_value text-primary">"<t t-esc="v"/>"</span> |
|
||||
<t t-if="!v_last"> or </t> |
|
||||
</t> |
|
||||
</t> |
|
||||
<t t-if="_.isNumber(widget.value)"> |
|
||||
<span class="o_domain_leaf_operator"><t t-esc="widget.operator_mapping[widget.operator]"/></span> |
|
||||
<span class="o_domain_leaf_value text-primary"><t t-esc="widget.value"></t></span> |
|
||||
</t> |
|
||||
<t t-if="_.isBoolean(widget.value)"> |
|
||||
is |
|
||||
<t t-if="widget.operator === '=' && widget.value === false || widget.operator === '!=' && widget.value === true">not</t> |
|
||||
set |
|
||||
</t> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div aria-atomic="true" t-name="ModelFieldSelector" t-attf-class="o_field_selector#{!widget.options.readonly ? ' o_edit_mode o_input' : ''}"> |
|
||||
<div class="o_field_selector_value" tabindex="0"/> |
|
||||
<t t-if="!widget.options.partialUse"> |
|
||||
<div class="o_field_selector_controls" tabindex="0"> |
|
||||
<i role="alert" class="fa fa-exclamation-triangle o_field_selector_warning d-none" title="Invalid field chain" aria-label="Invalid field chain"/> |
|
||||
</div> |
|
||||
</t> |
|
||||
<div t-if="!widget.options.readonly" class="o_field_selector_popover d-none" tabindex="0"> |
|
||||
<div class="o_field_selector_popover_header text-center"> |
|
||||
<i class="fa fa-arrow-left o_field_selector_popover_option o_field_selector_prev_page" title="Previous" role="img" aria-label="Previous"/> |
|
||||
<div class="o_field_selector_title"/> |
|
||||
<i class="fa fa-times o_field_selector_popover_option o_field_selector_close" title="Close" role="img" aria-label="Close"/> |
|
||||
</div> |
|
||||
<div class="o_field_selector_popover_body"> |
|
||||
<ul class="o_field_selector_page"/> |
|
||||
</div> |
|
||||
<div t-if="widget.options.debugMode" class="o_field_selector_popover_footer"> |
|
||||
<input type="text" class="o_input"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</templates> |
|
@ -1,372 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<template id="assets_backend" name="agreement_legal assets" |
|
||||
inherit_id="web.assets_backend"> |
|
||||
<xpath expr="." position="inside"> |
|
||||
<script type="text/javascript" |
|
||||
src="/agreement_legal/static/src/js/domain_widget_ext.js"/> |
|
||||
</xpath> |
|
||||
</template> |
|
||||
|
|
||||
<!-- Agreement List View--> |
|
||||
<record model="ir.ui.view" id="partner_agreement_list_view"> |
|
||||
<field name="name">Agreement List</field> |
|
||||
<field name="model">agreement</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree string="Agreements" default_order='name'> |
|
||||
<field name="name"/> |
|
||||
<field name="partner_id"/> |
|
||||
<field name="company_id"/> |
|
||||
<field name="parent_agreement_id"/> |
|
||||
<field name="agreement_type_id"/> |
|
||||
<field name="agreement_subtype_id"/> |
|
||||
<field name="active" invisible="1"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Form View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_form_view"> |
|
||||
<field name="name">Agreement Form</field> |
|
||||
<field name="model">agreement</field> |
|
||||
<field name="priority" eval="1"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Agreement"> |
|
||||
<header> |
|
||||
<button string="New Version" type="object" name="create_new_version" class="oe_highlight" attrs="{'invisible': [('state', '=', 'active')]}"/> |
|
||||
<button string="New Agreement" type="object" name="create_new_agreement" class="oe_highlight" attrs="{'invisible': [('is_template', '=', False)]}"/> |
|
||||
<field name="stage_id" widget="statusbar" clickable="True" options="{'fold_field': 'fold'}" domain="[('stage_type', '=', 'agreement')]"/> |
|
||||
</header> |
|
||||
<sheet> |
|
||||
<div class="oe_button_box" name="button_box"> |
|
||||
</div> |
|
||||
<div class="oe_title"> |
|
||||
<label for="name" class="oe_edit_only" string="Agreement Name"/> |
|
||||
<h1> |
|
||||
<field name="name"/> |
|
||||
</h1> |
|
||||
</div> |
|
||||
<group string="General"> |
|
||||
<group> |
|
||||
<field name="code" readonly="1"/> |
|
||||
<field name="parent_agreement_id" |
|
||||
domain="[('partner_id', '=', partner_id)]"/> |
|
||||
<field name="is_template"/> |
|
||||
</group> |
|
||||
<group> |
|
||||
<field name="agreement_type_id" |
|
||||
widget="selection" |
|
||||
required="True"/> |
|
||||
<field name="agreement_subtype_id" |
|
||||
widget="selection" |
|
||||
domain="[('agreement_type_id', '=', agreement_type_id)]"/> |
|
||||
<field name="assigned_user_id" |
|
||||
attrs="{'invisible': [('is_template', '=', True)], 'readonly':[('is_template', '=', True)]}"/> |
|
||||
<field name="active" invisible="1"/> |
|
||||
<field name="state" invisible="1"/> |
|
||||
</group> |
|
||||
</group> |
|
||||
<group string="Description"> |
|
||||
<field name="description" |
|
||||
required="True" |
|
||||
nolabel="1"/> |
|
||||
</group> |
|
||||
<group class="oe_edit_only"> |
|
||||
<field name="field_domain" widget="domain" nolabel="1" |
|
||||
options="{'model': 'agreement', |
|
||||
'partial_use': True}" /> |
|
||||
<group> |
|
||||
<field name="default_value"/> |
|
||||
<field name="copyvalue"/> |
|
||||
</group> |
|
||||
<p> |
|
||||
This section (on the left) allows you to add dynamic fields inside the description and special terms. |
|
||||
<ol> |
|
||||
<li>Select the agreement field using the popup</li> |
|
||||
<li>Enter the default value if the field is empty</li> |
|
||||
<li>Copy and paste the placeholder expression in the description or the special terms</li> |
|
||||
</ol> |
|
||||
</p> |
|
||||
</group> |
|
||||
<group name="parties" string="Parties"> |
|
||||
<group name="cust_parties"> |
|
||||
<field name="use_parties_content" string="Use custom content" /> |
|
||||
</group> |
|
||||
<group name="cust_parties"> |
|
||||
<p> |
|
||||
This section (on the left) allows you to replace the default listing of the parties with custom dynamic content. |
|
||||
</p> |
|
||||
</group> |
|
||||
<group name="partner" |
|
||||
string="Partner"> |
|
||||
<div class="o_address_format"> |
|
||||
<field name="partner_id" |
|
||||
domain="[('customer', '=', True)]" |
|
||||
context="{'show_address': 1}" |
|
||||
options="{"always_reload": True}"/> |
|
||||
</div> |
|
||||
</group> |
|
||||
<group name="company" |
|
||||
string="Company"> |
|
||||
<div class="o_address_format"> |
|
||||
<field name="company_id" |
|
||||
readonly="1" |
|
||||
context="{'show_address': 1}" |
|
||||
options="{"always_reload": True}"/> |
|
||||
</div> |
|
||||
</group> |
|
||||
<group name="partner_left" string="Primary Contact"> |
|
||||
<field name="partner_contact_id" domain="[('parent_id', '=', partner_id)]" nolabel="1"/> |
|
||||
<field name="partner_contact_phone" widget="phone" readonly="1" nolabel="1"/> |
|
||||
<field name="partner_contact_email" widget="email" readonly="1" nolabel="1"/> |
|
||||
</group> |
|
||||
<group name="contact_right" string="Primary Contact"> |
|
||||
<field name="company_contact_id" domain="[('parent_id', '=', company_id.partner_id)]" nolabel="1"/> |
|
||||
<field name="company_contact_phone" widget="phone" readonly="1" nolabel="1"/> |
|
||||
<field name="company_contact_email" widget="email" readonly="1" nolabel="1"/> |
|
||||
</group> |
|
||||
</group> |
|
||||
<group name="parties_content" string="Parties Content" attrs="{'invisible':[('use_parties_content', '=', False)]}"> |
|
||||
<field name="parties" nolabel="1"/> |
|
||||
</group> |
|
||||
<group name="term_information"> |
|
||||
<group name="termdates_left" string="Term Dates"> |
|
||||
<field name="start_date" attrs="{'required': [('is_template', '=', False)], 'invisible': [('is_template', '=', True)]}"/> |
|
||||
<field name="end_date" attrs="{'required': [('is_template', '=', False)], 'invisible': [('is_template', '=', True)]}"/> |
|
||||
<field name="expiration_notice"/> |
|
||||
<field name="change_notice"/> |
|
||||
<field name="notification_address_id" domain="['|', ('parent_id', '=', partner_id), ('parent_id', '=', company_id.partner_id)]"/> |
|
||||
<field name="termination_requested"/> |
|
||||
<field name="termination_date"/> |
|
||||
</group> |
|
||||
</group> |
|
||||
<group string="Special Terms"> |
|
||||
<field name="special_terms" |
|
||||
nolabel="1"/> |
|
||||
</group> |
|
||||
<notebook> |
|
||||
<page name="structure" string="Structure"> |
|
||||
<div> |
|
||||
<button name="%(partner_agreement_contract_document_preview)d" string="Preview" type="action" class="oe_highlight"/> |
|
||||
<button name="%(partner_agreement_contract_document)d" string="Print" type="action" class="oe_highlight"/> |
|
||||
</div> |
|
||||
<separator string="Recitals"/> |
|
||||
<field name="recital_ids" |
|
||||
default_order="sequence" |
|
||||
nolabel="1" |
|
||||
context="{'default_agreement': active_id}"/> |
|
||||
<separator string="Sections"/> |
|
||||
<field name="sections_ids" |
|
||||
default_order='sequence' |
|
||||
nolabel="1" |
|
||||
context="{'default_agreement': active_id}"/> |
|
||||
<separator string="Clauses"/> |
|
||||
<field name="clauses_ids" |
|
||||
default_order='clause_id, sequence' |
|
||||
nolabel="1" |
|
||||
context="{'default_agreement': active_id}"/> |
|
||||
<separator string="Appendices"/> |
|
||||
<field name="appendix_ids" |
|
||||
default_order='sequence' |
|
||||
nolabel="1" |
|
||||
context="{'default_agreement': active_id}"/> |
|
||||
</page> |
|
||||
<page name="signature" string="Signatures"> |
|
||||
<group> |
|
||||
<group string="Partner"> |
|
||||
<field name="partner_signed_date"/> |
|
||||
<field name="partner_signed_user_id" domain="[('parent_id', '=', partner_id)]"/> |
|
||||
</group> |
|
||||
<group string="Company"> |
|
||||
<field name="company_signed_date"/> |
|
||||
<field name="company_signed_user_id"/> |
|
||||
<field name="signed_contract" filename="signed_contract_filename"/> |
|
||||
<field name="signed_contract_filename" invisible="1"/> |
|
||||
</group> |
|
||||
</group> |
|
||||
</page> |
|
||||
<page name="products" string="Products/Services"> |
|
||||
<field name="line_ids" nolabel="1"> |
|
||||
<tree editable="top"> |
|
||||
<field name="product_id"/> |
|
||||
<field name="name"/> |
|
||||
<field name="qty"/> |
|
||||
<field name="uom_id" groups="uom.group_uom"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</page> |
|
||||
<page name="child_agreements" string="Child Agreements"> |
|
||||
<field name="child_agreements_ids"> |
|
||||
<tree default_order='version desc'> |
|
||||
<field name="name"/> |
|
||||
<field name="version"/> |
|
||||
<field name="revision"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</page> |
|
||||
<page name="old_versions" string="Revisions"> |
|
||||
<field name="previous_version_agreements_ids" string="Previouse Versions"> |
|
||||
<tree default_order='version desc'> |
|
||||
<field name="name"/> |
|
||||
<field name="version"/> |
|
||||
<field name="revision"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</page> |
|
||||
<page name="performance" string="Performance"> |
|
||||
<p>This section is a place where financial records will show the current performance of this agreement.</p> |
|
||||
<p>Perhaps include invoices with total vs costs? </p> |
|
||||
</page> |
|
||||
</notebook> |
|
||||
<group string="Administration"> |
|
||||
<div> |
|
||||
<p>Reviewed by <field name="reviewed_user_id" class="oe_inline"/> on <field name="reviewed_date" class="oe_inline"/>.</p> |
|
||||
<p>Approved by <field name="approved_user_id" class="oe_inline"/> on <field name="approved_date" class="oe_inline"/>.</p> |
|
||||
</div> |
|
||||
</group> |
|
||||
<footer> |
|
||||
Version: <field name="version" readonly="True"/>.<field name="revision" readonly="True"/> |
|
||||
| Created By: <field name="create_uid" readonly="True"/> |
|
||||
| Created On: <field name="create_date" readonly="True"/> |
|
||||
</footer> |
|
||||
</sheet> |
|
||||
<div class="oe_chatter"> |
|
||||
<field name="message_follower_ids" widget="mail_followers"/> |
|
||||
<field name="message_ids" widget="mail_thread"/> |
|
||||
</div> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Kanban View --> |
|
||||
<record id="view_project_agreement_kanban" model="ir.ui.view"> |
|
||||
<field name="name">Agreement Kanban</field> |
|
||||
<field name="model">agreement</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<kanban default_group_by="stage_id"> |
|
||||
<field name="color"/> |
|
||||
<field name="assigned_user_id"/> |
|
||||
<templates> |
|
||||
<t t-name="kanban-box"> |
|
||||
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click"> |
|
||||
<div class="oe_kanban_content"> |
|
||||
<div class="o_kanban_record_top"> |
|
||||
<div class="o_kanban_record_headings"> |
|
||||
<strong class="o_kanban_record_title"> |
|
||||
<field name="name"/> |
|
||||
</strong><br/> |
|
||||
<div class="o_kanban_record_subtitle text-muted"> |
|
||||
<field name="partner_id" invisible="context.get('default_partner_id', False)"/> |
|
||||
<t t-if="record.end_date.raw_value and record.end_date.raw_value lt (new Date())" t-set="red">oe_kanban_text_red</t> |
|
||||
<div t-attf-class="#{red || ''}"> |
|
||||
<i><field name="end_date"/></i> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="o_dropdown_kanban dropdown" groups="base.group_user"> |
|
||||
<a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#"> |
|
||||
<span class="fa fa-ellipsis-v" aria-hidden="true"/> |
|
||||
</a> |
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> |
|
||||
<li t-if="widget.editable"><a type="edit">Edit</a></li> |
|
||||
<li class="divider"/> |
|
||||
<li class="dropdown-header">Record's Colour</li> |
|
||||
<li> |
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/> |
|
||||
</li> |
|
||||
</ul> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="o_kanban_record_body"> |
|
||||
<field name="agreement_type_id"/> - <field name="agreement_subtype_id"/> |
|
||||
</div> |
|
||||
<div class="o_kanban_record_bottom"> |
|
||||
<div class="oe_kanban_bottom_left"> |
|
||||
V: <field name="version"/> |
|
||||
</div> |
|
||||
<div class="oe_kanban_bottom_right"> |
|
||||
<img t-att-src="kanban_image('res.users', 'image_small', record.assigned_user_id.raw_value)" t-att-title="record.assigned_user_id.value" width="36" height="36" class="oe_kanban_avatar" alt="user & picture"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="oe_clear"/> |
|
||||
</div> |
|
||||
</t> |
|
||||
</templates> |
|
||||
</kanban> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Search View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_search_view"> |
|
||||
<field name="name">Agreement Search</field> |
|
||||
<field name="model">agreement</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<search string="Agreement Search"> |
|
||||
<field name="name"/> |
|
||||
<field name="partner_id"/> |
|
||||
<field name="agreement_type_id"/> |
|
||||
<field name="agreement_subtype_id"/> |
|
||||
<filter name="filter_non_template" string="Non-Templates" domain="[('active','=',True),('is_template', '=', False)]"/> |
|
||||
<filter name="filter_inactive" string="Archived" domain="[('active','=',False)]"/> |
|
||||
<filter name="filter_templates" string="Templates" domain="[('active','=',True),('is_template', '=', True)]"/> |
|
||||
<filter name="group_partner_id" string="Partners" icon="terp-partner" context="{'group_by':'partner_id'}"/> |
|
||||
<filter name="group_status" string="Status" icon="terp-partner" context="{'group_by':'state'}"/> |
|
||||
</search> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Reporting --> |
|
||||
<record id="agreement_graph_view" model="ir.ui.view"> |
|
||||
<field name="name">agreement.graph</field> |
|
||||
<field name="model">agreement</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<graph string="Agreements" type="bar"> |
|
||||
<field name="stage_id" type="row"/> |
|
||||
</graph> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="agreement_pivot_view" model="ir.ui.view"> |
|
||||
<field name="name">agreement.pivot</field> |
|
||||
<field name="model">agreement</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<pivot string="Agreements" display_quantity="true"> |
|
||||
<field name="stage_id" type="row"/> |
|
||||
</pivot> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<record id="action_agreement_report_order" model="ir.actions.act_window"> |
|
||||
<field name="name">Agreements</field> |
|
||||
<field name="res_model">agreement</field> |
|
||||
<field name="view_type">form</field> |
|
||||
<field name="view_mode">graph,pivot</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- actions opening views on models --> |
|
||||
|
|
||||
<record model="ir.actions.act_window" id="agreement_dashboard_agreement"> |
|
||||
<field name="name">Agreements</field> |
|
||||
<field name="res_model">agreement</field> |
|
||||
<field name="domain">[('is_template', '=', False)]</field> |
|
||||
<field name="view_mode">kanban,tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
<record model="ir.actions.act_window" id="agreement_operations_agreement"> |
|
||||
<field name="name">Agreements</field> |
|
||||
<field name="res_model">agreement</field> |
|
||||
<field name="domain">[('is_template', '=', False)]</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
<record model="ir.actions.act_window" id="partner_agreement_agreement_templates"> |
|
||||
<field name="name">Templates</field> |
|
||||
<field name="res_model">agreement</field> |
|
||||
<field name="domain">[('is_template', '=', True)]</field> |
|
||||
<!-- <field name="context">[('is_template', '=', True)]</field> --> |
|
||||
<field name="view_mode">tree,kanban,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,86 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
|
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Agreement Appendix List View--> |
|
||||
<record model="ir.ui.view" id="agreement_appendix_tree"> |
|
||||
<field name="name">Agreement Appendix Tree</field> |
|
||||
<field name="model">agreement.appendix</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree string="Appendices" default_order='agreement_id, sequence'> |
|
||||
<field name="sequence" widget="handle"/> |
|
||||
<field name="name"/> |
|
||||
<field name="title"/> |
|
||||
<field name="agreement_id"/> |
|
||||
<field name="active" invisible="1"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Appendix Form View --> |
|
||||
<record model="ir.ui.view" id="agreement_appendix_form"> |
|
||||
<field name="name">Agreement Appendix Form</field> |
|
||||
<field name="model">agreement.appendix</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Appendix"> |
|
||||
<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" widget="boolean_button" options="{"terminology": "archive"}"/> |
|
||||
</button> |
|
||||
</div> |
|
||||
<div class="oe_title"> |
|
||||
<label for="name" class="oe_edit_only"/> |
|
||||
<h1><field name="name"/></h1> |
|
||||
</div> |
|
||||
<group> |
|
||||
<group> |
|
||||
<field name="title"/> |
|
||||
<field name="agreement_id"/> |
|
||||
</group> |
|
||||
<group> |
|
||||
<field name="sequence"/> |
|
||||
</group> |
|
||||
</group> |
|
||||
<field name="content" widget="html"/> |
|
||||
<group class="oe_edit_only"> |
|
||||
<field name="field_domain" widget="domain" nolabel="1" |
|
||||
options="{'model': 'agreement.appendix', |
|
||||
'partial_use': True}" /> |
|
||||
<group> |
|
||||
<field name="default_value"/> |
|
||||
<field name="copyvalue"/> |
|
||||
</group> |
|
||||
<p> |
|
||||
This section (on the left) allows you to add dynamic fields inside the content. |
|
||||
<ol> |
|
||||
<li>Select the field using the popup</li> |
|
||||
<li>Enter the default value if the field is empty</li> |
|
||||
<li>Copy and paste the placeholder expression in the content</li> |
|
||||
</ol> |
|
||||
</p> |
|
||||
</group> |
|
||||
</sheet> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Appendix Search View --> |
|
||||
<record model="ir.ui.view" id="agreement_appendix_search"> |
|
||||
<field name="name">Agreement Appendix Search</field> |
|
||||
<field name="model">agreement.appendix</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<search> |
|
||||
<filter name="group_agreement" icon="terp-partner" context="{'group_by':'agreement_id'}"/> |
|
||||
</search> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="agreement_appendix_action"> |
|
||||
<field name="name">Appendices</field> |
|
||||
<field name="res_model">agreement.appendix</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,88 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Agreement Clause List View--> |
|
||||
<record model="ir.ui.view" id="partner_agreement_clause_list_view"> |
|
||||
<field name="name">Agreement Clause List</field> |
|
||||
<field name="model">agreement.clause</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree string="Clauses" default_order='agreement_id, sequence'> |
|
||||
<field name="sequence" widget="handle"/> |
|
||||
<field name="name"/> |
|
||||
<field name="title"/> |
|
||||
<field name="agreement_id"/> |
|
||||
<field name="section_id"/> |
|
||||
<field name="active" invisible="1"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Clause Form View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_clause_form_view"> |
|
||||
<field name="name">Agreement clause Form</field> |
|
||||
<field name="model">agreement.clause</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Clause"> |
|
||||
<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" widget="boolean_button" options="{"terminology": "archive"}"/> |
|
||||
</button> |
|
||||
</div> |
|
||||
<div class="oe_title"> |
|
||||
<label for="name" class="oe_edit_only"/> |
|
||||
<h1><field name="name"/></h1> |
|
||||
</div> |
|
||||
<group> |
|
||||
<group> |
|
||||
<field name="title"/> |
|
||||
<field name="agreement_id"/> |
|
||||
<field name="section_id" domain="[('agreement_id', '=', agreement_id)]"/> |
|
||||
</group> |
|
||||
<group> |
|
||||
<field name="sequence"/> |
|
||||
</group> |
|
||||
</group> |
|
||||
<field name="content" widget="html"/> |
|
||||
<group class="oe_edit_only"> |
|
||||
<field name="field_domain" widget="domain" nolabel="1" |
|
||||
options="{'model': 'agreement.clause', |
|
||||
'partial_use': True}" /> |
|
||||
<group> |
|
||||
<field name="default_value"/> |
|
||||
<field name="copyvalue"/> |
|
||||
</group> |
|
||||
<p> |
|
||||
This section (on the left) allows you to add dynamic fields inside the content. |
|
||||
<ol> |
|
||||
<li>Select the field using the popup</li> |
|
||||
<li>Enter the default value if the field is empty</li> |
|
||||
<li>Copy and paste the placeholder expression in the content</li> |
|
||||
</ol> |
|
||||
</p> |
|
||||
</group> |
|
||||
</sheet> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Clause Search View --> |
|
||||
<record model="ir.ui.view" id="agreement_clause_search_view"> |
|
||||
<field name="name">Agreement Clause Search</field> |
|
||||
<field name="model">agreement.clause</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<search string="Agreement Clause Search"> |
|
||||
<filter name="group_agreement" icon="terp-partner" context="{'group_by':'agreement_id'}"/> |
|
||||
<filter name="group_section" icon="terp-partner" context="{'group_by':'section_id'}"/> |
|
||||
</search> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="partner_agreement_action_clause"> |
|
||||
<field name="name">Clauses</field> |
|
||||
<field name="res_model">agreement.clause</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,45 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Agreement Increase Type List View--> |
|
||||
<record model="ir.ui.view" id="partner_agreement_increasetype_list_view"> |
|
||||
<field name="name">Agreement Increase Type List</field> |
|
||||
<field name="model">agreement.increasetype</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree default_order='name'> |
|
||||
<field name="name"/> |
|
||||
<field name="description"/> |
|
||||
<field name="increase_percent"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Increase Type Form View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_increasetype_form_view"> |
|
||||
<field name="name">Agreement Increase Type Form</field> |
|
||||
<field name="model">agreement.increasetype</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Agreements Type Form"> |
|
||||
<sheet> |
|
||||
<group> |
|
||||
<field name="name"/> |
|
||||
</group> |
|
||||
<group> |
|
||||
<field name="increase_percent"/> |
|
||||
</group> |
|
||||
<group string="Description"> |
|
||||
<field name="description" nolabel="1"/> |
|
||||
</group> |
|
||||
</sheet> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="partner_agreement_action_increasetype"> |
|
||||
<field name="name">Agreement Increase Type</field> |
|
||||
<field name="res_model">agreement.increasetype</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,87 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Agreement Recital List View--> |
|
||||
<record model="ir.ui.view" id="agreement_recital_tree"> |
|
||||
<field name="name">Agreement Recital Tree</field> |
|
||||
<field name="model">agreement.recital</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree string="Recitals" default_order='agreement_id, sequence'> |
|
||||
<field name="sequence" widget="handle"/> |
|
||||
<field name="name"/> |
|
||||
<field name="title"/> |
|
||||
<field name="agreement_id"/> |
|
||||
<field name="active" invisible="1"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Recital Form View --> |
|
||||
<record model="ir.ui.view" id="agreement_recital_form"> |
|
||||
<field name="name">Agreement Recital Form</field> |
|
||||
<field name="model">agreement.recital</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Recital"> |
|
||||
<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" widget="boolean_button" |
|
||||
options="{"terminology": "archive"}"/> |
|
||||
</button> |
|
||||
</div> |
|
||||
<div class="oe_title"> |
|
||||
<label for="name" class="oe_edit_only"/> |
|
||||
<h1><field name="name"/></h1> |
|
||||
</div> |
|
||||
<group> |
|
||||
<group> |
|
||||
<field name="title"/> |
|
||||
<field name="agreement_id"/> |
|
||||
</group> |
|
||||
<group> |
|
||||
<field name="sequence"/> |
|
||||
</group> |
|
||||
</group> |
|
||||
<field name="content" widget="html"/> |
|
||||
<group class="oe_edit_only"> |
|
||||
<field name="field_domain" widget="domain" nolabel="1" |
|
||||
options="{'model': 'agreement.recital', |
|
||||
'partial_use': True}" /> |
|
||||
<group> |
|
||||
<field name="default_value"/> |
|
||||
<field name="copyvalue"/> |
|
||||
</group> |
|
||||
<p> |
|
||||
This section (on the left) allows you to add dynamic fields inside the content. |
|
||||
<ol> |
|
||||
<li>Select the field using the popup</li> |
|
||||
<li>Enter the default value if the field is empty</li> |
|
||||
<li>Copy and paste the placeholder expression in the content</li> |
|
||||
</ol> |
|
||||
</p> |
|
||||
</group> |
|
||||
</sheet> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Recital Search View --> |
|
||||
<record model="ir.ui.view" id="agreement_recital_search"> |
|
||||
<field name="name">Agreement Recital Search</field> |
|
||||
<field name="model">agreement.recital</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<search> |
|
||||
<filter name="group_agreement" icon="terp-partner" context="{'group_by':'agreement_id'}"/> |
|
||||
</search> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="agreement_recital_action"> |
|
||||
<field name="name">Recitals</field> |
|
||||
<field name="res_model">agreement.recital</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,41 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Agreement Renewal Type List View--> |
|
||||
<record model="ir.ui.view" id="partner_agreement_renewaltype_list_view"> |
|
||||
<field name="name">Agreement Renewal Type List</field> |
|
||||
<field name="model">agreement.renewaltype</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree default_order='name'> |
|
||||
<field name="name"/> |
|
||||
<field name="description"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Renewal Type Form View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_renewaltype_form_view"> |
|
||||
<field name="name">Agreement Renewal Type Form</field> |
|
||||
<field name="model">agreement.renewaltype</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Agreements Type Form"> |
|
||||
<sheet> |
|
||||
<group> |
|
||||
<field name="name"/> |
|
||||
</group> |
|
||||
<group string="Description"> |
|
||||
<field name="description" nolabel="1"/> |
|
||||
</group> |
|
||||
</sheet> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="partner_agreement_action_renewaltype"> |
|
||||
<field name="name">Agreement Renewal Type</field> |
|
||||
<field name="res_model">agreement.renewaltype</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,100 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Agreement Sections List View--> |
|
||||
<record model="ir.ui.view" id="partner_agreement_section_list_view"> |
|
||||
<field name="name">Agreement Section List</field> |
|
||||
<field name="model">agreement.section</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree string="Sections" default_order='agreement_id, sequence'> |
|
||||
<field name="sequence" widget="handle"/> |
|
||||
<field name="name"/> |
|
||||
<field name="title"/> |
|
||||
<field name="agreement_id"/> |
|
||||
<field name="active" invisible="1"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Sections Form View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_section_form_view"> |
|
||||
<field name="name">Agreement Section Form</field> |
|
||||
<field name="model">agreement.section</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Section"> |
|
||||
<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" widget="boolean_button" options="{"terminology": "archive"}"/> |
|
||||
</button> |
|
||||
</div> |
|
||||
<div class="oe_title"> |
|
||||
<label for="name" class="oe_edit_only"/> |
|
||||
<h1><field name="name"/></h1> |
|
||||
</div> |
|
||||
<group> |
|
||||
<group> |
|
||||
<field name="title"/> |
|
||||
<field name="agreement_id"/> |
|
||||
</group> |
|
||||
<group> |
|
||||
<field name="sequence"/> |
|
||||
</group> |
|
||||
</group> |
|
||||
<notebook> |
|
||||
<page string="Content"> |
|
||||
<field name='content' nolabel="1"/> |
|
||||
<group class="oe_edit_only"> |
|
||||
<field name="field_domain" widget="domain" nolabel="1" |
|
||||
options="{'model': 'agreement.section', |
|
||||
'partial_use': True}" /> |
|
||||
<group> |
|
||||
<field name="default_value"/> |
|
||||
<field name="copyvalue"/> |
|
||||
</group> |
|
||||
<p> |
|
||||
This section (on the left) allows you to add dynamic fields inside the content. |
|
||||
<ol> |
|
||||
<li>Select the field using the popup</li> |
|
||||
<li>Enter the default value if the field is empty</li> |
|
||||
<li>Copy and paste the placeholder expression in the content</li> |
|
||||
</ol> |
|
||||
</p> |
|
||||
</group> |
|
||||
</page> |
|
||||
<page string="Clauses"> |
|
||||
<field name="clauses_ids" |
|
||||
nolabel="1" |
|
||||
context="{'default_section_id': active_id, 'default_agreement_id': agreement_id}"> |
|
||||
<tree> |
|
||||
<field name="sequence" widget="handle"/> |
|
||||
<field name="name"/> |
|
||||
<field name="title"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</page> |
|
||||
</notebook> |
|
||||
</sheet> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Section Search View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_section_search_view"> |
|
||||
<field name="name">Agreement Section Search</field> |
|
||||
<field name="model">agreement.section</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<search string="Agreement Section Search"> |
|
||||
<filter name="group_agreement" string="Agreements" icon="terp-partner" context="{'group_by':'agreement_id'}"/> |
|
||||
</search> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="partner_agreement_action_section"> |
|
||||
<field name="name">Agreement Sections</field> |
|
||||
<field name="res_model">agreement.section</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,45 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Agreement Stage List View--> |
|
||||
<record model="ir.ui.view" id="partner_agreement_stage_list_view"> |
|
||||
<field name="name">Agreement Stage List</field> |
|
||||
<field name="model">agreement.stage</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree default_order='sequence, name'> |
|
||||
<field name="sequence" widget="handle"/> |
|
||||
<field name="name" string="Stage Name"/> |
|
||||
<field name="stage_type"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Stage Form View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_stage_form_view"> |
|
||||
<field name="name">Agreement Stage Form</field> |
|
||||
<field name="model">agreement.stage</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Agreements Stage Form"> |
|
||||
<sheet> |
|
||||
<div class="oe_title"> |
|
||||
<label for="name" class="oe_edit_only" string="Stage Name"/> |
|
||||
<h1><field name="name" string="Stage Name"/></h1> |
|
||||
</div> |
|
||||
<group> |
|
||||
<field name="sequence"/> |
|
||||
<field name="stage_type"/> |
|
||||
<field name="fold"/> |
|
||||
</group> |
|
||||
</sheet> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="partner_agreement_action_stage"> |
|
||||
<field name="name">Agreement Stage</field> |
|
||||
<field name="res_model">agreement.stage</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,45 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Agreement Sub Type List View--> |
|
||||
<record model="ir.ui.view" id="partner_agreement_subtype_list_view"> |
|
||||
<field name="name">Agreement Subtype List</field> |
|
||||
<field name="model">agreement.subtype</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<tree default_order='name'> |
|
||||
<field name="name" string="Sub-Type Name"/> |
|
||||
<field name="agreement_type_id" string="Agreement Type"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Sub Type Form View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_subtype_form_view"> |
|
||||
<field name="name">Agreement Sub Type Form</field> |
|
||||
<field name="model">agreement.subtype</field> |
|
||||
<field name="arch" type="xml"> |
|
||||
<form string="Agreement Sub-Types"> |
|
||||
<sheet> |
|
||||
<div class="oe_title"> |
|
||||
<label for="name" class="oe_edit_only"/> |
|
||||
<h1><field name="name"/></h1> |
|
||||
</div> |
|
||||
<group> |
|
||||
<group> |
|
||||
<field name="agreement_type_id"/> |
|
||||
</group> |
|
||||
<group></group> |
|
||||
</group> |
|
||||
</sheet> |
|
||||
</form> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="partner_agreement_action_subtype"> |
|
||||
<field name="name">Agreement Sub-Types</field> |
|
||||
<field name="res_model">agreement.subtype</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,40 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Agreement Type List View--> |
|
||||
<record model="ir.ui.view" id="partner_agreement_type_list_view"> |
|
||||
<field name="name">Agreement Type List</field> |
|
||||
<field name="model">agreement.type</field> |
|
||||
<field name="inherit_id" ref="agreement.agreement_type_list_view"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<field name="name" position="after"> |
|
||||
<field name="agreement_subtypes_ids" string="Sub-Types"/> |
|
||||
</field> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Agreement Type Form View --> |
|
||||
<record model="ir.ui.view" id="partner_agreement_type_form_view"> |
|
||||
<field name="name">Agreement Type Form</field> |
|
||||
<field name="model">agreement.type</field> |
|
||||
<field name="inherit_id" ref="agreement.agreement_type_form_view"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<xpath expr="//sheet" position="inside"> |
|
||||
<field name="agreement_subtypes_ids" |
|
||||
nolabel="1"> |
|
||||
<tree editable="bottom"> |
|
||||
<field name="name"/> |
|
||||
</tree> |
|
||||
</field> |
|
||||
</xpath> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<!-- Actions opening views on models --> |
|
||||
<record model="ir.actions.act_window" id="partner_agreement_action_type"> |
|
||||
<field name="name">Agreement Types</field> |
|
||||
<field name="res_model">agreement.type</field> |
|
||||
<field name="view_mode">tree,form</field> |
|
||||
</record> |
|
||||
|
|
||||
</odoo> |
|
@ -1,147 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<!-- Remove top menu from agreement module --> |
|
||||
<!-- <delete model="ir.ui.menu" id="agreement.agreement_menu" /> --> |
|
||||
|
|
||||
<!-- Top menu item --> |
|
||||
<menuitem |
|
||||
name="Agreements" |
|
||||
id="agreement.agreement_menu" |
|
||||
web_icon="agreement_legal,static/description/icon.png" |
|
||||
sequence="80" |
|
||||
action="agreement_dashboard_agreement" |
|
||||
groups="agreement_legal.group_agreement_readonly"/> |
|
||||
<!-- Dashboard --> |
|
||||
<menuitem |
|
||||
name="Dashboard" |
|
||||
id="agreement_dashboard" |
|
||||
parent="agreement.agreement_menu" |
|
||||
sequence="10"/> |
|
||||
<menuitem |
|
||||
name="Agreements" |
|
||||
id="dashboard_agreements" |
|
||||
parent="agreement_dashboard" |
|
||||
sequence="10" |
|
||||
action="agreement_dashboard_agreement"/> |
|
||||
|
|
||||
<!-- Operations --> |
|
||||
<menuitem |
|
||||
name="Operations" |
|
||||
id="agreement_operations" |
|
||||
parent="agreement.agreement_menu" |
|
||||
sequence="20"/> |
|
||||
<menuitem |
|
||||
name="Agreements" |
|
||||
id="operations_agreements" |
|
||||
parent="agreement_operations" |
|
||||
sequence="10" |
|
||||
action="agreement_operations_agreement"/> |
|
||||
|
|
||||
<!-- Master Data --> |
|
||||
<menuitem |
|
||||
name="Master Data" |
|
||||
id="agreement_masterdata" |
|
||||
parent="agreement.agreement_menu" |
|
||||
sequence="30"/> |
|
||||
<menuitem |
|
||||
name="Contents" |
|
||||
id="agreement_data_contents" |
|
||||
parent="agreement_masterdata" |
|
||||
sequence="10"/> |
|
||||
<menuitem |
|
||||
name="Recitals" |
|
||||
id="agreement_recitals" |
|
||||
parent="agreement_data_contents" |
|
||||
sequence="10" |
|
||||
action="agreement_recital_action"/> |
|
||||
<menuitem |
|
||||
name="Clauses" |
|
||||
id="agreement_clauses" |
|
||||
parent="agreement_data_contents" |
|
||||
sequence="20" |
|
||||
action="partner_agreement_action_clause"/> |
|
||||
<menuitem |
|
||||
name="Sections" |
|
||||
id="agreement_sections" |
|
||||
parent="agreement_data_contents" |
|
||||
sequence="30" |
|
||||
action="partner_agreement_action_section"/> |
|
||||
<menuitem |
|
||||
name="Appendices" |
|
||||
id="agreement_appendices" |
|
||||
parent="agreement_data_contents" |
|
||||
sequence="40" |
|
||||
action="agreement_appendix_action"/> |
|
||||
<menuitem |
|
||||
name="Products" |
|
||||
id="agreement_products" |
|
||||
sequence="100" |
|
||||
parent="agreement_masterdata" |
|
||||
action="product.product_template_action"/> |
|
||||
|
|
||||
<!-- Reporting --> |
|
||||
<menuitem |
|
||||
name="Reporting" |
|
||||
id="agreement_reporting" |
|
||||
sequence="40" |
|
||||
parent="agreement.agreement_menu" |
|
||||
groups="agreement_legal.group_agreement_manager"/> |
|
||||
|
|
||||
<menuitem |
|
||||
name="Agreements" |
|
||||
id="agreement_agreement_reporting" |
|
||||
sequence="10" |
|
||||
parent="agreement_reporting" |
|
||||
action="action_agreement_report_order"/> |
|
||||
|
|
||||
<!-- Configuration --> |
|
||||
<menuitem |
|
||||
name="Configuration" |
|
||||
id="agreement_configuration" |
|
||||
sequence="50" |
|
||||
parent="agreement.agreement_menu" |
|
||||
groups="agreement_legal.group_agreement_manager"/> |
|
||||
<menuitem |
|
||||
name="Settings" |
|
||||
id="agreement_settings" |
|
||||
sequence="10" |
|
||||
parent="agreement_configuration" |
|
||||
action="agreement_legal.action_agreement_config"/> |
|
||||
<menuitem |
|
||||
name="Templates" |
|
||||
id="template" |
|
||||
parent="agreement_configuration" |
|
||||
sequence="20" |
|
||||
action="partner_agreement_agreement_templates"/> |
|
||||
<menuitem |
|
||||
name="Renewal Types" |
|
||||
id="agreement_renewaltype" |
|
||||
parent="agreement_configuration" |
|
||||
sequence="30" |
|
||||
action="partner_agreement_action_renewaltype"/> |
|
||||
<menuitem |
|
||||
name="Increase Types" |
|
||||
id="agreement_increamenttypes" |
|
||||
parent="agreement_configuration" |
|
||||
sequence="31" |
|
||||
action="partner_agreement_action_increasetype"/> |
|
||||
<menuitem |
|
||||
name="Stages" |
|
||||
id="agreement_stages" |
|
||||
parent="agreement_configuration" |
|
||||
sequence="40" |
|
||||
action="partner_agreement_action_stage"/> |
|
||||
<menuitem |
|
||||
name="Types" |
|
||||
id="agreement_types" |
|
||||
parent="agreement_configuration" |
|
||||
sequence="50" |
|
||||
action="partner_agreement_action_type"/> |
|
||||
<menuitem |
|
||||
name="Sub-Types" |
|
||||
id="agreement_subtypes" |
|
||||
parent="agreement_configuration" |
|
||||
sequence="60" |
|
||||
action="partner_agreement_action_subtype"/> |
|
||||
</odoo> |
|
@ -1,161 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<record id="res_config_settings_view_form" model="ir.ui.view"> |
|
||||
<field name="name">res.config.settings.view.form.agreement</field> |
|
||||
<field name="model">res.config.settings</field> |
|
||||
<field name="priority" eval="40"/> |
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<xpath expr="//div[hasclass('settings')]" position="inside"> |
|
||||
<div class="app_settings_block" |
|
||||
data-string="Agreements" |
|
||||
string="Agreements" |
|
||||
data-key="agreement_legal" |
|
||||
groups="agreement_legal.group_agreement_manager"> |
|
||||
<h2>Operations</h2> |
|
||||
<div class="row mt16 o_settings_container"> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="group_uom"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="group_uom"/> |
|
||||
<div class="text-muted"> |
|
||||
Sell and purchase products in different units of measure |
|
||||
</div> |
|
||||
<div class="content-group"> |
|
||||
<div class="mt16" attrs="{'invisible': [('group_uom', '=', False)]}"> |
|
||||
<button name="%(uom.product_uom_form_action)d" icon="fa-arrow-right" type="action" string="Units Of Measure" class="btn-link"/> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<h2>Advanced Features</h2> |
|
||||
<div class="row mt16 o_settings_container"> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_agreement_sale"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Sales"/> |
|
||||
<div class="text-muted"> |
|
||||
Create an agreement when the sales order is confirmed |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box" |
|
||||
attrs="{'invisible': [('module_agreement_sale', '!=', True)]}"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_agreement_sale_subscription"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Sale Subscriptions"/> |
|
||||
<div class="text-muted"> |
|
||||
Link your subscriptions to an agreement |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_fieldservice_agreement"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Field Service"/> |
|
||||
<div class="text-muted"> |
|
||||
Link your Field Service orders and equipments to an agreement |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_agreement_stock"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Inventory"/> |
|
||||
<div class="text-muted"> |
|
||||
Link your transfers to an agreement |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_agreement_rma"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Returns"/> |
|
||||
<div class="text-muted"> |
|
||||
Link your returns to an agreement |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_agreement_maintenance"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Maintenance"/> |
|
||||
<div class="text-muted"> |
|
||||
Manage maintenance agreements and contracts |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_agreement_mrp"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Manufacturing"/> |
|
||||
<div class="text-muted"> |
|
||||
Link your manufacturing orders to an agreement |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_agreement_repair"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Repair"/> |
|
||||
<div class="text-muted"> |
|
||||
Link your repair orders to an agreement |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_agreement_project"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Project"/> |
|
||||
<div class="text-muted"> |
|
||||
Link your projects and tasks to an agreement |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div class="col-xs-12 col-md-6 o_setting_box"> |
|
||||
<div class="o_setting_left_pane"> |
|
||||
<field name="module_agreement_helpdesk"/> |
|
||||
</div> |
|
||||
<div class="o_setting_right_pane"> |
|
||||
<label for="" string="Helpdesk"/> |
|
||||
<div class="text-muted"> |
|
||||
Link your Helpdesk tickets to an agreement |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</xpath> |
|
||||
</field> |
|
||||
</record> |
|
||||
|
|
||||
<act_window id="action_agreement_config" |
|
||||
name="Settings" |
|
||||
res_model="res.config.settings" |
|
||||
view_mode="form" |
|
||||
target="inline" |
|
||||
context="{'module': 'agreement'}"/> |
|
||||
|
|
||||
</odoo> |
|
@ -1,17 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<odoo> |
|
||||
|
|
||||
<record model="ir.ui.view" id="partner_form"> |
|
||||
<field name="model">res.partner</field> |
|
||||
<field name="inherit_id" ref="base.view_partner_form"/> |
|
||||
<field name="arch" type="xml"> |
|
||||
<xpath expr="//page[@name='internal_notes']" position="after"> |
|
||||
<page name="agreement" string="Agreements"> |
|
||||
<group> |
|
||||
<field name="agreement_ids" nolabel="1"/> |
|
||||
</group> |
|
||||
</page> |
|
||||
</xpath> |
|
||||
</field> |
|
||||
</record> |
|
||||
</odoo> |
|
@ -1,131 +0,0 @@ |
|||||
==================== |
|
||||
Agreement Legal Sale |
|
||||
==================== |
|
||||
|
|
||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
||||
!! This file is generated by oca-gen-addon-readme !! |
|
||||
!! changes will be overwritten. !! |
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
||||
|
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png |
|
||||
:target: https://odoo-community.org/page/development-status |
|
||||
:alt: Beta |
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png |
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|
||||
:alt: License: AGPL-3 |
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcontract-lightgray.png?logo=github |
|
||||
:target: https://github.com/OCA/contract/tree/12.0/agreement_legal_sale |
|
||||
:alt: OCA/contract |
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png |
|
||||
:target: https://translation.odoo-community.org/projects/contract-12-0/contract-12-0-agreement_legal_sale |
|
||||
:alt: Translate me on Weblate |
|
||||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png |
|
||||
:target: https://runbot.odoo-community.org/runbot/110/12.0 |
|
||||
:alt: Try me on Runbot |
|
||||
|
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5| |
|
||||
|
|
||||
Odoo Sales App does not support the management of legal content for agreements |
|
||||
and contracts. It's also not integrated with the Agreement App. |
|
||||
|
|
||||
This module is for companies that needs their customer to sign an agreement |
|
||||
with all the legal information based on the selected agreement template. |
|
||||
|
|
||||
**Table of contents** |
|
||||
|
|
||||
.. contents:: |
|
||||
:local: |
|
||||
|
|
||||
Configuration |
|
||||
============= |
|
||||
|
|
||||
To configure this module: |
|
||||
|
|
||||
* Go to Agreement > Configuration > Templates |
|
||||
* Create a new template with sections and clauses and their respective content |
|
||||
* Go to Agreement > Configuration > Stages |
|
||||
* Create and reorder stages to match your process |
|
||||
|
|
||||
Usage |
|
||||
===== |
|
||||
|
|
||||
To use this module: |
|
||||
|
|
||||
* Go to Sales |
|
||||
* Create or select a quotation |
|
||||
* Set the agreement template and add some products |
|
||||
* Confirm the quotation. An agreement is created and linked to the sales order: |
|
||||
|
|
||||
* the agreement template is copied into an agreement with a copy of the |
|
||||
sections, clauses, recitals and appendices |
|
||||
* all the sales order lines are added as agreement lines |
|
||||
* the service products (with is_serviceprofile = True) on the SO are added as service profile on the agreement |
|
||||
* the customer information is set from the sales order |
|
||||
* the eventual analytic account linked to the sales order is set on the agreement |
|
||||
* the agreement is linked to the sales order and vice versa |
|
||||
|
|
||||
Known issues / Roadmap |
|
||||
====================== |
|
||||
|
|
||||
The roadmap is documented on https://github.com/OCA/contract/issues. |
|
||||
|
|
||||
Bug Tracker |
|
||||
=========== |
|
||||
|
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/contract/issues>`_. |
|
||||
In case of trouble, please check there if your issue has already been reported. |
|
||||
If you spotted it first, help us smashing it by providing a detailed and welcomed |
|
||||
`feedback <https://github.com/OCA/contract/issues/new?body=module:%20agreement_legal_sale%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. |
|
||||
|
|
||||
Do not contact contributors directly about support or help with technical issues. |
|
||||
|
|
||||
Credits |
|
||||
======= |
|
||||
|
|
||||
Authors |
|
||||
~~~~~~~ |
|
||||
|
|
||||
* Open Source Integrators |
|
||||
|
|
||||
Contributors |
|
||||
~~~~~~~~~~~~ |
|
||||
|
|
||||
* Steven Campbell <scampbell@opensourceintegrators.com> |
|
||||
* Maxime Chambreuil <mchambreuil@opensourceintegrators.com> |
|
||||
* Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com> |
|
||||
|
|
||||
Other credits |
|
||||
~~~~~~~~~~~~~ |
|
||||
|
|
||||
The development of this module has been financially supported by: |
|
||||
|
|
||||
* Pavlov Media |
|
||||
* Open Source Integrators |
|
||||
|
|
||||
Maintainers |
|
||||
~~~~~~~~~~~ |
|
||||
|
|
||||
This module is maintained by the OCA. |
|
||||
|
|
||||
.. image:: https://odoo-community.org/logo.png |
|
||||
:alt: Odoo Community Association |
|
||||
:target: https://odoo-community.org |
|
||||
|
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|
||||
mission is to support the collaborative development of Odoo features and |
|
||||
promote its widespread use. |
|
||||
|
|
||||
.. |maintainer-osi-scampbell| image:: https://github.com/osi-scampbell.png?size=40px |
|
||||
:target: https://github.com/osi-scampbell |
|
||||
:alt: osi-scampbell |
|
||||
.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px |
|
||||
:target: https://github.com/max3903 |
|
||||
:alt: max3903 |
|
||||
|
|
||||
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__: |
|
||||
|
|
||||
|maintainer-osi-scampbell| |maintainer-max3903| |
|
||||
|
|
||||
This module is part of the `OCA/contract <https://github.com/OCA/contract/tree/12.0/agreement_legal_sale>`_ project on GitHub. |
|
||||
|
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
|
@ -1,3 +0,0 @@ |
|||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from . import models |
|
@ -1,26 +0,0 @@ |
|||||
# Copyright (C) 2019 - TODAY, Open Source Integrators |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
{ |
|
||||
'name': 'Agreement Legal Sale', |
|
||||
'summary': 'Create an agreement when the sale order is confirmed', |
|
||||
'version': '12.0.1.1.0', |
|
||||
'license': 'AGPL-3', |
|
||||
'author': 'Open Source Integrators, Odoo Community Association (OCA)', |
|
||||
'category': 'Agreement', |
|
||||
'website': 'https://github.com/OCA/contract', |
|
||||
'depends': [ |
|
||||
'agreement_legal', |
|
||||
'agreement_sale', |
|
||||
], |
|
||||
'data': [ |
|
||||
'views/agreement.xml', |
|
||||
'views/sale_order.xml', |
|
||||
], |
|
||||
'installable': True, |
|
||||
'development_status': 'Beta', |
|
||||
'maintainers': [ |
|
||||
'osi-scampbell', |
|
||||
'max3903', |
|
||||
], |
|
||||
} |
|
@ -1,55 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement_legal_sale |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 12.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"Last-Translator: <>\n" |
|
||||
"Language-Team: \n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: \n" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_agreement |
|
||||
msgid "Agreement" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_agreement_line |
|
||||
msgid "Agreement Lines" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_sale_order__agreement_template_id |
|
||||
msgid "Agreement Template" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement__analytic_account_id |
|
||||
msgid "Analytic Account" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_sale_order |
|
||||
msgid "Sale Order" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement_legal_sale.agreement_sale_form_view |
|
||||
msgid "Sales" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement__sale_id |
|
||||
msgid "Sales Order" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement_line__sale_line_id |
|
||||
msgid "Sales Order Line" |
|
||||
msgstr "" |
|
||||
|
|
@ -1,64 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement_sale |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 11.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"Last-Translator: <>\n" |
|
||||
"Language-Team: \n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: \n" |
|
||||
|
|
||||
#. module: agreement_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_sale.field_sale_order_agreement_id |
|
||||
#: model:ir.ui.view,arch_db:agreement_sale.product_template_form_view |
|
||||
msgid "Agreement" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_sale.field_sale_order_agreement_template_id |
|
||||
msgid "Agreement Template" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_sale.field_product_product_is_serviceprofile |
|
||||
#: model:ir.model.fields,field_description:agreement_sale.field_product_template_is_serviceprofile |
|
||||
msgid "Create a Service Profile" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_sale |
|
||||
#: model:ir.model.fields,help:agreement_sale.field_product_product_is_serviceprofile |
|
||||
#: model:ir.model.fields,help:agreement_sale.field_product_template_is_serviceprofile |
|
||||
msgid "If True, this product will create a service profile on the\n" |
|
||||
" agreement when the sales order is confirmed." |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_sale |
|
||||
#: model:ir.model,name:agreement_sale.model_product_template |
|
||||
msgid "Product Template" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_sale |
|
||||
#: model:ir.model,name:agreement_sale.model_sale_order |
|
||||
msgid "Quotation" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_sale |
|
||||
#: model:ir.ui.view,arch_db:agreement_sale.agreement_sale_form_view |
|
||||
msgid "Sales" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_sale.field_agreement_sale_id |
|
||||
msgid "Sales Order" |
|
||||
msgstr "" |
|
||||
|
|
||||
#. module: agreement_sale |
|
||||
#: model:ir.model,name:agreement_sale.model_agreement |
|
||||
msgid "agreement" |
|
||||
msgstr "" |
|
||||
|
|
@ -1,76 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement_sale |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 11.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"PO-Revision-Date: 2019-05-10 14:03+0000\n" |
|
||||
"Last-Translator: Maria Sparenberg <maria.sparenberg@gmx.net>\n" |
|
||||
"Language-Team: none\n" |
|
||||
"Language: de\n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n" |
|
||||
"X-Generator: Weblate 3.5.1\n" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_agreement |
|
||||
msgid "Agreement" |
|
||||
msgstr "Vereinbarung" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_agreement_line |
|
||||
msgid "Agreement Lines" |
|
||||
msgstr "Vereinbarungspositionen" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_sale_order__agreement_template_id |
|
||||
msgid "Agreement Template" |
|
||||
msgstr "Vereinbarungsvorlage" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement__analytic_account_id |
|
||||
msgid "Analytic Account" |
|
||||
msgstr "Kostenstelle" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_sale_order |
|
||||
msgid "Sale Order" |
|
||||
msgstr "Verkaufsauftrag" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement_legal_sale.agreement_sale_form_view |
|
||||
msgid "Sales" |
|
||||
msgstr "Verkauf" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement__sale_id |
|
||||
msgid "Sales Order" |
|
||||
msgstr "Verkaufsauftrag" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement_line__sale_line_id |
|
||||
msgid "Sales Order Line" |
|
||||
msgstr "Auftragszeile" |
|
||||
|
|
||||
#~ msgid "Create a Service Profile" |
|
||||
#~ msgstr "Dienstleistungsprofil erstellen" |
|
||||
|
|
||||
#~ msgid "" |
|
||||
#~ "If True, this product will create a service profile on the\n" |
|
||||
#~ " agreement when the sales order is confirmed." |
|
||||
#~ msgstr "" |
|
||||
#~ "Wenn der Haken gesetzt ist, wird dieses Produkt ein Dienstleistungsprofil " |
|
||||
#~ "in der Vereinbarung erzeugen, sobald der Verkaufsauftrag bestätigt wird." |
|
||||
|
|
||||
#~ msgid "Product Template" |
|
||||
#~ msgstr "Produktvorlage" |
|
||||
|
|
||||
#~ msgid "Quotation" |
|
||||
#~ msgstr "Angebot" |
|
||||
|
|
||||
#~ msgid "agreement" |
|
||||
#~ msgstr "Vereinbarung" |
|
@ -1,70 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement_legal_sale |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 12.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"PO-Revision-Date: 2019-04-19 17:15+0000\n" |
|
||||
"Last-Translator: Yves Goldberg <admin@ygol.com>\n" |
|
||||
"Language-Team: none\n" |
|
||||
"Language: fr\n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n" |
|
||||
"X-Generator: Weblate 3.5.1\n" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_agreement |
|
||||
msgid "Agreement" |
|
||||
msgstr "Accord" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_agreement_line |
|
||||
msgid "Agreement Lines" |
|
||||
msgstr "Lignes de l'accord" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_sale_order__agreement_template_id |
|
||||
msgid "Agreement Template" |
|
||||
msgstr "Modèle d'accord" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement__analytic_account_id |
|
||||
msgid "Analytic Account" |
|
||||
msgstr "Compte Analytique" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_sale_order |
|
||||
msgid "Sale Order" |
|
||||
msgstr "Commande" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement_legal_sale.agreement_sale_form_view |
|
||||
msgid "Sales" |
|
||||
msgstr "Vente" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement__sale_id |
|
||||
msgid "Sales Order" |
|
||||
msgstr "Commandes" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement_line__sale_line_id |
|
||||
msgid "Sales Order Line" |
|
||||
msgstr "Ligne de commande" |
|
||||
|
|
||||
#~ msgid "Create a Service Profile" |
|
||||
#~ msgstr "Créer un profil de service" |
|
||||
|
|
||||
#~ msgid "" |
|
||||
#~ "If True, this product will create a service profile on the\n" |
|
||||
#~ " agreement when the sales order is confirmed." |
|
||||
#~ msgstr "" |
|
||||
#~ "Si Vrai, ce produit créera un profil de service dans\n" |
|
||||
#~ " l'accord a la confirmation de la commande client." |
|
||||
|
|
||||
#~ msgid "Product Template" |
|
||||
#~ msgstr "Modèle Produit" |
|
@ -1,68 +0,0 @@ |
|||||
# Translation of Odoo Server. |
|
||||
# This file contains the translation of the following modules: |
|
||||
# * agreement_legal_sale |
|
||||
# |
|
||||
msgid "" |
|
||||
msgstr "" |
|
||||
"Project-Id-Version: Odoo Server 12.0\n" |
|
||||
"Report-Msgid-Bugs-To: \n" |
|
||||
"PO-Revision-Date: 2019-09-04 18:23+0000\n" |
|
||||
"Last-Translator: 黎伟杰 <674416404@qq.com>\n" |
|
||||
"Language-Team: none\n" |
|
||||
"Language: zh_CN\n" |
|
||||
"MIME-Version: 1.0\n" |
|
||||
"Content-Type: text/plain; charset=UTF-8\n" |
|
||||
"Content-Transfer-Encoding: \n" |
|
||||
"Plural-Forms: nplurals=1; plural=0;\n" |
|
||||
"X-Generator: Weblate 3.8\n" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_agreement |
|
||||
msgid "Agreement" |
|
||||
msgstr "协议" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_agreement_line |
|
||||
msgid "Agreement Lines" |
|
||||
msgstr "协议行" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_sale_order__agreement_template_id |
|
||||
msgid "Agreement Template" |
|
||||
msgstr "协议模板" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement__analytic_account_id |
|
||||
msgid "Analytic Account" |
|
||||
msgstr "分析账户" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model,name:agreement_legal_sale.model_sale_order |
|
||||
msgid "Sale Order" |
|
||||
msgstr "销售订单" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model_terms:ir.ui.view,arch_db:agreement_legal_sale.agreement_sale_form_view |
|
||||
msgid "Sales" |
|
||||
msgstr "销售" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement__sale_id |
|
||||
msgid "Sales Order" |
|
||||
msgstr "销售订单" |
|
||||
|
|
||||
#. module: agreement_legal_sale |
|
||||
#: model:ir.model.fields,field_description:agreement_legal_sale.field_agreement_line__sale_line_id |
|
||||
msgid "Sales Order Line" |
|
||||
msgstr "销售订单行" |
|
||||
|
|
||||
#~ msgid "Create a Service Profile" |
|
||||
#~ msgstr "创建服务配置文件" |
|
||||
|
|
||||
#~ msgid "" |
|
||||
#~ "If True, this product will create a service profile on the\n" |
|
||||
#~ " agreement when the sales order is confirmed." |
|
||||
#~ msgstr "如果为真,则当确认销售订单时,此产品将在协议上创建服务配置文件。" |
|
||||
|
|
||||
#~ msgid "Product Template" |
|
||||
#~ msgstr "产品模版" |
|
@ -1,6 +0,0 @@ |
|||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from . import ( |
|
||||
sale_order, |
|
||||
agreement, |
|
||||
) |
|
@ -1,21 +0,0 @@ |
|||||
# Copyright (C) 2019 - TODAY, Open Source Integrators |
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|
||||
|
|
||||
from odoo import fields, models |
|
||||
|
|
||||
|
|
||||
class Agreement(models.Model): |
|
||||
_inherit = 'agreement' |
|
||||
|
|
||||
sale_id = fields.Many2one('sale.order', string='Sales Order') |
|
||||
analytic_account_id = fields.Many2one( |
|
||||
'account.analytic.account', |
|
||||
'Analytic Account', |
|
||||
copy=False) |
|
||||
|
|
||||
|
|
||||
class AgreementLine(models.Model): |
|
||||
_inherit = "agreement.line" |
|
||||
|
|
||||
sale_line_id = fields.Many2one('sale.order.line', |
|
||||
string='Sales Order Line') |
|
Some files were not shown because too many files changed in this diff
Write
Preview
Loading…
Cancel
Save
Reference in new issue