feat: add delivery more plateform independant (#362)

This commit is contained in:
Vincent Renaville
2022-04-08 14:27:56 +02:00
committed by GitHub
co-authored by GitHub
parent f99d03dd0e
commit de37e27368
5 changed files with 86 additions and 0 deletions
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# © 2022 Vincent Renaville (Camptocamp)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import shipping_label
@@ -0,0 +1,51 @@
# -*- 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 external stroage 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):
for label in self:
values = label.attachment_id._data_get("datas", None)
label.datas = values.get(label.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
for label in self:
location = label.attachment_id._storage()
if (
location == label.attachment_id._get_stores()
and self.attachment_id._save_in_db_anyway()
):
# compute the fields that depend on datas
value = label.datas
bin_data = value and value.decode("base64") or ""
vals = {
"file_size": len(bin_data),
"checksum": self.attachment_id._compute_checksum(bin_data),
"db_datas": value,
# we seriously don't need index content on those fields
"index_content": False,
"store_fname": False,
}
fname = label.store_fname
# write as superuser, as user probably does not
# have write access
super(ShippingLabel, label.sudo()).write(vals)
if fname:
self.attachment_id._file_delete(fname)
continue
self.attachment_id._data_set("datas", label.datas, None)