diff --git a/delivery_carrier_label_s3/README.rst b/delivery_carrier_label_s3/README.rst new file mode 100644 index 0000000..85e04d6 --- /dev/null +++ b/delivery_carrier_label_s3/README.rst @@ -0,0 +1,4 @@ +Shipping label S3 +----------------- + +* Add s3 location management for shipping label. diff --git a/delivery_carrier_label_s3/__init__.py b/delivery_carrier_label_s3/__init__.py new file mode 100644 index 0000000..559c7db --- /dev/null +++ b/delivery_carrier_label_s3/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2017 Vincent Renaville (Camptocamp) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/delivery_carrier_label_s3/__openerp__.py b/delivery_carrier_label_s3/__openerp__.py new file mode 100644 index 0000000..2b82ad6 --- /dev/null +++ b/delivery_carrier_label_s3/__openerp__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# © 2017 Vincent Renaville (Camptocamp) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'S3 - Shipping Label', + 'version': '9.0.1.0.0', + 'author': 'Camptocamp', + 'license': 'AGPL-3', + 'category': 'Knowledge Management', + 'website': 'http://www.camptocamp.com', + 'images': [], + 'depends': [ + 'base_delivery_carrier_label', + 'attachment_s3', + ], + 'data': [ + ], + 'test': [], + 'installable': True, + 'auto_install': True, +} diff --git a/delivery_carrier_label_s3/models/__init__.py b/delivery_carrier_label_s3/models/__init__.py new file mode 100644 index 0000000..e88b3fd --- /dev/null +++ b/delivery_carrier_label_s3/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# © 2017 Vincent Renaville (Camptocamp) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import shipping_label diff --git a/delivery_carrier_label_s3/models/shipping_label.py b/delivery_carrier_label_s3/models/shipping_label.py new file mode 100644 index 0000000..6b4f272 --- /dev/null +++ b/delivery_carrier_label_s3/models/shipping_label.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +from openerp import api, fields, models + + +class ShippingLabel(models.Model): + """ Inherit of shipping label to store datas + in the right location if S3 activated """ + + _inherit = 'shipping.label' + + datas = fields.Binary( + compute='_compute_datas', + inverse='_inverse_datas', + string='File Content', + nodrop=True, + ) + + @api.depends('store_fname', 'db_datas') + def _compute_datas(self): + values = self._data_get('datas', None) + for attach in self: + attach.datas = values.get(attach.id) + + def _inverse_datas(self): + # override in order to store files that need fast access, + # we keep them in the database instead of the object storage + location = self.attachment_id._storage() + for attach in self: + if location == 's3' and self._store_in_db_when_s3(): + # compute the fields that depend on datas + value = attach.datas + bin_data = value and value.decode('base64') or '' + vals = { + 'file_size': len(bin_data), + 'checksum': self._compute_checksum(bin_data), + 'db_datas': value, + # we seriously don't need index content on those fields + 'index_content': False, + 'store_fname': False, + } + fname = attach.store_fname + # write as superuser, as user probably does not + # have write access + super(ShippingLabel, attach.sudo()).write(vals) + if fname: + self._file_delete(fname) + continue + self.attachment_id._data_set('datas', attach.datas, None) diff --git a/oca_dependencies.txt b/oca_dependencies.txt index 9c8c917..8c9191e 100644 --- a/oca_dependencies.txt +++ b/oca_dependencies.txt @@ -1 +1,2 @@ server-tools +delivery-carrier