-
165muk_fields_file/LICENSE
-
116muk_fields_file/README.rst
-
31muk_fields_file/__init__.py
-
38muk_fields_file/__manifest__.py
-
4muk_fields_file/doc/changelog.rst
-
116muk_fields_file/doc/index.rst
-
23muk_fields_file/fields/__init__.py
-
201muk_fields_file/fields/file.py
-
121muk_fields_file/i18n/ar.po
-
121muk_fields_file/i18n/de.po
-
121muk_fields_file/i18n/es.po
-
121muk_fields_file/i18n/fr.po
-
121muk_fields_file/i18n/hi.po
-
121muk_fields_file/i18n/muk_fields_file.pot
-
121muk_fields_file/i18n/nl.po
-
121muk_fields_file/i18n/pt.po
-
121muk_fields_file/i18n/ru.po
-
23muk_fields_file/models/__init__.py
-
43muk_fields_file/models/base.py
-
39muk_fields_file/models/ir_autovacuum.py
-
30muk_fields_file/models/ir_model_fields.py
-
23muk_fields_file/patch/__init__.py
-
26muk_fields_file/patch/fields.py
-
113muk_fields_file/patch/service_db.py
-
BINmuk_fields_file/static/description/banner.png
-
BINmuk_fields_file/static/description/icon.png
-
1muk_fields_file/static/description/icon.svg
-
188muk_fields_file/static/description/index.html
-
BINmuk_fields_file/static/description/logo.png
-
BINmuk_fields_file/static/description/preview.png
-
BINmuk_fields_file/static/description/service_customization.png
-
BINmuk_fields_file/static/description/service_development.png
-
BINmuk_fields_file/static/description/service_implementation.png
-
BINmuk_fields_file/static/description/service_integration.png
-
BINmuk_fields_file/static/description/service_support.png
-
23muk_fields_file/tests/__init__.py
-
41muk_fields_file/tests/test_file.py
@ -0,0 +1,165 @@ |
|||||
|
GNU LESSER GENERAL PUBLIC LICENSE |
||||
|
Version 3, 29 June 2007 |
||||
|
|
||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> |
||||
|
Everyone is permitted to copy and distribute verbatim copies |
||||
|
of this license document, but changing it is not allowed. |
||||
|
|
||||
|
|
||||
|
This version of the GNU Lesser General Public License incorporates |
||||
|
the terms and conditions of version 3 of the GNU General Public |
||||
|
License, supplemented by the additional permissions listed below. |
||||
|
|
||||
|
0. Additional Definitions. |
||||
|
|
||||
|
As used herein, "this License" refers to version 3 of the GNU Lesser |
||||
|
General Public License, and the "GNU GPL" refers to version 3 of the GNU |
||||
|
General Public License. |
||||
|
|
||||
|
"The Library" refers to a covered work governed by this License, |
||||
|
other than an Application or a Combined Work as defined below. |
||||
|
|
||||
|
An "Application" is any work that makes use of an interface provided |
||||
|
by the Library, but which is not otherwise based on the Library. |
||||
|
Defining a subclass of a class defined by the Library is deemed a mode |
||||
|
of using an interface provided by the Library. |
||||
|
|
||||
|
A "Combined Work" is a work produced by combining or linking an |
||||
|
Application with the Library. The particular version of the Library |
||||
|
with which the Combined Work was made is also called the "Linked |
||||
|
Version". |
||||
|
|
||||
|
The "Minimal Corresponding Source" for a Combined Work means the |
||||
|
Corresponding Source for the Combined Work, excluding any source code |
||||
|
for portions of the Combined Work that, considered in isolation, are |
||||
|
based on the Application, and not on the Linked Version. |
||||
|
|
||||
|
The "Corresponding Application Code" for a Combined Work means the |
||||
|
object code and/or source code for the Application, including any data |
||||
|
and utility programs needed for reproducing the Combined Work from the |
||||
|
Application, but excluding the System Libraries of the Combined Work. |
||||
|
|
||||
|
1. Exception to Section 3 of the GNU GPL. |
||||
|
|
||||
|
You may convey a covered work under sections 3 and 4 of this License |
||||
|
without being bound by section 3 of the GNU GPL. |
||||
|
|
||||
|
2. Conveying Modified Versions. |
||||
|
|
||||
|
If you modify a copy of the Library, and, in your modifications, a |
||||
|
facility refers to a function or data to be supplied by an Application |
||||
|
that uses the facility (other than as an argument passed when the |
||||
|
facility is invoked), then you may convey a copy of the modified |
||||
|
version: |
||||
|
|
||||
|
a) under this License, provided that you make a good faith effort to |
||||
|
ensure that, in the event an Application does not supply the |
||||
|
function or data, the facility still operates, and performs |
||||
|
whatever part of its purpose remains meaningful, or |
||||
|
|
||||
|
b) under the GNU GPL, with none of the additional permissions of |
||||
|
this License applicable to that copy. |
||||
|
|
||||
|
3. Object Code Incorporating Material from Library Header Files. |
||||
|
|
||||
|
The object code form of an Application may incorporate material from |
||||
|
a header file that is part of the Library. You may convey such object |
||||
|
code under terms of your choice, provided that, if the incorporated |
||||
|
material is not limited to numerical parameters, data structure |
||||
|
layouts and accessors, or small macros, inline functions and templates |
||||
|
(ten or fewer lines in length), you do both of the following: |
||||
|
|
||||
|
a) Give prominent notice with each copy of the object code that the |
||||
|
Library is used in it and that the Library and its use are |
||||
|
covered by this License. |
||||
|
|
||||
|
b) Accompany the object code with a copy of the GNU GPL and this license |
||||
|
document. |
||||
|
|
||||
|
4. Combined Works. |
||||
|
|
||||
|
You may convey a Combined Work under terms of your choice that, |
||||
|
taken together, effectively do not restrict modification of the |
||||
|
portions of the Library contained in the Combined Work and reverse |
||||
|
engineering for debugging such modifications, if you also do each of |
||||
|
the following: |
||||
|
|
||||
|
a) Give prominent notice with each copy of the Combined Work that |
||||
|
the Library is used in it and that the Library and its use are |
||||
|
covered by this License. |
||||
|
|
||||
|
b) Accompany the Combined Work with a copy of the GNU GPL and this license |
||||
|
document. |
||||
|
|
||||
|
c) For a Combined Work that displays copyright notices during |
||||
|
execution, include the copyright notice for the Library among |
||||
|
these notices, as well as a reference directing the user to the |
||||
|
copies of the GNU GPL and this license document. |
||||
|
|
||||
|
d) Do one of the following: |
||||
|
|
||||
|
0) Convey the Minimal Corresponding Source under the terms of this |
||||
|
License, and the Corresponding Application Code in a form |
||||
|
suitable for, and under terms that permit, the user to |
||||
|
recombine or relink the Application with a modified version of |
||||
|
the Linked Version to produce a modified Combined Work, in the |
||||
|
manner specified by section 6 of the GNU GPL for conveying |
||||
|
Corresponding Source. |
||||
|
|
||||
|
1) Use a suitable shared library mechanism for linking with the |
||||
|
Library. A suitable mechanism is one that (a) uses at run time |
||||
|
a copy of the Library already present on the user's computer |
||||
|
system, and (b) will operate properly with a modified version |
||||
|
of the Library that is interface-compatible with the Linked |
||||
|
Version. |
||||
|
|
||||
|
e) Provide Installation Information, but only if you would otherwise |
||||
|
be required to provide such information under section 6 of the |
||||
|
GNU GPL, and only to the extent that such information is |
||||
|
necessary to install and execute a modified version of the |
||||
|
Combined Work produced by recombining or relinking the |
||||
|
Application with a modified version of the Linked Version. (If |
||||
|
you use option 4d0, the Installation Information must accompany |
||||
|
the Minimal Corresponding Source and Corresponding Application |
||||
|
Code. If you use option 4d1, you must provide the Installation |
||||
|
Information in the manner specified by section 6 of the GNU GPL |
||||
|
for conveying Corresponding Source.) |
||||
|
|
||||
|
5. Combined Libraries. |
||||
|
|
||||
|
You may place library facilities that are a work based on the |
||||
|
Library side by side in a single library together with other library |
||||
|
facilities that are not Applications and are not covered by this |
||||
|
License, and convey such a combined library under terms of your |
||||
|
choice, if you do both of the following: |
||||
|
|
||||
|
a) Accompany the combined library with a copy of the same work based |
||||
|
on the Library, uncombined with any other library facilities, |
||||
|
conveyed under the terms of this License. |
||||
|
|
||||
|
b) Give prominent notice with the combined library that part of it |
||||
|
is a work based on the Library, and explaining where to find the |
||||
|
accompanying uncombined form of the same work. |
||||
|
|
||||
|
6. Revised Versions of the GNU Lesser General Public License. |
||||
|
|
||||
|
The Free Software Foundation may publish revised and/or new versions |
||||
|
of the GNU Lesser 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 |
||||
|
Library as you received it specifies that a certain numbered version |
||||
|
of the GNU Lesser General Public License "or any later version" |
||||
|
applies to it, you have the option of following the terms and |
||||
|
conditions either of that published version or of any later version |
||||
|
published by the Free Software Foundation. If the Library as you |
||||
|
received it does not specify a version number of the GNU Lesser |
||||
|
General Public License, you may choose any version of the GNU Lesser |
||||
|
General Public License ever published by the Free Software Foundation. |
||||
|
|
||||
|
If the Library as you received it specifies that a proxy can decide |
||||
|
whether future versions of the GNU Lesser General Public License shall |
||||
|
apply, that proxy's public statement of acceptance of any version is |
||||
|
permanent authorization for you to choose that version for the |
||||
|
Library. |
@ -0,0 +1,116 @@ |
|||||
|
=================== |
||||
|
MuK Filestore Field |
||||
|
=================== |
||||
|
|
||||
|
Provides a field to store bytes as a file in the filestore. This fields are useful |
||||
|
with data values too large to be manipulated conveniently as a whole and a way to |
||||
|
keep the database slim since it only has to save the path to the file and not the |
||||
|
content itself. |
||||
|
|
||||
|
Installation |
||||
|
============ |
||||
|
|
||||
|
To install this module, you need to: |
||||
|
|
||||
|
Download the module and add it to your Odoo addons folder. Afterward, log on to |
||||
|
your Odoo server and go to the Apps menu. Trigger the debug mode and update the |
||||
|
list by clicking on the "Update Apps List" link. Now install the module by |
||||
|
clicking on the install button. |
||||
|
|
||||
|
Another way to install this module is via the package management for Python |
||||
|
(`PyPI <https://pypi.org/project/pip/>`_). |
||||
|
|
||||
|
To install our modules using the package manager make sure |
||||
|
`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed |
||||
|
correctly. Note that for Odoo version 11.0 and later this is not necessary anymore. |
||||
|
Then open a console and install the module by entering the following command: |
||||
|
|
||||
|
``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` |
||||
|
|
||||
|
The module name consists of the Odoo version and the module name, where |
||||
|
underscores are replaced by a dash. |
||||
|
|
||||
|
**Module:** |
||||
|
|
||||
|
``odoo<version>-addon-<module_name>`` |
||||
|
|
||||
|
**Example:** |
||||
|
|
||||
|
``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo13-addon-muk-utils`` |
||||
|
|
||||
|
Once the installation has been successfully completed, the app is already in the |
||||
|
correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the |
||||
|
debug mode and update the list by clicking on the "Update Apps List" link. Now |
||||
|
install the module by clicking on the install button. |
||||
|
|
||||
|
The biggest advantage of this variant is that you can now also update the app |
||||
|
using the "pip" command. To do this, enter the following command in your console: |
||||
|
|
||||
|
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` |
||||
|
|
||||
|
When the process is finished, restart your server and update the application in |
||||
|
Odoo. The steps are the same as for the installation only the button has changed |
||||
|
from "Install" to "Upgrade". |
||||
|
|
||||
|
You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ |
||||
|
and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. |
||||
|
|
||||
|
For modules licensed under a proprietary license, you will receive the access data after you purchased |
||||
|
the module. If the purchase were made at the Odoo store please contact our `support <support@mukit.at>`_ |
||||
|
with a confirmation of the purchase to receive the corresponding access data. |
||||
|
|
||||
|
Upgrade |
||||
|
============ |
||||
|
|
||||
|
To upgrade this module, you need to: |
||||
|
|
||||
|
Download the module and add it to your Odoo addons folder. Restart the server |
||||
|
and log on to your Odoo server. Select the Apps menu and upgrade the module by |
||||
|
clicking on the upgrade button. |
||||
|
|
||||
|
If you installed the module using the "pip" command, you can also update the |
||||
|
module in the same way. Just type the following command into the console: |
||||
|
|
||||
|
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` |
||||
|
|
||||
|
When the process is finished, restart your server and update the application in |
||||
|
Odoo, just like you would normally. |
||||
|
|
||||
|
|
||||
|
Configuration |
||||
|
============= |
||||
|
|
||||
|
No additional configuration is needed to use this module. |
||||
|
|
||||
|
Usage |
||||
|
===== |
||||
|
|
||||
|
This module has no direct visible effect on the system. It adds a new field type, |
||||
|
which can be used in other modules. |
||||
|
|
||||
|
Credit |
||||
|
====== |
||||
|
|
||||
|
Contributors |
||||
|
------------ |
||||
|
|
||||
|
* Mathias Markl <mathias.markl@mukit.at> |
||||
|
|
||||
|
Images |
||||
|
------ |
||||
|
|
||||
|
Some pictures are based on or inspired by the icon set of Font Awesome: |
||||
|
|
||||
|
* `Font Awesome <https://fontawesome.com>`_ |
||||
|
|
||||
|
Author & Maintainer |
||||
|
------------------- |
||||
|
|
||||
|
This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. |
||||
|
|
||||
|
MuK IT is an Austrian company specialized in customizing and extending Odoo. |
||||
|
We develop custom solutions for your individual needs to help you focus on |
||||
|
your strength and expertise to grow your business. |
||||
|
|
||||
|
If you want to get in touch please contact us via `mail <sale@mukit.at>`_ |
||||
|
or visit our `website <https://mukit.at>`_. |
@ -0,0 +1,31 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
from . import controllers, fields, models |
||||
|
|
||||
|
# ---------------------------------------------------------- |
||||
|
# Patch System on Load |
||||
|
# ---------------------------------------------------------- |
||||
|
|
||||
|
|
||||
|
def _patch_system(): |
||||
|
from . import patch |
@ -0,0 +1,38 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
{ |
||||
|
"name": "MuK Filestore Field", |
||||
|
"summary": """Filestore Support for Fields""", |
||||
|
"version": "13.0.1.0.0", |
||||
|
"category": "Extra Tools", |
||||
|
"license": "LGPL-3", |
||||
|
"website": "https://www.mukit.at", |
||||
|
"author": "MuK IT", |
||||
|
"contributors": ["Mathias Markl <mathias.markl@mukit.at>"], |
||||
|
"depends": ["muk_utils"], |
||||
|
"images": ["static/description/banner.png"], |
||||
|
"auto_install": False, |
||||
|
"application": False, |
||||
|
"installable": True, |
||||
|
"post_load": "_patch_system", |
||||
|
} |
@ -0,0 +1,4 @@ |
|||||
|
`1.0.0` |
||||
|
------- |
||||
|
|
||||
|
- Init version |
@ -0,0 +1,116 @@ |
|||||
|
=================== |
||||
|
MuK Filestore Field |
||||
|
=================== |
||||
|
|
||||
|
Provides a field to store bytes as a file in the filestore. This fields are useful |
||||
|
with data values too large to be manipulated conveniently as a whole and a way to |
||||
|
keep the database slim since it only has to save the path to the file and not the |
||||
|
content itself. |
||||
|
|
||||
|
Installation |
||||
|
============ |
||||
|
|
||||
|
To install this module, you need to: |
||||
|
|
||||
|
Download the module and add it to your Odoo addons folder. Afterward, log on to |
||||
|
your Odoo server and go to the Apps menu. Trigger the debug mode and update the |
||||
|
list by clicking on the "Update Apps List" link. Now install the module by |
||||
|
clicking on the install button. |
||||
|
|
||||
|
Another way to install this module is via the package management for Python |
||||
|
(`PyPI <https://pypi.org/project/pip/>`_). |
||||
|
|
||||
|
To install our modules using the package manager make sure |
||||
|
`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed |
||||
|
correctly. Note that for Odoo version 11.0 and later this is not necessary anymore. |
||||
|
Then open a console and install the module by entering the following command: |
||||
|
|
||||
|
``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` |
||||
|
|
||||
|
The module name consists of the Odoo version and the module name, where |
||||
|
underscores are replaced by a dash. |
||||
|
|
||||
|
**Module:** |
||||
|
|
||||
|
``odoo<version>-addon-<module_name>`` |
||||
|
|
||||
|
**Example:** |
||||
|
|
||||
|
``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo13-addon-muk-utils`` |
||||
|
|
||||
|
Once the installation has been successfully completed, the app is already in the |
||||
|
correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the |
||||
|
debug mode and update the list by clicking on the "Update Apps List" link. Now |
||||
|
install the module by clicking on the install button. |
||||
|
|
||||
|
The biggest advantage of this variant is that you can now also update the app |
||||
|
using the "pip" command. To do this, enter the following command in your console: |
||||
|
|
||||
|
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` |
||||
|
|
||||
|
When the process is finished, restart your server and update the application in |
||||
|
Odoo. The steps are the same as for the installation only the button has changed |
||||
|
from "Install" to "Upgrade". |
||||
|
|
||||
|
You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_ |
||||
|
and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_. |
||||
|
|
||||
|
For modules licensed under a proprietary license, you will receive the access data after you purchased |
||||
|
the module. If the purchase were made at the Odoo store please contact our `support <support@mukit.at>`_ |
||||
|
with a confirmation of the purchase to receive the corresponding access data. |
||||
|
|
||||
|
Upgrade |
||||
|
============ |
||||
|
|
||||
|
To upgrade this module, you need to: |
||||
|
|
||||
|
Download the module and add it to your Odoo addons folder. Restart the server |
||||
|
and log on to your Odoo server. Select the Apps menu and upgrade the module by |
||||
|
clicking on the upgrade button. |
||||
|
|
||||
|
If you installed the module using the "pip" command, you can also update the |
||||
|
module in the same way. Just type the following command into the console: |
||||
|
|
||||
|
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>`` |
||||
|
|
||||
|
When the process is finished, restart your server and update the application in |
||||
|
Odoo, just like you would normally. |
||||
|
|
||||
|
|
||||
|
Configuration |
||||
|
============= |
||||
|
|
||||
|
No additional configuration is needed to use this module. |
||||
|
|
||||
|
Usage |
||||
|
===== |
||||
|
|
||||
|
This module has no direct visible effect on the system. It adds a new field type, |
||||
|
which can be used in other modules. |
||||
|
|
||||
|
Credit |
||||
|
====== |
||||
|
|
||||
|
Contributors |
||||
|
------------ |
||||
|
|
||||
|
* Mathias Markl <mathias.markl@mukit.at> |
||||
|
|
||||
|
Images |
||||
|
------ |
||||
|
|
||||
|
Some pictures are based on or inspired by the icon set of Font Awesome: |
||||
|
|
||||
|
* `Font Awesome <https://fontawesome.com>`_ |
||||
|
|
||||
|
Author & Maintainer |
||||
|
------------------- |
||||
|
|
||||
|
This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_. |
||||
|
|
||||
|
MuK IT is an Austrian company specialized in customizing and extending Odoo. |
||||
|
We develop custom solutions for your individual needs to help you focus on |
||||
|
your strength and expertise to grow your business. |
||||
|
|
||||
|
If you want to get in touch please contact us via `mail <sale@mukit.at>`_ |
||||
|
or visit our `website <https://mukit.at>`_. |
@ -0,0 +1,23 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
from . import file |
@ -0,0 +1,201 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
import base64 |
||||
|
import hashlib |
||||
|
import logging |
||||
|
import os |
||||
|
import re |
||||
|
import shutil |
||||
|
import tempfile |
||||
|
from collections import defaultdict |
||||
|
|
||||
|
from odoo import fields, tools |
||||
|
from odoo.addons.muk_utils.tools.file import ensure_path_directories |
||||
|
from odoo.tools import config, human_size |
||||
|
|
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
|
def get_store_path(dbname): |
||||
|
return os.path.join(config.get("data_dir"), "files", dbname) |
||||
|
|
||||
|
|
||||
|
def clean_store(dbname, env): |
||||
|
tables = defaultdict(set) |
||||
|
for model_name in env.registry.models: |
||||
|
model = env[model_name] |
||||
|
if not model._abstract: |
||||
|
for name, field in model._fields.items(): |
||||
|
if field.type == "file": |
||||
|
tables[model._table].add(name) |
||||
|
checklist = set() |
||||
|
filestore = get_store_path(dbname) |
||||
|
path = os.path.join(filestore, "checklist") |
||||
|
for root, dirs, files in os.walk(path): |
||||
|
for file in files: |
||||
|
checkpath = os.path.join(root, file) |
||||
|
relpath = os.path.relpath(checkpath, path) |
||||
|
checklist.add(os.path.join(filestore, relpath)) |
||||
|
env.cr.commit() |
||||
|
whitelist = set() |
||||
|
for table, fields in tables.items(): |
||||
|
select_fields = list(fields) |
||||
|
env.cr.execute("LOCK {} IN SHARE MODE".format(table)) |
||||
|
select_query = "SELECT {}".format(", ".join(select_fields)) |
||||
|
where_query = "WHERE {} IN %(paths)s".format(select_fields[0]) |
||||
|
if len(select_fields) > 1: |
||||
|
for field in select_fields[:1]: |
||||
|
where_query += "OR {} IN %(paths)s".format(field) |
||||
|
sql_query = "{} FROM {} {};".format(select_query, table, where_query) |
||||
|
for paths in env.cr.split_for_in_conditions(checklist): |
||||
|
env.cr.execute(sql_query, {"paths": paths}) |
||||
|
for row in env.cr.fetchall(): |
||||
|
for column in row: |
||||
|
whitelist.add(column) |
||||
|
remove = checklist - whitelist |
||||
|
for file in remove: |
||||
|
try: |
||||
|
os.unlink(file) |
||||
|
except (OSError, IOError): |
||||
|
_logger.warn("Deleting file from %s failed!", file, exc_info=True) |
||||
|
with tools.ignore(OSError): |
||||
|
shutil.rmtree(path) |
||||
|
env.cr.commit() |
||||
|
_logger.info( |
||||
|
"Cleaned files [ %d checked | %d removed ]", len(checklist), len(remove) |
||||
|
) |
||||
|
|
||||
|
|
||||
|
class File(fields.Field): |
||||
|
|
||||
|
type = "file" |
||||
|
column_type = ("varchar", "varchar") |
||||
|
_slots = { |
||||
|
"prefetch": False, |
||||
|
"depends_context": ("bin_size", "human_size", "path", "bytes", "stream"), |
||||
|
} |
||||
|
|
||||
|
def _get_file_path(self, checksume, dbname): |
||||
|
name = os.path.join(checksume[:2], checksume) |
||||
|
name = re.sub("[.]", "", name).strip("/\\") |
||||
|
filestore = get_store_path(dbname) |
||||
|
path = os.path.join(filestore, name) |
||||
|
ensure_path_directories(path) |
||||
|
return path |
||||
|
|
||||
|
def _add_to_checklist(self, path, dbname): |
||||
|
filestore = get_store_path(dbname) |
||||
|
relpath = os.path.relpath(path, filestore) |
||||
|
checklist = os.path.join(filestore, "checklist", relpath) |
||||
|
if not os.path.exists(checklist): |
||||
|
ensure_path_directories(checklist) |
||||
|
open(checklist, "ab").close() |
||||
|
|
||||
|
def _get_checksum(self, value): |
||||
|
if isinstance(value, bytes): |
||||
|
return hashlib.sha1(value).hexdigest() |
||||
|
else: |
||||
|
checksum = hashlib.sha1() |
||||
|
while True: |
||||
|
chunk = value.read(4096) |
||||
|
if not chunk: |
||||
|
return checksum.hexdigest() |
||||
|
checksum.update(chunk) |
||||
|
|
||||
|
def convert_to_column(self, value, record, values=None, validate=True): |
||||
|
path = None |
||||
|
try: |
||||
|
current_path = record.with_context({"path": True})[self.name] |
||||
|
if current_path: |
||||
|
self._add_to_checklist(current_path, record.env.cr.dbname) |
||||
|
if not value: |
||||
|
return None |
||||
|
binary = None |
||||
|
if isinstance(value, bytes): |
||||
|
binary = value |
||||
|
elif isinstance(value, str): |
||||
|
binary = base64.b64decode(value) |
||||
|
if binary: |
||||
|
checksume = self._get_checksum(binary) |
||||
|
path = self._get_file_path(checksume, record.env.cr.dbname) |
||||
|
with open(path, "wb") as file: |
||||
|
file.write(binary) |
||||
|
self._add_to_checklist(path, record.env.cr.dbname) |
||||
|
else: |
||||
|
checksume = self._get_checksum(value) |
||||
|
path = self._get_file_path(checksume, record.env.cr.dbname) |
||||
|
value.seek(0, 0) |
||||
|
with open(path, "wb") as file: |
||||
|
while True: |
||||
|
chunk = value.read(4096) |
||||
|
if not chunk: |
||||
|
break |
||||
|
file.write(chunk) |
||||
|
self._add_to_checklist(path) |
||||
|
except (IOError, OSError): |
||||
|
_logger.warn("Writing file to %s failed!", path, exc_info=True) |
||||
|
return path |
||||
|
|
||||
|
def convert_to_cache(self, value, record, validate=True): |
||||
|
if value and isinstance(value, str) and os.path.exists(value): |
||||
|
try: |
||||
|
with open(value, "rb") as file: |
||||
|
if record._context.get("human_size"): |
||||
|
return human_size(file.seek(0, 2)) |
||||
|
elif record._context.get("bin_size"): |
||||
|
return file.seek(0, 2) |
||||
|
elif record._context.get("path"): |
||||
|
return value |
||||
|
elif record._context.get("bytes"): |
||||
|
return file.read() |
||||
|
elif record._context.get("stream"): |
||||
|
temp = tempfile.TemporaryFile() |
||||
|
while True: |
||||
|
chunk = file.read(4096) |
||||
|
if not chunk: |
||||
|
temp.seek(0) |
||||
|
return temp |
||||
|
temp.write(chunk) |
||||
|
elif record._context.get("checksum"): |
||||
|
checksum = hashlib.sha1() |
||||
|
while True: |
||||
|
chunk = file.read(4096) |
||||
|
if not chunk: |
||||
|
return checksum.hexdigest() |
||||
|
checksum.update(chunk) |
||||
|
else: |
||||
|
return base64.b64encode(file.read()) |
||||
|
except (IOError, OSError): |
||||
|
_logger.warn("Reading file from %s failed!", value, exc_info=True) |
||||
|
return None if value is False else value |
||||
|
|
||||
|
def convert_to_export(self, value, record): |
||||
|
if value: |
||||
|
try: |
||||
|
with open(value, "rb") as file: |
||||
|
if record._context.get("export_raw_data"): |
||||
|
return file.read() |
||||
|
return base64.b64encode(file.read()) |
||||
|
except (IOError, OSError): |
||||
|
_logger.warn("Reading file from %s failed!", value, exc_info=True) |
||||
|
return "" |
@ -0,0 +1,121 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * muk_fields_file |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 12.0-20190522\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-07-12 23:48+0000\n" |
||||
|
"PO-Revision-Date: 2019-07-12 23:48+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: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_autovacuum |
||||
|
msgid "Automatic Vacuum" |
||||
|
msgstr "تفريغ تلقائي" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_base |
||||
|
msgid "Base" |
||||
|
msgstr "الأساس" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model.fields,field_description:muk_fields_file.field_ir_model_fields__ttype |
||||
|
msgid "Field Type" |
||||
|
msgstr "نوع الحقل" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_model_fields |
||||
|
msgid "Fields" |
||||
|
msgstr "الحقول" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_http |
||||
|
msgid "HTTP Routing" |
||||
|
msgstr "مسار HTTP" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "binary" |
||||
|
msgstr "بيانات ثنائية" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "boolean" |
||||
|
msgstr "قيمة منطقية" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "char" |
||||
|
msgstr "محارف" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "date" |
||||
|
msgstr "تاريخ" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "datetime" |
||||
|
msgstr "التاريخ والوقت" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "file" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "float" |
||||
|
msgstr "فاصلة عائمة" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "html" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "integer" |
||||
|
msgstr "عدد صحيح" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2many" |
||||
|
msgstr "علاقة متعدد لمتعدد" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2one" |
||||
|
msgstr "علاقة متعدد لواحد" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "monetary" |
||||
|
msgstr "قيمة نقدية" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "one2many" |
||||
|
msgstr "علاقة واحد لمتعدد" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "reference" |
||||
|
msgstr "المرجع" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "selection" |
||||
|
msgstr "قائمة خيارات" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "text" |
||||
|
msgstr "نص" |
@ -0,0 +1,121 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * muk_fields_file |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 12.0-20190522\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-07-12 23:49+0000\n" |
||||
|
"PO-Revision-Date: 2019-07-12 23:49+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: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_autovacuum |
||||
|
msgid "Automatic Vacuum" |
||||
|
msgstr "Automatisch aufräumen" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_base |
||||
|
msgid "Base" |
||||
|
msgstr "Basis" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model.fields,field_description:muk_fields_file.field_ir_model_fields__ttype |
||||
|
msgid "Field Type" |
||||
|
msgstr "Typfeld-Text" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_model_fields |
||||
|
msgid "Fields" |
||||
|
msgstr "Felder" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_http |
||||
|
msgid "HTTP Routing" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "binary" |
||||
|
msgstr "Binär" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "boolean" |
||||
|
msgstr "Boolean" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "char" |
||||
|
msgstr "Zeichen" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "date" |
||||
|
msgstr "Datum" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "datetime" |
||||
|
msgstr "Datum/Zeit" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "file" |
||||
|
msgstr "Datei" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "float" |
||||
|
msgstr "Gleitkommazahl" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "html" |
||||
|
msgstr "HTML" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "integer" |
||||
|
msgstr "Ganzzahl" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2many" |
||||
|
msgstr "Many2many" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2one" |
||||
|
msgstr "Many2One" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "monetary" |
||||
|
msgstr "monetär" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "one2many" |
||||
|
msgstr "One2many" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "reference" |
||||
|
msgstr "Referenz" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "selection" |
||||
|
msgstr "Auswahl" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "text" |
||||
|
msgstr "Text" |
@ -0,0 +1,121 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * muk_fields_file |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 12.0-20190522\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-07-12 23:49+0000\n" |
||||
|
"PO-Revision-Date: 2019-07-12 23:49+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: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_autovacuum |
||||
|
msgid "Automatic Vacuum" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_base |
||||
|
msgid "Base" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model.fields,field_description:muk_fields_file.field_ir_model_fields__ttype |
||||
|
msgid "Field Type" |
||||
|
msgstr "Tipo de campo" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_model_fields |
||||
|
msgid "Fields" |
||||
|
msgstr "Campos" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_http |
||||
|
msgid "HTTP Routing" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "binary" |
||||
|
msgstr "binario" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "boolean" |
||||
|
msgstr "booleano" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "char" |
||||
|
msgstr "Carácter" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "date" |
||||
|
msgstr "fecha" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "datetime" |
||||
|
msgstr "Fecha y hora" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "file" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "float" |
||||
|
msgstr "número flotante" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "html" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "integer" |
||||
|
msgstr "entero" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2one" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "monetary" |
||||
|
msgstr "Monetario" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "one2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "reference" |
||||
|
msgstr "Referencia" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "selection" |
||||
|
msgstr "Selección" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "text" |
||||
|
msgstr "texto" |
@ -0,0 +1,121 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * muk_fields_file |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 12.0-20190522\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-07-12 23:49+0000\n" |
||||
|
"PO-Revision-Date: 2019-07-12 23:49+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: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_autovacuum |
||||
|
msgid "Automatic Vacuum" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_base |
||||
|
msgid "Base" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model.fields,field_description:muk_fields_file.field_ir_model_fields__ttype |
||||
|
msgid "Field Type" |
||||
|
msgstr "Type de Champ" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_model_fields |
||||
|
msgid "Fields" |
||||
|
msgstr "Champs" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_http |
||||
|
msgid "HTTP Routing" |
||||
|
msgstr "Routage HTTP" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "binary" |
||||
|
msgstr "binaire" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "boolean" |
||||
|
msgstr "booléen" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "char" |
||||
|
msgstr "caractère" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "date" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "datetime" |
||||
|
msgstr "date/heure" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "file" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "float" |
||||
|
msgstr "flottant" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "html" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "integer" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2one" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "monetary" |
||||
|
msgstr "monétaire" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "one2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "reference" |
||||
|
msgstr "référence" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "selection" |
||||
|
msgstr "sélection" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "text" |
||||
|
msgstr "texte" |
@ -0,0 +1,121 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * muk_fields_file |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 12.0-20190522\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-07-12 23:49+0000\n" |
||||
|
"PO-Revision-Date: 2019-07-12 23:49+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: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_autovacuum |
||||
|
msgid "Automatic Vacuum" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_base |
||||
|
msgid "Base" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model.fields,field_description:muk_fields_file.field_ir_model_fields__ttype |
||||
|
msgid "Field Type" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_model_fields |
||||
|
msgid "Fields" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_http |
||||
|
msgid "HTTP Routing" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "binary" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "boolean" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "char" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "date" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "datetime" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "file" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "float" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "html" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "integer" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2one" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "monetary" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "one2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "reference" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "selection" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "text" |
||||
|
msgstr "" |
@ -0,0 +1,121 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * muk_fields_file |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 12.0-20190522\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-07-12 23:48+0000\n" |
||||
|
"PO-Revision-Date: 2019-07-12 23:48+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: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_autovacuum |
||||
|
msgid "Automatic Vacuum" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_base |
||||
|
msgid "Base" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model.fields,field_description:muk_fields_file.field_ir_model_fields__ttype |
||||
|
msgid "Field Type" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_model_fields |
||||
|
msgid "Fields" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_http |
||||
|
msgid "HTTP Routing" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "binary" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "boolean" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "char" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "date" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "datetime" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "file" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "float" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "html" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "integer" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2one" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "monetary" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "one2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "reference" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "selection" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "text" |
||||
|
msgstr "" |
@ -0,0 +1,121 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * muk_fields_file |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 12.0-20190522\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-07-12 23:50+0000\n" |
||||
|
"PO-Revision-Date: 2019-07-12 23:50+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: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_autovacuum |
||||
|
msgid "Automatic Vacuum" |
||||
|
msgstr "Automatisch vacuum" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_base |
||||
|
msgid "Base" |
||||
|
msgstr "Basis" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model.fields,field_description:muk_fields_file.field_ir_model_fields__ttype |
||||
|
msgid "Field Type" |
||||
|
msgstr "Soort veld" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_model_fields |
||||
|
msgid "Fields" |
||||
|
msgstr "Velden" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_http |
||||
|
msgid "HTTP Routing" |
||||
|
msgstr "HTTP routing" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "binary" |
||||
|
msgstr "binair" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "boolean" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "char" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "date" |
||||
|
msgstr "datum" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "datetime" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "file" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "float" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "html" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "integer" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2one" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "monetary" |
||||
|
msgstr "monetair" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "one2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "reference" |
||||
|
msgstr "referentie" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "selection" |
||||
|
msgstr "selectie" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "text" |
||||
|
msgstr "tekst" |
@ -0,0 +1,121 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * muk_fields_file |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 12.0-20190522\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-07-12 23:50+0000\n" |
||||
|
"PO-Revision-Date: 2019-07-12 23:50+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: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_autovacuum |
||||
|
msgid "Automatic Vacuum" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_base |
||||
|
msgid "Base" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model.fields,field_description:muk_fields_file.field_ir_model_fields__ttype |
||||
|
msgid "Field Type" |
||||
|
msgstr "Tipo de Campo" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_model_fields |
||||
|
msgid "Fields" |
||||
|
msgstr "Campos" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_http |
||||
|
msgid "HTTP Routing" |
||||
|
msgstr "Rota HTTP" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "binary" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "boolean" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "char" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "date" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "datetime" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "file" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "float" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "html" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "integer" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2one" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "monetary" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "one2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "reference" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "selection" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "text" |
||||
|
msgstr "Texto" |
@ -0,0 +1,121 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * muk_fields_file |
||||
|
# |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 12.0-20190522\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2019-07-12 23:50+0000\n" |
||||
|
"PO-Revision-Date: 2019-07-12 23:50+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: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_autovacuum |
||||
|
msgid "Automatic Vacuum" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_base |
||||
|
msgid "Base" |
||||
|
msgstr "Базовый" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model.fields,field_description:muk_fields_file.field_ir_model_fields__ttype |
||||
|
msgid "Field Type" |
||||
|
msgstr "Тип поля" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_model_fields |
||||
|
msgid "Fields" |
||||
|
msgstr "Поля" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: model:ir.model,name:muk_fields_file.model_ir_http |
||||
|
msgid "HTTP Routing" |
||||
|
msgstr "Маршрутизация HTTP" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "binary" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "boolean" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "char" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "date" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "datetime" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "file" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "float" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "html" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "integer" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "many2one" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "monetary" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "one2many" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "reference" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "selection" |
||||
|
msgstr "" |
||||
|
|
||||
|
#. module: muk_fields_file |
||||
|
#: selection:ir.model.fields,ttype:0 |
||||
|
msgid "text" |
||||
|
msgstr "" |
@ -0,0 +1,23 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
from . import base, ir_autovacuum, ir_model_fields |
@ -0,0 +1,43 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
import logging |
||||
|
|
||||
|
from odoo import api, models |
||||
|
|
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
|
class Base(models.AbstractModel): |
||||
|
|
||||
|
_inherit = "base" |
||||
|
|
||||
|
@api.multi |
||||
|
def unlink(self): |
||||
|
for name in self._fields: |
||||
|
field = self._fields[name] |
||||
|
if field.type == "file" and field.store: |
||||
|
for record in self: |
||||
|
path = record.with_context({"path": True})[name] |
||||
|
if path: |
||||
|
field._add_to_checklist(path, self.env.cr.dbname) |
||||
|
super(Base, self).unlink() |
@ -0,0 +1,39 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
import logging |
||||
|
|
||||
|
from odoo import api, models |
||||
|
from odoo.addons.muk_fields_file.fields import file |
||||
|
|
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
|
class AutoVacuum(models.AbstractModel): |
||||
|
|
||||
|
_inherit = "ir.autovacuum" |
||||
|
|
||||
|
@api.model |
||||
|
def power_on(self, *args, **kwargs): |
||||
|
res = super(AutoVacuum, self).power_on(*args, **kwargs) |
||||
|
file.clean_store(self.env.cr.dbname, self.env) |
||||
|
return res |
@ -0,0 +1,30 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class IrModelField(models.Model): |
||||
|
|
||||
|
_inherit = "ir.model.fields" |
||||
|
|
||||
|
ttype = fields.Selection(selection_add=[("file", "file")]) |
@ -0,0 +1,23 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
from . import fields, service_db |
@ -0,0 +1,26 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
from odoo import fields |
||||
|
from odoo.addons.muk_fields_file.fields.file import File |
||||
|
|
||||
|
fields.File = File |
@ -0,0 +1,113 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
import logging |
||||
|
import os |
||||
|
import shutil |
||||
|
import tempfile |
||||
|
import zipfile |
||||
|
|
||||
|
from odoo.addons.muk_fields_file.fields import file |
||||
|
from odoo.addons.muk_utils.tools import patch |
||||
|
from odoo.service import db |
||||
|
from odoo.tools import osutil |
||||
|
|
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
|
@patch.monkey_patch(db) |
||||
|
@db.check_db_management_enabled |
||||
|
def exp_duplicate_database(db_original_name, db_name): |
||||
|
res = exp_duplicate_database.super(db_original_name, db_name) |
||||
|
from_files = file.get_store_path(db_original_name) |
||||
|
to_files = file.get_store_path(db_name) |
||||
|
if os.path.exists(from_files) and not os.path.exists(to_files): |
||||
|
shutil.copytree(from_files, to_files) |
||||
|
return res |
||||
|
|
||||
|
|
||||
|
@patch.monkey_patch(db) |
||||
|
@db.check_db_management_enabled |
||||
|
def exp_drop(db_name): |
||||
|
res = exp_drop.super(db_name) |
||||
|
files = file.get_store_path(db_name) |
||||
|
if os.path.exists(files): |
||||
|
shutil.rmtree(files) |
||||
|
return res |
||||
|
|
||||
|
|
||||
|
@patch.monkey_patch(db) |
||||
|
@db.check_db_management_enabled |
||||
|
def dump_db(db_name, stream, backup_format="zip"): |
||||
|
if backup_format == "zip": |
||||
|
res = dump_db.super(db_name, False, backup_format) |
||||
|
with osutil.tempdir() as dump_dir: |
||||
|
with zipfile.ZipFile(res, "r") as zip: |
||||
|
zip.extractall(dump_dir) |
||||
|
files = file.get_store_path(db_name) |
||||
|
if os.path.exists(files): |
||||
|
shutil.copytree(files, os.path.join(dump_dir, "files")) |
||||
|
if stream: |
||||
|
osutil.zip_dir( |
||||
|
dump_dir, |
||||
|
stream, |
||||
|
include_dir=False, |
||||
|
fnct_sort=lambda file_name: file_name != "dump.sql", |
||||
|
) |
||||
|
else: |
||||
|
t = tempfile.TemporaryFile() |
||||
|
osutil.zip_dir( |
||||
|
dump_dir, |
||||
|
t, |
||||
|
include_dir=False, |
||||
|
fnct_sort=lambda file_name: file_name != "dump.sql", |
||||
|
) |
||||
|
t.seek(0) |
||||
|
return t |
||||
|
else: |
||||
|
return dump_db.super(db_name, stream, backup_format) |
||||
|
|
||||
|
|
||||
|
@patch.monkey_patch(db) |
||||
|
@db.check_db_management_enabled |
||||
|
def restore_db(db, dump_file, copy=False): |
||||
|
res = restore_db.super(db, dump_file, copy) |
||||
|
with osutil.tempdir() as dump_dir: |
||||
|
if zipfile.is_zipfile(dump_file): |
||||
|
with zipfile.ZipFile(dump_file, "r") as zip: |
||||
|
files = [m for m in zip.namelist() if m.startswith("files/")] |
||||
|
if files: |
||||
|
z.extractall(dump_dir, files) |
||||
|
files_path = os.path.join(dump_dir, "files") |
||||
|
shutil.move(files_path, file.get_store_path(db_name)) |
||||
|
return res |
||||
|
|
||||
|
|
||||
|
@patch.monkey_patch(db) |
||||
|
@db.check_db_management_enabled |
||||
|
def exp_rename(old_name, new_name): |
||||
|
res = exp_rename.super(old_name, new_name) |
||||
|
from_files = file.get_store_path(old_name) |
||||
|
to_files = file.get_store_path(new_name) |
||||
|
if os.path.exists(from_files) and not os.path.exists(to_files): |
||||
|
shutil.copytree(from_files, to_files) |
||||
|
return res |
After Width: 880 | Height: 440 | Size: 39 KiB |
After Width: 250 | Height: 250 | Size: 5.8 KiB |
@ -0,0 +1 @@ |
|||||
|
<?xml version="1.0" standalone="no"?><!-- Generator: Gravit.io --><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 250 250" width="250" height="250"><defs><clipPath id="_clipPath_AH3yfG1rsrc2Mehie6O0u1AKdEOpauqK"><rect width="250" height="250"/></clipPath></defs><g clip-path="url(#_clipPath_AH3yfG1rsrc2Mehie6O0u1AKdEOpauqK)"><rect width="250" height="250" style="fill:rgb(0,0,0)" fill-opacity="0"/><defs><filter id="xEOz7uRfWL5Iw9XgBTFOjnvHQQe1rx2B" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB"><feOffset xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" dx="0" dy="3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_100_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="SourceGraphic" in2="pf_100_offsetBlur" result="pf_100_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#FFFFFF" flood-opacity="0.5" result="pf_100_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_color" in2="pf_100_inverse" operator="in" result="pf_100_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_100_shadow" in2="SourceGraphic" operator="over" result="_out_GbGvfzcRxsZMIJ2zVe2vgDboH5Lkjpaz"/><feOffset xmlns="http://www.w3.org/2000/svg" in="_out_GbGvfzcRxsZMIJ2zVe2vgDboH5Lkjpaz" dx="0" dy="-3"/><feGaussianBlur xmlns="http://www.w3.org/2000/svg" stdDeviation="2.146804531419514" result="pf_101_offsetBlur"/><feComposite xmlns="http://www.w3.org/2000/svg" in="_out_GbGvfzcRxsZMIJ2zVe2vgDboH5Lkjpaz" in2="pf_101_offsetBlur" result="pf_101_inverse" operator="out"/><feFlood xmlns="http://www.w3.org/2000/svg" flood-color="#000000" flood-opacity="0.5" result="pf_101_color"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_color" in2="pf_101_inverse" operator="in" result="pf_101_shadow"/><feComposite xmlns="http://www.w3.org/2000/svg" in="pf_101_shadow" in2="_out_GbGvfzcRxsZMIJ2zVe2vgDboH5Lkjpaz" operator="over" result="_out_S3POGlsvdeRfVzoZD6RH43VM6zgrALSV"/><feMerge><feMergeNode in="_out_S3POGlsvdeRfVzoZD6RH43VM6zgrALSV"/></feMerge></filter></defs><g filter="url(#xEOz7uRfWL5Iw9XgBTFOjnvHQQe1rx2B)"><path d="M 15 0 L 235 0 C 243.279 0 250 6.721 250 15 L 250 235 C 250 243.279 243.279 250 235 250 L 15 250 C 6.721 250 0 243.279 0 235 L 0 15 C 0 6.721 6.721 0 15 0 Z" style="stroke:none;fill:#243742;stroke-miterlimit:10;"/></g><path d=" M 135.221 86.672 L 135.221 43.234 L 71.341 43.234 C 67.093 43.234 63.676 46.652 63.676 50.9 L 63.676 199.1 C 63.676 203.348 67.093 206.766 71.341 206.766 L 178.659 206.766 C 182.907 206.766 186.324 203.348 186.324 199.1 L 186.324 94.338 L 142.886 94.338 C 138.67 94.338 135.221 90.888 135.221 86.672 Z M 156.039 155.665 L 135.221 155.665 L 135.221 181.217 C 135.221 184.041 132.934 186.328 130.11 186.328 L 119.89 186.328 C 117.066 186.328 114.779 184.041 114.779 181.217 L 114.779 155.665 L 93.961 155.665 C 89.4 155.665 87.123 150.143 90.361 146.927 L 121.158 116.36 C 123.282 114.249 126.712 114.249 128.836 116.36 L 159.632 146.927 C 162.874 150.143 160.6 155.665 156.039 155.665 Z M 184.089 76.771 L 152.82 45.47 C 151.382 44.033 149.434 43.234 147.39 43.234 L 145.441 43.234 L 145.441 84.117 L 186.324 84.117 L 186.324 82.169 C 186.324 80.157 185.526 78.208 184.089 76.771 Z " fill="rgb(255,255,255)"/></g></svg> |
@ -0,0 +1,188 @@ |
|||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 class="oe_slogan">MuK Filestore Field</h2> |
||||
|
<h3 class="oe_slogan">Filestore Support for Fields</h3> |
||||
|
<h4 class="oe_slogan" style="font-size: 23px;"> |
||||
|
MuK IT GmbH - www.mukit.at |
||||
|
</h4> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="text-justify" style="max-width: 84%; margin: 16px 8%;"> |
||||
|
<h3 class="oe_slogan">Overview</h3> |
||||
|
<div class="oe_mt32" style="padding-bottom: 10px; text-align: justify;"> |
||||
|
<p> |
||||
|
Provides a field to store bytes as a file in the filestore. This |
||||
|
fields are useful with data values too large to be manipulated |
||||
|
conveniently as a whole and a way to keep the database slim since it |
||||
|
only has to save the path to the file and not the content itself. |
||||
|
</p> |
||||
|
</div> |
||||
|
<pre> |
||||
|
<code> |
||||
|
from odoo.addons.muk_fields_file.fields.file import File |
||||
|
|
||||
|
class FileModel(models.Model): |
||||
|
|
||||
|
data_content = File(string="Data") |
||||
|
|
||||
|
def data(self): |
||||
|
for record in self: |
||||
|
base64 = record.data_content |
||||
|
oid = record.with_context({'path': True}).data_content |
||||
|
size = record.with_context({'bin_size': True}).data_content |
||||
|
bytes = record.with_context({'bytes': True}).data_content |
||||
|
stream = record.with_context({'stream': True}).data_content |
||||
|
</code> |
||||
|
</pre> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h3 class="oe_slogan">Our Services</h3> |
||||
|
<div |
||||
|
style="display: flex; padding-top: 20px; justify-content: space-between;" |
||||
|
> |
||||
|
<div style="flex-basis: 18%;"> |
||||
|
<a href="https://mukit.at/r/MQ5" target="_blank"> |
||||
|
<div |
||||
|
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;" |
||||
|
> |
||||
|
<img |
||||
|
src="service_implementation.png" |
||||
|
style="width: 100%; border-radius: 100%;" |
||||
|
/> |
||||
|
</div> |
||||
|
<h3 |
||||
|
class="oe_slogan" |
||||
|
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;" |
||||
|
> |
||||
|
Odoo <br />Implementation |
||||
|
</h3> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div style="flex-basis: 18%;"> |
||||
|
<a href="https://mukit.at/r/u7c" target="_blank"> |
||||
|
<div |
||||
|
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;" |
||||
|
> |
||||
|
<img |
||||
|
src="service_integration.png" |
||||
|
style="width: 100%; border-radius: 100%;" |
||||
|
/> |
||||
|
</div> |
||||
|
<h3 |
||||
|
class="oe_slogan" |
||||
|
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;" |
||||
|
> |
||||
|
Odoo <br />Integration |
||||
|
</h3> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div style="flex-basis: 18%;"> |
||||
|
<a href="https://mukit.at/r/xDJ" target="_blank"> |
||||
|
<div |
||||
|
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;" |
||||
|
> |
||||
|
<img |
||||
|
src="service_customization.png" |
||||
|
style="width: 100%; border-radius: 100%;" |
||||
|
/> |
||||
|
</div> |
||||
|
<h3 |
||||
|
class="oe_slogan" |
||||
|
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;" |
||||
|
> |
||||
|
Odoo <br />Customization |
||||
|
</h3> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div style="flex-basis: 18%;"> |
||||
|
<a href=" https://mukit.at/r/J3A" target="_blank"> |
||||
|
<div |
||||
|
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;" |
||||
|
> |
||||
|
<img |
||||
|
src="service_development.png" |
||||
|
style="width: 100%; border-radius: 100%;" |
||||
|
/> |
||||
|
</div> |
||||
|
<h3 |
||||
|
class="oe_slogan" |
||||
|
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;" |
||||
|
> |
||||
|
Odoo <br />Development |
||||
|
</h3> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div style="flex-basis: 18%;"> |
||||
|
<a href=" https://mukit.at/r/R1v" target="_blank"> |
||||
|
<div |
||||
|
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;" |
||||
|
> |
||||
|
<img |
||||
|
src="service_support.png" |
||||
|
style="width: 100%; border-radius: 100%;" |
||||
|
/> |
||||
|
</div> |
||||
|
<h3 |
||||
|
class="oe_slogan" |
||||
|
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;" |
||||
|
> |
||||
|
Odoo <br />Support |
||||
|
</h3> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container" style="padding: 32px 0;"> |
||||
|
<div class="oe_row oe_spaced" style="margin: auto;"> |
||||
|
<div class="oe_demo oe_picture oe_screenshot"> |
||||
|
<a href="https://mukit.at/r/SgN" target="_blank"> |
||||
|
<img src="preview.png" /> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<h3 class="oe_slogan">Help and Support</h3> |
||||
|
<h5 class="oe_slogan" style="font-size: 20px;"> |
||||
|
Feel free to contact us, if you need any help with your Odoo integration or |
||||
|
addiontal features. |
||||
|
</h5> |
||||
|
<div class="oe_slogan"> |
||||
|
<a |
||||
|
class="btn btn-primary btn-lg mt8" |
||||
|
href="https://mukit.at" |
||||
|
target="_blank" |
||||
|
> |
||||
|
<i class="fa fa-globe"></i> Website |
||||
|
</a> |
||||
|
<a |
||||
|
class="btn btn-primary btn-lg mt8" |
||||
|
href="https://mukit.at/page/contactus" |
||||
|
target="_blank" |
||||
|
> |
||||
|
<i class="fa fa-envelope"></i> Contact Us |
||||
|
</a> |
||||
|
<a |
||||
|
class="btn btn-primary btn-lg mt8" |
||||
|
href="https://github.com/muk-it" |
||||
|
target="_blank" |
||||
|
> |
||||
|
<i class="fa fa-github"></i> Issues |
||||
|
</a> |
||||
|
</div> |
||||
|
<img |
||||
|
src="logo.png" |
||||
|
style="width: 200px; margin-bottom: 20px; display: block;" |
||||
|
class="mx-auto center-block" |
||||
|
/> |
||||
|
</section> |
After Width: 500 | Height: 500 | Size: 37 KiB |
After Width: 1000 | Height: 200 | Size: 32 KiB |
After Width: 250 | Height: 250 | Size: 27 KiB |
After Width: 250 | Height: 250 | Size: 28 KiB |
After Width: 250 | Height: 250 | Size: 26 KiB |
After Width: 250 | Height: 250 | Size: 24 KiB |
After Width: 250 | Height: 250 | Size: 24 KiB |
@ -0,0 +1,23 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
from . import test_file |
@ -0,0 +1,41 @@ |
|||||
|
################################################################################### |
||||
|
# |
||||
|
# Copyright (c) 2017-2019 MuK IT GmbH. |
||||
|
# |
||||
|
# This file is part of MuK Filestore Field |
||||
|
# (see https://mukit.at). |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Lesser General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
################################################################################### |
||||
|
|
||||
|
import logging |
||||
|
import os |
||||
|
|
||||
|
from odoo.addons.muk_fields_file.fields.file import File |
||||
|
from odoo.tests import common |
||||
|
|
||||
|
_path = os.path.dirname(os.path.dirname(__file__)) |
||||
|
_logger = logging.getLogger(__name__) |
||||
|
|
||||
|
|
||||
|
class FileTestCase(common.TransactionCase): |
||||
|
def setUp(self): |
||||
|
super(FileTestCase, self).setUp() |
||||
|
|
||||
|
def tearDown(self): |
||||
|
super(FileTestCase, self).tearDown() |
||||
|
|
||||
|
def test_import(self): |
||||
|
self.assertEqual(File.type, "file") |