Browse Source

Merge pull request #85 from grap/7.0-document_extract_from_database

[7.0] [ADD] 'document extract from database'
pull/98/head
Guewen Baconnier 10 years ago
parent
commit
59f73f53c2
  1. 22
      document_export_from_db/__init__.py
  2. 50
      document_export_from_db/__openerp__.py
  3. 15
      document_export_from_db/data/ir_values.xml
  4. 57
      document_export_from_db/i18n/document_export_from_db.pot
  5. 57
      document_export_from_db/i18n/fr.po
  6. 23
      document_export_from_db/model/__init__.py
  7. 36
      document_export_from_db/model/document_multiple_action.py
  8. 41
      document_export_from_db/model/ir_attachment.py
  9. BIN
      document_export_from_db/static/src/img/icon.png
  10. 3
      document_export_from_db/static/src/img/icon_licences.txt
  11. 28
      document_export_from_db/tests/__init__.py
  12. 78
      document_export_from_db/tests/test_document_extract_from_database.py
  13. 17
      document_export_from_db/view/action.xml
  14. 24
      document_export_from_db/view/view.xml

22
document_export_from_db/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2012 Julius Network Solutions SARL <contact@julius.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from . import model

50
document_export_from_db/__openerp__.py

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2012 Julius Network Solutions SARL <contact@julius.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
{
"name": "Export Documents from database",
"summary": "Export Existing Documents from Database to File System",
"version": "1.0",
"author": "Julius Network Solutions",
"website": "http://julius.fr",
"category": "Tools",
"depends": [
"document",
],
"description": """
Add a Button to export existing documents from database to File System
======================================================================
* Make sure you've correctly defined the filestore in your database:
* "Settings > Parameters > System Parameters":
* "key": "ir_attachment.location"
* "value": "file:///filestore"
* Go to your document list, select all the documents you want to extract.
* Click on "More > Documents Export"
""",
"data": [
'view/view.xml',
'view/action.xml',
'data/ir_values.xml',
],
}

15
document_export_from_db/data/ir_values.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.values" id="document_multiple_action">
<field name="model_id" ref="base.model_ir_attachment" />
<field name="name">Documents Export</field>
<field name="key2">client_action_multi</field>
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_view_document_multiple_action_form'))" />
<field name="key">action</field>
<field name="model">ir.attachment</field>
</record>
</data>
</openerp>

57
document_export_from_db/i18n/document_export_from_db.pot

@ -0,0 +1,57 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * document_export_from_db
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-11-19 17:57+0000\n"
"PO-Revision-Date: 2014-11-19 17:57+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: document_export_from_db
#: view:document.multiple.action:0
msgid "Cancel"
msgstr ""
#. module: document_export_from_db
#: view:document.multiple.action:0
#: model:ir.actions.act_window,name:document_export_from_db.action_view_document_multiple_action_form
msgid "Documents Export"
msgstr ""
#. module: document_export_from_db
#: view:document.multiple.action:0
msgid "Extract documents"
msgstr ""
#. module: document_export_from_db
#: view:document.multiple.action:0
msgid "If you click on 'Write again', the selected document which are stored in the database will be extracted into the filestore location."
msgstr ""
#. module: document_export_from_db
#: code:_description:0
#: model:ir.model,name:document_export_from_db.model_document_multiple_action
#, python-format
msgid "Multiple action on document"
msgstr ""
#. module: document_export_from_db
#: code:_description:0
#: model:ir.model,name:document_export_from_db.model_ir_attachment
#, python-format
msgid "ir.attachment"
msgstr ""
#. module: document_export_from_db
#: view:document.multiple.action:0
msgid "or"
msgstr ""

57
document_export_from_db/i18n/fr.po

@ -0,0 +1,57 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * document_export_from_db
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-11-19 17:58+0000\n"
"PO-Revision-Date: 2014-11-19 17:58+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: document_export_from_db
#: view:document.multiple.action:0
msgid "Cancel"
msgstr "Annuler"
#. module: document_export_from_db
#: view:document.multiple.action:0
#: model:ir.actions.act_window,name:document_export_from_db.action_view_document_multiple_action_form
msgid "Documents Export"
msgstr "Export de Documents"
#. module: document_export_from_db
#: view:document.multiple.action:0
msgid "Extract documents"
msgstr "Exporter les Documents"
#. module: document_export_from_db
#: view:document.multiple.action:0
msgid "If you click on 'Write again', the selected document which are stored in the database will be extracted into the filestore location."
msgstr "Si vous cliquez sur 'Ecrire de Nouveau', les documents sélectionnés qui sont en base de données seront exportés dans le système de fichiers."
#. module: document_export_from_db
#: code:_description:0
#: model:ir.model,name:document_export_from_db.model_document_multiple_action
#, python-format
msgid "Multiple action on document"
msgstr "Action Multiple sur des Documents"
#. module: document_export_from_db
#: code:_description:0
#: model:ir.model,name:document_export_from_db.model_ir_attachment
#, python-format
msgid "ir.attachment"
msgstr "ir.attachment"
#. module: document_export_from_db
#: view:document.multiple.action:0
msgid "or"
msgstr "ou"

23
document_export_from_db/model/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2012 Julius Network Solutions SARL <contact@julius.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from . import ir_attachment
from . import document_multiple_action

36
document_export_from_db/model/document_multiple_action.py

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2012 Julius Network Solutions SARL <contact@julius.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from openerp.osv.orm import TransientModel
class document_multiple_action(TransientModel):
_name = 'document.multiple.action'
_description = 'Multiple action on document'
def write_again(self, cr, uid, ids, context=None):
if context is None:
context = {}
document_obj = self.pool['ir.attachment']
document_ids = context.get('active_ids')
if document_ids:
document_obj.write_again(cr, uid, document_ids, context=context)
return True

41
document_export_from_db/model/ir_attachment.py

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2012 Julius Network Solutions SARL <contact@julius.fr>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from openerp.osv.orm import Model
class ir_attachment(Model):
_inherit = 'ir.attachment'
def write_again(self, cr, uid, ids, context=None):
if context is None:
context = {}
location = self.pool['ir.config_parameter'].get_param(
cr, uid, 'ir_attachment.location')
if not location:
return True
for ia in self.browse(cr, uid, ids, context=context):
if ia.db_datas:
super(ir_attachment, self).write(cr, uid, ia.id, {
'datas': ia.datas,
'db_datas': False,
}, context=context)
return True

BIN
document_export_from_db/static/src/img/icon.png

After

Width: 213  |  Height: 213  |  Size: 29 KiB

3
document_export_from_db/static/src/img/icon_licences.txt

@ -0,0 +1,3 @@
Icon File is a mix of icons:
* Licence: Creative Common Attribution (by) - Designer: Kevin Muselet <http://pit-tux.deviantart.com/>
* Licence: GNU/GPL - Designer: Alessandro Rei <http://www.mentalrey.it/>

28
document_export_from_db/tests/__init__.py

@ -0,0 +1,28 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2014 GRAP (http://www.grap.coop)
# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import test_document_extract_from_database
fast_suite = [
test_document_extract_from_database,
]

78
document_export_from_db/tests/test_document_extract_from_database.py

@ -0,0 +1,78 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2014 GRAP (http://www.grap.coop)
# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from openerp.tests.common import TransactionCase
class TestDocumentExtractFromDatabase(TransactionCase):
"""Tests for 'Document Extract From Database' Module"""
def setUp(self):
super(TestDocumentExtractFromDatabase, self).setUp()
self.icp_obj = self.registry('ir.config_parameter')
self.ia_obj = self.registry('ir.attachment')
self.dma_obj = self.registry('document.multiple.action')
# Test Section
def test_01_document_extract(self):
"""Test the correct extract of an attachment."""
cr, uid = self.cr, self.uid
# Make sure that Odoo is set to write attachment in Database
self.icp_obj.unlink(cr, uid, self.icp_obj.search(
cr, uid, [('key', '=', 'ir_attachment.location')]))
# Create a new Attachment
ia_id = self.ia_obj.create(cr, uid, {
'name': 'Attachment Test',
'datas_fname': 'pixel.png',
'type': 'binary',
'datas': """iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABH"""
"""NCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAA1JREFUCJljO"""
"""LR/w38AB6kDMQ1kMu8AAAAASUVORK5CYII=""",
})
# Get Data Before
data_before = self.ia_obj.browse(cr, uid, ia_id).datas
# Change setting for attachment to save on filesystem
self.icp_obj.create(cr, uid, {
'key': 'ir_attachment.location',
'value': 'file:///filestore',
})
# Run Write Again Functionnality
self.dma_obj.write_again(cr, uid, 0, {'active_ids': [ia_id]})
data_after = self.ia_obj.browse(cr, uid, ia_id).datas
# Test if datas have not changed
# Note: Replace \n char by nothing, because datas field are different
# when ir_attachement is in Database or in File System
ia = self.ia_obj.browse(cr, uid, ia_id)
self.assertEqual(
data_before, data_after.replace('\n', ''),
"Datas have changed after exporting into filesystem.")
# Test if the file is in the file system
ia = self.ia_obj.browse(cr, uid, ia_id)
self.assertNotEqual(
ia.store_fname, None,
"Attachment must be on File System after Write Again Function.")

17
document_export_from_db/view/action.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="action_view_document_multiple_action_form" model="ir.actions.act_window">
<field name="name">Documents Export</field>
<field name="res_model">document.multiple.action</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_document_multiple_action_form"/>
<field name="target">new</field>
<field name="multi">True</field>
</record>
</data>
</openerp>

24
document_export_from_db/view/view.xml

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_document_multiple_action_form" model="ir.ui.view">
<field name="name">Document multiple action</field>
<field name="model">document.multiple.action</field>
<field name="arch" type="xml">
<form string="Documents Export" version="7.0">
<div>
<p>
<label string="If you click on 'Write again', the selected document which are stored in the database will be extracted into the filestore location."/>
</p>
</div>
<footer>
<button name="write_again" string="Extract documents" class="oe_highlight" type="object"/> or
<button string="Cancel" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>
</data>
</openerp>
Loading…
Cancel
Save