From 94d7a9f24911be28a801458e37b0ed9fad531ffa Mon Sep 17 00:00:00 2001 From: metamasterplay Date: Tue, 1 May 2018 15:40:26 +0100 Subject: [PATCH 1/2] Backport tko_base_download_multiple_attachments Backport tko_base_download_multiple_attachments to odoo 8.0 --- tko_base_download_multiple_attachments.zip | Bin 0 -> 4891 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tko_base_download_multiple_attachments.zip diff --git a/tko_base_download_multiple_attachments.zip b/tko_base_download_multiple_attachments.zip new file mode 100644 index 0000000000000000000000000000000000000000..4c14a1c4143fdc0b730e18fdd9c1a7db3c6a98ca GIT binary patch literal 4891 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 LXlGPC{eAQws`6wl literal 0 HcmV?d00001 From 727255cf9f052edf15f7cf60e7c2432d9ca105b7 Mon Sep 17 00:00:00 2001 From: badep Date: Tue, 1 May 2018 15:43:31 +0100 Subject: [PATCH 2/2] Backport tko_base_download_multiple_attachments to 8.0 --- tko_base_download_multiple_attachments.zip | Bin 4891 -> 0 bytes .../__init__.py | 24 ++++ .../__openerp__.py | 47 +++++++ .../wizard/__init__.py | 1 + .../wizard/attachments_wizard_view.py | 118 ++++++++++++++++++ .../wizard/attachments_wizard_view.xml | 44 +++++++ 6 files changed, 234 insertions(+) delete mode 100644 tko_base_download_multiple_attachments.zip create mode 100755 tko_base_download_multiple_attachments/__init__.py create mode 100755 tko_base_download_multiple_attachments/__openerp__.py create mode 100755 tko_base_download_multiple_attachments/wizard/__init__.py create mode 100755 tko_base_download_multiple_attachments/wizard/attachments_wizard_view.py create mode 100755 tko_base_download_multiple_attachments/wizard/attachments_wizard_view.xml diff --git a/tko_base_download_multiple_attachments.zip b/tko_base_download_multiple_attachments.zip deleted file mode 100644 index 4c14a1c4143fdc0b730e18fdd9c1a7db3c6a98ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4891 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 LXlGPC{eAQws`6wl diff --git a/tko_base_download_multiple_attachments/__init__.py b/tko_base_download_multiple_attachments/__init__.py new file mode 100755 index 0000000..13c19b7 --- /dev/null +++ b/tko_base_download_multiple_attachments/__init__.py @@ -0,0 +1,24 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# Thinkopen - Portugal & Brasil +# Copyright (C) Thinkopen Solutions (). +# +# 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 . +# +############################################################################## +import wizard diff --git a/tko_base_download_multiple_attachments/__openerp__.py b/tko_base_download_multiple_attachments/__openerp__.py new file mode 100755 index 0000000..abc9624 --- /dev/null +++ b/tko_base_download_multiple_attachments/__openerp__.py @@ -0,0 +1,47 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# Thinkopen - Portugal & Brasil +# Copyright (C) Thinkopen Solutions (). +# +# 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 . +# +############################################################################## + +{ + 'name': 'Download all Attachments', + 'version': '0.009.1', + 'category': 'Email', + 'sequence': 38, + 'complexity': 'normal', + 'description': ''' This module all attchments in tar file.''', + 'author': 'ThinkOpen Solutions', + 'website': 'http://www.thinkopensolution.com', + 'images': ['images/oerp61.jpeg', ], + 'depends': [ + 'mail', + ], + 'init_xml': [], + 'data': [ + 'wizard/attachments_wizard_view.xml', + ], + 'demo_xml': [], + 'installable': True, + 'application': False, + 'certificate': '', + 'auto_install': False, +} diff --git a/tko_base_download_multiple_attachments/wizard/__init__.py b/tko_base_download_multiple_attachments/wizard/__init__.py new file mode 100755 index 0000000..a3396dd --- /dev/null +++ b/tko_base_download_multiple_attachments/wizard/__init__.py @@ -0,0 +1 @@ +import attachments_wizard_view \ No newline at end of file diff --git a/tko_base_download_multiple_attachments/wizard/attachments_wizard_view.py b/tko_base_download_multiple_attachments/wizard/attachments_wizard_view.py new file mode 100755 index 0000000..ea6c822 --- /dev/null +++ b/tko_base_download_multiple_attachments/wizard/attachments_wizard_view.py @@ -0,0 +1,118 @@ +import ntpath +import os +import shutil +import tarfile +from random import randint + +from openerp.exceptions import ValidationError +from openerp import api, fields, models, _ +import logging +_logger = logging.getLogger(__name__) + +class Attachments(models.Model): + _inherit = "ir.attachment" + + active = fields.Boolean('Active?', default=True) + + +class download_attachments(models.TransientModel): + _name = 'download.attachments' + + attachment = fields.Binary('Attachement', readonly=True) + filename = fields.Char('File Name') + active_model = fields.Char('Active Model') + active_id = fields.Char('Active ID') + attachment_ids = fields.Many2many('ir.attachment', string='Attachments') + + @api.model + def default_get(self, fields): + active_model = self._context.get('active_model') + active_id = self._context.get('active_id') + if active_id and active_model: + try: + fname = self.env[active_model].browse(active_id).name + except ValueError: + pass + if not fname: + fname = 'odoo' + res = super(download_attachments, self).default_get(fields) + return res + + @api.multi + def download_attachments(self): + config_obj = self.env['ir.config_parameter'] + attachment_obj = self.env['ir.attachment'] + + active_ids = self._context.get('active_ids') + attachment_ids = active_ids + ids = self._ids + filestore_path = os.path.join(attachment_obj._filestore(), '') + attachment_dir = filestore_path + 'attachments' + # create directory and remove its content + if not os.path.exists(attachment_dir): + os.makedirs(attachment_dir) + else: + shutil.rmtree(attachment_dir) + os.makedirs(attachment_dir) + file_name = 'attachments' + if isinstance(ids, int): + ids = [ids] + wzrd_obj = self + config_ids = config_obj.search([('key', '=', 'web.base.url')]) + self.env['ir.attachment'].search([('active','=',False)]).unlink() + + + if len(config_ids): + value = config_ids[0].value + active_model = 'ir.attachment' # wzrd_obj.active_model + active_id = wzrd_obj.id + # tar_dir = attachment_dir + '/' + file_name + tar_dir = os.path.join(attachment_dir, file_name) + tFile = tarfile.open(tar_dir, 'w:gz') + if value and active_id and active_model: + # change working directory otherwise file is tared with all its parent directories + original_dir = os.getcwd() + filter_attachments = [] + for attach in attachment_obj.browse(attachment_ids): + if attach.active: + filter_attachments.append(attach.id) + if not filter_attachments: + raise ValidationError(_("No attachment to download")) + for attachment in attachment_obj.browse(filter_attachments): + # to get full path of file + full_path = attachment_obj._full_path(attachment.store_fname) + attachment_name = attachment.datas_fname + new_file = os.path.join(attachment_dir, attachment_name) + # copying in a new directory with a new name + # shutil.copyfile(full_path, new_file) + try: + shutil.copy2(full_path, new_file) + except: + pass + #raise UserError(_("Not Proper file name to download")) + head, tail = ntpath.split(new_file) + # change working directory otherwise it tars all parent directory + os.chdir(head) + try: + tFile.add(tail) + except: + _logger.error("No such file was found : %s" %tail) + tFile.close() + os.chdir(original_dir) + values = { + 'name': file_name + '.tar.gz', + 'datas_fname': file_name + '.tar.gz', + 'res_model': 'download.attachments', + 'res_id': ids[0], + 'res_name': 'test....', + 'type': 'binary', + 'store_fname': 'attachments/attachments', + 'active' : False, + } + attachment_id = self.env['ir.attachment'].create(values) + url = "%s/web/binary/saveas?model=ir.attachment&field=datas&filename_field=name&id=%s" % (value, attachment_id.id) + return { + 'type': 'ir.actions.act_url', + 'url': url, + 'nodestroy': False, + } diff --git a/tko_base_download_multiple_attachments/wizard/attachments_wizard_view.xml b/tko_base_download_multiple_attachments/wizard/attachments_wizard_view.xml new file mode 100755 index 0000000..1926dcf --- /dev/null +++ b/tko_base_download_multiple_attachments/wizard/attachments_wizard_view.xml @@ -0,0 +1,44 @@ + + + + + Download Attachments + download.attachments + +
+

Cliquer sur Télécharger pour télécharger les documents sélectionnés

+ + + + + + +
+
+ + + +
+
+ + + Télécharger les documents + download.attachments + form + form + new + + + +
+